Loading packages/SystemUI/multivalentTests/src/com/android/systemui/wallpapers/WallpaperLocalColorExtractorTest.java→packages/SystemUI/multivalentTests/src/com/android/systemui/wallpapers/ImageWallpaperColorExtractorTest.java +17 −17 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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++; Loading @@ -140,7 +140,7 @@ public class WallpaperLocalColorExtractorTest extends SysuiTestCase { mDeactivatedCount++; } }); WallpaperLocalColorExtractor spyColorExtractor = spy(colorExtractor); ImageWallpaperColorExtractor spyColorExtractor = spy(colorExtractor); doAnswer(invocation -> { mMiniBitmapWidth = invocation.getArgument(1); Loading Loading @@ -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(); Loading @@ -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); } } Loading @@ -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(); Loading @@ -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); } } Loading @@ -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( Loading Loading @@ -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<>(); Loading Loading @@ -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<>(); Loading Loading @@ -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(); Loading @@ -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); Loading @@ -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); Loading @@ -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); Loading @@ -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); Loading packages/SystemUI/src/com/android/systemui/wallpapers/ImageWallpaper.java +13 −13 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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() { Loading Loading @@ -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); } } Loading Loading @@ -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 Loading Loading @@ -445,7 +445,7 @@ public class ImageWallpaper extends WallpaperService { @VisibleForTesting void recomputeColorExtractorMiniBitmap() { mWallpaperLocalColorExtractor.onBitmapChanged(mBitmap); mColorExtractor.onBitmapChanged(mBitmap); } @VisibleForTesting Loading @@ -455,7 +455,7 @@ public class ImageWallpaper extends WallpaperService { @Override public @Nullable WallpaperColors onComputeColors() { return mWallpaperLocalColorExtractor.onComputeColors(); return mColorExtractor.onComputeColors(); } @Override Loading @@ -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 Loading @@ -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 Loading Loading @@ -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 Loading @@ -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); } } } packages/SystemUI/src/com/android/systemui/wallpapers/WallpaperLocalColorExtractor.java→packages/SystemUI/src/com/android/systemui/wallpapers/ImageWallpaperColorExtractor.java +18 −20 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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 Loading Loading @@ -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; } /** Loading Loading @@ -177,7 +175,7 @@ public class WallpaperLocalColorExtractor { mBitmapWidth = bitmap.getWidth(); mBitmapHeight = bitmap.getHeight(); mMiniBitmap = createMiniBitmap(bitmap); mWallpaperLocalColorExtractorCallback.onMiniBitmapUpdated(); mColorExtractorCallback.onMiniBitmapUpdated(); if (mRecomputeColors) recomputeColorsInternal(); recomputeLocalColors(); } Loading Loading @@ -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); Loading @@ -242,7 +240,7 @@ public class WallpaperLocalColorExtractor { private void recomputeColorsInternal() { if (mMiniBitmap == null) return; mWallpaperColors = getWallpaperColors(mMiniBitmap, mWallpaperDimAmount); mWallpaperLocalColorExtractorCallback.onColorsProcessed(); mColorExtractorCallback.onColorsProcessed(); } @VisibleForTesting Loading Loading @@ -277,7 +275,7 @@ public class WallpaperLocalColorExtractor { boolean wasActive = isActive(); mPendingRegions.addAll(regions); if (!wasActive && isActive()) { mWallpaperLocalColorExtractorCallback.onActivated(); mColorExtractorCallback.onActivated(); } processLocalColorsInternal(); } Loading @@ -299,7 +297,7 @@ public class WallpaperLocalColorExtractor { mPendingRegions.removeAll(regions); regions.forEach(mProcessedRegions::remove); if (wasActive && !isActive()) { mWallpaperLocalColorExtractorCallback.onDeactivated(); mColorExtractorCallback.onDeactivated(); } } } Loading @@ -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)); Loading Loading @@ -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. Loading Loading @@ -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); Loading @@ -443,7 +441,7 @@ public class WallpaperLocalColorExtractor { mPendingRegions.clear(); Trace.endSection(); mWallpaperLocalColorExtractorCallback.onColorsProcessed(processedRegions, processedColors); mColorExtractorCallback.onColorsProcessed(processedRegions, processedColors); } /** Loading Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/wallpapers/WallpaperLocalColorExtractorTest.java→packages/SystemUI/multivalentTests/src/com/android/systemui/wallpapers/ImageWallpaperColorExtractorTest.java +17 −17 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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++; Loading @@ -140,7 +140,7 @@ public class WallpaperLocalColorExtractorTest extends SysuiTestCase { mDeactivatedCount++; } }); WallpaperLocalColorExtractor spyColorExtractor = spy(colorExtractor); ImageWallpaperColorExtractor spyColorExtractor = spy(colorExtractor); doAnswer(invocation -> { mMiniBitmapWidth = invocation.getArgument(1); Loading Loading @@ -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(); Loading @@ -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); } } Loading @@ -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(); Loading @@ -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); } } Loading @@ -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( Loading Loading @@ -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<>(); Loading Loading @@ -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<>(); Loading Loading @@ -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(); Loading @@ -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); Loading @@ -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); Loading @@ -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); Loading @@ -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); Loading
packages/SystemUI/src/com/android/systemui/wallpapers/ImageWallpaper.java +13 −13 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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() { Loading Loading @@ -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); } } Loading Loading @@ -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 Loading Loading @@ -445,7 +445,7 @@ public class ImageWallpaper extends WallpaperService { @VisibleForTesting void recomputeColorExtractorMiniBitmap() { mWallpaperLocalColorExtractor.onBitmapChanged(mBitmap); mColorExtractor.onBitmapChanged(mBitmap); } @VisibleForTesting Loading @@ -455,7 +455,7 @@ public class ImageWallpaper extends WallpaperService { @Override public @Nullable WallpaperColors onComputeColors() { return mWallpaperLocalColorExtractor.onComputeColors(); return mColorExtractor.onComputeColors(); } @Override Loading @@ -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 Loading @@ -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 Loading Loading @@ -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 Loading @@ -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); } } }
packages/SystemUI/src/com/android/systemui/wallpapers/WallpaperLocalColorExtractor.java→packages/SystemUI/src/com/android/systemui/wallpapers/ImageWallpaperColorExtractor.java +18 −20 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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 Loading Loading @@ -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; } /** Loading Loading @@ -177,7 +175,7 @@ public class WallpaperLocalColorExtractor { mBitmapWidth = bitmap.getWidth(); mBitmapHeight = bitmap.getHeight(); mMiniBitmap = createMiniBitmap(bitmap); mWallpaperLocalColorExtractorCallback.onMiniBitmapUpdated(); mColorExtractorCallback.onMiniBitmapUpdated(); if (mRecomputeColors) recomputeColorsInternal(); recomputeLocalColors(); } Loading Loading @@ -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); Loading @@ -242,7 +240,7 @@ public class WallpaperLocalColorExtractor { private void recomputeColorsInternal() { if (mMiniBitmap == null) return; mWallpaperColors = getWallpaperColors(mMiniBitmap, mWallpaperDimAmount); mWallpaperLocalColorExtractorCallback.onColorsProcessed(); mColorExtractorCallback.onColorsProcessed(); } @VisibleForTesting Loading Loading @@ -277,7 +275,7 @@ public class WallpaperLocalColorExtractor { boolean wasActive = isActive(); mPendingRegions.addAll(regions); if (!wasActive && isActive()) { mWallpaperLocalColorExtractorCallback.onActivated(); mColorExtractorCallback.onActivated(); } processLocalColorsInternal(); } Loading @@ -299,7 +297,7 @@ public class WallpaperLocalColorExtractor { mPendingRegions.removeAll(regions); regions.forEach(mProcessedRegions::remove); if (wasActive && !isActive()) { mWallpaperLocalColorExtractorCallback.onDeactivated(); mColorExtractorCallback.onDeactivated(); } } } Loading @@ -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)); Loading Loading @@ -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. Loading Loading @@ -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); Loading @@ -443,7 +441,7 @@ public class WallpaperLocalColorExtractor { mPendingRegions.clear(); Trace.endSection(); mWallpaperLocalColorExtractorCallback.onColorsProcessed(processedRegions, processedColors); mColorExtractorCallback.onColorsProcessed(processedRegions, processedColors); } /** Loading