Loading api/current.txt +3 −0 Original line number Diff line number Diff line Loading @@ -3349,8 +3349,11 @@ package android.app { ctor public ActivityView(android.content.Context); ctor public ActivityView(android.content.Context, android.util.AttributeSet); ctor public ActivityView(android.content.Context, android.util.AttributeSet, int); method public boolean isAttachedToDisplay(); method protected void onLayout(boolean, int, int, int, int); method public void startActivity(android.content.Intent); method public void startActivity(android.content.IntentSender); method public void startActivity(android.app.PendingIntent); } public class AlarmManager { core/java/android/app/ActivityView.java +53 −24 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package android.app; import android.content.Context; import android.content.ContextWrapper; import android.content.Intent; import android.content.IntentSender; import android.graphics.SurfaceTexture; import android.os.IBinder; import android.os.RemoteException; Loading @@ -28,6 +29,7 @@ import android.util.Log; import android.view.Surface; import android.view.TextureView; import android.view.TextureView.SurfaceTextureListener; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; Loading @@ -37,7 +39,6 @@ public class ActivityView extends ViewGroup { private final TextureView mTextureView; private IActivityContainer mActivityContainer; private Activity mActivity; private boolean mAttached; private int mWidth; private int mHeight; private Surface mSurface; Loading Loading @@ -85,24 +86,33 @@ public class ActivityView extends ViewGroup { + e); } final SurfaceTexture surfaceTexture = mTextureView.getSurfaceTexture(); if (surfaceTexture != null) { attachToSurface(surfaceTexture); } attachToSurfaceWhenReady(); } @Override protected void onDetachedFromWindow() { detachFromSurface(); if (mActivityContainer != null) { detach(); mActivityContainer = null; } } @Override public boolean isAttachedToWindow() { return mAttached; protected void onWindowVisibilityChanged(int visibility) { super.onWindowVisibilityChanged(visibility); if (visibility == View.VISIBLE) { attachToSurfaceWhenReady(); } else { detach(); } } public boolean isAttachedToDisplay() { return mSurface != null; } public void startActivity(Intent intent) { if (mActivityContainer != null && mAttached) { if (mSurface != null) { try { mActivityContainer.startActivity(intent); } catch (RemoteException e) { Loading @@ -111,40 +121,59 @@ public class ActivityView extends ViewGroup { } } /** Call when both mActivityContainer and mTextureView's SurfaceTexture are not null */ private void attachToSurface(SurfaceTexture surfaceTexture) { public void startActivity(IntentSender intentSender) { if (mSurface != null) { try { mActivityContainer.startActivityIntentSender(intentSender.getTarget()); } catch (RemoteException e) { throw new IllegalStateException( "ActivityView: Unable to startActivity from IntentSender. " + e); } } } public void startActivity(PendingIntent pendingIntent) { if (mSurface != null) { try { mActivityContainer.startActivityIntentSender(pendingIntent.getTarget()); } catch (RemoteException e) { throw new IllegalStateException( "ActivityView: Unable to startActivity from PendingIntent. " + e); } } } private void attachToSurfaceWhenReady() { final SurfaceTexture surfaceTexture = mTextureView.getSurfaceTexture(); if (mActivityContainer == null || surfaceTexture == null || mSurface != null) { // Either not ready to attach, or already attached. return; } WindowManager wm = (WindowManager)mActivity.getSystemService(Context.WINDOW_SERVICE); DisplayMetrics metrics = new DisplayMetrics(); wm.getDefaultDisplay().getMetrics(metrics); mSurface = new Surface(surfaceTexture); try { mActivityContainer.attachToSurface(mSurface, mWidth, mHeight, metrics.densityDpi); mActivityContainer.attachToSurface(mSurface, mWidth, mHeight, metrics.densityDpi); } catch (RemoteException e) { mActivityContainer = null; mSurface.release(); mSurface = null; mAttached = false; throw new IllegalStateException( "ActivityView: Unable to create ActivityContainer. " + e); } mAttached = true; } private void detachFromSurface() { if (mActivityContainer != null) { private void detach() { if (mSurface != null) { try { mActivityContainer.detachFromDisplay(); } catch (RemoteException e) { } mActivityContainer = null; } if (mSurface != null) { mSurface.release(); mSurface = null; } mAttached = false; } private class ActivityViewSurfaceTextureListener implements SurfaceTextureListener { Loading @@ -154,7 +183,7 @@ public class ActivityView extends ViewGroup { mWidth = width; mHeight = height; if (mActivityContainer != null) { attachToSurface(surfaceTexture); attachToSurfaceWhenReady(); } } Loading @@ -167,7 +196,7 @@ public class ActivityView extends ViewGroup { @Override public boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) { Log.d(TAG, "onSurfaceTextureDestroyed"); detachFromSurface(); detach(); return true; } Loading core/java/android/app/IActivityContainer.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package android.app; import android.app.IActivityContainerCallback; import android.content.Intent; import android.content.IIntentSender; import android.os.IBinder; import android.view.Surface; Loading @@ -27,5 +28,6 @@ interface IActivityContainer { void attachToSurface(in Surface surface, int width, int height, int density); void detachFromDisplay(); int startActivity(in Intent intent); int startActivityIntentSender(in IIntentSender intentSender); int getDisplayId(); } services/core/java/com/android/server/am/ActivityManagerService.java +4 −3 Original line number Diff line number Diff line Loading @@ -3125,7 +3125,7 @@ public final class ActivityManagerService extends ActivityManagerNative } } int ret = pir.sendInner(0, fillInIntent, resolvedType, null, null, resultTo, resultWho, requestCode, flagsMask, flagsValues, options); resultTo, resultWho, requestCode, flagsMask, flagsValues, options, null); return ret; } Loading Loading @@ -3237,7 +3237,8 @@ public final class ActivityManagerService extends ActivityManagerNative final int startActivityInPackage(int uid, String callingPackage, Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode, int startFlags, Bundle options, int userId) { String resultWho, int requestCode, int startFlags, Bundle options, int userId, IActivityContainer container) { userId = handleIncomingUser(Binder.getCallingPid(), Binder.getCallingUid(), userId, false, true, "startActivityInPackage", null); Loading @@ -3245,7 +3246,7 @@ public final class ActivityManagerService extends ActivityManagerNative // TODO: Switch to user app stacks here. int ret = mStackSupervisor.startActivityMayWait(null, uid, callingPackage, intent, resolvedType, resultTo, resultWho, requestCode, startFlags, null, null, null, null, options, userId, null); null, null, null, null, options, userId, container); return ret; } Loading services/core/java/com/android/server/am/ActivityStack.java +13 −0 Original line number Diff line number Diff line Loading @@ -738,6 +738,12 @@ final class ActivityStack { mStackSupervisor.resumeTopActivitiesLocked(); return; } if (mActivityContainer.mParentActivity == null) { // Top level stack, not a child. Look for child stacks. mStackSupervisor.pauseChildStacks(prev, userLeaving, uiSleeping); } if (DEBUG_STATES) Slog.v(TAG, "Moving to PAUSING: " + prev); else if (DEBUG_PAUSE) Slog.v(TAG, "Start pausing: " + prev); mResumedActivity = null; Loading Loading @@ -1282,6 +1288,13 @@ final class ActivityStack { final boolean resumeTopActivityLocked(ActivityRecord prev, Bundle options) { if (ActivityManagerService.DEBUG_LOCKSCREEN) mService.logLockScreen(""); ActivityRecord parent = mActivityContainer.mParentActivity; if (parent != null && parent.state != ActivityState.RESUMED) { // Do not resume this stack if its parent is not resumed. // TODO: If in a loop, make sure that parent stack resumeTopActivity is called 1st. return false; } cancelInitializingActivities(); // Find the first activity that is not finishing. Loading Loading
api/current.txt +3 −0 Original line number Diff line number Diff line Loading @@ -3349,8 +3349,11 @@ package android.app { ctor public ActivityView(android.content.Context); ctor public ActivityView(android.content.Context, android.util.AttributeSet); ctor public ActivityView(android.content.Context, android.util.AttributeSet, int); method public boolean isAttachedToDisplay(); method protected void onLayout(boolean, int, int, int, int); method public void startActivity(android.content.Intent); method public void startActivity(android.content.IntentSender); method public void startActivity(android.app.PendingIntent); } public class AlarmManager {
core/java/android/app/ActivityView.java +53 −24 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package android.app; import android.content.Context; import android.content.ContextWrapper; import android.content.Intent; import android.content.IntentSender; import android.graphics.SurfaceTexture; import android.os.IBinder; import android.os.RemoteException; Loading @@ -28,6 +29,7 @@ import android.util.Log; import android.view.Surface; import android.view.TextureView; import android.view.TextureView.SurfaceTextureListener; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; Loading @@ -37,7 +39,6 @@ public class ActivityView extends ViewGroup { private final TextureView mTextureView; private IActivityContainer mActivityContainer; private Activity mActivity; private boolean mAttached; private int mWidth; private int mHeight; private Surface mSurface; Loading Loading @@ -85,24 +86,33 @@ public class ActivityView extends ViewGroup { + e); } final SurfaceTexture surfaceTexture = mTextureView.getSurfaceTexture(); if (surfaceTexture != null) { attachToSurface(surfaceTexture); } attachToSurfaceWhenReady(); } @Override protected void onDetachedFromWindow() { detachFromSurface(); if (mActivityContainer != null) { detach(); mActivityContainer = null; } } @Override public boolean isAttachedToWindow() { return mAttached; protected void onWindowVisibilityChanged(int visibility) { super.onWindowVisibilityChanged(visibility); if (visibility == View.VISIBLE) { attachToSurfaceWhenReady(); } else { detach(); } } public boolean isAttachedToDisplay() { return mSurface != null; } public void startActivity(Intent intent) { if (mActivityContainer != null && mAttached) { if (mSurface != null) { try { mActivityContainer.startActivity(intent); } catch (RemoteException e) { Loading @@ -111,40 +121,59 @@ public class ActivityView extends ViewGroup { } } /** Call when both mActivityContainer and mTextureView's SurfaceTexture are not null */ private void attachToSurface(SurfaceTexture surfaceTexture) { public void startActivity(IntentSender intentSender) { if (mSurface != null) { try { mActivityContainer.startActivityIntentSender(intentSender.getTarget()); } catch (RemoteException e) { throw new IllegalStateException( "ActivityView: Unable to startActivity from IntentSender. " + e); } } } public void startActivity(PendingIntent pendingIntent) { if (mSurface != null) { try { mActivityContainer.startActivityIntentSender(pendingIntent.getTarget()); } catch (RemoteException e) { throw new IllegalStateException( "ActivityView: Unable to startActivity from PendingIntent. " + e); } } } private void attachToSurfaceWhenReady() { final SurfaceTexture surfaceTexture = mTextureView.getSurfaceTexture(); if (mActivityContainer == null || surfaceTexture == null || mSurface != null) { // Either not ready to attach, or already attached. return; } WindowManager wm = (WindowManager)mActivity.getSystemService(Context.WINDOW_SERVICE); DisplayMetrics metrics = new DisplayMetrics(); wm.getDefaultDisplay().getMetrics(metrics); mSurface = new Surface(surfaceTexture); try { mActivityContainer.attachToSurface(mSurface, mWidth, mHeight, metrics.densityDpi); mActivityContainer.attachToSurface(mSurface, mWidth, mHeight, metrics.densityDpi); } catch (RemoteException e) { mActivityContainer = null; mSurface.release(); mSurface = null; mAttached = false; throw new IllegalStateException( "ActivityView: Unable to create ActivityContainer. " + e); } mAttached = true; } private void detachFromSurface() { if (mActivityContainer != null) { private void detach() { if (mSurface != null) { try { mActivityContainer.detachFromDisplay(); } catch (RemoteException e) { } mActivityContainer = null; } if (mSurface != null) { mSurface.release(); mSurface = null; } mAttached = false; } private class ActivityViewSurfaceTextureListener implements SurfaceTextureListener { Loading @@ -154,7 +183,7 @@ public class ActivityView extends ViewGroup { mWidth = width; mHeight = height; if (mActivityContainer != null) { attachToSurface(surfaceTexture); attachToSurfaceWhenReady(); } } Loading @@ -167,7 +196,7 @@ public class ActivityView extends ViewGroup { @Override public boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) { Log.d(TAG, "onSurfaceTextureDestroyed"); detachFromSurface(); detach(); return true; } Loading
core/java/android/app/IActivityContainer.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package android.app; import android.app.IActivityContainerCallback; import android.content.Intent; import android.content.IIntentSender; import android.os.IBinder; import android.view.Surface; Loading @@ -27,5 +28,6 @@ interface IActivityContainer { void attachToSurface(in Surface surface, int width, int height, int density); void detachFromDisplay(); int startActivity(in Intent intent); int startActivityIntentSender(in IIntentSender intentSender); int getDisplayId(); }
services/core/java/com/android/server/am/ActivityManagerService.java +4 −3 Original line number Diff line number Diff line Loading @@ -3125,7 +3125,7 @@ public final class ActivityManagerService extends ActivityManagerNative } } int ret = pir.sendInner(0, fillInIntent, resolvedType, null, null, resultTo, resultWho, requestCode, flagsMask, flagsValues, options); resultTo, resultWho, requestCode, flagsMask, flagsValues, options, null); return ret; } Loading Loading @@ -3237,7 +3237,8 @@ public final class ActivityManagerService extends ActivityManagerNative final int startActivityInPackage(int uid, String callingPackage, Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode, int startFlags, Bundle options, int userId) { String resultWho, int requestCode, int startFlags, Bundle options, int userId, IActivityContainer container) { userId = handleIncomingUser(Binder.getCallingPid(), Binder.getCallingUid(), userId, false, true, "startActivityInPackage", null); Loading @@ -3245,7 +3246,7 @@ public final class ActivityManagerService extends ActivityManagerNative // TODO: Switch to user app stacks here. int ret = mStackSupervisor.startActivityMayWait(null, uid, callingPackage, intent, resolvedType, resultTo, resultWho, requestCode, startFlags, null, null, null, null, options, userId, null); null, null, null, null, options, userId, container); return ret; } Loading
services/core/java/com/android/server/am/ActivityStack.java +13 −0 Original line number Diff line number Diff line Loading @@ -738,6 +738,12 @@ final class ActivityStack { mStackSupervisor.resumeTopActivitiesLocked(); return; } if (mActivityContainer.mParentActivity == null) { // Top level stack, not a child. Look for child stacks. mStackSupervisor.pauseChildStacks(prev, userLeaving, uiSleeping); } if (DEBUG_STATES) Slog.v(TAG, "Moving to PAUSING: " + prev); else if (DEBUG_PAUSE) Slog.v(TAG, "Start pausing: " + prev); mResumedActivity = null; Loading Loading @@ -1282,6 +1288,13 @@ final class ActivityStack { final boolean resumeTopActivityLocked(ActivityRecord prev, Bundle options) { if (ActivityManagerService.DEBUG_LOCKSCREEN) mService.logLockScreen(""); ActivityRecord parent = mActivityContainer.mParentActivity; if (parent != null && parent.state != ActivityState.RESUMED) { // Do not resume this stack if its parent is not resumed. // TODO: If in a loop, make sure that parent stack resumeTopActivity is called 1st. return false; } cancelInitializingActivities(); // Find the first activity that is not finishing. Loading