Loading packages/SystemUI/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceController.kt +38 −4 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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 Loading Loading @@ -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 Loading @@ -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 = Loading Loading @@ -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 && Loading Loading @@ -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) } Loading Loading @@ -588,10 +605,27 @@ constructor( return null } override fun dump(pw: PrintWriter, args: Array<out String>) = pw.asIndenting().run { 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() } } } } Loading
packages/SystemUI/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceController.kt +38 −4 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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 Loading Loading @@ -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 Loading @@ -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 = Loading Loading @@ -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 && Loading Loading @@ -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) } Loading Loading @@ -588,10 +605,27 @@ constructor( return null } override fun dump(pw: PrintWriter, args: Array<out String>) = pw.asIndenting().run { 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() } } } }