Merge "Migrate Resources.java to use ICU4j drectly."

This commit is contained in:
Neil Fuller
2015-07-17 10:09:23 +00:00
committed by Gerrit Code Review

View File

@@ -19,6 +19,7 @@ package android.content.res;
import android.animation.Animator; import android.animation.Animator;
import android.animation.StateListAnimator; import android.animation.StateListAnimator;
import android.annotation.NonNull; import android.annotation.NonNull;
import android.icu.text.PluralRules;
import android.util.Pools.SynchronizedPool; import android.util.Pools.SynchronizedPool;
import android.view.ViewDebug; import android.view.ViewDebug;
import com.android.internal.util.XmlUtils; import com.android.internal.util.XmlUtils;
@@ -49,8 +50,6 @@ import java.io.InputStream;
import java.lang.ref.WeakReference; import java.lang.ref.WeakReference;
import java.util.Locale; import java.util.Locale;
import libcore.icu.NativePluralRules;
/** /**
* Class for accessing an application's resources. This sits on top of the * Class for accessing an application's resources. This sits on top of the
* asset manager of the application (accessible through {@link #getAssets}) and * asset manager of the application (accessible through {@link #getAssets}) and
@@ -136,7 +135,7 @@ public class Resources {
final DisplayMetrics mMetrics = new DisplayMetrics(); final DisplayMetrics mMetrics = new DisplayMetrics();
private final Configuration mConfiguration = new Configuration(); private final Configuration mConfiguration = new Configuration();
private NativePluralRules mPluralRule; private PluralRules mPluralRule;
private CompatibilityInfo mCompatibilityInfo = CompatibilityInfo.DEFAULT_COMPATIBILITY_INFO; private CompatibilityInfo mCompatibilityInfo = CompatibilityInfo.DEFAULT_COMPATIBILITY_INFO;
@@ -321,9 +320,9 @@ public class Resources {
* possibly styled text information. * possibly styled text information.
*/ */
public CharSequence getQuantityText(int id, int quantity) throws NotFoundException { public CharSequence getQuantityText(int id, int quantity) throws NotFoundException {
NativePluralRules rule = getPluralRule(); PluralRules rule = getPluralRule();
CharSequence res = mAssets.getResourceBagText(id, CharSequence res = mAssets.getResourceBagText(id,
attrForQuantityCode(rule.quantityForInt(quantity))); attrForQuantityCode(rule.select(quantity)));
if (res != null) { if (res != null) {
return res; return res;
} }
@@ -333,40 +332,29 @@ public class Resources {
} }
throw new NotFoundException("Plural resource ID #0x" + Integer.toHexString(id) throw new NotFoundException("Plural resource ID #0x" + Integer.toHexString(id)
+ " quantity=" + quantity + " quantity=" + quantity
+ " item=" + stringForQuantityCode(rule.quantityForInt(quantity))); + " item=" + rule.select(quantity));
} }
private NativePluralRules getPluralRule() { private PluralRules getPluralRule() {
synchronized (sSync) { synchronized (sSync) {
if (mPluralRule == null) { if (mPluralRule == null) {
mPluralRule = NativePluralRules.forLocale(mConfiguration.locale); mPluralRule = PluralRules.forLocale(mConfiguration.locale);
} }
return mPluralRule; return mPluralRule;
} }
} }
private static int attrForQuantityCode(int quantityCode) { private static int attrForQuantityCode(String quantityCode) {
switch (quantityCode) { switch (quantityCode) {
case NativePluralRules.ZERO: return 0x01000005; case PluralRules.KEYWORD_ZERO: return 0x01000005;
case NativePluralRules.ONE: return 0x01000006; case PluralRules.KEYWORD_ONE: return 0x01000006;
case NativePluralRules.TWO: return 0x01000007; case PluralRules.KEYWORD_TWO: return 0x01000007;
case NativePluralRules.FEW: return 0x01000008; case PluralRules.KEYWORD_FEW: return 0x01000008;
case NativePluralRules.MANY: return 0x01000009; case PluralRules.KEYWORD_MANY: return 0x01000009;
default: return ID_OTHER; default: return ID_OTHER;
} }
} }
private static String stringForQuantityCode(int quantityCode) {
switch (quantityCode) {
case NativePluralRules.ZERO: return "zero";
case NativePluralRules.ONE: return "one";
case NativePluralRules.TWO: return "two";
case NativePluralRules.FEW: return "few";
case NativePluralRules.MANY: return "many";
default: return "other";
}
}
/** /**
* Return the string value associated with a particular resource ID. It * Return the string value associated with a particular resource ID. It
* will be stripped of any styled text information. * will be stripped of any styled text information.
@@ -1852,7 +1840,7 @@ public class Resources {
} }
synchronized (sSync) { synchronized (sSync) {
if (mPluralRule != null) { if (mPluralRule != null) {
mPluralRule = NativePluralRules.forLocale(config.locale); mPluralRule = PluralRules.forLocale(config.locale);
} }
} }
} }