Merge "Do not resolve ActivityInfo in navigateUpTo" into tm-qpr-dev am: 576b93c7fe

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20110224

Change-Id: I0fd0adbd798da445f3f1bd35c0250136d22bf306
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
John Wu
2022-10-05 16:59:36 +00:00
committed by Automerger Merge Worker
7 changed files with 37 additions and 48 deletions

View File

@@ -8045,8 +8045,9 @@ public class Activity extends ContextThemeWrapper
resultData.prepareToLeaveProcess(this);
}
upIntent.prepareToLeaveProcess(this);
return ActivityClient.getInstance().navigateUpTo(mToken, upIntent, resultCode,
resultData);
String resolvedType = upIntent.resolveTypeIfNeeded(getContentResolver());
return ActivityClient.getInstance().navigateUpTo(mToken, upIntent, resolvedType,
resultCode, resultData);
} else {
return mParent.navigateUpToFromChild(this, upIntent);
}

View File

@@ -141,11 +141,11 @@ public class ActivityClient {
}
}
boolean navigateUpTo(IBinder token, Intent destIntent, int resultCode,
boolean navigateUpTo(IBinder token, Intent destIntent, String resolvedType, int resultCode,
Intent resultData) {
try {
return getActivityClientController().navigateUpTo(token, destIntent, resultCode,
resultData);
return getActivityClientController().navigateUpTo(token, destIntent, resolvedType,
resultCode, resultData);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}

View File

@@ -60,8 +60,8 @@ interface IActivityClientController {
in SizeConfigurationBuckets sizeConfigurations);
boolean moveActivityTaskToBack(in IBinder token, boolean nonRoot);
boolean shouldUpRecreateTask(in IBinder token, in String destAffinity);
boolean navigateUpTo(in IBinder token, in Intent target, int resultCode,
in Intent resultData);
boolean navigateUpTo(in IBinder token, in Intent target, in String resolvedType,
int resultCode, in Intent resultData);
boolean releaseActivityInstance(in IBinder token);
boolean finishActivity(in IBinder token, int code, in Intent data, int finishTask);
boolean finishActivityAffinity(in IBinder token);

View File

@@ -449,7 +449,7 @@ class MediaCarouselController @Inject constructor(
val existingPlayer = MediaPlayerData.getMediaPlayer(key)
val curVisibleMediaKey = MediaPlayerData.playerKeys()
.elementAtOrNull(mediaCarouselScrollHandler.visibleMediaIndex)
val isCurVisibleMediaPlaying = MediaPlayerData.getMediaData(curVisibleMediaKey)?.isPlaying
val isCurVisibleMediaPlaying = curVisibleMediaKey?.data?.isPlaying
if (existingPlayer == null) {
val newPlayer = mediaControlPanelFactory.get()
newPlayer.attachPlayer(MediaViewHolder.create(
@@ -1042,15 +1042,6 @@ internal object MediaPlayerData {
}
}
fun getMediaData(mediaSortKey: MediaSortKey?): MediaData? {
mediaData.forEach { (key, value) ->
if (value == mediaSortKey) {
return mediaData[key]?.data
}
}
return null
}
fun getMediaPlayer(key: String): MediaControlPanel? {
return mediaData.get(key)?.let { mediaPlayers.get(it) }
}

View File

@@ -332,8 +332,8 @@ class ActivityClientController extends IActivityClientController.Stub {
}
@Override
public boolean navigateUpTo(IBinder token, Intent destIntent, int resultCode,
Intent resultData) {
public boolean navigateUpTo(IBinder token, Intent destIntent, String resolvedType,
int resultCode, Intent resultData) {
final ActivityRecord r;
synchronized (mGlobalLock) {
r = ActivityRecord.isInRootTaskLocked(token);
@@ -348,7 +348,7 @@ class ActivityClientController extends IActivityClientController.Stub {
synchronized (mGlobalLock) {
return r.getRootTask().navigateUpTo(
r, destIntent, destGrants, resultCode, resultData, resultGrants);
r, destIntent, resolvedType, destGrants, resultCode, resultData, resultGrants);
}
}

View File

@@ -5330,8 +5330,9 @@ class Task extends TaskFragment {
return false;
}
boolean navigateUpTo(ActivityRecord srec, Intent destIntent, NeededUriGrants destGrants,
int resultCode, Intent resultData, NeededUriGrants resultGrants) {
boolean navigateUpTo(ActivityRecord srec, Intent destIntent, String resolvedType,
NeededUriGrants destGrants, int resultCode, Intent resultData,
NeededUriGrants resultGrants) {
if (!srec.attachedToProcess()) {
// Nothing to do if the caller is not attached, because this method should be called
// from an alive activity.
@@ -5424,28 +5425,22 @@ class Task extends TaskFragment {
srec.packageName);
}
} else {
try {
ActivityInfo aInfo = AppGlobals.getPackageManager().getActivityInfo(
destIntent.getComponent(), ActivityManagerService.STOCK_PM_FLAGS,
srec.mUserId);
// TODO(b/64750076): Check if calling pid should really be -1.
final int res = mAtmService.getActivityStartController()
.obtainStarter(destIntent, "navigateUpTo")
.setCaller(srec.app.getThread())
.setActivityInfo(aInfo)
.setResultTo(parent.token)
.setCallingPid(-1)
.setCallingUid(callingUid)
.setCallingPackage(srec.packageName)
.setCallingFeatureId(parent.launchedFromFeatureId)
.setRealCallingPid(-1)
.setRealCallingUid(callingUid)
.setComponentSpecified(true)
.execute();
foundParentInTask = res == ActivityManager.START_SUCCESS;
} catch (RemoteException e) {
foundParentInTask = false;
}
// TODO(b/64750076): Check if calling pid should really be -1.
final int res = mAtmService.getActivityStartController()
.obtainStarter(destIntent, "navigateUpTo")
.setResolvedType(resolvedType)
.setUserId(srec.mUserId)
.setCaller(srec.app.getThread())
.setResultTo(parent.token)
.setCallingPid(-1)
.setCallingUid(callingUid)
.setCallingPackage(srec.packageName)
.setCallingFeatureId(parent.launchedFromFeatureId)
.setRealCallingPid(-1)
.setRealCallingUid(callingUid)
.setComponentSpecified(true)
.execute();
foundParentInTask = res == ActivityManager.START_SUCCESS;
parent.finishIfPossible(resultCode, resultData, resultGrants,
"navigate-top", true /* oomAdj */);
}

View File

@@ -1312,13 +1312,15 @@ public class RootTaskTests extends WindowTestsBase {
secondActivity.app.setThread(null);
// This should do nothing from a non-attached caller.
assertFalse(task.navigateUpTo(secondActivity /* source record */,
firstActivity.intent /* destIntent */, null /* destGrants */,
0 /* resultCode */, null /* resultData */, null /* resultGrants */));
firstActivity.intent /* destIntent */, null /* resolvedType */,
null /* destGrants */, 0 /* resultCode */, null /* resultData */,
null /* resultGrants */));
secondActivity.app.setThread(thread);
assertTrue(task.navigateUpTo(secondActivity /* source record */,
firstActivity.intent /* destIntent */, null /* destGrants */,
0 /* resultCode */, null /* resultData */, null /* resultGrants */));
firstActivity.intent /* destIntent */, null /* resolvedType */,
null /* destGrants */, 0 /* resultCode */, null /* resultData */,
null /* resultGrants */));
// The firstActivity uses default launch mode, so the activities between it and itself will
// be finished.
assertTrue(secondActivity.finishing);