Loading core/java/com/android/internal/accessibility/common/ShortcutConstants.java +16 −15 Original line number Original line Diff line number Diff line Loading @@ -55,26 +55,27 @@ public final class ShortcutConstants { } } /** /** * Annotation for different accessibilityService fragment UI type. * Annotation for the different accessibility fragment type. * * * {@code LEGACY} for displaying appearance aligned with sdk version Q accessibility service * {@code VOLUME_SHORTCUT_TOGGLE} for displaying appearance with switch bar and only one * page, but only hardware shortcut allowed and under service in version Q or early. * shortcut option that is volume key shortcut. * {@code INVISIBLE} for displaying appearance without switch bar. * {@code INVISIBLE_TOGGLE} for displaying appearance without switch bar. * {@code INTUITIVE} for displaying appearance with version R accessibility design. * {@code TOGGLE} for displaying appearance with switch bar. * {@code BOUNCE} for displaying appearance with pop-up action. * {@code LAUNCH_ACTIVITY} for displaying appearance with pop-up action that is for launch * activity. */ */ @Retention(RetentionPolicy.SOURCE) @Retention(RetentionPolicy.SOURCE) @IntDef({ @IntDef({ AccessibilityServiceFragmentType.LEGACY, AccessibilityFragmentType.VOLUME_SHORTCUT_TOGGLE, AccessibilityServiceFragmentType.INVISIBLE, AccessibilityFragmentType.INVISIBLE_TOGGLE, AccessibilityServiceFragmentType.INTUITIVE, AccessibilityFragmentType.TOGGLE, AccessibilityServiceFragmentType.BOUNCE, AccessibilityFragmentType.LAUNCH_ACTIVITY, }) }) public @interface AccessibilityServiceFragmentType { public @interface AccessibilityFragmentType { int LEGACY = 0; int VOLUME_SHORTCUT_TOGGLE = 0; int INVISIBLE = 1; int INVISIBLE_TOGGLE = 1; int INTUITIVE = 2; int TOGGLE = 2; int BOUNCE = 3; int LAUNCH_ACTIVITY = 3; } } /** /** Loading core/java/com/android/internal/accessibility/util/AccessibilityUtils.java +6 −6 Original line number Original line Diff line number Diff line Loading @@ -15,7 +15,7 @@ */ */ package com.android.internal.accessibility.util; package com.android.internal.accessibility.util; import static com.android.internal.accessibility.common.ShortcutConstants.AccessibilityServiceFragmentType; import static com.android.internal.accessibility.common.ShortcutConstants.AccessibilityFragmentType; import static com.android.internal.accessibility.common.ShortcutConstants.SERVICES_SEPARATOR; import static com.android.internal.accessibility.common.ShortcutConstants.SERVICES_SEPARATOR; import android.accessibilityservice.AccessibilityServiceInfo; import android.accessibilityservice.AccessibilityServiceInfo; Loading Loading @@ -112,9 +112,9 @@ public final class AccessibilityUtils { * Gets the corresponding fragment type of a given accessibility service. * Gets the corresponding fragment type of a given accessibility service. * * * @param accessibilityServiceInfo The accessibilityService's info. * @param accessibilityServiceInfo The accessibilityService's info. * @return int from {@link AccessibilityServiceFragmentType}. * @return int from {@link AccessibilityFragmentType}. */ */ public static @AccessibilityServiceFragmentType int getAccessibilityServiceFragmentType( public static @AccessibilityFragmentType int getAccessibilityServiceFragmentType( AccessibilityServiceInfo accessibilityServiceInfo) { AccessibilityServiceInfo accessibilityServiceInfo) { final int targetSdk = accessibilityServiceInfo.getResolveInfo() final int targetSdk = accessibilityServiceInfo.getResolveInfo() .serviceInfo.applicationInfo.targetSdkVersion; .serviceInfo.applicationInfo.targetSdkVersion; Loading @@ -122,10 +122,10 @@ public final class AccessibilityUtils { & AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON) != 0; & AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON) != 0; if (targetSdk <= Build.VERSION_CODES.Q) { if (targetSdk <= Build.VERSION_CODES.Q) { return AccessibilityServiceFragmentType.LEGACY; return AccessibilityFragmentType.VOLUME_SHORTCUT_TOGGLE; } } return requestA11yButton return requestA11yButton ? AccessibilityServiceFragmentType.INVISIBLE ? AccessibilityFragmentType.INVISIBLE_TOGGLE : AccessibilityServiceFragmentType.INTUITIVE; : AccessibilityFragmentType.TOGGLE; } } } } core/java/com/android/internal/app/AccessibilityButtonChooserActivity.java +46 −45 Original line number Original line Diff line number Diff line Loading @@ -22,7 +22,7 @@ import static android.view.accessibility.AccessibilityManager.ShortcutType; import static com.android.internal.accessibility.AccessibilityShortcutController.COLOR_INVERSION_COMPONENT_NAME; import static com.android.internal.accessibility.AccessibilityShortcutController.COLOR_INVERSION_COMPONENT_NAME; import static com.android.internal.accessibility.AccessibilityShortcutController.DALTONIZER_COMPONENT_NAME; import static com.android.internal.accessibility.AccessibilityShortcutController.DALTONIZER_COMPONENT_NAME; import static com.android.internal.accessibility.AccessibilityShortcutController.MAGNIFICATION_CONTROLLER_NAME; import static com.android.internal.accessibility.AccessibilityShortcutController.MAGNIFICATION_CONTROLLER_NAME; import static com.android.internal.accessibility.common.ShortcutConstants.AccessibilityServiceFragmentType; import static com.android.internal.accessibility.common.ShortcutConstants.AccessibilityFragmentType; import static com.android.internal.accessibility.common.ShortcutConstants.ShortcutMenuMode; import static com.android.internal.accessibility.common.ShortcutConstants.ShortcutMenuMode; import static com.android.internal.accessibility.common.ShortcutConstants.TargetType; import static com.android.internal.accessibility.common.ShortcutConstants.TargetType; import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType; import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType; Loading Loading @@ -97,21 +97,21 @@ public class AccessibilityButtonChooserActivity extends Activity { COLOR_INVERSION_COMPONENT_NAME.flattenToString(), COLOR_INVERSION_COMPONENT_NAME.flattenToString(), String.valueOf(R.string.color_inversion_feature_name), String.valueOf(R.string.color_inversion_feature_name), String.valueOf(R.drawable.ic_accessibility_color_inversion), String.valueOf(R.drawable.ic_accessibility_color_inversion), String.valueOf(AccessibilityServiceFragmentType.INTUITIVE), String.valueOf(AccessibilityFragmentType.TOGGLE), Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED, Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED, }, }, { { DALTONIZER_COMPONENT_NAME.flattenToString(), DALTONIZER_COMPONENT_NAME.flattenToString(), String.valueOf(R.string.color_correction_feature_name), String.valueOf(R.string.color_correction_feature_name), String.valueOf(R.drawable.ic_accessibility_color_correction), String.valueOf(R.drawable.ic_accessibility_color_correction), String.valueOf(AccessibilityServiceFragmentType.INTUITIVE), String.valueOf(AccessibilityFragmentType.TOGGLE), Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED, Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED, }, }, { { MAGNIFICATION_CONTROLLER_NAME, MAGNIFICATION_CONTROLLER_NAME, String.valueOf(R.string.accessibility_magnification_chooser_text), String.valueOf(R.string.accessibility_magnification_chooser_text), String.valueOf(R.drawable.ic_accessibility_magnification), String.valueOf(R.drawable.ic_accessibility_magnification), String.valueOf(AccessibilityServiceFragmentType.INVISIBLE), String.valueOf(AccessibilityFragmentType.INVISIBLE_TOGGLE), Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED, Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED, }, }, }; }; Loading Loading @@ -381,25 +381,25 @@ public class AccessibilityButtonChooserActivity extends Activity { @NonNull ViewHolder holder, AccessibilityButtonTarget target) { @NonNull ViewHolder holder, AccessibilityButtonTarget target) { switch (target.getFragmentType()) { switch (target.getFragmentType()) { case AccessibilityServiceFragmentType.LEGACY: case AccessibilityFragmentType.VOLUME_SHORTCUT_TOGGLE: updateLegacyActionItemVisibility(holder, target); updateVolumeShortcutToggleTargetActionItemVisibility(holder, target); break; break; case AccessibilityServiceFragmentType.INVISIBLE: case AccessibilityFragmentType.INVISIBLE_TOGGLE: updateInvisibleActionItemVisibility(holder, target); updateInvisibleToggleTargetActionItemVisibility(holder, target); break; break; case AccessibilityServiceFragmentType.INTUITIVE: case AccessibilityFragmentType.TOGGLE: updateIntuitiveActionItemVisibility(context, holder, target); updateToggleTargetActionItemVisibility(context, holder, target); break; break; case AccessibilityServiceFragmentType.BOUNCE: case AccessibilityFragmentType.LAUNCH_ACTIVITY: updateBounceActionItemVisibility(holder, target); updateLaunchActivityTargetActionItemVisibility(holder, target); break; break; default: default: throw new IllegalStateException("Unexpected fragment type"); throw new IllegalStateException("Unexpected fragment type"); } } } } private void updateLegacyActionItemVisibility(@NonNull ViewHolder holder, private void updateVolumeShortcutToggleTargetActionItemVisibility( AccessibilityButtonTarget target) { @NonNull ViewHolder holder, AccessibilityButtonTarget target) { final boolean isLaunchMenuMode = (mShortcutMenuMode == ShortcutMenuMode.LAUNCH); final boolean isLaunchMenuMode = (mShortcutMenuMode == ShortcutMenuMode.LAUNCH); holder.mCheckBox.setChecked(!isLaunchMenuMode && target.isChecked()); holder.mCheckBox.setChecked(!isLaunchMenuMode && target.isChecked()); Loading @@ -409,7 +409,7 @@ public class AccessibilityButtonChooserActivity extends Activity { holder.mSwitchItem.setVisibility(View.GONE); holder.mSwitchItem.setVisibility(View.GONE); } } private void updateInvisibleActionItemVisibility(@NonNull ViewHolder holder, private void updateInvisibleToggleTargetActionItemVisibility(@NonNull ViewHolder holder, AccessibilityButtonTarget target) { AccessibilityButtonTarget target) { final boolean isEditMenuMode = (mShortcutMenuMode == ShortcutMenuMode.EDIT); final boolean isEditMenuMode = (mShortcutMenuMode == ShortcutMenuMode.EDIT); Loading @@ -420,7 +420,7 @@ public class AccessibilityButtonChooserActivity extends Activity { holder.mSwitchItem.setVisibility(View.GONE); holder.mSwitchItem.setVisibility(View.GONE); } } private void updateIntuitiveActionItemVisibility(@NonNull Context context, private void updateToggleTargetActionItemVisibility(@NonNull Context context, @NonNull ViewHolder holder, AccessibilityButtonTarget target) { @NonNull ViewHolder holder, AccessibilityButtonTarget target) { final boolean isEditMenuMode = (mShortcutMenuMode == ShortcutMenuMode.EDIT); final boolean isEditMenuMode = (mShortcutMenuMode == ShortcutMenuMode.EDIT); final boolean isServiceEnabled = isWhiteListingService(target.getId()) final boolean isServiceEnabled = isWhiteListingService(target.getId()) Loading @@ -435,7 +435,7 @@ public class AccessibilityButtonChooserActivity extends Activity { holder.mSwitchItem.setChecked(!isEditMenuMode && isServiceEnabled); holder.mSwitchItem.setChecked(!isEditMenuMode && isServiceEnabled); } } private void updateBounceActionItemVisibility(@NonNull ViewHolder holder, private void updateLaunchActivityTargetActionItemVisibility(@NonNull ViewHolder holder, AccessibilityButtonTarget target) { AccessibilityButtonTarget target) { final boolean isEditMenuMode = (mShortcutMenuMode == ShortcutMenuMode.EDIT); final boolean isEditMenuMode = (mShortcutMenuMode == ShortcutMenuMode.EDIT); Loading @@ -454,7 +454,7 @@ public class AccessibilityButtonChooserActivity extends Activity { private boolean mChecked; private boolean mChecked; private CharSequence mLabel; private CharSequence mLabel; private Drawable mDrawable; private Drawable mDrawable; @AccessibilityServiceFragmentType @AccessibilityFragmentType private int mFragmentType; private int mFragmentType; AccessibilityButtonTarget(@NonNull Context context, AccessibilityButtonTarget(@NonNull Context context, Loading @@ -474,11 +474,11 @@ public class AccessibilityButtonChooserActivity extends Activity { this.mChecked = isTargetShortcutUsed(context, mId); this.mChecked = isTargetShortcutUsed(context, mId); this.mLabel = shortcutInfo.getActivityInfo().loadLabel(context.getPackageManager()); this.mLabel = shortcutInfo.getActivityInfo().loadLabel(context.getPackageManager()); this.mDrawable = shortcutInfo.getActivityInfo().loadIcon(context.getPackageManager()); this.mDrawable = shortcutInfo.getActivityInfo().loadIcon(context.getPackageManager()); this.mFragmentType = AccessibilityServiceFragmentType.BOUNCE; this.mFragmentType = AccessibilityFragmentType.LAUNCH_ACTIVITY; } } AccessibilityButtonTarget(Context context, @NonNull String id, int labelResId, AccessibilityButtonTarget(Context context, @NonNull String id, int labelResId, int iconRes, @AccessibilityServiceFragmentType int fragmentType) { int iconRes, @AccessibilityFragmentType int fragmentType) { this.mId = id; this.mId = id; this.mType = TargetType.WHITE_LISTING; this.mType = TargetType.WHITE_LISTING; this.mChecked = isTargetShortcutUsed(context, mId); this.mChecked = isTargetShortcutUsed(context, mId); Loading Loading @@ -535,17 +535,17 @@ public class AccessibilityButtonChooserActivity extends Activity { private void onTargetSelected(AdapterView<?> parent, View view, int position, long id) { private void onTargetSelected(AdapterView<?> parent, View view, int position, long id) { final AccessibilityButtonTarget target = mTargets.get(position); final AccessibilityButtonTarget target = mTargets.get(position); switch (target.getFragmentType()) { switch (target.getFragmentType()) { case AccessibilityServiceFragmentType.LEGACY: case AccessibilityFragmentType.VOLUME_SHORTCUT_TOGGLE: onLegacyTargetSelected(target); onVolumeShortcutToggleTargetSelected(target); break; break; case AccessibilityServiceFragmentType.INVISIBLE: case AccessibilityFragmentType.INVISIBLE_TOGGLE: onInvisibleTargetSelected(target); onInvisibleToggleTargetSelected(target); break; break; case AccessibilityServiceFragmentType.INTUITIVE: case AccessibilityFragmentType.TOGGLE: onIntuitiveTargetSelected(target); onToggleTargetSelected(target); break; break; case AccessibilityServiceFragmentType.BOUNCE: case AccessibilityFragmentType.LAUNCH_ACTIVITY: onBounceTargetSelected(target); onLaunchActivityTargetSelected(target); break; break; default: default: throw new IllegalStateException("Unexpected fragment type"); throw new IllegalStateException("Unexpected fragment type"); Loading @@ -554,7 +554,7 @@ public class AccessibilityButtonChooserActivity extends Activity { mAlertDialog.dismiss(); mAlertDialog.dismiss(); } } private void onLegacyTargetSelected(AccessibilityButtonTarget target) { private void onVolumeShortcutToggleTargetSelected(AccessibilityButtonTarget target) { if (sShortcutType == ACCESSIBILITY_BUTTON) { if (sShortcutType == ACCESSIBILITY_BUTTON) { final AccessibilityManager ams = getSystemService(AccessibilityManager.class); final AccessibilityManager ams = getSystemService(AccessibilityManager.class); ams.notifyAccessibilityButtonClicked(getDisplayId(), target.getId()); ams.notifyAccessibilityButtonClicked(getDisplayId(), target.getId()); Loading @@ -563,7 +563,7 @@ public class AccessibilityButtonChooserActivity extends Activity { } } } } private void onInvisibleTargetSelected(AccessibilityButtonTarget target) { private void onInvisibleToggleTargetSelected(AccessibilityButtonTarget target) { final AccessibilityManager ams = getSystemService(AccessibilityManager.class); final AccessibilityManager ams = getSystemService(AccessibilityManager.class); if (sShortcutType == ACCESSIBILITY_BUTTON) { if (sShortcutType == ACCESSIBILITY_BUTTON) { ams.notifyAccessibilityButtonClicked(getDisplayId(), target.getId()); ams.notifyAccessibilityButtonClicked(getDisplayId(), target.getId()); Loading @@ -572,11 +572,11 @@ public class AccessibilityButtonChooserActivity extends Activity { } } } } private void onIntuitiveTargetSelected(AccessibilityButtonTarget target) { private void onToggleTargetSelected(AccessibilityButtonTarget target) { switchServiceState(target); switchServiceState(target); } } private void onBounceTargetSelected(AccessibilityButtonTarget target) { private void onLaunchActivityTargetSelected(AccessibilityButtonTarget target) { final AccessibilityManager ams = getSystemService(AccessibilityManager.class); final AccessibilityManager ams = getSystemService(AccessibilityManager.class); if (sShortcutType == ACCESSIBILITY_BUTTON) { if (sShortcutType == ACCESSIBILITY_BUTTON) { ams.notifyAccessibilityButtonClicked(getDisplayId(), target.getId()); ams.notifyAccessibilityButtonClicked(getDisplayId(), target.getId()); Loading Loading @@ -620,24 +620,24 @@ public class AccessibilityButtonChooserActivity extends Activity { private void onTargetChecked(AccessibilityButtonTarget target, boolean checked) { private void onTargetChecked(AccessibilityButtonTarget target, boolean checked) { switch (target.getFragmentType()) { switch (target.getFragmentType()) { case AccessibilityServiceFragmentType.LEGACY: case AccessibilityFragmentType.VOLUME_SHORTCUT_TOGGLE: onLegacyTargetChecked(checked); onVolumeShortcutToggleTargetChecked(checked); break; break; case AccessibilityServiceFragmentType.INVISIBLE: case AccessibilityFragmentType.INVISIBLE_TOGGLE: onInvisibleTargetChecked(checked); onInvisibleToggleTargetChecked(checked); break; break; case AccessibilityServiceFragmentType.INTUITIVE: case AccessibilityFragmentType.TOGGLE: onIntuitiveTargetChecked(checked); onToggleTargetChecked(checked); break; break; case AccessibilityServiceFragmentType.BOUNCE: case AccessibilityFragmentType.LAUNCH_ACTIVITY: onBounceTargetChecked(checked); onLaunchActivityTargetChecked(checked); break; break; default: default: throw new IllegalStateException("Unexpected fragment type"); throw new IllegalStateException("Unexpected fragment type"); } } } } private void onLegacyTargetChecked(boolean checked) { private void onVolumeShortcutToggleTargetChecked(boolean checked) { if (sShortcutType == ACCESSIBILITY_BUTTON) { if (sShortcutType == ACCESSIBILITY_BUTTON) { setServiceEnabled(mCurrentCheckedTarget.getId(), checked); setServiceEnabled(mCurrentCheckedTarget.getId(), checked); if (!checked) { if (!checked) { Loading @@ -657,7 +657,7 @@ public class AccessibilityButtonChooserActivity extends Activity { mTargetAdapter.notifyDataSetChanged(); mTargetAdapter.notifyDataSetChanged(); } } private void onInvisibleTargetChecked(boolean checked) { private void onInvisibleToggleTargetChecked(boolean checked) { final int shortcutTypes = UserShortcutType.SOFTWARE | HARDWARE; final int shortcutTypes = UserShortcutType.SOFTWARE | HARDWARE; if (!hasValuesInSettings(this, shortcutTypes, mCurrentCheckedTarget.getId())) { if (!hasValuesInSettings(this, shortcutTypes, mCurrentCheckedTarget.getId())) { setServiceEnabled(mCurrentCheckedTarget.getId(), checked); setServiceEnabled(mCurrentCheckedTarget.getId(), checked); Loading @@ -668,13 +668,13 @@ public class AccessibilityButtonChooserActivity extends Activity { mTargetAdapter.notifyDataSetChanged(); mTargetAdapter.notifyDataSetChanged(); } } private void onIntuitiveTargetChecked(boolean checked) { private void onToggleTargetChecked(boolean checked) { updateValueToSettings(mCurrentCheckedTarget.getId(), checked); updateValueToSettings(mCurrentCheckedTarget.getId(), checked); mCurrentCheckedTarget.setChecked(checked); mCurrentCheckedTarget.setChecked(checked); mTargetAdapter.notifyDataSetChanged(); mTargetAdapter.notifyDataSetChanged(); } } private void onBounceTargetChecked(boolean checked) { private void onLaunchActivityTargetChecked(boolean checked) { updateValueToSettings(mCurrentCheckedTarget.getId(), checked); updateValueToSettings(mCurrentCheckedTarget.getId(), checked); mCurrentCheckedTarget.setChecked(checked); mCurrentCheckedTarget.setChecked(checked); mTargetAdapter.notifyDataSetChanged(); mTargetAdapter.notifyDataSetChanged(); Loading Loading @@ -740,7 +740,8 @@ public class AccessibilityButtonChooserActivity extends Activity { } } private void onPermissionAllowButtonClicked(View view) { private void onPermissionAllowButtonClicked(View view) { if (mCurrentCheckedTarget.getFragmentType() != AccessibilityServiceFragmentType.LEGACY) { if (mCurrentCheckedTarget.getFragmentType() != AccessibilityFragmentType.VOLUME_SHORTCUT_TOGGLE) { updateValueToSettings(mCurrentCheckedTarget.getId(), /* checked= */ true); updateValueToSettings(mCurrentCheckedTarget.getId(), /* checked= */ true); } } onTargetChecked(mCurrentCheckedTarget, /* checked= */ true); onTargetChecked(mCurrentCheckedTarget, /* checked= */ true); Loading Loading
core/java/com/android/internal/accessibility/common/ShortcutConstants.java +16 −15 Original line number Original line Diff line number Diff line Loading @@ -55,26 +55,27 @@ public final class ShortcutConstants { } } /** /** * Annotation for different accessibilityService fragment UI type. * Annotation for the different accessibility fragment type. * * * {@code LEGACY} for displaying appearance aligned with sdk version Q accessibility service * {@code VOLUME_SHORTCUT_TOGGLE} for displaying appearance with switch bar and only one * page, but only hardware shortcut allowed and under service in version Q or early. * shortcut option that is volume key shortcut. * {@code INVISIBLE} for displaying appearance without switch bar. * {@code INVISIBLE_TOGGLE} for displaying appearance without switch bar. * {@code INTUITIVE} for displaying appearance with version R accessibility design. * {@code TOGGLE} for displaying appearance with switch bar. * {@code BOUNCE} for displaying appearance with pop-up action. * {@code LAUNCH_ACTIVITY} for displaying appearance with pop-up action that is for launch * activity. */ */ @Retention(RetentionPolicy.SOURCE) @Retention(RetentionPolicy.SOURCE) @IntDef({ @IntDef({ AccessibilityServiceFragmentType.LEGACY, AccessibilityFragmentType.VOLUME_SHORTCUT_TOGGLE, AccessibilityServiceFragmentType.INVISIBLE, AccessibilityFragmentType.INVISIBLE_TOGGLE, AccessibilityServiceFragmentType.INTUITIVE, AccessibilityFragmentType.TOGGLE, AccessibilityServiceFragmentType.BOUNCE, AccessibilityFragmentType.LAUNCH_ACTIVITY, }) }) public @interface AccessibilityServiceFragmentType { public @interface AccessibilityFragmentType { int LEGACY = 0; int VOLUME_SHORTCUT_TOGGLE = 0; int INVISIBLE = 1; int INVISIBLE_TOGGLE = 1; int INTUITIVE = 2; int TOGGLE = 2; int BOUNCE = 3; int LAUNCH_ACTIVITY = 3; } } /** /** Loading
core/java/com/android/internal/accessibility/util/AccessibilityUtils.java +6 −6 Original line number Original line Diff line number Diff line Loading @@ -15,7 +15,7 @@ */ */ package com.android.internal.accessibility.util; package com.android.internal.accessibility.util; import static com.android.internal.accessibility.common.ShortcutConstants.AccessibilityServiceFragmentType; import static com.android.internal.accessibility.common.ShortcutConstants.AccessibilityFragmentType; import static com.android.internal.accessibility.common.ShortcutConstants.SERVICES_SEPARATOR; import static com.android.internal.accessibility.common.ShortcutConstants.SERVICES_SEPARATOR; import android.accessibilityservice.AccessibilityServiceInfo; import android.accessibilityservice.AccessibilityServiceInfo; Loading Loading @@ -112,9 +112,9 @@ public final class AccessibilityUtils { * Gets the corresponding fragment type of a given accessibility service. * Gets the corresponding fragment type of a given accessibility service. * * * @param accessibilityServiceInfo The accessibilityService's info. * @param accessibilityServiceInfo The accessibilityService's info. * @return int from {@link AccessibilityServiceFragmentType}. * @return int from {@link AccessibilityFragmentType}. */ */ public static @AccessibilityServiceFragmentType int getAccessibilityServiceFragmentType( public static @AccessibilityFragmentType int getAccessibilityServiceFragmentType( AccessibilityServiceInfo accessibilityServiceInfo) { AccessibilityServiceInfo accessibilityServiceInfo) { final int targetSdk = accessibilityServiceInfo.getResolveInfo() final int targetSdk = accessibilityServiceInfo.getResolveInfo() .serviceInfo.applicationInfo.targetSdkVersion; .serviceInfo.applicationInfo.targetSdkVersion; Loading @@ -122,10 +122,10 @@ public final class AccessibilityUtils { & AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON) != 0; & AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON) != 0; if (targetSdk <= Build.VERSION_CODES.Q) { if (targetSdk <= Build.VERSION_CODES.Q) { return AccessibilityServiceFragmentType.LEGACY; return AccessibilityFragmentType.VOLUME_SHORTCUT_TOGGLE; } } return requestA11yButton return requestA11yButton ? AccessibilityServiceFragmentType.INVISIBLE ? AccessibilityFragmentType.INVISIBLE_TOGGLE : AccessibilityServiceFragmentType.INTUITIVE; : AccessibilityFragmentType.TOGGLE; } } } }
core/java/com/android/internal/app/AccessibilityButtonChooserActivity.java +46 −45 Original line number Original line Diff line number Diff line Loading @@ -22,7 +22,7 @@ import static android.view.accessibility.AccessibilityManager.ShortcutType; import static com.android.internal.accessibility.AccessibilityShortcutController.COLOR_INVERSION_COMPONENT_NAME; import static com.android.internal.accessibility.AccessibilityShortcutController.COLOR_INVERSION_COMPONENT_NAME; import static com.android.internal.accessibility.AccessibilityShortcutController.DALTONIZER_COMPONENT_NAME; import static com.android.internal.accessibility.AccessibilityShortcutController.DALTONIZER_COMPONENT_NAME; import static com.android.internal.accessibility.AccessibilityShortcutController.MAGNIFICATION_CONTROLLER_NAME; import static com.android.internal.accessibility.AccessibilityShortcutController.MAGNIFICATION_CONTROLLER_NAME; import static com.android.internal.accessibility.common.ShortcutConstants.AccessibilityServiceFragmentType; import static com.android.internal.accessibility.common.ShortcutConstants.AccessibilityFragmentType; import static com.android.internal.accessibility.common.ShortcutConstants.ShortcutMenuMode; import static com.android.internal.accessibility.common.ShortcutConstants.ShortcutMenuMode; import static com.android.internal.accessibility.common.ShortcutConstants.TargetType; import static com.android.internal.accessibility.common.ShortcutConstants.TargetType; import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType; import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType; Loading Loading @@ -97,21 +97,21 @@ public class AccessibilityButtonChooserActivity extends Activity { COLOR_INVERSION_COMPONENT_NAME.flattenToString(), COLOR_INVERSION_COMPONENT_NAME.flattenToString(), String.valueOf(R.string.color_inversion_feature_name), String.valueOf(R.string.color_inversion_feature_name), String.valueOf(R.drawable.ic_accessibility_color_inversion), String.valueOf(R.drawable.ic_accessibility_color_inversion), String.valueOf(AccessibilityServiceFragmentType.INTUITIVE), String.valueOf(AccessibilityFragmentType.TOGGLE), Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED, Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED, }, }, { { DALTONIZER_COMPONENT_NAME.flattenToString(), DALTONIZER_COMPONENT_NAME.flattenToString(), String.valueOf(R.string.color_correction_feature_name), String.valueOf(R.string.color_correction_feature_name), String.valueOf(R.drawable.ic_accessibility_color_correction), String.valueOf(R.drawable.ic_accessibility_color_correction), String.valueOf(AccessibilityServiceFragmentType.INTUITIVE), String.valueOf(AccessibilityFragmentType.TOGGLE), Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED, Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED, }, }, { { MAGNIFICATION_CONTROLLER_NAME, MAGNIFICATION_CONTROLLER_NAME, String.valueOf(R.string.accessibility_magnification_chooser_text), String.valueOf(R.string.accessibility_magnification_chooser_text), String.valueOf(R.drawable.ic_accessibility_magnification), String.valueOf(R.drawable.ic_accessibility_magnification), String.valueOf(AccessibilityServiceFragmentType.INVISIBLE), String.valueOf(AccessibilityFragmentType.INVISIBLE_TOGGLE), Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED, Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED, }, }, }; }; Loading Loading @@ -381,25 +381,25 @@ public class AccessibilityButtonChooserActivity extends Activity { @NonNull ViewHolder holder, AccessibilityButtonTarget target) { @NonNull ViewHolder holder, AccessibilityButtonTarget target) { switch (target.getFragmentType()) { switch (target.getFragmentType()) { case AccessibilityServiceFragmentType.LEGACY: case AccessibilityFragmentType.VOLUME_SHORTCUT_TOGGLE: updateLegacyActionItemVisibility(holder, target); updateVolumeShortcutToggleTargetActionItemVisibility(holder, target); break; break; case AccessibilityServiceFragmentType.INVISIBLE: case AccessibilityFragmentType.INVISIBLE_TOGGLE: updateInvisibleActionItemVisibility(holder, target); updateInvisibleToggleTargetActionItemVisibility(holder, target); break; break; case AccessibilityServiceFragmentType.INTUITIVE: case AccessibilityFragmentType.TOGGLE: updateIntuitiveActionItemVisibility(context, holder, target); updateToggleTargetActionItemVisibility(context, holder, target); break; break; case AccessibilityServiceFragmentType.BOUNCE: case AccessibilityFragmentType.LAUNCH_ACTIVITY: updateBounceActionItemVisibility(holder, target); updateLaunchActivityTargetActionItemVisibility(holder, target); break; break; default: default: throw new IllegalStateException("Unexpected fragment type"); throw new IllegalStateException("Unexpected fragment type"); } } } } private void updateLegacyActionItemVisibility(@NonNull ViewHolder holder, private void updateVolumeShortcutToggleTargetActionItemVisibility( AccessibilityButtonTarget target) { @NonNull ViewHolder holder, AccessibilityButtonTarget target) { final boolean isLaunchMenuMode = (mShortcutMenuMode == ShortcutMenuMode.LAUNCH); final boolean isLaunchMenuMode = (mShortcutMenuMode == ShortcutMenuMode.LAUNCH); holder.mCheckBox.setChecked(!isLaunchMenuMode && target.isChecked()); holder.mCheckBox.setChecked(!isLaunchMenuMode && target.isChecked()); Loading @@ -409,7 +409,7 @@ public class AccessibilityButtonChooserActivity extends Activity { holder.mSwitchItem.setVisibility(View.GONE); holder.mSwitchItem.setVisibility(View.GONE); } } private void updateInvisibleActionItemVisibility(@NonNull ViewHolder holder, private void updateInvisibleToggleTargetActionItemVisibility(@NonNull ViewHolder holder, AccessibilityButtonTarget target) { AccessibilityButtonTarget target) { final boolean isEditMenuMode = (mShortcutMenuMode == ShortcutMenuMode.EDIT); final boolean isEditMenuMode = (mShortcutMenuMode == ShortcutMenuMode.EDIT); Loading @@ -420,7 +420,7 @@ public class AccessibilityButtonChooserActivity extends Activity { holder.mSwitchItem.setVisibility(View.GONE); holder.mSwitchItem.setVisibility(View.GONE); } } private void updateIntuitiveActionItemVisibility(@NonNull Context context, private void updateToggleTargetActionItemVisibility(@NonNull Context context, @NonNull ViewHolder holder, AccessibilityButtonTarget target) { @NonNull ViewHolder holder, AccessibilityButtonTarget target) { final boolean isEditMenuMode = (mShortcutMenuMode == ShortcutMenuMode.EDIT); final boolean isEditMenuMode = (mShortcutMenuMode == ShortcutMenuMode.EDIT); final boolean isServiceEnabled = isWhiteListingService(target.getId()) final boolean isServiceEnabled = isWhiteListingService(target.getId()) Loading @@ -435,7 +435,7 @@ public class AccessibilityButtonChooserActivity extends Activity { holder.mSwitchItem.setChecked(!isEditMenuMode && isServiceEnabled); holder.mSwitchItem.setChecked(!isEditMenuMode && isServiceEnabled); } } private void updateBounceActionItemVisibility(@NonNull ViewHolder holder, private void updateLaunchActivityTargetActionItemVisibility(@NonNull ViewHolder holder, AccessibilityButtonTarget target) { AccessibilityButtonTarget target) { final boolean isEditMenuMode = (mShortcutMenuMode == ShortcutMenuMode.EDIT); final boolean isEditMenuMode = (mShortcutMenuMode == ShortcutMenuMode.EDIT); Loading @@ -454,7 +454,7 @@ public class AccessibilityButtonChooserActivity extends Activity { private boolean mChecked; private boolean mChecked; private CharSequence mLabel; private CharSequence mLabel; private Drawable mDrawable; private Drawable mDrawable; @AccessibilityServiceFragmentType @AccessibilityFragmentType private int mFragmentType; private int mFragmentType; AccessibilityButtonTarget(@NonNull Context context, AccessibilityButtonTarget(@NonNull Context context, Loading @@ -474,11 +474,11 @@ public class AccessibilityButtonChooserActivity extends Activity { this.mChecked = isTargetShortcutUsed(context, mId); this.mChecked = isTargetShortcutUsed(context, mId); this.mLabel = shortcutInfo.getActivityInfo().loadLabel(context.getPackageManager()); this.mLabel = shortcutInfo.getActivityInfo().loadLabel(context.getPackageManager()); this.mDrawable = shortcutInfo.getActivityInfo().loadIcon(context.getPackageManager()); this.mDrawable = shortcutInfo.getActivityInfo().loadIcon(context.getPackageManager()); this.mFragmentType = AccessibilityServiceFragmentType.BOUNCE; this.mFragmentType = AccessibilityFragmentType.LAUNCH_ACTIVITY; } } AccessibilityButtonTarget(Context context, @NonNull String id, int labelResId, AccessibilityButtonTarget(Context context, @NonNull String id, int labelResId, int iconRes, @AccessibilityServiceFragmentType int fragmentType) { int iconRes, @AccessibilityFragmentType int fragmentType) { this.mId = id; this.mId = id; this.mType = TargetType.WHITE_LISTING; this.mType = TargetType.WHITE_LISTING; this.mChecked = isTargetShortcutUsed(context, mId); this.mChecked = isTargetShortcutUsed(context, mId); Loading Loading @@ -535,17 +535,17 @@ public class AccessibilityButtonChooserActivity extends Activity { private void onTargetSelected(AdapterView<?> parent, View view, int position, long id) { private void onTargetSelected(AdapterView<?> parent, View view, int position, long id) { final AccessibilityButtonTarget target = mTargets.get(position); final AccessibilityButtonTarget target = mTargets.get(position); switch (target.getFragmentType()) { switch (target.getFragmentType()) { case AccessibilityServiceFragmentType.LEGACY: case AccessibilityFragmentType.VOLUME_SHORTCUT_TOGGLE: onLegacyTargetSelected(target); onVolumeShortcutToggleTargetSelected(target); break; break; case AccessibilityServiceFragmentType.INVISIBLE: case AccessibilityFragmentType.INVISIBLE_TOGGLE: onInvisibleTargetSelected(target); onInvisibleToggleTargetSelected(target); break; break; case AccessibilityServiceFragmentType.INTUITIVE: case AccessibilityFragmentType.TOGGLE: onIntuitiveTargetSelected(target); onToggleTargetSelected(target); break; break; case AccessibilityServiceFragmentType.BOUNCE: case AccessibilityFragmentType.LAUNCH_ACTIVITY: onBounceTargetSelected(target); onLaunchActivityTargetSelected(target); break; break; default: default: throw new IllegalStateException("Unexpected fragment type"); throw new IllegalStateException("Unexpected fragment type"); Loading @@ -554,7 +554,7 @@ public class AccessibilityButtonChooserActivity extends Activity { mAlertDialog.dismiss(); mAlertDialog.dismiss(); } } private void onLegacyTargetSelected(AccessibilityButtonTarget target) { private void onVolumeShortcutToggleTargetSelected(AccessibilityButtonTarget target) { if (sShortcutType == ACCESSIBILITY_BUTTON) { if (sShortcutType == ACCESSIBILITY_BUTTON) { final AccessibilityManager ams = getSystemService(AccessibilityManager.class); final AccessibilityManager ams = getSystemService(AccessibilityManager.class); ams.notifyAccessibilityButtonClicked(getDisplayId(), target.getId()); ams.notifyAccessibilityButtonClicked(getDisplayId(), target.getId()); Loading @@ -563,7 +563,7 @@ public class AccessibilityButtonChooserActivity extends Activity { } } } } private void onInvisibleTargetSelected(AccessibilityButtonTarget target) { private void onInvisibleToggleTargetSelected(AccessibilityButtonTarget target) { final AccessibilityManager ams = getSystemService(AccessibilityManager.class); final AccessibilityManager ams = getSystemService(AccessibilityManager.class); if (sShortcutType == ACCESSIBILITY_BUTTON) { if (sShortcutType == ACCESSIBILITY_BUTTON) { ams.notifyAccessibilityButtonClicked(getDisplayId(), target.getId()); ams.notifyAccessibilityButtonClicked(getDisplayId(), target.getId()); Loading @@ -572,11 +572,11 @@ public class AccessibilityButtonChooserActivity extends Activity { } } } } private void onIntuitiveTargetSelected(AccessibilityButtonTarget target) { private void onToggleTargetSelected(AccessibilityButtonTarget target) { switchServiceState(target); switchServiceState(target); } } private void onBounceTargetSelected(AccessibilityButtonTarget target) { private void onLaunchActivityTargetSelected(AccessibilityButtonTarget target) { final AccessibilityManager ams = getSystemService(AccessibilityManager.class); final AccessibilityManager ams = getSystemService(AccessibilityManager.class); if (sShortcutType == ACCESSIBILITY_BUTTON) { if (sShortcutType == ACCESSIBILITY_BUTTON) { ams.notifyAccessibilityButtonClicked(getDisplayId(), target.getId()); ams.notifyAccessibilityButtonClicked(getDisplayId(), target.getId()); Loading Loading @@ -620,24 +620,24 @@ public class AccessibilityButtonChooserActivity extends Activity { private void onTargetChecked(AccessibilityButtonTarget target, boolean checked) { private void onTargetChecked(AccessibilityButtonTarget target, boolean checked) { switch (target.getFragmentType()) { switch (target.getFragmentType()) { case AccessibilityServiceFragmentType.LEGACY: case AccessibilityFragmentType.VOLUME_SHORTCUT_TOGGLE: onLegacyTargetChecked(checked); onVolumeShortcutToggleTargetChecked(checked); break; break; case AccessibilityServiceFragmentType.INVISIBLE: case AccessibilityFragmentType.INVISIBLE_TOGGLE: onInvisibleTargetChecked(checked); onInvisibleToggleTargetChecked(checked); break; break; case AccessibilityServiceFragmentType.INTUITIVE: case AccessibilityFragmentType.TOGGLE: onIntuitiveTargetChecked(checked); onToggleTargetChecked(checked); break; break; case AccessibilityServiceFragmentType.BOUNCE: case AccessibilityFragmentType.LAUNCH_ACTIVITY: onBounceTargetChecked(checked); onLaunchActivityTargetChecked(checked); break; break; default: default: throw new IllegalStateException("Unexpected fragment type"); throw new IllegalStateException("Unexpected fragment type"); } } } } private void onLegacyTargetChecked(boolean checked) { private void onVolumeShortcutToggleTargetChecked(boolean checked) { if (sShortcutType == ACCESSIBILITY_BUTTON) { if (sShortcutType == ACCESSIBILITY_BUTTON) { setServiceEnabled(mCurrentCheckedTarget.getId(), checked); setServiceEnabled(mCurrentCheckedTarget.getId(), checked); if (!checked) { if (!checked) { Loading @@ -657,7 +657,7 @@ public class AccessibilityButtonChooserActivity extends Activity { mTargetAdapter.notifyDataSetChanged(); mTargetAdapter.notifyDataSetChanged(); } } private void onInvisibleTargetChecked(boolean checked) { private void onInvisibleToggleTargetChecked(boolean checked) { final int shortcutTypes = UserShortcutType.SOFTWARE | HARDWARE; final int shortcutTypes = UserShortcutType.SOFTWARE | HARDWARE; if (!hasValuesInSettings(this, shortcutTypes, mCurrentCheckedTarget.getId())) { if (!hasValuesInSettings(this, shortcutTypes, mCurrentCheckedTarget.getId())) { setServiceEnabled(mCurrentCheckedTarget.getId(), checked); setServiceEnabled(mCurrentCheckedTarget.getId(), checked); Loading @@ -668,13 +668,13 @@ public class AccessibilityButtonChooserActivity extends Activity { mTargetAdapter.notifyDataSetChanged(); mTargetAdapter.notifyDataSetChanged(); } } private void onIntuitiveTargetChecked(boolean checked) { private void onToggleTargetChecked(boolean checked) { updateValueToSettings(mCurrentCheckedTarget.getId(), checked); updateValueToSettings(mCurrentCheckedTarget.getId(), checked); mCurrentCheckedTarget.setChecked(checked); mCurrentCheckedTarget.setChecked(checked); mTargetAdapter.notifyDataSetChanged(); mTargetAdapter.notifyDataSetChanged(); } } private void onBounceTargetChecked(boolean checked) { private void onLaunchActivityTargetChecked(boolean checked) { updateValueToSettings(mCurrentCheckedTarget.getId(), checked); updateValueToSettings(mCurrentCheckedTarget.getId(), checked); mCurrentCheckedTarget.setChecked(checked); mCurrentCheckedTarget.setChecked(checked); mTargetAdapter.notifyDataSetChanged(); mTargetAdapter.notifyDataSetChanged(); Loading Loading @@ -740,7 +740,8 @@ public class AccessibilityButtonChooserActivity extends Activity { } } private void onPermissionAllowButtonClicked(View view) { private void onPermissionAllowButtonClicked(View view) { if (mCurrentCheckedTarget.getFragmentType() != AccessibilityServiceFragmentType.LEGACY) { if (mCurrentCheckedTarget.getFragmentType() != AccessibilityFragmentType.VOLUME_SHORTCUT_TOGGLE) { updateValueToSettings(mCurrentCheckedTarget.getId(), /* checked= */ true); updateValueToSettings(mCurrentCheckedTarget.getId(), /* checked= */ true); } } onTargetChecked(mCurrentCheckedTarget, /* checked= */ true); onTargetChecked(mCurrentCheckedTarget, /* checked= */ true); Loading