summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Svetoslav Ganov <svetoslavganov@google.com> 2012-01-03 16:38:46 -0800
committer Svetoslav Ganov <svetoslavganov@google.com> 2012-01-03 17:05:38 -0800
commit3d0edd31d8082b7b8b2cdee5efda216179f677b5 (patch)
treeb8071361f497ce57dd5a9e1ff575b2ad3fea0da4
parentc2fc52dc9ce8728bcd1c2b4d82ee573fa7f5049b (diff)
AccessibilityService description not internationalized.
1. AccessibilityServiceInfo loading the description string on creation and using this value. Hence, changing the locale results in reporting incorrectly localized string. Added a new loadDescription method to return the localized version. 2. Deprecated the old method. bug:5807616 Change-Id: Id82bda3c6a90fa6681b035d20da0b8688ed68da3
-rw-r--r--api/current.txt3
-rw-r--r--core/java/android/accessibilityservice/AccessibilityServiceInfo.java52
2 files changed, 47 insertions, 8 deletions
diff --git a/api/current.txt b/api/current.txt
index 96108531c323..13e0c4899db0 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -1992,10 +1992,11 @@ package android.accessibilityservice {
method public static java.lang.String feedbackTypeToString(int);
method public static java.lang.String flagToString(int);
method public boolean getCanRetrieveWindowContent();
- method public java.lang.String getDescription();
+ method public deprecated java.lang.String getDescription();
method public java.lang.String getId();
method public android.content.pm.ResolveInfo getResolveInfo();
method public java.lang.String getSettingsActivityName();
+ method public java.lang.String loadDescription(android.content.pm.PackageManager);
method public void writeToParcel(android.os.Parcel, int);
field public static final android.os.Parcelable.Creator CREATOR;
field public static final int DEFAULT = 1; // 0x1
diff --git a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java
index e5a5e986e704..eae0a4c1bec8 100644
--- a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java
+++ b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java
@@ -28,6 +28,7 @@ import android.content.res.XmlResourceParser;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.AttributeSet;
+import android.util.TypedValue;
import android.util.Xml;
import android.view.accessibility.AccessibilityEvent;
@@ -182,9 +183,14 @@ public class AccessibilityServiceInfo implements Parcelable {
private boolean mCanRetrieveWindowContent;
/**
- * Description of the accessibility service.
+ * Resource id of the description of the accessibility service.
*/
- private String mDescription;
+ private int mDescriptionResId;
+
+ /**
+ * Non localized description of the accessibility service.
+ */
+ private String mNonLocalizedDescription;
/**
* Creates a new instance.
@@ -256,8 +262,15 @@ public class AccessibilityServiceInfo implements Parcelable {
mCanRetrieveWindowContent = asAttributes.getBoolean(
com.android.internal.R.styleable.AccessibilityService_canRetrieveWindowContent,
false);
- mDescription = asAttributes.getString(
+ TypedValue peekedValue = asAttributes.peekValue(
com.android.internal.R.styleable.AccessibilityService_description);
+ if (peekedValue != null) {
+ mDescriptionResId = peekedValue.resourceId;
+ CharSequence nonLocalizedDescription = peekedValue.coerceToString();
+ if (nonLocalizedDescription != null) {
+ mNonLocalizedDescription = nonLocalizedDescription.toString().trim();
+ }
+ }
asAttributes.recycle();
} catch (NameNotFoundException e) {
throw new XmlPullParserException( "Unable to create context for: "
@@ -331,15 +344,38 @@ public class AccessibilityServiceInfo implements Parcelable {
}
/**
- * Description of the accessibility service.
+ * Gets the non-localized description of the accessibility service.
* <p>
* <strong>Statically set from
* {@link AccessibilityService#SERVICE_META_DATA meta-data}.</strong>
* </p>
* @return The description.
+ *
+ * @deprecated Use {@link #loadDescription(PackageManager)}.
*/
public String getDescription() {
- return mDescription;
+ return mNonLocalizedDescription;
+ }
+
+ /**
+ * The localized description of the accessibility service.
+ * <p>
+ * <strong>Statically set from
+ * {@link AccessibilityService#SERVICE_META_DATA meta-data}.</strong>
+ * </p>
+ * @return The localized description.
+ */
+ public String loadDescription(PackageManager packageManager) {
+ if (mDescriptionResId == 0) {
+ return mNonLocalizedDescription;
+ }
+ ServiceInfo serviceInfo = mResolveInfo.serviceInfo;
+ CharSequence description = packageManager.getText(serviceInfo.packageName,
+ mDescriptionResId, serviceInfo.applicationInfo);
+ if (description != null) {
+ return description.toString().trim();
+ }
+ return null;
}
/**
@@ -359,7 +395,8 @@ public class AccessibilityServiceInfo implements Parcelable {
parcel.writeParcelable(mResolveInfo, 0);
parcel.writeString(mSettingsActivityName);
parcel.writeInt(mCanRetrieveWindowContent ? 1 : 0);
- parcel.writeString(mDescription);
+ parcel.writeInt(mDescriptionResId);
+ parcel.writeString(mNonLocalizedDescription);
}
private void initFromParcel(Parcel parcel) {
@@ -372,7 +409,8 @@ public class AccessibilityServiceInfo implements Parcelable {
mResolveInfo = parcel.readParcelable(null);
mSettingsActivityName = parcel.readString();
mCanRetrieveWindowContent = (parcel.readInt() == 1);
- mDescription = parcel.readString();
+ mDescriptionResId = parcel.readInt();
+ mNonLocalizedDescription = parcel.readString();
}
@Override