Add dump to FgsManagerController

Test: adb shell dumpsys activity service com.android.systemui/.SystemUIService FgsManagerController
Bug: 201579707
Change-Id: I7afe7267d896bdee6eb57a9bbc1da0ed5f7771ca
This commit is contained in:
Evan Severson
2022-02-11 10:34:07 -08:00
parent 2f6356d870
commit 82eb8a29bb

View File

@@ -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("]")
}
}
}