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

Commit ba0b7632 authored by davidct's avatar davidct
Browse files

Delegate time update ticking of IcuDateTextView to callers and reduce the...

Delegate time update ticking of IcuDateTextView to callers and reduce the default ticking to per minute instead of per second.

Bug: 338371247
Flag: EXEMPT bugfix
Test: Tested manually on device with perfetto, updated unit tests
Change-Id: I2986cc26f2755914a22ec94e3c798f412016dd4d
parent 1e2ff51e
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -133,6 +133,12 @@ public interface BcSmartspaceDataPlugin extends Plugin {
         */
        default void setScreenOn(boolean screenOn) {}

        /**
         * Sets a delegate to handle clock event registration. Should be called immediately after
         * the view is created.
         */
        default void setTimeChangedDelegate(TimeChangedDelegate delegate) {}

        /**
         * Set if dozing is true or false
         */
@@ -228,4 +234,13 @@ public interface BcSmartspaceDataPlugin extends Plugin {
        /** Start the PendingIntent */
        void startPendingIntent(View v, PendingIntent pi, boolean showOnLockscreen);
    }

    /** Interface for delegating time updates */
    interface TimeChangedDelegate {
        /** Register the callback to be called when time is updated **/
        void register(Runnable callback);

        /** Unegister the callback **/
        void unregister();
    }
}
+26 −0
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ import android.view.View
import android.view.ViewGroup
import androidx.annotation.VisibleForTesting
import com.android.keyguard.KeyguardUpdateMonitor
import com.android.keyguard.KeyguardUpdateMonitorCallback
import com.android.settingslib.Utils
import com.android.systemui.Dumpable
import com.android.systemui.Flags.smartspaceLockscreenViewmodel
@@ -53,6 +54,7 @@ import com.android.systemui.plugins.BcSmartspaceConfigPlugin
import com.android.systemui.plugins.BcSmartspaceDataPlugin
import com.android.systemui.plugins.BcSmartspaceDataPlugin.SmartspaceTargetListener
import com.android.systemui.plugins.BcSmartspaceDataPlugin.SmartspaceView
import com.android.systemui.plugins.BcSmartspaceDataPlugin.TimeChangedDelegate
import com.android.systemui.plugins.FalsingManager
import com.android.systemui.plugins.clocks.WeatherData
import com.android.systemui.plugins.statusbar.StatusBarStateController
@@ -405,6 +407,7 @@ constructor(
        val ssView = plugin.getView(parent)
        configPlugin?.let { ssView.registerConfigProvider(it) }
        ssView.setUiSurface(BcSmartspaceDataPlugin.UI_SURFACE_LOCK_SCREEN_AOD)
        ssView.setTimeChangedDelegate(SmartspaceTimeChangedDelegate(keyguardUpdateMonitor))
        ssView.registerDataProvider(plugin)

        ssView.setIntentStarter(object : BcSmartspaceDataPlugin.IntentStarter {
@@ -675,5 +678,28 @@ constructor(
            }
        }
    }

    private class SmartspaceTimeChangedDelegate(
        private val keyguardUpdateMonitor: KeyguardUpdateMonitor
    ) : TimeChangedDelegate {
        private var keyguardUpdateMonitorCallback: KeyguardUpdateMonitorCallback? = null
        override fun register(callback: Runnable) {
            if (keyguardUpdateMonitorCallback != null) {
                unregister()
            }
            keyguardUpdateMonitorCallback = object : KeyguardUpdateMonitorCallback() {
                override fun onTimeChanged() {
                    callback.run()
                }
            }
            keyguardUpdateMonitor.registerCallback(keyguardUpdateMonitorCallback)
            callback.run()
        }

        override fun unregister() {
            keyguardUpdateMonitor.removeCallback(keyguardUpdateMonitorCallback)
            keyguardUpdateMonitorCallback = null
        }
    }
}
+16 −0
Original line number Diff line number Diff line
@@ -760,6 +760,7 @@ class LockscreenSmartspaceControllerTest : SysuiTestCase() {
        // THEN the existing session is reused and views are registered
        verify(smartspaceManager, never()).createSmartspaceSession(any())
        verify(smartspaceView2).setUiSurface(BcSmartspaceDataPlugin.UI_SURFACE_LOCK_SCREEN_AOD)
        verify(smartspaceView2).setTimeChangedDelegate(any())
        verify(smartspaceView2).registerDataProvider(plugin)
        verify(smartspaceView2).registerConfigProvider(configPlugin)
    }
@@ -833,6 +834,7 @@ class LockscreenSmartspaceControllerTest : SysuiTestCase() {

        verify(dateSmartspaceView).setUiSurface(
                BcSmartspaceDataPlugin.UI_SURFACE_LOCK_SCREEN_AOD)
        verify(dateSmartspaceView).setTimeChangedDelegate(any())
        verify(dateSmartspaceView).registerDataProvider(datePlugin)

        verify(dateSmartspaceView).setPrimaryTextColor(anyInt())
@@ -845,6 +847,7 @@ class LockscreenSmartspaceControllerTest : SysuiTestCase() {

        verify(weatherSmartspaceView).setUiSurface(
                BcSmartspaceDataPlugin.UI_SURFACE_LOCK_SCREEN_AOD)
        verify(weatherSmartspaceView).setTimeChangedDelegate(any())
        verify(weatherSmartspaceView).registerDataProvider(weatherPlugin)

        verify(weatherSmartspaceView).setPrimaryTextColor(anyInt())
@@ -856,6 +859,7 @@ class LockscreenSmartspaceControllerTest : SysuiTestCase() {
        controller.stateChangeListener.onViewAttachedToWindow(view)

        verify(smartspaceView).setUiSurface(BcSmartspaceDataPlugin.UI_SURFACE_LOCK_SCREEN_AOD)
        verify(smartspaceView).setTimeChangedDelegate(any())
        verify(smartspaceView).registerDataProvider(plugin)
        verify(smartspaceView).registerConfigProvider(configPlugin)
        verify(smartspaceSession)
@@ -981,6 +985,10 @@ class LockscreenSmartspaceControllerTest : SysuiTestCase() {
            override fun setUiSurface(uiSurface: String) {
            }

            override fun setTimeChangedDelegate(
                delegate: BcSmartspaceDataPlugin.TimeChangedDelegate?
            ) {}

            override fun setDozeAmount(amount: Float) {
            }

@@ -1009,6 +1017,10 @@ class LockscreenSmartspaceControllerTest : SysuiTestCase() {
            override fun setUiSurface(uiSurface: String) {
            }

            override fun setTimeChangedDelegate(
                delegate: BcSmartspaceDataPlugin.TimeChangedDelegate?
            ) {}

            override fun setDozeAmount(amount: Float) {
            }

@@ -1033,6 +1045,10 @@ class LockscreenSmartspaceControllerTest : SysuiTestCase() {
            override fun setUiSurface(uiSurface: String) {
            }

            override fun setTimeChangedDelegate(
                delegate: BcSmartspaceDataPlugin.TimeChangedDelegate?
            ) {}

            override fun setDozeAmount(amount: Float) {
            }