diff --git a/src/com/android/settings/display/AdaptiveSleepPermissionPreferenceController.java b/src/com/android/settings/display/AdaptiveSleepPermissionPreferenceController.java index 0d21e9caf80..8e4db0d26ad 100644 --- a/src/com/android/settings/display/AdaptiveSleepPermissionPreferenceController.java +++ b/src/com/android/settings/display/AdaptiveSleepPermissionPreferenceController.java @@ -37,26 +37,18 @@ public class AdaptiveSleepPermissionPreferenceController { @VisibleForTesting BannerMessagePreference mPreference; private final PackageManager mPackageManager; + private final Context mContext; public AdaptiveSleepPermissionPreferenceController(Context context) { - final String packageName = context.getPackageManager().getAttentionServicePackageName(); mPackageManager = context.getPackageManager(); - final Intent intent = new Intent( - android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS); - intent.setData(Uri.parse("package:" + packageName)); - mPreference = new BannerMessagePreference(context); - mPreference.setTitle(R.string.adaptive_sleep_title_no_permission); - mPreference.setSummary(R.string.adaptive_sleep_summary_no_permission); - mPreference.setPositiveButtonText(R.string.adaptive_sleep_manage_permission_button); - mPreference.setPositiveButtonOnClickListener(p -> { - context.startActivity(intent); - }); + mContext = context; } /** * Adds the controlled preference to the provided preference screen. */ public void addToScreen(PreferenceScreen screen) { + initializePreference(); if (!hasSufficientPermission(mPackageManager)) { screen.addPreference(mPreference); } @@ -68,4 +60,19 @@ public class AdaptiveSleepPermissionPreferenceController { public void updateVisibility() { mPreference.setVisible(!hasSufficientPermission(mPackageManager)); } + + private void initializePreference() { + final String packageName = mContext.getPackageManager().getAttentionServicePackageName(); + final Intent intent = new Intent( + android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS); + intent.setData(Uri.parse("package:" + packageName)); + mPreference = new BannerMessagePreference(mContext); + mPreference.setTitle(R.string.adaptive_sleep_title_no_permission); + mPreference.setSummary(R.string.adaptive_sleep_summary_no_permission); + mPreference.setPositiveButtonText(R.string.adaptive_sleep_manage_permission_button); + mPreference.setPositiveButtonOnClickListener(p -> { + mContext.startActivity(intent); + }); + } + } diff --git a/src/com/android/settings/display/AdaptiveSleepPreferenceController.java b/src/com/android/settings/display/AdaptiveSleepPreferenceController.java index 70d8a79f390..aa02ce51c81 100644 --- a/src/com/android/settings/display/AdaptiveSleepPreferenceController.java +++ b/src/com/android/settings/display/AdaptiveSleepPreferenceController.java @@ -49,10 +49,10 @@ public class AdaptiveSleepPreferenceController { public static final String PREFERENCE_KEY = "adaptive_sleep"; private static final int DEFAULT_VALUE = 0; private final SensorPrivacyManager mPrivacyManager; - private RestrictionUtils mRestrictionUtils; - private PackageManager mPackageManager; - private Context mContext; - private MetricsFeatureProvider mMetricsFeatureProvider; + private final RestrictionUtils mRestrictionUtils; + private final PackageManager mPackageManager; + private final Context mContext; + private final MetricsFeatureProvider mMetricsFeatureProvider; @VisibleForTesting RestrictedSwitchPreference mPreference; @@ -62,19 +62,6 @@ public class AdaptiveSleepPreferenceController { mRestrictionUtils = restrictionUtils; mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider(); mPrivacyManager = SensorPrivacyManager.getInstance(context); - mPreference = new RestrictedSwitchPreference(context); - mPreference.setTitle(R.string.adaptive_sleep_title); - mPreference.setSummary(R.string.adaptive_sleep_description); - mPreference.setChecked(isChecked()); - mPreference.setKey(PREFERENCE_KEY); - mPreference.setOnPreferenceClickListener(preference -> { - final boolean isChecked = ((RestrictedSwitchPreference) preference).isChecked(); - mMetricsFeatureProvider.action(context, SettingsEnums.ACTION_SCREEN_ATTENTION_CHANGED, - isChecked); - Settings.Secure.putInt(context.getContentResolver(), - Settings.Secure.ADAPTIVE_SLEEP, isChecked ? 1 : DEFAULT_VALUE); - return true; - }); mPackageManager = context.getPackageManager(); } @@ -86,6 +73,7 @@ public class AdaptiveSleepPreferenceController { * Adds the controlled preference to the provided preference screen. */ public void addToScreen(PreferenceScreen screen) { + initializePreference(); updatePreference(); screen.addPreference(mPreference); } @@ -103,6 +91,23 @@ public class AdaptiveSleepPreferenceController { } } + @VisibleForTesting + void initializePreference() { + mPreference = new RestrictedSwitchPreference(mContext); + mPreference.setTitle(R.string.adaptive_sleep_title); + mPreference.setSummary(R.string.adaptive_sleep_description); + mPreference.setChecked(isChecked()); + mPreference.setKey(PREFERENCE_KEY); + mPreference.setOnPreferenceChangeListener((preference, value) -> { + final boolean isChecked = (Boolean) value; + mMetricsFeatureProvider.action(mContext, SettingsEnums.ACTION_SCREEN_ATTENTION_CHANGED, + isChecked); + Settings.Secure.putInt(mContext.getContentResolver(), + Settings.Secure.ADAPTIVE_SLEEP, isChecked ? 1 : DEFAULT_VALUE); + return true; + }); + } + @VisibleForTesting boolean isChecked() { return hasSufficientPermission(mContext.getPackageManager()) && !isCameraLocked() diff --git a/src/com/android/settings/display/ScreenTimeoutSettings.java b/src/com/android/settings/display/ScreenTimeoutSettings.java index 27e1e1bfc45..6dfb22529fe 100644 --- a/src/com/android/settings/display/ScreenTimeoutSettings.java +++ b/src/com/android/settings/display/ScreenTimeoutSettings.java @@ -71,11 +71,15 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements private CharSequence[] mInitialEntries; private CharSequence[] mInitialValues; private FooterPreference mPrivacyPreference; - private MetricsFeatureProvider mMetricsFeatureProvider; + private final MetricsFeatureProvider mMetricsFeatureProvider; private SensorPrivacyManager mPrivacyManager; + @VisibleForTesting + Context mContext; + @VisibleForTesting RestrictedLockUtils.EnforcedAdmin mAdmin; + @VisibleForTesting Preference mDisableOptionsPreference; @@ -97,6 +101,7 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements @Override public void onAttach(Context context) { super.onAttach(context); + mContext = context; mInitialEntries = getResources().getStringArray(R.array.screen_timeout_entries); mInitialValues = getResources().getStringArray(R.array.screen_timeout_values); mAdaptiveSleepController = new AdaptiveSleepPreferenceController(context); @@ -104,11 +109,6 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements context); mAdaptiveSleepCameraStatePreferenceController = new AdaptiveSleepCameraStatePreferenceController(context); - mPrivacyPreference = new FooterPreference(context); - mPrivacyPreference.setIcon(R.drawable.ic_privacy_shield_24dp); - mPrivacyPreference.setTitle(R.string.adaptive_sleep_privacy); - mPrivacyPreference.setSelectable(false); - mPrivacyPreference.setLayoutResource(R.layout.preference_footer); mPrivacyManager = SensorPrivacyManager.getInstance(context); mPrivacyManager.addSensorPrivacyListener(CAMERA, (sensor, enabled) -> mAdaptiveSleepController.updatePreference()); @@ -167,6 +167,12 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements preferenceWithLargestTimeout.setChecked(true); } + mPrivacyPreference = new FooterPreference(mContext); + mPrivacyPreference.setIcon(R.drawable.ic_privacy_shield_24dp); + mPrivacyPreference.setTitle(R.string.adaptive_sleep_privacy); + mPrivacyPreference.setSelectable(false); + mPrivacyPreference.setLayoutResource(R.layout.preference_footer); + if (isScreenAttentionAvailable(getContext())) { mAdaptiveSleepPermissionController.addToScreen(screen); mAdaptiveSleepCameraStatePreferenceController.addToScreen(screen); diff --git a/tests/robotests/src/com/android/settings/display/AdaptiveSleepPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/AdaptiveSleepPreferenceControllerTest.java index 843870d0a9e..880f9ccdcaf 100644 --- a/tests/robotests/src/com/android/settings/display/AdaptiveSleepPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/display/AdaptiveSleepPreferenceControllerTest.java @@ -84,6 +84,7 @@ public class AdaptiveSleepPreferenceControllerTest { eq(UserManager.DISALLOW_CONFIG_SCREEN_TIMEOUT))).thenReturn(null); mController = new AdaptiveSleepPreferenceController(mContext, mRestrictionUtils); + mController.initializePreference(); when(mController.isCameraLocked()).thenReturn(false); } diff --git a/tests/robotests/src/com/android/settings/display/ScreenTimeoutSettingsTest.java b/tests/robotests/src/com/android/settings/display/ScreenTimeoutSettingsTest.java index c4f55808870..24bcde871e4 100644 --- a/tests/robotests/src/com/android/settings/display/ScreenTimeoutSettingsTest.java +++ b/tests/robotests/src/com/android/settings/display/ScreenTimeoutSettingsTest.java @@ -60,8 +60,6 @@ public class ScreenTimeoutSettingsTest { private ScreenTimeoutSettings mSettings; private Context mContext; private ContentResolver mContentResolver; - - @Mock private Resources mResources; @Mock @@ -85,7 +83,9 @@ public class ScreenTimeoutSettingsTest { FakeFeatureFactory.setupForTest(); mContext = spy(getApplicationContext()); mSettings = spy(new ScreenTimeoutSettings()); + mSettings.mContext = mContext; mContentResolver = mContext.getContentResolver(); + mResources = spy(mContext.getResources()); doReturn(TIMEOUT_ENTRIES).when(mResources).getStringArray(R.array.screen_timeout_entries); doReturn(TIMEOUT_VALUES).when(mResources).getStringArray(R.array.screen_timeout_entries);