diff --git a/core/java/android/app/ActivityClient.java b/core/java/android/app/ActivityClient.java index 668dc6b8ec63f..73678d9f2ddad 100644 --- a/core/java/android/app/ActivityClient.java +++ b/core/java/android/app/ActivityClient.java @@ -98,6 +98,15 @@ public class ActivityClient { } } + /** Reports the activity starts local relaunch. */ + public void activityLocalRelaunch(IBinder token) { + try { + getActivityClientController().activityLocalRelaunch(token); + } catch (RemoteException e) { + e.rethrowFromSystemServer(); + } + } + /** Reports the activity has completed relaunched. */ public void activityRelaunched(IBinder token) { try { diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 98683f0bd87a8..681be7e14f710 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -5698,6 +5698,7 @@ public final class ActivityThread extends ClientTransactionHandler return; } + ActivityClient.getInstance().activityLocalRelaunch(r.token); // Initialize a relaunch request. final MergedConfiguration mergedConfiguration = new MergedConfiguration( r.createdConfig != null diff --git a/core/java/android/app/IActivityClientController.aidl b/core/java/android/app/IActivityClientController.aidl index 130716122ed2f..0138186974a67 100644 --- a/core/java/android/app/IActivityClientController.aidl +++ b/core/java/android/app/IActivityClientController.aidl @@ -53,6 +53,7 @@ interface IActivityClientController { oneway void activityStopped(in IBinder token, in Bundle state, in PersistableBundle persistentState, in CharSequence description); oneway void activityDestroyed(in IBinder token); + oneway void activityLocalRelaunch(in IBinder token); oneway void activityRelaunched(in IBinder token); oneway void reportSizeConfigurations(in IBinder token, diff --git a/services/core/java/com/android/server/wm/ActivityClientController.java b/services/core/java/com/android/server/wm/ActivityClientController.java index d7a0ca0231d14..6113af45d6be6 100644 --- a/services/core/java/com/android/server/wm/ActivityClientController.java +++ b/services/core/java/com/android/server/wm/ActivityClientController.java @@ -245,6 +245,18 @@ class ActivityClientController extends IActivityClientController.Stub { } } + @Override + public void activityLocalRelaunch(IBinder token) { + final long origId = Binder.clearCallingIdentity(); + synchronized (mGlobalLock) { + final ActivityRecord r = ActivityRecord.forTokenLocked(token); + if (r != null) { + r.startRelaunching(); + } + } + Binder.restoreCallingIdentity(origId); + } + @Override public void activityRelaunched(IBinder token) { final long origId = Binder.clearCallingIdentity();