summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/dynamicui/ColorExtractionService.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/launcher3/dynamicui/ColorExtractionService.java')
-rw-r--r--src/com/android/launcher3/dynamicui/ColorExtractionService.java93
1 files changed, 63 insertions, 30 deletions
diff --git a/src/com/android/launcher3/dynamicui/ColorExtractionService.java b/src/com/android/launcher3/dynamicui/ColorExtractionService.java
index f94d442e0..a2e118e26 100644
--- a/src/com/android/launcher3/dynamicui/ColorExtractionService.java
+++ b/src/com/android/launcher3/dynamicui/ColorExtractionService.java
@@ -17,15 +17,17 @@
package com.android.launcher3.dynamicui;
import android.annotation.TargetApi;
-import android.app.IntentService;
import android.app.WallpaperManager;
-import android.content.Intent;
+import android.app.job.JobParameters;
+import android.app.job.JobService;
import android.graphics.Bitmap;
import android.graphics.BitmapRegionDecoder;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.os.Build;
import android.os.Bundle;
+import android.os.Handler;
+import android.os.HandlerThread;
import android.os.ParcelFileDescriptor;
import android.support.v7.graphics.Palette;
import android.util.Log;
@@ -41,45 +43,76 @@ import java.io.IOException;
/**
* Extracts colors from the wallpaper, and saves results to {@link LauncherProvider}.
*/
-public class ColorExtractionService extends IntentService {
+public class ColorExtractionService extends JobService {
private static final String TAG = "ColorExtractionService";
+ private static final boolean DEBUG = false;
/** The fraction of the wallpaper to extract colors for use on the hotseat. */
private static final float HOTSEAT_FRACTION = 1f / 4;
- public ColorExtractionService() {
- super("ColorExtractionService");
+ private HandlerThread mWorkerThread;
+ private Handler mWorkerHandler;
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ mWorkerThread = new HandlerThread("ColorExtractionService");
+ mWorkerThread.start();
+ mWorkerHandler = new Handler(mWorkerThread.getLooper());
}
@Override
- protected void onHandleIntent(Intent intent) {
- WallpaperManager wallpaperManager = WallpaperManager.getInstance(this);
- int wallpaperId = ExtractionUtils.getWallpaperId(wallpaperManager);
-
- ExtractedColors extractedColors = new ExtractedColors();
- if (wallpaperManager.getWallpaperInfo() != null) {
- // We can't extract colors from live wallpapers, so just use the default color always.
- extractedColors.updateHotseatPalette(null);
- } else {
- // We extract colors for the hotseat and status bar separately,
- // since they only consider part of the wallpaper.
- extractedColors.updateHotseatPalette(getHotseatPalette());
-
- if (FeatureFlags.LIGHT_STATUS_BAR) {
- extractedColors.updateStatusBarPalette(getStatusBarPalette());
+ public void onDestroy() {
+ super.onDestroy();
+ mWorkerThread.quit();
+ }
+
+ @Override
+ public boolean onStartJob(final JobParameters jobParameters) {
+ if (DEBUG) Log.d(TAG, "onStartJob");
+ mWorkerHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ WallpaperManager wallpaperManager = WallpaperManager.getInstance(
+ ColorExtractionService.this);
+ int wallpaperId = ExtractionUtils.getWallpaperId(wallpaperManager);
+
+ ExtractedColors extractedColors = new ExtractedColors();
+ if (wallpaperManager.getWallpaperInfo() != null) {
+ // We can't extract colors from live wallpapers; always use the default color.
+ extractedColors.updateHotseatPalette(null);
+ } else {
+ // We extract colors for the hotseat and status bar separately,
+ // since they only consider part of the wallpaper.
+ extractedColors.updateHotseatPalette(getHotseatPalette());
+
+ if (FeatureFlags.LIGHT_STATUS_BAR) {
+ extractedColors.updateStatusBarPalette(getStatusBarPalette());
+ }
+ }
+
+ // Save the extracted colors and wallpaper id to LauncherProvider.
+ String colorsString = extractedColors.encodeAsString();
+ Bundle extras = new Bundle();
+ extras.putInt(LauncherSettings.Settings.EXTRA_WALLPAPER_ID, wallpaperId);
+ extras.putString(LauncherSettings.Settings.EXTRA_EXTRACTED_COLORS, colorsString);
+ getContentResolver().call(
+ LauncherSettings.Settings.CONTENT_URI,
+ LauncherSettings.Settings.METHOD_SET_EXTRACTED_COLORS_AND_WALLPAPER_ID,
+ null, extras);
+ jobFinished(jobParameters, false /* needsReschedule */);
+ if (DEBUG) Log.d(TAG, "job finished!");
}
- }
+ });
+ return true;
+ }
- // Save the extracted colors and wallpaper id to LauncherProvider.
- String colorsString = extractedColors.encodeAsString();
- Bundle extras = new Bundle();
- extras.putInt(LauncherSettings.Settings.EXTRA_WALLPAPER_ID, wallpaperId);
- extras.putString(LauncherSettings.Settings.EXTRA_EXTRACTED_COLORS, colorsString);
- getContentResolver().call(
- LauncherSettings.Settings.CONTENT_URI,
- LauncherSettings.Settings.METHOD_SET_EXTRACTED_COLORS_AND_WALLPAPER_ID,
- null, extras);
+ @Override
+ public boolean onStopJob(JobParameters jobParameters) {
+ if (DEBUG) Log.d(TAG, "onStopJob");
+ mWorkerHandler.removeCallbacksAndMessages(null);
+ return true;
}
@TargetApi(Build.VERSION_CODES.N)