Merge "Add notifyInitialized(), notifyReleased() & isInitialized() methods in TaskView." into tm-qpr-dev
This commit is contained in:
@@ -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();
|
||||
});
|
||||
}
|
||||
mIsInitialized = true;
|
||||
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) {
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user