diff options
| author | Craig Mautner <cmautner@google.com> | 2014-01-08 17:33:42 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-01-08 17:33:42 +0000 |
| commit | 88bfc6ddc846d714bc15518ef6741e39145a1687 (patch) | |
| tree | 0faa96292fce1b3f9605a74b7c552da14a0f8f61 /core/java/android | |
| parent | 43bc1c07d25b7f278a860bbb9118f46ac732593a (diff) | |
| parent | e0a3884cb627efc650e19fbe76b1b3343468cf57 (diff) | |
| download | frameworks_base-88bfc6ddc846d714bc15518ef6741e39145a1687.zip frameworks_base-88bfc6ddc846d714bc15518ef6741e39145a1687.tar.gz frameworks_base-88bfc6ddc846d714bc15518ef6741e39145a1687.tar.bz2 | |
Merge "Extend stack management to other displays." into klp-modular-dev
Diffstat (limited to 'core/java/android')
| -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 97baf9a..9ae2543 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -2219,15 +2219,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; } |
