Convert Magnify controller to TogglePrefController
Convert below to TogglePreferenceController:
MagnificationNavbarPreferenceController
(Magnify with Button)
MagnificationGesturesPreferenceController
(Magnify with triple-tap)
The two controllers share the same fragment,
Add static method for set/get state in fragment,
And use them in controllers and fragment.
Change-Id: I2bdbdb36be71e1a3ffb557abc5a6115d48de53cf
Merged-In: I2bdbdb36be71e1a3ffb557abc5a6115d48de53cf
Fixes: 67997698
Fixes: 67997726
Test: make RunSettingsRoboTests
diff --git a/src/com/android/settings/accessibility/MagnificationGesturesPreferenceController.java b/src/com/android/settings/accessibility/MagnificationGesturesPreferenceController.java
index 71901af..603b698 100644
--- a/src/com/android/settings/accessibility/MagnificationGesturesPreferenceController.java
+++ b/src/com/android/settings/accessibility/MagnificationGesturesPreferenceController.java
@@ -19,9 +19,9 @@
import android.support.v7.preference.Preference;
import com.android.settings.R;
-import com.android.settings.core.BasePreferenceController;
+import com.android.settings.core.TogglePreferenceController;
-public class MagnificationGesturesPreferenceController extends BasePreferenceController {
+public class MagnificationGesturesPreferenceController extends TogglePreferenceController {
private boolean mIsFromSUW = false;
@@ -29,6 +29,18 @@
super(context, key);
}
+ @Override
+ public boolean isChecked() {
+ return MagnificationPreferenceFragment.isChecked(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED);
+ }
+
+ @Override
+ public boolean setChecked(boolean isChecked) {
+ return MagnificationPreferenceFragment.setChecked(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, isChecked);
+ }
+
public void setIsFromSUW(boolean fromSUW) {
mIsFromSUW = fromSUW;
}
@@ -38,6 +50,7 @@
if (getPreferenceKey().equals(preference.getKey())) {
Bundle extras = preference.getExtras();
populateMagnificationGesturesPreferenceExtras(extras, mContext);
+ extras.putBoolean(AccessibilitySettings.EXTRA_CHECKED, isChecked());
extras.putBoolean(AccessibilitySettings.EXTRA_LAUNCHED_FROM_SUW, mIsFromSUW);
}
return false;
@@ -54,8 +67,7 @@
if (mIsFromSUW) {
resId = R.string.accessibility_screen_magnification_short_summary;
} else {
- final boolean enabled = Settings.Secure.getInt(mContext.getContentResolver(),
- Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, 0) == 1;
+ final boolean enabled = isChecked();
resId = (enabled ? R.string.accessibility_feature_state_on :
R.string.accessibility_feature_state_off);
}
@@ -69,9 +81,6 @@
R.string.accessibility_screen_magnification_gestures_title);
extras.putInt(AccessibilitySettings.EXTRA_SUMMARY_RES,
R.string.accessibility_screen_magnification_summary);
- extras.putBoolean(AccessibilitySettings.EXTRA_CHECKED,
- Settings.Secure.getInt(context.getContentResolver(),
- Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, 0) == 1);
extras.putInt(AccessibilitySettings.EXTRA_VIDEO_RAW_RESOURCE_ID,
R.raw.accessibility_screen_magnification);
}
diff --git a/src/com/android/settings/accessibility/MagnificationNavbarPreferenceController.java b/src/com/android/settings/accessibility/MagnificationNavbarPreferenceController.java
index 84063a1..9c6301b 100644
--- a/src/com/android/settings/accessibility/MagnificationNavbarPreferenceController.java
+++ b/src/com/android/settings/accessibility/MagnificationNavbarPreferenceController.java
@@ -19,9 +19,9 @@
import android.support.v7.preference.Preference;
import com.android.settings.R;
-import com.android.settings.core.BasePreferenceController;
+import com.android.settings.core.TogglePreferenceController;
-public class MagnificationNavbarPreferenceController extends BasePreferenceController {
+public class MagnificationNavbarPreferenceController extends TogglePreferenceController {
private boolean mIsFromSUW = false;
@@ -29,6 +29,18 @@
super(context, key);
}
+ @Override
+ public boolean isChecked() {
+ return MagnificationPreferenceFragment.isChecked(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED);
+ }
+
+ @Override
+ public boolean setChecked(boolean isChecked) {
+ return MagnificationPreferenceFragment.setChecked(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED, isChecked);
+ }
+
public void setIsFromSUW(boolean fromSUW) {
mIsFromSUW = fromSUW;
}
@@ -43,10 +55,7 @@
R.string.accessibility_screen_magnification_navbar_title);
extras.putInt(AccessibilitySettings.EXTRA_SUMMARY_RES,
R.string.accessibility_screen_magnification_navbar_summary);
- extras.putBoolean(AccessibilitySettings.EXTRA_CHECKED,
- Settings.Secure.getInt(mContext.getContentResolver(),
- Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED, 0)
- == 1);
+ extras.putBoolean(AccessibilitySettings.EXTRA_CHECKED, isChecked());
extras.putBoolean(AccessibilitySettings.EXTRA_LAUNCHED_FROM_SUW, mIsFromSUW);
}
return false;
@@ -65,8 +74,7 @@
if (mIsFromSUW) {
resId = R.string.accessibility_screen_magnification_navbar_short_summary;
} else {
- final boolean enabled = Settings.Secure.getInt(mContext.getContentResolver(),
- Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED, 0) == 1;
+ final boolean enabled = isChecked();
resId = (enabled ? R.string.accessibility_feature_state_on :
R.string.accessibility_feature_state_off);
}
diff --git a/src/com/android/settings/accessibility/MagnificationPreferenceFragment.java b/src/com/android/settings/accessibility/MagnificationPreferenceFragment.java
index aa6d4f3..615c874 100644
--- a/src/com/android/settings/accessibility/MagnificationPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/MagnificationPreferenceFragment.java
@@ -18,11 +18,13 @@
import android.accessibilityservice.AccessibilityServiceInfo;
import android.content.ComponentName;
+import android.content.ContentResolver;
import android.content.Context;
import android.content.res.Resources;
import android.os.Bundle;
import android.provider.SearchIndexableResource;
import android.provider.Settings;
+import android.support.annotation.VisibleForTesting;
import android.support.v7.preference.Preference;
import android.text.TextUtils;
import android.view.accessibility.AccessibilityManager;
@@ -39,6 +41,10 @@
import java.util.List;
public final class MagnificationPreferenceFragment extends DashboardFragment {
+ @VisibleForTesting
+ static final int ON = 1;
+ @VisibleForTesting
+ static final int OFF = 0;
private static final String TAG = "MagnificationPreferenceFragment";
@@ -132,6 +138,15 @@
return null;
}
+ static boolean isChecked(ContentResolver contentResolver, String settingsKey) {
+ return Settings.Secure.getInt(contentResolver, settingsKey, OFF) == ON;
+ }
+
+ static boolean setChecked(ContentResolver contentResolver, String settingsKey,
+ boolean isChecked) {
+ return Settings.Secure.putInt(contentResolver, settingsKey, isChecked ? ON : OFF);
+ }
+
/**
* @return {@code true} if this fragment should be shown, {@code false} otherwise. This
* fragment is shown in the case that more than one magnification mode is available.
diff --git a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
index ecb4b9f..d7ca22a 100644
--- a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
@@ -25,7 +25,6 @@
import android.media.MediaPlayer.OnPreparedListener;
import android.net.Uri;
import android.os.Bundle;
-import android.provider.Settings;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen;
import android.support.v7.preference.PreferenceViewHolder;
@@ -174,7 +173,7 @@
@Override
protected void onPreferenceToggled(String preferenceKey, boolean enabled) {
- Settings.Secure.putInt(getContentResolver(), preferenceKey, enabled ? 1 : 0);
+ MagnificationPreferenceFragment.setChecked(getContentResolver(), preferenceKey, enabled);
updateConfigurationWarningIfNeeded();
}
@@ -183,7 +182,7 @@
super.onInstallSwitchBarToggleSwitch();
mSwitchBar.setCheckedInternal(
- Settings.Secure.getInt(getContentResolver(), mPreferenceKey, 0) == 1);
+ MagnificationPreferenceFragment.isChecked(getContentResolver(), mPreferenceKey));
mSwitchBar.addOnSwitchChangeListener(this);
}
diff --git a/src/com/android/settings/core/TogglePreferenceController.java b/src/com/android/settings/core/TogglePreferenceController.java
index ffe7fd3..e01a38d 100644
--- a/src/com/android/settings/core/TogglePreferenceController.java
+++ b/src/com/android/settings/core/TogglePreferenceController.java
@@ -51,8 +51,10 @@
public void updateState(Preference preference) {
if (preference instanceof TwoStatePreference) {
((TwoStatePreference) preference).setChecked(isChecked());
- } if (preference instanceof MasterSwitchPreference) {
+ } else if (preference instanceof MasterSwitchPreference) {
((MasterSwitchPreference) preference).setChecked(isChecked());
+ } else {
+ refreshSummary(preference);
}
}
diff --git a/src/com/android/settings/gestures/GesturePreferenceController.java b/src/com/android/settings/gestures/GesturePreferenceController.java
index 7f1100b..c4ee8c2 100644
--- a/src/com/android/settings/gestures/GesturePreferenceController.java
+++ b/src/com/android/settings/gestures/GesturePreferenceController.java
@@ -59,9 +59,6 @@
public void updateState(Preference preference) {
super.updateState(preference);
if (preference != null) {
- if (!(preference instanceof TwoStatePreference)) {
- preference.setSummary(getSummary());
- }
// Different meanings of "Enabled" for the Preference and Controller.
preference.setEnabled(canHandleClicks());
}
diff --git a/tests/robotests/src/com/android/settings/accessibility/MagnificationGesturesPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/MagnificationGesturesPreferenceControllerTest.java
index 23ac795..cd0558a 100644
--- a/tests/robotests/src/com/android/settings/accessibility/MagnificationGesturesPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/MagnificationGesturesPreferenceControllerTest.java
@@ -16,6 +16,9 @@
package com.android.settings.accessibility;
+import static com.android.settings.accessibility.MagnificationPreferenceFragment.OFF;
+import static com.android.settings.accessibility.MagnificationPreferenceFragment.ON;
+
import static com.google.common.truth.Truth.assertThat;
import android.content.Context;
@@ -57,13 +60,13 @@
@Test
public void updateState_shouldRefreshSummary() {
Settings.System.putInt(mContext.getContentResolver(),
- Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, 1);
+ Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, ON);
mController.updateState(mPreference);
assertThat(mPreference.getSummary())
.isEqualTo(mContext.getString(R.string.accessibility_feature_state_on));
Settings.System.putInt(mContext.getContentResolver(),
- Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, 0);
+ Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, OFF);
mController.updateState(mPreference);
assertThat(mPreference.getSummary())
.isEqualTo(mContext.getString(R.string.accessibility_feature_state_off));
@@ -77,4 +80,38 @@
.isEqualTo(mContext.getString(R.string.
accessibility_screen_magnification_short_summary));
}
+
+ @Test
+ public void isChecked_enabled() {
+ Settings.System.putInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, ON);
+
+ assertThat(mController.isChecked()).isTrue();
+ }
+
+ @Test
+ public void isChecked_disabled() {
+ Settings.System.putInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, OFF);
+
+ assertThat(mController.isChecked()).isFalse();
+ }
+
+ @Test
+ public void setChecked_enabled() {
+ mController.setChecked(true);
+
+ assertThat(Settings.Secure.getInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, -1))
+ .isEqualTo(ON);
+ }
+
+ @Test
+ public void setChecked_disabled() {
+ mController.setChecked(false);
+
+ assertThat(Settings.Secure.getInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, -1))
+ .isEqualTo(OFF);
+ }
}
diff --git a/tests/robotests/src/com/android/settings/accessibility/MagnificationNavbarPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/MagnificationNavbarPreferenceControllerTest.java
index 486ccd3..bca81a2 100644
--- a/tests/robotests/src/com/android/settings/accessibility/MagnificationNavbarPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/MagnificationNavbarPreferenceControllerTest.java
@@ -16,8 +16,12 @@
package com.android.settings.accessibility;
+import static com.android.settings.accessibility.MagnificationPreferenceFragment.OFF;
+import static com.android.settings.accessibility.MagnificationPreferenceFragment.ON;
import static com.android.settings.search.ResultPayload.Availability.AVAILABLE;
+
import static com.google.common.truth.Truth.assertThat;
+
import static org.mockito.Mockito.spy;
import android.content.Context;
@@ -81,13 +85,13 @@
@Test
public void updateState_shouldRefreshSummary() {
Settings.System.putInt(mContext.getContentResolver(),
- Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED, 1);
+ Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED, ON);
mController.updateState(mPreference);
assertThat(mPreference.getSummary())
.isEqualTo(mContext.getText(R.string.accessibility_feature_state_on));
Settings.System.putInt(mContext.getContentResolver(),
- Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED, 0);
+ Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED, OFF);
mController.updateState(mPreference);
assertThat(mPreference.getSummary())
.isEqualTo(mContext.getText(R.string.accessibility_feature_state_off));
@@ -102,6 +106,40 @@
accessibility_screen_magnification_navbar_short_summary));
}
+ @Test
+ public void isChecked_enabled() {
+ Settings.System.putInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED, ON);
+
+ assertThat(mController.isChecked()).isTrue();
+ }
+
+ @Test
+ public void isChecked_disabled() {
+ Settings.System.putInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED, OFF);
+
+ assertThat(mController.isChecked()).isFalse();
+ }
+
+ @Test
+ public void setChecked_enabled() {
+ mController.setChecked(true);
+
+ assertThat(Settings.Secure.getInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED, -1))
+ .isEqualTo(ON);
+ }
+
+ @Test
+ public void setChecked_disabled() {
+ mController.setChecked(false);
+
+ assertThat(Settings.Secure.getInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED, -1))
+ .isEqualTo(OFF);
+ }
+
@Implements(MagnificationPreferenceFragment.class)
public static class ShadowMagnificationPreferenceFragment {
private static boolean sIsApplicable;