diff --git a/AndroidManifest-common.xml b/AndroidManifest-common.xml index fe8d65e3b1..211e1ff37f 100644 --- a/AndroidManifest-common.xml +++ b/AndroidManifest-common.xml @@ -81,7 +81,7 @@ diff --git a/quickstep/AndroidManifest.xml b/quickstep/AndroidManifest.xml index c76ad83655..ac389062ca 100644 --- a/quickstep/AndroidManifest.xml +++ b/quickstep/AndroidManifest.xml @@ -19,6 +19,7 @@ --> @@ -70,6 +71,12 @@ + + + + diff --git a/quickstep/libs/sysui_shared.jar b/quickstep/libs/sysui_shared.jar index 120d6f98df..398bd3c466 100644 Binary files a/quickstep/libs/sysui_shared.jar and b/quickstep/libs/sysui_shared.jar differ diff --git a/quickstep/src/com/android/launcher3/uioverrides/WallpaperColorInfo.java b/quickstep/src/com/android/launcher3/uioverrides/WallpaperColorInfo.java new file mode 100644 index 0000000000..8218517dcc --- /dev/null +++ b/quickstep/src/com/android/launcher3/uioverrides/WallpaperColorInfo.java @@ -0,0 +1,115 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.launcher3.uioverrides; + +import static android.app.WallpaperManager.FLAG_SYSTEM; + +import android.annotation.TargetApi; +import android.app.WallpaperColors; +import android.app.WallpaperManager; +import android.app.WallpaperManager.OnColorsChangedListener; +import android.content.Context; +import android.os.Build; +import android.os.Handler; +import android.os.Looper; + +import com.android.systemui.shared.system.TonalCompat; +import com.android.systemui.shared.system.TonalCompat.ExtractionInfo; + +import java.util.ArrayList; + +@TargetApi(Build.VERSION_CODES.P) +public class WallpaperColorInfo implements OnColorsChangedListener { + + private static final Object sInstanceLock = new Object(); + private static WallpaperColorInfo sInstance; + + public static WallpaperColorInfo getInstance(Context context) { + synchronized (sInstanceLock) { + if (sInstance == null) { + sInstance = new WallpaperColorInfo(context.getApplicationContext()); + } + return sInstance; + } + } + + private final ArrayList mListeners = new ArrayList<>(); + private final WallpaperManager mWallpaperManager; + private final TonalCompat mTonalCompat; + + private ExtractionInfo mExtractionInfo; + + private OnChangeListener[] mTempListeners = new OnChangeListener[0]; + + private WallpaperColorInfo(Context context) { + mWallpaperManager = context.getSystemService(WallpaperManager.class); + mTonalCompat = new TonalCompat(context); + + mWallpaperManager.addOnColorsChangedListener(this, new Handler(Looper.getMainLooper())); + update(mWallpaperManager.getWallpaperColors(FLAG_SYSTEM)); + } + + public int getMainColor() { + return mExtractionInfo.mainColor; + } + + public int getSecondaryColor() { + return mExtractionInfo.secondaryColor; + } + + public boolean isDark() { + return mExtractionInfo.supportsDarkTheme; + } + + public boolean supportsDarkText() { + return mExtractionInfo.supportsDarkText; + } + + @Override + public void onColorsChanged(WallpaperColors colors, int which) { + if ((which & FLAG_SYSTEM) != 0) { + update(colors); + notifyChange(); + } + } + + private void update(WallpaperColors wallpaperColors) { + mExtractionInfo = mTonalCompat.extractDarkColors(wallpaperColors); + } + + public void addOnChangeListener(OnChangeListener listener) { + mListeners.add(listener); + } + + public void removeOnChangeListener(OnChangeListener listener) { + mListeners.remove(listener); + } + + private void notifyChange() { + // Create a new array to avoid concurrent modification when the activity destroys itself. + mTempListeners = mListeners.toArray(mTempListeners); + for (OnChangeListener listener : mTempListeners) { + if (listener != null) { + listener.onExtractedColorsChanged(this); + } + } + } + + public interface OnChangeListener { + void onExtractedColorsChanged(WallpaperColorInfo wallpaperColorInfo); + } +} diff --git a/src/com/android/launcher3/BaseDraggingActivity.java b/src/com/android/launcher3/BaseDraggingActivity.java index bde9ad3109..1400432c92 100644 --- a/src/com/android/launcher3/BaseDraggingActivity.java +++ b/src/com/android/launcher3/BaseDraggingActivity.java @@ -34,7 +34,7 @@ import android.widget.Toast; import com.android.launcher3.LauncherSettings.Favorites; import com.android.launcher3.badge.BadgeInfo; import com.android.launcher3.compat.LauncherAppsCompat; -import com.android.launcher3.dynamicui.WallpaperColorInfo; +import com.android.launcher3.uioverrides.WallpaperColorInfo; import com.android.launcher3.shortcuts.DeepShortcutManager; import com.android.launcher3.views.BaseDragLayer; diff --git a/src/com/android/launcher3/graphics/ColorScrim.java b/src/com/android/launcher3/graphics/ColorScrim.java index 1ffce18232..96d93d83b1 100644 --- a/src/com/android/launcher3/graphics/ColorScrim.java +++ b/src/com/android/launcher3/graphics/ColorScrim.java @@ -23,7 +23,7 @@ import android.view.animation.Interpolator; import com.android.launcher3.R; import com.android.launcher3.anim.Interpolators; -import com.android.launcher3.dynamicui.WallpaperColorInfo; +import com.android.launcher3.uioverrides.WallpaperColorInfo; /** * Simple scrim which draws a color diff --git a/src/com/android/launcher3/graphics/WorkspaceAndHotseatScrim.java b/src/com/android/launcher3/graphics/WorkspaceAndHotseatScrim.java index 2318a778bb..5c991e9667 100644 --- a/src/com/android/launcher3/graphics/WorkspaceAndHotseatScrim.java +++ b/src/com/android/launcher3/graphics/WorkspaceAndHotseatScrim.java @@ -34,7 +34,7 @@ import com.android.launcher3.Launcher; import com.android.launcher3.R; import com.android.launcher3.Utilities; import com.android.launcher3.Workspace; -import com.android.launcher3.dynamicui.WallpaperColorInfo; +import com.android.launcher3.uioverrides.WallpaperColorInfo; /** * View scrim which draws behind hotseat and workspace diff --git a/src/com/android/launcher3/pageindicators/WorkspacePageIndicator.java b/src/com/android/launcher3/pageindicators/WorkspacePageIndicator.java index 1383f53aba..654e593354 100644 --- a/src/com/android/launcher3/pageindicators/WorkspacePageIndicator.java +++ b/src/com/android/launcher3/pageindicators/WorkspacePageIndicator.java @@ -24,7 +24,7 @@ import com.android.launcher3.Insettable; import com.android.launcher3.Launcher; import com.android.launcher3.R; import com.android.launcher3.Utilities; -import com.android.launcher3.dynamicui.WallpaperColorInfo; +import com.android.launcher3.uioverrides.WallpaperColorInfo; /** * A PageIndicator that briefly shows a fraction of a line when moving between pages diff --git a/src/com/android/launcher3/dynamicui/WallpaperColorInfo.java b/src_ui_overrides/com/android/launcher3/uioverrides/WallpaperColorInfo.java similarity index 76% rename from src/com/android/launcher3/dynamicui/WallpaperColorInfo.java rename to src_ui_overrides/com/android/launcher3/uioverrides/WallpaperColorInfo.java index 32605a2ebe..21070941bc 100644 --- a/src/com/android/launcher3/dynamicui/WallpaperColorInfo.java +++ b/src_ui_overrides/com/android/launcher3/uioverrides/WallpaperColorInfo.java @@ -1,11 +1,28 @@ -package com.android.launcher3.dynamicui; +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.launcher3.uioverrides; import android.content.Context; import android.graphics.Color; import android.util.Pair; -import com.android.launcher3.compat.WallpaperColorsCompat; -import com.android.launcher3.compat.WallpaperManagerCompat; +import com.android.launcher3.uioverrides.dynamicui.WallpaperColorsCompat; +import com.android.launcher3.uioverrides.dynamicui.WallpaperManagerCompat; +import com.android.launcher3.uioverrides.dynamicui.ColorExtractionAlgorithm; import java.util.ArrayList; @@ -78,10 +95,10 @@ public class WallpaperColorInfo implements WallpaperManagerCompat.OnColorsChange } mSupportsDarkText = wallpaperColors != null ? (wallpaperColors.getColorHints() - & WallpaperColorsCompat.HINT_SUPPORTS_DARK_TEXT) > 0 : false; + & WallpaperColorsCompat.HINT_SUPPORTS_DARK_TEXT) > 0 : false; mIsDark = wallpaperColors != null ? (wallpaperColors.getColorHints() - & WallpaperColorsCompat.HINT_SUPPORTS_DARK_THEME) > 0 : false; + & WallpaperColorsCompat.HINT_SUPPORTS_DARK_THEME) > 0 : false; } public void addOnChangeListener(OnChangeListener listener) { @@ -107,4 +124,4 @@ public class WallpaperColorInfo implements WallpaperManagerCompat.OnColorsChange public interface OnChangeListener { void onExtractedColorsChanged(WallpaperColorInfo wallpaperColorInfo); } -} +} \ No newline at end of file diff --git a/src/com/android/launcher3/dynamicui/ColorExtractionAlgorithm.java b/src_ui_overrides/com/android/launcher3/uioverrides/dynamicui/ColorExtractionAlgorithm.java similarity index 99% rename from src/com/android/launcher3/dynamicui/ColorExtractionAlgorithm.java rename to src_ui_overrides/com/android/launcher3/uioverrides/dynamicui/ColorExtractionAlgorithm.java index baedf90630..0444212b85 100644 --- a/src/com/android/launcher3/dynamicui/ColorExtractionAlgorithm.java +++ b/src_ui_overrides/com/android/launcher3/uioverrides/dynamicui/ColorExtractionAlgorithm.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.launcher3.dynamicui; +package com.android.launcher3.uioverrides.dynamicui; import android.content.Context; import android.graphics.Color; @@ -27,7 +27,6 @@ import android.util.Range; import com.android.launcher3.R; import com.android.launcher3.Utilities; -import com.android.launcher3.compat.WallpaperColorsCompat; import java.util.Arrays; import java.util.LinkedList; diff --git a/src/com/android/launcher3/compat/WallpaperColorsCompat.java b/src_ui_overrides/com/android/launcher3/uioverrides/dynamicui/WallpaperColorsCompat.java similarity index 96% rename from src/com/android/launcher3/compat/WallpaperColorsCompat.java rename to src_ui_overrides/com/android/launcher3/uioverrides/dynamicui/WallpaperColorsCompat.java index e25b9d929a..d984a840d6 100644 --- a/src/com/android/launcher3/compat/WallpaperColorsCompat.java +++ b/src_ui_overrides/com/android/launcher3/uioverrides/dynamicui/WallpaperColorsCompat.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.android.launcher3.compat; +package com.android.launcher3.uioverrides.dynamicui; /** * A compatibility layer around platform implementation of WallpaperColors diff --git a/src/com/android/launcher3/compat/WallpaperManagerCompat.java b/src_ui_overrides/com/android/launcher3/uioverrides/dynamicui/WallpaperManagerCompat.java similarity index 97% rename from src/com/android/launcher3/compat/WallpaperManagerCompat.java rename to src_ui_overrides/com/android/launcher3/uioverrides/dynamicui/WallpaperManagerCompat.java index 6605acecdb..5c533ff343 100644 --- a/src/com/android/launcher3/compat/WallpaperManagerCompat.java +++ b/src_ui_overrides/com/android/launcher3/uioverrides/dynamicui/WallpaperManagerCompat.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.launcher3.compat; +package com.android.launcher3.uioverrides.dynamicui; import android.content.Context; import android.support.annotation.Nullable; diff --git a/src/com/android/launcher3/compat/WallpaperManagerCompatVL.java b/src_ui_overrides/com/android/launcher3/uioverrides/dynamicui/WallpaperManagerCompatVL.java similarity index 98% rename from src/com/android/launcher3/compat/WallpaperManagerCompatVL.java rename to src_ui_overrides/com/android/launcher3/uioverrides/dynamicui/WallpaperManagerCompatVL.java index 299f09021a..4a8bbbd5af 100644 --- a/src/com/android/launcher3/compat/WallpaperManagerCompatVL.java +++ b/src_ui_overrides/com/android/launcher3/uioverrides/dynamicui/WallpaperManagerCompatVL.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.android.launcher3.compat; +package com.android.launcher3.uioverrides.dynamicui; import static android.app.WallpaperManager.FLAG_SYSTEM; @@ -58,7 +58,7 @@ public class WallpaperManagerCompatVL extends WallpaperManagerCompat { private static final String VERSION_PREFIX = "1,"; private static final String KEY_COLORS = "wallpaper_parsed_colors"; private static final String ACTION_EXTRACTION_COMPLETE = - "com.android.launcher3.compat.WallpaperManagerCompatVL.EXTRACTION_COMPLETE"; + "com.android.launcher3.uioverrides.dynamicui.WallpaperManagerCompatVL.EXTRACTION_COMPLETE"; private final ArrayList mListeners = new ArrayList<>(); diff --git a/src/com/android/launcher3/compat/WallpaperManagerCompatVOMR1.java b/src_ui_overrides/com/android/launcher3/uioverrides/dynamicui/WallpaperManagerCompatVOMR1.java similarity index 98% rename from src/com/android/launcher3/compat/WallpaperManagerCompatVOMR1.java rename to src_ui_overrides/com/android/launcher3/uioverrides/dynamicui/WallpaperManagerCompatVOMR1.java index 524f266fce..4509e05aa0 100644 --- a/src/com/android/launcher3/compat/WallpaperManagerCompatVOMR1.java +++ b/src_ui_overrides/com/android/launcher3/uioverrides/dynamicui/WallpaperManagerCompatVOMR1.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.android.launcher3.compat; +package com.android.launcher3.uioverrides.dynamicui; import android.annotation.TargetApi; import android.app.WallpaperColors; @@ -26,7 +26,6 @@ import android.util.Log; import java.lang.reflect.Method; - @TargetApi(27) public class WallpaperManagerCompatVOMR1 extends WallpaperManagerCompat {