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

Commit fe11126d authored by John Reck's avatar John Reck Committed by Android Git Automerger
Browse files

am 4f1942d9: Merge "Teach AssetAtlas about more drawables" into lmp-mr1-dev

* commit '4f1942d9':
  Teach AssetAtlas about more drawables
parents 6d982654 4f1942d9
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ import android.view.View.AttachInfo;

import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashSet;

/**
@@ -465,11 +466,13 @@ public class ThreadedRenderer extends HardwareRenderer {
            final LongSparseArray<Drawable.ConstantState> drawables = resources.getPreloadedDrawables();

            final int count = drawables.size();
            ArrayList<Bitmap> tmpList = new ArrayList<Bitmap>();
            for (int i = 0; i < count; i++) {
                final Bitmap bitmap = drawables.valueAt(i).getBitmap();
                if (bitmap != null && bitmap.getConfig() == Bitmap.Config.ARGB_8888) {
                    preloadedPointers.add(bitmap.mNativeBitmap);
                drawables.valueAt(i).addAtlasableBitmaps(tmpList);
                for (int j = 0; j < tmpList.size(); j++) {
                    preloadedPointers.add(tmpList.get(j).mNativeBitmap);
                }
                tmpList.clear();
            }

            for (int i = 0; i < map.length; i += 4) {
+6 −2
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

import java.io.IOException;
import java.util.Collection;

/**
 * A Drawable that wraps a bitmap and can be tiled, stretched, or aligned. You can create a
@@ -913,8 +914,11 @@ public class BitmapDrawable extends Drawable {
        }

        @Override
        public Bitmap getBitmap() {
            return mBitmap;
        public int addAtlasableBitmaps(Collection<Bitmap> atlasList) {
            if (isAtlasable(mBitmap) && atlasList.add(mBitmap)) {
                return mBitmap.getWidth() * mBitmap.getHeight();
            }
            return 0;
        }

        @Override
+9 −2
Original line number Diff line number Diff line
@@ -51,6 +51,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.lang.ref.WeakReference;
import java.util.Arrays;
import java.util.Collection;

/**
 * A Drawable is a general abstraction for "something that can be drawn."  Most
@@ -1244,10 +1245,16 @@ public abstract class Drawable {
        public abstract int getChangingConfigurations();

        /**
         * @return Total pixel count
         * @hide
         */
        public Bitmap getBitmap() {
            return null;
        public int addAtlasableBitmaps(Collection<Bitmap> atlasList) {
            return 0;
        }

        /** @hide */
        protected final boolean isAtlasable(Bitmap bitmap) {
            return bitmap != null && bitmap.getConfig() == Bitmap.Config.ARGB_8888;
        }

        /**
+17 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.annotation.NonNull;
import android.content.res.ColorStateList;
import android.content.res.Resources;
import android.content.res.Resources.Theme;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.Insets;
@@ -31,6 +32,8 @@ import android.os.SystemClock;
import android.util.LayoutDirection;
import android.util.SparseArray;

import java.util.Collection;

/**
 * A helper class that contains several {@link Drawable}s and selects which one to use.
 *
@@ -1062,6 +1065,20 @@ public class DrawableContainer extends Drawable implements Drawable.Callback {
            return true;
        }

        /** @hide */
        @Override
        public int addAtlasableBitmaps(Collection<Bitmap> atlasList) {
            final int N = mNumChildren;
            int pixelCount = 0;
            for (int i = 0; i < N; i++) {
                final ConstantState state = getChild(i).getConstantState();
                if (state != null) {
                    pixelCount += state.addAtlasableBitmaps(atlasList);
                }
            }
            return pixelCount;
        }

        /**
         * Class capable of cloning a Drawable from another Drawable's
         * ConstantState.
+13 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package android.graphics.drawable;
import com.android.internal.R;

import android.annotation.NonNull;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

@@ -26,16 +27,19 @@ import android.content.res.ColorStateList;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.content.res.Resources.Theme;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.Insets;
import android.graphics.Outline;
import android.graphics.PixelFormat;
import android.graphics.PorterDuff.Mode;
import android.graphics.drawable.Drawable.ConstantState;
import android.graphics.Rect;
import android.util.AttributeSet;

import java.io.IOException;
import java.util.Collection;

/**
 * A Drawable that insets another Drawable by a specified distance.
@@ -472,6 +476,15 @@ public class InsetDrawable extends Drawable implements Drawable.Callback {

            return mCanConstantState;
        }

        @Override
        public int addAtlasableBitmaps(Collection<Bitmap> atlasList) {
            final ConstantState state = mDrawable.getConstantState();
            if (state != null) {
                return state.addAtlasableBitmaps(atlasList);
            }
            return 0;
        }
    }

    private InsetDrawable(InsetState state, Resources res) {
Loading