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. */
|
/** Callback for listening task state. */
|
||||||
public interface Listener {
|
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() {}
|
default void onInitialized() {}
|
||||||
|
|
||||||
/** Called when the container can no longer launch activities. */
|
/** 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 SyncTransactionQueue mSyncQueue;
|
||||||
private final TaskViewTransitions mTaskViewTransitions;
|
private final TaskViewTransitions mTaskViewTransitions;
|
||||||
|
|
||||||
private ActivityManager.RunningTaskInfo mTaskInfo;
|
protected ActivityManager.RunningTaskInfo mTaskInfo;
|
||||||
private WindowContainerToken mTaskToken;
|
private WindowContainerToken mTaskToken;
|
||||||
private SurfaceControl mTaskLeash;
|
private SurfaceControl mTaskLeash;
|
||||||
private final SurfaceControl.Transaction mTransaction = new SurfaceControl.Transaction();
|
private final SurfaceControl.Transaction mTransaction = new SurfaceControl.Transaction();
|
||||||
private boolean mSurfaceCreated;
|
private boolean mSurfaceCreated;
|
||||||
private boolean mIsInitialized;
|
private boolean mIsInitialized;
|
||||||
|
private boolean mNotifiedForInitialized;
|
||||||
private Listener mListener;
|
private Listener mListener;
|
||||||
private Executor mListenerExecutor;
|
private Executor mListenerExecutor;
|
||||||
private Region mObscuredTouchRegion;
|
private Region mObscuredTouchRegion;
|
||||||
@@ -110,6 +114,13 @@ public class TaskView extends SurfaceView implements SurfaceHolder.Callback,
|
|||||||
mGuard.open("release");
|
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). */
|
/** Until all users are converted, we may have mixed-use (eg. Car). */
|
||||||
private boolean isUsingShellTransitions() {
|
private boolean isUsingShellTransitions() {
|
||||||
return mTaskViewTransitions != null && Transitions.ENABLE_SHELL_TRANSITIONS;
|
return mTaskViewTransitions != null && Transitions.ENABLE_SHELL_TRANSITIONS;
|
||||||
@@ -269,11 +280,17 @@ public class TaskView extends SurfaceView implements SurfaceHolder.Callback,
|
|||||||
resetTaskInfo();
|
resetTaskInfo();
|
||||||
});
|
});
|
||||||
mGuard.close();
|
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(() -> {
|
mListenerExecutor.execute(() -> {
|
||||||
mListener.onReleased();
|
mListener.onReleased();
|
||||||
});
|
});
|
||||||
mIsInitialized = false;
|
mNotifiedForInitialized = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -407,12 +424,8 @@ public class TaskView extends SurfaceView implements SurfaceHolder.Callback,
|
|||||||
@Override
|
@Override
|
||||||
public void surfaceCreated(SurfaceHolder holder) {
|
public void surfaceCreated(SurfaceHolder holder) {
|
||||||
mSurfaceCreated = true;
|
mSurfaceCreated = true;
|
||||||
if (mListener != null && !mIsInitialized) {
|
mIsInitialized = true;
|
||||||
mIsInitialized = true;
|
notifyInitialized();
|
||||||
mListenerExecutor.execute(() -> {
|
|
||||||
mListener.onInitialized();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
mShellExecutor.execute(() -> {
|
mShellExecutor.execute(() -> {
|
||||||
if (mTaskToken == null) {
|
if (mTaskToken == null) {
|
||||||
// Nothing to update, task is not yet available
|
// 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
|
@Override
|
||||||
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
|
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
|
||||||
if (mTaskToken == null) {
|
if (mTaskToken == null) {
|
||||||
|
|||||||
@@ -169,6 +169,7 @@ public class TaskViewTest extends ShellTestCase {
|
|||||||
mTaskView.onTaskAppeared(mTaskInfo, mLeash);
|
mTaskView.onTaskAppeared(mTaskInfo, mLeash);
|
||||||
|
|
||||||
verify(mViewListener).onTaskCreated(eq(mTaskInfo.taskId), any());
|
verify(mViewListener).onTaskCreated(eq(mTaskInfo.taskId), any());
|
||||||
|
assertThat(mTaskView.isInitialized()).isTrue();
|
||||||
verify(mViewListener, never()).onTaskVisibilityChanged(anyInt(), anyBoolean());
|
verify(mViewListener, never()).onTaskVisibilityChanged(anyInt(), anyBoolean());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -178,6 +179,7 @@ public class TaskViewTest extends ShellTestCase {
|
|||||||
mTaskView.surfaceCreated(mock(SurfaceHolder.class));
|
mTaskView.surfaceCreated(mock(SurfaceHolder.class));
|
||||||
|
|
||||||
verify(mViewListener).onInitialized();
|
verify(mViewListener).onInitialized();
|
||||||
|
assertThat(mTaskView.isInitialized()).isTrue();
|
||||||
// No task, no visibility change
|
// No task, no visibility change
|
||||||
verify(mViewListener, never()).onTaskVisibilityChanged(anyInt(), anyBoolean());
|
verify(mViewListener, never()).onTaskVisibilityChanged(anyInt(), anyBoolean());
|
||||||
}
|
}
|
||||||
@@ -189,6 +191,7 @@ public class TaskViewTest extends ShellTestCase {
|
|||||||
mTaskView.surfaceCreated(mock(SurfaceHolder.class));
|
mTaskView.surfaceCreated(mock(SurfaceHolder.class));
|
||||||
|
|
||||||
verify(mViewListener).onInitialized();
|
verify(mViewListener).onInitialized();
|
||||||
|
assertThat(mTaskView.isInitialized()).isTrue();
|
||||||
verify(mViewListener).onTaskVisibilityChanged(eq(mTaskInfo.taskId), eq(true));
|
verify(mViewListener).onTaskVisibilityChanged(eq(mTaskInfo.taskId), eq(true));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -223,6 +226,7 @@ public class TaskViewTest extends ShellTestCase {
|
|||||||
|
|
||||||
verify(mOrganizer).removeListener(eq(mTaskView));
|
verify(mOrganizer).removeListener(eq(mTaskView));
|
||||||
verify(mViewListener).onReleased();
|
verify(mViewListener).onReleased();
|
||||||
|
assertThat(mTaskView.isInitialized()).isFalse();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -270,6 +274,7 @@ public class TaskViewTest extends ShellTestCase {
|
|||||||
|
|
||||||
verify(mViewListener).onTaskCreated(eq(mTaskInfo.taskId), any());
|
verify(mViewListener).onTaskCreated(eq(mTaskInfo.taskId), any());
|
||||||
verify(mViewListener, never()).onInitialized();
|
verify(mViewListener, never()).onInitialized();
|
||||||
|
assertThat(mTaskView.isInitialized()).isFalse();
|
||||||
// If there's no surface the task should be made invisible
|
// If there's no surface the task should be made invisible
|
||||||
verify(mViewListener).onTaskVisibilityChanged(eq(mTaskInfo.taskId), eq(false));
|
verify(mViewListener).onTaskVisibilityChanged(eq(mTaskInfo.taskId), eq(false));
|
||||||
}
|
}
|
||||||
@@ -281,6 +286,7 @@ public class TaskViewTest extends ShellTestCase {
|
|||||||
verify(mTaskViewTransitions, never()).setTaskViewVisible(any(), anyBoolean());
|
verify(mTaskViewTransitions, never()).setTaskViewVisible(any(), anyBoolean());
|
||||||
|
|
||||||
verify(mViewListener).onInitialized();
|
verify(mViewListener).onInitialized();
|
||||||
|
assertThat(mTaskView.isInitialized()).isTrue();
|
||||||
// No task, no visibility change
|
// No task, no visibility change
|
||||||
verify(mViewListener, never()).onTaskVisibilityChanged(anyInt(), anyBoolean());
|
verify(mViewListener, never()).onTaskVisibilityChanged(anyInt(), anyBoolean());
|
||||||
}
|
}
|
||||||
@@ -353,6 +359,7 @@ public class TaskViewTest extends ShellTestCase {
|
|||||||
|
|
||||||
verify(mOrganizer).removeListener(eq(mTaskView));
|
verify(mOrganizer).removeListener(eq(mTaskView));
|
||||||
verify(mViewListener).onReleased();
|
verify(mViewListener).onReleased();
|
||||||
|
assertThat(mTaskView.isInitialized()).isFalse();
|
||||||
verify(mTaskViewTransitions).removeTaskView(eq(mTaskView));
|
verify(mTaskViewTransitions).removeTaskView(eq(mTaskView));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user