Merge "Migrate Resources.java to use ICU4j drectly."
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user