Merge "Add hidden ATM method to use in TaskFragmentOrganizer" into sc-v2-dev

This commit is contained in:
TreeHugger Robot
2021-07-21 04:24:25 +00:00
committed by Android (Google) Code Review
7 changed files with 44 additions and 7 deletions

View File

@@ -16,6 +16,7 @@
package android.app;
import android.annotation.Nullable;
import android.content.ComponentName;
import android.content.Intent;
import android.content.res.Configuration;
@@ -205,6 +206,18 @@ public class ActivityClient {
}
}
/**
* Returns the activity token below in the same task if it belongs to the same process.
*/
@Nullable
public IBinder getActivityTokenBelow(IBinder activityToken) {
try {
return getActivityClientController().getActivityTokenBelow(activityToken);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
ComponentName getCallingActivity(IBinder token) {
try {
return getActivityClientController().getCallingActivity(token);

View File

@@ -70,6 +70,7 @@ interface IActivityClientController {
boolean willActivityBeVisible(in IBinder token);
int getDisplayId(in IBinder activityToken);
int getTaskForActivity(in IBinder token, in boolean onlyRoot);
IBinder getActivityTokenBelow(IBinder token);
ComponentName getCallingActivity(in IBinder token);
String getCallingPackage(in IBinder token);
int getLaunchedFromUid(in IBinder token);

View File

@@ -42,6 +42,7 @@ import static com.android.server.wm.ActivityTaskManagerService.TAG_SWITCH;
import static com.android.server.wm.ActivityTaskManagerService.enforceNotIsolatedCaller;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityTaskManager;
@@ -538,6 +539,27 @@ class ActivityClientController extends IActivityClientController.Stub {
}
}
@Override
@Nullable
public IBinder getActivityTokenBelow(IBinder activityToken) {
final long ident = Binder.clearCallingIdentity();
try {
synchronized (mGlobalLock) {
final ActivityRecord ar = ActivityRecord.isInAnyTask(activityToken);
if (ar == null) {
return null;
}
final ActivityRecord below = ar.getTask().getActivityBelow(ar);
if (below != null && below.getUid() == ar.getUid()) {
return below.appToken.asBinder();
}
}
} finally {
Binder.restoreCallingIdentity(ident);
}
return null;
}
@Override
public ComponentName getCallingActivity(IBinder token) {
synchronized (mGlobalLock) {

View File

@@ -6274,6 +6274,12 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
return null;
}
@Nullable
static ActivityRecord isInAnyTask(IBinder token) {
final ActivityRecord r = ActivityRecord.forTokenLocked(token);
return (r != null && r.isAttached()) ? r : null;
}
/**
* @return display id to which this record is attached,
* {@link android.view.Display#INVALID_DISPLAY} if not attached.

View File

@@ -872,7 +872,7 @@ class ActivityStarter {
ActivityRecord sourceRecord = null;
ActivityRecord resultRecord = null;
if (resultTo != null) {
sourceRecord = mRootWindowContainer.isInAnyTask(resultTo);
sourceRecord = ActivityRecord.isInAnyTask(resultTo);
if (DEBUG_RESULTS) {
Slog.v(TAG_RESULTS, "Will send result to " + resultTo + " " + sourceRecord);
}

View File

@@ -1540,7 +1540,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
sourceToken = resultTo;
}
sourceRecord = mRootWindowContainer.isInAnyTask(sourceToken);
sourceRecord = ActivityRecord.isInAnyTask(sourceToken);
if (sourceRecord == null) {
throw new SecurityException("Called with bad activity token: " + sourceToken);
}

View File

@@ -3516,11 +3516,6 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
return task;
}
ActivityRecord isInAnyTask(IBinder token) {
final ActivityRecord r = ActivityRecord.forTokenLocked(token);
return (r != null && r.isDescendantOf(this)) ? r : null;
}
@VisibleForTesting
void getRunningTasks(int maxNum, List<ActivityManager.RunningTaskInfo> list,
int flags, int callingUid, ArraySet<Integer> profileIds) {