Merge "Support accessibility shorcut secondary action (3/n)"

This commit is contained in:
Kevin Chang
2019-12-18 03:17:34 +00:00
committed by Android (Google) Code Review
10 changed files with 226 additions and 10 deletions

View File

@@ -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) {

View File

@@ -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());
}
}

View File

@@ -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<AbstractPreferenceController> sControllers = new ArrayList<>();
private static List<AbstractPreferenceController> 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);
}
}

View File

@@ -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)