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

Commit 39276b1f authored by Gaurav Bhola's avatar Gaurav Bhola Committed by Android (Google) Code Review
Browse files

Merge "Add notifyInitialized(), notifyReleased() & isInitialized() methods in...

Merge "Add notifyInitialized(), notifyReleased() & isInitialized() methods in TaskView." into tm-qpr-dev
parents 72534bd4 d058fe21
Loading
Loading
Loading
Loading
+33 −10
Original line number Diff line number Diff line
@@ -54,7 +54,10 @@ public class TaskView extends SurfaceView implements SurfaceHolder.Callback,

    /** Callback for listening task state. */
    public interface Listener {
        /** Called when the container is ready for launching activities. */
        /**
         * Only called once when the surface has been created & the container is ready for
         * launching activities.
         */
        default void onInitialized() {}

        /** Called when the container can no longer launch activities. */
@@ -80,12 +83,13 @@ public class TaskView extends SurfaceView implements SurfaceHolder.Callback,
    private final SyncTransactionQueue mSyncQueue;
    private final TaskViewTransitions mTaskViewTransitions;

    private ActivityManager.RunningTaskInfo mTaskInfo;
    protected ActivityManager.RunningTaskInfo mTaskInfo;
    private WindowContainerToken mTaskToken;
    private SurfaceControl mTaskLeash;
    private final SurfaceControl.Transaction mTransaction = new SurfaceControl.Transaction();
    private boolean mSurfaceCreated;
    private boolean mIsInitialized;
    private boolean mNotifiedForInitialized;
    private Listener mListener;
    private Executor mListenerExecutor;
    private Region mObscuredTouchRegion;
@@ -110,6 +114,13 @@ public class TaskView extends SurfaceView implements SurfaceHolder.Callback,
        mGuard.open("release");
    }

    /**
     * @return {@code True} when the TaskView's surface has been created, {@code False} otherwise.
     */
    public boolean isInitialized() {
        return mIsInitialized;
    }

    /** Until all users are converted, we may have mixed-use (eg. Car). */
    private boolean isUsingShellTransitions() {
        return mTaskViewTransitions != null && Transitions.ENABLE_SHELL_TRANSITIONS;
@@ -269,11 +280,17 @@ public class TaskView extends SurfaceView implements SurfaceHolder.Callback,
            resetTaskInfo();
        });
        mGuard.close();
        if (mListener != null && mIsInitialized) {
        mIsInitialized = false;
        notifyReleased();
    }

    /** Called when the {@link TaskView} has been released. */
    protected void notifyReleased() {
        if (mListener != null && mNotifiedForInitialized) {
            mListenerExecutor.execute(() -> {
                mListener.onReleased();
            });
            mIsInitialized = false;
            mNotifiedForInitialized = false;
        }
    }

@@ -407,12 +424,8 @@ public class TaskView extends SurfaceView implements SurfaceHolder.Callback,
    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        mSurfaceCreated = true;
        if (mListener != null && !mIsInitialized) {
        mIsInitialized = true;
            mListenerExecutor.execute(() -> {
                mListener.onInitialized();
            });
        }
        notifyInitialized();
        mShellExecutor.execute(() -> {
            if (mTaskToken == null) {
                // Nothing to update, task is not yet available
@@ -430,6 +443,16 @@ public class TaskView extends SurfaceView implements SurfaceHolder.Callback,
        });
    }

    /** Called when the {@link TaskView} is initialized. */
    protected void notifyInitialized() {
        if (mListener != null && !mNotifiedForInitialized) {
            mNotifiedForInitialized = true;
            mListenerExecutor.execute(() -> {
                mListener.onInitialized();
            });
        }
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
        if (mTaskToken == null) {
+7 −0
Original line number Diff line number Diff line
@@ -169,6 +169,7 @@ public class TaskViewTest extends ShellTestCase {
        mTaskView.onTaskAppeared(mTaskInfo, mLeash);

        verify(mViewListener).onTaskCreated(eq(mTaskInfo.taskId), any());
        assertThat(mTaskView.isInitialized()).isTrue();
        verify(mViewListener, never()).onTaskVisibilityChanged(anyInt(), anyBoolean());
    }

@@ -178,6 +179,7 @@ public class TaskViewTest extends ShellTestCase {
        mTaskView.surfaceCreated(mock(SurfaceHolder.class));

        verify(mViewListener).onInitialized();
        assertThat(mTaskView.isInitialized()).isTrue();
        // No task, no visibility change
        verify(mViewListener, never()).onTaskVisibilityChanged(anyInt(), anyBoolean());
    }
@@ -189,6 +191,7 @@ public class TaskViewTest extends ShellTestCase {
        mTaskView.surfaceCreated(mock(SurfaceHolder.class));

        verify(mViewListener).onInitialized();
        assertThat(mTaskView.isInitialized()).isTrue();
        verify(mViewListener).onTaskVisibilityChanged(eq(mTaskInfo.taskId), eq(true));
    }

@@ -223,6 +226,7 @@ public class TaskViewTest extends ShellTestCase {

        verify(mOrganizer).removeListener(eq(mTaskView));
        verify(mViewListener).onReleased();
        assertThat(mTaskView.isInitialized()).isFalse();
    }

    @Test
@@ -270,6 +274,7 @@ public class TaskViewTest extends ShellTestCase {

        verify(mViewListener).onTaskCreated(eq(mTaskInfo.taskId), any());
        verify(mViewListener, never()).onInitialized();
        assertThat(mTaskView.isInitialized()).isFalse();
        // If there's no surface the task should be made invisible
        verify(mViewListener).onTaskVisibilityChanged(eq(mTaskInfo.taskId), eq(false));
    }
@@ -281,6 +286,7 @@ public class TaskViewTest extends ShellTestCase {
        verify(mTaskViewTransitions, never()).setTaskViewVisible(any(), anyBoolean());

        verify(mViewListener).onInitialized();
        assertThat(mTaskView.isInitialized()).isTrue();
        // No task, no visibility change
        verify(mViewListener, never()).onTaskVisibilityChanged(anyInt(), anyBoolean());
    }
@@ -353,6 +359,7 @@ public class TaskViewTest extends ShellTestCase {

        verify(mOrganizer).removeListener(eq(mTaskView));
        verify(mViewListener).onReleased();
        assertThat(mTaskView.isInitialized()).isFalse();
        verify(mTaskViewTransitions).removeTaskView(eq(mTaskView));
    }