From 2445037bb9a98fd00bfa14c5b99b09026e8ffed7 Mon Sep 17 00:00:00 2001 From: Julia Reynolds Date: Tue, 2 May 2017 15:04:34 -0400 Subject: [PATCH] Sorting and intrusiveness updates - The intrusiveness extractor needs to know about channels - Allow comparisons by contact affinity even in the min bucket. Test: cts-verifier, attention management test Bug: 36197567 Change-Id: I1bb53d758fc2334aad5e380620fc6e39a724195c --- .../notification/NotificationComparator.java | 11 +++++++++-- .../NotificationIntrusivenessExtractor.java | 14 ++++++++------ 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/services/core/java/com/android/server/notification/NotificationComparator.java b/services/core/java/com/android/server/notification/NotificationComparator.java index 63647ffa2193e..8caaaa16d2a1b 100644 --- a/services/core/java/com/android/server/notification/NotificationComparator.java +++ b/services/core/java/com/android/server/notification/NotificationComparator.java @@ -73,11 +73,13 @@ public class NotificationComparator // Next: sufficiently import person to person communication boolean leftPeople = isImportantPeople(left); boolean rightPeople = isImportantPeople(right); + final int contactAffinityComparison = + Float.compare(left.getContactAffinity(), right.getContactAffinity()); if (leftPeople && rightPeople){ // by contact proximity, close to far. if same proximity, check further fields. - if (Float.compare(left.getContactAffinity(), right.getContactAffinity()) != 0) { - return -1 * Float.compare(left.getContactAffinity(), right.getContactAffinity()); + if (contactAffinityComparison != 0) { + return -1 * contactAffinityComparison; } } else if (leftPeople != rightPeople) { // People, messaging higher than non-messaging @@ -91,6 +93,11 @@ public class NotificationComparator return -1 * Integer.compare(leftImportance, rightImportance); } + // by contact proximity, close to far. if same proximity, check further fields. + if (contactAffinityComparison != 0) { + return -1 * contactAffinityComparison; + } + // Whether or not the notification can bypass DND. final int leftPackagePriority = left.getPackagePriority(); final int rightPackagePriority = right.getPackagePriority(); diff --git a/services/core/java/com/android/server/notification/NotificationIntrusivenessExtractor.java b/services/core/java/com/android/server/notification/NotificationIntrusivenessExtractor.java index 31ed35022cc6a..f92bf3dd44271 100644 --- a/services/core/java/com/android/server/notification/NotificationIntrusivenessExtractor.java +++ b/services/core/java/com/android/server/notification/NotificationIntrusivenessExtractor.java @@ -19,6 +19,7 @@ package com.android.server.notification; import android.app.Notification; import android.app.NotificationManager; import android.content.Context; +import android.net.Uri; import android.service.notification.NotificationListenerService; import android.util.Log; import android.util.Slog; @@ -46,12 +47,13 @@ public class NotificationIntrusivenessExtractor implements NotificationSignalExt } if (record.getImportance() >= NotificationManager.IMPORTANCE_DEFAULT) { - final Notification notification = record.getNotification(); - if ((notification.defaults & Notification.DEFAULT_VIBRATE) != 0 || - notification.vibrate != null || - (notification.defaults & Notification.DEFAULT_SOUND) != 0 || - notification.sound != null || - notification.fullScreenIntent != null) { + if (record.getSound() != null && record.getSound() != Uri.EMPTY) { + record.setRecentlyIntrusive(true); + } + if (record.getVibration() != null) { + record.setRecentlyIntrusive(true); + } + if (record.getNotification().fullScreenIntent != null) { record.setRecentlyIntrusive(true); } }