diff options
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/qs/FgsManagerController.kt | 84 |
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("]") + } + } } |