Merge "Add API to query number of visible desktop tasks" into tm-qpr-dev
This commit is contained in:
@@ -36,6 +36,7 @@ import android.database.ContentObserver;
|
||||
import android.net.Uri;
|
||||
import android.os.Handler;
|
||||
import android.os.IBinder;
|
||||
import android.os.RemoteException;
|
||||
import android.os.UserHandle;
|
||||
import android.provider.Settings;
|
||||
import android.util.ArraySet;
|
||||
@@ -261,6 +262,11 @@ public class DesktopModeController implements RemoteCallable<DesktopModeControll
|
||||
}
|
||||
}
|
||||
|
||||
/** Get number of tasks that are marked as visible */
|
||||
int getVisibleTaskCount() {
|
||||
return mDesktopModeTaskRepository.getVisibleTaskCount();
|
||||
}
|
||||
|
||||
@NonNull
|
||||
private WindowContainerTransaction bringDesktopAppsToFront(boolean force) {
|
||||
final WindowContainerTransaction wct = new WindowContainerTransaction();
|
||||
@@ -438,5 +444,15 @@ public class DesktopModeController implements RemoteCallable<DesktopModeControll
|
||||
executeRemoteCallWithTaskPermission(mController, "showDesktopApps",
|
||||
DesktopModeController::showDesktopApps);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getVisibleTaskCount() throws RemoteException {
|
||||
int[] result = new int[1];
|
||||
executeRemoteCallWithTaskPermission(mController, "getVisibleTaskCount",
|
||||
controller -> result[0] = controller.getVisibleTaskCount(),
|
||||
true /* blocking */
|
||||
);
|
||||
return result[0];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -142,6 +142,13 @@ class DesktopModeTaskRepository {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get number of tasks that are marked as visible
|
||||
*/
|
||||
fun getVisibleTaskCount(): Int {
|
||||
return visibleTasks.size
|
||||
}
|
||||
|
||||
/**
|
||||
* Add (or move if it already exists) the task to the top of the ordered list.
|
||||
*/
|
||||
|
||||
@@ -96,6 +96,11 @@ class DesktopTasksController(
|
||||
}
|
||||
}
|
||||
|
||||
/** Get number of tasks that are marked as visible */
|
||||
fun getVisibleTaskCount(): Int {
|
||||
return desktopModeTaskRepository.getVisibleTaskCount()
|
||||
}
|
||||
|
||||
/** Move a task with given `taskId` to desktop */
|
||||
fun moveToDesktop(taskId: Int) {
|
||||
shellTaskOrganizer.getRunningTaskInfo(taskId)?.let { task -> moveToDesktop(task) }
|
||||
@@ -309,5 +314,16 @@ class DesktopTasksController(
|
||||
Consumer(DesktopTasksController::showDesktopApps)
|
||||
)
|
||||
}
|
||||
|
||||
override fun getVisibleTaskCount(): Int {
|
||||
val result = IntArray(1)
|
||||
ExecutorUtils.executeRemoteCallWithTaskPermission(
|
||||
controller,
|
||||
"getVisibleTaskCount",
|
||||
{ controller -> result[0] = controller.getVisibleTaskCount() },
|
||||
true /* blocking */
|
||||
)
|
||||
return result[0]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,4 +23,7 @@ interface IDesktopMode {
|
||||
|
||||
/** Show apps on the desktop */
|
||||
void showDesktopApps();
|
||||
|
||||
/** Get count of visible desktop tasks */
|
||||
int getVisibleTaskCount();
|
||||
}
|
||||
@@ -333,6 +333,41 @@ public class DesktopModeControllerTest extends ShellTestCase {
|
||||
assertThat(op2.getContainer()).isEqualTo(task2.token.asBinder());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetVisibleTaskCount_noTasks_returnsZero() {
|
||||
assertThat(mController.getVisibleTaskCount()).isEqualTo(0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetVisibleTaskCount_twoTasks_bothVisible_returnsTwo() {
|
||||
RunningTaskInfo task1 = createFreeformTask();
|
||||
mDesktopModeTaskRepository.addActiveTask(task1.taskId);
|
||||
mDesktopModeTaskRepository.addOrMoveFreeformTaskToTop(task1.taskId);
|
||||
mDesktopModeTaskRepository.updateVisibleFreeformTasks(task1.taskId, true /* visible */);
|
||||
|
||||
RunningTaskInfo task2 = createFreeformTask();
|
||||
mDesktopModeTaskRepository.addActiveTask(task2.taskId);
|
||||
mDesktopModeTaskRepository.addOrMoveFreeformTaskToTop(task2.taskId);
|
||||
mDesktopModeTaskRepository.updateVisibleFreeformTasks(task2.taskId, true /* visible */);
|
||||
|
||||
assertThat(mController.getVisibleTaskCount()).isEqualTo(2);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetVisibleTaskCount_twoTasks_oneVisible_returnsOne() {
|
||||
RunningTaskInfo task1 = createFreeformTask();
|
||||
mDesktopModeTaskRepository.addActiveTask(task1.taskId);
|
||||
mDesktopModeTaskRepository.addOrMoveFreeformTaskToTop(task1.taskId);
|
||||
mDesktopModeTaskRepository.updateVisibleFreeformTasks(task1.taskId, true /* visible */);
|
||||
|
||||
RunningTaskInfo task2 = createFreeformTask();
|
||||
mDesktopModeTaskRepository.addActiveTask(task2.taskId);
|
||||
mDesktopModeTaskRepository.addOrMoveFreeformTaskToTop(task2.taskId);
|
||||
mDesktopModeTaskRepository.updateVisibleFreeformTasks(task2.taskId, false /* visible */);
|
||||
|
||||
assertThat(mController.getVisibleTaskCount()).isEqualTo(1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testHandleTransitionRequest_desktopModeNotActive_returnsNull() {
|
||||
when(DesktopModeStatus.isActive(any())).thenReturn(false);
|
||||
|
||||
@@ -140,6 +140,36 @@ class DesktopModeTaskRepositoryTest : ShellTestCase() {
|
||||
assertThat(listener.visibleFreeformTaskChangedCalls).isEqualTo(3)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun getVisibleTaskCount() {
|
||||
// No tasks, count is 0
|
||||
assertThat(repo.getVisibleTaskCount()).isEqualTo(0)
|
||||
|
||||
// New task increments count to 1
|
||||
repo.updateVisibleFreeformTasks(taskId = 1, visible = true)
|
||||
assertThat(repo.getVisibleTaskCount()).isEqualTo(1)
|
||||
|
||||
// Visibility update to same task does not increase count
|
||||
repo.updateVisibleFreeformTasks(taskId = 1, visible = true)
|
||||
assertThat(repo.getVisibleTaskCount()).isEqualTo(1)
|
||||
|
||||
// Second task visible increments count
|
||||
repo.updateVisibleFreeformTasks(taskId = 2, visible = true)
|
||||
assertThat(repo.getVisibleTaskCount()).isEqualTo(2)
|
||||
|
||||
// Hiding a task decrements count
|
||||
repo.updateVisibleFreeformTasks(taskId = 1, visible = false)
|
||||
assertThat(repo.getVisibleTaskCount()).isEqualTo(1)
|
||||
|
||||
// Hiding all tasks leaves count at 0
|
||||
repo.updateVisibleFreeformTasks(taskId = 2, visible = false)
|
||||
assertThat(repo.getVisibleTaskCount()).isEqualTo(0)
|
||||
|
||||
// Hiding a not existing task, count remains at 0
|
||||
repo.updateVisibleFreeformTasks(taskId = 999, visible = false)
|
||||
assertThat(repo.getVisibleTaskCount()).isEqualTo(0)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun addOrMoveFreeformTaskToTop_didNotExist_addsToTop() {
|
||||
repo.addOrMoveFreeformTaskToTop(5)
|
||||
|
||||
@@ -196,6 +196,27 @@ class DesktopTasksControllerTest : ShellTestCase() {
|
||||
wct.assertReorderAt(index = 0, homeTask)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun getVisibleTaskCount_noTasks_returnsZero() {
|
||||
assertThat(controller.getVisibleTaskCount()).isEqualTo(0)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun getVisibleTaskCount_twoTasks_bothVisible_returnsTwo() {
|
||||
setUpHomeTask()
|
||||
setUpFreeformTask().also(::markTaskVisible)
|
||||
setUpFreeformTask().also(::markTaskVisible)
|
||||
assertThat(controller.getVisibleTaskCount()).isEqualTo(2)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun getVisibleTaskCount_twoTasks_oneVisible_returnsOne() {
|
||||
setUpHomeTask()
|
||||
setUpFreeformTask().also(::markTaskVisible)
|
||||
setUpFreeformTask().also(::markTaskHidden)
|
||||
assertThat(controller.getVisibleTaskCount()).isEqualTo(1)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun moveToDesktop() {
|
||||
val task = setUpFullscreenTask()
|
||||
@@ -224,7 +245,7 @@ class DesktopTasksControllerTest : ShellTestCase() {
|
||||
assertThat(hierarchyOps).hasSize(3)
|
||||
assertReorderSequence(homeTask, freeformTask, fullscreenTask)
|
||||
assertThat(changes[fullscreenTask.token.asBinder()]?.windowingMode)
|
||||
.isEqualTo(WINDOWING_MODE_FREEFORM)
|
||||
.isEqualTo(WINDOWING_MODE_FREEFORM)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user