Changed picker to stay as long as chooser is shown
Changed behavior of the picker to remain visible behind
the viewer as long as the chooser is active. When the
chooser is dismissed or an option is selected the picker
will finish.
Test: Manual, verified that picker remains visible until
the chooser is acted upon.
Bug: 32413513
Change-Id: I520e25de19d2290b0e52ce2212856afd6e3ee06e
diff --git a/src/com/android/contacts/group/GroupMembersFragment.java b/src/com/android/contacts/group/GroupMembersFragment.java
index be3b127..44bda74 100644
--- a/src/com/android/contacts/group/GroupMembersFragment.java
+++ b/src/com/android/contacts/group/GroupMembersFragment.java
@@ -50,7 +50,6 @@
import com.android.contacts.R;
import com.android.contacts.activities.ActionBarAdapter;
import com.android.contacts.common.ContactsUtils;
-import com.android.contacts.common.Experiments;
import com.android.contacts.common.list.ContactsSectionIndexer;
import com.android.contacts.common.list.MultiSelectEntryContactListAdapter.DeleteContactListener;
import com.android.contacts.common.logging.ListEvent;
@@ -65,7 +64,6 @@
import com.android.contacts.list.MultiSelectContactsListFragment;
import com.android.contacts.list.UiIntentActions;
import com.android.contactsbind.FeedbackHelper;
-import com.android.contactsbind.experiments.Flags;
import com.google.common.primitives.Longs;
import java.util.ArrayList;
@@ -91,7 +89,6 @@
private static final int LOADER_GROUP_METADATA = 0;
private static final int MSG_FAIL_TO_LOAD = 1;
private static final int RESULT_GROUP_ADD_MEMBER = 100;
- private static final int RESULT_SEND_TO_SELECTION = 200;
/** Filters out duplicate contacts. */
private class FilterCursorWrapper extends CursorWrapper {
@@ -294,7 +291,7 @@
/**
* Helper class for cp2 query used to look up all contact's emails and phone numbers.
*/
- private static abstract class Query {
+ public static abstract class Query {
public static final String EMAIL_SELECTION =
ContactsContract.Data.MIMETYPE + "='"
+ ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE + "'";
@@ -358,41 +355,6 @@
}
}
- private List<String> getSendToDataForIds(long[] ids, String scheme) {
- final List<String> items = new ArrayList<>();
- final String sIds = GroupUtil.convertArrayToString(ids);
- final String select = (ContactsUtils.SCHEME_MAILTO.equals(scheme)
- ? Query.EMAIL_SELECTION
- + " AND " + ContactsContract.CommonDataKinds.Email._ID + " IN (" + sIds + ")"
- : Query.PHONE_SELECTION
- + " AND " + ContactsContract.CommonDataKinds.Phone._ID + " IN (" + sIds + ")");
- final ContentResolver contentResolver = getContext().getContentResolver();
- final Cursor cursor = contentResolver.query(ContactsContract.Data.CONTENT_URI,
- ContactsUtils.SCHEME_MAILTO.equals(scheme)
- ? Query.EMAIL_PROJECTION
- : Query.PHONE_PROJECTION,
- select, null, null);
-
- if (cursor == null) {
- return items;
- }
-
- try {
- cursor.moveToPosition(-1);
- while (cursor.moveToNext()) {
- final String data = cursor.getString(Query.DATA1);
-
- if (!TextUtils.isEmpty(data)) {
- items.add(data);
- }
- }
- } finally {
- cursor.close();
- }
-
- return items;
- }
-
private void sendToGroup(long[] ids, String sendScheme, String title) {
if (ids == null || ids.length == 0) return;
@@ -471,17 +433,13 @@
}
final String itemsString = TextUtils.join(",", itemList);
- startSendToSelectionActivity(itemsString, sendScheme, title);
- }
-
- private void startSendToSelectionActivity(String listItems, String sendScheme, String title) {
- startActivity(GroupUtil.createSendToSelectionIntent(listItems, sendScheme, title));
+ GroupUtil.startSendToSelectionActivity(this, itemsString, sendScheme, title);
}
private void startSendToSelectionPickerActivity(long[] ids, long[] defaultSelection,
String sendScheme, String title) {
- startActivityForResult(GroupUtil.createSendToSelectionPickerIntent(getContext(), ids,
- defaultSelection, sendScheme, title), RESULT_SEND_TO_SELECTION);
+ startActivity(GroupUtil.createSendToSelectionPickerIntent(getContext(), ids,
+ defaultSelection, sendScheme, title));
}
private void startGroupAddMemberActivity() {
@@ -555,38 +513,25 @@
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (resultCode != Activity.RESULT_OK || data == null) {
+ if (resultCode != Activity.RESULT_OK || data == null
+ || requestCode != RESULT_GROUP_ADD_MEMBER) {
return;
}
- switch(requestCode) {
- case RESULT_GROUP_ADD_MEMBER: {
- long[] contactIds = data.getLongArrayExtra(
- UiIntentActions.TARGET_CONTACT_IDS_EXTRA_KEY);
- if (contactIds == null) {
- final long contactId = data.getLongExtra(
- UiIntentActions.TARGET_CONTACT_ID_EXTRA_KEY, -1);
- if (contactId > -1) {
- contactIds = new long[1];
- contactIds[0] = contactId;
- }
- }
- new UpdateGroupMembersAsyncTask(
- UpdateGroupMembersAsyncTask.TYPE_ADD,
- getContext(), contactIds, mGroupMetaData.groupId, mGroupMetaData.accountName,
- mGroupMetaData.accountType, mGroupMetaData.dataSet).execute();
- break;
- }
- case RESULT_SEND_TO_SELECTION: {
- final long[] ids = data.getLongArrayExtra(
- UiIntentActions.TARGET_CONTACT_IDS_EXTRA_KEY);
- final String sendScheme = data.getStringExtra(UiIntentActions.SELECTION_SEND_SCHEME);
- final String sendTitle = data.getStringExtra(UiIntentActions.SELECTION_SEND_TITLE);
- final List<String> items = getSendToDataForIds(ids, sendScheme);
- final String list = TextUtils.join(",", items);
- startSendToSelectionActivity(list, sendScheme, sendTitle);
- break;
+
+ long[] contactIds = data.getLongArrayExtra(
+ UiIntentActions.TARGET_CONTACT_IDS_EXTRA_KEY);
+ if (contactIds == null) {
+ final long contactId = data.getLongExtra(
+ UiIntentActions.TARGET_CONTACT_ID_EXTRA_KEY, -1);
+ if (contactId > -1) {
+ contactIds = new long[1];
+ contactIds[0] = contactId;
}
}
+ new UpdateGroupMembersAsyncTask(
+ UpdateGroupMembersAsyncTask.TYPE_ADD,
+ getContext(), contactIds, mGroupMetaData.groupId, mGroupMetaData.accountName,
+ mGroupMetaData.accountType, mGroupMetaData.dataSet).execute();
}
private final ActionBarAdapter.Listener mActionBarListener = new ActionBarAdapter.Listener() {
diff --git a/src/com/android/contacts/group/GroupUtil.java b/src/com/android/contacts/group/GroupUtil.java
index dc85152..3b79546 100644
--- a/src/com/android/contacts/group/GroupUtil.java
+++ b/src/com/android/contacts/group/GroupUtil.java
@@ -16,6 +16,8 @@
package com.android.contacts.group;
+import android.app.Fragment;
+import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
@@ -58,6 +60,8 @@
public static final String ACTION_SWITCH_GROUP = "switchGroup";
public static final String ACTION_UPDATE_GROUP = "updateGroup";
+ public static final int RESULT_SEND_TO_SELECTION = 100;
+
// System IDs of FFC groups in Google accounts
private static final Set<String> FFC_GROUPS =
new HashSet(Arrays.asList("Friends", "Family", "Coworkers"));
@@ -100,12 +104,48 @@
isFirstGroupInAccount, memberCount, isReadOnly, systemId);
}
+ public static List<String> getSendToDataForIds(Context context, long[] ids, String scheme) {
+ final List<String> items = new ArrayList<>();
+ final String sIds = GroupUtil.convertArrayToString(ids);
+ final String select = (ContactsUtils.SCHEME_MAILTO.equals(scheme)
+ ? GroupMembersFragment.Query.EMAIL_SELECTION
+ + " AND " + ContactsContract.CommonDataKinds.Email._ID + " IN (" + sIds + ")"
+ : GroupMembersFragment.Query.PHONE_SELECTION
+ + " AND " + ContactsContract.CommonDataKinds.Phone._ID + " IN (" + sIds + ")");
+ final ContentResolver contentResolver = context.getContentResolver();
+ final Cursor cursor = contentResolver.query(ContactsContract.Data.CONTENT_URI,
+ ContactsUtils.SCHEME_MAILTO.equals(scheme)
+ ? GroupMembersFragment.Query.EMAIL_PROJECTION
+ : GroupMembersFragment.Query.PHONE_PROJECTION,
+ select, null, null);
+
+ if (cursor == null) {
+ return items;
+ }
+
+ try {
+ cursor.moveToPosition(-1);
+ while (cursor.moveToNext()) {
+ final String data = cursor.getString(GroupMembersFragment.Query.DATA1);
+
+ if (!TextUtils.isEmpty(data)) {
+ items.add(data);
+ }
+ }
+ } finally {
+ cursor.close();
+ }
+
+ return items;
+ }
+
/** Returns an Intent to send emails/phones to some activity/app */
- public static Intent createSendToSelectionIntent(
- String itemsList, String sendScheme, String title) {
+ public static void startSendToSelectionActivity(
+ Fragment fragment, String itemsList, String sendScheme, String title) {
final Intent intent = new Intent(Intent.ACTION_SENDTO,
Uri.fromParts(sendScheme, itemsList, null));
- return Intent.createChooser(intent, title);
+ fragment.startActivityForResult(
+ Intent.createChooser(intent, title), RESULT_SEND_TO_SELECTION);
}
/** Returns an Intent to pick emails/phones to send to selection (or group) */
diff --git a/src/com/android/contacts/list/MultiSelectEmailAddressesListFragment.java b/src/com/android/contacts/list/MultiSelectEmailAddressesListFragment.java
index d3aa5ca..d14488a 100644
--- a/src/com/android/contacts/list/MultiSelectEmailAddressesListFragment.java
+++ b/src/com/android/contacts/list/MultiSelectEmailAddressesListFragment.java
@@ -15,9 +15,9 @@
*/
package com.android.contacts.list;
-import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
+import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
@@ -27,7 +27,9 @@
import com.android.contacts.R;
import com.android.contacts.common.logging.ListEvent;
+import com.android.contacts.group.GroupUtil;
+import java.util.List;
import java.util.TreeSet;
/** Displays a list of emails with check boxes. */
@@ -74,6 +76,11 @@
}
@Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ getActivity().finish();
+ }
+
+ @Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.menu_send: {
@@ -81,13 +88,10 @@
UiIntentActions.SELECTION_SEND_SCHEME);
final String title= getActivity().getIntent().getStringExtra(
UiIntentActions.SELECTION_SEND_TITLE);
- final Intent intent = new Intent();
- intent.putExtra(UiIntentActions.TARGET_CONTACT_IDS_EXTRA_KEY,
- getAdapter().getSelectedContactIdsArray());
- intent.putExtra(UiIntentActions.SELECTION_SEND_SCHEME, scheme);
- intent.putExtra(UiIntentActions.SELECTION_SEND_TITLE, title);
- getActivity().setResult(Activity.RESULT_OK, intent);
- getActivity().finish();
+ final List<String> items = GroupUtil.getSendToDataForIds(
+ getActivity(), getAdapter().getSelectedContactIdsArray(), scheme);
+ final String list = TextUtils.join(",", items);
+ GroupUtil.startSendToSelectionActivity(this, list, scheme, title);
return true;
}
}
diff --git a/src/com/android/contacts/list/MultiSelectPhoneNumbersListFragment.java b/src/com/android/contacts/list/MultiSelectPhoneNumbersListFragment.java
index aea89e4..5a1a761 100644
--- a/src/com/android/contacts/list/MultiSelectPhoneNumbersListFragment.java
+++ b/src/com/android/contacts/list/MultiSelectPhoneNumbersListFragment.java
@@ -15,9 +15,9 @@
*/
package com.android.contacts.list;
-import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
+import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
@@ -27,7 +27,9 @@
import com.android.contacts.R;
import com.android.contacts.common.logging.ListEvent;
+import com.android.contacts.group.GroupUtil;
+import java.util.List;
import java.util.TreeSet;
/** Displays a list of phone numbers with check boxes. */
@@ -74,6 +76,11 @@
}
@Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ getActivity().finish();
+ }
+
+ @Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.menu_send: {
@@ -81,13 +88,10 @@
UiIntentActions.SELECTION_SEND_SCHEME);
final String title= getActivity().getIntent().getStringExtra(
UiIntentActions.SELECTION_SEND_TITLE);
- final Intent intent = new Intent();
- intent.putExtra(UiIntentActions.TARGET_CONTACT_IDS_EXTRA_KEY,
- getAdapter().getSelectedContactIdsArray());
- intent.putExtra(UiIntentActions.SELECTION_SEND_SCHEME, scheme);
- intent.putExtra(UiIntentActions.SELECTION_SEND_TITLE, title);
- getActivity().setResult(Activity.RESULT_OK, intent);
- getActivity().finish();
+ final List<String> items = GroupUtil.getSendToDataForIds(
+ getActivity(), getAdapter().getSelectedContactIdsArray(), scheme);
+ final String list = TextUtils.join(",", items);
+ GroupUtil.startSendToSelectionActivity(this, list, scheme, title);
return true;
}
}