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

Commit 8172643b authored by Ats Jenk's avatar Ats Jenk
Browse files

Dump DesktopModeTaskRepository data

Include repository status in the WMShell dump

Bug: 279585872
Test: dump WMShell and observe desktop repository info there

Change-Id: I2c0a63d97143a6447ad2ddd0d8df51eb7d9a817d
parent 5c8ee219
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -2152,7 +2152,7 @@ public class BubbleController implements ConfigurationChangeListener,
                    pw.println("   suppressing: " + key);
                }

                pw.print("mAppBubbleTaskIds: " + mAppBubbleTaskIds.values());
                pw.println("mAppBubbleTaskIds: " + mAppBubbleTaskIds.values());
            }
        }

+4 −3
Original line number Diff line number Diff line
@@ -679,6 +679,7 @@ public abstract class WMShellModule {
    static DesktopTasksController provideDesktopTasksController(
            Context context,
            ShellInit shellInit,
            ShellCommandHandler shellCommandHandler,
            ShellController shellController,
            DisplayController displayController,
            ShellTaskOrganizer shellTaskOrganizer,
@@ -690,9 +691,9 @@ public abstract class WMShellModule {
            @DynamicOverride DesktopModeTaskRepository desktopModeTaskRepository,
            @ShellMainThread ShellExecutor mainExecutor
    ) {
        return new DesktopTasksController(context, shellInit, shellController, displayController,
                shellTaskOrganizer, syncQueue, rootTaskDisplayAreaOrganizer, transitions,
                enterDesktopTransitionHandler, exitDesktopTransitionHandler,
        return new DesktopTasksController(context, shellInit, shellCommandHandler, shellController,
                displayController, shellTaskOrganizer, syncQueue, rootTaskDisplayAreaOrganizer,
                transitions, enterDesktopTransitionHandler, exitDesktopTransitionHandler,
                desktopModeTaskRepository, mainExecutor);
    }

+24 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import androidx.core.util.keyIterator
import androidx.core.util.valueIterator
import com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE
import com.android.wm.shell.util.KtProtoLog
import java.io.PrintWriter
import java.util.concurrent.Executor
import java.util.function.Consumer

@@ -339,6 +340,25 @@ class DesktopModeTaskRepository {
        return displayData[displayId]?.stashed ?: false
    }

    internal fun dump(pw: PrintWriter, prefix: String) {
        val innerPrefix = "$prefix  "
        pw.println("${prefix}DesktopModeTaskRepository")
        dumpDisplayData(pw, innerPrefix)
        pw.println("${innerPrefix}freeformTasksInZOrder=${freeformTasksInZOrder.toDumpString()}")
        pw.println("${innerPrefix}activeTasksListeners=${activeTasksListeners.size}")
        pw.println("${innerPrefix}visibleTasksListeners=${visibleTasksListeners.size}")
    }

    private fun dumpDisplayData(pw: PrintWriter, prefix: String) {
        val innerPrefix = "$prefix  "
        displayData.forEach { displayId, data ->
            pw.println("${prefix}Display $displayId:")
            pw.println("${innerPrefix}activeTasks=${data.activeTasks.toDumpString()}")
            pw.println("${innerPrefix}visibleTasks=${data.visibleTasks.toDumpString()}")
            pw.println("${innerPrefix}stashed=${data.stashed}")
        }
    }

    /**
     * Defines interface for classes that can listen to changes for active tasks in desktop mode.
     */
@@ -367,3 +387,7 @@ class DesktopModeTaskRepository {
        fun onStashedChanged(displayId: Int, stashed: Boolean) {}
    }
}

private fun <T> Iterable<T>.toDumpString(): String {
    return joinToString(separator = ", ", prefix = "[", postfix = "]")
}
 No newline at end of file
+10 −0
Original line number Diff line number Diff line
@@ -54,11 +54,13 @@ import com.android.wm.shell.common.annotations.ExternalThread
import com.android.wm.shell.common.annotations.ShellMainThread
import com.android.wm.shell.desktopmode.DesktopModeTaskRepository.VisibleTasksListener
import com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE
import com.android.wm.shell.sysui.ShellCommandHandler
import com.android.wm.shell.sysui.ShellController
import com.android.wm.shell.sysui.ShellInit
import com.android.wm.shell.sysui.ShellSharedConstants
import com.android.wm.shell.transition.Transitions
import com.android.wm.shell.util.KtProtoLog
import java.io.PrintWriter
import java.util.concurrent.Executor
import java.util.function.Consumer

@@ -66,6 +68,7 @@ import java.util.function.Consumer
class DesktopTasksController(
        private val context: Context,
        shellInit: ShellInit,
        private val shellCommandHandler: ShellCommandHandler,
        private val shellController: ShellController,
        private val displayController: DisplayController,
        private val shellTaskOrganizer: ShellTaskOrganizer,
@@ -95,6 +98,7 @@ class DesktopTasksController(

    private fun onInit() {
        KtProtoLog.d(WM_SHELL_DESKTOP_MODE, "Initialize DesktopTasksController")
        shellCommandHandler.addDumpCallback(this::dump, this)
        shellController.addExternalInterface(
            ShellSharedConstants.KEY_EXTRA_SHELL_DESKTOP_MODE,
            { createExternalInterface() },
@@ -710,6 +714,12 @@ class DesktopTasksController(
        desktopModeTaskRepository.setTaskCornerListener(listener, callbackExecutor)
    }

    private fun dump(pw: PrintWriter, prefix: String) {
        val innerPrefix = "$prefix  "
        pw.println("${prefix}DesktopTasksController")
        desktopModeTaskRepository.dump(pw, innerPrefix)
    }

    /** The interface for calls from outside the shell, within the host process. */
    @ExternalThread
    private inner class DesktopModeImpl : DesktopMode {
+3 −0
Original line number Diff line number Diff line
@@ -51,6 +51,7 @@ import com.android.wm.shell.common.SyncTransactionQueue
import com.android.wm.shell.desktopmode.DesktopTestHelpers.Companion.createFreeformTask
import com.android.wm.shell.desktopmode.DesktopTestHelpers.Companion.createFullscreenTask
import com.android.wm.shell.desktopmode.DesktopTestHelpers.Companion.createHomeTask
import com.android.wm.shell.sysui.ShellCommandHandler
import com.android.wm.shell.sysui.ShellController
import com.android.wm.shell.sysui.ShellInit
import com.android.wm.shell.transition.Transitions
@@ -78,6 +79,7 @@ import org.mockito.Mockito.`when` as whenever
class DesktopTasksControllerTest : ShellTestCase() {

    @Mock lateinit var testExecutor: ShellExecutor
    @Mock lateinit var shellCommandHandler: ShellCommandHandler
    @Mock lateinit var shellController: ShellController
    @Mock lateinit var displayController: DisplayController
    @Mock lateinit var shellTaskOrganizer: ShellTaskOrganizer
@@ -115,6 +117,7 @@ class DesktopTasksControllerTest : ShellTestCase() {
        return DesktopTasksController(
            context,
            shellInit,
            shellCommandHandler,
            shellController,
            displayController,
            shellTaskOrganizer,