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

Commit 4bfe215e authored by jasonwshsu's avatar jasonwshsu
Browse files

Add link functionality in message of magnification triple-tap dialog

Bug: 210593079
Test: make RunSettingsRoboTests ROBOTEST_FILTER=ShortcutPreferenceTest
Test: make RunSettingsRoboTests ROBOTEST_FILTER=MagnificationModePreferenceControllerTest
Change-Id: Id69b0b717410b5c5c44a818c36688bb7331c73ae
parent 3b96a2c5
Loading
Loading
Loading
Loading
+31 −1
Original line number Diff line number Diff line
@@ -25,11 +25,13 @@ import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.provider.Settings;
import android.text.method.LinkMovementMethod;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;

import androidx.annotation.DrawableRes;
import androidx.annotation.NonNull;
@@ -42,6 +44,7 @@ import com.android.settings.DialogCreatable;
import com.android.settings.R;
import com.android.settings.accessibility.MagnificationCapabilities.MagnificationMode;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.utils.AnnotationSpan;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnCreate;
import com.android.settingslib.core.lifecycle.events.OnResume;
@@ -70,6 +73,7 @@ public class MagnificationModePreferenceController extends BasePreferenceControl
    @MagnificationMode
    private int mModeCache = MagnificationMode.NONE;
    private Preference mModePreference;
    private ShortcutPreference mLinkPreference;

    @VisibleForTesting
    ListView mMagnificationModesListView;
@@ -117,6 +121,8 @@ public class MagnificationModePreferenceController extends BasePreferenceControl
    public void displayPreference(PreferenceScreen screen) {
        super.displayPreference(screen);
        mModePreference = screen.findPreference(getPreferenceKey());
        mLinkPreference = screen.findPreference(
                ToggleFeaturePreferenceFragment.KEY_SHORTCUT_PREFERENCE);
        mModePreference.setOnPreferenceClickListener(preference -> {
            mModeCache = MagnificationCapabilities.getCapabilities(mContext);
            mDialogHelper.showDialog(DIALOG_MAGNIFICATION_MODE);
@@ -248,9 +254,33 @@ public class MagnificationModePreferenceController extends BasePreferenceControl
        final CharSequence negativeBtnText = mContext.getString(
                R.string.accessibility_magnification_triple_tap_warning_negative_button);

        return AccessibilityDialogUtils.createCustomDialog(mContext, title, contentView,
        final Dialog dialog = AccessibilityDialogUtils.createCustomDialog(mContext, title,
                contentView,
                positiveBtnText, this::onMagnificationTripleTapWarningDialogPositiveButtonClicked,
                negativeBtnText, this::onMagnificationTripleTapWarningDialogNegativeButtonClicked);

        updateLinkInTripleTapWarningDialog(dialog, contentView);

        return dialog;
    }

    private void updateLinkInTripleTapWarningDialog(Dialog dialog, View contentView) {
        final TextView messageView = contentView.findViewById(R.id.message);
        // TODO(b/225682559): Need to remove performClick() after refactoring accessibility dialog.
        final View.OnClickListener linkListener = view -> {
            mLinkPreference.performClick();
            dialog.dismiss();
        };
        final AnnotationSpan.LinkInfo linkInfo = new AnnotationSpan.LinkInfo(
                AnnotationSpan.LinkInfo.DEFAULT_ANNOTATION, linkListener);
        final CharSequence textWithLink = AnnotationSpan.linkify(mContext.getText(
                R.string.accessibility_magnification_triple_tap_warning_message), linkInfo);

        if (messageView != null) {
            messageView.setText(textWithLink);
            messageView.setMovementMethod(LinkMovementMethod.getInstance());
        }
        dialog.setContentView(contentView);
    }

    @VisibleForTesting
+5 −0
Original line number Diff line number Diff line
@@ -64,6 +64,11 @@ public class ShortcutPreference extends Preference {
        setLayoutResource(R.layout.accessibility_shortcut_secondary_action);
        setWidgetLayoutResource(R.layout.preference_widget_primary_switch);
        setIconSpaceReserved(false);
        // Treat onSettingsClicked as this preference's click.
        setOnPreferenceClickListener(preference -> {
            callOnSettingsClicked();
            return true;
        });
    }

    @Override
+1 −1
Original line number Diff line number Diff line
@@ -102,7 +102,7 @@ public abstract class ToggleFeaturePreferenceFragment extends SettingsPreference
    protected static final String KEY_USE_SERVICE_PREFERENCE = "use_service";
    public static final String KEY_GENERAL_CATEGORY = "general_categories";
    protected static final String KEY_HTML_DESCRIPTION_PREFERENCE = "html_description";
    private static final String KEY_SHORTCUT_PREFERENCE = "shortcut_preference";
    public static final String KEY_SHORTCUT_PREFERENCE = "shortcut_preference";
    protected static final String KEY_SAVED_USER_SHORTCUT_TYPE = "shortcut_type";
    protected static final String KEY_SAVED_QS_TOOLTIP_RESHOW = "qs_tooltip_reshow";
    protected static final String KEY_SAVED_QS_TOOLTIP_TYPE = "qs_tooltip_type";
+19 −0
Original line number Diff line number Diff line
@@ -30,9 +30,12 @@ import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.provider.Settings;
import android.text.SpannableString;
import android.text.TextUtils;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;

import androidx.preference.Preference;
import androidx.preference.PreferenceManager;
@@ -41,6 +44,7 @@ import androidx.test.core.app.ApplicationProvider;

import com.android.settings.DialogCreatable;
import com.android.settings.R;
import com.android.settings.utils.AnnotationSpan;

import org.junit.Before;
import org.junit.Rule;
@@ -177,6 +181,21 @@ public class MagnificationModePreferenceControllerTest {
        assertThat(TextUtils.equals(mController.getSummary(), allSummary)).isTrue();
    }

    @Test
    public void checkSpansInTripleTapWarningDialog_existAnnotationSpan() {
        mDialogHelper.showDialog(
                MagnificationModePreferenceController.DIALOG_MAGNIFICATION_TRIPLE_TAP_WARNING);
        final View contentView = mDialogHelper.getDialog().findViewById(android.R.id.content);
        final TextView messageView = contentView.findViewById(R.id.message);
        final CharSequence textInTripleTapWarningDialog = messageView.getText();

        final AnnotationSpan[] annotationSpans =
                ((SpannableString) textInTripleTapWarningDialog).getSpans(/*queryStart= */ 0,
                        textInTripleTapWarningDialog.length(), AnnotationSpan.class);

        assertThat(annotationSpans[0]).isNotNull();
    }

    @Test
    public void getSummary_saveWindowScreen_shouldReturnWindowScreenSummary() {
        MagnificationCapabilities.setCapabilities(mContext, MagnificationMode.WINDOW);
+11 −2
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import android.view.LayoutInflater;
import android.view.View;

import androidx.preference.PreferenceViewHolder;
import androidx.test.core.app.ApplicationProvider;

import com.android.settings.R;

@@ -30,7 +31,6 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;

/** Tests for {@link ShortcutPreference} */
@RunWith(RobolectricTestRunner.class)
@@ -58,7 +58,7 @@ public class ShortcutPreferenceTest {

    @Before
    public void setUp() {
        final Context context = RuntimeEnvironment.application;
        final Context context = ApplicationProvider.getApplicationContext();
        mShortcutPreference = new ShortcutPreference(context, null);

        final LayoutInflater inflater = LayoutInflater.from(context);
@@ -95,4 +95,13 @@ public class ShortcutPreferenceTest {

        assertThat(mShortcutPreference.isChecked()).isEqualTo(true);
    }

    @Test
    public void performClickOnPreference_settingsClicked() {
        mShortcutPreference.onBindViewHolder(mPreferenceViewHolder);
        mShortcutPreference.setOnClickCallback(mListener);
        mShortcutPreference.performClick();

        assertThat(mResult).isEqualTo(SETTINGS_CLICKED);
    }
}