Send weather data from LS Smartspace to clock Setting up new Clock Event and data flow to handle weather data updates for the custom weather clock. Bug: 265069396 Test: manual Change-Id: I2711660b34935936c9a1d2651a14415c54b551ef
diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/ClockProviderPlugin.kt b/packages/SystemUI/plugin/src/com/android/systemui/plugins/ClockProviderPlugin.kt index bbfb6fb..4ef525a 100644 --- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/ClockProviderPlugin.kt +++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/ClockProviderPlugin.kt
@@ -20,6 +20,7 @@ import com.android.internal.annotations.Keep import com.android.systemui.plugins.annotations.ProvidesInterface import com.android.systemui.plugins.log.LogBuffer +import com.android.systemui.statusbar.Weather import java.io.PrintWriter import java.util.Locale import java.util.TimeZone @@ -111,6 +112,9 @@ /** Call whenever the color palette should update */ fun onColorPaletteChanged(resources: Resources) {} + + /** Call whenever the weather data should update */ + fun onWeatherDataChanged(data: Weather) {} } /** Methods which trigger various clock animations */
diff --git a/packages/SystemUI/src/com/android/keyguard/ClockEventController.kt b/packages/SystemUI/src/com/android/keyguard/ClockEventController.kt index 7f95ca6..ea079a9 100644 --- a/packages/SystemUI/src/com/android/keyguard/ClockEventController.kt +++ b/packages/SystemUI/src/com/android/keyguard/ClockEventController.kt
@@ -48,6 +48,7 @@ import com.android.systemui.plugins.log.LogBuffer import com.android.systemui.plugins.log.LogLevel.DEBUG import com.android.systemui.shared.regionsampling.RegionSampler +import com.android.systemui.statusbar.Weather import com.android.systemui.statusbar.policy.BatteryController import com.android.systemui.statusbar.policy.BatteryController.BatteryStateChangeCallback import com.android.systemui.statusbar.policy.ConfigurationController @@ -273,6 +274,12 @@ override fun onUserSwitchComplete(userId: Int) { clock?.events?.onTimeFormatChanged(DateFormat.is24HourFormat(context)) } + + override fun onWeatherDataChanged(data: Weather?) { + if (data != null) { + clock?.events?.onWeatherDataChanged(data) + } + } } fun registerListeners(parent: View) {
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java index 54886c3..c68f295 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
@@ -108,7 +108,6 @@ import android.os.Message; import android.os.PowerManager; import android.os.RemoteException; -import android.os.SystemClock; import android.os.Trace; import android.os.UserHandle; import android.os.UserManager; @@ -153,6 +152,7 @@ import com.android.systemui.shared.system.TaskStackChangeListener; import com.android.systemui.shared.system.TaskStackChangeListeners; import com.android.systemui.statusbar.StatusBarState; +import com.android.systemui.statusbar.Weather; import com.android.systemui.statusbar.phone.KeyguardBypassController; import com.android.systemui.statusbar.policy.DevicePostureController; import com.android.systemui.telephony.TelephonyListenerManager; @@ -3217,6 +3217,24 @@ } /** + * @param data the weather data (temp, conditions, unit) for weather clock to use + */ + public void sendWeatherData(Weather data) { + mHandler.post(()-> { + handleWeatherDataUpdate(data); }); + } + + private void handleWeatherDataUpdate(Weather data) { + Assert.isMainThread(); + for (int i = 0; i < mCallbacks.size(); i++) { + KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get(); + if (cb != null) { + cb.onWeatherDataChanged(data); + } + } + } + + /** * Handle {@link #MSG_BATTERY_UPDATE} */ private void handleBatteryUpdate(BatteryStatus status) {
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java index e6b9ac8..4a7dd24 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java
@@ -24,6 +24,7 @@ import com.android.settingslib.fuelgauge.BatteryStatus; import com.android.systemui.statusbar.KeyguardIndicationController; +import com.android.systemui.statusbar.Weather; import java.util.TimeZone; @@ -58,6 +59,11 @@ public void onTimeFormatChanged(String timeFormat) { } /** + * Called when receive new weather data. + */ + public void onWeatherDataChanged(Weather data) { } + + /** * Called when the carrier PLMN or SPN changes. */ public void onRefreshCarrierInfo() { }
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 b97d4e4..5440fcc 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceController.kt
@@ -35,6 +35,7 @@ import android.view.ContextThemeWrapper import android.view.View import android.view.ViewGroup +import com.android.keyguard.KeyguardUpdateMonitor import com.android.settingslib.Utils import com.android.systemui.R import com.android.systemui.dagger.SysUISingleton @@ -83,6 +84,7 @@ private val statusBarStateController: StatusBarStateController, private val deviceProvisionedController: DeviceProvisionedController, private val bypassController: KeyguardBypassController, + private val keyguardUpdateMonitor: KeyguardUpdateMonitor, private val execution: Execution, @Main private val uiExecutor: Executor, @Background private val bgExecutor: Executor, @@ -175,10 +177,10 @@ } if (weatherTarget != null) { val weatherData = Weather.fromBundle(weatherTarget.baseAction.extras) + keyguardUpdateMonitor.sendWeatherData(weatherData) } } - private val userTrackerCallback = object : UserTracker.Callback { override fun onUserChanged(newUser: Int, userContext: Context) { execution.assertIsMainThread()
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceControllerTest.kt index 0a576de..9c69a6a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceControllerTest.kt
@@ -32,6 +32,7 @@ import android.view.View import android.widget.FrameLayout import androidx.test.filters.SmallTest +import com.android.keyguard.KeyguardUpdateMonitor import com.android.systemui.SysuiTestCase import com.android.systemui.flags.FeatureFlags import com.android.systemui.flags.Flags @@ -104,6 +105,9 @@ private lateinit var keyguardBypassController: KeyguardBypassController @Mock + private lateinit var keyguardUpdateMonitor: KeyguardUpdateMonitor + + @Mock private lateinit var deviceProvisionedController: DeviceProvisionedController @Mock @@ -223,6 +227,7 @@ statusBarStateController, deviceProvisionedController, keyguardBypassController, + keyguardUpdateMonitor, execution, executor, bgExecutor,