diff options
8 files changed, 135 insertions, 29 deletions
diff --git a/src/com/android/settings/accessibility/MagnificationGesturesPreferenceController.java b/src/com/android/settings/accessibility/MagnificationGesturesPreferenceController.java index 89bb7753f9..9bfc05ade4 100644 --- a/src/com/android/settings/accessibility/MagnificationGesturesPreferenceController.java +++ b/src/com/android/settings/accessibility/MagnificationGesturesPreferenceController.java @@ -19,9 +19,9 @@ import android.provider.Settings; import androidx.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 @@ public class MagnificationGesturesPreferenceController extends BasePreferenceCon 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 @@ public class MagnificationGesturesPreferenceController extends BasePreferenceCon 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 @@ public class MagnificationGesturesPreferenceController extends BasePreferenceCon 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 @@ public class MagnificationGesturesPreferenceController extends BasePreferenceCon 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 aa4e56ee8d..e0ba65bd00 100644 --- a/src/com/android/settings/accessibility/MagnificationNavbarPreferenceController.java +++ b/src/com/android/settings/accessibility/MagnificationNavbarPreferenceController.java @@ -19,9 +19,9 @@ import android.provider.Settings; import androidx.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 @@ public class MagnificationNavbarPreferenceController extends BasePreferenceContr 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 @@ public class MagnificationNavbarPreferenceController extends BasePreferenceContr 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 @@ public class MagnificationNavbarPreferenceController extends BasePreferenceContr 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 1d66812fd2..5f1cee4f09 100644 --- a/src/com/android/settings/accessibility/MagnificationPreferenceFragment.java +++ b/src/com/android/settings/accessibility/MagnificationPreferenceFragment.java @@ -18,6 +18,7 @@ package com.android.settings.accessibility; 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; @@ -38,10 +39,15 @@ import com.android.settingslib.search.SearchIndexable; import java.util.Arrays; import java.util.List; +import androidx.annotation.VisibleForTesting; import androidx.preference.Preference; @SearchIndexable public final class MagnificationPreferenceFragment extends DashboardFragment { + @VisibleForTesting + static final int ON = 1; + @VisibleForTesting + static final int OFF = 0; private static final String TAG = "MagnificationPreferenceFragment"; @@ -135,6 +141,15 @@ public final class MagnificationPreferenceFragment extends DashboardFragment { 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 1b976ad0ef..b69c988673 100644 --- a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java @@ -25,10 +25,6 @@ import android.media.MediaPlayer; import android.media.MediaPlayer.OnPreparedListener; import android.net.Uri; import android.os.Bundle; -import android.provider.Settings; -import androidx.preference.Preference; -import androidx.preference.PreferenceScreen; -import androidx.preference.PreferenceViewHolder; import android.view.Display; import android.view.ViewTreeObserver.OnGlobalLayoutListener; import android.view.WindowManager; @@ -41,6 +37,10 @@ import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.R; import com.android.settings.widget.SwitchBar; +import androidx.preference.Preference; +import androidx.preference.PreferenceScreen; +import androidx.preference.PreferenceViewHolder; + public class ToggleScreenMagnificationPreferenceFragment extends ToggleFeaturePreferenceFragment implements SwitchBar.OnSwitchChangeListener { @@ -174,7 +174,7 @@ public class ToggleScreenMagnificationPreferenceFragment extends @Override protected void onPreferenceToggled(String preferenceKey, boolean enabled) { - Settings.Secure.putInt(getContentResolver(), preferenceKey, enabled ? 1 : 0); + MagnificationPreferenceFragment.setChecked(getContentResolver(), preferenceKey, enabled); updateConfigurationWarningIfNeeded(); } @@ -183,7 +183,7 @@ public class ToggleScreenMagnificationPreferenceFragment extends 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 c0adc62881..3a199b8965 100644 --- a/src/com/android/settings/core/TogglePreferenceController.java +++ b/src/com/android/settings/core/TogglePreferenceController.java @@ -51,8 +51,10 @@ public abstract class TogglePreferenceController extends BasePreferenceControlle 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 1222f4a1d3..780325f085 100644 --- a/src/com/android/settings/gestures/GesturePreferenceController.java +++ b/src/com/android/settings/gestures/GesturePreferenceController.java @@ -59,9 +59,6 @@ public abstract class GesturePreferenceController extends TogglePreferenceContro 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 63dafd9783..4cab028297 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 @@ public class MagnificationGesturesPreferenceControllerTest { @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 @@ public class MagnificationGesturesPreferenceControllerTest { .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 178beccb81..d0d77711c2 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 @@ public class MagnificationNavbarPreferenceControllerTest { @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 @@ public class MagnificationNavbarPreferenceControllerTest { 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; |