Merge "Add hidden ATM method to use in TaskFragmentOrganizer" into sc-v2-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
74ab64c0c3
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user