summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreeHugger Robot <treehugger-gerrit@google.com>2022-02-11 07:09:24 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2022-02-11 07:09:24 +0000
commit12fb3fb9f60cf3ea4713f1c47e8387d1a584ad22 (patch)
tree10e6cd860cde07d869d1d9d0347914e0088a6ef6
parentb0cb54d59601ee0b3e921cce242f09f48b8ae2fd (diff)
parent6b2d0885cb1cd2598d24808042d6a21e31f3ee1f (diff)
downloadbase-12fb3fb9f60cf3ea4713f1c47e8387d1a584ad22.tar.gz
Merge "Revert "[RESTRICT AUTOMERGE]Only allow system and same app to apply relinquishTaskIdentity"" into rvc-dev
-rw-r--r--services/core/java/com/android/server/wm/Task.java49
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/TaskRecordTests.java46
2 files changed, 11 insertions, 84 deletions
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java
index 9708c98fbb70..98df383579c9 100644
--- a/services/core/java/com/android/server/wm/Task.java
+++ b/services/core/java/com/android/server/wm/Task.java
@@ -119,7 +119,6 @@ import android.graphics.Point;
import android.graphics.Rect;
import android.os.Debug;
import android.os.IBinder;
-import android.os.Process;
import android.os.RemoteException;
import android.os.SystemClock;
import android.os.Trace;
@@ -228,11 +227,6 @@ class Task extends WindowContainer<WindowContainer> {
// Do not move the stack as a part of reparenting
static final int REPARENT_LEAVE_STACK_IN_PLACE = 2;
- /**
- * Used to identify if the activity that is installed from device's system image.
- */
- boolean mIsEffectivelySystemApp;
-
String affinity; // The affinity name for this task, or null; may change identity.
String rootAffinity; // Initial base affinity, or null; does not change from initial root.
String mWindowLayoutAffinity; // Launch param affinity of this task or null. Used when saving
@@ -483,24 +477,11 @@ class Task extends WindowContainer<WindowContainer> {
if (r.finishing) return false;
- if (mRoot == null || mRoot.finishing) {
- // Set this as the candidate root since it isn't finishing.
- mRoot = r;
- }
-
- final int uid = mRoot == r ? effectiveUid : r.info.applicationInfo.uid;
- if (ignoreRelinquishIdentity
- || (mRoot.info.flags & FLAG_RELINQUISH_TASK_IDENTITY) == 0
- || (mRoot.info.applicationInfo.uid != Process.SYSTEM_UID
- && !mRoot.info.applicationInfo.isSystemApp()
- && mRoot.info.applicationInfo.uid != uid)) {
- // No need to relinquish identity, end search.
- return true;
- }
-
- // Relinquish to next activity
+ // Set this as the candidate root since it isn't finishing.
mRoot = r;
- return false;
+
+ // Only end search if we are ignore relinquishing identity or we are not relinquishing.
+ return ignoreRelinquishIdentity || (r.info.flags & FLAG_RELINQUISH_TASK_IDENTITY) == 0;
}
}
@@ -948,20 +929,10 @@ class Task extends WindowContainer<WindowContainer> {
* @param info The activity info which could be different from {@code r.info} if set.
*/
void setIntent(ActivityRecord r, @Nullable Intent intent, @Nullable ActivityInfo info) {
- boolean updateIdentity = false;
- if (this.intent == null) {
- updateIdentity = true;
- } else if (!mNeverRelinquishIdentity) {
- final ActivityInfo activityInfo = info != null ? info : r.info;
- updateIdentity = (effectiveUid == Process.SYSTEM_UID || mIsEffectivelySystemApp
- || effectiveUid == activityInfo.applicationInfo.uid);
- }
- if (updateIdentity) {
- mCallingUid = r.launchedFromUid;
- mCallingPackage = r.launchedFromPackage;
- mCallingFeatureId = r.launchedFromFeatureId;
- setIntent(intent != null ? intent : r.intent, info != null ? info : r.info);
- }
+ mCallingUid = r.launchedFromUid;
+ mCallingPackage = r.launchedFromPackage;
+ mCallingFeatureId = r.launchedFromFeatureId;
+ setIntent(intent != null ? intent : r.intent, info != null ? info : r.info);
setLockTaskAuth(r);
final WindowContainer parent = getParent();
@@ -977,7 +948,8 @@ class Task extends WindowContainer<WindowContainer> {
private void setIntent(Intent _intent, ActivityInfo info) {
final boolean isLeaf = isLeafTask();
if (intent == null) {
- mNeverRelinquishIdentity = (info.flags & FLAG_RELINQUISH_TASK_IDENTITY) == 0;
+ mNeverRelinquishIdentity =
+ (info.flags & FLAG_RELINQUISH_TASK_IDENTITY) == 0;
} else if (mNeverRelinquishIdentity && isLeaf) {
return;
}
@@ -990,7 +962,6 @@ class Task extends WindowContainer<WindowContainer> {
rootAffinity = affinity;
}
effectiveUid = info.applicationInfo.uid;
- mIsEffectivelySystemApp = info.applicationInfo.isSystemApp();
stringName = null;
if (info.targetActivity == null) {
diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskRecordTests.java b/services/tests/wmtests/src/com/android/server/wm/TaskRecordTests.java
index 95784468efdd..fb24d868e970 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TaskRecordTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TaskRecordTests.java
@@ -591,14 +591,13 @@ public class TaskRecordTests extends ActivityTestsBase {
// one above as finishing.
final ActivityRecord activity0 = task.getBottomMostActivity();
activity0.info.flags |= FLAG_RELINQUISH_TASK_IDENTITY;
- task.effectiveUid = activity0.getUid();
final ActivityRecord activity1 = new ActivityBuilder(mService).setTask(task).build();
activity1.finishing = true;
new ActivityBuilder(mService).setTask(task).build();
assertEquals("The first non-finishing activity and non-relinquishing task identity "
+ "must be reported.", task.getChildAt(2), task.getRootActivity(
- false /*ignoreRelinquishIdentity*/, true /*setToBottomIfNone*/));
+ false /*ignoreRelinquishIdentity*/, true /*setToBottomIfNone*/));
}
/**
@@ -626,7 +625,6 @@ public class TaskRecordTests extends ActivityTestsBase {
// Set relinquishTaskIdentity for all activities in the task
final ActivityRecord activity0 = task.getBottomMostActivity();
activity0.info.flags |= FLAG_RELINQUISH_TASK_IDENTITY;
- task.effectiveUid = activity0.getUid();
final ActivityRecord activity1 = new ActivityBuilder(mService).setTask(task).build();
activity1.info.flags |= FLAG_RELINQUISH_TASK_IDENTITY;
@@ -779,7 +777,6 @@ public class TaskRecordTests extends ActivityTestsBase {
// Make the current root activity relinquish task identity
final ActivityRecord activity0 = task.getBottomMostActivity();
activity0.info.flags |= FLAG_RELINQUISH_TASK_IDENTITY;
- task.effectiveUid = activity0.getUid();
// Add an extra activity on top - this will be the new root
final ActivityRecord activity1 = new ActivityBuilder(mService).setTask(task).build();
// Add one more on top
@@ -874,47 +871,6 @@ public class TaskRecordTests extends ActivityTestsBase {
verify(task).setIntent(eq(activity0));
}
- /**
- * Test {@link Task#updateEffectiveIntent()} when activity with relinquishTaskIdentity but
- * another with different uid. This should make the task use the root activity when updating the
- * intent.
- */
- @Test
- public void testUpdateEffectiveIntent_relinquishingWithDifferentUid() {
- final ActivityRecord activity0 = new ActivityBuilder(mService)
- .setActivityFlags(FLAG_RELINQUISH_TASK_IDENTITY).setCreateTask(true).build();
- final Task task = activity0.getTask();
-
- // Add an extra activity on top
- new ActivityBuilder(mService).setUid(11).setTask(task).build();
-
- spyOn(task);
- task.updateEffectiveIntent();
- verify(task).setIntent(eq(activity0));
- }
-
- /**
- * Test {@link Task#updateEffectiveIntent()} with activities set as relinquishTaskIdentity.
- * This should make the task use the topmost activity when updating the intent.
- */
- @Test
- public void testUpdateEffectiveIntent_relinquishingMultipleActivities() {
- final ActivityRecord activity0 = new ActivityBuilder(mService)
- .setActivityFlags(FLAG_RELINQUISH_TASK_IDENTITY).setCreateTask(true).build();
- final Task task = activity0.getTask();
- task.effectiveUid = activity0.getUid();
- // Add an extra activity on top
- final ActivityRecord activity1 = new ActivityBuilder(mService).setTask(task).build();
- activity1.info.flags |= FLAG_RELINQUISH_TASK_IDENTITY;
-
- // Add an extra activity on top
- final ActivityRecord activity2 = new ActivityBuilder(mService).setTask(task).build();
-
- spyOn(task);
- task.updateEffectiveIntent();
- verify(task).setIntent(eq(activity2));
- }
-
@Test
public void testSaveLaunchingStateWhenConfigurationChanged() {
LaunchParamsPersister persister = mService.mStackSupervisor.mLaunchParamsPersister;