diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 1c032ee5966fd..b29efab06d1b2 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -11467,6 +11467,13 @@ public final class Settings { public static final String EXTRA_AUTOMATIC_POWER_SAVE_MODE = "extra_automatic_power_save_mode"; + /** + * Whether lockscreen weather is enabled. + * + * @hide + */ + public static final String LOCK_SCREEN_WEATHER_ENABLED = "lockscreen_weather_enabled"; + /** * These entries are considered common between the personal and the managed profile, * since the managed profile doesn't get to change them. diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 92a9e566982cd..8d644e96dca8f 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -6276,4 +6276,7 @@ "stopped" during initial boot of a device, or after an OTA update. Stopped state of an app is not changed during subsequent reboots. --> false + + + false diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index f460219aaffc4..77542564fa804 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -4926,4 +4926,7 @@ + + + diff --git a/packages/SettingsProvider/src/android/provider/settings/backup/SecureSettings.java b/packages/SettingsProvider/src/android/provider/settings/backup/SecureSettings.java index 293a590b8f831..bf9e428552cca 100644 --- a/packages/SettingsProvider/src/android/provider/settings/backup/SecureSettings.java +++ b/packages/SettingsProvider/src/android/provider/settings/backup/SecureSettings.java @@ -228,6 +228,7 @@ public class SecureSettings { Settings.Secure.BLUETOOTH_LE_BROADCAST_CODE, Settings.Secure.BLUETOOTH_LE_BROADCAST_APP_SOURCE_NAME, Settings.Secure.CUSTOM_BUGREPORT_HANDLER_APP, - Settings.Secure.CUSTOM_BUGREPORT_HANDLER_USER + Settings.Secure.CUSTOM_BUGREPORT_HANDLER_USER, + Settings.Secure.LOCK_SCREEN_WEATHER_ENABLED }; } diff --git a/packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java b/packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java index 31eb009144109..f0bc1df2cf87a 100644 --- a/packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java +++ b/packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java @@ -361,5 +361,6 @@ public class SecureSettingsValidators { VALIDATORS.put(Secure.BLUETOOTH_LE_BROADCAST_APP_SOURCE_NAME, ANY_STRING_VALIDATOR); VALIDATORS.put(Secure.CUSTOM_BUGREPORT_HANDLER_APP, ANY_STRING_VALIDATOR); VALIDATORS.put(Secure.CUSTOM_BUGREPORT_HANDLER_USER, ANY_INTEGER_VALIDATOR); + VALIDATORS.put(Secure.LOCK_SCREEN_WEATHER_ENABLED, BOOLEAN_VALIDATOR); } } diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java index 3eec5653d1914..e55ac1b68e99c 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java @@ -106,6 +106,12 @@ public class KeyguardClockSwitchController extends ViewController mWeatherView.setVisibility( + mSmartspaceController.isWeatherEnabled() ? View.VISIBLE : View.GONE)); + } + } + /** * Sets the clipChildren property on relevant views, to allow the smartspace to draw out of * bounds during the unlock transition. 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 fe76c7dca26a0..81c71974b6990 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/lockscreen/LockscreenSmartspaceController.kt @@ -31,6 +31,7 @@ import android.os.Handler import android.os.UserHandle import android.provider.Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS import android.provider.Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS +import android.provider.Settings.Secure.LOCK_SCREEN_WEATHER_ENABLED import android.util.Log import android.view.ContextThemeWrapper import android.view.View @@ -245,6 +246,17 @@ constructor( datePlugin != null && weatherPlugin != null } + fun isWeatherEnabled(): Boolean { + execution.assertIsMainThread() + val defaultValue = context.getResources().getBoolean( + com.android.internal.R.bool.config_lockscreenWeatherEnabledByDefault) + val showWeather = secureSettings.getIntForUser( + LOCK_SCREEN_WEATHER_ENABLED, + if (defaultValue) 1 else 0, + userTracker.userId) == 1 + return showWeather + } + private fun updateBypassEnabled() { val bypassEnabled = bypassController.bypassEnabled smartspaceViews.forEach { it.setKeyguardBypassEnabled(bypassEnabled) } diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchControllerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchControllerTest.java index 36b3f897190d4..ccc4e4af4ac8e 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardClockSwitchControllerTest.java @@ -300,8 +300,9 @@ public class KeyguardClockSwitchControllerTest extends SysuiTestCase { ArgumentCaptor observerCaptor = ArgumentCaptor.forClass(ContentObserver.class); mController.init(); - verify(mSecureSettings).registerContentObserverForUser(any(String.class), - anyBoolean(), observerCaptor.capture(), eq(UserHandle.USER_ALL)); + verify(mSecureSettings).registerContentObserverForUser( + eq(Settings.Secure.LOCKSCREEN_USE_DOUBLE_LINE_CLOCK), + anyBoolean(), observerCaptor.capture(), eq(UserHandle.USER_ALL)); ContentObserver observer = observerCaptor.getValue(); mExecutor.runAllReady(); @@ -347,6 +348,22 @@ public class KeyguardClockSwitchControllerTest extends SysuiTestCase { assertEquals(0, mController.getClockBottom(10)); } + @Test + public void testChangeLockscreenWeatherEnabledSetsWeatherViewVisible() { + when(mSmartspaceController.isWeatherEnabled()).thenReturn(true); + ArgumentCaptor observerCaptor = + ArgumentCaptor.forClass(ContentObserver.class); + mController.init(); + verify(mSecureSettings).registerContentObserverForUser( + eq(Settings.Secure.LOCK_SCREEN_WEATHER_ENABLED), anyBoolean(), + observerCaptor.capture(), eq(UserHandle.USER_ALL)); + ContentObserver observer = observerCaptor.getValue(); + mExecutor.runAllReady(); + // When a settings change has occurred, check that view is visible. + observer.onChange(true); + mExecutor.runAllReady(); + assertEquals(View.VISIBLE, mFakeWeatherView.getVisibility()); + } private void verifyAttachment(VerificationMode times) { verify(mClockRegistry, times).registerClockChangeListener(