Merge "Implement and add the bounce fragment type into shortcut menu."

This commit is contained in:
PETER LIANG
2020-02-12 01:30:59 +00:00
committed by Android (Google) Code Review

View File

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