summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/FgsManagerController.kt84
1 files changed, 82 insertions, 2 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/qs/FgsManagerController.kt b/packages/SystemUI/src/com/android/systemui/qs/FgsManagerController.kt
index bbe0a99309c6..89735c3a547d 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/FgsManagerController.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/FgsManagerController.kt
@@ -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("]")
+ }
+ }
}