diff options
| -rw-r--r-- | packages/SystemUI/plugin/src/com/android/systemui/plugins/Weather.kt | 85 | ||||
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceController.kt | 13 |
2 files changed, 98 insertions, 0 deletions
diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/Weather.kt b/packages/SystemUI/plugin/src/com/android/systemui/plugins/Weather.kt new file mode 100644 index 000000000000..85ec42ddbbfa --- /dev/null +++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/Weather.kt @@ -0,0 +1,85 @@ +package com.android.systemui.statusbar + +import android.os.Bundle + +class Weather(val conditions: WeatherStateIcon, val temperature: Int, val isCelsius: Boolean) { + companion object { + private const val TAG = "Weather" + private const val WEATHER_STATE_ICON_KEY = "weather_state_icon_extra_key" + private const val TEMPERATURE_VALUE_KEY = "temperature_value_extra_key" + private const val TEMPERATURE_UNIT_KEY = "temperature_unit_extra_key" + private const val INVALID_TEMPERATURE = Int.MIN_VALUE + + fun fromBundle(extras: Bundle): Weather? { + val icon = + WeatherStateIcon.fromInt( + extras.getInt(WEATHER_STATE_ICON_KEY, WeatherStateIcon.UNKNOWN_ICON.id) + ) + if (icon == null || icon == WeatherStateIcon.UNKNOWN_ICON) { + return null + } + val temperature = extras.getInt(TEMPERATURE_VALUE_KEY, INVALID_TEMPERATURE) + if (temperature == INVALID_TEMPERATURE) { + return null + } + return Weather(icon, temperature, extras.getBoolean(TEMPERATURE_UNIT_KEY)) + } + } + + enum class WeatherStateIcon(val id: Int) { + UNKNOWN_ICON(0), + + // Clear, day & night. + SUNNY(1), + CLEAR_NIGHT(2), + + // Mostly clear, day & night. + MOSTLY_SUNNY(3), + MOSTLY_CLEAR_NIGHT(4), + + // Partly cloudy, day & night. + PARTLY_CLOUDY(5), + PARTLY_CLOUDY_NIGHT(6), + + // Mostly cloudy, day & night. + MOSTLY_CLOUDY_DAY(7), + MOSTLY_CLOUDY_NIGHT(8), + CLOUDY(9), + HAZE_FOG_DUST_SMOKE(10), + DRIZZLE(11), + HEAVY_RAIN(12), + SHOWERS_RAIN(13), + + // Scattered showers, day & night. + SCATTERED_SHOWERS_DAY(14), + SCATTERED_SHOWERS_NIGHT(15), + + // Isolated scattered thunderstorms, day & night. + ISOLATED_SCATTERED_TSTORMS_DAY(16), + ISOLATED_SCATTERED_TSTORMS_NIGHT(17), + STRONG_TSTORMS(18), + BLIZZARD(19), + BLOWING_SNOW(20), + FLURRIES(21), + HEAVY_SNOW(22), + + // Scattered snow showers, day & night. + SCATTERED_SNOW_SHOWERS_DAY(23), + SCATTERED_SNOW_SHOWERS_NIGHT(24), + SNOW_SHOWERS_SNOW(25), + MIXED_RAIN_HAIL_RAIN_SLEET(26), + SLEET_HAIL(27), + TORNADO(28), + TROPICAL_STORM_HURRICANE(29), + WINDY_BREEZY(30), + WINTRY_MIX_RAIN_SNOW(31); + + companion object { + fun fromInt(value: Int) = values().firstOrNull { it.id == value } + } + } + + override fun toString(): String { + return "$conditions $temperature${if (isCelsius) "C" else "F"}" + } +} 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 f4ca9ccee218..6364f4f0e0dc 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceController.kt @@ -53,11 +53,13 @@ import com.android.systemui.settings.UserTracker import com.android.systemui.shared.regionsampling.RegionSampler import com.android.systemui.shared.regionsampling.UpdateColorCallback import com.android.systemui.smartspace.dagger.SmartspaceModule.Companion.WEATHER_SMARTSPACE_DATA_PLUGIN +import com.android.systemui.statusbar.Weather import com.android.systemui.statusbar.phone.KeyguardBypassController import com.android.systemui.statusbar.policy.ConfigurationController import com.android.systemui.statusbar.policy.DeviceProvisionedController import com.android.systemui.util.concurrency.Execution import com.android.systemui.util.settings.SecureSettings +import java.time.Instant import java.util.Optional import java.util.concurrent.Executor import javax.inject.Inject @@ -160,8 +162,19 @@ constructor( } isContentUpdatedOnce = true } + + val now = Instant.now() + val weatherTarget = targets.find { t -> + t.featureType == SmartspaceTarget.FEATURE_WEATHER && + now.isAfter(Instant.ofEpochMilli(t.creationTimeMillis)) && + now.isBefore(Instant.ofEpochMilli(t.expiryTimeMillis)) + } + if (weatherTarget != null) { + val weatherData = Weather.fromBundle(weatherTarget.baseAction.extras) + } } + private val userTrackerCallback = object : UserTracker.Callback { override fun onUserChanged(newUser: Int, userContext: Context) { execution.assertIsMainThread() |