Accessibility settings refresh.
Categories were added to accessibility service info objects so that they can be grouped in system Settings. Services can declare a category in their accessibility manifest file, and if no category is defined, the service is placed under the "Other services" category. Bug: 30374533 Test: Manually tested with BrailleBack & CTS tests modified to validate proper loading of summary. Change-Id: I8718556764f2be4a18ce4e80e6bbd4950a41e387
This commit is contained in:
@@ -69,10 +69,10 @@ import static android.content.pm.PackageManager.FEATURE_FINGERPRINT;
|
||||
* @attr ref android.R.styleable#AccessibilityService_canRequestTouchExplorationMode
|
||||
* @attr ref android.R.styleable#AccessibilityService_canRetrieveWindowContent
|
||||
* @attr ref android.R.styleable#AccessibilityService_description
|
||||
* @attr ref android.R.styleable#AccessibilityService_summary
|
||||
* @attr ref android.R.styleable#AccessibilityService_notificationTimeout
|
||||
* @attr ref android.R.styleable#AccessibilityService_packageNames
|
||||
* @attr ref android.R.styleable#AccessibilityService_settingsActivity
|
||||
*
|
||||
* @see AccessibilityService
|
||||
* @see android.view.accessibility.AccessibilityEvent
|
||||
* @see android.view.accessibility.AccessibilityManager
|
||||
@@ -430,6 +430,16 @@ public class AccessibilityServiceInfo implements Parcelable {
|
||||
*/
|
||||
private int mCapabilities;
|
||||
|
||||
/**
|
||||
* Resource id of the summary of the accessibility service.
|
||||
*/
|
||||
private int mSummaryResId;
|
||||
|
||||
/**
|
||||
* Non-localized summary of the accessibility service.
|
||||
*/
|
||||
private String mNonLocalizedSummary;
|
||||
|
||||
/**
|
||||
* Resource id of the description of the accessibility service.
|
||||
*/
|
||||
@@ -544,6 +554,15 @@ public class AccessibilityServiceInfo implements Parcelable {
|
||||
mNonLocalizedDescription = nonLocalizedDescription.toString().trim();
|
||||
}
|
||||
}
|
||||
peekedValue = asAttributes.peekValue(
|
||||
com.android.internal.R.styleable.AccessibilityService_summary);
|
||||
if (peekedValue != null) {
|
||||
mSummaryResId = peekedValue.resourceId;
|
||||
CharSequence nonLocalizedSummary = peekedValue.coerceToString();
|
||||
if (nonLocalizedSummary != null) {
|
||||
mNonLocalizedSummary = nonLocalizedSummary.toString().trim();
|
||||
}
|
||||
}
|
||||
asAttributes.recycle();
|
||||
} catch (NameNotFoundException e) {
|
||||
throw new XmlPullParserException( "Unable to create context for: "
|
||||
@@ -668,6 +687,27 @@ public class AccessibilityServiceInfo implements Parcelable {
|
||||
mCapabilities = capabilities;
|
||||
}
|
||||
|
||||
/**
|
||||
* The localized summary of the accessibility service.
|
||||
* <p>
|
||||
* <strong>Statically set from
|
||||
* {@link AccessibilityService#SERVICE_META_DATA meta-data}.</strong>
|
||||
* </p>
|
||||
* @return The localized summary.
|
||||
*/
|
||||
public String loadSummary(PackageManager packageManager) {
|
||||
if (mSummaryResId == 0) {
|
||||
return mNonLocalizedSummary;
|
||||
}
|
||||
ServiceInfo serviceInfo = mResolveInfo.serviceInfo;
|
||||
CharSequence summary = packageManager.getText(serviceInfo.packageName,
|
||||
mSummaryResId, serviceInfo.applicationInfo);
|
||||
if (summary != null) {
|
||||
return summary.toString().trim();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the non-localized description of the accessibility service.
|
||||
* <p>
|
||||
@@ -726,6 +766,8 @@ public class AccessibilityServiceInfo implements Parcelable {
|
||||
parcel.writeParcelable(mResolveInfo, 0);
|
||||
parcel.writeString(mSettingsActivityName);
|
||||
parcel.writeInt(mCapabilities);
|
||||
parcel.writeInt(mSummaryResId);
|
||||
parcel.writeString(mNonLocalizedSummary);
|
||||
parcel.writeInt(mDescriptionResId);
|
||||
parcel.writeString(mNonLocalizedDescription);
|
||||
}
|
||||
@@ -740,6 +782,8 @@ public class AccessibilityServiceInfo implements Parcelable {
|
||||
mResolveInfo = parcel.readParcelable(null);
|
||||
mSettingsActivityName = parcel.readString();
|
||||
mCapabilities = parcel.readInt();
|
||||
mSummaryResId = parcel.readInt();
|
||||
mNonLocalizedSummary = parcel.readString();
|
||||
mDescriptionResId = parcel.readInt();
|
||||
mNonLocalizedDescription = parcel.readString();
|
||||
}
|
||||
@@ -790,6 +834,8 @@ public class AccessibilityServiceInfo implements Parcelable {
|
||||
stringBuilder.append(", ");
|
||||
stringBuilder.append("settingsActivityName: ").append(mSettingsActivityName);
|
||||
stringBuilder.append(", ");
|
||||
stringBuilder.append("summary: ").append(mNonLocalizedSummary);
|
||||
stringBuilder.append(", ");
|
||||
appendCapabilities(stringBuilder, mCapabilities);
|
||||
return stringBuilder.toString();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user