Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9970f301 authored by Sean Midford's avatar Sean Midford
Browse files

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
parent 3ca4af5a
Loading
Loading
Loading
Loading
+19 −74
Original line number Diff line number Diff line
@@ -50,7 +50,6 @@ import com.android.contacts.GroupMetaDataLoader;
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.ContactsRequest;
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 @@ public class GroupMembersFragment extends MultiSelectContactsListFragment<GroupM
    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 @@ public class GroupMembersFragment extends MultiSelectContactsListFragment<GroupM
    /**
     * 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 @@ public class GroupMembersFragment extends MultiSelectContactsListFragment<GroupM
        }
    }

    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 @@ public class GroupMembersFragment extends MultiSelectContactsListFragment<GroupM
        }

        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,11 +513,11 @@ public class GroupMembersFragment extends MultiSelectContactsListFragment<GroupM

    @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) {
@@ -574,19 +532,6 @@ public class GroupMembersFragment extends MultiSelectContactsListFragment<GroupM
                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;
            }
        }
    }

    private final ActionBarAdapter.Listener mActionBarListener = new ActionBarAdapter.Listener() {
+43 −3
Original line number Diff line number Diff line
@@ -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 final class GroupUtil {
    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 @@ public final class GroupUtil {
                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) */
+12 −8
Original line number Diff line number Diff line
@@ -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 android.view.ViewGroup;

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. */
@@ -73,6 +75,11 @@ public class MultiSelectEmailAddressesListFragment
        });
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        getActivity().finish();
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch(item.getItemId()) {
@@ -81,13 +88,10 @@ public class MultiSelectEmailAddressesListFragment
                        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;
            }
        }
+12 −8
Original line number Diff line number Diff line
@@ -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 android.view.ViewGroup;

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. */
@@ -73,6 +75,11 @@ public class MultiSelectPhoneNumbersListFragment
        });
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        getActivity().finish();
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch(item.getItemId()) {
@@ -81,13 +88,10 @@ public class MultiSelectPhoneNumbersListFragment
                        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;
            }
        }