Workaround AccountWithDataSet problems on work profiles
Bug 29417435
Bug 18641067
Change-Id: I31084b0f69a8e56b88610afe6e18d6f01e6cabe9
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 f1242d6..c3c14c6 100644
--- a/src/com/android/contacts/activities/GroupMembersActivity.java
+++ b/src/com/android/contacts/activities/GroupMembersActivity.java
@@ -363,8 +363,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.