diff options
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/android/app/ActivityManagerNative.java | 24 | ||||
| -rw-r--r-- | core/java/android/app/ActivityThread.java | 15 | ||||
| -rw-r--r-- | core/java/android/app/IActivityContainer.aidl | 4 | ||||
| -rw-r--r-- | core/java/android/app/IActivityManager.java | 4 |
4 files changed, 43 insertions, 4 deletions
diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java index 0f38095..3bc2ee6 100644 --- a/core/java/android/app/ActivityManagerNative.java +++ b/core/java/android/app/ActivityManagerNative.java @@ -2031,6 +2031,15 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM return true; } + case GET_ACTIVITY_CONTAINER_TRANSACTION: { + data.enforceInterface(IActivityManager.descriptor); + IBinder activityToken = data.readStrongBinder(); + IActivityContainer activityContainer = getEnclosingActivityContainer(activityToken); + reply.writeNoException(); + reply.writeStrongBinder(activityContainer.asBinder()); + return true; + } + case GET_HOME_ACTIVITY_TOKEN_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); IBinder homeActivityToken = getHomeActivityToken(); @@ -4668,6 +4677,21 @@ class ActivityManagerProxy implements IActivityManager return res; } + public IActivityContainer getEnclosingActivityContainer(IBinder activityToken) + throws RemoteException { + Parcel data = Parcel.obtain(); + Parcel reply = Parcel.obtain(); + data.writeInterfaceToken(IActivityManager.descriptor); + data.writeStrongBinder(activityToken); + mRemote.transact(GET_ACTIVITY_CONTAINER_TRANSACTION, data, reply, 0); + reply.readException(); + IActivityContainer res = + IActivityContainer.Stub.asInterface(reply.readStrongBinder()); + data.recycle(); + reply.recycle(); + return res; + } + public IBinder getHomeActivityToken() throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 3725cd4..94ebff9 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -2229,15 +2229,26 @@ public final class ActivityThread { ContextImpl appContext = new ContextImpl(); appContext.init(r.packageInfo, r.token, this); appContext.setOuterContext(activity); + Context baseContext = appContext; + + final DisplayManagerGlobal dm = DisplayManagerGlobal.getInstance(); + try { + IActivityContainer container = + ActivityManagerNative.getDefault().getEnclosingActivityContainer(r.token); + final int displayId = container.getDisplayId(); + if (displayId > Display.DEFAULT_DISPLAY) { + Display display = dm.getRealDisplay(displayId, r.token); + baseContext = appContext.createDisplayContext(display); + } + } catch (RemoteException e) { + } // For debugging purposes, if the activity's package name contains the value of // the "debug.use-second-display" system property as a substring, then show // its content on a secondary display if there is one. - Context baseContext = appContext; String pkgName = SystemProperties.get("debug.second-display.pkg"); if (pkgName != null && !pkgName.isEmpty() && r.packageInfo.mPackageName.contains(pkgName)) { - DisplayManagerGlobal dm = DisplayManagerGlobal.getInstance(); for (int displayId : dm.getDisplayIds()) { if (displayId != Display.DEFAULT_DISPLAY) { Display display = dm.getRealDisplay(displayId, r.token); diff --git a/core/java/android/app/IActivityContainer.aidl b/core/java/android/app/IActivityContainer.aidl index 2883d25..2d8d18f 100644 --- a/core/java/android/app/IActivityContainer.aidl +++ b/core/java/android/app/IActivityContainer.aidl @@ -23,7 +23,7 @@ import android.os.IBinder; /** @hide */ interface IActivityContainer { void attachToDisplay(int displayId); - int getStackId(); + int getDisplayId(); void detachFromDisplay(); - void startActivity(in Intent intent); + int startActivity(in Intent intent); } diff --git a/core/java/android/app/IActivityManager.java b/core/java/android/app/IActivityManager.java index 4be1945..3ed3f7b 100644 --- a/core/java/android/app/IActivityManager.java +++ b/core/java/android/app/IActivityManager.java @@ -410,6 +410,9 @@ public interface IActivityManager extends IInterface { public IActivityContainer createActivityContainer(IBinder parentActivityToken, IActivityContainerCallback callback) throws RemoteException; + public IActivityContainer getEnclosingActivityContainer(IBinder activityToken) + throws RemoteException; + public IBinder getHomeActivityToken() throws RemoteException; /* @@ -699,4 +702,5 @@ public interface IActivityManager extends IInterface { int GET_PERSISTED_URI_PERMISSIONS_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+181; int APP_NOT_RESPONDING_VIA_PROVIDER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+182; int GET_HOME_ACTIVITY_TOKEN_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+183; + int GET_ACTIVITY_CONTAINER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+184; } |
