Merge "Add API to query number of visible desktop tasks" into tm-qpr-dev

This commit is contained in:
Ats Jenk
2023-01-17 19:18:59 +00:00
committed by Android (Google) Code Review
7 changed files with 129 additions and 1 deletions

View File

@@ -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];
}
}
}

View File

@@ -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.
*/

View File

@@ -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]
}
}
}

View File

@@ -23,4 +23,7 @@ interface IDesktopMode {
/** Show apps on the desktop */
void showDesktopApps();
/** Get count of visible desktop tasks */
int getVisibleTaskCount();
}

View File

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

View File

@@ -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)

View File

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