Loading core/java/android/app/ActivityView.java +36 −0 Original line number Original line Diff line number Diff line Loading @@ -53,6 +53,7 @@ public class ActivityView extends ViewGroup { private int mHeight; private int mHeight; private Surface mSurface; private Surface mSurface; private int mLastVisibility; private int mLastVisibility; private ActivityViewCallback mActivityViewCallback; // Only one IIntentSender or Intent may be queued at a time. Most recent one wins. // Only one IIntentSender or Intent may be queued at a time. Most recent one wins. IIntentSender mQueuedPendingIntent; IIntentSender mQueuedPendingIntent; Loading Loading @@ -254,6 +255,25 @@ public class ActivityView extends ViewGroup { } } } } /** * Set the callback to use to report certain state changes. * @param callback The callback to report events to. * * @see ActivityViewCallback */ public void setCallback(ActivityViewCallback callback) { mActivityViewCallback = callback; } public static abstract class ActivityViewCallback { /** * Called when all activities in the ActivityView have completed and been removed. Register * using {@link ActivityView#setCallback(ActivityViewCallback)}. Each ActivityView may * have at most one callback registered. */ public abstract void onAllActivitiesComplete(ActivityView view); } private class ActivityViewSurfaceTextureListener implements SurfaceTextureListener { private class ActivityViewSurfaceTextureListener implements SurfaceTextureListener { @Override @Override public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width, public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width, Loading Loading @@ -313,6 +333,22 @@ public class ActivityView extends ViewGroup { if (DEBUG) Log.v(TAG, "setVisible(): container=" + container + " visible=" + visible + if (DEBUG) Log.v(TAG, "setVisible(): container=" + container + " visible=" + visible + " ActivityView=" + mActivityViewWeakReference.get()); " ActivityView=" + mActivityViewWeakReference.get()); } } @Override public void onAllActivitiesComplete(IBinder container) { final ActivityView activityView = mActivityViewWeakReference.get(); if (activityView != null) { final ActivityViewCallback callback = activityView.mActivityViewCallback; if (callback != null) { activityView.post(new Runnable() { @Override public void run() { callback.onAllActivitiesComplete(activityView); } }); } } } } } private static class ActivityContainerWrapper { private static class ActivityContainerWrapper { Loading core/java/android/app/IActivityContainerCallback.aidl +1 −0 Original line number Original line Diff line number Diff line Loading @@ -21,4 +21,5 @@ import android.os.IBinder; /** @hide */ /** @hide */ interface IActivityContainerCallback { interface IActivityContainerCallback { oneway void setVisible(IBinder container, boolean visible); oneway void setVisible(IBinder container, boolean visible); oneway void onAllActivitiesComplete(IBinder container); } } services/core/java/com/android/server/am/ActivityStack.java +1 −0 Original line number Original line Diff line number Diff line Loading @@ -3669,6 +3669,7 @@ final class ActivityStack { mStacks.remove(this); mStacks.remove(this); mStacks.add(0, this); mStacks.add(0, this); } } mActivityContainer.onTaskListEmpty(); } } } } Loading services/core/java/com/android/server/am/ActivityStackSupervisor.java +23 −6 Original line number Original line Diff line number Diff line Loading @@ -126,6 +126,7 @@ public final class ActivityStackSupervisor implements DisplayListener { static final int HANDLE_DISPLAY_CHANGED = FIRST_SUPERVISOR_STACK_MSG + 6; static final int HANDLE_DISPLAY_CHANGED = FIRST_SUPERVISOR_STACK_MSG + 6; static final int HANDLE_DISPLAY_REMOVED = FIRST_SUPERVISOR_STACK_MSG + 7; static final int HANDLE_DISPLAY_REMOVED = FIRST_SUPERVISOR_STACK_MSG + 7; static final int CONTAINER_CALLBACK_VISIBILITY = FIRST_SUPERVISOR_STACK_MSG + 8; static final int CONTAINER_CALLBACK_VISIBILITY = FIRST_SUPERVISOR_STACK_MSG + 8; static final int CONTAINER_CALLBACK_TASK_LIST_EMPTY = FIRST_SUPERVISOR_STACK_MSG + 9; private final static String VIRTUAL_DISPLAY_BASE_NAME = "ActivityViewVirtualDisplay"; private final static String VIRTUAL_DISPLAY_BASE_NAME = "ActivityViewVirtualDisplay"; Loading Loading @@ -2931,12 +2932,24 @@ public final class ActivityStackSupervisor implements DisplayListener { } break; } break; case CONTAINER_CALLBACK_VISIBILITY: { case CONTAINER_CALLBACK_VISIBILITY: { final ActivityContainer container = (ActivityContainer) msg.obj; final ActivityContainer container = (ActivityContainer) msg.obj; final IActivityContainerCallback callback = container.mCallback; if (callback != null) { try { try { // We only send this message if mCallback is non-null. callback.setVisible(container.asBinder(), msg.arg1 == 1); container.mCallback.setVisible(container.asBinder(), msg.arg1 == 1); } catch (RemoteException e) { } catch (RemoteException e) { } } } } } break; case CONTAINER_CALLBACK_TASK_LIST_EMPTY: { final ActivityContainer container = (ActivityContainer) msg.obj; final IActivityContainerCallback callback = container.mCallback; if (callback != null) { try { callback.onAllActivitiesComplete(container.asBinder()); } catch (RemoteException e) { } } } break; } } } } } } Loading Loading @@ -3141,6 +3154,10 @@ public final class ActivityStackSupervisor implements DisplayListener { return true; return true; } } void onTaskListEmpty() { mHandler.obtainMessage(CONTAINER_CALLBACK_TASK_LIST_EMPTY, this).sendToTarget(); } @Override @Override public String toString() { public String toString() { return mIdString + (mActivityDisplay == null ? "N" : "A"); return mIdString + (mActivityDisplay == null ? "N" : "A"); Loading Loading
core/java/android/app/ActivityView.java +36 −0 Original line number Original line Diff line number Diff line Loading @@ -53,6 +53,7 @@ public class ActivityView extends ViewGroup { private int mHeight; private int mHeight; private Surface mSurface; private Surface mSurface; private int mLastVisibility; private int mLastVisibility; private ActivityViewCallback mActivityViewCallback; // Only one IIntentSender or Intent may be queued at a time. Most recent one wins. // Only one IIntentSender or Intent may be queued at a time. Most recent one wins. IIntentSender mQueuedPendingIntent; IIntentSender mQueuedPendingIntent; Loading Loading @@ -254,6 +255,25 @@ public class ActivityView extends ViewGroup { } } } } /** * Set the callback to use to report certain state changes. * @param callback The callback to report events to. * * @see ActivityViewCallback */ public void setCallback(ActivityViewCallback callback) { mActivityViewCallback = callback; } public static abstract class ActivityViewCallback { /** * Called when all activities in the ActivityView have completed and been removed. Register * using {@link ActivityView#setCallback(ActivityViewCallback)}. Each ActivityView may * have at most one callback registered. */ public abstract void onAllActivitiesComplete(ActivityView view); } private class ActivityViewSurfaceTextureListener implements SurfaceTextureListener { private class ActivityViewSurfaceTextureListener implements SurfaceTextureListener { @Override @Override public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width, public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width, Loading Loading @@ -313,6 +333,22 @@ public class ActivityView extends ViewGroup { if (DEBUG) Log.v(TAG, "setVisible(): container=" + container + " visible=" + visible + if (DEBUG) Log.v(TAG, "setVisible(): container=" + container + " visible=" + visible + " ActivityView=" + mActivityViewWeakReference.get()); " ActivityView=" + mActivityViewWeakReference.get()); } } @Override public void onAllActivitiesComplete(IBinder container) { final ActivityView activityView = mActivityViewWeakReference.get(); if (activityView != null) { final ActivityViewCallback callback = activityView.mActivityViewCallback; if (callback != null) { activityView.post(new Runnable() { @Override public void run() { callback.onAllActivitiesComplete(activityView); } }); } } } } } private static class ActivityContainerWrapper { private static class ActivityContainerWrapper { Loading
core/java/android/app/IActivityContainerCallback.aidl +1 −0 Original line number Original line Diff line number Diff line Loading @@ -21,4 +21,5 @@ import android.os.IBinder; /** @hide */ /** @hide */ interface IActivityContainerCallback { interface IActivityContainerCallback { oneway void setVisible(IBinder container, boolean visible); oneway void setVisible(IBinder container, boolean visible); oneway void onAllActivitiesComplete(IBinder container); } }
services/core/java/com/android/server/am/ActivityStack.java +1 −0 Original line number Original line Diff line number Diff line Loading @@ -3669,6 +3669,7 @@ final class ActivityStack { mStacks.remove(this); mStacks.remove(this); mStacks.add(0, this); mStacks.add(0, this); } } mActivityContainer.onTaskListEmpty(); } } } } Loading
services/core/java/com/android/server/am/ActivityStackSupervisor.java +23 −6 Original line number Original line Diff line number Diff line Loading @@ -126,6 +126,7 @@ public final class ActivityStackSupervisor implements DisplayListener { static final int HANDLE_DISPLAY_CHANGED = FIRST_SUPERVISOR_STACK_MSG + 6; static final int HANDLE_DISPLAY_CHANGED = FIRST_SUPERVISOR_STACK_MSG + 6; static final int HANDLE_DISPLAY_REMOVED = FIRST_SUPERVISOR_STACK_MSG + 7; static final int HANDLE_DISPLAY_REMOVED = FIRST_SUPERVISOR_STACK_MSG + 7; static final int CONTAINER_CALLBACK_VISIBILITY = FIRST_SUPERVISOR_STACK_MSG + 8; static final int CONTAINER_CALLBACK_VISIBILITY = FIRST_SUPERVISOR_STACK_MSG + 8; static final int CONTAINER_CALLBACK_TASK_LIST_EMPTY = FIRST_SUPERVISOR_STACK_MSG + 9; private final static String VIRTUAL_DISPLAY_BASE_NAME = "ActivityViewVirtualDisplay"; private final static String VIRTUAL_DISPLAY_BASE_NAME = "ActivityViewVirtualDisplay"; Loading Loading @@ -2931,12 +2932,24 @@ public final class ActivityStackSupervisor implements DisplayListener { } break; } break; case CONTAINER_CALLBACK_VISIBILITY: { case CONTAINER_CALLBACK_VISIBILITY: { final ActivityContainer container = (ActivityContainer) msg.obj; final ActivityContainer container = (ActivityContainer) msg.obj; final IActivityContainerCallback callback = container.mCallback; if (callback != null) { try { try { // We only send this message if mCallback is non-null. callback.setVisible(container.asBinder(), msg.arg1 == 1); container.mCallback.setVisible(container.asBinder(), msg.arg1 == 1); } catch (RemoteException e) { } catch (RemoteException e) { } } } } } break; case CONTAINER_CALLBACK_TASK_LIST_EMPTY: { final ActivityContainer container = (ActivityContainer) msg.obj; final IActivityContainerCallback callback = container.mCallback; if (callback != null) { try { callback.onAllActivitiesComplete(container.asBinder()); } catch (RemoteException e) { } } } break; } } } } } } Loading Loading @@ -3141,6 +3154,10 @@ public final class ActivityStackSupervisor implements DisplayListener { return true; return true; } } void onTaskListEmpty() { mHandler.obtainMessage(CONTAINER_CALLBACK_TASK_LIST_EMPTY, this).sendToTarget(); } @Override @Override public String toString() { public String toString() { return mIdString + (mActivityDisplay == null ? "N" : "A"); return mIdString + (mActivityDisplay == null ? "N" : "A"); Loading