Loading packages/SystemUI/plugin/src/com/android/systemui/plugins/Weather.kt 0 → 100644 +85 −0 Original line number Diff line number Diff line 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"}" } } packages/SystemUI/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceController.kt +13 −0 Original line number Diff line number Diff line Loading @@ -54,11 +54,13 @@ import com.android.systemui.shared.regionsampling.RegionSampler import com.android.systemui.shared.regionsampling.UpdateColorCallback import com.android.systemui.smartspace.dagger.SmartspaceModule.Companion.DATE_SMARTSPACE_DATA_PLUGIN 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 Loading Loading @@ -164,7 +166,18 @@ 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) { Loading Loading
packages/SystemUI/plugin/src/com/android/systemui/plugins/Weather.kt 0 → 100644 +85 −0 Original line number Diff line number Diff line 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"}" } }
packages/SystemUI/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceController.kt +13 −0 Original line number Diff line number Diff line Loading @@ -54,11 +54,13 @@ import com.android.systemui.shared.regionsampling.RegionSampler import com.android.systemui.shared.regionsampling.UpdateColorCallback import com.android.systemui.smartspace.dagger.SmartspaceModule.Companion.DATE_SMARTSPACE_DATA_PLUGIN 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 Loading Loading @@ -164,7 +166,18 @@ 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) { Loading