summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/dynamicui
diff options
context:
space:
mode:
authorSunny Goyal <sunnygoyal@google.com>2016-11-08 09:37:10 -0800
committerSunny Goyal <sunnygoyal@google.com>2016-11-08 09:37:34 -0800
commita9f1e720f99250d362df343bd51958b944a96223 (patch)
tree0bc2c278f8acd320c6c7d1646a0635a587d76513 /src/com/android/launcher3/dynamicui
parent99014e5c4384fe328e4624e3303ef60e79d210b5 (diff)
downloadandroid_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.java43
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();
+ }
}