From 5b59e62ecb50282b6c2b6581c9282f99b4412b6b Mon Sep 17 00:00:00 2001 From: mincheli Date: Wed, 8 Jan 2020 20:26:04 +0800 Subject: [PATCH] Create settings for window magnification (3/n) This change is for internal test. Add a switch preference for magnification enable mode. Bug: 146019459 Bug: 146473544 Test: make RunSettingsRoboTests ROBOTEST_FILTER=MagnificationEnablePreferenceControllerTest -j64 Change-Id: I85fdbb5b0efc106d5301d95802b8d6b7dbe8145d --- res/values/strings.xml | 6 +- ...ibility_magnification_service_settings.xml | 10 ++-- ...gnificationEnablePreferenceController.java | 58 ++++++++++++++++++ ...tionWindowControlPreferenceController.java | 60 ------------------- ...ScreenMagnificationPreferenceFragment.java | 14 +++++ ...cationEnablePreferenceControllerTest.java} | 55 ++++++++--------- 6 files changed, 106 insertions(+), 97 deletions(-) create mode 100644 src/com/android/settings/accessibility/MagnificationEnablePreferenceController.java delete mode 100644 src/com/android/settings/accessibility/MagnificationWindowControlPreferenceController.java rename tests/robotests/src/com/android/settings/accessibility/{MagnificationWindowControlPreferenceControllerTest.java => MagnificationEnablePreferenceControllerTest.java} (53%) diff --git a/res/values/strings.xml b/res/values/strings.xml index 28ad81b3224..6dc4a4d8e00 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -4773,6 +4773,8 @@ Magnify Magnification area + + Magnification enable Choose the magnification area(s) you want to use when magnifying the screen @@ -4785,10 +4787,6 @@ Magnify entire screen Magnify part of screen - - Show move controller - - Show a joystick-like controller to move the magnification area Magnification settings diff --git a/res/xml/accessibility_magnification_service_settings.xml b/res/xml/accessibility_magnification_service_settings.xml index d67fc66c75c..74765b29857 100644 --- a/res/xml/accessibility_magnification_service_settings.xml +++ b/res/xml/accessibility_magnification_service_settings.xml @@ -28,9 +28,11 @@ settings:controller="com.android.settings.accessibility.MagnificationModePreferenceController" /> + android:title="@string/accessibility_magnification_enable_mode_title" + android:summaryOn="@string/accessibility_magnification_area_settings_full_screen_summary" + android:summaryOff="@string/accessibility_magnification_area_settings_window_screen_summary" + settings:controller="com.android.settings.accessibility.MagnificationEnablePreferenceController" /> + diff --git a/src/com/android/settings/accessibility/MagnificationEnablePreferenceController.java b/src/com/android/settings/accessibility/MagnificationEnablePreferenceController.java new file mode 100644 index 00000000000..a21c024fccc --- /dev/null +++ b/src/com/android/settings/accessibility/MagnificationEnablePreferenceController.java @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2020 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 androidx.preference.Preference; +import androidx.preference.SwitchPreference; + +import com.android.settings.core.TogglePreferenceController; + +/** Controller that shows the magnification enable mode summary. */ +public class MagnificationEnablePreferenceController extends TogglePreferenceController { + + private static final String KEY_ENABLE = Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE; + + public MagnificationEnablePreferenceController(Context context, String preferenceKey) { + super(context, preferenceKey); + } + + @Override + public boolean isChecked() { + final int enableMode = Settings.Secure.getIntForUser(mContext.getContentResolver(), + KEY_ENABLE, + Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN, + UserHandle.USER_CURRENT); + return enableMode == Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN; + } + + @Override + public boolean setChecked(boolean isChecked) { + final int value = isChecked ? Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN + : Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW; + return Settings.Secure.putIntForUser(mContext.getContentResolver(), KEY_ENABLE, value, + UserHandle.USER_CURRENT); + } + + @Override + public int getAvailabilityStatus() { + return AVAILABLE; + } +} diff --git a/src/com/android/settings/accessibility/MagnificationWindowControlPreferenceController.java b/src/com/android/settings/accessibility/MagnificationWindowControlPreferenceController.java deleted file mode 100644 index 4badc3f4ecf..00000000000 --- a/src/com/android/settings/accessibility/MagnificationWindowControlPreferenceController.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * 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; - -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; - -/** Controller that shows and updates the magnification window control switch. */ -public class MagnificationWindowControlPreferenceController extends TogglePreferenceController { - - // TODO(b/146019459): Use magnification_window_control_enabled. - private static final String KEY_CONTROL = Settings.System.MASTER_MONO; - - public MagnificationWindowControlPreferenceController(Context context, String preferenceKey) { - super(context, preferenceKey); - } - - @Override - public boolean isChecked() { - return Settings.System.getIntForUser(mContext.getContentResolver(), - KEY_CONTROL, State.OFF, UserHandle.USER_CURRENT) == State.ON; - } - - @Override - public boolean setChecked(boolean isChecked) { - return Settings.System.putIntForUser(mContext.getContentResolver(), - KEY_CONTROL, isChecked ? State.ON : State.OFF, UserHandle.USER_CURRENT); - } - - @Override - public int getAvailabilityStatus() { - return AVAILABLE; - } - - @Retention(RetentionPolicy.SOURCE) - private @interface State { - int OFF = 0; - int ON = 1; - } -} diff --git a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java index 2de2cb727ee..7ce886f9146 100644 --- a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java @@ -256,6 +256,11 @@ public class ToggleScreenMagnificationPreferenceFragment extends updateAlertDialogCheckState(); updateAlertDialogEnableState(); + // Window magnification mode doesn't support advancedView. + if (isWindowMagnification(getPrefContext())) { + advancedView.setVisibility(View.GONE); + return; + } // Shows the triple tap checkbox directly if clicked. if (mTripleTapTypeCheckBox.isChecked()) { advancedView.setVisibility(View.GONE); @@ -610,4 +615,13 @@ public class ToggleScreenMagnificationPreferenceFragment extends } return false; } + + private boolean isWindowMagnification(Context context) { + final int mode = Settings.Secure.getIntForUser( + context.getContentResolver(), + Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE, + Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN, + context.getContentResolver().getUserId()); + return mode == Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW; + } } diff --git a/tests/robotests/src/com/android/settings/accessibility/MagnificationWindowControlPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/MagnificationEnablePreferenceControllerTest.java similarity index 53% rename from tests/robotests/src/com/android/settings/accessibility/MagnificationWindowControlPreferenceControllerTest.java rename to tests/robotests/src/com/android/settings/accessibility/MagnificationEnablePreferenceControllerTest.java index 05dbb57ead0..a34e04a4e40 100644 --- a/tests/robotests/src/com/android/settings/accessibility/MagnificationWindowControlPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/accessibility/MagnificationEnablePreferenceControllerTest.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2019 The Android Open Source Project + * Copyright (C) 2020 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. @@ -30,29 +30,27 @@ import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; - @RunWith(RobolectricTestRunner.class) -public class MagnificationWindowControlPreferenceControllerTest { - private static final String PREF_KEY = "screen_magnification_window_control_switch"; - // TODO(b/146019459): Use magnification_window_control_enabled. - private static final String KEY_CONTROL = Settings.System.MASTER_MONO; +public class MagnificationEnablePreferenceControllerTest { + private static final String PREF_KEY = "screen_magnification_enable"; + private static final String KEY_ENABLE = Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE; + private static final int UNKNOWN = -1; private Context mContext; private SwitchPreference mPreference; - private MagnificationWindowControlPreferenceController mController; + private MagnificationEnablePreferenceController mController; @Before public void setUp() { mContext = RuntimeEnvironment.application; mPreference = new SwitchPreference(mContext); - mController = new MagnificationWindowControlPreferenceController(mContext, PREF_KEY); + mController = new MagnificationEnablePreferenceController(mContext, PREF_KEY); } @Test - public void isChecked_enabledWindowControl_shouldReturnTrue() { - Settings.System.putIntForUser(mContext.getContentResolver(), - KEY_CONTROL, State.ON, UserHandle.USER_CURRENT); + public void isChecked_enabledFullscreenMagnificationMode_shouldReturnTrue() { + Settings.Secure.putIntForUser(mContext.getContentResolver(), + KEY_ENABLE, Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN, + UserHandle.USER_CURRENT); mController.updateState(mPreference); @@ -61,9 +59,10 @@ public class MagnificationWindowControlPreferenceControllerTest { } @Test - public void isChecked_disabledWindowControl_shouldReturnFalse() { - Settings.System.putIntForUser(mContext.getContentResolver(), - KEY_CONTROL, State.OFF, UserHandle.USER_CURRENT); + public void isChecked_enabledWindowMagnificationMode_shouldReturnFalse() { + Settings.Secure.putIntForUser(mContext.getContentResolver(), + KEY_ENABLE, Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW, + UserHandle.USER_CURRENT); mController.updateState(mPreference); @@ -71,26 +70,24 @@ public class MagnificationWindowControlPreferenceControllerTest { assertThat(mPreference.isChecked()).isFalse(); } + @Test - public void setChecked_setTrue_shouldEnableWindowControl() { + public void setChecked_setTrue_shouldEnableFullscreenMagnificationMode() { mController.setChecked(true); - assertThat(Settings.System.getIntForUser(mContext.getContentResolver(), - KEY_CONTROL, State.UNKNOWN, UserHandle.USER_CURRENT)).isEqualTo(State.ON); + assertThat(Settings.Secure.getIntForUser(mContext.getContentResolver(), + KEY_ENABLE, UNKNOWN, + UserHandle.USER_CURRENT)).isEqualTo( + Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN); } @Test - public void setChecked_setFalse_shouldDisableWindowControl() { + public void setChecked_setFalse_shouldEnableWindowMagnificationMode() { mController.setChecked(false); - assertThat(Settings.System.getIntForUser(mContext.getContentResolver(), - KEY_CONTROL, State.UNKNOWN, UserHandle.USER_CURRENT)).isEqualTo(State.OFF); - } - - @Retention(RetentionPolicy.SOURCE) - private @interface State { - int UNKNOWN = -1; - int OFF = 0; - int ON = 1; + assertThat(Settings.Secure.getIntForUser(mContext.getContentResolver(), + KEY_ENABLE, UNKNOWN, + UserHandle.USER_CURRENT)).isEqualTo( + Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW); } }