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 {