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
This commit is contained in:
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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";
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user