Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e34fcf8f authored by Craig Mautner's avatar Craig Mautner Committed by Android (Google) Code Review
Browse files

Merge "Add callback when ActivityView activities complete" into klp-modular-dev

parents b766edce d94b47f3
Loading
Loading
Loading
Loading
+36 −0
Original line number Original line Diff line number Diff line
@@ -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;
@@ -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,
@@ -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 {
+1 −0
Original line number Original line Diff line number Diff line
@@ -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);
}
}
+1 −0
Original line number Original line Diff line number Diff line
@@ -3669,6 +3669,7 @@ final class ActivityStack {
                mStacks.remove(this);
                mStacks.remove(this);
                mStacks.add(0, this);
                mStacks.add(0, this);
            }
            }
            mActivityContainer.onTaskListEmpty();
        }
        }
    }
    }


+23 −6
Original line number Original line Diff line number Diff line
@@ -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";


@@ -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;
            }
            }
        }
        }
    }
    }
@@ -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");