Loading res/values/strings.xml +2 −0 Original line number Diff line number Diff line Loading @@ -5486,6 +5486,8 @@ <string name="accessibility_magnification_cursor_following_title">Cursor following</string> <!-- Header message of cursor following mode dialog for magnification. [CHAR LIMIT=none] --> <string name="accessibility_magnification_cursor_following_header">Choose how Magnification follows your cursor.</string> <!-- Summary for cursor following preference where cursor following setting is unavailable while partial-only capability. [CHAR LIMIT=none] --> <string name="accessibility_magnification_cursor_following_unavailable_summary">Unavailable while only magnifying part of the screen</string> <!-- Option title of cursor following continuous mode in the mode selection dialog. [CHAR LIMIT=none] --> <string name="accessibility_magnification_cursor_following_continuous">Move screen continuously as mouse moves</string> <!-- Option title of cursor following center mode in the mode selection dialog. [CHAR LIMIT=none] --> src/com/android/settings/accessibility/MagnificationCursorFollowingModePreferenceController.java +47 −1 Original line number Diff line number Diff line Loading @@ -19,6 +19,10 @@ import android.app.Dialog; import android.app.settings.SettingsEnums; import android.content.Context; import android.content.DialogInterface; import android.database.ContentObserver; import android.net.Uri; import android.os.Handler; import android.os.Looper; import android.provider.Settings; import android.provider.Settings.Secure.AccessibilityMagnificationCursorFollowingMode; import android.text.TextUtils; Loading @@ -39,6 +43,10 @@ import androidx.preference.PreferenceScreen; import com.android.settings.DialogCreatable; import com.android.settings.R; import com.android.settings.accessibility.AccessibilityDialogUtils.DialogEnums; import com.android.settings.accessibility.MagnificationCapabilities.MagnificationMode; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnPause; import com.android.settingslib.core.lifecycle.events.OnResume; import java.util.ArrayList; import java.util.List; Loading @@ -47,7 +55,8 @@ import java.util.List; * Controller that shows the magnification cursor following mode and the preference click behavior. */ public class MagnificationCursorFollowingModePreferenceController extends MagnificationBasePreferenceController implements DialogCreatable { extends MagnificationBasePreferenceController implements DialogCreatable, LifecycleObserver, OnResume, OnPause { static final String PREF_KEY = Settings.Secure.ACCESSIBILITY_MAGNIFICATION_CURSOR_FOLLOWING_MODE; Loading @@ -63,6 +72,14 @@ public class MagnificationCursorFollowingModePreferenceController @Nullable private Preference mModePreference; final ContentObserver mContentObserver = new ContentObserver( new Handler(Looper.getMainLooper())) { @Override public void onChange(boolean selfChange, @Nullable Uri uri) { updateState(mModePreference); } }; public MagnificationCursorFollowingModePreferenceController(@NonNull Context context, @NonNull String preferenceKey) { super(context, preferenceKey); Loading @@ -85,6 +102,16 @@ public class MagnificationCursorFollowingModePreferenceController Settings.Secure.ACCESSIBILITY_MAGNIFICATION_CURSOR_FOLLOWING_MODE_EDGE)); } @Override public void onResume() { MagnificationCapabilities.registerObserver(mContext, mContentObserver); } @Override public void onPause() { MagnificationCapabilities.unregisterObserver(mContext, mContentObserver); } @Override public int getAvailabilityStatus() { return isInSetupWizard() ? CONDITIONALLY_UNAVAILABLE : AVAILABLE; Loading @@ -93,6 +120,10 @@ public class MagnificationCursorFollowingModePreferenceController @NonNull @Override public CharSequence getSummary() { if (mModePreference == null || !mModePreference.isEnabled()) { return mContext.getString( R.string.accessibility_magnification_cursor_following_unavailable_summary); } return getCursorFollowingModeSummary(getCurrentMagnificationCursorFollowingMode()); } Loading @@ -100,6 +131,7 @@ public class MagnificationCursorFollowingModePreferenceController public void displayPreference(@NonNull PreferenceScreen screen) { super.displayPreference(screen); mModePreference = screen.findPreference(getPreferenceKey()); updateState(mModePreference); } @Override Loading Loading @@ -207,6 +239,20 @@ public class MagnificationCursorFollowingModePreferenceController Settings.Secure.ACCESSIBILITY_MAGNIFICATION_CURSOR_FOLLOWING_MODE_CONTINUOUS); } @Override public void updateState(@Nullable Preference preference) { super.updateState(preference); if (preference == null) { return; } @MagnificationMode int mode = MagnificationCapabilities.getCapabilities(mContext); preference.setEnabled( mode == MagnificationMode.FULLSCREEN || mode == MagnificationMode.ALL); refreshSummary(preference); } static class ModeInfo extends ItemInfoArrayAdapter.ItemInfo { @AccessibilityMagnificationCursorFollowingMode public final int mMode; Loading src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java +1 −0 Original line number Diff line number Diff line Loading @@ -356,6 +356,7 @@ public class ToggleScreenMagnificationPreferenceFragment extends MagnificationCursorFollowingModePreferenceController.PREF_KEY); controller.setDialogHelper(/* dialogHelper= */this); mMagnificationCursorFollowingModeDialogDelegate = controller; getSettingsLifecycle().addObserver(controller); controller.setInSetupWizard(mInSetupWizard); controller.displayPreference(getPreferenceScreen()); addPreferenceController(controller); Loading tests/robotests/src/com/android/settings/accessibility/MagnificationCursorFollowingModePreferenceControllerTest.java +26 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.settings.accessibility; import static com.android.settings.accessibility.MagnificationCapabilities.MagnificationMode; import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertWithMessage; Loading Loading @@ -176,4 +178,28 @@ public class MagnificationCursorFollowingModePreferenceControllerTest { assertThat(TextUtils.equals(mController.getSummary(), mContext.getString( R.string.accessibility_magnification_cursor_following_edge))).isTrue(); } @Test public void updateState_windowModeOnly_preferenceBecomesUnavailable() { MagnificationCapabilities.setCapabilities(mContext, MagnificationMode.WINDOW); mController.updateState(mModePreference); assertThat(mModePreference.isEnabled()).isFalse(); } @Test public void updateState_fullscreenModeOnly_preferenceIsAvailable() { MagnificationCapabilities.setCapabilities(mContext, MagnificationMode.FULLSCREEN); mController.updateState(mModePreference); assertThat(mModePreference.isEnabled()).isTrue(); } @Test public void updateState_switchMode_preferenceIsAvailable() { MagnificationCapabilities.setCapabilities(mContext, MagnificationMode.ALL); mController.updateState(mModePreference); assertThat(mModePreference.isEnabled()).isTrue(); } } Loading
res/values/strings.xml +2 −0 Original line number Diff line number Diff line Loading @@ -5486,6 +5486,8 @@ <string name="accessibility_magnification_cursor_following_title">Cursor following</string> <!-- Header message of cursor following mode dialog for magnification. [CHAR LIMIT=none] --> <string name="accessibility_magnification_cursor_following_header">Choose how Magnification follows your cursor.</string> <!-- Summary for cursor following preference where cursor following setting is unavailable while partial-only capability. [CHAR LIMIT=none] --> <string name="accessibility_magnification_cursor_following_unavailable_summary">Unavailable while only magnifying part of the screen</string> <!-- Option title of cursor following continuous mode in the mode selection dialog. [CHAR LIMIT=none] --> <string name="accessibility_magnification_cursor_following_continuous">Move screen continuously as mouse moves</string> <!-- Option title of cursor following center mode in the mode selection dialog. [CHAR LIMIT=none] -->
src/com/android/settings/accessibility/MagnificationCursorFollowingModePreferenceController.java +47 −1 Original line number Diff line number Diff line Loading @@ -19,6 +19,10 @@ import android.app.Dialog; import android.app.settings.SettingsEnums; import android.content.Context; import android.content.DialogInterface; import android.database.ContentObserver; import android.net.Uri; import android.os.Handler; import android.os.Looper; import android.provider.Settings; import android.provider.Settings.Secure.AccessibilityMagnificationCursorFollowingMode; import android.text.TextUtils; Loading @@ -39,6 +43,10 @@ import androidx.preference.PreferenceScreen; import com.android.settings.DialogCreatable; import com.android.settings.R; import com.android.settings.accessibility.AccessibilityDialogUtils.DialogEnums; import com.android.settings.accessibility.MagnificationCapabilities.MagnificationMode; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnPause; import com.android.settingslib.core.lifecycle.events.OnResume; import java.util.ArrayList; import java.util.List; Loading @@ -47,7 +55,8 @@ import java.util.List; * Controller that shows the magnification cursor following mode and the preference click behavior. */ public class MagnificationCursorFollowingModePreferenceController extends MagnificationBasePreferenceController implements DialogCreatable { extends MagnificationBasePreferenceController implements DialogCreatable, LifecycleObserver, OnResume, OnPause { static final String PREF_KEY = Settings.Secure.ACCESSIBILITY_MAGNIFICATION_CURSOR_FOLLOWING_MODE; Loading @@ -63,6 +72,14 @@ public class MagnificationCursorFollowingModePreferenceController @Nullable private Preference mModePreference; final ContentObserver mContentObserver = new ContentObserver( new Handler(Looper.getMainLooper())) { @Override public void onChange(boolean selfChange, @Nullable Uri uri) { updateState(mModePreference); } }; public MagnificationCursorFollowingModePreferenceController(@NonNull Context context, @NonNull String preferenceKey) { super(context, preferenceKey); Loading @@ -85,6 +102,16 @@ public class MagnificationCursorFollowingModePreferenceController Settings.Secure.ACCESSIBILITY_MAGNIFICATION_CURSOR_FOLLOWING_MODE_EDGE)); } @Override public void onResume() { MagnificationCapabilities.registerObserver(mContext, mContentObserver); } @Override public void onPause() { MagnificationCapabilities.unregisterObserver(mContext, mContentObserver); } @Override public int getAvailabilityStatus() { return isInSetupWizard() ? CONDITIONALLY_UNAVAILABLE : AVAILABLE; Loading @@ -93,6 +120,10 @@ public class MagnificationCursorFollowingModePreferenceController @NonNull @Override public CharSequence getSummary() { if (mModePreference == null || !mModePreference.isEnabled()) { return mContext.getString( R.string.accessibility_magnification_cursor_following_unavailable_summary); } return getCursorFollowingModeSummary(getCurrentMagnificationCursorFollowingMode()); } Loading @@ -100,6 +131,7 @@ public class MagnificationCursorFollowingModePreferenceController public void displayPreference(@NonNull PreferenceScreen screen) { super.displayPreference(screen); mModePreference = screen.findPreference(getPreferenceKey()); updateState(mModePreference); } @Override Loading Loading @@ -207,6 +239,20 @@ public class MagnificationCursorFollowingModePreferenceController Settings.Secure.ACCESSIBILITY_MAGNIFICATION_CURSOR_FOLLOWING_MODE_CONTINUOUS); } @Override public void updateState(@Nullable Preference preference) { super.updateState(preference); if (preference == null) { return; } @MagnificationMode int mode = MagnificationCapabilities.getCapabilities(mContext); preference.setEnabled( mode == MagnificationMode.FULLSCREEN || mode == MagnificationMode.ALL); refreshSummary(preference); } static class ModeInfo extends ItemInfoArrayAdapter.ItemInfo { @AccessibilityMagnificationCursorFollowingMode public final int mMode; Loading
src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java +1 −0 Original line number Diff line number Diff line Loading @@ -356,6 +356,7 @@ public class ToggleScreenMagnificationPreferenceFragment extends MagnificationCursorFollowingModePreferenceController.PREF_KEY); controller.setDialogHelper(/* dialogHelper= */this); mMagnificationCursorFollowingModeDialogDelegate = controller; getSettingsLifecycle().addObserver(controller); controller.setInSetupWizard(mInSetupWizard); controller.displayPreference(getPreferenceScreen()); addPreferenceController(controller); Loading
tests/robotests/src/com/android/settings/accessibility/MagnificationCursorFollowingModePreferenceControllerTest.java +26 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.settings.accessibility; import static com.android.settings.accessibility.MagnificationCapabilities.MagnificationMode; import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertWithMessage; Loading Loading @@ -176,4 +178,28 @@ public class MagnificationCursorFollowingModePreferenceControllerTest { assertThat(TextUtils.equals(mController.getSummary(), mContext.getString( R.string.accessibility_magnification_cursor_following_edge))).isTrue(); } @Test public void updateState_windowModeOnly_preferenceBecomesUnavailable() { MagnificationCapabilities.setCapabilities(mContext, MagnificationMode.WINDOW); mController.updateState(mModePreference); assertThat(mModePreference.isEnabled()).isFalse(); } @Test public void updateState_fullscreenModeOnly_preferenceIsAvailable() { MagnificationCapabilities.setCapabilities(mContext, MagnificationMode.FULLSCREEN); mController.updateState(mModePreference); assertThat(mModePreference.isEnabled()).isTrue(); } @Test public void updateState_switchMode_preferenceIsAvailable() { MagnificationCapabilities.setCapabilities(mContext, MagnificationMode.ALL); mController.updateState(mModePreference); assertThat(mModePreference.isEnabled()).isTrue(); } }