Loading core/java/android/app/ActivityView.java +36 −0 Original line number Diff line number Diff line Loading @@ -53,6 +53,7 @@ public class ActivityView extends ViewGroup { private int mHeight; private Surface mSurface; private int mLastVisibility; private ActivityViewCallback mActivityViewCallback; // Only one IIntentSender or Intent may be queued at a time. Most recent one wins. 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 { @Override 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 + " 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 { Loading core/java/android/app/IActivityContainerCallback.aidl +1 −0 Original line number Diff line number Diff line Loading @@ -21,4 +21,5 @@ import android.os.IBinder; /** @hide */ interface IActivityContainerCallback { 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 Diff line number Diff line Loading @@ -3801,6 +3801,7 @@ final class ActivityStack { mStacks.remove(this); mStacks.add(0, this); } mActivityContainer.onTaskListEmpty(); } } Loading services/core/java/com/android/server/am/ActivityStackSupervisor.java +24 −9 Original line number Diff line number Diff line Loading @@ -134,6 +134,7 @@ public final class ActivityStackSupervisor implements DisplayListener { static final int CONTAINER_CALLBACK_VISIBILITY = FIRST_SUPERVISOR_STACK_MSG + 8; static final int LOCK_TASK_START_MSG = FIRST_SUPERVISOR_STACK_MSG + 9; static final int LOCK_TASK_END_MSG = FIRST_SUPERVISOR_STACK_MSG + 10; static final int CONTAINER_CALLBACK_TASK_LIST_EMPTY = FIRST_SUPERVISOR_STACK_MSG + 11; private final static String VIRTUAL_DISPLAY_BASE_NAME = "ActivityViewVirtualDisplay"; Loading Loading @@ -3074,12 +3075,14 @@ public final class ActivityStackSupervisor implements DisplayListener { } break; case CONTAINER_CALLBACK_VISIBILITY: { final ActivityContainer container = (ActivityContainer) msg.obj; final IActivityContainerCallback callback = container.mCallback; if (callback != null) { try { // We only send this message if mCallback is non-null. container.mCallback.setVisible(container.asBinder(), msg.arg1 == 1); callback.setVisible(container.asBinder(), msg.arg1 == 1); } catch (RemoteException e) { } } } break; case LOCK_TASK_START_MSG: { // When lock task starts, we disable the status bars. try { Loading @@ -3091,8 +3094,7 @@ public final class ActivityStackSupervisor implements DisplayListener { } catch (RemoteException ex) { throw new RuntimeException(ex); } break; } } break; case LOCK_TASK_END_MSG: { // When lock task ends, we enable the status bars. try { Loading @@ -3104,8 +3106,17 @@ public final class ActivityStackSupervisor implements DisplayListener { } catch (RemoteException ex) { throw new RuntimeException(ex); } break; } 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 @@ -3310,6 +3321,10 @@ public final class ActivityStackSupervisor implements DisplayListener { return true; } void onTaskListEmpty() { mHandler.obtainMessage(CONTAINER_CALLBACK_TASK_LIST_EMPTY, this).sendToTarget(); } @Override public String toString() { return mIdString + (mActivityDisplay == null ? "N" : "A"); Loading Loading
core/java/android/app/ActivityView.java +36 −0 Original line number Diff line number Diff line Loading @@ -53,6 +53,7 @@ public class ActivityView extends ViewGroup { private int mHeight; private Surface mSurface; private int mLastVisibility; private ActivityViewCallback mActivityViewCallback; // Only one IIntentSender or Intent may be queued at a time. Most recent one wins. 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 { @Override 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 + " 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 { Loading
core/java/android/app/IActivityContainerCallback.aidl +1 −0 Original line number Diff line number Diff line Loading @@ -21,4 +21,5 @@ import android.os.IBinder; /** @hide */ interface IActivityContainerCallback { 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 Diff line number Diff line Loading @@ -3801,6 +3801,7 @@ final class ActivityStack { mStacks.remove(this); mStacks.add(0, this); } mActivityContainer.onTaskListEmpty(); } } Loading
services/core/java/com/android/server/am/ActivityStackSupervisor.java +24 −9 Original line number Diff line number Diff line Loading @@ -134,6 +134,7 @@ public final class ActivityStackSupervisor implements DisplayListener { static final int CONTAINER_CALLBACK_VISIBILITY = FIRST_SUPERVISOR_STACK_MSG + 8; static final int LOCK_TASK_START_MSG = FIRST_SUPERVISOR_STACK_MSG + 9; static final int LOCK_TASK_END_MSG = FIRST_SUPERVISOR_STACK_MSG + 10; static final int CONTAINER_CALLBACK_TASK_LIST_EMPTY = FIRST_SUPERVISOR_STACK_MSG + 11; private final static String VIRTUAL_DISPLAY_BASE_NAME = "ActivityViewVirtualDisplay"; Loading Loading @@ -3074,12 +3075,14 @@ public final class ActivityStackSupervisor implements DisplayListener { } break; case CONTAINER_CALLBACK_VISIBILITY: { final ActivityContainer container = (ActivityContainer) msg.obj; final IActivityContainerCallback callback = container.mCallback; if (callback != null) { try { // We only send this message if mCallback is non-null. container.mCallback.setVisible(container.asBinder(), msg.arg1 == 1); callback.setVisible(container.asBinder(), msg.arg1 == 1); } catch (RemoteException e) { } } } break; case LOCK_TASK_START_MSG: { // When lock task starts, we disable the status bars. try { Loading @@ -3091,8 +3094,7 @@ public final class ActivityStackSupervisor implements DisplayListener { } catch (RemoteException ex) { throw new RuntimeException(ex); } break; } } break; case LOCK_TASK_END_MSG: { // When lock task ends, we enable the status bars. try { Loading @@ -3104,8 +3106,17 @@ public final class ActivityStackSupervisor implements DisplayListener { } catch (RemoteException ex) { throw new RuntimeException(ex); } break; } 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 @@ -3310,6 +3321,10 @@ public final class ActivityStackSupervisor implements DisplayListener { return true; } void onTaskListEmpty() { mHandler.obtainMessage(CONTAINER_CALLBACK_TASK_LIST_EMPTY, this).sendToTarget(); } @Override public String toString() { return mIdString + (mActivityDisplay == null ? "N" : "A"); Loading