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

Commit 82eb8a29 authored by Evan Severson's avatar Evan Severson
Browse files

Add dump to FgsManagerController

Test: adb shell dumpsys activity service com.android.systemui/.SystemUIService FgsManagerController
Bug: 201579707
Change-Id: I7afe7267d896bdee6eb57a9bbc1da0ed5f7771ca
parent 2f6356d8
Loading
Loading
Loading
Loading
+82 −2
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import android.os.RemoteException
import android.provider.DeviceConfig.NAMESPACE_SYSTEMUI
import android.text.format.DateUtils
import android.util.ArrayMap
import android.util.IndentingPrintWriter
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@@ -38,14 +39,19 @@ import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.android.internal.config.sysui.SystemUiDeviceConfigFlags.TASK_MANAGER_ENABLED
import com.android.systemui.Dumpable
import com.android.systemui.R
import com.android.systemui.animation.DialogLaunchAnimator
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.dump.DumpManager
import com.android.systemui.statusbar.phone.SystemUIDialog
import com.android.systemui.util.DeviceConfigProxy
import com.android.systemui.util.indentIfPossible
import com.android.systemui.util.time.SystemClock
import java.io.FileDescriptor
import java.io.PrintWriter
import java.util.Objects
import java.util.concurrent.Executor
import javax.inject.Inject
@@ -60,8 +66,9 @@ class FgsManagerController @Inject constructor(
    private val activityManager: IActivityManager,
    private val packageManager: PackageManager,
    private val deviceConfigProxy: DeviceConfigProxy,
    private val dialogLaunchAnimator: DialogLaunchAnimator
) : IForegroundServiceObserver.Stub() {
    private val dialogLaunchAnimator: DialogLaunchAnimator,
    private val dumpManager: DumpManager
) : IForegroundServiceObserver.Stub(), Dumpable {

    companion object {
        private val LOG_TAG = FgsManagerController::class.java.simpleName
@@ -116,6 +123,8 @@ class FgsManagerController @Inject constructor(
            isAvailable = deviceConfigProxy
                    .getBoolean(NAMESPACE_SYSTEMUI, TASK_MANAGER_ENABLED, true)

            dumpManager.registerDumpable(this)

            initialized = true
        }
    }
@@ -379,6 +388,16 @@ class FgsManagerController @Inject constructor(
        }

        override fun hashCode(): Int = Objects.hash(userId, packageName)

        fun dump(pw: PrintWriter) {
            pw.println("UserPackage: [")
            pw.indentIfPossible {
                pw.println("userId=$userId")
                pw.println("packageName=$packageName")
                pw.println("uiControl=$uiControl")
            }
            pw.println("]")
        }
    }

    private data class StartTimeAndTokens(
@@ -398,6 +417,22 @@ class FgsManagerController @Inject constructor(
        fun isEmpty(): Boolean {
            return tokens.isEmpty()
        }

        fun dump(pw: PrintWriter) {
            pw.println("StartTimeAndTokens: [")
            pw.indentIfPossible {
                pw.println("startTime=$startTime (time running =" +
                        " ${systemClock.elapsedRealtime() - startTime}ms)")
                pw.println("tokens: [")
                pw.indentIfPossible {
                    for (token in tokens) {
                        pw.println("$token")
                    }
                }
                pw.println("]")
            }
            pw.println("]")
        }
    }

    private class AppItemViewHolder(parent: View) : RecyclerView.ViewHolder(parent) {
@@ -429,9 +464,54 @@ class FgsManagerController @Inject constructor(
        var appLabel: CharSequence = ""
        var icon: Drawable? = null
        var stopped = false

        fun dump(pw: PrintWriter, systemClock: SystemClock) {
            pw.println("RunningApp: [")
            pw.indentIfPossible {
                pw.println("userId=$userId")
                pw.println("packageName=$packageName")
                pw.println("timeStarted=$timeStarted (time since start =" +
                        " ${systemClock.elapsedRealtime() - timeStarted}ms)\"")
                pw.println("uiControl=$uiControl")
                pw.println("appLabel=$appLabel")
                pw.println("icon=$icon")
                pw.println("stopped=$stopped")
            }
            pw.println("]")
        }
    }

    private enum class UIControl {
        NORMAL, HIDE_BUTTON, HIDE_ENTRY
    }

    override fun dump(fd: FileDescriptor, printwriter: PrintWriter, args: Array<out String>) {
        val pw = IndentingPrintWriter(printwriter)
        synchronized(lock) {
            pw.println("changesSinceDialog=$changesSinceDialog")
            pw.println("Running service tokens: [")
            pw.indentIfPossible {
                runningServiceTokens.forEach { (userPackage, startTimeAndTokens) ->
                    pw.println("{")
                    pw.indentIfPossible {
                        userPackage.dump(pw)
                        startTimeAndTokens.dump(pw)
                    }
                    pw.println("}")
                }
            }
            pw.println("]")

            pw.println("Loaded package UI info: [")
            pw.indentIfPossible {
                runningApps.forEach { (userPackage, runningApp) ->
                    pw.println("{")
                    userPackage.dump(pw)
                    runningApp.dump(pw, systemClock)
                    pw.println("}")
                }
            }
            pw.println("]")
        }
    }
}