diff --git a/res/drawable/accessibility_shortcut_type_hardware.png b/res/drawable/accessibility_shortcut_type_hardware.png
new file mode 100644
index 00000000000..141af831ded
Binary files /dev/null and b/res/drawable/accessibility_shortcut_type_hardware.png differ
diff --git a/res/drawable/accessibility_shortcut_type_software.png b/res/drawable/accessibility_shortcut_type_software.png
new file mode 100644
index 00000000000..5b0611dc58e
Binary files /dev/null and b/res/drawable/accessibility_shortcut_type_software.png differ
diff --git a/res/drawable/accessibility_shortcut_type_software_gesture.png b/res/drawable/accessibility_shortcut_type_software_gesture.png
new file mode 100644
index 00000000000..a5df752f290
Binary files /dev/null and b/res/drawable/accessibility_shortcut_type_software_gesture.png differ
diff --git a/res/drawable/accessibility_shortcut_type_triple_tap.png b/res/drawable/accessibility_shortcut_type_triple_tap.png
new file mode 100644
index 00000000000..5c6ce9564fd
Binary files /dev/null and b/res/drawable/accessibility_shortcut_type_triple_tap.png differ
diff --git a/res/layout/accessibility_shortcut_secondary_action.xml b/res/layout/accessibility_shortcut_secondary_action.xml
index 81d7bd52d22..9d59b2e97a3 100644
--- a/res/layout/accessibility_shortcut_secondary_action.xml
+++ b/res/layout/accessibility_shortcut_secondary_action.xml
@@ -60,7 +60,7 @@
android:paddingBottom="16dp">
To turn an accessibility service on or off, swipe up from the bottom of the screen with three fingers.\n\nTo switch between services, swipe up with three fingers and hold.
Got it
+
+ Use shortcut to open
+
+ Use shortcut to magnify
+
+ Shortcut to open %1$s
+
+ Shortcut to magnify
+
+ Shortcut to open Color correction
Accessibility Button
diff --git a/src/com/android/settings/accessibility/AccessibilityEditDialogUtils.java b/src/com/android/settings/accessibility/AccessibilityEditDialogUtils.java
index 62d6d340098..fb96bfdb801 100644
--- a/src/com/android/settings/accessibility/AccessibilityEditDialogUtils.java
+++ b/src/com/android/settings/accessibility/AccessibilityEditDialogUtils.java
@@ -170,7 +170,8 @@ public class AccessibilityEditDialogUtils {
final String summary = context.getString(
R.string.accessibility_shortcut_edit_dialog_summary_hardware);
setupShortcutWidget(dialogView, title, summary,
- R.drawable.illustration_accessibility_button);
+ R.drawable.accessibility_shortcut_type_hardware);
+ // TODO(b/142531156): Use vector drawable instead of temporal png file to avoid distorted.
}
private static void initMagnifyShortcut(Context context, View view) {
@@ -180,7 +181,8 @@ public class AccessibilityEditDialogUtils {
final String summary = context.getString(
R.string.accessibility_shortcut_edit_dialog_summary_triple_tap);
setupShortcutWidget(dialogView, title, summary,
- R.drawable.illustration_accessibility_button);
+ R.drawable.accessibility_shortcut_type_triple_tap);
+ // TODO(b/142531156): Use vector drawable instead of temporal png file to avoid distorted.
}
private static void initAdvancedWidget(View view) {
@@ -213,8 +215,9 @@ public class AccessibilityEditDialogUtils {
private static int retrieveImageResId(Context context) {
return isGestureNavigateEnabled(context)
- ? R.drawable.illustration_accessibility_button
- : R.drawable.illustration_accessibility_button;
+ ? R.drawable.accessibility_shortcut_type_software_gesture
+ : R.drawable.accessibility_shortcut_type_software;
+ // TODO(b/142531156): Use vector drawable instead of temporal png file to avoid distorted.
}
private static SpannableString getSummaryStringWithIcon(Context context, int lineHeight) {
diff --git a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java
index ea293b7b864..e0a2052991f 100644
--- a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java
@@ -37,10 +37,15 @@ import android.os.UserHandle;
import android.os.storage.StorageManager;
import android.provider.Settings;
import android.text.TextUtils;
+import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.View;
+import android.view.ViewGroup;
import android.view.accessibility.AccessibilityManager;
+import android.widget.CheckBox;
+
+import androidx.preference.PreferenceScreen;
import com.android.internal.widget.LockPatternUtils;
import com.android.settings.R;
@@ -57,11 +62,33 @@ public class ToggleAccessibilityServicePreferenceFragment extends ToggleFeatureP
private static final int DIALOG_ID_ENABLE_WARNING = 1;
private static final int DIALOG_ID_DISABLE_WARNING = 2;
private static final int DIALOG_ID_LAUNCH_ACCESSIBILITY_TUTORIAL = 3;
+ private static final int DIALOG_ID_EDIT_SHORTCUT = 4;
public static final int ACTIVITY_REQUEST_CONFIRM_CREDENTIAL_FOR_WEAKER_ENCRYPTION = 1;
+ private CharSequence mDialogTitle;
+
private LockPatternUtils mLockPatternUtils;
+ private final DialogInterface.OnClickListener mDialogListener =
+ (DialogInterface dialog, int id) -> {
+ if (id == DialogInterface.BUTTON_POSITIVE) {
+ // TODO(b/142531156): Save the shortcut type preference.
+ }
+ };
+
+ private final View.OnClickListener mSettingButtonListener = (View view) -> showDialog(
+ DIALOG_ID_EDIT_SHORTCUT);
+
+ private final View.OnClickListener mCheckBoxListener = (View view) -> {
+ CheckBox checkBox = (CheckBox) view;
+ if (checkBox.isChecked()) {
+ // TODO(b/142530063): Enable shortcut when checkbox is checked.
+ } else {
+ // TODO(b/142530063): Disable shortcut when checkbox is unchecked.
+ }
+ };
+
private final SettingsContentObserver mSettingsContentObserver =
new SettingsContentObserver(new Handler()) {
@Override
@@ -126,6 +153,13 @@ public class ToggleAccessibilityServicePreferenceFragment extends ToggleFeatureP
mLockPatternUtils = new LockPatternUtils(getActivity());
}
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ initShortcutPreference();
+ return super.onCreateView(inflater, container, savedInstanceState);
+ }
+
@Override
public void onResume() {
mSettingsContentObserver.register(getContentResolver());
@@ -195,6 +229,13 @@ public class ToggleAccessibilityServicePreferenceFragment extends ToggleFeatureP
}
break;
}
+ case DIALOG_ID_EDIT_SHORTCUT: {
+ final CharSequence dialogTitle = getActivity().getString(
+ R.string.accessibility_shortcut_edit_dialog_title, mDialogTitle);
+ mDialog = AccessibilityEditDialogUtils.showEditShortcutDialog(getActivity(),
+ dialogTitle, mDialogListener);
+ break;
+ }
default: {
throw new IllegalArgumentException();
}
@@ -204,10 +245,21 @@ public class ToggleAccessibilityServicePreferenceFragment extends ToggleFeatureP
@Override
public int getDialogMetricsCategory(int dialogId) {
- if (dialogId == DIALOG_ID_ENABLE_WARNING) {
- return SettingsEnums.DIALOG_ACCESSIBILITY_SERVICE_ENABLE;
- } else {
- return SettingsEnums.DIALOG_ACCESSIBILITY_SERVICE_DISABLE;
+ switch (dialogId) {
+ case DIALOG_ID_ENABLE_WARNING:
+ return SettingsEnums.DIALOG_ACCESSIBILITY_SERVICE_ENABLE;
+ case DIALOG_ID_DISABLE_WARNING:
+ return SettingsEnums.DIALOG_ACCESSIBILITY_SERVICE_DISABLE;
+ case DIALOG_ID_LAUNCH_ACCESSIBILITY_TUTORIAL:
+ return isGestureNavigateEnabled()
+ ? SettingsEnums.DIALOG_ACCESSIBILITY_SERVICE_DISABLE
+ : SettingsEnums.DIALOG_ACCESSIBILITY_SERVICE_DISABLE;
+ // TODO(b/142531156): Create a settings enum to replace it.
+ case DIALOG_ID_EDIT_SHORTCUT:
+ return SettingsEnums.DIALOG_ACCESSIBILITY_SERVICE_ENABLE;
+ // TODO(b/142531156): Create a settings enum to replace it.
+ default:
+ return 0;
}
}
@@ -220,6 +272,21 @@ public class ToggleAccessibilityServicePreferenceFragment extends ToggleFeatureP
switchBar.setSwitchBarText(switchBarText, switchBarText);
}
+ private void initShortcutPreference() {
+ final PreferenceScreen preferenceScreen = getPreferenceScreen();
+ final ShortcutPreference shortcutPreference = new ShortcutPreference(
+ preferenceScreen.getContext(), null);
+ // Put the shortcutPreference before settingsPreference.
+ shortcutPreference.setOrder(-1);
+ shortcutPreference.setTitle(R.string.accessibility_shortcut_title);
+ // TODO(b/142530063): Check the new setting key to decide which summary should be shown.
+ // TODO(b/142530063): Check if gesture mode is on to decide which summary should be shown.
+ // TODO(b/142530063): Check the new key to decide whether checkbox should be checked.
+ shortcutPreference.setSettingButtonListener(mSettingButtonListener);
+ shortcutPreference.setCheckBoxListener(mCheckBoxListener);
+ preferenceScreen.addPreference(shortcutPreference);
+ }
+
private void updateSwitchBarToggleSwitch() {
final boolean checked = AccessibilityUtils.getEnabledServicesFromSettings(getActivity())
.contains(mComponentName);
@@ -350,5 +417,9 @@ public class ToggleAccessibilityServicePreferenceFragment extends ToggleFeatureP
// Settings html description.
mHtmlDescription = arguments.getCharSequence(AccessibilitySettings.EXTRA_HTML_DESCRIPTION);
+
+ // Get Accessibility service name.
+ mDialogTitle = getAccessibilityServiceInfo().getResolveInfo().loadLabel(
+ getPackageManager());
}
}
diff --git a/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java
index 3cde80a65b8..7716c2dbe67 100644
--- a/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java
@@ -16,13 +16,21 @@
package com.android.settings.accessibility;
+import android.app.Dialog;
import android.app.settings.SettingsEnums;
import android.content.Context;
+import android.content.DialogInterface;
import android.content.res.Resources;
+import android.os.Bundle;
import android.provider.Settings;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.CheckBox;
import android.widget.Switch;
import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
import com.android.settings.R;
import com.android.settings.search.BaseSearchIndexProvider;
@@ -30,6 +38,7 @@ import com.android.settings.widget.SwitchBar;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.search.SearchIndexable;
+import com.android.settingslib.widget.RadioButtonPreference;
import java.util.ArrayList;
import java.util.List;
@@ -42,6 +51,8 @@ public final class ToggleDaltonizerPreferenceFragment extends ToggleFeaturePrefe
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider(R.xml.accessibility_daltonizer_settings);
private static final String ENABLED = Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED;
+ private static final String RADIOPREFERENCE_KEY = "daltonizer_mode_deuteranomaly";
+ private static final int DIALOG_ID_EDIT_SHORTCUT = 1;
private static final List sControllers = new ArrayList<>();
private static List buildPreferenceControllers(Context context,
@@ -59,6 +70,27 @@ public final class ToggleDaltonizerPreferenceFragment extends ToggleFeaturePrefe
return sControllers;
}
+ private final DialogInterface.OnClickListener mDialogListener =
+ (DialogInterface dialog, int id) -> {
+ if (id == DialogInterface.BUTTON_POSITIVE) {
+ // TODO(b/142531156): Save the shortcut type preference.
+ }
+ };
+
+ private final View.OnClickListener mSettingButtonListener =
+ (View view) -> showDialog(DIALOG_ID_EDIT_SHORTCUT);
+
+ private final View.OnClickListener mCheckBoxListener = (View view) -> {
+ CheckBox checkBox = (CheckBox) view;
+ if (checkBox.isChecked()) {
+ // TODO(b/142530063): Enable shortcut when checkbox is checked.
+ } else {
+ // TODO(b/142530063): Disable shortcut when checkbox is unchecked.
+ }
+ };
+
+ private Dialog mDialog;
+
@Override
public void onCheckedChanged(Preference preference) {
for (AbstractPreferenceController controller : sControllers) {
@@ -66,6 +98,13 @@ public final class ToggleDaltonizerPreferenceFragment extends ToggleFeaturePrefe
}
}
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ initShortcutPreference();
+ return super.onCreateView(inflater, container, savedInstanceState);
+ }
+
@Override
public void onResume() {
super.onResume();
@@ -86,11 +125,32 @@ public final class ToggleDaltonizerPreferenceFragment extends ToggleFeaturePrefe
}
}
+ @Override
+ public Dialog onCreateDialog(int dialogId) {
+ if (dialogId == DIALOG_ID_EDIT_SHORTCUT) {
+ final CharSequence dialogTitle = getActivity().getString(
+ R.string.accessibility_shortcut_edit_dialog_title_daltonizer);
+ mDialog = AccessibilityEditDialogUtils.showEditShortcutDialog(getActivity(),
+ dialogTitle, mDialogListener);
+ }
+
+ return mDialog;
+ }
+
@Override
public int getMetricsCategory() {
return SettingsEnums.ACCESSIBILITY_TOGGLE_DALTONIZER;
}
+ @Override
+ public int getDialogMetricsCategory(int dialogId) {
+ if (dialogId == DIALOG_ID_EDIT_SHORTCUT) {
+ return SettingsEnums.ACCESSIBILITY_TOGGLE_DALTONIZER;
+ // TODO(b/142531156): Create a settings enum to replace it.
+ }
+ return 0;
+ }
+
@Override
public int getHelpResource() {
return R.string.help_url_color_correction;
@@ -131,4 +191,20 @@ public final class ToggleDaltonizerPreferenceFragment extends ToggleFeaturePrefe
Settings.Secure.getInt(getContentResolver(), ENABLED, 0) == 1);
mSwitchBar.addOnSwitchChangeListener(this);
}
+
+ private void initShortcutPreference() {
+ final PreferenceScreen preferenceScreen = getPreferenceScreen();
+ final ShortcutPreference shortcutPreference = new ShortcutPreference(
+ preferenceScreen.getContext(), null);
+ final RadioButtonPreference radioButtonPreference = findPreference(RADIOPREFERENCE_KEY);
+ // Put the shortcutPreference before radioButtonPreference.
+ shortcutPreference.setOrder(radioButtonPreference.getOrder() - 1);
+ shortcutPreference.setTitle(R.string.accessibility_shortcut_title);
+ // TODO(b/142530063): Check the new setting key to decide which summary should be shown.
+ // TODO(b/142530063): Check if gesture mode is on to decide which summary should be shown.
+ // TODO(b/142530063): Check the new key to decide whether checkbox should be checked.
+ shortcutPreference.setSettingButtonListener(mSettingButtonListener);
+ shortcutPreference.setCheckBoxListener(mCheckBoxListener);
+ preferenceScreen.addPreference(shortcutPreference);
+ }
}
diff --git a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
index 842ec5cea41..ac54c386d80 100644
--- a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
@@ -22,6 +22,7 @@ import android.app.Dialog;
import android.app.settings.SettingsEnums;
import android.content.ContentResolver;
import android.content.Context;
+import android.content.DialogInterface;
import android.content.res.Resources;
import android.graphics.Point;
import android.media.AudioManager;
@@ -32,8 +33,12 @@ import android.os.Bundle;
import android.provider.Settings;
import android.text.TextUtils;
import android.view.Display;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
import android.view.WindowManager;
+import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.RelativeLayout.LayoutParams;
import android.widget.Switch;
@@ -51,6 +56,26 @@ public class ToggleScreenMagnificationPreferenceFragment extends
private static final int DIALOG_ID_GESTURE_NAVIGATION_TUTORIAL = 1;
private static final int DIALOG_ID_ACCESSIBILITY_BUTTON_TUTORIAL = 2;
+ private static final int DIALOG_ID_EDIT_SHORTCUT = 3;
+
+ private final DialogInterface.OnClickListener mDialogListener =
+ (DialogInterface dialog, int id) -> {
+ if (id == DialogInterface.BUTTON_POSITIVE) {
+ // TODO(b/142531156): Save the shortcut type preference.
+ }
+ };
+
+ private final View.OnClickListener mSettingButtonListener =
+ (View view) -> showDialog(DIALOG_ID_EDIT_SHORTCUT);
+
+ private final View.OnClickListener mCheckBoxListener = (View view) -> {
+ CheckBox checkBox = (CheckBox) view;
+ if (checkBox.isChecked()) {
+ // TODO(b/142530063): Enable shortcut when checkbox is checked.
+ } else {
+ // TODO(b/142530063): Disable shortcut when checkbox is unchecked.
+ }
+ };
private Dialog mDialog;
@@ -159,6 +184,13 @@ public class ToggleScreenMagnificationPreferenceFragment extends
preferenceScreen.addPreference(mConfigWarningPreference);
}
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ initShortcutPreference();
+ return super.onCreateView(inflater, container, savedInstanceState);
+ }
+
@Override
public void onResume() {
super.onResume();
@@ -182,6 +214,12 @@ public class ToggleScreenMagnificationPreferenceFragment extends
mDialog = AccessibilityGestureNavigationTutorial
.showAccessibilityButtonTutorialDialog(getActivity());
break;
+ case DIALOG_ID_EDIT_SHORTCUT:
+ final CharSequence dialogTitle = getActivity().getString(
+ R.string.accessibility_shortcut_edit_dialog_title_magnification);
+ mDialog = AccessibilityEditDialogUtils.showMagnificationEditShortcutDialog(
+ getActivity(), dialogTitle, mDialogListener);
+ break;
default:
throw new IllegalArgumentException();
}
@@ -202,6 +240,9 @@ public class ToggleScreenMagnificationPreferenceFragment extends
return SettingsEnums.DIALOG_TOGGLE_SCREEN_MAGNIFICATION_GESTURE_NAVIGATION;
case DIALOG_ID_ACCESSIBILITY_BUTTON_TUTORIAL:
return SettingsEnums.DIALOG_TOGGLE_SCREEN_MAGNIFICATION_ACCESSIBILITY_BUTTON;
+ case DIALOG_ID_EDIT_SHORTCUT:
+ return SettingsEnums.DIALOG_TOGGLE_SCREEN_MAGNIFICATION_ACCESSIBILITY_BUTTON;
+ // TODO(b/142531156): Create a settings enum to replace it.
default:
return 0;
}
@@ -277,6 +318,21 @@ public class ToggleScreenMagnificationPreferenceFragment extends
}
}
+ private void initShortcutPreference() {
+ final PreferenceScreen preferenceScreen = getPreferenceScreen();
+ final ShortcutPreference shortcutPreference = new ShortcutPreference(
+ preferenceScreen.getContext(), null);
+ // Put the shortcutPreference before videoPreference.
+ shortcutPreference.setOrder(mVideoPreference.getOrder() - 1);
+ shortcutPreference.setTitle(R.string.accessibility_magnification_shortcut_title);
+ // TODO(b/142530063): Check the new setting key to decide which summary should be shown.
+ // TODO(b/142530063): Check if gesture mode is on to decide which summary should be shown.
+ // TODO(b/142530063): Check the new key to decide whether checkbox should be checked.
+ shortcutPreference.setSettingButtonListener(mSettingButtonListener);
+ shortcutPreference.setCheckBoxListener(mCheckBoxListener);
+ preferenceScreen.addPreference(shortcutPreference);
+ }
+
private boolean isGestureNavigateEnabled() {
return getContext().getResources().getInteger(
com.android.internal.R.integer.config_navBarInteractionMode)