Merge "Implement and add the bounce fragment type into shortcut menu."
This commit is contained in:
@@ -30,10 +30,12 @@ import static com.android.internal.app.AccessibilityButtonChooserActivity.WhiteL
|
||||
import static com.android.internal.util.Preconditions.checkArgument;
|
||||
|
||||
import android.accessibilityservice.AccessibilityServiceInfo;
|
||||
import android.accessibilityservice.AccessibilityShortcutInfo;
|
||||
import android.annotation.IntDef;
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
import android.app.Activity;
|
||||
import android.app.ActivityManager;
|
||||
import android.app.AlertDialog;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
@@ -265,6 +267,7 @@ public class AccessibilityButtonChooserActivity extends Activity {
|
||||
@ShortcutType int shortcutType) {
|
||||
final List<AccessibilityButtonTarget> targets = new ArrayList<>();
|
||||
targets.addAll(getAccessibilityServiceTargets(context));
|
||||
targets.addAll(getAccessibilityActivityTargets(context));
|
||||
targets.addAll(getWhiteListingServiceTargets(context));
|
||||
|
||||
final AccessibilityManager ams = context.getSystemService(AccessibilityManager.class);
|
||||
@@ -291,6 +294,24 @@ public class AccessibilityButtonChooserActivity extends Activity {
|
||||
return targets;
|
||||
}
|
||||
|
||||
private static List<AccessibilityButtonTarget> getAccessibilityActivityTargets(
|
||||
@NonNull Context context) {
|
||||
final AccessibilityManager ams = context.getSystemService(AccessibilityManager.class);
|
||||
final List<AccessibilityShortcutInfo> installedServices =
|
||||
ams.getInstalledAccessibilityShortcutListAsUser(context,
|
||||
ActivityManager.getCurrentUser());
|
||||
if (installedServices == null) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
final List<AccessibilityButtonTarget> targets = new ArrayList<>(installedServices.size());
|
||||
for (AccessibilityShortcutInfo info : installedServices) {
|
||||
targets.add(new AccessibilityButtonTarget(context, info));
|
||||
}
|
||||
|
||||
return targets;
|
||||
}
|
||||
|
||||
private static List<AccessibilityButtonTarget> getWhiteListingServiceTargets(
|
||||
@NonNull Context context) {
|
||||
final List<AccessibilityButtonTarget> targets = new ArrayList<>();
|
||||
@@ -540,6 +561,14 @@ public class AccessibilityButtonChooserActivity extends Activity {
|
||||
this.mFragmentType = getAccessibilityServiceFragmentType(serviceInfo);
|
||||
}
|
||||
|
||||
AccessibilityButtonTarget(@NonNull Context context,
|
||||
@NonNull AccessibilityShortcutInfo shortcutInfo) {
|
||||
this.mId = shortcutInfo.getComponentName().flattenToString();
|
||||
this.mLabel = shortcutInfo.getActivityInfo().loadLabel(context.getPackageManager());
|
||||
this.mDrawable = shortcutInfo.getActivityInfo().loadIcon(context.getPackageManager());
|
||||
this.mFragmentType = AccessibilityServiceFragmentType.BOUNCE;
|
||||
}
|
||||
|
||||
AccessibilityButtonTarget(Context context, @NonNull String id, int labelResId,
|
||||
int iconRes, @AccessibilityServiceFragmentType int fragmentType) {
|
||||
this.mId = id;
|
||||
@@ -594,7 +623,7 @@ public class AccessibilityButtonChooserActivity extends Activity {
|
||||
onIntuitiveTargetSelected(target);
|
||||
break;
|
||||
case AccessibilityServiceFragmentType.BOUNCE:
|
||||
// Do nothing
|
||||
onBounceTargetSelected(target);
|
||||
break;
|
||||
default:
|
||||
throw new IllegalStateException("Unexpected fragment type");
|
||||
@@ -625,6 +654,15 @@ public class AccessibilityButtonChooserActivity extends Activity {
|
||||
switchServiceState(target);
|
||||
}
|
||||
|
||||
private void onBounceTargetSelected(AccessibilityButtonTarget target) {
|
||||
final AccessibilityManager ams = getSystemService(AccessibilityManager.class);
|
||||
if (mShortcutType == ACCESSIBILITY_BUTTON) {
|
||||
ams.notifyAccessibilityButtonClicked(getDisplayId(), target.getId());
|
||||
} else if (mShortcutType == ACCESSIBILITY_SHORTCUT_KEY) {
|
||||
ams.performAccessibilityShortcut(target.getId());
|
||||
}
|
||||
}
|
||||
|
||||
private void switchServiceState(AccessibilityButtonTarget target) {
|
||||
final ComponentName componentName =
|
||||
ComponentName.unflattenFromString(target.getId());
|
||||
@@ -656,7 +694,7 @@ public class AccessibilityButtonChooserActivity extends Activity {
|
||||
onIntuitiveTargetDeleted(position, componentId);
|
||||
break;
|
||||
case AccessibilityServiceFragmentType.BOUNCE:
|
||||
// Do nothing
|
||||
onBounceTargetDeleted(position, componentId);
|
||||
break;
|
||||
default:
|
||||
throw new IllegalStateException("Unexpected fragment type");
|
||||
@@ -694,6 +732,12 @@ public class AccessibilityButtonChooserActivity extends Activity {
|
||||
mTargetAdapter.notifyDataSetChanged();
|
||||
}
|
||||
|
||||
private void onBounceTargetDeleted(int position, String componentId) {
|
||||
optOutValueFromSettings(this, mShortcutUserType, componentId);
|
||||
mTargets.remove(position);
|
||||
mTargetAdapter.notifyDataSetChanged();
|
||||
}
|
||||
|
||||
private void onCancelButtonClicked() {
|
||||
mTargetAdapter.setShortcutMenuMode(ShortcutMenuMode.LAUNCH);
|
||||
mTargetAdapter.notifyDataSetChanged();
|
||||
|
||||
Reference in New Issue
Block a user