Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c5c64353 authored by Xiaowen Lei's avatar Xiaowen Lei Committed by Android (Google) Code Review
Browse files

Merge "Add lockscreen recently received BC Smartspace Targets to sysUI dumpSys." into main

parents 58fa714f 14b26a7d
Loading
Loading
Loading
Loading
+38 −4
Original line number Diff line number Diff line
@@ -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,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()
            }
        }
    }
}