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

Commit b3346697 authored by Aurélien Pomini's avatar Aurélien Pomini Committed by Android (Google) Code Review
Browse files

Merge "Rename WallpaperLocalColorExtractor" into main

parents 374c0269 d87dcd9d
Loading
Loading
Loading
Loading
+17 −17
Original line number Diff line number Diff line
@@ -55,7 +55,7 @@ import java.util.concurrent.Executor;
@SmallTest
@RunWith(AndroidJUnit4.class)
@TestableLooper.RunWithLooper
public class WallpaperLocalColorExtractorTest extends SysuiTestCase {
public class ImageWallpaperColorExtractorTest extends SysuiTestCase {
    private static final int LOW_BMP_WIDTH = 112;
    private static final int LOW_BMP_HEIGHT = 112;
    private static final int HIGH_BMP_WIDTH = 3000;
@@ -108,12 +108,12 @@ public class WallpaperLocalColorExtractorTest extends SysuiTestCase {
        return bitmap;
    }

    private WallpaperLocalColorExtractor getSpyWallpaperLocalColorExtractor() {
    private ImageWallpaperColorExtractor getSpyWallpaperLocalColorExtractor() {

        WallpaperLocalColorExtractor colorExtractor = new WallpaperLocalColorExtractor(
        ImageWallpaperColorExtractor colorExtractor = new ImageWallpaperColorExtractor(
                mBackgroundExecutor,
                new Object(),
                new WallpaperLocalColorExtractor.WallpaperLocalColorExtractorCallback() {
                new ImageWallpaperColorExtractor.ImageWallpaperColorExtractorCallback() {
                    @Override
                    public void onColorsProcessed() {
                        mColorsProcessed++;
@@ -140,7 +140,7 @@ public class WallpaperLocalColorExtractorTest extends SysuiTestCase {
                        mDeactivatedCount++;
                    }
                });
        WallpaperLocalColorExtractor spyColorExtractor = spy(colorExtractor);
        ImageWallpaperColorExtractor spyColorExtractor = spy(colorExtractor);

        doAnswer(invocation -> {
            mMiniBitmapWidth = invocation.getArgument(1);
@@ -190,7 +190,7 @@ public class WallpaperLocalColorExtractorTest extends SysuiTestCase {
     */
    @Test
    public void testMiniBitmapCreation() {
        WallpaperLocalColorExtractor spyColorExtractor = getSpyWallpaperLocalColorExtractor();
        ImageWallpaperColorExtractor spyColorExtractor = getSpyWallpaperLocalColorExtractor();
        int nSimulations = 10;
        for (int i = 0; i < nSimulations; i++) {
            resetCounters();
@@ -201,7 +201,7 @@ public class WallpaperLocalColorExtractorTest extends SysuiTestCase {

            assertThat(mMiniBitmapUpdatedCount).isEqualTo(1);
            assertThat(mMiniBitmapWidth * mMiniBitmapHeight)
                    .isAtMost(WallpaperLocalColorExtractor.MINI_BITMAP_MAX_AREA);
                    .isAtMost(ImageWallpaperColorExtractor.MINI_BITMAP_MAX_AREA);
        }
    }

@@ -211,7 +211,7 @@ public class WallpaperLocalColorExtractorTest extends SysuiTestCase {
     */
    @Test
    public void testSmallMiniBitmapCreation() {
        WallpaperLocalColorExtractor spyColorExtractor = getSpyWallpaperLocalColorExtractor();
        ImageWallpaperColorExtractor spyColorExtractor = getSpyWallpaperLocalColorExtractor();
        int nSimulations = 10;
        for (int i = 0; i < nSimulations; i++) {
            resetCounters();
@@ -222,7 +222,7 @@ public class WallpaperLocalColorExtractorTest extends SysuiTestCase {

            assertThat(mMiniBitmapUpdatedCount).isEqualTo(1);
            assertThat(mMiniBitmapWidth * mMiniBitmapHeight)
                    .isAtMost(WallpaperLocalColorExtractor.MINI_BITMAP_MAX_AREA);
                    .isAtMost(ImageWallpaperColorExtractor.MINI_BITMAP_MAX_AREA);
        }
    }

@@ -238,7 +238,7 @@ public class WallpaperLocalColorExtractorTest extends SysuiTestCase {
        int nSimulations = 10;
        for (int i = 0; i < nSimulations; i++) {
            resetCounters();
            WallpaperLocalColorExtractor spyColorExtractor = getSpyWallpaperLocalColorExtractor();
            ImageWallpaperColorExtractor spyColorExtractor = getSpyWallpaperLocalColorExtractor();
            List<RectF> regions = listOfRandomAreas(MIN_AREAS, MAX_AREAS);
            int nPages = randomBetween(PAGES_LOW, PAGES_HIGH);
            List<Runnable> tasks = Arrays.asList(
@@ -270,7 +270,7 @@ public class WallpaperLocalColorExtractorTest extends SysuiTestCase {
        int nSimulations = 10;
        for (int i = 0; i < nSimulations; i++) {
            resetCounters();
            WallpaperLocalColorExtractor spyColorExtractor = getSpyWallpaperLocalColorExtractor();
            ImageWallpaperColorExtractor spyColorExtractor = getSpyWallpaperLocalColorExtractor();
            List<RectF> regions1 = listOfRandomAreas(MIN_AREAS / 2, MAX_AREAS / 2);
            List<RectF> regions2 = listOfRandomAreas(MIN_AREAS / 2, MAX_AREAS / 2);
            List<RectF> regions = new ArrayList<>();
@@ -305,7 +305,7 @@ public class WallpaperLocalColorExtractorTest extends SysuiTestCase {
    @Test
    public void testRecomputeColorExtraction() {
        Bitmap bitmap = getMockBitmap(HIGH_BMP_WIDTH, HIGH_BMP_HEIGHT);
        WallpaperLocalColorExtractor spyColorExtractor = getSpyWallpaperLocalColorExtractor();
        ImageWallpaperColorExtractor spyColorExtractor = getSpyWallpaperLocalColorExtractor();
        List<RectF> regions1 = listOfRandomAreas(MIN_AREAS / 2, MAX_AREAS / 2);
        List<RectF> regions2 = listOfRandomAreas(MIN_AREAS / 2, MAX_AREAS / 2);
        List<RectF> regions = new ArrayList<>();
@@ -351,7 +351,7 @@ public class WallpaperLocalColorExtractorTest extends SysuiTestCase {
    public void testRecomputeColors() {
        resetCounters();
        Bitmap bitmap = getMockBitmap(HIGH_BMP_WIDTH, HIGH_BMP_HEIGHT);
        WallpaperLocalColorExtractor spyColorExtractor = getSpyWallpaperLocalColorExtractor();
        ImageWallpaperColorExtractor spyColorExtractor = getSpyWallpaperLocalColorExtractor();
        spyColorExtractor.onBitmapChanged(bitmap);
        assertThat(mColorsProcessed).isEqualTo(0);
        spyColorExtractor.onComputeColors();
@@ -365,7 +365,7 @@ public class WallpaperLocalColorExtractorTest extends SysuiTestCase {
    public void testRecomputeColorsBeforeBitmapLoaded() {
        resetCounters();
        Bitmap bitmap = getMockBitmap(HIGH_BMP_WIDTH, HIGH_BMP_HEIGHT);
        WallpaperLocalColorExtractor spyColorExtractor = getSpyWallpaperLocalColorExtractor();
        ImageWallpaperColorExtractor spyColorExtractor = getSpyWallpaperLocalColorExtractor();
        spyColorExtractor.onComputeColors();
        spyColorExtractor.onBitmapChanged(bitmap);
        assertThat(mColorsProcessed).isEqualTo(1);
@@ -378,7 +378,7 @@ public class WallpaperLocalColorExtractorTest extends SysuiTestCase {
    public void testRecomputeColorsOnDimChanged() {
        resetCounters();
        Bitmap bitmap = getMockBitmap(HIGH_BMP_WIDTH, HIGH_BMP_HEIGHT);
        WallpaperLocalColorExtractor spyColorExtractor = getSpyWallpaperLocalColorExtractor();
        ImageWallpaperColorExtractor spyColorExtractor = getSpyWallpaperLocalColorExtractor();
        spyColorExtractor.onBitmapChanged(bitmap);
        spyColorExtractor.onDimAmountChanged(0.5f);
        assertThat(mColorsProcessed).isEqualTo(1);
@@ -391,7 +391,7 @@ public class WallpaperLocalColorExtractorTest extends SysuiTestCase {
    public void testRecomputeColorsOnDimChangedBeforeBitmapLoaded() {
        resetCounters();
        Bitmap bitmap = getMockBitmap(HIGH_BMP_WIDTH, HIGH_BMP_HEIGHT);
        WallpaperLocalColorExtractor spyColorExtractor = getSpyWallpaperLocalColorExtractor();
        ImageWallpaperColorExtractor spyColorExtractor = getSpyWallpaperLocalColorExtractor();
        spyColorExtractor.onDimAmountChanged(0.3f);
        spyColorExtractor.onBitmapChanged(bitmap);
        assertThat(mColorsProcessed).isEqualTo(1);
@@ -402,7 +402,7 @@ public class WallpaperLocalColorExtractorTest extends SysuiTestCase {
        resetCounters();
        Bitmap bitmap = getMockBitmap(HIGH_BMP_WIDTH, HIGH_BMP_HEIGHT);
        doNothing().when(bitmap).recycle();
        WallpaperLocalColorExtractor spyColorExtractor = getSpyWallpaperLocalColorExtractor();
        ImageWallpaperColorExtractor spyColorExtractor = getSpyWallpaperLocalColorExtractor();
        spyColorExtractor.onPageChanged(PAGES_LOW);
        spyColorExtractor.onBitmapChanged(bitmap);
        assertThat(mMiniBitmapUpdatedCount).isEqualTo(1);
+13 −13
Original line number Diff line number Diff line
@@ -114,7 +114,7 @@ public class ImageWallpaper extends WallpaperService {

    class CanvasEngine extends WallpaperService.Engine implements DisplayListener {
        private WallpaperManager mWallpaperManager;
        private final WallpaperLocalColorExtractor mWallpaperLocalColorExtractor;
        private final ImageWallpaperColorExtractor mColorExtractor;
        private SurfaceHolder mSurfaceHolder;
        private boolean mDrawn = false;
        @VisibleForTesting
@@ -146,10 +146,10 @@ public class ImageWallpaper extends WallpaperService {
            super();
            setFixedSizeAllowed(true);
            setShowForAllUsers(true);
            mWallpaperLocalColorExtractor = new WallpaperLocalColorExtractor(
            mColorExtractor = new ImageWallpaperColorExtractor(
                    mLongExecutor,
                    mLock,
                    new WallpaperLocalColorExtractor.WallpaperLocalColorExtractorCallback() {
                    new ImageWallpaperColorExtractor.ImageWallpaperColorExtractorCallback() {

                        @Override
                        public void onColorsProcessed() {
@@ -180,7 +180,7 @@ public class ImageWallpaper extends WallpaperService {

            // if the number of pages is already computed, transmit it to the color extractor
            if (mPagesComputed) {
                mWallpaperLocalColorExtractor.onPageChanged(mPages);
                mColorExtractor.onPageChanged(mPages);
            }
        }

@@ -213,7 +213,7 @@ public class ImageWallpaper extends WallpaperService {
                DisplayManager displayManager = context.getSystemService(DisplayManager.class);
                if (displayManager != null) displayManager.unregisterDisplayListener(this);
            }
            mWallpaperLocalColorExtractor.cleanUp();
            mColorExtractor.cleanUp();
        }

        @Override
@@ -445,7 +445,7 @@ public class ImageWallpaper extends WallpaperService {

        @VisibleForTesting
        void recomputeColorExtractorMiniBitmap() {
            mWallpaperLocalColorExtractor.onBitmapChanged(mBitmap);
            mColorExtractor.onBitmapChanged(mBitmap);
        }

        @VisibleForTesting
@@ -455,7 +455,7 @@ public class ImageWallpaper extends WallpaperService {

        @Override
        public @Nullable WallpaperColors onComputeColors() {
            return mWallpaperLocalColorExtractor.onComputeColors();
            return mColorExtractor.onComputeColors();
        }

        @Override
@@ -467,14 +467,14 @@ public class ImageWallpaper extends WallpaperService {
        public void addLocalColorsAreas(@NonNull List<RectF> regions) {
            // this call will activate the offset notifications
            // if no colors were being processed before
            mWallpaperLocalColorExtractor.addLocalColorsAreas(regions);
            mColorExtractor.addLocalColorsAreas(regions);
        }

        @Override
        public void removeLocalColorsAreas(@NonNull List<RectF> regions) {
            // this call will deactivate the offset notifications
            // if we are no longer processing colors
            mWallpaperLocalColorExtractor.removeLocalColorAreas(regions);
            mColorExtractor.removeLocalColorAreas(regions);
        }

        @Override
@@ -490,13 +490,13 @@ public class ImageWallpaper extends WallpaperService {
            if (pages != mPages || !mPagesComputed) {
                mPages = pages;
                mPagesComputed = true;
                mWallpaperLocalColorExtractor.onPageChanged(mPages);
                mColorExtractor.onPageChanged(mPages);
            }
        }

        @Override
        public void onDimAmountChanged(float dimAmount) {
            mWallpaperLocalColorExtractor.onDimAmountChanged(dimAmount);
            mColorExtractor.onDimAmountChanged(dimAmount);
        }

        @Override
@@ -527,7 +527,7 @@ public class ImageWallpaper extends WallpaperService {
            Rect window = mWindowManagerProvider.getWindowManager(getDisplayContext())
                    .getCurrentWindowMetrics()
                    .getBounds();
            mWallpaperLocalColorExtractor.setDisplayDimensions(window.width(), window.height());
            mColorExtractor.setDisplayDimensions(window.width(), window.height());
        }

        @Override
@@ -547,7 +547,7 @@ public class ImageWallpaper extends WallpaperService {
                    : mBitmap.isRecycled() ? "recycled"
                    : mBitmap.getWidth() + "x" + mBitmap.getHeight());

            mWallpaperLocalColorExtractor.dump(prefix, fd, out, args);
            mColorExtractor.dump(prefix, fd, out, args);
        }
    }
}
+18 −20
Original line number Diff line number Diff line
@@ -44,14 +44,14 @@ import java.util.concurrent.Executor;
 * It uses a background executor, and uses callbacks to inform that the work is done.
 * It uses  a downscaled version of the wallpaper to extract the colors.
 */
public class WallpaperLocalColorExtractor {
public class ImageWallpaperColorExtractor {

    private Bitmap mMiniBitmap;

    @VisibleForTesting
    static final int MINI_BITMAP_MAX_AREA = 112 * 112;

    private static final String TAG = WallpaperLocalColorExtractor.class.getSimpleName();
    private static final String TAG = ImageWallpaperColorExtractor.class.getSimpleName();
    private static final @NonNull RectF LOCAL_COLOR_BOUNDS =
            new RectF(0, 0, 1, 1);

@@ -75,12 +75,12 @@ public class WallpaperLocalColorExtractor {
    @LongRunning
    private final Executor mLongExecutor;

    private final WallpaperLocalColorExtractorCallback mWallpaperLocalColorExtractorCallback;
    private final ImageWallpaperColorExtractorCallback mColorExtractorCallback;

    /**
     * Interface to handle the callbacks after the different steps of the color extraction
     */
    public interface WallpaperLocalColorExtractorCallback {
    public interface ImageWallpaperColorExtractorCallback {

        /**
         * Callback after the wallpaper colors have been computed
@@ -115,15 +115,13 @@ public class WallpaperLocalColorExtractor {
     * Creates a new color extractor.
     * @param longExecutor the executor on which the color extraction will be performed
     * @param lock the lock object to use for computing colors or processing the bitmap
     * @param wallpaperLocalColorExtractorCallback an interface to handle the callbacks from
     *                                        the color extractor.
     * @param colorExtractorCallback an interface to handle the callbacks from the color extractor.
     */
    public WallpaperLocalColorExtractor(@LongRunning Executor longExecutor,
            Object lock,
            WallpaperLocalColorExtractorCallback wallpaperLocalColorExtractorCallback) {
    public ImageWallpaperColorExtractor(Executor longExecutor, Object lock,
            ImageWallpaperColorExtractorCallback colorExtractorCallback) {
        mLongExecutor = longExecutor;
        mLock = lock;
        mWallpaperLocalColorExtractorCallback = wallpaperLocalColorExtractorCallback;
        mColorExtractorCallback = colorExtractorCallback;
    }

    /**
@@ -177,7 +175,7 @@ public class WallpaperLocalColorExtractor {
            mBitmapWidth = bitmap.getWidth();
            mBitmapHeight = bitmap.getHeight();
            mMiniBitmap = createMiniBitmap(bitmap);
            mWallpaperLocalColorExtractorCallback.onMiniBitmapUpdated();
            mColorExtractorCallback.onMiniBitmapUpdated();
            if (mRecomputeColors) recomputeColorsInternal();
            recomputeLocalColors();
        }
@@ -221,7 +219,7 @@ public class WallpaperLocalColorExtractor {
    /**
     * To be called by {@link ImageWallpaper.CanvasEngine#onComputeColors}. This will either
     * return the current wallpaper colors, or if the bitmap is not yet loaded, return null and call
     * {@link WallpaperLocalColorExtractorCallback#onColorsProcessed()} when the colors are ready.
     * {@link ImageWallpaperColorExtractorCallback#onColorsProcessed()} when the colors are ready.
     */
    public WallpaperColors onComputeColors() {
        mLongExecutor.execute(this::onComputeColorsSynchronized);
@@ -242,7 +240,7 @@ public class WallpaperLocalColorExtractor {
    private void recomputeColorsInternal() {
        if (mMiniBitmap == null) return;
        mWallpaperColors = getWallpaperColors(mMiniBitmap, mWallpaperDimAmount);
        mWallpaperLocalColorExtractorCallback.onColorsProcessed();
        mColorExtractorCallback.onColorsProcessed();
    }

    @VisibleForTesting
@@ -277,7 +275,7 @@ public class WallpaperLocalColorExtractor {
            boolean wasActive = isActive();
            mPendingRegions.addAll(regions);
            if (!wasActive && isActive()) {
                mWallpaperLocalColorExtractorCallback.onActivated();
                mColorExtractorCallback.onActivated();
            }
            processLocalColorsInternal();
        }
@@ -299,7 +297,7 @@ public class WallpaperLocalColorExtractor {
            mPendingRegions.removeAll(regions);
            regions.forEach(mProcessedRegions::remove);
            if (wasActive && !isActive()) {
                mWallpaperLocalColorExtractorCallback.onDeactivated();
                mColorExtractorCallback.onDeactivated();
            }
        }
    }
@@ -323,7 +321,7 @@ public class WallpaperLocalColorExtractor {
    }

    private Bitmap createMiniBitmap(@NonNull Bitmap bitmap) {
        Trace.beginSection("WallpaperLocalColorExtractor#createMiniBitmap");
        Trace.beginSection("ImageWallpaperColorExtractor#createMiniBitmap");
        // if the area of the image is greater than MINI_BITMAP_MAX_AREA, downscale the bitmap.
        int area = bitmap.getWidth() * bitmap.getHeight();
        double scale = Math.min(1, Math.sqrt((double) MINI_BITMAP_MAX_AREA / area));
@@ -366,10 +364,10 @@ public class WallpaperLocalColorExtractor {

    /**
     * Transform the logical coordinates into wallpaper coordinates.
     *
     * <p>
     * Logical coordinates are organised such that the various pages are non-overlapping. So,
     * if there are n pages, the first page will have its X coordinate on the range [0-1/n].
     *
     * <p>
     * The real pages are overlapping. If the Wallpaper are a width Ww and the screen a width
     * Ws, the relative width of a page Wr is Ws/Ww. This does not change if the number of
     * pages increase.
@@ -430,7 +428,7 @@ public class WallpaperLocalColorExtractor {
         */
        if (mDisplayWidth < 0 || mDisplayHeight < 0 || mPages < 0) return;

        Trace.beginSection("WallpaperLocalColorExtractor#processColorsInternal");
        Trace.beginSection("ImageWallpaperColorExtractor#processColorsInternal");
        List<WallpaperColors> processedColors = new ArrayList<>();
        for (int i = 0; i < mPendingRegions.size(); i++) {
            RectF nextArea = mPendingRegions.get(i);
@@ -443,7 +441,7 @@ public class WallpaperLocalColorExtractor {
        mPendingRegions.clear();
        Trace.endSection();

        mWallpaperLocalColorExtractorCallback.onColorsProcessed(processedRegions, processedColors);
        mColorExtractorCallback.onColorsProcessed(processedRegions, processedColors);
    }

    /**