Merge "Sort group metadata in a localized way"
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 6a0338a..72c6481 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -16,8 +16,8 @@
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.contacts"
-    android:versionCode="10502"
-    android:versionName="1.5.2">
+    android:versionCode="10503"
+    android:versionName="1.5.3">
 
     <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="23" />
     <original-package android:name="com.android.contacts" />
diff --git a/res/drawable/ic_menu_group_add.xml b/res/drawable/ic_add.xml
similarity index 100%
rename from res/drawable/ic_menu_group_add.xml
rename to res/drawable/ic_add.xml
diff --git a/res/layout/floating_action_button.xml b/res/layout/floating_action_button.xml
index 294d88b..95c76ae 100644
--- a/res/layout/floating_action_button.xml
+++ b/res/layout/floating_action_button.xml
@@ -33,5 +33,5 @@
         android:background="@drawable/floating_action_button"
         android:tint="@color/floating_action_button_icon_color"
         android:contentDescription="@string/action_menu_add_new_contact_button"
-        android:src="@drawable/ic_person_add_24dp"/>
+        android:src="@drawable/ic_add"/>
 </FrameLayout>
\ No newline at end of file
diff --git a/src/com/android/contacts/ContactsDrawerActivity.java b/src/com/android/contacts/ContactsDrawerActivity.java
index 4c45606..62a9258 100644
--- a/src/com/android/contacts/ContactsDrawerActivity.java
+++ b/src/com/android/contacts/ContactsDrawerActivity.java
@@ -40,7 +40,6 @@
 
 import com.android.contacts.common.ContactsUtils;
 import com.android.contacts.common.compat.BlockedNumberContractCompat;
-import com.android.contacts.common.compat.CompatUtils;
 import com.android.contacts.common.compat.TelecomManagerUtil;
 import com.android.contacts.common.list.ContactListFilter;
 import com.android.contacts.common.list.ContactListFilterController;
@@ -195,7 +194,7 @@
         // Create a menu item in the sub menu to add new groups
         final MenuItem menuItem = subMenu.add(R.id.nav_groups_items, Menu.NONE, Menu.NONE,
                 getString(R.string.menu_new_group_action_bar));
-        menuItem.setIcon(R.drawable.ic_menu_group_add);
+        menuItem.setIcon(R.drawable.ic_add);
         menuItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
             @Override
             public boolean onMenuItemClick(MenuItem item) {
diff --git a/src/com/android/contacts/activities/ContactSelectionActivity.java b/src/com/android/contacts/activities/ContactSelectionActivity.java
index 6e2746d..17ba765 100644
--- a/src/com/android/contacts/activities/ContactSelectionActivity.java
+++ b/src/com/android/contacts/activities/ContactSelectionActivity.java
@@ -356,11 +356,16 @@
             }
 
             case ContactsRequest.ACTION_PICK_GROUP_MEMBERS: {
-                final AccountWithDataSet account = getIntent().getParcelableExtra(
-                        UiIntentActions.GROUP_ACCOUNT_WITH_DATA_SET);
+                final String accountName = getIntent().getStringExtra(
+                        UiIntentActions.GROUP_ACCOUNT_NAME);
+                final String accountType = getIntent().getStringExtra(
+                        UiIntentActions.GROUP_ACCOUNT_TYPE);
+                final String accountDataSet = getIntent().getStringExtra(
+                        UiIntentActions.GROUP_ACCOUNT_DATA_SET);
                 final ArrayList<String> contactIds = getIntent().getStringArrayListExtra(
                         UiIntentActions.GROUP_CONTACT_IDS);
-                mListFragment = GroupMemberPickerFragment.newInstance(account, contactIds);
+                mListFragment = GroupMemberPickerFragment.newInstance(
+                        accountName, accountType, accountDataSet, contactIds);
                 break;
             }
 
diff --git a/src/com/android/contacts/activities/GroupMembersActivity.java b/src/com/android/contacts/activities/GroupMembersActivity.java
index fd65090..4383de1 100644
--- a/src/com/android/contacts/activities/GroupMembersActivity.java
+++ b/src/com/android/contacts/activities/GroupMembersActivity.java
@@ -397,8 +397,9 @@
             case R.id.menu_add: {
                 final Intent intent = new Intent(Intent.ACTION_PICK);
                 intent.setType(ContactsContract.Groups.CONTENT_ITEM_TYPE);
-                intent.putExtra(UiIntentActions.GROUP_ACCOUNT_WITH_DATA_SET,
-                        mGroupMetadata.createAccountWithDataSet());
+                intent.putExtra(UiIntentActions.GROUP_ACCOUNT_NAME, mGroupMetadata.accountName);
+                intent.putExtra(UiIntentActions.GROUP_ACCOUNT_TYPE, mGroupMetadata.accountType);
+                intent.putExtra(UiIntentActions.GROUP_ACCOUNT_DATA_SET, mGroupMetadata.dataSet);
                 intent.putExtra(UiIntentActions.GROUP_CONTACT_IDS,
                         getExistingGroupMemberContactIds());
                 startActivityForResult(intent, RESULT_GROUP_ADD_MEMBER);
diff --git a/src/com/android/contacts/list/ContactsIntentResolver.java b/src/com/android/contacts/list/ContactsIntentResolver.java
index 4bd131e..39eaeba 100644
--- a/src/com/android/contacts/list/ContactsIntentResolver.java
+++ b/src/com/android/contacts/list/ContactsIntentResolver.java
@@ -16,6 +16,7 @@
 
 package com.android.contacts.list;
 
+import android.accounts.Account;
 import android.app.Activity;
 import android.app.SearchManager;
 import android.content.Intent;
@@ -94,8 +95,10 @@
                 request.setActionCode(ContactsRequest.ACTION_PICK_EMAIL);
             } else if (Groups.CONTENT_ITEM_TYPE.equals(resolvedType)) {
                 request.setActionCode(ContactsRequest.ACTION_PICK_GROUP_MEMBERS);
-                request.setAccountWithDataSet(intent.<AccountWithDataSet> getParcelableExtra(
-                        UiIntentActions.GROUP_ACCOUNT_WITH_DATA_SET));
+                request.setAccountWithDataSet(new AccountWithDataSet(
+                        intent.getStringExtra(UiIntentActions.GROUP_ACCOUNT_NAME),
+                        intent.getStringExtra(UiIntentActions.GROUP_ACCOUNT_TYPE),
+                        intent.getStringExtra(UiIntentActions.GROUP_ACCOUNT_DATA_SET)));
                 request.setRawContactIds(intent.getStringArrayListExtra(
                         UiIntentActions.GROUP_CONTACT_IDS));
             }
diff --git a/src/com/android/contacts/list/ContactsRequest.java b/src/com/android/contacts/list/ContactsRequest.java
index a686752..615fac6 100644
--- a/src/com/android/contacts/list/ContactsRequest.java
+++ b/src/com/android/contacts/list/ContactsRequest.java
@@ -16,10 +16,7 @@
 
 package com.android.contacts.list;
 
-import android.content.Intent;
 import android.net.Uri;
-import android.os.Parcel;
-import android.os.Parcelable;
 
 import com.android.contacts.common.model.account.AccountWithDataSet;
 
diff --git a/src/com/android/contacts/list/GroupMemberPickerFragment.java b/src/com/android/contacts/list/GroupMemberPickerFragment.java
index fb378e6..605758f 100644
--- a/src/com/android/contacts/list/GroupMemberPickerFragment.java
+++ b/src/com/android/contacts/list/GroupMemberPickerFragment.java
@@ -29,7 +29,6 @@
 import com.android.contacts.common.list.ContactListAdapter.ContactQuery;
 import com.android.contacts.common.list.ContactListFilter;
 import com.android.contacts.common.list.DefaultContactListAdapter;
-import com.android.contacts.common.model.account.AccountWithDataSet;
 
 import java.util.ArrayList;
 
@@ -41,10 +40,14 @@
 
     public static final String TAG = "GroupMemberPicker";
 
-    private static final String KEY_ACCOUNT = "account";
+    private static final String KEY_ACCOUNT_NAME = "accountName";
+    private static final String KEY_ACCOUNT_TYPE = "accountType";
+    private static final String KEY_ACCOUNT_DATA_SET = "accountDataSet";
     private static final String KEY_RAW_CONTACT_IDS = "rawContactIds";
 
-    private static final String ARG_ACCOUNT = "account";
+    private static final String ARG_ACCOUNT_NAME = "accountName";
+    private static final String ARG_ACCOUNT_TYPE = "accountType";
+    private static final String ARG_ACCOUNT_DATA_SET = "accountDataSet";
     private static final String ARG_RAW_CONTACT_IDS = "rawContactIds";
 
     /** Callbacks for host of {@link GroupMemberPickerFragment}. */
@@ -132,14 +135,18 @@
         }
     }
 
-    private AccountWithDataSet mAccount;
+    private String mAccountName;
+    private String mAccountType;
+    private String mAccountDataSet;
     private ArrayList<String> mRawContactIds;
     private Listener mListener;
 
-    public static GroupMemberPickerFragment newInstance(AccountWithDataSet account,
-            ArrayList<String> rawContactIds) {
+    public static GroupMemberPickerFragment newInstance(String accountName, String accountType,
+            String accountDataSet, ArrayList<String> rawContactIds) {
         final Bundle args = new Bundle();
-        args.putParcelable(ARG_ACCOUNT, account);
+        args.putString(ARG_ACCOUNT_NAME, accountName);
+        args.putString(ARG_ACCOUNT_TYPE, accountType);
+        args.putString(ARG_ACCOUNT_DATA_SET, accountDataSet);
         args.putStringArrayList(ARG_RAW_CONTACT_IDS, rawContactIds);
 
         final GroupMemberPickerFragment fragment = new GroupMemberPickerFragment();
@@ -158,10 +165,14 @@
     @Override
     public void onCreate(Bundle savedState) {
         if (savedState == null) {
-            mAccount = getArguments().getParcelable(ARG_ACCOUNT);
+            mAccountName = getArguments().getString(ARG_ACCOUNT_NAME);
+            mAccountType = getArguments().getString(ARG_ACCOUNT_TYPE);
+            mAccountDataSet = getArguments().getString(ARG_ACCOUNT_DATA_SET);
             mRawContactIds = getArguments().getStringArrayList(ARG_RAW_CONTACT_IDS);
         } else {
-            mAccount = savedState.getParcelable(KEY_ACCOUNT);
+            mAccountName = savedState.getString(KEY_ACCOUNT_NAME);
+            mAccountType = savedState.getString(KEY_ACCOUNT_TYPE);
+            mAccountDataSet = savedState.getString(KEY_ACCOUNT_DATA_SET);
             mRawContactIds = savedState.getStringArrayList(KEY_RAW_CONTACT_IDS);
         }
         super.onCreate(savedState);
@@ -170,7 +181,9 @@
     @Override
     public void onSaveInstanceState(Bundle outState) {
         super.onSaveInstanceState(outState);
-        outState.putParcelable(KEY_ACCOUNT, mAccount);
+        outState.putString(KEY_ACCOUNT_NAME, mAccountName);
+        outState.putString(KEY_ACCOUNT_TYPE, mAccountType);
+        outState.putString(KEY_ACCOUNT_DATA_SET, mAccountDataSet);
         outState.putStringArrayList(KEY_RAW_CONTACT_IDS, mRawContactIds);
     }
 
@@ -194,7 +207,7 @@
     protected DefaultContactListAdapter createListAdapter() {
         final DefaultContactListAdapter adapter = new DefaultContactListAdapter(getActivity());
         adapter.setFilter(ContactListFilter.createGroupMembersFilter(
-                mAccount.type, mAccount.name, mAccount.dataSet));
+                mAccountType, mAccountName, mAccountDataSet));
         adapter.setSectionHeaderDisplayEnabled(true);
         adapter.setDisplayPhotos(true);
         return adapter;
diff --git a/src/com/android/contacts/list/UiIntentActions.java b/src/com/android/contacts/list/UiIntentActions.java
index 571d56f..9552942 100644
--- a/src/com/android/contacts/list/UiIntentActions.java
+++ b/src/com/android/contacts/list/UiIntentActions.java
@@ -40,10 +40,22 @@
     public static final String GROUP_NAME_EXTRA_KEY = "com.android.contacts.extra.GROUP";
 
     /**
-     * The account used to filter potential new group members.
+     * The account name used to filter potential new group members.
      */
-    public static final String GROUP_ACCOUNT_WITH_DATA_SET =
-            "com.android.contacts.extra.GROUP_ACCOUNT_WITH_DATA_SET";
+    public static final String GROUP_ACCOUNT_NAME =
+            "com.android.contacts.extra.GROUP_ACCOUNT_NAME";
+
+    /**
+     * The account type used to filter potential new group members.
+     */
+    public static final String GROUP_ACCOUNT_TYPE =
+            "com.android.contacts.extra.GROUP_ACCOUNT_TYPE";
+
+    /**
+     * The account data set used to filter potential new group members.
+     */
+    public static final String GROUP_ACCOUNT_DATA_SET =
+            "com.android.contacts.extra.GROUP_ACCOUNT_DATA_SET";
 
     /**
      * The contact IDs for existing group members.