Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8b725dcb authored by Alan Viverette's avatar Alan Viverette Committed by Android (Google) Code Review
Browse files

Merge "Improve encapsulation of Resources"

parents 5c57c44e 562a6a8d
Loading
Loading
Loading
Loading
+30 −18
Original line number Diff line number Diff line
@@ -71,16 +71,19 @@ import libcore.icu.NativePluralRules;
 */
public class Resources {
    static final String TAG = "Resources";

    private static final boolean DEBUG_LOAD = false;
    private static final boolean DEBUG_CONFIG = false;
    private static final boolean DEBUG_ATTRIBUTES_CACHE = false;
    private static final boolean TRACE_FOR_PRELOAD = false;
    private static final boolean TRACE_FOR_MISS_PRELOAD = false;

    private static final int LAYOUT_DIR_CONFIG = ActivityInfo.activityInfoConfigToNative(
            ActivityInfo.CONFIG_LAYOUT_DIRECTION);

    private static final int ID_OTHER = 0x01000004;

    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
@@ -91,32 +94,34 @@ public class Resources {
    private static final LongSparseArray<ColorStateList> sPreloadedColorStateLists
            = new LongSparseArray<ColorStateList>();

    private static Resources mSystem = null;
    private static boolean sPreloaded;
    private static int sPreloadedDensity;

    // These are protected by mAccessLock.

    /*package*/ final Object mAccessLock = new Object();
    /*package*/ final Configuration mTmpConfig = new Configuration();
    /*package*/ TypedValue mTmpValue = new TypedValue();
    /*package*/ final LongSparseArray<WeakReference<Drawable.ConstantState> > mDrawableCache
    private final Object mAccessLock = new Object();
    private final Configuration mTmpConfig = new Configuration();
    private final LongSparseArray<WeakReference<Drawable.ConstantState>> mDrawableCache
            = new LongSparseArray<WeakReference<Drawable.ConstantState>>(0);
    /*package*/ final LongSparseArray<WeakReference<ColorStateList> > mColorStateListCache
    private final LongSparseArray<WeakReference<ColorStateList>> mColorStateListCache
            = new LongSparseArray<WeakReference<ColorStateList>>(0);
    /*package*/ final LongSparseArray<WeakReference<Drawable.ConstantState> > mColorDrawableCache
    private final LongSparseArray<WeakReference<Drawable.ConstantState>> mColorDrawableCache
            = new LongSparseArray<WeakReference<Drawable.ConstantState>>(0);
    /*package*/ boolean mPreloading;

    /*package*/ TypedArray mCachedStyledAttributes = null;
    RuntimeException mLastRetrievedAttrs = null;
    private TypedValue mTmpValue = new TypedValue();
    private boolean mPreloading;

    private TypedArray mCachedStyledAttributes = null;
    private RuntimeException mLastRetrievedAttrs = null;

    private int mLastCachedXmlBlockIndex = -1;
    private final int[] mCachedXmlBlockIds = { 0, 0, 0, 0 };
    private final XmlBlock[] mCachedXmlBlocks = new XmlBlock[4];

    /*package*/ final AssetManager mAssets;
    private final AssetManager mAssets;
    private final Configuration mConfiguration = new Configuration();
    /*package*/ final DisplayMetrics mMetrics = new DisplayMetrics();
    private final DisplayMetrics mMetrics = new DisplayMetrics();
    private NativePluralRules mPluralRule;

    private CompatibilityInfo mCompatibilityInfo = CompatibilityInfo.DEFAULT_COMPATIBILITY_INFO;
@@ -2022,9 +2027,6 @@ public class Resources {
        return true;
    }

    static private final int LAYOUT_DIR_CONFIG = ActivityInfo.activityInfoConfigToNative(
            ActivityInfo.CONFIG_LAYOUT_DIRECTION);

    /*package*/ Drawable loadDrawable(TypedValue value, int id)
            throws NotFoundException {

@@ -2365,6 +2367,16 @@ public class Resources {
                + Integer.toHexString(id));
    }

    /*package*/ void recycleCachedStyledAttributes(TypedArray attrs) {
        synchronized (mAccessLock) {
            final TypedArray cached = mCachedStyledAttributes;
            if (cached == null || cached.mData.length < attrs.mData.length) {
                attrs.mXml = null;
                mCachedStyledAttributes = attrs;
            }
        }
    }

    private TypedArray getCachedStyledAttributes(int len) {
        synchronized (mAccessLock) {
            TypedArray attrs = mCachedStyledAttributes;
+12 −15
Original line number Diff line number Diff line
@@ -37,6 +37,8 @@ import java.util.Arrays;
 */
public class TypedArray {
    private final Resources mResources;
    private final DisplayMetrics mMetrics;
    private final AssetManager mAssets;
    /*package*/ XmlBlock.Parser mXml;
    /*package*/ int[] mRsrcs;
    /*package*/ int[] mData;
@@ -392,7 +394,7 @@ public class TypedArray {
            return defValue;
        } else if (type == TypedValue.TYPE_DIMENSION) {
            return TypedValue.complexToDimension(
                data[index+AssetManager.STYLE_DATA], mResources.mMetrics);
                data[index+AssetManager.STYLE_DATA], mMetrics);
        }

        throw new UnsupportedOperationException("Can't convert to dimension: type=0x"
@@ -424,7 +426,7 @@ public class TypedArray {
            return defValue;
        } else if (type == TypedValue.TYPE_DIMENSION) {
            return TypedValue.complexToDimensionPixelOffset(
                data[index+AssetManager.STYLE_DATA], mResources.mMetrics);
                data[index+AssetManager.STYLE_DATA], mMetrics);
        }

        throw new UnsupportedOperationException("Can't convert to dimension: type=0x"
@@ -457,7 +459,7 @@ public class TypedArray {
            return defValue;
        } else if (type == TypedValue.TYPE_DIMENSION) {
            return TypedValue.complexToDimensionPixelSize(
                data[index+AssetManager.STYLE_DATA], mResources.mMetrics);
                data[index+AssetManager.STYLE_DATA], mMetrics);
        }

        throw new UnsupportedOperationException("Can't convert to dimension: type=0x"
@@ -485,7 +487,7 @@ public class TypedArray {
            return data[index+AssetManager.STYLE_DATA];
        } else if (type == TypedValue.TYPE_DIMENSION) {
            return TypedValue.complexToDimensionPixelSize(
                data[index+AssetManager.STYLE_DATA], mResources.mMetrics);
                data[index+AssetManager.STYLE_DATA], mMetrics);
        }

        throw new RuntimeException(getPositionDescription()
@@ -514,7 +516,7 @@ public class TypedArray {
            return data[index+AssetManager.STYLE_DATA];
        } else if (type == TypedValue.TYPE_DIMENSION) {
            return TypedValue.complexToDimensionPixelSize(
                data[index+AssetManager.STYLE_DATA], mResources.mMetrics);
                data[index+AssetManager.STYLE_DATA], mMetrics);
        }

        return defValue;
@@ -687,13 +689,7 @@ public class TypedArray {
     * Give back a previously retrieved array, for later re-use.
     */
    public void recycle() {
        synchronized (mResources.mAccessLock) {
            TypedArray cached = mResources.mCachedStyledAttributes;
            if (cached == null || cached.mData.length < mData.length) {
                mXml = null;
                mResources.mCachedStyledAttributes = this;
            }
        }
        mResources.recycleCachedStyledAttributes(this);
    }

    private boolean getValueAt(int index, TypedValue outValue) {
@@ -722,18 +718,19 @@ public class TypedArray {
            }
            return null;
        }
        //System.out.println("Getting pooled from: " + v);
        return mResources.mAssets.getPooledString(
            cookie, data[index+AssetManager.STYLE_DATA]);
        return mAssets.getPooledString(cookie, data[index+AssetManager.STYLE_DATA]);
    }

    /*package*/ TypedArray(Resources resources, int[] data, int[] indices, int len) {
        mResources = resources;
        mMetrics = mResources.getDisplayMetrics();
        mAssets = mResources.getAssets();
        mData = data;
        mIndices = indices;
        mLength = len;
    }

    @Override
    public String toString() {
        return Arrays.toString(mData);
    }