Adding starred filter and placeholder icons

Change-Id: I1a8bfa59bdde0df35be5acb79f2158f2a56f22ef
diff --git a/res/drawable-hdpi/ic_contact_list_filter_all.png b/res/drawable-hdpi/ic_contact_list_filter_all.png
new file mode 100644
index 0000000..67981a9
--- /dev/null
+++ b/res/drawable-hdpi/ic_contact_list_filter_all.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_contact_list_filter_custom.png b/res/drawable-hdpi/ic_contact_list_filter_custom.png
new file mode 100644
index 0000000..3f48be3
--- /dev/null
+++ b/res/drawable-hdpi/ic_contact_list_filter_custom.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_contact_list_filter_starred.png b/res/drawable-hdpi/ic_contact_list_filter_starred.png
new file mode 100644
index 0000000..4213050
--- /dev/null
+++ b/res/drawable-hdpi/ic_contact_list_filter_starred.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_contact_list_filter_all.png b/res/drawable-mdpi/ic_contact_list_filter_all.png
new file mode 100644
index 0000000..67981a9
--- /dev/null
+++ b/res/drawable-mdpi/ic_contact_list_filter_all.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_contact_list_filter_custom.png b/res/drawable-mdpi/ic_contact_list_filter_custom.png
new file mode 100644
index 0000000..3f48be3
--- /dev/null
+++ b/res/drawable-mdpi/ic_contact_list_filter_custom.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_contact_list_filter_starred.png b/res/drawable-mdpi/ic_contact_list_filter_starred.png
new file mode 100755
index 0000000..a9bdb05
--- /dev/null
+++ b/res/drawable-mdpi/ic_contact_list_filter_starred.png
Binary files differ
diff --git a/res/layout/filter_spinner_item.xml b/res/layout/filter_spinner_item.xml
index 6573a30..ff7cb5c 100644
--- a/res/layout/filter_spinner_item.xml
+++ b/res/layout/filter_spinner_item.xml
@@ -28,9 +28,11 @@
     <ImageView
         android:id="@+id/icon"
         android:scaleType="fitCenter"
-        android:layout_width="48dip"
-        android:layout_height="wrap_content"
-        android:layout_marginRight="7dip" />
+        android:layout_width="24dip"
+        android:layout_height="24dip"
+        android:layout_marginLeft="8dip"
+        android:layout_marginRight="7dip"
+        android:layout_gravity="center_vertical" />
 
     <TextView
         android:id="@+id/label"
diff --git a/res/layout/navigation_bar.xml b/res/layout/navigation_bar.xml
index 6286b1c..08070a7 100644
--- a/res/layout/navigation_bar.xml
+++ b/res/layout/navigation_bar.xml
@@ -41,13 +41,6 @@
             android:layout_width="match_parent"
             android:gravity="center_vertical">
 
-            <ImageView
-                android:id="@+id/icon"
-                android:scaleType="fitCenter"
-                android:layout_width="24dip"
-                android:layout_height="24dip"
-                android:layout_marginLeft="8dip" />
-
             <TextView
                 android:id="@+id/label"
                 android:layout_width="wrap_content"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 3a0b175..5774f35 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1348,8 +1348,14 @@
     <!-- Contact list filter label indicating that the list is showing all available accounts [CHAR LIMIT=64] -->
     <string name="list_filter_all_accounts">All contacts</string>
 
+    <!-- Contact list filter label indicating that the list is showing all starred contacts [CHAR LIMIT=64] -->
+    <string name="list_filter_all_starred">Starred</string>
+
+    <!-- Contact list filter label indicating that the list is showing starred contacts for the account [CHAR LIMIT=64] -->
+    <string name="list_filter_starred">Starred</string>
+
     <!-- Contact list filter indicating that the list shows groups chosen by the user [CHAR LIMIT=64] -->
-    <string name="list_filter_custom">Custom list</string>
+    <string name="list_filter_custom">Custom</string>
 
     <!-- Contact list filter selection indicating that the list shows groups chosen by the user [CHAR LIMIT=64] -->
     <string name="list_filter_customize">Customize...</string>
diff --git a/src/com/android/contacts/list/ContactListFilter.java b/src/com/android/contacts/list/ContactListFilter.java
index 82d4213..47b35d1 100644
--- a/src/com/android/contacts/list/ContactListFilter.java
+++ b/src/com/android/contacts/list/ContactListFilter.java
@@ -27,8 +27,10 @@
 
     public static final int FILTER_TYPE_ALL_ACCOUNTS = -1;
     public static final int FILTER_TYPE_CUSTOM = -2;
-    public static final int FILTER_TYPE_DEFAULT = -3;
+    public static final int FILTER_TYPE_STARRED = -3;
+    public static final int FILTER_TYPE_DEFAULT = -4;
     public static final int FILTER_TYPE_ACCOUNT = 0;
+    public static final int FILTER_TYPE_ = 0;
     public static final int FILTER_TYPE_GROUP = 1;
 
     private static final String KEY_FILTER_TYPE = "filter.type";
diff --git a/src/com/android/contacts/list/ContactListFilterController.java b/src/com/android/contacts/list/ContactListFilterController.java
index d9fddbd..051c9a0 100644
--- a/src/com/android/contacts/list/ContactListFilterController.java
+++ b/src/com/android/contacts/list/ContactListFilterController.java
@@ -35,7 +35,6 @@
 import android.view.ViewGroup;
 import android.widget.AdapterView;
 import android.widget.AdapterView.OnItemClickListener;
-import android.widget.AdapterView.OnItemSelectedListener;
 import android.widget.BaseAdapter;
 import android.widget.ListPopupWindow;
 
@@ -46,8 +45,7 @@
  * Controls a list of {@link ContactListFilter}'s.
  */
 public class ContactListFilterController
-        implements
-        LoaderCallbacks<List<ContactListFilter>>, OnClickListener, OnItemClickListener {
+        implements LoaderCallbacks<List<ContactListFilter>>, OnClickListener, OnItemClickListener {
 
     public interface ContactListFilterListener {
         void onContactListFiltersLoaded();
@@ -145,7 +143,8 @@
 
         boolean filterValid = mFilter != null
                 && (mFilter.filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS
-                        || mFilter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM);
+                        || mFilter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM
+                        || mFilter.filterType == ContactListFilter.FILTER_TYPE_STARRED);
 
         int accountCount = 0;
         int count = filters.size();
@@ -159,6 +158,8 @@
             mFilters.append(mNextFilterId++,
                     new ContactListFilter(ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS));
             mFilters.append(mNextFilterId++,
+                    new ContactListFilter(ContactListFilter.FILTER_TYPE_STARRED));
+            mFilters.append(mNextFilterId++,
                     new ContactListFilter(ContactListFilter.FILTER_TYPE_CUSTOM));
         }
 
@@ -179,6 +180,8 @@
 
             if (firstAndOnly) {
                 mFilters.append(mNextFilterId++,
+                        new ContactListFilter(ContactListFilter.FILTER_TYPE_STARRED));
+                mFilters.append(mNextFilterId++,
                         new ContactListFilter(ContactListFilter.FILTER_TYPE_CUSTOM));
             }
         }
@@ -219,6 +222,8 @@
             filter = new ContactListFilter(ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS);
         } else if (filterId == ContactListFilter.FILTER_TYPE_CUSTOM) {
             filter = new ContactListFilter(ContactListFilter.FILTER_TYPE_CUSTOM);
+        } else if (filterId == ContactListFilter.FILTER_TYPE_STARRED) {
+            filter = new ContactListFilter(ContactListFilter.FILTER_TYPE_STARRED);
         } else {
             filter = mFilters.get(filterId);
             if (filter == null) {
diff --git a/src/com/android/contacts/list/ContactListFilterView.java b/src/com/android/contacts/list/ContactListFilterView.java
index 8d0bf3b..744de05 100644
--- a/src/com/android/contacts/list/ContactListFilterView.java
+++ b/src/com/android/contacts/list/ContactListFilterView.java
@@ -52,7 +52,7 @@
     }
 
     public void bindView(boolean dropdown) {
-        if (mIcon == null) {
+        if (mLabel == null) {
             mIcon = (ImageView) findViewById(R.id.icon);
             mLabel = (TextView) findViewById(R.id.label);
             mIndentedLabel = (TextView) findViewById(R.id.indented_label);
@@ -60,7 +60,10 @@
 
         switch (mFilter.filterType) {
             case ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS: {
-                mIcon.setVisibility(View.GONE);
+                if (mIcon != null) {
+                    mIcon.setVisibility(View.VISIBLE);
+                    mIcon.setImageResource(R.drawable.ic_contact_list_filter_all);
+                }
                 mLabel.setText(R.string.list_filter_all_accounts);
                 mLabel.setVisibility(View.VISIBLE);
                 if (dropdown) {
@@ -68,8 +71,23 @@
                 }
                 break;
             }
+            case ContactListFilter.FILTER_TYPE_STARRED: {
+                if (mIcon != null) {
+                    mIcon.setVisibility(View.VISIBLE);
+                    mIcon.setImageResource(R.drawable.ic_contact_list_filter_starred);
+                }
+                mLabel.setText(R.string.list_filter_all_starred);
+                mLabel.setVisibility(View.VISIBLE);
+                if (dropdown) {
+                    mIndentedLabel.setVisibility(View.GONE);
+                }
+                break;
+            }
             case ContactListFilter.FILTER_TYPE_CUSTOM: {
-                mIcon.setVisibility(View.GONE);
+                if (mIcon != null) {
+                    mIcon.setVisibility(View.VISIBLE);
+                    mIcon.setImageResource(R.drawable.ic_contact_list_filter_custom);
+                }
                 mLabel.setText(dropdown
                         ? R.string.list_filter_customize
                         : R.string.list_filter_custom);
@@ -80,11 +98,13 @@
                 break;
             }
             case ContactListFilter.FILTER_TYPE_ACCOUNT: {
-                mIcon.setVisibility(View.VISIBLE);
-                if (mFilter.icon != null) {
-                    mIcon.setImageDrawable(mFilter.icon);
-                } else {
-                    mIcon.setImageResource(R.drawable.unknown_source);
+                if (mIcon != null) {
+                    mIcon.setVisibility(View.VISIBLE);
+                    if (mFilter.icon != null) {
+                        mIcon.setImageDrawable(mFilter.icon);
+                    } else {
+                        mIcon.setImageResource(R.drawable.unknown_source);
+                    }
                 }
                 mLabel.setText(mFilter.accountName);
                 mLabel.setVisibility(View.VISIBLE);
@@ -94,7 +114,9 @@
                 break;
             }
             case ContactListFilter.FILTER_TYPE_GROUP: {
-                mIcon.setVisibility(View.GONE);
+                if (mIcon != null) {
+                    mIcon.setVisibility(View.GONE);
+                }
                 if (dropdown) {
                     mLabel.setVisibility(View.GONE);
                     mIndentedLabel.setText(mFilter.title);
diff --git a/src/com/android/contacts/list/DefaultContactListAdapter.java b/src/com/android/contacts/list/DefaultContactListAdapter.java
index ed8af62..4160931 100644
--- a/src/com/android/contacts/list/DefaultContactListAdapter.java
+++ b/src/com/android/contacts/list/DefaultContactListAdapter.java
@@ -137,6 +137,10 @@
                 // filter
                 break;
             }
+            case ContactListFilter.FILTER_TYPE_STARRED: {
+                selection.append(Contacts.STARRED + "!=0");
+                break;
+            }
             case ContactListFilter.FILTER_TYPE_CUSTOM: {
                 if (mVisibleContactsOnly && mContactsWithPhoneNumbersOnly) {
                     selection.append(Contacts.IN_VISIBLE_GROUP + "=1"