am b08aa235: Merge "Improve fix for bug #8159072 Spinner widget should be RTL\'ized" into jb-mr2-dev
* commit 'b08aa2354ff3b1bd1c7d705b82a7c1e62674ee50': Improve fix for bug #8159072 Spinner widget should be RTL'ized
This commit is contained in:
@@ -17,6 +17,7 @@
|
||||
package android.content.res;
|
||||
|
||||
import android.os.Trace;
|
||||
import android.view.View;
|
||||
import com.android.internal.util.XmlUtils;
|
||||
|
||||
import org.xmlpull.v1.XmlPullParser;
|
||||
@@ -80,16 +81,16 @@ public class Resources {
|
||||
|
||||
private static final Object sSync = new Object();
|
||||
/*package*/ static Resources mSystem = null;
|
||||
|
||||
|
||||
// Information about preloaded resources. Note that they are not
|
||||
// protected by a lock, because while preloading in zygote we are all
|
||||
// single-threaded, and after that these are immutable.
|
||||
private static final LongSparseArray<Drawable.ConstantState> sPreloadedDrawables
|
||||
private static final LongSparseArray<Drawable.ConstantState>[] sPreloadedDrawables;
|
||||
private static final LongSparseArray<Drawable.ConstantState> sPreloadedColorDrawables
|
||||
= new LongSparseArray<Drawable.ConstantState>();
|
||||
private static final LongSparseArray<ColorStateList> sPreloadedColorStateLists
|
||||
= new LongSparseArray<ColorStateList>();
|
||||
private static final LongSparseArray<Drawable.ConstantState> sPreloadedColorDrawables
|
||||
= new LongSparseArray<Drawable.ConstantState>();
|
||||
|
||||
private static boolean sPreloaded;
|
||||
private static int sPreloadedDensity;
|
||||
|
||||
@@ -120,6 +121,12 @@ public class Resources {
|
||||
|
||||
private CompatibilityInfo mCompatibilityInfo;
|
||||
|
||||
static {
|
||||
sPreloadedDrawables = new LongSparseArray[2];
|
||||
sPreloadedDrawables[0] = new LongSparseArray<Drawable.ConstantState>();
|
||||
sPreloadedDrawables[1] = new LongSparseArray<Drawable.ConstantState>();
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
public static int selectDefaultTheme(int curTheme, int targetSdkVersion) {
|
||||
return selectSystemTheme(curTheme, targetSdkVersion,
|
||||
@@ -1982,6 +1989,7 @@ public class Resources {
|
||||
ActivityInfo.CONFIG_LAYOUT_DIRECTION);
|
||||
|
||||
private boolean verifyPreloadConfig(int changingConfigurations, int resourceId, String name) {
|
||||
// We dont want to preloadd a Drawable when there is both a LTR and RTL version of it
|
||||
if (((changingConfigurations&~(ActivityInfo.CONFIG_FONT_SCALE |
|
||||
ActivityInfo.CONFIG_DENSITY)) & VARYING_CONFIGS) != 0) {
|
||||
String resName;
|
||||
@@ -1995,6 +2003,17 @@ public class Resources {
|
||||
+ " (" + resName + ") that varies with configuration!!");
|
||||
return false;
|
||||
}
|
||||
if (TRACE_FOR_PRELOAD) {
|
||||
String resName;
|
||||
try {
|
||||
resName = getResourceName(resourceId);
|
||||
} catch (NotFoundException e) {
|
||||
resName = "?";
|
||||
}
|
||||
Log.w(TAG, "Preloading " + name + " resource #0x"
|
||||
+ Integer.toHexString(resourceId)
|
||||
+ " (" + resName + ")");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -2022,11 +2041,11 @@ public class Resources {
|
||||
if (dr != null) {
|
||||
return dr;
|
||||
}
|
||||
|
||||
final int layoutDirection = mConfiguration.getLayoutDirection();
|
||||
Drawable.ConstantState cs = isColorDrawable
|
||||
? sPreloadedColorDrawables.get(key)
|
||||
: (sPreloadedDensity == mConfiguration.densityDpi
|
||||
? sPreloadedDrawables.get(key) : null);
|
||||
? sPreloadedDrawables[layoutDirection].get(key) : null);
|
||||
if (cs != null) {
|
||||
dr = cs.newDrawable(this);
|
||||
} else {
|
||||
@@ -2100,11 +2119,12 @@ public class Resources {
|
||||
cs = dr.getConstantState();
|
||||
if (cs != null) {
|
||||
if (mPreloading) {
|
||||
if (verifyPreloadConfig(cs.getChangingConfigurations(), value.resourceId, "drawable")) {
|
||||
if (verifyPreloadConfig(cs.getChangingConfigurations(), value.resourceId,
|
||||
"drawable")) {
|
||||
if (isColorDrawable) {
|
||||
sPreloadedColorDrawables.put(key, cs);
|
||||
} else {
|
||||
sPreloadedDrawables.put(key, cs);
|
||||
sPreloadedDrawables[layoutDirection].put(key, cs);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user