diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2019-08-14 00:23:26 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2019-08-14 00:23:26 +0000 |
commit | c0fbdf45d7c9826533186751a03c27e500cac78e (patch) | |
tree | f63bdbf75bc7569b7d2587dac234a95965506a79 | |
parent | 57bb140be9e48cf08acba131f7463e461777bb8e (diff) | |
parent | ec177f86e1dbfd81bc2374e6214153028ebe0c3b (diff) | |
download | base-c0fbdf45d7c9826533186751a03c27e500cac78e.tar.gz |
Merge cherrypicks of [9193293, 9193352, 9193734, 9193641, 9192591, 9193630] into qt-releaseandroid-10.0.0_r2
Change-Id: I34f06d8277b5d051cbe3f67a8c8512dbbe297a39
3 files changed, 79 insertions, 3 deletions
diff --git a/core/java/android/app/Instrumentation.java b/core/java/android/app/Instrumentation.java index 41733b3af058..9720e9f47f83 100644 --- a/core/java/android/app/Instrumentation.java +++ b/core/java/android/app/Instrumentation.java @@ -50,6 +50,7 @@ import android.view.InputDevice; import android.view.KeyCharacterMap; import android.view.KeyEvent; import android.view.MotionEvent; +import android.view.SurfaceControl; import android.view.ViewConfiguration; import android.view.Window; import android.view.WindowManagerGlobal; @@ -528,6 +529,12 @@ public class Instrumentation { } while (mWaitingActivities.contains(aw)); waitForEnterAnimationComplete(aw.activity); + + // Apply an empty transaction to ensure SF has a chance to update before + // the Activity is ready (b/138263890). + try (SurfaceControl.Transaction t = new SurfaceControl.Transaction()) { + t.apply(true); + } return aw.activity; } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationData.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationData.java index 13f8f1a6a548..fb100842f969 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationData.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationData.java @@ -422,7 +422,14 @@ public class NotificationData { } } - Collections.sort(mSortedAndFiltered, mRankingComparator); + if (mSortedAndFiltered.size() == 1) { + // HACK: We need the comparator to run on all children in order to set the + // isHighPriority field. If there is only one child, then the comparison won't be run, + // so we have to trigger it manually. Get rid of this code as soon as possible. + mRankingComparator.compare(mSortedAndFiltered.get(0), mSortedAndFiltered.get(0)); + } else { + Collections.sort(mSortedAndFiltered, mRankingComparator); + } } public void dump(PrintWriter pw, String indent) { diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationDataTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationDataTest.java index 6e0ddbf0cc46..f629757e4c68 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationDataTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationDataTest.java @@ -23,6 +23,7 @@ import static android.app.Notification.CATEGORY_CALL; import static android.app.Notification.CATEGORY_EVENT; import static android.app.Notification.CATEGORY_MESSAGE; import static android.app.Notification.CATEGORY_REMINDER; +import static android.app.NotificationManager.IMPORTANCE_DEFAULT; import static android.app.NotificationManager.IMPORTANCE_LOW; import static android.app.NotificationManager.IMPORTANCE_MIN; @@ -62,6 +63,8 @@ import android.testing.TestableLooper; import android.testing.TestableLooper.RunWithLooper; import android.util.ArraySet; +import androidx.test.filters.SmallTest; + import com.android.systemui.Dependency; import com.android.systemui.ForegroundServiceController; import com.android.systemui.InitController; @@ -84,8 +87,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import androidx.test.filters.SmallTest; - @SmallTest @RunWith(AndroidTestingRunner.class) @RunWithLooper @@ -113,6 +114,7 @@ public class NotificationDataTest extends SysuiTestCase { MockitoAnnotations.initMocks(this); when(mMockStatusBarNotification.getUid()).thenReturn(UID_NORMAL); when(mMockStatusBarNotification.cloneLight()).thenReturn(mMockStatusBarNotification); + when(mMockStatusBarNotification.getKey()).thenReturn("mock_key"); when(mMockPackageManager.checkUidPermission( eq(Manifest.permission.NOTIFICATION_DURING_SETUP), @@ -231,6 +233,7 @@ public class NotificationDataTest extends SysuiTestCase { Notification n = mMockStatusBarNotification.getNotification(); n.flags = Notification.FLAG_FOREGROUND_SERVICE; NotificationEntry entry = new NotificationEntry(mMockStatusBarNotification); + entry.setRow(mRow); mNotificationData.add(entry); Bundle override = new Bundle(); override.putInt(OVERRIDE_VIS_EFFECTS, 255); @@ -249,6 +252,7 @@ public class NotificationDataTest extends SysuiTestCase { n = nb.build(); when(mMockStatusBarNotification.getNotification()).thenReturn(n); NotificationEntry entry = new NotificationEntry(mMockStatusBarNotification); + entry.setRow(mRow); mNotificationData.add(entry); Bundle override = new Bundle(); override.putInt(OVERRIDE_VIS_EFFECTS, 255); @@ -262,6 +266,7 @@ public class NotificationDataTest extends SysuiTestCase { public void testIsExemptFromDndVisualSuppression_system() { initStatusBarNotification(false); NotificationEntry entry = new NotificationEntry(mMockStatusBarNotification); + entry.setRow(mRow); entry.mIsSystemNotification = true; mNotificationData.add(entry); Bundle override = new Bundle(); @@ -276,6 +281,7 @@ public class NotificationDataTest extends SysuiTestCase { public void testIsNotExemptFromDndVisualSuppression_hiddenCategories() { initStatusBarNotification(false); NotificationEntry entry = new NotificationEntry(mMockStatusBarNotification); + entry.setRow(mRow); entry.mIsSystemNotification = true; Bundle override = new Bundle(); override.putInt(OVERRIDE_VIS_EFFECTS, NotificationManager.Policy.SUPPRESSED_EFFECT_AMBIENT); @@ -528,6 +534,62 @@ public class NotificationDataTest extends SysuiTestCase { assertEquals(-1, mNotificationData.mRankingComparator.compare(a, b)); } + @Test + public void testSort_properlySetsIsTopBucket() { + + Notification notification = new Notification.Builder(mContext, "test") + .build(); + StatusBarNotification sbn = new StatusBarNotification( + "pkg", + "pkg", + 0, + "tag", + 0, + 0, + notification, + mContext.getUser(), + "", + 0); + + Bundle override = new Bundle(); + override.putInt(OVERRIDE_IMPORTANCE, IMPORTANCE_DEFAULT); + mNotificationData.rankingOverrides.put(sbn.getKey(), override); + + NotificationEntry entry = new NotificationEntry(sbn); + entry.setRow(mRow); + mNotificationData.add(entry); + + assertTrue(entry.isTopBucket()); + } + + @Test + public void testSort_properlySetsIsNotTopBucket() { + Notification notification = new Notification.Builder(mContext, "test") + .build(); + StatusBarNotification sbn = new StatusBarNotification( + "pkg", + "pkg", + 0, + "tag", + 0, + 0, + notification, + mContext.getUser(), + "", + 0); + + Bundle override = new Bundle(); + override.putInt(OVERRIDE_IMPORTANCE, IMPORTANCE_LOW); + mNotificationData.rankingOverrides.put(sbn.getKey(), override); + + NotificationEntry entry = new NotificationEntry(sbn); + entry.setRow(mRow); + + mNotificationData.add(entry); + + assertFalse(entry.isTopBucket()); + } + private void initStatusBarNotification(boolean allowDuringSetup) { Bundle bundle = new Bundle(); bundle.putBoolean(Notification.EXTRA_ALLOW_DURING_SETUP, allowDuringSetup); |