summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/app/Activity.java5
-rw-r--r--core/java/android/app/ActivityClient.java6
-rw-r--r--core/java/android/app/IActivityClientController.aidl4
-rw-r--r--packages/SystemUI/src/com/android/systemui/media/MediaCarouselController.kt11
-rw-r--r--services/core/java/com/android/server/wm/ActivityClientController.java6
-rw-r--r--services/core/java/com/android/server/wm/Task.java43
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/RootTaskTests.java10
7 files changed, 37 insertions, 48 deletions
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index 7c1f9c80eec1..855366abae4e 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -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);
}
diff --git a/core/java/android/app/ActivityClient.java b/core/java/android/app/ActivityClient.java
index 482f456b5d83..d1e6780e3618 100644
--- a/core/java/android/app/ActivityClient.java
+++ b/core/java/android/app/ActivityClient.java
@@ -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();
}
diff --git a/core/java/android/app/IActivityClientController.aidl b/core/java/android/app/IActivityClientController.aidl
index f5e5cda9c639..9aa67bc51182 100644
--- a/core/java/android/app/IActivityClientController.aidl
+++ b/core/java/android/app/IActivityClientController.aidl
@@ -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);
diff --git a/packages/SystemUI/src/com/android/systemui/media/MediaCarouselController.kt b/packages/SystemUI/src/com/android/systemui/media/MediaCarouselController.kt
index 8368792b8ae3..2cd564ff4e32 100644
--- a/packages/SystemUI/src/com/android/systemui/media/MediaCarouselController.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/MediaCarouselController.kt
@@ -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) }
}
diff --git a/services/core/java/com/android/server/wm/ActivityClientController.java b/services/core/java/com/android/server/wm/ActivityClientController.java
index d2a00af245f6..df9ae63e235c 100644
--- a/services/core/java/com/android/server/wm/ActivityClientController.java
+++ b/services/core/java/com/android/server/wm/ActivityClientController.java
@@ -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);
}
}
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java
index 8993840a529e..8de4e1301dc6 100644
--- a/services/core/java/com/android/server/wm/Task.java
+++ b/services/core/java/com/android/server/wm/Task.java
@@ -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 */);
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/RootTaskTests.java b/services/tests/wmtests/src/com/android/server/wm/RootTaskTests.java
index 6128428dcb7d..b46e90da3944 100644
--- a/services/tests/wmtests/src/com/android/server/wm/RootTaskTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/RootTaskTests.java
@@ -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);