Loading aconfig/accessibility/accessibility_flags.aconfig +10 −0 Original line number Diff line number Diff line Loading @@ -24,6 +24,16 @@ flag { bug: "301198830" } flag { name: "hide_magnification_always_on_toggle_when_window_mode_only" namespace: "accessibility" description: "Decides whether to hide the magnification always on setting when capabilities is window mode only." bug: "328787031" metadata { purpose: PURPOSE_BUGFIX } } flag { name: "remove_qs_tooltip_in_suw" namespace: "accessibility" Loading res/values/strings.xml +2 −0 Original line number Diff line number Diff line Loading @@ -4764,6 +4764,8 @@ <string name="accessibility_screen_magnification_always_on_title">Keep on while switching apps</string> <!-- Summary for accessibility magnifier preference where the magnifier never turns off while switching apps. [CHAR LIMIT=none] --> <string name="accessibility_screen_magnification_always_on_summary">Magnifier stays on and zooms out when you switch apps</string> <!-- Summary for accessibility magnifier preference where the always on toggle is unavailable while partial-only capability. [CHAR LIMIT=none] --> <string name="accessibility_screen_magnification_always_on_unavailable_summary">Unavailable while only magnifying part of the screen</string> <!-- Title for accessibility on-screen joystick controller preference that controls magnification position. [CHAR LIMIT=35] --> <string name="accessibility_screen_magnification_joystick_title">Joystick</string> <!-- Summary for accessibility on-screen joystick controller preference that controls magnification position. [CHAR LIMIT=none] --> src/com/android/settings/accessibility/MagnificationAlwaysOnPreferenceController.java +77 −1 Original line number Diff line number Diff line Loading @@ -20,26 +20,73 @@ import static com.android.settings.accessibility.AccessibilityUtil.State.OFF; import static com.android.settings.accessibility.AccessibilityUtil.State.ON; import android.content.Context; import android.database.ContentObserver; import android.net.Uri; import android.os.Handler; import android.os.Looper; import android.provider.Settings; import androidx.annotation.Nullable; import androidx.annotation.StringRes; import androidx.annotation.VisibleForTesting; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.accessibility.MagnificationCapabilities.MagnificationMode; import com.android.settings.core.TogglePreferenceController; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnPause; import com.android.settingslib.core.lifecycle.events.OnResume; /** * Controller that accesses and switches the preference status of the magnification always on * feature, where the magnifier will not deactivate on Activity transitions; it will only zoom out * to 100%. */ public class MagnificationAlwaysOnPreferenceController extends TogglePreferenceController { public class MagnificationAlwaysOnPreferenceController extends TogglePreferenceController implements LifecycleObserver, OnResume, OnPause { private static final String TAG = MagnificationAlwaysOnPreferenceController.class.getSimpleName(); static final String PREF_KEY = Settings.Secure.ACCESSIBILITY_MAGNIFICATION_ALWAYS_ON_ENABLED; private Preference mPreference; @VisibleForTesting final ContentObserver mContentObserver = new ContentObserver( new Handler(Looper.getMainLooper())) { @Override public void onChange(boolean selfChange, @Nullable Uri uri) { updateState(mPreference); } }; public MagnificationAlwaysOnPreferenceController(Context context, String preferenceKey) { super(context, preferenceKey); } @Override public void onResume() { if (Flags.hideMagnificationAlwaysOnToggleWhenWindowModeOnly()) { MagnificationCapabilities.registerObserver(mContext, mContentObserver); } } @Override public void onPause() { if (Flags.hideMagnificationAlwaysOnToggleWhenWindowModeOnly()) { MagnificationCapabilities.unregisterObserver(mContext, mContentObserver); } } @Override public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); mPreference = screen.findPreference(getPreferenceKey()); updateState(mPreference); } @Override public int getAvailabilityStatus() { return AVAILABLE; Loading @@ -62,4 +109,33 @@ public class MagnificationAlwaysOnPreferenceController extends TogglePreferenceC public int getSliceHighlightMenuRes() { return R.string.menu_key_accessibility; } @Override public CharSequence getSummary() { if (!Flags.hideMagnificationAlwaysOnToggleWhenWindowModeOnly()) { return super.getSummary(); } @StringRes int resId = mPreference.isEnabled() ? R.string.accessibility_screen_magnification_always_on_summary : R.string.accessibility_screen_magnification_always_on_unavailable_summary; return mContext.getString(resId); } @Override public void updateState(Preference preference) { super.updateState(preference); if (!Flags.hideMagnificationAlwaysOnToggleWhenWindowModeOnly()) { return; } if (preference == null) { return; } @MagnificationMode int mode = MagnificationCapabilities.getCapabilities(mContext); preference.setEnabled( mode == MagnificationMode.FULLSCREEN || mode == MagnificationMode.ALL); refreshSummary(preference); } } src/com/android/settings/accessibility/MagnificationCapabilities.java +24 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.settings.accessibility; import android.content.ContentResolver; import android.content.Context; import android.database.ContentObserver; import android.provider.Settings; import androidx.annotation.IntDef; Loading Loading @@ -101,5 +102,28 @@ public final class MagnificationCapabilities { MagnificationMode.FULLSCREEN, contentResolver.getUserId()); } /** * Register an observer class that gets callbacks when magnification capabilities changes. * * @param context A {@link Context}. * @param contentObserver The object that receives callbacks when changes occur. */ public static void registerObserver(Context context, ContentObserver contentObserver) { context.getContentResolver().registerContentObserver( Settings.Secure.getUriFor(KEY_CAPABILITY), /* notifyForDescendants= */ false, contentObserver); } /** * Unregisters a magnification capabilities change observer. * * @param context A {@link Context}. * @param contentObserver The previously registered observer that is no longer needed. */ public static void unregisterObserver(Context context, ContentObserver contentObserver) { context.getContentResolver().unregisterContentObserver(contentObserver); } private MagnificationCapabilities() {} } src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java +2 −0 Original line number Diff line number Diff line Loading @@ -266,6 +266,7 @@ public class ToggleScreenMagnificationPreferenceFragment extends defaultValue ); } private void addAlwaysOnSetting(PreferenceCategory generalCategory) { if (!isAlwaysOnSettingEnabled()) { return; Loading @@ -282,6 +283,7 @@ public class ToggleScreenMagnificationPreferenceFragment extends var alwaysOnPreferenceController = new MagnificationAlwaysOnPreferenceController( getContext(), MagnificationAlwaysOnPreferenceController.PREF_KEY); getSettingsLifecycle().addObserver(alwaysOnPreferenceController); alwaysOnPreferenceController.displayPreference(getPreferenceScreen()); addPreferenceController(alwaysOnPreferenceController); } Loading Loading
aconfig/accessibility/accessibility_flags.aconfig +10 −0 Original line number Diff line number Diff line Loading @@ -24,6 +24,16 @@ flag { bug: "301198830" } flag { name: "hide_magnification_always_on_toggle_when_window_mode_only" namespace: "accessibility" description: "Decides whether to hide the magnification always on setting when capabilities is window mode only." bug: "328787031" metadata { purpose: PURPOSE_BUGFIX } } flag { name: "remove_qs_tooltip_in_suw" namespace: "accessibility" Loading
res/values/strings.xml +2 −0 Original line number Diff line number Diff line Loading @@ -4764,6 +4764,8 @@ <string name="accessibility_screen_magnification_always_on_title">Keep on while switching apps</string> <!-- Summary for accessibility magnifier preference where the magnifier never turns off while switching apps. [CHAR LIMIT=none] --> <string name="accessibility_screen_magnification_always_on_summary">Magnifier stays on and zooms out when you switch apps</string> <!-- Summary for accessibility magnifier preference where the always on toggle is unavailable while partial-only capability. [CHAR LIMIT=none] --> <string name="accessibility_screen_magnification_always_on_unavailable_summary">Unavailable while only magnifying part of the screen</string> <!-- Title for accessibility on-screen joystick controller preference that controls magnification position. [CHAR LIMIT=35] --> <string name="accessibility_screen_magnification_joystick_title">Joystick</string> <!-- Summary for accessibility on-screen joystick controller preference that controls magnification position. [CHAR LIMIT=none] -->
src/com/android/settings/accessibility/MagnificationAlwaysOnPreferenceController.java +77 −1 Original line number Diff line number Diff line Loading @@ -20,26 +20,73 @@ import static com.android.settings.accessibility.AccessibilityUtil.State.OFF; import static com.android.settings.accessibility.AccessibilityUtil.State.ON; import android.content.Context; import android.database.ContentObserver; import android.net.Uri; import android.os.Handler; import android.os.Looper; import android.provider.Settings; import androidx.annotation.Nullable; import androidx.annotation.StringRes; import androidx.annotation.VisibleForTesting; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.accessibility.MagnificationCapabilities.MagnificationMode; import com.android.settings.core.TogglePreferenceController; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnPause; import com.android.settingslib.core.lifecycle.events.OnResume; /** * Controller that accesses and switches the preference status of the magnification always on * feature, where the magnifier will not deactivate on Activity transitions; it will only zoom out * to 100%. */ public class MagnificationAlwaysOnPreferenceController extends TogglePreferenceController { public class MagnificationAlwaysOnPreferenceController extends TogglePreferenceController implements LifecycleObserver, OnResume, OnPause { private static final String TAG = MagnificationAlwaysOnPreferenceController.class.getSimpleName(); static final String PREF_KEY = Settings.Secure.ACCESSIBILITY_MAGNIFICATION_ALWAYS_ON_ENABLED; private Preference mPreference; @VisibleForTesting final ContentObserver mContentObserver = new ContentObserver( new Handler(Looper.getMainLooper())) { @Override public void onChange(boolean selfChange, @Nullable Uri uri) { updateState(mPreference); } }; public MagnificationAlwaysOnPreferenceController(Context context, String preferenceKey) { super(context, preferenceKey); } @Override public void onResume() { if (Flags.hideMagnificationAlwaysOnToggleWhenWindowModeOnly()) { MagnificationCapabilities.registerObserver(mContext, mContentObserver); } } @Override public void onPause() { if (Flags.hideMagnificationAlwaysOnToggleWhenWindowModeOnly()) { MagnificationCapabilities.unregisterObserver(mContext, mContentObserver); } } @Override public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); mPreference = screen.findPreference(getPreferenceKey()); updateState(mPreference); } @Override public int getAvailabilityStatus() { return AVAILABLE; Loading @@ -62,4 +109,33 @@ public class MagnificationAlwaysOnPreferenceController extends TogglePreferenceC public int getSliceHighlightMenuRes() { return R.string.menu_key_accessibility; } @Override public CharSequence getSummary() { if (!Flags.hideMagnificationAlwaysOnToggleWhenWindowModeOnly()) { return super.getSummary(); } @StringRes int resId = mPreference.isEnabled() ? R.string.accessibility_screen_magnification_always_on_summary : R.string.accessibility_screen_magnification_always_on_unavailable_summary; return mContext.getString(resId); } @Override public void updateState(Preference preference) { super.updateState(preference); if (!Flags.hideMagnificationAlwaysOnToggleWhenWindowModeOnly()) { return; } if (preference == null) { return; } @MagnificationMode int mode = MagnificationCapabilities.getCapabilities(mContext); preference.setEnabled( mode == MagnificationMode.FULLSCREEN || mode == MagnificationMode.ALL); refreshSummary(preference); } }
src/com/android/settings/accessibility/MagnificationCapabilities.java +24 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.settings.accessibility; import android.content.ContentResolver; import android.content.Context; import android.database.ContentObserver; import android.provider.Settings; import androidx.annotation.IntDef; Loading Loading @@ -101,5 +102,28 @@ public final class MagnificationCapabilities { MagnificationMode.FULLSCREEN, contentResolver.getUserId()); } /** * Register an observer class that gets callbacks when magnification capabilities changes. * * @param context A {@link Context}. * @param contentObserver The object that receives callbacks when changes occur. */ public static void registerObserver(Context context, ContentObserver contentObserver) { context.getContentResolver().registerContentObserver( Settings.Secure.getUriFor(KEY_CAPABILITY), /* notifyForDescendants= */ false, contentObserver); } /** * Unregisters a magnification capabilities change observer. * * @param context A {@link Context}. * @param contentObserver The previously registered observer that is no longer needed. */ public static void unregisterObserver(Context context, ContentObserver contentObserver) { context.getContentResolver().unregisterContentObserver(contentObserver); } private MagnificationCapabilities() {} }
src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java +2 −0 Original line number Diff line number Diff line Loading @@ -266,6 +266,7 @@ public class ToggleScreenMagnificationPreferenceFragment extends defaultValue ); } private void addAlwaysOnSetting(PreferenceCategory generalCategory) { if (!isAlwaysOnSettingEnabled()) { return; Loading @@ -282,6 +283,7 @@ public class ToggleScreenMagnificationPreferenceFragment extends var alwaysOnPreferenceController = new MagnificationAlwaysOnPreferenceController( getContext(), MagnificationAlwaysOnPreferenceController.PREF_KEY); getSettingsLifecycle().addObserver(alwaysOnPreferenceController); alwaysOnPreferenceController.displayPreference(getPreferenceScreen()); addPreferenceController(alwaysOnPreferenceController); } Loading