A11y shortcut settings enhancement

Adding shortcut on/off switch, improving the service picker,
and adding a switch to enable the shortcut on the lock screen.

Also adjusted setting search code to avoid indexing the
accessibility shortcut aside from the main accessibility settings
page.

Bug: 35872328
Bug: 35219988
Test: Ran in a variety of conditions, ran existing settings test.
Also added basic robo test, verified existing robo tests pass.
Change-Id: I4da9bad74caf96d9c8f3640e7db5417b4ee5d602
This commit is contained in:
Phil Weaver
2017-03-16 14:52:31 -07:00
parent d3505c76cd
commit 296b7263ad
11 changed files with 482 additions and 119 deletions

View File

@@ -20,6 +20,7 @@ import android.app.AppGlobals;
import android.content.ComponentName;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.ComponentInfo;
import android.content.pm.PackageItemInfo;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
@@ -76,16 +77,15 @@ public class DefaultAppInfo extends RadioButtonPickerFragment.CandidateInfo {
public CharSequence loadLabel() {
if (componentName != null) {
try {
final ActivityInfo actInfo = AppGlobals.getPackageManager().getActivityInfo(
componentName, 0, userId);
if (actInfo != null) {
return actInfo.loadLabel(mPm.getPackageManager());
final ComponentInfo componentInfo = getComponentInfo();
if (componentInfo != null) {
return componentInfo.loadLabel(mPm.getPackageManager());
} else {
final ApplicationInfo appInfo = mPm.getApplicationInfoAsUser(
componentName.getPackageName(), 0, userId);
return appInfo.loadLabel(mPm.getPackageManager());
}
} catch (RemoteException | PackageManager.NameNotFoundException e) {
} catch (PackageManager.NameNotFoundException e) {
return null;
}
} else if (packageItemInfo != null) {
@@ -100,16 +100,15 @@ public class DefaultAppInfo extends RadioButtonPickerFragment.CandidateInfo {
public Drawable loadIcon() {
if (componentName != null) {
try {
final ActivityInfo actInfo = AppGlobals.getPackageManager().getActivityInfo(
componentName, 0, userId);
if (actInfo != null) {
return actInfo.loadIcon(mPm.getPackageManager());
final ComponentInfo componentInfo = getComponentInfo();
if (componentInfo != null) {
return componentInfo.loadIcon(mPm.getPackageManager());
} else {
final ApplicationInfo appInfo = mPm.getApplicationInfoAsUser(
componentName.getPackageName(), 0, userId);
return appInfo.loadIcon(mPm.getPackageManager());
}
} catch (RemoteException | PackageManager.NameNotFoundException e) {
} catch (PackageManager.NameNotFoundException e) {
return null;
}
}
@@ -130,4 +129,18 @@ public class DefaultAppInfo extends RadioButtonPickerFragment.CandidateInfo {
return null;
}
}
private ComponentInfo getComponentInfo() {
try {
ComponentInfo componentInfo = AppGlobals.getPackageManager().getActivityInfo(
componentName, 0, userId);
if (componentInfo == null) {
componentInfo = AppGlobals.getPackageManager().getServiceInfo(
componentName, 0, userId);
}
return componentInfo;
} catch (RemoteException e) {
return null;
}
}
}