Merge "Automatically dismiss SIM combination warnings and selection dialogs." into rvc-qpr-dev
diff --git a/services/core/java/com/android/server/slice/SliceManagerService.java b/services/core/java/com/android/server/slice/SliceManagerService.java
index 7c8c494..c49720f 100644
--- a/services/core/java/com/android/server/slice/SliceManagerService.java
+++ b/services/core/java/com/android/server/slice/SliceManagerService.java
@@ -251,11 +251,6 @@
}
}
}
- // Fallback to allowing uri permissions through.
- if (mContext.checkUriPermission(uri, pid, uid, Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
- == PERMISSION_GRANTED) {
- return PackageManager.PERMISSION_GRANTED;
- }
return PackageManager.PERMISSION_DENIED;
}
diff --git a/services/core/java/com/android/server/storage/DeviceStorageMonitorService.java b/services/core/java/com/android/server/storage/DeviceStorageMonitorService.java
index 734b718..7ae2963 100644
--- a/services/core/java/com/android/server/storage/DeviceStorageMonitorService.java
+++ b/services/core/java/com/android/server/storage/DeviceStorageMonitorService.java
@@ -491,8 +491,8 @@
com.android.internal.R.string.low_internal_storage_view_text);
}
- PendingIntent intent = PendingIntent.getActivityAsUser(context, 0, lowMemIntent, 0,
- null, UserHandle.CURRENT);
+ PendingIntent intent = PendingIntent.getActivityAsUser(context, 0, lowMemIntent,
+ PendingIntent.FLAG_IMMUTABLE, null, UserHandle.CURRENT);
Notification notification =
new Notification.Builder(context, SystemNotificationChannels.ALERTS)
.setSmallIcon(com.android.internal.R.drawable.stat_notify_disk_full)
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index a70e30f..adf0b44 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -5728,7 +5728,7 @@
}
if (animatingRecents != null && animatingRecents == mFixedRotationLaunchingApp
- && animatingRecents.isVisible()) {
+ && animatingRecents.isVisible() && animatingRecents != topRunningActivity()) {
// The recents activity should be going to be invisible (switch to another app or
// return to original top). Only clear the top launching record without finishing
// the transform immediately because it won't affect display orientation. And before
diff --git a/services/tests/uiservicestests/src/com/android/server/slice/SliceManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/slice/SliceManagerServiceTest.java
index a443695..dd0c162 100644
--- a/services/tests/uiservicestests/src/com/android/server/slice/SliceManagerServiceTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/slice/SliceManagerServiceTest.java
@@ -75,7 +75,6 @@
LocalServices.addService(UsageStatsManagerInternal.class,
mock(UsageStatsManagerInternal.class));
mContext.addMockSystemService(AppOpsManager.class, mock(AppOpsManager.class));
- mContext.getTestablePermissions().setPermission(TEST_URI, PERMISSION_GRANTED);
mContextSpy = spy(mContext);
mService = spy(new SliceManagerService(mContextSpy, TestableLooper.get(this).getLooper()));
@@ -90,6 +89,7 @@
@Test
public void testAddPinCreatesPinned() throws RemoteException {
+ grantSlicePermission();
doReturn("pkg").when(mService).getDefaultHome(anyInt());
mService.pinSlice("pkg", TEST_URI, EMPTY_SPECS, mToken);
@@ -99,6 +99,7 @@
@Test
public void testRemovePinDestroysPinned() throws RemoteException {
+ grantSlicePermission();
doReturn("pkg").when(mService).getDefaultHome(anyInt());
mService.pinSlice("pkg", TEST_URI, EMPTY_SPECS, mToken);
@@ -130,11 +131,13 @@
@Test(expected = IllegalStateException.class)
public void testNoPinThrow() throws Exception {
+ grantSlicePermission();
mService.getPinnedSpecs(TEST_URI, "pkg");
}
@Test
public void testGetPinnedSpecs() throws Exception {
+ grantSlicePermission();
SliceSpec[] specs = new SliceSpec[] {
new SliceSpec("Something", 1) };
mService.pinSlice("pkg", TEST_URI, specs, mToken);
@@ -143,4 +146,10 @@
assertEquals(specs, mService.getPinnedSpecs(TEST_URI, "pkg"));
}
+ private void grantSlicePermission() {
+ doReturn(PERMISSION_GRANTED).when(mService).checkSlicePermission(
+ eq(TEST_URI), anyString(), anyString(), anyInt(), anyInt(), any());
+ doReturn(PERMISSION_GRANTED).when(mService).checkAccess(
+ anyString(), eq(TEST_URI), anyInt(), anyInt());
+ }
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationControllerTest.java b/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationControllerTest.java
index cfc50b5..d99fd0f 100644
--- a/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationControllerTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationControllerTest.java
@@ -393,23 +393,25 @@
// Simulate giving up the swipe up gesture to keep the original activity as top.
mController.cleanupAnimation(REORDER_MOVE_TO_ORIGINAL_POSITION);
// The rotation transform should be cleared after updating orientation with display.
- assertFalse(activity.hasFixedRotationTransform());
- assertFalse(mDefaultDisplay.hasTopFixedRotationLaunchingApp());
+ assertTopFixedRotationLaunchingAppCleared(activity);
// Simulate swiping up recents (home) in different rotation.
final ActivityRecord home = mDefaultDisplay.getDefaultTaskDisplayArea().getHomeActivity();
- mDefaultDisplay.setFixedRotationLaunchingApp(home, (mDefaultDisplay.getRotation() + 1) % 4);
- mController = new RecentsAnimationController(mWm, mMockRunner, mAnimationCallbacks,
- mDefaultDisplay.getDisplayId());
- initializeRecentsAnimationController(mController, home);
- assertTrue(home.hasFixedRotationTransform());
+ startRecentsInDifferentRotation(home);
+ // If the recents activity becomes the top running activity (e.g. the original top activity
+ // is either finishing or moved to back during recents animation), the display orientation
+ // will be determined by it so the fixed rotation must be cleared.
+ activity.finishing = true;
+ mController.cleanupAnimation(REORDER_MOVE_TO_ORIGINAL_POSITION);
+ assertTopFixedRotationLaunchingAppCleared(home);
+
+ startRecentsInDifferentRotation(home);
// Assume recents activity becomes invisible for some reason (e.g. screen off).
home.setVisible(false);
mController.cleanupAnimation(REORDER_MOVE_TO_ORIGINAL_POSITION);
// Although there won't be a transition finish callback, the fixed rotation must be cleared.
- assertFalse(home.hasFixedRotationTransform());
- assertFalse(mDefaultDisplay.hasTopFixedRotationLaunchingApp());
+ assertTopFixedRotationLaunchingAppCleared(home);
}
@Test
@@ -503,6 +505,21 @@
return homeActivity;
}
+ private void startRecentsInDifferentRotation(ActivityRecord recentsActivity) {
+ final DisplayContent displayContent = recentsActivity.mDisplayContent;
+ displayContent.setFixedRotationLaunchingApp(recentsActivity,
+ (displayContent.getRotation() + 1) % 4);
+ mController = new RecentsAnimationController(mWm, mMockRunner, mAnimationCallbacks,
+ displayContent.getDisplayId());
+ initializeRecentsAnimationController(mController, recentsActivity);
+ assertTrue(recentsActivity.hasFixedRotationTransform());
+ }
+
+ private static void assertTopFixedRotationLaunchingAppCleared(ActivityRecord activity) {
+ assertFalse(activity.hasFixedRotationTransform());
+ assertFalse(activity.mDisplayContent.hasTopFixedRotationLaunchingApp());
+ }
+
private static void initializeRecentsAnimationController(RecentsAnimationController controller,
ActivityRecord activity) {
controller.initialize(activity.getActivityType(), new SparseBooleanArray(), activity);