diff options
author | Sunny Goyal <sunnygoyal@google.com> | 2016-11-08 09:37:10 -0800 |
---|---|---|
committer | Sunny Goyal <sunnygoyal@google.com> | 2016-11-08 09:37:34 -0800 |
commit | a9f1e720f99250d362df343bd51958b944a96223 (patch) | |
tree | 0bc2c278f8acd320c6c7d1646a0635a587d76513 /src/com/android/launcher3/dynamicui | |
parent | 99014e5c4384fe328e4624e3303ef60e79d210b5 (diff) | |
download | android_packages_apps_Trebuchet-a9f1e720f99250d362df343bd51958b944a96223.tar.gz android_packages_apps_Trebuchet-a9f1e720f99250d362df343bd51958b944a96223.tar.bz2 android_packages_apps_Trebuchet-a9f1e720f99250d362df343bd51958b944a96223.zip |
Changing status bar color extraction to use region decoder
Change-Id: Ie9913a9cb28948128e6624dc3a335c790fa5a11a
Diffstat (limited to 'src/com/android/launcher3/dynamicui')
-rw-r--r-- | src/com/android/launcher3/dynamicui/ColorExtractionService.java | 43 |
1 files changed, 33 insertions, 10 deletions
diff --git a/src/com/android/launcher3/dynamicui/ColorExtractionService.java b/src/com/android/launcher3/dynamicui/ColorExtractionService.java index 193b193de..1a127dc8f 100644 --- a/src/com/android/launcher3/dynamicui/ColorExtractionService.java +++ b/src/com/android/launcher3/dynamicui/ColorExtractionService.java @@ -64,17 +64,10 @@ public class ColorExtractionService extends IntentService { } else { // We extract colors for the hotseat and status bar separately, // since they only consider part of the wallpaper. - extractedColors.updateHotseatPalette(getHotseatPallete()); + extractedColors.updateHotseatPalette(getHotseatPalette()); if (FeatureFlags.LIGHT_STATUS_BAR) { - int statusBarHeight = getResources() - .getDimensionPixelSize(R.dimen.status_bar_height); - Bitmap wallpaper = ((BitmapDrawable) wallpaperManager.getDrawable()).getBitmap(); - Palette statusBarPalette = Palette.from(wallpaper) - .setRegion(0, 0, wallpaper.getWidth(), statusBarHeight) - .clearFilters() - .generate(); - extractedColors.updateStatusBarPalette(statusBarPalette); + extractedColors.updateStatusBarPalette(getStatusBarPalette()); } } @@ -90,7 +83,7 @@ public class ColorExtractionService extends IntentService { } @TargetApi(Build.VERSION_CODES.N) - private Palette getHotseatPallete() { + private Palette getHotseatPalette() { WallpaperManager wallpaperManager = WallpaperManager.getInstance(this); if (Utilities.ATLEAST_NOUGAT) { try (ParcelFileDescriptor fd = wallpaperManager @@ -117,4 +110,34 @@ public class ColorExtractionService extends IntentService { .clearFilters() .generate(); } + + @TargetApi(Build.VERSION_CODES.N) + private Palette getStatusBarPalette() { + WallpaperManager wallpaperManager = WallpaperManager.getInstance(this); + int statusBarHeight = getResources() + .getDimensionPixelSize(R.dimen.status_bar_height); + + if (Utilities.ATLEAST_NOUGAT) { + try (ParcelFileDescriptor fd = wallpaperManager + .getWallpaperFile(WallpaperManager.FLAG_SYSTEM)) { + BitmapRegionDecoder decoder = BitmapRegionDecoder + .newInstance(fd.getFileDescriptor(), false); + Rect decodeRegion = new Rect(0, 0, + decoder.getWidth(), statusBarHeight); + Bitmap bitmap = decoder.decodeRegion(decodeRegion, null); + decoder.recycle(); + if (bitmap != null) { + return Palette.from(bitmap).clearFilters().generate(); + } + } catch (IOException e) { + Log.e(TAG, "Fetching partial bitmap failed, trying old method", e); + } + } + + Bitmap wallpaper = ((BitmapDrawable) wallpaperManager.getDrawable()).getBitmap(); + return Palette.from(wallpaper) + .setRegion(0, 0, wallpaper.getWidth(), statusBarHeight) + .clearFilters() + .generate(); + } } |