Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 194015b7 authored by Ryan Lin's avatar Ryan Lin Committed by Android (Google) Code Review
Browse files

Merge "Move Magnification Mode Settings to the main page" into sc-dev

parents da60d4e8 6269a92e
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -715,8 +715,8 @@
           parent="@*android:style/Widget.DeviceDefault.Button.ButtonBar.AlertDialog">
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">56dp</item>
        <item name="android:paddingLeft">8dp</item>
        <item name="android:paddingRight">8dp</item>
        <item name="android:paddingEnd">8dp</item>
        <item name="android:paddingStart">8dp</item>
        <item name="android:background">?android:attr/selectableItemBackground</item>
    </style>

+3 −3
Original line number Diff line number Diff line
@@ -118,16 +118,16 @@ public class AccessibilityEditDialogUtils {
     * Method to show the magnification edit shortcut dialog in Magnification.
     *
     * @param context A valid context
     * @param dialogTitle The title of magnify edit shortcut dialog
     * @param positiveBtnListener The positive button listener
     * @return A magnification edit shortcut dialog in Magnification
     */
    public static Dialog createMagnificationSwitchShortcutDialog(Context context,
            CharSequence dialogTitle, CustomButtonsClickListener positiveBtnListener) {
            CustomButtonsClickListener positiveBtnListener) {
        final View contentView = createSwitchShortcutDialogContentView(context);
        final AlertDialog alertDialog = new AlertDialog.Builder(context)
                .setView(contentView)
                .setTitle(dialogTitle)
                .setTitle(context.getString(
                        R.string.accessibility_magnification_switch_shortcut_title))
                .create();
        setCustomButtonsClickListener(alertDialog, contentView,
                positiveBtnListener, /* negativeBtnListener= */ null);
+28 −9
Original line number Diff line number Diff line
@@ -47,6 +47,7 @@ import com.android.settings.accessibility.MagnificationCapabilities.Magnificatio
import com.android.settings.core.BasePreferenceController;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnCreate;
import com.android.settingslib.core.lifecycle.events.OnResume;
import com.android.settingslib.core.lifecycle.events.OnSaveInstanceState;

import java.util.ArrayList;
@@ -55,8 +56,9 @@ import java.util.StringJoiner;

/** Controller that shows the magnification area mode summary and the preference click behavior. */
public class MagnificationModePreferenceController extends BasePreferenceController implements
        DialogCreatable, LifecycleObserver, OnCreate, OnSaveInstanceState {
        DialogCreatable, LifecycleObserver, OnCreate, OnResume, OnSaveInstanceState {

    static final String PREF_KEY = "screen_magnification_mode";
    private static final int DIALOG_ID_BASE = 10;
    @VisibleForTesting
    static final int DIALOG_MAGNIFICATION_MODE = DIALOG_ID_BASE + 1;
@@ -68,7 +70,7 @@ public class MagnificationModePreferenceController extends BasePreferenceControl
    private static final String TAG = "MagnificationModePreferenceController";
    private static final char COMPONENT_NAME_SEPARATOR = ':';

    private MagnificationSettingsFragment mParentFragment;
    private DialogHelper mDialogHelper;
    // The magnification mode in the dialog.
    private int mMode = MagnificationMode.NONE;
    private Preference mModePreference;
@@ -121,7 +123,7 @@ public class MagnificationModePreferenceController extends BasePreferenceControl
        mModePreference = screen.findPreference(getPreferenceKey());
        mModePreference.setOnPreferenceClickListener(preference -> {
            mMode = MagnificationCapabilities.getCapabilities(mContext);
            mParentFragment.showDialog(DIALOG_MAGNIFICATION_MODE);
            mDialogHelper.showDialog(DIALOG_MAGNIFICATION_MODE);
            return true;
        });
    }
@@ -131,8 +133,12 @@ public class MagnificationModePreferenceController extends BasePreferenceControl
        outState.putInt(EXTRA_MODE, mMode);
    }

    public void setParentFragment(MagnificationSettingsFragment parentFragment) {
        mParentFragment = parentFragment;
    /**
     * Sets {@link DialogHelper} used to show the dialog.
     */
    public void setDialogHelper(DialogHelper dialogHelper) {
        mDialogHelper = dialogHelper;
        mDialogHelper.setDialogDelegate(this);
    }

    @Override
@@ -207,7 +213,7 @@ public class MagnificationModePreferenceController extends BasePreferenceControl
        }
        mMode = modeInfo.mMagnificationMode;
        if (isTripleTapEnabled(mContext) && mMode != MagnificationMode.FULLSCREEN) {
            mParentFragment.showDialog(DIALOG_MAGNIFICATION_SWITCH_SHORTCUT);
            mDialogHelper.showDialog(DIALOG_MAGNIFICATION_SWITCH_SHORTCUT);
        }
    }

@@ -229,9 +235,7 @@ public class MagnificationModePreferenceController extends BasePreferenceControl
    }

    private Dialog createMagnificationShortCutConfirmDialog() {
        final String title = mContext.getString(
                R.string.accessibility_magnification_switch_shortcut_title);
        return AccessibilityEditDialogUtils.createMagnificationSwitchShortcutDialog(mContext, title,
        return AccessibilityEditDialogUtils.createMagnificationSwitchShortcutDialog(mContext,
                this::onSwitchShortcutDialogButtonClicked);
    }

@@ -267,6 +271,21 @@ public class MagnificationModePreferenceController extends BasePreferenceControl
                joiner.toString());
    }

    // TODO(b/186731461): Remove it when this controller is used in DashBoardFragment only.
    @Override
    public void onResume() {
        updateState(mModePreference);
    }


    /**
     * An interface to help the delegate to show the dialog. It will be injected to the delegate.
     */
    interface DialogHelper extends DialogCreatable {
        void showDialog(int dialogId);
        void setDialogDelegate(DialogCreatable delegate);
    }

    @VisibleForTesting
    static class MagnificationModeInfo extends ItemInfoArrayAdapter.ItemInfo {
        @MagnificationMode
+16 −9
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.app.Dialog;
import android.app.settings.SettingsEnums;
import android.content.Context;

import com.android.settings.DialogCreatable;
import com.android.settings.R;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.search.BaseSearchIndexProvider;
@@ -27,11 +28,13 @@ import com.android.settingslib.search.SearchIndexable;

/** Settings page for magnification. */
@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
public class MagnificationSettingsFragment extends DashboardFragment {
public class MagnificationSettingsFragment extends DashboardFragment implements
        MagnificationModePreferenceController.DialogHelper {

    private static final String TAG = "MagnificationSettingsFragment";

    private MagnificationModePreferenceController mMagnificationModePreferenceController;
    private DialogCreatable mDialogDelegate;


    @Override
    public int getMetricsCategory() {
@@ -41,19 +44,23 @@ public class MagnificationSettingsFragment extends DashboardFragment {
    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        mMagnificationModePreferenceController = use(MagnificationModePreferenceController.class);
        mMagnificationModePreferenceController.setParentFragment(this);
        use(MagnificationModePreferenceController.class).setDialogHelper(this);
    }

    @Override
    protected void showDialog(int dialogId) {
    public void showDialog(int dialogId) {
        super.showDialog(dialogId);
    }

    @Override
    public void setDialogDelegate(DialogCreatable delegate) {
        mDialogDelegate = delegate;
    }

    @Override
    public int getDialogMetricsCategory(int dialogId) {
        if (mMagnificationModePreferenceController != null) {
            return mMagnificationModePreferenceController.getDialogMetricsCategory(dialogId);
        if (mDialogDelegate != null) {
            return mDialogDelegate.getDialogMetricsCategory(dialogId);
        }
        return 0;
    }
@@ -70,8 +77,8 @@ public class MagnificationSettingsFragment extends DashboardFragment {

    @Override
    public Dialog onCreateDialog(int dialogId) {
        if (mMagnificationModePreferenceController != null) {
            final Dialog dialog = mMagnificationModePreferenceController.onCreateDialog(dialogId);
        if (mDialogDelegate != null) {
            final Dialog dialog = mDialogDelegate.onCreateDialog(dialogId);
            if (dialog != null) {
                return dialog;
            }
+38 −5
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ import androidx.preference.Preference;
import androidx.preference.PreferenceCategory;

import com.android.internal.annotations.VisibleForTesting;
import com.android.settings.DialogCreatable;
import com.android.settings.R;
import com.android.settings.accessibility.AccessibilityUtil.UserShortcutType;

@@ -55,7 +56,8 @@ import java.util.StringJoiner;
 * and does not have toggle bar to turn on service to use.
 */
public class ToggleScreenMagnificationPreferenceFragment extends
        ToggleFeaturePreferenceFragment {
        ToggleFeaturePreferenceFragment implements
        MagnificationModePreferenceController.DialogHelper {
    // TODO(b/147021230): Move duplicated functions with android/internal/accessibility into util.
    private TouchExplorationStateChangeListener mTouchExplorationStateChangeListener;

@@ -67,6 +69,9 @@ public class ToggleScreenMagnificationPreferenceFragment extends
    private static final TextUtils.SimpleStringSplitter sStringColonSplitter =
            new TextUtils.SimpleStringSplitter(COMPONENT_NAME_SEPARATOR);

    private MagnificationModePreferenceController mModePreferenceController;
    private DialogCreatable mDialogDelegate;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
@@ -108,6 +113,12 @@ public class ToggleScreenMagnificationPreferenceFragment extends

    @Override
    public Dialog onCreateDialog(int dialogId) {
        if (mDialogDelegate != null) {
            final Dialog dialog = mDialogDelegate.onCreateDialog(dialogId);
            if (dialog != null) {
                return dialog;
            }
        }
        final AlertDialog dialog;
        switch (dialogId) {
            case DialogEnums.GESTURE_NAVIGATION_TUTORIAL:
@@ -128,20 +139,35 @@ public class ToggleScreenMagnificationPreferenceFragment extends

    @Override
    protected void initSettingsPreference() {

        // If the device doesn't support magnification area, it should hide the settings preference.
        if (!getContext().getResources().getBoolean(
                com.android.internal.R.bool.config_magnification_area)) {
            return;
        }
        mSettingsPreference = new Preference(getPrefContext());
        mSettingsPreference.setTitle(R.string.accessibility_menu_item_settings);
        // TODO(b/177371954): "magnification area" should be brought up to the highest level of the
        // settings UI so that it appears below "shortcut" to replace "settings.
        mSettingsPreference.setFragment(MagnificationSettingsFragment.class.getName());
        mSettingsPreference.setTitle(R.string.accessibility_magnification_mode_title);
        mSettingsPreference.setKey(MagnificationModePreferenceController.PREF_KEY);
        mSettingsPreference.setPersistent(false);

        final PreferenceCategory generalCategory = findPreference(KEY_GENERAL_CATEGORY);
        generalCategory.addPreference(mSettingsPreference);

        mModePreferenceController = new MagnificationModePreferenceController(getContext(),
                MagnificationModePreferenceController.PREF_KEY);
        mModePreferenceController.setDialogHelper(this);
        getSettingsLifecycle().addObserver(mModePreferenceController);
        mModePreferenceController.displayPreference(getPreferenceScreen());
    }

    @Override
    public void showDialog(int dialogId) {
        super.showDialog(dialogId);
    }

    @Override
    public void setDialogDelegate(DialogCreatable delegate) {
        mDialogDelegate = delegate;
    }

    @Override
@@ -278,6 +304,13 @@ public class ToggleScreenMagnificationPreferenceFragment extends

    @Override
    public int getDialogMetricsCategory(int dialogId) {
        if (mDialogDelegate != null) {
            final int category = mDialogDelegate.getDialogMetricsCategory(dialogId);
            if (category != 0) {
                return category;
            }
        }

        switch (dialogId) {
            case DialogEnums.GESTURE_NAVIGATION_TUTORIAL:
                return SettingsEnums.DIALOG_TOGGLE_SCREEN_MAGNIFICATION_GESTURE_NAVIGATION;
Loading