Undemote contact when starring

Bug: 10727765
Change-Id: Icc661cd01f52fbde5ab9354415b5d929165a8bd1
diff --git a/src/com/android/contacts/ContactSaveService.java b/src/com/android/contacts/ContactSaveService.java
index 7c8782f..32fb190 100644
--- a/src/com/android/contacts/ContactSaveService.java
+++ b/src/com/android/contacts/ContactSaveService.java
@@ -40,6 +40,7 @@
 import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.Data;
 import android.provider.ContactsContract.Groups;
+import android.provider.ContactsContract.PinnedPositions;
 import android.provider.ContactsContract.Profile;
 import android.provider.ContactsContract.RawContacts;
 import android.provider.ContactsContract.RawContactsEntity;
@@ -834,6 +835,20 @@
         final ContentValues values = new ContentValues(1);
         values.put(Contacts.STARRED, value);
         getContentResolver().update(contactUri, values, null, null);
+
+        // Undemote the contact if necessary
+        final Cursor c = getContentResolver().query(contactUri, new String[] {Contacts._ID},
+                null, null, null);
+        try {
+            if (c.moveToFirst()) {
+                final long id = c.getLong(0);
+                values.clear();
+                values.put(String.valueOf(id), PinnedPositions.UNDEMOTE);
+                getContentResolver().update(PinnedPositions.UPDATE_URI, values, null, null);
+            }
+        } finally {
+            c.close();
+        }
     }
 
     /**