Adding listener support for color extraction changes
Changing the apps-search layout to use theme attribute instead of hard
coded layout id

Bug: 37616877
Change-Id: Iae601758303f83a2774635f0d88f74d99fc643c3
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index c96c2a7..25995dd 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -212,6 +212,8 @@
     private static int NEW_APPS_ANIMATION_INACTIVE_TIMEOUT_SECONDS = 5;
     @Thunk static int NEW_APPS_ANIMATION_DELAY = 500;
 
+    private final ExtractedColors mExtractedColors = new ExtractedColors();
+
     @Thunk Workspace mWorkspace;
     private View mLauncherView;
     @Thunk DragLayer mDragLayer;
@@ -260,7 +262,6 @@
     private LauncherModel mModel;
     private ModelWriter mModelWriter;
     private IconCache mIconCache;
-    private ExtractedColors mExtractedColors;
     private LauncherAccessibilityDelegate mAccessibilityDelegate;
     private Handler mHandler = new Handler();
     private boolean mIsResumeFromActionScreenOff;
@@ -392,11 +393,10 @@
         // LauncherModel load.
         mPaused = false;
 
-        mLauncherView = getLayoutInflater().inflate(R.layout.launcher, null);
+        mLauncherView = LayoutInflater.from(this).inflate(R.layout.launcher, null);
 
         setupViews();
         mDeviceProfile.layout(this, false /* notifyListeners */);
-        mExtractedColors = new ExtractedColors();
         loadExtractedColorsAndColorItems();
 
         mPopupDataProvider = new PopupDataProvider(this);
@@ -465,12 +465,7 @@
     @Override
     public void onExtractedColorsChanged() {
         loadExtractedColorsAndColorItems();
-        if (mAllAppsController != null) {
-            mAllAppsController.onExtractedColorsChanged();
-        }
-        if (mLauncherCallbacks != null) {
-            mLauncherCallbacks.onExtractedColorsChanged();
-        }
+        mExtractedColors.notifyChange();
     }
 
     public ExtractedColors getExtractedColors() {
diff --git a/src/com/android/launcher3/LauncherCallbacks.java b/src/com/android/launcher3/LauncherCallbacks.java
index ea4aeb9..d66b14c 100644
--- a/src/com/android/launcher3/LauncherCallbacks.java
+++ b/src/com/android/launcher3/LauncherCallbacks.java
@@ -97,6 +97,4 @@
     int getSearchBarHeight();
 
     boolean shouldShowDiscoveryBounce();
-
-    void onExtractedColorsChanged();
 }
diff --git a/src/com/android/launcher3/allapps/AllAppsTransitionController.java b/src/com/android/launcher3/allapps/AllAppsTransitionController.java
index 121ce4c..9c1854a 100644
--- a/src/com/android/launcher3/allapps/AllAppsTransitionController.java
+++ b/src/com/android/launcher3/allapps/AllAppsTransitionController.java
@@ -42,7 +42,7 @@
  * closer to top or closer to the page indicator.
  */
 public class AllAppsTransitionController implements TouchController, VerticalPullDetector.Listener,
-        View.OnLayoutChangeListener {
+        View.OnLayoutChangeListener, ExtractedColors.OnChangeListener {
 
     private static final String TAG = "AllAppsTrans";
     private static final boolean DBG = false;
@@ -107,6 +107,7 @@
 
         mEvaluator = new ArgbEvaluator();
         mAllAppsBackgroundColor = Themes.getAttrColor(l, android.R.attr.colorPrimary);
+        mLauncher.getExtractedColors().addOnChangeListener(this);
     }
 
     @Override
@@ -288,6 +289,7 @@
         mScrimView.setProgress(progress);
     }
 
+    @Override
     public void onExtractedColorsChanged() {
         if (FeatureFlags.LAUNCHER3_GRADIENT_ALL_APPS) {
             if (mGradientView != null) {
diff --git a/src/com/android/launcher3/allapps/AlphabeticalAppsList.java b/src/com/android/launcher3/allapps/AlphabeticalAppsList.java
index f291a80..0474419 100644
--- a/src/com/android/launcher3/allapps/AlphabeticalAppsList.java
+++ b/src/com/android/launcher3/allapps/AlphabeticalAppsList.java
@@ -195,6 +195,8 @@
     private int mNumPredictedAppsPerRow;
     private int mNumAppRowsInAdapter;
 
+    private boolean mHasSearchDivider = true;
+
     public AlphabeticalAppsList(Context context) {
         mLauncher = Launcher.getLauncher(context);
         mIndexer = new AlphabeticIndexCompat(context);
@@ -343,6 +345,10 @@
         onAppsUpdated();
     }
 
+    public void disableSearchDivider() {
+        mHasSearchDivider = false;
+    }
+
     /**
      * Updates internals when the set of apps are updated.
      */
@@ -429,8 +435,10 @@
             }
         }
 
-        // Add the search divider
-        mAdapterItems.add(AdapterItem.asSearchDivider(position++));
+        if (mHasSearchDivider) {
+            // Add the search divider
+            mAdapterItems.add(AdapterItem.asSearchDivider(position++));
+        }
 
         // Process the predicted app components
         mPredictedApps.clear();
diff --git a/src/com/android/launcher3/dynamicui/ExtractedColors.java b/src/com/android/launcher3/dynamicui/ExtractedColors.java
index 3c4aba1..108a21f 100644
--- a/src/com/android/launcher3/dynamicui/ExtractedColors.java
+++ b/src/com/android/launcher3/dynamicui/ExtractedColors.java
@@ -26,6 +26,7 @@
 import com.android.launcher3.Utilities;
 import com.android.launcher3.config.FeatureFlags;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 
 /**
@@ -80,6 +81,7 @@
 
     private static final String COLOR_SEPARATOR = ",";
 
+    private final ArrayList<OnChangeListener> mListeners = new ArrayList<>();
     private final int[] mColors;
 
     public ExtractedColors() {
@@ -171,4 +173,22 @@
         setColorAtIndex(idx, wallpaperPalette == null
                 ? DEFAULT_VALUES[idx] : wallpaperPalette.getVibrantColor(DEFAULT_VALUES[idx]));
     }
+
+    public void addOnChangeListener(OnChangeListener listener) {
+        mListeners.add(listener);
+    }
+
+    public void notifyChange() {
+        for (OnChangeListener listener : mListeners) {
+            listener.onExtractedColorsChanged();
+        }
+    }
+
+    /**
+     * Interface for listening for extracted color changes
+     */
+    public interface OnChangeListener {
+
+        void onExtractedColorsChanged();
+    }
 }
diff --git a/src/com/android/launcher3/testing/LauncherExtension.java b/src/com/android/launcher3/testing/LauncherExtension.java
index 36df22c..8d43518 100644
--- a/src/com/android/launcher3/testing/LauncherExtension.java
+++ b/src/com/android/launcher3/testing/LauncherExtension.java
@@ -219,8 +219,5 @@
         public boolean shouldShowDiscoveryBounce() {
             return false;
         }
-
-        @Override
-        public void onExtractedColorsChanged() { }
     }
 }