Loading core/java/com/android/internal/util/NotificationMessagingUtil.java +15 −8 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.internal.util; import android.annotation.Nullable; import android.app.Notification; import android.app.NotificationManager; import android.content.Context; Loading @@ -39,10 +40,12 @@ public class NotificationMessagingUtil { private static final String DEFAULT_SMS_APP_SETTING = Settings.Secure.SMS_DEFAULT_APPLICATION; private final Context mContext; private SparseArray<String> mDefaultSmsApp = new SparseArray<>(); private final SparseArray<String> mDefaultSmsApp = new SparseArray<>(); private final Object mStateLock; public NotificationMessagingUtil(Context context) { public NotificationMessagingUtil(Context context, @Nullable Object stateLock) { mContext = context; mStateLock = stateLock != null ? stateLock : new Object(); mContext.getContentResolver().registerContentObserver( Settings.Secure.getUriFor(DEFAULT_SMS_APP_SETTING), false, mSmsContentObserver); } Loading @@ -63,16 +66,20 @@ public class NotificationMessagingUtil { private boolean isDefaultMessagingApp(StatusBarNotification sbn) { final int userId = sbn.getUserId(); if (userId == UserHandle.USER_NULL || userId == UserHandle.USER_ALL) return false; synchronized (mStateLock) { if (mDefaultSmsApp.get(userId) == null) { cacheDefaultSmsApp(userId); } return Objects.equals(mDefaultSmsApp.get(userId), sbn.getPackageName()); } } private void cacheDefaultSmsApp(int userId) { mDefaultSmsApp.put(userId, Settings.Secure.getStringForUser( mContext.getContentResolver(), Settings.Secure.SMS_DEFAULT_APPLICATION, userId)); String smsApp = Settings.Secure.getStringForUser(mContext.getContentResolver(), Settings.Secure.SMS_DEFAULT_APPLICATION, userId); synchronized (mStateLock) { mDefaultSmsApp.put(userId, smsApp); } } private final ContentObserver mSmsContentObserver = new ContentObserver( Loading packages/SystemUI/src/com/android/systemui/dagger/AndroidInternalsModule.java +3 −3 Original line number Diff line number Diff line Loading @@ -24,11 +24,11 @@ import com.android.internal.logging.UiEventLoggerImpl; import com.android.internal.util.NotificationMessagingUtil; import com.android.internal.widget.LockPatternUtils; import javax.inject.Singleton; import dagger.Module; import dagger.Provides; import javax.inject.Singleton; /** * Provides items imported from com.android.internal. */ Loading @@ -51,7 +51,7 @@ public class AndroidInternalsModule { /** */ @Provides public NotificationMessagingUtil provideNotificationMessagingUtil(Context context) { return new NotificationMessagingUtil(context); return new NotificationMessagingUtil(context, null); } /** Provides an instance of {@link com.android.internal.logging.UiEventLogger} */ Loading services/core/java/com/android/server/notification/NotificationComparator.java +16 −5 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.telecom.TelecomManager; import com.android.internal.os.BackgroundThread; import com.android.internal.util.NotificationMessagingUtil; import java.util.Comparator; Loading @@ -33,18 +34,23 @@ import java.util.Objects; /** * Sorts notifications individually into attention-relevant order. */ public class NotificationComparator implements Comparator<NotificationRecord> { class NotificationComparator implements Comparator<NotificationRecord> { private final Context mContext; private final NotificationMessagingUtil mMessagingUtil; private String mDefaultPhoneApp; /** * Lock that must be held during a sort() call that uses this {@link Comparator}, AND to make * any changes to the state of this object that could affect the results of {@link #compare}. */ public final Object mStateLock = new Object(); public NotificationComparator(Context context) { mContext = context; mContext.registerReceiver(mPhoneAppBroadcastReceiver, new IntentFilter(TelecomManager.ACTION_DEFAULT_DIALER_CHANGED)); mMessagingUtil = new NotificationMessagingUtil(mContext); mMessagingUtil = new NotificationMessagingUtil(mContext, mStateLock); } @Override Loading Loading @@ -212,8 +218,13 @@ public class NotificationComparator private final BroadcastReceiver mPhoneAppBroadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { BackgroundThread.getExecutor().execute(() -> { synchronized (mStateLock) { mDefaultPhoneApp = intent.getStringExtra(TelecomManager.EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME); intent.getStringExtra( TelecomManager.EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME); } }); } }; } services/core/java/com/android/server/notification/RankingHelper.java +5 −2 Original line number Diff line number Diff line Loading @@ -103,8 +103,11 @@ public class RankingHelper { notificationList.get(i).setGlobalSortKey(null); } // rank each record individually Collections.sort(notificationList, mPreliminaryComparator); // Rank each record individually. // Lock comparator state for consistent compare() results. synchronized (mPreliminaryComparator.mStateLock) { notificationList.sort(mPreliminaryComparator); } synchronized (mProxyByGroupTmp) { // record individual ranking result and nominate proxies for each group Loading services/core/java/com/android/server/notification/ZenModeFiltering.java +1 −1 Original line number Diff line number Diff line Loading @@ -55,7 +55,7 @@ public class ZenModeFiltering { public ZenModeFiltering(Context context) { mContext = context; mMessagingUtil = new NotificationMessagingUtil(mContext); mMessagingUtil = new NotificationMessagingUtil(mContext, null); } public ZenModeFiltering(Context context, NotificationMessagingUtil messagingUtil) { Loading Loading
core/java/com/android/internal/util/NotificationMessagingUtil.java +15 −8 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.internal.util; import android.annotation.Nullable; import android.app.Notification; import android.app.NotificationManager; import android.content.Context; Loading @@ -39,10 +40,12 @@ public class NotificationMessagingUtil { private static final String DEFAULT_SMS_APP_SETTING = Settings.Secure.SMS_DEFAULT_APPLICATION; private final Context mContext; private SparseArray<String> mDefaultSmsApp = new SparseArray<>(); private final SparseArray<String> mDefaultSmsApp = new SparseArray<>(); private final Object mStateLock; public NotificationMessagingUtil(Context context) { public NotificationMessagingUtil(Context context, @Nullable Object stateLock) { mContext = context; mStateLock = stateLock != null ? stateLock : new Object(); mContext.getContentResolver().registerContentObserver( Settings.Secure.getUriFor(DEFAULT_SMS_APP_SETTING), false, mSmsContentObserver); } Loading @@ -63,16 +66,20 @@ public class NotificationMessagingUtil { private boolean isDefaultMessagingApp(StatusBarNotification sbn) { final int userId = sbn.getUserId(); if (userId == UserHandle.USER_NULL || userId == UserHandle.USER_ALL) return false; synchronized (mStateLock) { if (mDefaultSmsApp.get(userId) == null) { cacheDefaultSmsApp(userId); } return Objects.equals(mDefaultSmsApp.get(userId), sbn.getPackageName()); } } private void cacheDefaultSmsApp(int userId) { mDefaultSmsApp.put(userId, Settings.Secure.getStringForUser( mContext.getContentResolver(), Settings.Secure.SMS_DEFAULT_APPLICATION, userId)); String smsApp = Settings.Secure.getStringForUser(mContext.getContentResolver(), Settings.Secure.SMS_DEFAULT_APPLICATION, userId); synchronized (mStateLock) { mDefaultSmsApp.put(userId, smsApp); } } private final ContentObserver mSmsContentObserver = new ContentObserver( Loading
packages/SystemUI/src/com/android/systemui/dagger/AndroidInternalsModule.java +3 −3 Original line number Diff line number Diff line Loading @@ -24,11 +24,11 @@ import com.android.internal.logging.UiEventLoggerImpl; import com.android.internal.util.NotificationMessagingUtil; import com.android.internal.widget.LockPatternUtils; import javax.inject.Singleton; import dagger.Module; import dagger.Provides; import javax.inject.Singleton; /** * Provides items imported from com.android.internal. */ Loading @@ -51,7 +51,7 @@ public class AndroidInternalsModule { /** */ @Provides public NotificationMessagingUtil provideNotificationMessagingUtil(Context context) { return new NotificationMessagingUtil(context); return new NotificationMessagingUtil(context, null); } /** Provides an instance of {@link com.android.internal.logging.UiEventLogger} */ Loading
services/core/java/com/android/server/notification/NotificationComparator.java +16 −5 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.telecom.TelecomManager; import com.android.internal.os.BackgroundThread; import com.android.internal.util.NotificationMessagingUtil; import java.util.Comparator; Loading @@ -33,18 +34,23 @@ import java.util.Objects; /** * Sorts notifications individually into attention-relevant order. */ public class NotificationComparator implements Comparator<NotificationRecord> { class NotificationComparator implements Comparator<NotificationRecord> { private final Context mContext; private final NotificationMessagingUtil mMessagingUtil; private String mDefaultPhoneApp; /** * Lock that must be held during a sort() call that uses this {@link Comparator}, AND to make * any changes to the state of this object that could affect the results of {@link #compare}. */ public final Object mStateLock = new Object(); public NotificationComparator(Context context) { mContext = context; mContext.registerReceiver(mPhoneAppBroadcastReceiver, new IntentFilter(TelecomManager.ACTION_DEFAULT_DIALER_CHANGED)); mMessagingUtil = new NotificationMessagingUtil(mContext); mMessagingUtil = new NotificationMessagingUtil(mContext, mStateLock); } @Override Loading Loading @@ -212,8 +218,13 @@ public class NotificationComparator private final BroadcastReceiver mPhoneAppBroadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { BackgroundThread.getExecutor().execute(() -> { synchronized (mStateLock) { mDefaultPhoneApp = intent.getStringExtra(TelecomManager.EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME); intent.getStringExtra( TelecomManager.EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME); } }); } }; }
services/core/java/com/android/server/notification/RankingHelper.java +5 −2 Original line number Diff line number Diff line Loading @@ -103,8 +103,11 @@ public class RankingHelper { notificationList.get(i).setGlobalSortKey(null); } // rank each record individually Collections.sort(notificationList, mPreliminaryComparator); // Rank each record individually. // Lock comparator state for consistent compare() results. synchronized (mPreliminaryComparator.mStateLock) { notificationList.sort(mPreliminaryComparator); } synchronized (mProxyByGroupTmp) { // record individual ranking result and nominate proxies for each group Loading
services/core/java/com/android/server/notification/ZenModeFiltering.java +1 −1 Original line number Diff line number Diff line Loading @@ -55,7 +55,7 @@ public class ZenModeFiltering { public ZenModeFiltering(Context context) { mContext = context; mMessagingUtil = new NotificationMessagingUtil(mContext); mMessagingUtil = new NotificationMessagingUtil(mContext, null); } public ZenModeFiltering(Context context, NotificationMessagingUtil messagingUtil) { Loading