From e4ddd026d99ea67da3b0b9aad37bd653189bd129 Mon Sep 17 00:00:00 2001 From: deletescape Date: Wed, 14 Jun 2017 11:33:24 +0200 Subject: [PATCH] Improved Settings management --- .../deletescape/lawnchair/BubbleTextView.java | 2 +- src/ch/deletescape/lawnchair/Hotseat.java | 3 +- src/ch/deletescape/lawnchair/Launcher.java | 11 +++ .../lawnchair/LauncherAppState.java | 5 ++ .../deletescape/lawnchair/LauncherModel.java | 2 +- .../lawnchair/SettingsActivity.java | 4 - src/ch/deletescape/lawnchair/Workspace.java | 34 +++++--- .../allapps/AllAppsTransitionController.java | 10 ++- .../lawnchair/dragndrop/DragLayer.java | 6 ++ .../dynamicui/ColorExtractionService.java | 21 ++--- .../lawnchair/dynamicui/ExtractedColors.java | 76 ++++++++++------ .../PageIndicatorLineCaret.java | 4 +- .../lawnchair/settings/Settings.java | 87 +++++++++++++++++++ 13 files changed, 200 insertions(+), 65 deletions(-) create mode 100644 src/ch/deletescape/lawnchair/settings/Settings.java diff --git a/src/ch/deletescape/lawnchair/BubbleTextView.java b/src/ch/deletescape/lawnchair/BubbleTextView.java index 5b89cdf739d..58ba4a25aa0 100644 --- a/src/ch/deletescape/lawnchair/BubbleTextView.java +++ b/src/ch/deletescape/lawnchair/BubbleTextView.java @@ -127,7 +127,7 @@ public BubbleTextView(Context context, AttributeSet attrs, int defStyle) { setCompoundDrawablePadding(grid.allAppsIconDrawablePaddingPx); defaultIconSize = grid.allAppsIconSizePx; if (Utilities.getPrefs(getContext()).getFloat("pref_allAppsOpacitySB", 1f) < .5f) { - setTextColor(Utilities.getColor(getContext(), ExtractedColors.DOMINANT_FOREGROUND_INDEX, Color.WHITE)); + setTextColor(Utilities.getColor(getContext(), ExtractedColors.VIBRANT_FOREGROUND_INDEX, Color.WHITE)); } } else if (display == DISPLAY_FOLDER) { setCompoundDrawablePadding(grid.folderChildDrawablePaddingPx); diff --git a/src/ch/deletescape/lawnchair/Hotseat.java b/src/ch/deletescape/lawnchair/Hotseat.java index 02e948c3487..c6f50b8d208 100644 --- a/src/ch/deletescape/lawnchair/Hotseat.java +++ b/src/ch/deletescape/lawnchair/Hotseat.java @@ -21,7 +21,6 @@ import android.animation.ArgbEvaluator; import android.animation.ValueAnimator; import android.content.Context; -import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.support.v4.content.ContextCompat; import android.support.v4.graphics.ColorUtils; @@ -115,7 +114,7 @@ public boolean onInterceptTouchEvent(MotionEvent ev) { } public void updateColor(ExtractedColors extractedColors, boolean animate) { - int color = extractedColors.getColor(ExtractedColors.HOTSEAT_INDEX, Color.TRANSPARENT); + int color = extractedColors.getHotseatColor(getContext()); if (mBackgroundColorAnimator != null) { mBackgroundColorAnimator.cancel(); } diff --git a/src/ch/deletescape/lawnchair/Launcher.java b/src/ch/deletescape/lawnchair/Launcher.java index 28d5241b5f4..1b66e41d2e3 100644 --- a/src/ch/deletescape/lawnchair/Launcher.java +++ b/src/ch/deletescape/lawnchair/Launcher.java @@ -107,6 +107,7 @@ import ch.deletescape.lawnchair.folder.FolderIcon; import ch.deletescape.lawnchair.keyboard.ViewGroupFocusHelper; import ch.deletescape.lawnchair.model.WidgetsModel; +import ch.deletescape.lawnchair.settings.Settings; import ch.deletescape.lawnchair.shortcuts.DeepShortcutManager; import ch.deletescape.lawnchair.shortcuts.DeepShortcutsContainer; import ch.deletescape.lawnchair.shortcuts.ShortcutKey; @@ -391,6 +392,8 @@ protected void onCreate(Bundle savedInstanceState) { registerReceiver(mUiBroadcastReceiver, filter); mLauncherTab = new LauncherTab(this); + + Settings.init(this); } @Override @@ -407,6 +410,14 @@ private void loadExtractedColorsAndColorItems() { activateLightStatusBar(isAllAppsVisible()); } + public ExtractedColors getExtractedColors() { + return mExtractedColors; + } + + public AllAppsTransitionController getAllAppsController() { + return mAllAppsController; + } + /** * Sets the status bar to be light or not. Light status bar means dark icons. * diff --git a/src/ch/deletescape/lawnchair/LauncherAppState.java b/src/ch/deletescape/lawnchair/LauncherAppState.java index 73d9d30360e..843e98c684b 100644 --- a/src/ch/deletescape/lawnchair/LauncherAppState.java +++ b/src/ch/deletescape/lawnchair/LauncherAppState.java @@ -129,6 +129,11 @@ public void reloadWorkspace() { mModel.startLoaderFromBackground(); } + public void reloadAllApps() { + mModel.resetLoadedState(true, false); + mModel.startLoaderFromBackground(); + } + public void reloadAll(boolean showWorkspace) { mModel.resetLoadedState(true, true); mModel.startLoaderFromBackground(); diff --git a/src/ch/deletescape/lawnchair/LauncherModel.java b/src/ch/deletescape/lawnchair/LauncherModel.java index 498612a2810..7d1b57604e1 100644 --- a/src/ch/deletescape/lawnchair/LauncherModel.java +++ b/src/ch/deletescape/lawnchair/LauncherModel.java @@ -2683,7 +2683,7 @@ public void run() { runOnMainThread(r); } - private void loadAllApps() { + public void loadAllApps() { final Callbacks oldCallbacks = mCallbacks.get(); if (oldCallbacks == null) { diff --git a/src/ch/deletescape/lawnchair/SettingsActivity.java b/src/ch/deletescape/lawnchair/SettingsActivity.java index c77457aaf18..e28e1f43b46 100644 --- a/src/ch/deletescape/lawnchair/SettingsActivity.java +++ b/src/ch/deletescape/lawnchair/SettingsActivity.java @@ -63,10 +63,6 @@ public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preferen @Override public void onDestroy() { super.onDestroy(); - LauncherAppState app = LauncherAppState.getInstanceNoCreate(); - if (app != null) { - app.reloadAll(true); - } } } } diff --git a/src/ch/deletescape/lawnchair/Workspace.java b/src/ch/deletescape/lawnchair/Workspace.java index 67f1e898fa5..c72a75c7f54 100644 --- a/src/ch/deletescape/lawnchair/Workspace.java +++ b/src/ch/deletescape/lawnchair/Workspace.java @@ -571,6 +571,24 @@ public void bindAndInitFirstWorkspaceScreen(View qsb) { // Add the first page CellLayout firstPage = insertNewWorkspaceScreen(Workspace.FIRST_SCREEN_ID, 0); + initPullDownToSearch(); + // Always add a QSB on the first screen. + if (qsb == null) { + // In transposed layout, we add the QSB in the Grid. As workspace does not touch the + // edges, we do not need a full width QSB. + qsb = mLauncher.getLayoutInflater().inflate(R.layout.qsb_blocker_view, + firstPage, false); + } + + CellLayout.LayoutParams lp = new CellLayout.LayoutParams(0, 0, firstPage.getCountX(), 1); + lp.canReorder = false; + if (!firstPage.addViewToCellLayout(qsb, 0, getEmbeddedQsbId(), lp, FeatureFlags.showPixelBar(getContext()))) { + Log.e(TAG, "Failed to add to item at (0, 0) to CellLayout"); + } + } + + public void initPullDownToSearch() { + CellLayout firstPage = mWorkspaceScreens.get(FIRST_SCREEN_ID); if (FeatureFlags.pulldownSearch(getContext().getApplicationContext())) { firstPage.setOnTouchListener(new VerticalFlingDetector(mLauncher) { // detect fling when touch started from empty space @@ -597,19 +615,9 @@ public boolean onTouch(View v, MotionEvent ev) { return false; } }); - } - // Always add a QSB on the first screen. - if (qsb == null) { - // In transposed layout, we add the QSB in the Grid. As workspace does not touch the - // edges, we do not need a full width QSB. - qsb = mLauncher.getLayoutInflater().inflate(R.layout.qsb_blocker_view, - firstPage, false); - } - - CellLayout.LayoutParams lp = new CellLayout.LayoutParams(0, 0, firstPage.getCountX(), 1); - lp.canReorder = false; - if (!firstPage.addViewToCellLayout(qsb, 0, getEmbeddedQsbId(), lp, FeatureFlags.showPixelBar(getContext()))) { - Log.e(TAG, "Failed to add to item at (0, 0) to CellLayout"); + } else { + firstPage.setOnTouchListener(null); + firstPage.setOnInterceptTouchListener(null); } } diff --git a/src/ch/deletescape/lawnchair/allapps/AllAppsTransitionController.java b/src/ch/deletescape/lawnchair/allapps/AllAppsTransitionController.java index 3a463d764e5..9d0212672ce 100644 --- a/src/ch/deletescape/lawnchair/allapps/AllAppsTransitionController.java +++ b/src/ch/deletescape/lawnchair/allapps/AllAppsTransitionController.java @@ -23,7 +23,6 @@ import ch.deletescape.lawnchair.LauncherAppWidgetHostView; import ch.deletescape.lawnchair.R; import ch.deletescape.lawnchair.ShortcutAndWidgetContainer; -import ch.deletescape.lawnchair.Utilities; import ch.deletescape.lawnchair.Workspace; import ch.deletescape.lawnchair.util.TouchController; @@ -90,6 +89,8 @@ public class AllAppsTransitionController implements TouchController, VerticalPul private boolean mIsTranslateWithoutWorkspace = false; private AnimatorSet mDiscoBounceAnimation; + private int allAppsAlpha; + public AllAppsTransitionController(Launcher l) { mLauncher = l; mDetector = new VerticalPullDetector(l); @@ -100,6 +101,10 @@ public AllAppsTransitionController(Launcher l) { mAllAppsBackgroundColor = ContextCompat.getColor(l, R.color.all_apps_container_color); } + public void setAllAppsAlpha(int allAppsAlpha) { + this.allAppsAlpha = allAppsAlpha; + } + @Override public boolean onInterceptTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { @@ -269,8 +274,7 @@ public void setProgress(float progress) { float alpha = 1f - progress; float interpolation = mAccelInterpolator.getInterpolation(progress); - int tmpAlpha = (int) (Utilities.getPrefs(mLauncher.getApplicationContext()).getFloat("pref_allAppsOpacitySB", 1f) * 255); - int allAppsBg = ColorUtils.setAlphaComponent(mAllAppsBackgroundColor, tmpAlpha); + int allAppsBg = ColorUtils.setAlphaComponent(mAllAppsBackgroundColor, allAppsAlpha); int color = (int) mEvaluator.evaluate(mDecelInterpolator.getInterpolation(alpha), mHotseatBackgroundColor, allAppsBg); mAppsView.setRevealDrawableColor(color); diff --git a/src/ch/deletescape/lawnchair/dragndrop/DragLayer.java b/src/ch/deletescape/lawnchair/dragndrop/DragLayer.java index 9926e2ae000..facf0282e93 100644 --- a/src/ch/deletescape/lawnchair/dragndrop/DragLayer.java +++ b/src/ch/deletescape/lawnchair/dragndrop/DragLayer.java @@ -135,6 +135,7 @@ public class DragLayer extends InsettableFrameLayout { private AllAppsTransitionController mAllAppsController; private TouchController mActiveController; + public boolean mIsAccesibilityEnabled; /** * Used to create a new DragLayer from XML. @@ -179,6 +180,7 @@ public boolean dispatchKeyEvent(KeyEvent event) { } public void onAccessibilityStateChanged(boolean isAccessibilityEnabled) { + mIsAccesibilityEnabled = isAccessibilityEnabled; mPinchListener = !FeatureFlags.pinchToOverview(getContext().getApplicationContext()) || isAccessibilityEnabled ? null : new PinchToOverviewListener(mLauncher); } @@ -627,6 +629,7 @@ public int getY() { } } + @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); int count = getChildCount(); @@ -739,6 +742,7 @@ public void animateViewIntoPosition(DragView dragView, final View child, int dur final int fromY = r.top; child.setVisibility(INVISIBLE); Runnable onCompleteRunnable = new Runnable() { + @Override public void run() { child.setVisibility(VISIBLE); if (onFinishAnimationRunnable != null) { @@ -881,6 +885,7 @@ public void animateView(final DragView view, AnimatorUpdateListener updateCb, in mDropAnim.setFloatValues(0f, 1f); mDropAnim.addUpdateListener(updateCb); mDropAnim.addListener(new AnimatorListenerAdapter() { + @Override public void onAnimationEnd(Animator animation) { if (onCompleteRunnable != null) { onCompleteRunnable.run(); @@ -1043,6 +1048,7 @@ private void drawPageHints(Canvas canvas) { } } + @Override protected boolean drawChild(Canvas canvas, View child, long drawingTime) { boolean ret = super.drawChild(canvas, child, drawingTime); diff --git a/src/ch/deletescape/lawnchair/dynamicui/ColorExtractionService.java b/src/ch/deletescape/lawnchair/dynamicui/ColorExtractionService.java index b474f2f958d..bd7e71a06c4 100644 --- a/src/ch/deletescape/lawnchair/dynamicui/ColorExtractionService.java +++ b/src/ch/deletescape/lawnchair/dynamicui/ColorExtractionService.java @@ -27,7 +27,6 @@ import ch.deletescape.lawnchair.LauncherProvider; import ch.deletescape.lawnchair.LauncherSettings; import ch.deletescape.lawnchair.R; -import ch.deletescape.lawnchair.config.FeatureFlags; /** * Extracts colors from the wallpaper, and saves results to {@link LauncherProvider}. @@ -51,7 +50,7 @@ protected void onHandleIntent(Intent intent) { if (wallpaperManager.getWallpaperInfo() != null) { // We can't extract colors from live wallpapers, so just use the default color always. extractedColors.updatePalette(null); - extractedColors.updateHotseatPalette(getApplicationContext(), null); + extractedColors.updateHotseatPalette(null); } else { Bitmap wallpaper = ((BitmapDrawable) wallpaperManager.getDrawable()).getBitmap(); Palette palette = Palette.from(wallpaper).generate(); @@ -63,17 +62,15 @@ protected void onHandleIntent(Intent intent) { wallpaper.getWidth(), wallpaper.getHeight()) .clearFilters() .generate(); - extractedColors.updateHotseatPalette(getApplicationContext(), hotseatPalette); + extractedColors.updateHotseatPalette(hotseatPalette); - if (FeatureFlags.lightStatusBar(getApplicationContext())) { - int statusBarHeight = getResources() - .getDimensionPixelSize(R.dimen.status_bar_height); - Palette statusBarPalette = Palette.from(wallpaper) - .setRegion(0, 0, wallpaper.getWidth(), statusBarHeight) - .clearFilters() - .generate(); - extractedColors.updateStatusBarPalette(statusBarPalette); - } + int statusBarHeight = getResources() + .getDimensionPixelSize(R.dimen.status_bar_height); + Palette statusBarPalette = Palette.from(wallpaper) + .setRegion(0, 0, wallpaper.getWidth(), statusBarHeight) + .clearFilters() + .generate(); + extractedColors.updateStatusBarPalette(statusBarPalette); } // Save the extracted colors and wallpaper id to LauncherProvider. diff --git a/src/ch/deletescape/lawnchair/dynamicui/ExtractedColors.java b/src/ch/deletescape/lawnchair/dynamicui/ExtractedColors.java index 612970e3c5a..dbd83f51b59 100644 --- a/src/ch/deletescape/lawnchair/dynamicui/ExtractedColors.java +++ b/src/ch/deletescape/lawnchair/dynamicui/ExtractedColors.java @@ -38,7 +38,7 @@ public class ExtractedColors { // These color profile indices should NOT be changed, since they are used when saving and // loading extracted colors. New colors should always be added at the end. public static final int VERSION_INDEX = 0; - public static final int HOTSEAT_INDEX = 1; + private static final int HOTSEAT_LIGHT_MUTED_INDEX = 1; public static final int STATUS_BAR_INDEX = 2; public static final int DOMINANT_INDEX = 3; public static final int VIBRANT_INDEX = 4; @@ -49,9 +49,14 @@ public class ExtractedColors { public static final int MUTED_LIGHT_INDEX = 9; public static final int VIBRANT_FOREGROUND_INDEX = 10; public static final int DOMINANT_FOREGROUND_INDEX = 11; + private static final int HOTSEAT_DARK_MUTED_INDEX = 12; + private static final int HOTSEAT_LIGHT_VIBRANT_INDEX = 13; + private static final int HOTSEAT_DARK_VIBRANT_INDEX = 14; + private static final int IS_SUPER_LIGHT = 15; + private static final int IS_SUPER_DARK = 16; - public static final int NUM_COLOR_PROFILES = 11; - private static final int VERSION = 6; + public static final int NUM_COLOR_PROFILES = 16; + private static final int VERSION = 7; private static final String COLOR_SEPARATOR = ","; @@ -148,42 +153,57 @@ public void updatePalette(Palette palette) { } } + public void updateHotseatPalette(Palette hotseatPalette) { + if (hotseatPalette != null) { + if (ExtractionUtils.isSuperLight(hotseatPalette)) { + setColorAtIndex(IS_SUPER_LIGHT, 1); + setColorAtIndex(IS_SUPER_DARK, 0); + } else if (ExtractionUtils.isSuperDark(hotseatPalette)) { + setColorAtIndex(IS_SUPER_LIGHT, 0); + setColorAtIndex(IS_SUPER_DARK, 1); + } else { + setColorAtIndex(IS_SUPER_LIGHT, 0); + setColorAtIndex(IS_SUPER_DARK, 0); + } + setColorAtIndex(HOTSEAT_DARK_MUTED_INDEX, hotseatPalette.getDarkMutedColor(-1)); + setColorAtIndex(HOTSEAT_DARK_VIBRANT_INDEX, hotseatPalette.getDarkVibrantColor(-1)); + setColorAtIndex(HOTSEAT_LIGHT_MUTED_INDEX, hotseatPalette.getLightMutedColor(-1)); + setColorAtIndex(HOTSEAT_LIGHT_VIBRANT_INDEX, hotseatPalette.getLightVibrantColor(-1)); + } + } + /** * The hotseat's color is defined as follows: * - 20% darkMuted or 12% black for super light wallpaper * - 25% lightMuted or 18% white for super dark * - 40% lightVibrant or 25% white otherwise */ - public void updateHotseatPalette(Context context, Palette hotseatPalette) { + public int getHotseatColor(Context context) { int hotseatColor; - if (hotseatPalette != null) { - boolean shouldUseExtractedColors = FeatureFlags.hotseatShouldUseExtractedColors(context); - if (ExtractionUtils.isSuperLight(hotseatPalette)) { - if (shouldUseExtractedColors) { - int baseColor = hotseatPalette.getDarkMutedColor(hotseatPalette.getDarkVibrantColor(Color.BLACK)); - hotseatColor = ColorUtils.setAlphaComponent(baseColor, (int) (0.20f * 255)); - } else { - hotseatColor = ColorUtils.setAlphaComponent(Color.BLACK, (int) (0.12f * 255)); - } - } else if (ExtractionUtils.isSuperDark(hotseatPalette)) { - if (shouldUseExtractedColors) { - int baseColor = hotseatPalette.getLightMutedColor(hotseatPalette.getLightVibrantColor(Color.WHITE)); - hotseatColor = ColorUtils.setAlphaComponent(baseColor, (int) (0.25f * 255)); - } else { - hotseatColor = ColorUtils.setAlphaComponent(Color.WHITE, (int) (0.18f * 255)); - } + boolean shouldUseExtractedColors = FeatureFlags.hotseatShouldUseExtractedColors(context); + if (getColor(IS_SUPER_LIGHT, 0) == 1) { + if (shouldUseExtractedColors) { + int baseColor = getColor(HOTSEAT_DARK_MUTED_INDEX, getColor(HOTSEAT_DARK_VIBRANT_INDEX, Color.BLACK)); + hotseatColor = ColorUtils.setAlphaComponent(baseColor, (int) (0.20f * 255)); } else { - if (shouldUseExtractedColors) { - int baseColor = hotseatPalette.getLightVibrantColor(hotseatPalette.getLightMutedColor(Color.WHITE)); - hotseatColor = ColorUtils.setAlphaComponent(baseColor, (int) (0.40f * 255)); - } else { - hotseatColor = ColorUtils.setAlphaComponent(Color.WHITE, (int) (0.25f * 255)); - } + hotseatColor = ColorUtils.setAlphaComponent(Color.BLACK, (int) (0.12f * 255)); + } + } else if (getColor(IS_SUPER_DARK, 0) == 1) { + if (shouldUseExtractedColors) { + int baseColor = getColor(HOTSEAT_LIGHT_MUTED_INDEX, getColor(HOTSEAT_LIGHT_VIBRANT_INDEX, Color.WHITE)); + hotseatColor = ColorUtils.setAlphaComponent(baseColor, (int) (0.25f * 255)); + } else { + hotseatColor = ColorUtils.setAlphaComponent(Color.WHITE, (int) (0.18f * 255)); } } else { - hotseatColor = ColorUtils.setAlphaComponent(Color.WHITE, (int) (0.25f * 255)); + if (shouldUseExtractedColors) { + int baseColor = getColor(HOTSEAT_LIGHT_VIBRANT_INDEX, getColor(HOTSEAT_LIGHT_MUTED_INDEX, Color.WHITE)); + hotseatColor = ColorUtils.setAlphaComponent(baseColor, (int) (0.40f * 255)); + } else { + hotseatColor = ColorUtils.setAlphaComponent(Color.WHITE, (int) (0.25f * 255)); + } } - setColorAtIndex(HOTSEAT_INDEX, hotseatColor); + return hotseatColor; } public void updateStatusBarPalette(Palette statusBarPalette) { diff --git a/src/ch/deletescape/lawnchair/pageindicators/PageIndicatorLineCaret.java b/src/ch/deletescape/lawnchair/pageindicators/PageIndicatorLineCaret.java index 9e15aecd530..10689c45538 100644 --- a/src/ch/deletescape/lawnchair/pageindicators/PageIndicatorLineCaret.java +++ b/src/ch/deletescape/lawnchair/pageindicators/PageIndicatorLineCaret.java @@ -197,6 +197,7 @@ protected void onPageCountChanged() { } } + @Override public void setShouldAutoHide(boolean shouldAutoHide) { mShouldAutoHide = shouldAutoHide; if (shouldAutoHide && mLinePaint.getAlpha() > 0) { @@ -211,9 +212,10 @@ public void setShouldAutoHide(boolean shouldAutoHide) { * - mostly opaque white if the hotseat is white (ignoring alpha) * - mostly opaque black if the hotseat is black (ignoring alpha) */ + @Override public void updateColor(ExtractedColors extractedColors) { int originalLineAlpha = mLinePaint.getAlpha(); - int color = extractedColors.getColor(ExtractedColors.HOTSEAT_INDEX, Color.TRANSPARENT); + int color = extractedColors.getHotseatColor(getContext()); if (color != Color.TRANSPARENT) { color = ColorUtils.setAlphaComponent(color, 255); int diffToWhite = Color.WHITE - color; diff --git a/src/ch/deletescape/lawnchair/settings/Settings.java b/src/ch/deletescape/lawnchair/settings/Settings.java new file mode 100644 index 00000000000..bf409b45461 --- /dev/null +++ b/src/ch/deletescape/lawnchair/settings/Settings.java @@ -0,0 +1,87 @@ +package ch.deletescape.lawnchair.settings; + +import android.content.SharedPreferences; + +import ch.deletescape.lawnchair.Launcher; +import ch.deletescape.lawnchair.LauncherAppState; +import ch.deletescape.lawnchair.Utilities; +import ch.deletescape.lawnchair.dragndrop.DragLayer; +import ch.deletescape.lawnchair.dynamicui.ExtractedColors; + +public class Settings implements SharedPreferences.OnSharedPreferenceChangeListener { + private static final String KEY_PREF_LIGHT_STATUS_BAR = "pref_lightStatusBar"; + private static final String KEY_PREF_PINCH_TO_OVERVIEW = "pref_pinchToOverview"; + private static final String KEY_PREF_PULLDOWN_SEARCH = "pref_pulldownSearch"; + private static final String KEY_PREF_HOTSEAT_EXTRACTED_COLORS = "pref_hotseatShouldUseExtractedColors"; + private static final String KEY_PREF_HAPTIC_FEEDBACK = "pref_enableHapticFeedback"; + private static final String KEY_PREF_KEEP_SCROLL_STATE = "pref_keepScrollState"; + private static final String KEY_FULL_WIDTH_SEARCHBAR = "pref_fullWidthSearchbar"; + private static final String KEY_SHOW_PIXEL_BAR = "pref_showPixelBar"; + private static final String KEY_SHOW_VOICE_SEARCH_BUTTON = "pref_showMic"; + private static final String KEY_PREF_ALL_APPS_OPACITY = "pref_allAppsOpacitySB"; + private static final String KEY_PREF_SHOW_HIDDEN_APPS = "pref_showHidden"; + private static Settings instance; + private Launcher mLauncher; + + private Settings(Launcher launcher) { + mLauncher = launcher; + SharedPreferences prefs = Utilities.getPrefs(launcher); + prefs.registerOnSharedPreferenceChangeListener(this); + init(prefs); + } + + public static void init(Launcher launcher) { + instance = new Settings(launcher); + } + + public static Settings getInstance() { + return instance; + } + + private void init(SharedPreferences prefs) { + applyAllAppsOpacity(prefs); + } + + @Override + public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { + if (key.startsWith("pref_")) { + switch (key) { + case KEY_PREF_LIGHT_STATUS_BAR: + mLauncher.activateLightStatusBar(false); + break; + case KEY_PREF_PINCH_TO_OVERVIEW: + DragLayer dragLayer = mLauncher.getDragLayer(); + dragLayer.onAccessibilityStateChanged(dragLayer.mIsAccesibilityEnabled); + break; + case KEY_PREF_PULLDOWN_SEARCH: + mLauncher.getWorkspace().initPullDownToSearch(); + break; + case KEY_PREF_HOTSEAT_EXTRACTED_COLORS: + ExtractedColors ec = mLauncher.getExtractedColors(); + mLauncher.getHotseat().updateColor(ec, true); + mLauncher.getWorkspace().getPageIndicator().updateColor(ec); + break; + case KEY_PREF_HAPTIC_FEEDBACK: + mLauncher.getWorkspace().setHapticFeedbackEnabled(prefs.getBoolean(key, false)); + break; + case KEY_PREF_ALL_APPS_OPACITY: + applyAllAppsOpacity(prefs); + break; + case KEY_PREF_SHOW_HIDDEN_APPS: + LauncherAppState.getInstance().reloadAllApps(); + break; + case KEY_PREF_KEEP_SCROLL_STATE: + case KEY_SHOW_VOICE_SEARCH_BUTTON: + // Ignoring those as we do not need to apply anything special + break; + default: + LauncherAppState.getInstance().reloadAll(false); + } + } + } + + private void applyAllAppsOpacity(SharedPreferences prefs) { + int tmp = (int) (prefs.getFloat(KEY_PREF_ALL_APPS_OPACITY, 1f) * 255); + mLauncher.getAllAppsController().setAllAppsAlpha(tmp); + } +}