From 14b26a7db804b1a7991d7d2ed944ad9f7e725d77 Mon Sep 17 00:00:00 2001 From: Xiaowen Lei <xilei@google.com> Date: Mon, 26 Feb 2024 22:27:21 +0000 Subject: [PATCH] Add lockscreen recently received BC Smartspace Targets to sysUI dumpSys. Launcher dumpsys already has this information. However, in some situations, Lockscreen targets are different from Launcher. This may help with further debugging b/320376858. Flag: NONE Bug: 320376858 Test: adb shell dumpsys activity service com.android.systemui | grep "LockscreenSmartspaceController:" -B 2 -A 20 Test: `adb bugreport` and check the SysUi custom view contains the dumpsys Change-Id: Ied1360dcfc17b2c44b53a58d8cb3d5ccdc6d61c9 --- .../LockscreenSmartspaceController.kt | 42 +++++++++++++++++-- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceController.kt index 599600d61976..0fd05550dbe3 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceController.kt @@ -39,7 +39,6 @@ import android.view.ViewGroup import com.android.keyguard.KeyguardUpdateMonitor import com.android.settingslib.Utils import com.android.systemui.Dumpable -import com.android.systemui.res.R import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Background import com.android.systemui.dagger.qualifiers.Main @@ -54,6 +53,7 @@ import com.android.systemui.plugins.BcSmartspaceDataPlugin.SmartspaceView import com.android.systemui.plugins.FalsingManager import com.android.systemui.plugins.clocks.WeatherData import com.android.systemui.plugins.statusbar.StatusBarStateController +import com.android.systemui.res.R import com.android.systemui.settings.UserTracker import com.android.systemui.shared.regionsampling.RegionSampler import com.android.systemui.smartspace.dagger.SmartspaceModule.Companion.DATE_SMARTSPACE_DATA_PLUGIN @@ -68,11 +68,14 @@ import com.android.systemui.util.settings.SecureSettings import com.android.systemui.util.time.SystemClock import java.io.PrintWriter import java.time.Instant +import java.util.Deque +import java.util.LinkedList import java.util.Optional import java.util.concurrent.Executor import javax.inject.Inject import javax.inject.Named + /** Controller for managing the smartspace view on the lockscreen */ @SysUISingleton class LockscreenSmartspaceController @@ -106,6 +109,8 @@ constructor( ) : Dumpable { companion object { private const val TAG = "LockscreenSmartspaceController" + + private const val MAX_RECENT_SMARTSPACE_DATA_FOR_DUMP = 5 } private var session: SmartspaceSession? = null @@ -114,6 +119,9 @@ constructor( private val plugin: BcSmartspaceDataPlugin? = optionalPlugin.orElse(null) private val configPlugin: BcSmartspaceConfigPlugin? = optionalConfigPlugin.orElse(null) + // This stores recently received Smartspace pushes to be included in dumpsys. + private val recentSmartspaceData: Deque<List<SmartspaceTarget>> = LinkedList() + // Smartspace can be used on multiple displays, such as when the user casts their screen private var smartspaceViews = mutableSetOf<SmartspaceView>() private var regionSamplers = @@ -173,6 +181,7 @@ constructor( // The weather data plugin takes unfiltered targets and performs the filtering internally. weatherPlugin?.onTargetsAvailable(targets) + val now = Instant.ofEpochMilli(systemClock.currentTimeMillis()) val weatherTarget = targets.find { t -> t.featureType == SmartspaceTarget.FEATURE_WEATHER && @@ -201,6 +210,14 @@ constructor( } val filteredTargets = targets.filter(::filterSmartspaceTarget) + + synchronized(recentSmartspaceData) { + recentSmartspaceData.offerLast(filteredTargets) + if (recentSmartspaceData.size > MAX_RECENT_SMARTSPACE_DATA_FOR_DUMP) { + recentSmartspaceData.pollFirst() + } + } + plugin?.onTargetsAvailable(filteredTargets) } @@ -588,9 +605,26 @@ constructor( return null } - override fun dump(pw: PrintWriter, args: Array<out String>) = pw.asIndenting().run { - printCollection("Region Samplers", regionSamplers.values) { - it.dump(this) + override fun dump(pw: PrintWriter, args: Array<out String>) { + pw.asIndenting().run { + printCollection("Region Samplers", regionSamplers.values) { + it.dump(this) + } + } + + pw.println("Recent BC Smartspace Targets (most recent first)") + synchronized(recentSmartspaceData) { + if (recentSmartspaceData.size === 0) { + pw.println(" No data\n") + return + } + recentSmartspaceData.descendingIterator().forEachRemaining { smartspaceTargets -> + pw.println(" Number of targets: ${smartspaceTargets.size}") + for (target in smartspaceTargets) { + pw.println(" $target") + } + pw.println() + } } } } -- GitLab