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

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

Merge "Rename WallpaperColorExtractor to WallpaperLocalColorExtractor" into tm-qpr-dev

parents c3c42010 3530b232
Loading
Loading
Loading
Loading
+12 −12
Original line number Diff line number Diff line
@@ -47,7 +47,7 @@ import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.util.concurrency.DelayableExecutor;
import com.android.systemui.wallpapers.canvas.WallpaperColorExtractor;
import com.android.systemui.wallpapers.canvas.WallpaperLocalColorExtractor;
import com.android.systemui.wallpapers.gl.EglHelper;
import com.android.systemui.wallpapers.gl.ImageWallpaperRenderer;

@@ -521,7 +521,7 @@ public class ImageWallpaper extends WallpaperService {

    class CanvasEngine extends WallpaperService.Engine implements DisplayListener {
        private WallpaperManager mWallpaperManager;
        private final WallpaperColorExtractor mWallpaperColorExtractor;
        private final WallpaperLocalColorExtractor mWallpaperLocalColorExtractor;
        private SurfaceHolder mSurfaceHolder;
        @VisibleForTesting
        static final int MIN_SURFACE_WIDTH = 128;
@@ -543,9 +543,9 @@ public class ImageWallpaper extends WallpaperService {
            super();
            setFixedSizeAllowed(true);
            setShowForAllUsers(true);
            mWallpaperColorExtractor = new WallpaperColorExtractor(
            mWallpaperLocalColorExtractor = new WallpaperLocalColorExtractor(
                    mBackgroundExecutor,
                    new WallpaperColorExtractor.WallpaperColorExtractorCallback() {
                    new WallpaperLocalColorExtractor.WallpaperLocalColorExtractorCallback() {
                        @Override
                        public void onColorsProcessed(List<RectF> regions,
                                List<WallpaperColors> colors) {
@@ -570,7 +570,7 @@ public class ImageWallpaper extends WallpaperService {

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

@@ -597,7 +597,7 @@ public class ImageWallpaper extends WallpaperService {
        public void onDestroy() {
            getDisplayContext().getSystemService(DisplayManager.class)
                    .unregisterDisplayListener(this);
            mWallpaperColorExtractor.cleanUp();
            mWallpaperLocalColorExtractor.cleanUp();
            unloadBitmap();
        }

@@ -813,7 +813,7 @@ public class ImageWallpaper extends WallpaperService {

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

        @VisibleForTesting
@@ -830,14 +830,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
            mWallpaperColorExtractor.addLocalColorsAreas(regions);
            mWallpaperLocalColorExtractor.addLocalColorsAreas(regions);
        }

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

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

@@ -881,7 +881,7 @@ public class ImageWallpaper extends WallpaperService {
                    .getSystemService(WindowManager.class)
                    .getCurrentWindowMetrics()
                    .getBounds();
            mWallpaperColorExtractor.setDisplayDimensions(window.width(), window.height());
            mWallpaperLocalColorExtractor.setDisplayDimensions(window.width(), window.height());
        }


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

            mWallpaperColorExtractor.dump(prefix, fd, out, args);
            mWallpaperLocalColorExtractor.dump(prefix, fd, out, args);
        }
    }
}
+14 −14
Original line number Diff line number Diff line
@@ -45,14 +45,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 WallpaperColorExtractor {
public class WallpaperLocalColorExtractor {

    private Bitmap mMiniBitmap;

    @VisibleForTesting
    static final int SMALL_SIDE = 128;

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

@@ -70,12 +70,12 @@ public class WallpaperColorExtractor {
    @Background
    private final Executor mBackgroundExecutor;

    private final WallpaperColorExtractorCallback mWallpaperColorExtractorCallback;
    private final WallpaperLocalColorExtractorCallback mWallpaperLocalColorExtractorCallback;

    /**
     * Interface to handle the callbacks after the different steps of the color extraction
     */
    public interface WallpaperColorExtractorCallback {
    public interface WallpaperLocalColorExtractorCallback {
        /**
         * Callback after the colors of new regions have been extracted
         * @param regions the list of new regions that have been processed
@@ -103,13 +103,13 @@ public class WallpaperColorExtractor {
    /**
     * Creates a new color extractor.
     * @param backgroundExecutor the executor on which the color extraction will be performed
     * @param wallpaperColorExtractorCallback an interface to handle the callbacks from
     * @param wallpaperLocalColorExtractorCallback an interface to handle the callbacks from
     *                                        the color extractor.
     */
    public WallpaperColorExtractor(@Background Executor backgroundExecutor,
            WallpaperColorExtractorCallback wallpaperColorExtractorCallback) {
    public WallpaperLocalColorExtractor(@Background Executor backgroundExecutor,
            WallpaperLocalColorExtractorCallback wallpaperLocalColorExtractorCallback) {
        mBackgroundExecutor = backgroundExecutor;
        mWallpaperColorExtractorCallback = wallpaperColorExtractorCallback;
        mWallpaperLocalColorExtractorCallback = wallpaperLocalColorExtractorCallback;
    }

    /**
@@ -157,7 +157,7 @@ public class WallpaperColorExtractor {
            mBitmapWidth = bitmap.getWidth();
            mBitmapHeight = bitmap.getHeight();
            mMiniBitmap = createMiniBitmap(bitmap);
            mWallpaperColorExtractorCallback.onMiniBitmapUpdated();
            mWallpaperLocalColorExtractorCallback.onMiniBitmapUpdated();
            recomputeColors();
        }
    }
@@ -206,7 +206,7 @@ public class WallpaperColorExtractor {
            boolean wasActive = isActive();
            mPendingRegions.addAll(regions);
            if (!wasActive && isActive()) {
                mWallpaperColorExtractorCallback.onActivated();
                mWallpaperLocalColorExtractorCallback.onActivated();
            }
            processColorsInternal();
        }
@@ -228,7 +228,7 @@ public class WallpaperColorExtractor {
            mPendingRegions.removeAll(regions);
            regions.forEach(mProcessedRegions::remove);
            if (wasActive && !isActive()) {
                mWallpaperColorExtractorCallback.onDeactivated();
                mWallpaperLocalColorExtractorCallback.onDeactivated();
            }
        }
    }
@@ -252,7 +252,7 @@ public class WallpaperColorExtractor {
    }

    private Bitmap createMiniBitmap(@NonNull Bitmap bitmap) {
        Trace.beginSection("WallpaperColorExtractor#createMiniBitmap");
        Trace.beginSection("WallpaperLocalColorExtractor#createMiniBitmap");
        // if both sides of the image are larger than SMALL_SIDE, downscale the bitmap.
        int smallestSide = Math.min(bitmap.getWidth(), bitmap.getHeight());
        float scale = Math.min(1.0f, (float) SMALL_SIDE / smallestSide);
@@ -359,7 +359,7 @@ public class WallpaperColorExtractor {
         */
        if (mDisplayWidth < 0 || mDisplayHeight < 0 || mPages < 0) return;

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

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

    /**
+42 −42
Original line number Diff line number Diff line
@@ -54,7 +54,7 @@ import java.util.concurrent.Executor;
@SmallTest
@RunWith(AndroidTestingRunner.class)
@TestableLooper.RunWithLooper
public class WallpaperColorExtractorTest extends SysuiTestCase {
public class WallpaperLocalColorExtractorTest extends SysuiTestCase {
    private static final int LOW_BMP_WIDTH = 128;
    private static final int LOW_BMP_HEIGHT = 128;
    private static final int HIGH_BMP_WIDTH = 3000;
@@ -105,11 +105,11 @@ public class WallpaperColorExtractorTest extends SysuiTestCase {
        return bitmap;
    }

    private WallpaperColorExtractor getSpyWallpaperColorExtractor() {
    private WallpaperLocalColorExtractor getSpyWallpaperLocalColorExtractor() {

        WallpaperColorExtractor wallpaperColorExtractor = new WallpaperColorExtractor(
        WallpaperLocalColorExtractor colorExtractor = new WallpaperLocalColorExtractor(
                mBackgroundExecutor,
                new WallpaperColorExtractor.WallpaperColorExtractorCallback() {
                new WallpaperLocalColorExtractor.WallpaperLocalColorExtractorCallback() {
                    @Override
                    public void onColorsProcessed(List<RectF> regions,
                            List<WallpaperColors> colors) {
@@ -132,25 +132,25 @@ public class WallpaperColorExtractorTest extends SysuiTestCase {
                        mDeactivatedCount++;
                    }
                });
        WallpaperColorExtractor spyWallpaperColorExtractor = spy(wallpaperColorExtractor);
        WallpaperLocalColorExtractor spyColorExtractor = spy(colorExtractor);

        doAnswer(invocation -> {
            mMiniBitmapWidth = invocation.getArgument(1);
            mMiniBitmapHeight = invocation.getArgument(2);
            return getMockBitmap(mMiniBitmapWidth, mMiniBitmapHeight);
        }).when(spyWallpaperColorExtractor).createMiniBitmap(any(Bitmap.class), anyInt(), anyInt());
        }).when(spyColorExtractor).createMiniBitmap(any(Bitmap.class), anyInt(), anyInt());


        doAnswer(invocation -> getMockBitmap(
                        invocation.getArgument(1),
                        invocation.getArgument(2)))
                .when(spyWallpaperColorExtractor)
                .when(spyColorExtractor)
                .createMiniBitmap(any(Bitmap.class), anyInt(), anyInt());

        doReturn(new WallpaperColors(Color.valueOf(0), Color.valueOf(0), Color.valueOf(0)))
                .when(spyWallpaperColorExtractor).getLocalWallpaperColors(any(Rect.class));
                .when(spyColorExtractor).getLocalWallpaperColors(any(Rect.class));

        return spyWallpaperColorExtractor;
        return spyColorExtractor;
    }

    private RectF randomArea() {
@@ -180,18 +180,18 @@ public class WallpaperColorExtractorTest extends SysuiTestCase {
     */
    @Test
    public void testMiniBitmapCreation() {
        WallpaperColorExtractor spyWallpaperColorExtractor = getSpyWallpaperColorExtractor();
        WallpaperLocalColorExtractor spyColorExtractor = getSpyWallpaperLocalColorExtractor();
        int nSimulations = 10;
        for (int i = 0; i < nSimulations; i++) {
            resetCounters();
            int width = randomBetween(LOW_BMP_WIDTH, HIGH_BMP_WIDTH);
            int height = randomBetween(LOW_BMP_HEIGHT, HIGH_BMP_HEIGHT);
            Bitmap bitmap = getMockBitmap(width, height);
            spyWallpaperColorExtractor.onBitmapChanged(bitmap);
            spyColorExtractor.onBitmapChanged(bitmap);

            assertThat(mMiniBitmapUpdatedCount).isEqualTo(1);
            assertThat(Math.min(mMiniBitmapWidth, mMiniBitmapHeight))
                    .isAtMost(WallpaperColorExtractor.SMALL_SIDE);
                    .isAtMost(WallpaperLocalColorExtractor.SMALL_SIDE);
        }
    }

@@ -201,18 +201,18 @@ public class WallpaperColorExtractorTest extends SysuiTestCase {
     */
    @Test
    public void testSmallMiniBitmapCreation() {
        WallpaperColorExtractor spyWallpaperColorExtractor = getSpyWallpaperColorExtractor();
        WallpaperLocalColorExtractor spyColorExtractor = getSpyWallpaperLocalColorExtractor();
        int nSimulations = 10;
        for (int i = 0; i < nSimulations; i++) {
            resetCounters();
            int width = randomBetween(VERY_LOW_BMP_WIDTH, LOW_BMP_WIDTH);
            int height = randomBetween(VERY_LOW_BMP_HEIGHT, LOW_BMP_HEIGHT);
            Bitmap bitmap = getMockBitmap(width, height);
            spyWallpaperColorExtractor.onBitmapChanged(bitmap);
            spyColorExtractor.onBitmapChanged(bitmap);

            assertThat(mMiniBitmapUpdatedCount).isEqualTo(1);
            assertThat(Math.max(mMiniBitmapWidth, mMiniBitmapHeight))
                    .isAtMost(WallpaperColorExtractor.SMALL_SIDE);
                    .isAtMost(WallpaperLocalColorExtractor.SMALL_SIDE);
        }
    }

@@ -228,15 +228,15 @@ public class WallpaperColorExtractorTest extends SysuiTestCase {
        int nSimulations = 10;
        for (int i = 0; i < nSimulations; i++) {
            resetCounters();
            WallpaperColorExtractor spyWallpaperColorExtractor = getSpyWallpaperColorExtractor();
            WallpaperLocalColorExtractor spyColorExtractor = getSpyWallpaperLocalColorExtractor();
            List<RectF> regions = listOfRandomAreas(MIN_AREAS, MAX_AREAS);
            int nPages = randomBetween(PAGES_LOW, PAGES_HIGH);
            List<Runnable> tasks = Arrays.asList(
                    () -> spyWallpaperColorExtractor.onPageChanged(nPages),
                    () -> spyWallpaperColorExtractor.onBitmapChanged(bitmap),
                    () -> spyWallpaperColorExtractor.setDisplayDimensions(
                    () -> spyColorExtractor.onPageChanged(nPages),
                    () -> spyColorExtractor.onBitmapChanged(bitmap),
                    () -> spyColorExtractor.setDisplayDimensions(
                            DISPLAY_WIDTH, DISPLAY_HEIGHT),
                    () -> spyWallpaperColorExtractor.addLocalColorsAreas(
                    () -> spyColorExtractor.addLocalColorsAreas(
                            regions));
            Collections.shuffle(tasks);
            tasks.forEach(Runnable::run);
@@ -245,7 +245,7 @@ public class WallpaperColorExtractorTest extends SysuiTestCase {
            assertThat(mMiniBitmapUpdatedCount).isEqualTo(1);
            assertThat(mColorsProcessed).isEqualTo(regions.size());

            spyWallpaperColorExtractor.removeLocalColorAreas(regions);
            spyColorExtractor.removeLocalColorAreas(regions);
            assertThat(mDeactivatedCount).isEqualTo(1);
        }
    }
@@ -260,7 +260,7 @@ public class WallpaperColorExtractorTest extends SysuiTestCase {
        int nSimulations = 10;
        for (int i = 0; i < nSimulations; i++) {
            resetCounters();
            WallpaperColorExtractor spyWallpaperColorExtractor = getSpyWallpaperColorExtractor();
            WallpaperLocalColorExtractor 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<>();
@@ -268,20 +268,20 @@ public class WallpaperColorExtractorTest extends SysuiTestCase {
            regions.addAll(regions2);
            int nPages = randomBetween(PAGES_LOW, PAGES_HIGH);
            List<Runnable> tasks = Arrays.asList(
                    () -> spyWallpaperColorExtractor.onPageChanged(nPages),
                    () -> spyWallpaperColorExtractor.onBitmapChanged(bitmap),
                    () -> spyWallpaperColorExtractor.setDisplayDimensions(
                    () -> spyColorExtractor.onPageChanged(nPages),
                    () -> spyColorExtractor.onBitmapChanged(bitmap),
                    () -> spyColorExtractor.setDisplayDimensions(
                            DISPLAY_WIDTH, DISPLAY_HEIGHT),
                    () -> spyWallpaperColorExtractor.removeLocalColorAreas(regions1));
                    () -> spyColorExtractor.removeLocalColorAreas(regions1));

            spyWallpaperColorExtractor.addLocalColorsAreas(regions);
            spyColorExtractor.addLocalColorsAreas(regions);
            assertThat(mActivatedCount).isEqualTo(1);
            Collections.shuffle(tasks);
            tasks.forEach(Runnable::run);

            assertThat(mMiniBitmapUpdatedCount).isEqualTo(1);
            assertThat(mDeactivatedCount).isEqualTo(0);
            spyWallpaperColorExtractor.removeLocalColorAreas(regions2);
            spyColorExtractor.removeLocalColorAreas(regions2);
            assertThat(mDeactivatedCount).isEqualTo(1);
        }
    }
@@ -295,18 +295,18 @@ public class WallpaperColorExtractorTest extends SysuiTestCase {
    @Test
    public void testRecomputeColorExtraction() {
        Bitmap bitmap = getMockBitmap(HIGH_BMP_WIDTH, HIGH_BMP_HEIGHT);
        WallpaperColorExtractor spyWallpaperColorExtractor = getSpyWallpaperColorExtractor();
        WallpaperLocalColorExtractor 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<>();
        regions.addAll(regions1);
        regions.addAll(regions2);
        spyWallpaperColorExtractor.addLocalColorsAreas(regions);
        spyColorExtractor.addLocalColorsAreas(regions);
        assertThat(mActivatedCount).isEqualTo(1);
        int nPages = PAGES_LOW;
        spyWallpaperColorExtractor.onBitmapChanged(bitmap);
        spyWallpaperColorExtractor.onPageChanged(nPages);
        spyWallpaperColorExtractor.setDisplayDimensions(DISPLAY_WIDTH, DISPLAY_HEIGHT);
        spyColorExtractor.onBitmapChanged(bitmap);
        spyColorExtractor.onPageChanged(nPages);
        spyColorExtractor.setDisplayDimensions(DISPLAY_WIDTH, DISPLAY_HEIGHT);

        int nSimulations = 20;
        for (int i = 0; i < nSimulations; i++) {
@@ -315,22 +315,22 @@ public class WallpaperColorExtractorTest extends SysuiTestCase {
            // verify that if we remove some regions, they are not recomputed after other changes
            if (i == nSimulations / 2) {
                regions.removeAll(regions2);
                spyWallpaperColorExtractor.removeLocalColorAreas(regions2);
                spyColorExtractor.removeLocalColorAreas(regions2);
            }

            if (Math.random() >= 0.5) {
                int nPagesNew = randomBetween(PAGES_LOW, PAGES_HIGH);
                if (nPagesNew == nPages) continue;
                nPages = nPagesNew;
                spyWallpaperColorExtractor.onPageChanged(nPagesNew);
                spyColorExtractor.onPageChanged(nPagesNew);
            } else {
                Bitmap newBitmap = getMockBitmap(HIGH_BMP_WIDTH, HIGH_BMP_HEIGHT);
                spyWallpaperColorExtractor.onBitmapChanged(newBitmap);
                spyColorExtractor.onBitmapChanged(newBitmap);
                assertThat(mMiniBitmapUpdatedCount).isEqualTo(1);
            }
            assertThat(mColorsProcessed).isEqualTo(regions.size());
        }
        spyWallpaperColorExtractor.removeLocalColorAreas(regions);
        spyColorExtractor.removeLocalColorAreas(regions);
        assertThat(mDeactivatedCount).isEqualTo(1);
    }

@@ -339,12 +339,12 @@ public class WallpaperColorExtractorTest extends SysuiTestCase {
        resetCounters();
        Bitmap bitmap = getMockBitmap(HIGH_BMP_WIDTH, HIGH_BMP_HEIGHT);
        doNothing().when(bitmap).recycle();
        WallpaperColorExtractor spyWallpaperColorExtractor = getSpyWallpaperColorExtractor();
        spyWallpaperColorExtractor.onPageChanged(PAGES_LOW);
        spyWallpaperColorExtractor.onBitmapChanged(bitmap);
        WallpaperLocalColorExtractor spyColorExtractor = getSpyWallpaperLocalColorExtractor();
        spyColorExtractor.onPageChanged(PAGES_LOW);
        spyColorExtractor.onBitmapChanged(bitmap);
        assertThat(mMiniBitmapUpdatedCount).isEqualTo(1);
        spyWallpaperColorExtractor.cleanUp();
        spyWallpaperColorExtractor.addLocalColorsAreas(listOfRandomAreas(MIN_AREAS, MAX_AREAS));
        spyColorExtractor.cleanUp();
        spyColorExtractor.addLocalColorsAreas(listOfRandomAreas(MIN_AREAS, MAX_AREAS));
        assertThat(mColorsProcessed).isEqualTo(0);
    }
}