Skip to content
Snippets Groups Projects
Commit 14b26a7d authored by Xiaowen Lei's avatar Xiaowen Lei
Browse files

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
parent f8894145
No related branches found
No related tags found
No related merge requests found
......@@ -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()
}
}
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment