OSDN Git Service

Introduce DeveloperOptionsPreferenceController
authorjeffreyhuang <jeffreyhuang@google.com>
Thu, 14 Sep 2017 00:09:13 +0000 (17:09 -0700)
committerjeffreyhuang <jeffreyhuang@google.com>
Fri, 15 Sep 2017 22:27:26 +0000 (15:27 -0700)
 - New abstract class for all preference controllers in developer
 options
 - Used to handle changes in the master switch
 - DeveloperSettingsDashboardFragment has a reference to all preference
 controllers to call "handleMasterSwitchToggled()"

Bug: 34203528
Test: make RunSettingsRoboTests -j40
Change-Id: I64c18f54e22551f025029336880e92ac3a0d4a8c

src/com/android/settings/development/DeveloperOptionsPreferenceController.java [new file with mode: 0644]
src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
src/com/android/settings/development/StayAwakePreferenceController.java
tests/robotests/src/com/android/settings/development/StayAwakePreferenceControllerTest.java

diff --git a/src/com/android/settings/development/DeveloperOptionsPreferenceController.java b/src/com/android/settings/development/DeveloperOptionsPreferenceController.java
new file mode 100644 (file)
index 0000000..a7d45eb
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ * 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 android.content.Context;
+
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.core.AbstractPreferenceController;
+
+/**
+ * This controller is used handle changes for the master switch in the developer options page.
+ *
+ * All Preference Controllers that are a part of the developer options page should inherit this
+ * class.
+ */
+public abstract class DeveloperOptionsPreferenceController extends
+        AbstractPreferenceController implements PreferenceControllerMixin {
+
+    public DeveloperOptionsPreferenceController(Context context) {
+        super(context);
+    }
+
+    /**
+     * Called when developer options is enabled
+     */
+    public abstract void onDeveloperOptionsEnabled();
+
+    /**
+     *Called when developer options is disabled
+     */
+    public abstract void onDeveloperOptionsDisabled();
+}
index 5768299..5aa141d 100644 (file)
@@ -47,6 +47,7 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra
     private boolean mIsAvailable = true;
     private SwitchBar mSwitchBar;
     private DevelopmentSwitchBarController mSwitchBarController;
+    private List<AbstractPreferenceController> mPreferenceControllers = new ArrayList<>();
 
     public DevelopmentSettingsDashboardFragment() {
         super(UserManager.DISALLOW_DEBUGGING_FEATURES);
@@ -91,11 +92,13 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra
             if (isChecked) {
                 EnableDevelopmentSettingWarningDialog.show(this /* host */);
             } else {
-                // TODO: Reset dangerous options (move logic from DevelopmentSettings).
-                // resetDangerousOptions();
                 DevelopmentSettingsEnabler.setDevelopmentSettingsEnabled(getContext(), false);
-                // TODO: Refresh all prefs' enabled state (move logic from DevelopmentSettings).
-                // setPrefsEnabledState(false);
+                for (AbstractPreferenceController controller : mPreferenceControllers) {
+                    if (controller instanceof DeveloperOptionsPreferenceController) {
+                        ((DeveloperOptionsPreferenceController) controller)
+                                .onDeveloperOptionsDisabled();
+                    }
+                }
             }
         }
     }
@@ -118,12 +121,17 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra
 
     @Override
     protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
-        return buildPreferenceControllers(context, getLifecycle());
+        mPreferenceControllers = buildPreferenceControllers(context, getLifecycle());
+        return mPreferenceControllers;
     }
 
     void onEnableDevelopmentOptionsConfirmed() {
         DevelopmentSettingsEnabler.setDevelopmentSettingsEnabled(getContext(), true);
-        // TODO: Refresh all prefs' enabled state (move logic from DevelopmentSettings).
+        for (AbstractPreferenceController controller : mPreferenceControllers) {
+            if (controller instanceof DeveloperOptionsPreferenceController) {
+                ((DeveloperOptionsPreferenceController) controller).onDeveloperOptionsEnabled();
+            }
+        }
     }
 
     void onEnableDevelopmentOptionsRejected() {
index ebba9e5..a590d7d 100644 (file)
@@ -1,3 +1,19 @@
+/*
+ * 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 android.content.ContentResolver;
@@ -11,18 +27,16 @@ import android.support.annotation.VisibleForTesting;
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.PreferenceScreen;
 
-import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settingslib.RestrictedLockUtils;
 import com.android.settingslib.RestrictedSwitchPreference;
-import com.android.settingslib.core.AbstractPreferenceController;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
 import com.android.settingslib.core.lifecycle.events.OnPause;
 import com.android.settingslib.core.lifecycle.events.OnResume;
 
 
-public class StayAwakePreferenceController extends AbstractPreferenceController implements
-        PreferenceControllerMixin, Preference.OnPreferenceChangeListener, LifecycleObserver,
+public class StayAwakePreferenceController extends DeveloperOptionsPreferenceController implements
+        Preference.OnPreferenceChangeListener, LifecycleObserver,
         OnResume, OnPause {
 
     private static final String TAG = "StayAwakeCtrl";
@@ -87,6 +101,19 @@ public class StayAwakePreferenceController extends AbstractPreferenceController
     }
 
     @Override
+    public void onDeveloperOptionsEnabled() {
+        mPreference.setEnabled(true);
+    }
+
+    @Override
+    public void onDeveloperOptionsDisabled() {
+        Settings.Global.putInt(mContext.getContentResolver(),
+                Settings.Global.STAY_ON_WHILE_PLUGGED_IN, SETTING_VALUE_OFF);
+        mPreference.setChecked(false);
+        mPreference.setEnabled(false);
+    }
+
+    @Override
     public void onResume() {
         if (mPreference != null) {
             mSettingsObserver.register(true /* register */);
index cbef531..daffd2e 100644 (file)
@@ -1,3 +1,19 @@
+/*
+ * 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;
@@ -60,6 +76,7 @@ public class StayAwakePreferenceControllerTest {
 
         final int mode = Settings.System.getInt(mContentResolver,
                 Settings.Global.STAY_ON_WHILE_PLUGGED_IN, -1);
+
         assertThat(mode).isEqualTo(StayAwakePreferenceController.SETTING_VALUE_ON);
     }
 
@@ -69,6 +86,7 @@ public class StayAwakePreferenceControllerTest {
 
         final int mode = Settings.System.getInt(mContentResolver,
                 Settings.Global.STAY_ON_WHILE_PLUGGED_IN, -1);
+
         assertThat(mode).isEqualTo(StayAwakePreferenceController.SETTING_VALUE_OFF);
     }
 
@@ -77,6 +95,7 @@ public class StayAwakePreferenceControllerTest {
         Settings.System.putInt(mContentResolver, Settings.Global.STAY_ON_WHILE_PLUGGED_IN,
                 StayAwakePreferenceController.SETTING_VALUE_ON);
         mController.updateState(mPreference);
+
         verify(mPreference).setChecked(true);
     }
 
@@ -85,6 +104,7 @@ public class StayAwakePreferenceControllerTest {
         Settings.System.putInt(mContentResolver, Settings.Global.STAY_ON_WHILE_PLUGGED_IN,
                 StayAwakePreferenceController.SETTING_VALUE_OFF);
         mController.updateState(mPreference);
+
         verify(mPreference).setChecked(false);
     }
 
@@ -95,6 +115,7 @@ public class StayAwakePreferenceControllerTest {
                 RestrictedLockUtils.EnforcedAdmin.class);
         doReturn(admin).when(mController).checkIfMaximumTimeToLockSetByAdmin();
         mController.updateState(mPreference);
+
         verify(mPreference).setDisabledByAdmin(admin);
     }
 
@@ -104,6 +125,7 @@ public class StayAwakePreferenceControllerTest {
                 StayAwakePreferenceController.SETTING_VALUE_ON);
         mController.mSettingsObserver.onChange(false,
                 Settings.Global.getUriFor(Settings.Global.STAY_ON_WHILE_PLUGGED_IN));
+
         verify(mPreference).setChecked(true);
     }
 
@@ -112,6 +134,22 @@ public class StayAwakePreferenceControllerTest {
         Settings.System.putInt(mContentResolver, Settings.Global.STAY_ON_WHILE_PLUGGED_IN,
                 StayAwakePreferenceController.SETTING_VALUE_ON);
         mController.mSettingsObserver.onChange(false, null);
+
         verify(mPreference, never()).setChecked(true);
     }
+
+    @Test
+    public void onDeveloperOptionsDisabled_shouldDisablePreference() {
+        mController.onDeveloperOptionsDisabled();
+
+        verify(mPreference).setEnabled(false);
+        verify(mPreference).setChecked(false);
+    }
+
+    @Test
+    public void onDeveloperOptionsEnabled_shouldEnablePreference() {
+        mController.onDeveloperOptionsEnabled();
+
+        verify(mPreference).setEnabled(true);
+    }
 }