From 864765f8b403607d7c1758dd2047fe6ae41935ab Mon Sep 17 00:00:00 2001 From: Svet Ganov Date: Fri, 5 Apr 2019 19:00:05 -0700 Subject: [PATCH] Update Settings to use the proper DeviceConfig API. Exempt-From-Owner-Approval: carry over approval from ag/6908306 bug:124769181 Change-Id: If18d0dc5e55dabf82b7c7a2b6df240fb8b24f736 --- src/com/android/settings/Utils.java | 11 ++ .../DevelopmentSettingsDashboardFragment.java | 1 - ...ccessRestrictionsPreferenceController.java | 7 +- ...AccessRestrictionPreferenceController.java | 69 ----------- ...entLocationAccessPreferenceController.java | 5 +- ...ccessibilityUsagePreferenceController.java | 5 +- ...ermissionBarChartPreferenceController.java | 7 +- ...ssRestrictionPreferenceControllerTest.java | 108 ------------------ ...ocationAccessPreferenceControllerTest.java | 5 +- ...sibilityUsagePreferenceControllerTest.java | 9 +- ...ssionBarChartPreferenceControllerTest.java | 21 ++-- .../ShadowPermissionControllerManager.java | 3 +- 12 files changed, 45 insertions(+), 206 deletions(-) delete mode 100644 src/com/android/settings/development/SmsAccessRestrictionPreferenceController.java delete mode 100644 tests/robotests/src/com/android/settings/development/SmsAccessRestrictionPreferenceControllerTest.java diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java index 0938c0978e3..75db3e18188 100644 --- a/src/com/android/settings/Utils.java +++ b/src/com/android/settings/Utils.java @@ -124,6 +124,17 @@ public final class Utils extends com.android.settingslib.Utils { public static final String OS_PKG = "os"; + /** + * Whether to disable the new device identifier access restrictions. + */ + public static final String PROPERTY_DEVICE_IDENTIFIER_ACCESS_RESTRICTIONS_DISABLED = + "device_identifier_access_restrictions_disabled"; + + /** + * Whether to show the Permissions Hub. + */ + public static final String PROPERTY_PERMISSIONS_HUB_ENABLED = "permissions_hub_enabled"; + /** * Finds a matching activity for a preference's intent. If a matching * activity is not found, it will remove the preference. diff --git a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java index e9fc7596d44..77b104b66f1 100644 --- a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java +++ b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java @@ -480,7 +480,6 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra controllers.add(new ResizableActivityPreferenceController(context)); controllers.add(new FreeformWindowsPreferenceController(context)); controllers.add(new DesktopModePreferenceController(context)); - controllers.add(new SmsAccessRestrictionPreferenceController(context)); controllers.add(new DeviceIdentifierAccessRestrictionsPreferenceController(context)); controllers.add(new ShortcutManagerThrottlingPreferenceController(context)); controllers.add(new EnableGnssRawMeasFullTrackingPreferenceController(context)); diff --git a/src/com/android/settings/development/DeviceIdentifierAccessRestrictionsPreferenceController.java b/src/com/android/settings/development/DeviceIdentifierAccessRestrictionsPreferenceController.java index f709771084e..f4e59533494 100644 --- a/src/com/android/settings/development/DeviceIdentifierAccessRestrictionsPreferenceController.java +++ b/src/com/android/settings/development/DeviceIdentifierAccessRestrictionsPreferenceController.java @@ -24,6 +24,7 @@ import android.provider.Settings; import androidx.preference.Preference; import androidx.preference.SwitchPreference; +import com.android.settings.Utils; import com.android.settings.core.PreferenceControllerMixin; import com.android.settingslib.development.DeveloperOptionsPreferenceController; @@ -53,10 +54,8 @@ public class DeviceIdentifierAccessRestrictionsPreferenceController public boolean isAvailable() { // If the new access restrictions have been disabled from the server side then do not // display the option. - boolean disabledFromServerSide = Boolean.parseBoolean( - DeviceConfig.getProperty(DeviceConfig.Privacy.NAMESPACE, - DeviceConfig.Privacy. - PROPERTY_DEVICE_IDENTIFIER_ACCESS_RESTRICTIONS_DISABLED)); + boolean disabledFromServerSide = DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_PRIVACY, + Utils.PROPERTY_DEVICE_IDENTIFIER_ACCESS_RESTRICTIONS_DISABLED, false); return !disabledFromServerSide; } diff --git a/src/com/android/settings/development/SmsAccessRestrictionPreferenceController.java b/src/com/android/settings/development/SmsAccessRestrictionPreferenceController.java deleted file mode 100644 index 6091614dbe2..00000000000 --- a/src/com/android/settings/development/SmsAccessRestrictionPreferenceController.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.settings.development; - -import android.content.Context; -import android.provider.Settings; - -import androidx.preference.Preference; -import androidx.preference.SwitchPreference; - -import com.android.settings.core.PreferenceControllerMixin; -import com.android.settingslib.development.DeveloperOptionsPreferenceController; - -// STOPSHIP b/118694572: remove the kill switch once the feature is tested and stable -public class SmsAccessRestrictionPreferenceController extends DeveloperOptionsPreferenceController - implements Preference.OnPreferenceChangeListener, PreferenceControllerMixin { - - private static final String SMS_ACCESS_RESTRICTION_ENABLED_KEY - = "sms_access_restriction_enabled"; - - public SmsAccessRestrictionPreferenceController(Context context) { - super(context); - } - - @Override - public String getPreferenceKey() { - return SMS_ACCESS_RESTRICTION_ENABLED_KEY; - } - - @Override - public boolean onPreferenceChange(Preference preference, Object newValue) { - writeSetting((boolean) newValue); - return true; - } - - private void writeSetting(boolean isEnabled) { - Settings.Global.putInt(mContext.getContentResolver(), - Settings.Global.SMS_ACCESS_RESTRICTION_ENABLED, - isEnabled ? 1 : 0); - } - - @Override - public void updateState(Preference preference) { - final int mode = Settings.Global.getInt(mContext.getContentResolver(), - Settings.Global.SMS_ACCESS_RESTRICTION_ENABLED, 0); - ((SwitchPreference) mPreference).setChecked(mode != 0); - } - - @Override - protected void onDeveloperOptionsSwitchDisabled() { - super.onDeveloperOptionsSwitchDisabled(); - writeSetting(false); - ((SwitchPreference) mPreference).setChecked(false); - } -} diff --git a/src/com/android/settings/location/RecentLocationAccessPreferenceController.java b/src/com/android/settings/location/RecentLocationAccessPreferenceController.java index e4c64f7adc1..f44e107d04f 100644 --- a/src/com/android/settings/location/RecentLocationAccessPreferenceController.java +++ b/src/com/android/settings/location/RecentLocationAccessPreferenceController.java @@ -26,6 +26,7 @@ import androidx.preference.Preference; import androidx.preference.PreferenceScreen; import com.android.settings.R; +import com.android.settings.Utils; import com.android.settings.core.PreferenceControllerMixin; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.location.RecentLocationAccesses; @@ -62,8 +63,8 @@ public class RecentLocationAccessPreferenceController extends AbstractPreference @Override public boolean isAvailable() { return Boolean.parseBoolean( - DeviceConfig.getProperty(DeviceConfig.Privacy.NAMESPACE, - DeviceConfig.Privacy.PROPERTY_PERMISSIONS_HUB_ENABLED)); + DeviceConfig.getProperty(DeviceConfig.NAMESPACE_PRIVACY, + Utils.PROPERTY_PERMISSIONS_HUB_ENABLED)); } @Override diff --git a/src/com/android/settings/privacy/AccessibilityUsagePreferenceController.java b/src/com/android/settings/privacy/AccessibilityUsagePreferenceController.java index bcf8f4761a0..da4b100e028 100644 --- a/src/com/android/settings/privacy/AccessibilityUsagePreferenceController.java +++ b/src/com/android/settings/privacy/AccessibilityUsagePreferenceController.java @@ -25,6 +25,7 @@ import androidx.annotation.NonNull; import androidx.preference.Preference; import com.android.settings.R; +import com.android.settings.Utils; import com.android.settings.core.BasePreferenceController; import java.util.List; @@ -46,8 +47,8 @@ public class AccessibilityUsagePreferenceController extends BasePreferenceContro @Override public int getAvailabilityStatus() { return (mEnabledServiceInfos.isEmpty() || !Boolean.parseBoolean( - DeviceConfig.getProperty(DeviceConfig.Privacy.NAMESPACE, - DeviceConfig.Privacy.PROPERTY_PERMISSIONS_HUB_ENABLED))) + DeviceConfig.getProperty(DeviceConfig.NAMESPACE_PRIVACY, + Utils.PROPERTY_PERMISSIONS_HUB_ENABLED))) ? UNSUPPORTED_ON_DEVICE : AVAILABLE; } diff --git a/src/com/android/settings/privacy/PermissionBarChartPreferenceController.java b/src/com/android/settings/privacy/PermissionBarChartPreferenceController.java index 9358392431d..d8c66e4feb3 100644 --- a/src/com/android/settings/privacy/PermissionBarChartPreferenceController.java +++ b/src/com/android/settings/privacy/PermissionBarChartPreferenceController.java @@ -20,8 +20,6 @@ import static android.Manifest.permission_group.CAMERA; import static android.Manifest.permission_group.LOCATION; import static android.Manifest.permission_group.MICROPHONE; -import static com.android.settingslib.widget.BarChartPreference.MAXIMUM_BAR_VIEWS; - import static java.util.concurrent.TimeUnit.DAYS; import android.content.Context; @@ -51,7 +49,6 @@ import com.android.settingslib.widget.BarChartPreference; import com.android.settingslib.widget.BarViewInfo; import java.util.ArrayList; -import java.util.Comparator; import java.util.List; @@ -93,8 +90,8 @@ public class PermissionBarChartPreferenceController extends BasePreferenceContro @Override public int getAvailabilityStatus() { return Boolean.parseBoolean( - DeviceConfig.getProperty(DeviceConfig.Privacy.NAMESPACE, - DeviceConfig.Privacy.PROPERTY_PERMISSIONS_HUB_ENABLED)) ? + DeviceConfig.getProperty(DeviceConfig.NAMESPACE_PRIVACY, + com.android.settings.Utils.PROPERTY_PERMISSIONS_HUB_ENABLED)) ? AVAILABLE_UNSEARCHABLE : UNSUPPORTED_ON_DEVICE; } diff --git a/tests/robotests/src/com/android/settings/development/SmsAccessRestrictionPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/SmsAccessRestrictionPreferenceControllerTest.java deleted file mode 100644 index ecfe35af695..00000000000 --- a/tests/robotests/src/com/android/settings/development/SmsAccessRestrictionPreferenceControllerTest.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.settings.development; - -import static com.google.common.truth.Truth.assertThat; - -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import android.content.Context; -import android.provider.Settings; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.robolectric.RobolectricTestRunner; -import org.robolectric.RuntimeEnvironment; - -import androidx.preference.PreferenceScreen; -import androidx.preference.SwitchPreference; - -@RunWith(RobolectricTestRunner.class) -public class SmsAccessRestrictionPreferenceControllerTest { - - @Mock - private SwitchPreference mPreference; - @Mock - private PreferenceScreen mPreferenceScreen; - - private Context mContext; - private SmsAccessRestrictionPreferenceController mController; - - @Before - public void setup() { - MockitoAnnotations.initMocks(this); - mContext = RuntimeEnvironment.application; - mController = new SmsAccessRestrictionPreferenceController(mContext); - when(mPreferenceScreen.findPreference(mController.getPreferenceKey())) - .thenReturn(mPreference); - mController.displayPreference(mPreferenceScreen); - } - - @Test - public void onPreferenceChange_settingEnabled_enableSmsRestrictionShouldBeOn() { - mController.onPreferenceChange(mPreference, true /* new value */); - - final int mode = Settings.Global.getInt(mContext.getContentResolver(), - Settings.Global.SMS_ACCESS_RESTRICTION_ENABLED, -1 /* default */); - - assertThat(mode).isEqualTo(1); - } - - @Test - public void onPreferenceChange_settingDisabled_enableSmsRestrictionShouldBeOff() { - mController.onPreferenceChange(mPreference, false /* new value */); - - final int mode = Settings.Global.getInt(mContext.getContentResolver(), - Settings.Global.SMS_ACCESS_RESTRICTION_ENABLED, -1 /* default */); - - assertThat(mode).isEqualTo(0); - } - - @Test - public void updateState_settingDisabled_preferenceShouldNotBeChecked() { - Settings.Global.putInt(mContext.getContentResolver(), - Settings.Global.SMS_ACCESS_RESTRICTION_ENABLED, 0); - mController.updateState(mPreference); - - verify(mPreference).setChecked(false); - } - - @Test - public void updateState_settingEnabled_preferenceShouldBeChecked() { - Settings.Global.putInt(mContext.getContentResolver(), - Settings.Global.SMS_ACCESS_RESTRICTION_ENABLED, 1); - mController.updateState(mPreference); - - verify(mPreference).setChecked(true); - } - - @Test - public void onDeveloperOptionsSwitchDisabled_shouldDisablePreference() { - mController.onDeveloperOptionsSwitchDisabled(); - - final int mode = Settings.Global.getInt(mContext.getContentResolver(), - Settings.Global.SMS_ACCESS_RESTRICTION_ENABLED, -1 /* default */); - - assertThat(mode).isEqualTo(0); - verify(mPreference).setChecked(false); - verify(mPreference).setEnabled(false); - } -} diff --git a/tests/robotests/src/com/android/settings/location/RecentLocationAccessPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/location/RecentLocationAccessPreferenceControllerTest.java index 2d3cb0cc6f6..d210c7b9f45 100644 --- a/tests/robotests/src/com/android/settings/location/RecentLocationAccessPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/location/RecentLocationAccessPreferenceControllerTest.java @@ -33,6 +33,7 @@ import android.widget.TextView; import androidx.preference.PreferenceScreen; import com.android.settings.R; +import com.android.settings.Utils; import com.android.settings.testutils.shadow.ShadowDeviceConfig; import com.android.settingslib.location.RecentLocationAccesses; import com.android.settingslib.widget.LayoutPreference; @@ -94,8 +95,8 @@ public class RecentLocationAccessPreferenceControllerTest { @Test public void isAvailable_permissionHubEnabled_shouldReturnTrue() { - DeviceConfig.setProperty(DeviceConfig.Privacy.NAMESPACE, - DeviceConfig.Privacy.PROPERTY_PERMISSIONS_HUB_ENABLED, "true", true); + DeviceConfig.setProperty(DeviceConfig.NAMESPACE_PRIVACY, + Utils.PROPERTY_PERMISSIONS_HUB_ENABLED, "true", true); assertThat(mController.isAvailable()).isEqualTo(true); } diff --git a/tests/robotests/src/com/android/settings/privacy/AccessibilityUsagePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/privacy/AccessibilityUsagePreferenceControllerTest.java index 05ce30a29a0..1fbd66f068a 100644 --- a/tests/robotests/src/com/android/settings/privacy/AccessibilityUsagePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/privacy/AccessibilityUsagePreferenceControllerTest.java @@ -25,6 +25,7 @@ import android.content.Context; import android.provider.DeviceConfig; import android.view.accessibility.AccessibilityManager; +import com.android.settings.Utils; import com.android.settings.testutils.shadow.ShadowDeviceConfig; import org.junit.After; @@ -74,8 +75,8 @@ public class AccessibilityUsagePreferenceControllerTest { @Test public void getAvailabilityStatus_noEnabledServices_shouldReturnUnsupported() { - DeviceConfig.setProperty(DeviceConfig.Privacy.NAMESPACE, - DeviceConfig.Privacy.PROPERTY_PERMISSIONS_HUB_ENABLED, "true", true); + DeviceConfig.setProperty(DeviceConfig.NAMESPACE_PRIVACY, + Utils.PROPERTY_PERMISSIONS_HUB_ENABLED, "true", true); mAccessibilityManager.setEnabledAccessibilityServiceList(new ArrayList<>()); AccessibilityUsagePreferenceController controller = new AccessibilityUsagePreferenceController(mContext, "test_key"); @@ -85,8 +86,8 @@ public class AccessibilityUsagePreferenceControllerTest { @Test public void getAvailabilityStatus_enabledServices_shouldReturnAvailableUnsearchable() { - DeviceConfig.setProperty(DeviceConfig.Privacy.NAMESPACE, - DeviceConfig.Privacy.PROPERTY_PERMISSIONS_HUB_ENABLED, "true", true); + DeviceConfig.setProperty(DeviceConfig.NAMESPACE_PRIVACY, + Utils.PROPERTY_PERMISSIONS_HUB_ENABLED, "true", true); mAccessibilityManager.setEnabledAccessibilityServiceList( new ArrayList<>(Arrays.asList(new AccessibilityServiceInfo()))); AccessibilityUsagePreferenceController controller = diff --git a/tests/robotests/src/com/android/settings/privacy/PermissionBarChartPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/privacy/PermissionBarChartPreferenceControllerTest.java index 988816897a7..dc824ed04f7 100644 --- a/tests/robotests/src/com/android/settings/privacy/PermissionBarChartPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/privacy/PermissionBarChartPreferenceControllerTest.java @@ -46,6 +46,7 @@ import android.view.accessibility.AccessibilityManager; import androidx.preference.PreferenceScreen; import com.android.internal.widget.LockPatternUtils; +import com.android.settings.Utils; import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.shadow.ShadowDeviceConfig; import com.android.settings.testutils.shadow.ShadowPermissionControllerManager; @@ -119,8 +120,9 @@ public class PermissionBarChartPreferenceControllerTest { @Test public void getAvailabilityStatus_permissionHubEnabled_shouldReturnAvailableUnsearchable() { - DeviceConfig.setProperty(DeviceConfig.Privacy.NAMESPACE, - DeviceConfig.Privacy.PROPERTY_PERMISSIONS_HUB_ENABLED, "true", true); + DeviceConfig.setProperty(DeviceConfig.NAMESPACE_PRIVACY, + Utils.PROPERTY_PERMISSIONS_HUB_ENABLED, + "true", true); assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE_UNSEARCHABLE); } @@ -180,8 +182,9 @@ public class PermissionBarChartPreferenceControllerTest { @Test public void onStart_usageInfosNotSetAndPermissionHubEnabled_shouldShowProgressBar() { - DeviceConfig.setProperty(DeviceConfig.Privacy.NAMESPACE, - DeviceConfig.Privacy.PROPERTY_PERMISSIONS_HUB_ENABLED, "true", true); + DeviceConfig.setProperty(DeviceConfig.NAMESPACE_PRIVACY, + Utils.PROPERTY_PERMISSIONS_HUB_ENABLED, + "true", true); mController.displayPreference(mScreen); mController.onStart(); @@ -192,8 +195,9 @@ public class PermissionBarChartPreferenceControllerTest { @Test public void onStart_usageInfosSetAndPermissionHubEnabled_shouldNotUpdatePrefLoadingState() { - DeviceConfig.setProperty(DeviceConfig.Privacy.NAMESPACE, - DeviceConfig.Privacy.PROPERTY_PERMISSIONS_HUB_ENABLED, "true", true); + DeviceConfig.setProperty(DeviceConfig.NAMESPACE_PRIVACY, + Utils.PROPERTY_PERMISSIONS_HUB_ENABLED, + "true", true); final RuntimePermissionUsageInfo info1 = new RuntimePermissionUsageInfo("permission 1", 10); mController.mOldUsageInfos.add(info1); @@ -207,8 +211,9 @@ public class PermissionBarChartPreferenceControllerTest { @Test public void onStart_permissionHubDisabled_shouldNotShowProgressBar() { - DeviceConfig.setProperty(DeviceConfig.Privacy.NAMESPACE, - DeviceConfig.Privacy.PROPERTY_PERMISSIONS_HUB_ENABLED, "false", false); + DeviceConfig.setProperty(DeviceConfig.NAMESPACE_PRIVACY, + Utils.PROPERTY_PERMISSIONS_HUB_ENABLED, + "false", true); mController.onStart(); diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowPermissionControllerManager.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowPermissionControllerManager.java index 091b244bdca..6a6f7108388 100644 --- a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowPermissionControllerManager.java +++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowPermissionControllerManager.java @@ -18,6 +18,7 @@ package com.android.settings.testutils.shadow; import android.annotation.CallbackExecutor; import android.content.Context; +import android.os.Handler; import android.permission.PermissionControllerManager; import androidx.annotation.NonNull; @@ -30,7 +31,7 @@ import java.util.concurrent.Executor; @Implements(PermissionControllerManager.class) public class ShadowPermissionControllerManager { - protected void __constructor__(Context context) { + protected void __constructor__(Context contexts, Handler handler) { // no nothing, everything is shadowed }