OSDN Git Service

Separate mono audio preference controller from accessibility
authorMill Chen <millchen@google.com>
Wed, 26 Jun 2019 11:58:25 +0000 (19:58 +0800)
committerMill Chen <millchen@google.com>
Fri, 28 Jun 2019 03:22:36 +0000 (11:22 +0800)
Bug: 135056871
Test: manual, robotests
Change-Id: I839c07a3a61ae97f33b339d307734504c45a6622

res/xml/accessibility_settings.xml
src/com/android/settings/accessibility/AccessibilitySettings.java
src/com/android/settings/accessibility/MasterMonoPreferenceController.java [new file with mode: 0644]
tests/robotests/src/com/android/settings/accessibility/MasterMonoPreferenceControllerTest.java [new file with mode: 0644]

index eddce0f..8353ead 100644 (file)
             android:key="toggle_master_mono"
             android:title="@string/accessibility_toggle_master_mono_title"
             android:summary="@string/accessibility_toggle_master_mono_summary"
-            android:persistent="false"/>
+            android:persistent="false"
+            settings:controller="com.android.settings.accessibility.MasterMonoPreferenceController"/>
 
         <com.android.settings.accessibility.BalanceSeekBarPreference
             android:key="seekbar_master_balance"
index a302411..e3f98f4 100644 (file)
@@ -100,8 +100,6 @@ public class AccessibilitySettings extends DashboardFragment implements
     private static final String TOGGLE_LARGE_POINTER_ICON =
             "toggle_large_pointer_icon";
     private static final String TOGGLE_DISABLE_ANIMATIONS = "toggle_disable_animations";
-    private static final String TOGGLE_MASTER_MONO =
-            "toggle_master_mono";
     private static final String SELECT_LONG_PRESS_TIMEOUT_PREFERENCE =
             "select_long_press_timeout_preference";
     private static final String ACCESSIBILITY_SHORTCUT_PREFERENCE =
@@ -194,7 +192,6 @@ public class AccessibilitySettings extends DashboardFragment implements
 
     private SwitchPreference mToggleLargePointerIconPreference;
     private SwitchPreference mToggleDisableAnimationsPreference;
-    private SwitchPreference mToggleMasterMonoPreference;
     private ListPreference mSelectLongPressTimeoutPreference;
     private Preference mCaptioningPreferenceScreen;
     private Preference mDisplayMagnificationPreferenceScreen;
@@ -304,10 +301,7 @@ public class AccessibilitySettings extends DashboardFragment implements
 
     @Override
     public boolean onPreferenceTreeClick(Preference preference) {
-        if (mToggleMasterMonoPreference == preference) {
-            handleToggleMasterMonoPreferenceClick();
-            return true;
-        } else if (mHearingAidPreferenceController.handlePreferenceTreeClick(preference)) {
+        if (mHearingAidPreferenceController.handlePreferenceTreeClick(preference)) {
             return true;
         }
         return super.onPreferenceTreeClick(preference);
@@ -347,11 +341,6 @@ public class AccessibilitySettings extends DashboardFragment implements
                         DeviceConfig.NAMESPACE_TELEPHONY, RAMPING_RINGER_ENABLED, false);
     }
 
-    private void handleToggleMasterMonoPreferenceClick() {
-        Settings.System.putIntForUser(getContentResolver(), Settings.System.MASTER_MONO,
-                mToggleMasterMonoPreference.isChecked() ? 1 : 0, UserHandle.USER_CURRENT);
-    }
-
     private void initializeAllPreferences() {
         for (int i = 0; i < CATEGORIES.length; i++) {
             PreferenceCategory prefCategory = (PreferenceCategory) findPreference(CATEGORIES[i]);
@@ -367,10 +356,6 @@ public class AccessibilitySettings extends DashboardFragment implements
         mToggleDisableAnimationsPreference =
                 (SwitchPreference) findPreference(TOGGLE_DISABLE_ANIMATIONS);
 
-        // Master Mono
-        mToggleMasterMonoPreference =
-                (SwitchPreference) findPreference(TOGGLE_MASTER_MONO);
-
         // Long press timeout.
         mSelectLongPressTimeoutPreference =
                 (ListPreference) findPreference(SELECT_LONG_PRESS_TIMEOUT_PREFERENCE);
@@ -626,9 +611,6 @@ public class AccessibilitySettings extends DashboardFragment implements
         // Dark Mode
         mDarkUIPreferenceController.updateState(mDarkUIModePreference);
 
-        // Master mono
-        updateMasterMono();
-
         // Long press timeout.
         final int longPressTimeout = Settings.Secure.getInt(getContentResolver(),
                 Settings.Secure.LONG_PRESS_TIMEOUT, mLongPressTimeoutDefault);
@@ -728,13 +710,6 @@ public class AccessibilitySettings extends DashboardFragment implements
         }
     }
 
-    private void updateMasterMono() {
-        final boolean masterMono = Settings.System.getIntForUser(
-                getContentResolver(), Settings.System.MASTER_MONO,
-                0 /* default */, UserHandle.USER_CURRENT) == 1;
-        mToggleMasterMonoPreference.setChecked(masterMono);
-    }
-
     private void updateAccessibilityShortcut(Preference preference) {
         if (AccessibilityManager.getInstance(getActivity())
                 .getInstalledAccessibilityServiceList().isEmpty()) {
diff --git a/src/com/android/settings/accessibility/MasterMonoPreferenceController.java b/src/com/android/settings/accessibility/MasterMonoPreferenceController.java
new file mode 100644 (file)
index 0000000..6082f14
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2019 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.accessibility;
+
+import android.content.Context;
+import android.os.UserHandle;
+import android.provider.Settings;
+
+import com.android.settings.core.TogglePreferenceController;
+
+public class MasterMonoPreferenceController extends TogglePreferenceController {
+
+    public MasterMonoPreferenceController(Context context, String preferenceKey) {
+        super(context, preferenceKey);
+    }
+
+    @Override
+    public boolean isChecked() {
+        return Settings.System.getIntForUser(mContext.getContentResolver(),
+                Settings.System.MASTER_MONO, 0 /* default */, UserHandle.USER_CURRENT) == 1;
+    }
+
+    @Override
+    public boolean setChecked(boolean isChecked) {
+        return Settings.System.putIntForUser(mContext.getContentResolver(),
+                Settings.System.MASTER_MONO, isChecked ? 1 : 0, UserHandle.USER_CURRENT);
+    }
+
+    @Override
+    public int getAvailabilityStatus() {
+        return AVAILABLE;
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/accessibility/MasterMonoPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/MasterMonoPreferenceControllerTest.java
new file mode 100644 (file)
index 0000000..ee54b88
--- /dev/null
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2019 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.accessibility;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.Context;
+import android.os.UserHandle;
+import android.provider.Settings;
+
+import androidx.preference.SwitchPreference;
+
+import com.android.settings.core.BasePreferenceController;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
+
+@RunWith(RobolectricTestRunner.class)
+public class MasterMonoPreferenceControllerTest {
+
+    private static final int ON = 1;
+    private static final int OFF = 0;
+    private static final int UNKNOWN = -1;
+
+    private Context mContext;
+    private SwitchPreference mPreference;
+    private MasterMonoPreferenceController mController;
+
+    @Before
+    public void setUp() {
+        mContext = RuntimeEnvironment.application;
+        mPreference = new SwitchPreference(mContext);
+        mController = new MasterMonoPreferenceController(mContext, "master_mono");
+    }
+
+    @Test
+    public void getAvailabilityStatus_byDefault_shouldReturnAvailable() {
+        assertThat(mController.getAvailabilityStatus()).isEqualTo(
+                BasePreferenceController.AVAILABLE);
+    }
+
+    @Test
+    public void isChecked_enabledMonoAudio_shouldReturnTrue() {
+        Settings.System.putIntForUser(mContext.getContentResolver(),
+                Settings.System.MASTER_MONO, ON, UserHandle.USER_CURRENT);
+
+        mController.updateState(mPreference);
+
+        assertThat(mController.isChecked()).isTrue();
+        assertThat(mPreference.isChecked()).isTrue();
+    }
+
+    @Test
+    public void isChecked_disabledMonoAudio_shouldReturnFalse() {
+        Settings.System.putIntForUser(mContext.getContentResolver(),
+                Settings.System.MASTER_MONO, OFF, UserHandle.USER_CURRENT);
+
+        mController.updateState(mPreference);
+
+        assertThat(mController.isChecked()).isFalse();
+        assertThat(mPreference.isChecked()).isFalse();
+    }
+
+    @Test
+    public void setChecked_setTrue_shouldEnableMonoAudio() {
+        mController.setChecked(true);
+
+        assertThat(Settings.System.getIntForUser(mContext.getContentResolver(),
+                Settings.System.MASTER_MONO, UNKNOWN, UserHandle.USER_CURRENT)).isEqualTo(ON);
+    }
+
+    @Test
+    public void setChecked_setFalse_shouldDisableMonoAudio() {
+        mController.setChecked(false);
+
+        assertThat(Settings.System.getIntForUser(mContext.getContentResolver(),
+                Settings.System.MASTER_MONO, UNKNOWN, UserHandle.USER_CURRENT)).isEqualTo(OFF);
+    }
+}