Adding support for custom page indicator markers.

Change-Id: I057b0cccc4194157d92ebb123af2afaf94fb5415
diff --git a/res/drawable-hdpi/now_page.png b/res/drawable-hdpi/now_page.png
new file mode 100644
index 0000000..9eef50c
--- /dev/null
+++ b/res/drawable-hdpi/now_page.png
Binary files differ
diff --git a/res/drawable-mdpi/now_page.png b/res/drawable-mdpi/now_page.png
new file mode 100644
index 0000000..cc4005d
--- /dev/null
+++ b/res/drawable-mdpi/now_page.png
Binary files differ
diff --git a/res/drawable-xhdpi/now_page.png b/res/drawable-xhdpi/now_page.png
new file mode 100644
index 0000000..e1da91c
--- /dev/null
+++ b/res/drawable-xhdpi/now_page.png
Binary files differ
diff --git a/res/layout/now_page_indicator_marker.xml b/res/layout/now_page_indicator_marker.xml
new file mode 100644
index 0000000..7d05627
--- /dev/null
+++ b/res/layout/now_page_indicator_marker.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2013 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.
+-->
+<com.android.launcher3.PageIndicatorMarker
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:launcher="http://schemas.android.com/apk/res-auto/com.android.launcher3"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content">
+    <ImageView
+        android:id="@+id/inactive"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:src="@drawable/now_page"
+        />
+    <ImageView
+        android:id="@+id/active"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:src="@drawable/now_page"
+        android:alpha="0"
+        />
+</com.android.launcher3.PageIndicatorMarker>
diff --git a/src/com/android/launcher3/PageIndicator.java b/src/com/android/launcher3/PageIndicator.java
index d7778fb..ce98145 100644
--- a/src/com/android/launcher3/PageIndicator.java
+++ b/src/com/android/launcher3/PageIndicator.java
@@ -161,18 +161,17 @@
         mWindowRange[1] = windowEnd;
     }
 
-    void addMarker(int index) {
+    void addMarker(int index, int layoutId) {
         index = Math.max(0, Math.min(index, mMarkers.size()));
 
-        int mLayoutId = R.layout.page_indicator_marker;
         PageIndicatorMarker marker =
-            (PageIndicatorMarker) mLayoutInflater.inflate(mLayoutId, this, false);
+            (PageIndicatorMarker) mLayoutInflater.inflate(layoutId, this, false);
         mMarkers.add(index, marker);
         offsetWindowCenterTo(mActiveMarkerIndex, true);
     }
-    void addMarkers(int count) {
-        for (int i = 0; i < count; ++i) {
-            addMarker(Integer.MAX_VALUE);
+    void addMarkers(ArrayList<Integer> layoutIds) {
+        for (int i = 0; i < layoutIds.size(); ++i) {
+            addMarker(Integer.MAX_VALUE, layoutIds.get(i));
         }
     }
 
diff --git a/src/com/android/launcher3/PagedView.java b/src/com/android/launcher3/PagedView.java
index aaff588..9bdbe46 100644
--- a/src/com/android/launcher3/PagedView.java
+++ b/src/com/android/launcher3/PagedView.java
@@ -326,7 +326,12 @@
         if (mPageIndicator == null && mPageIndicatorViewId > -1) {
             mPageIndicator = (PageIndicator) parent.findViewById(mPageIndicatorViewId);
             mPageIndicator.removeAllMarkers();
-            mPageIndicator.addMarkers(getChildCount());
+
+            ArrayList<Integer> markers = new ArrayList<Integer>();
+            for (int i = 0; i < getChildCount(); ++i) {
+                markers.add(getPageIndicatorMarker(i));
+            }
+            mPageIndicator.addMarkers(markers);
         }
     }
 
@@ -403,6 +408,9 @@
     PageIndicator getPageIndicator() {
         return mPageIndicator;
     }
+    protected int getPageIndicatorMarker(int pageIndex) {
+        return R.layout.page_indicator_marker;
+    }
 
     public void setPageSwitchListener(PageSwitchListener pageSwitchListener) {
         mPageSwitchListener = pageSwitchListener;
@@ -896,7 +904,8 @@
         // Update the page indicator, we don't update the page indicator as we
         // add/remove pages
         if (mPageIndicator != null && !isReordering(false)) {
-            mPageIndicator.addMarker(indexOfChild(child));
+            int pageIndex = indexOfChild(child);
+            mPageIndicator.addMarker(pageIndex, getPageIndicatorMarker(pageIndex));
         }
 
         // This ensures that when children are added, they get the correct transforms / alphas
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java
index edf3721..7fb23e2 100644
--- a/src/com/android/launcher3/Workspace.java
+++ b/src/com/android/launcher3/Workspace.java
@@ -4018,6 +4018,14 @@
     }
 
     @Override
+    protected int getPageIndicatorMarker(int pageIndex) {
+        if (getScreenIdForPageIndex(pageIndex) == CUSTOM_CONTENT_SCREEN_ID) {
+            return R.layout.now_page_indicator_marker;
+        }
+        return super.getPageIndicatorMarker(pageIndex);
+    }
+
+    @Override
     public void syncPages() {
     }