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

Commit 45d8a58e authored by Walter Jang's avatar Walter Jang Committed by Android (Google) Code Review
Browse files

Merge "Restart default directory loader after yenta search deletes" into ub-contactsdialer-i-dev

parents 2c35625c f0f25f54
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -82,6 +82,7 @@ import com.android.contacts.group.GroupsFragment;
import com.android.contacts.group.GroupsFragment.GroupsListener;
import com.android.contacts.interactions.AccountFiltersFragment;
import com.android.contacts.interactions.AccountFiltersFragment.AccountFiltersListener;
import com.android.contacts.interactions.ContactDeletionInteraction;
import com.android.contacts.list.AccountFilterActivity;
import com.android.contacts.list.ContactListFilter;
import com.android.contacts.list.ContactListFilterController;
@@ -1522,5 +1523,12 @@ public class PeopleActivity extends AppCompatContactsActivity implements
        return intent;
    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == DefaultContactBrowseListFragment.ACTIVITY_REQUEST_QUICK_CONTACT &&
                resultCode == ContactDeletionInteraction.RESULT_CODE_DELETED &&
                mContactsListFragment != null) {
            mContactsListFragment.maybeRestartDefaultDirectoryPartitionLoader();
        }
    }
}
+12 −0
Original line number Diff line number Diff line
@@ -81,6 +81,10 @@ public class ContactDeletionInteraction extends Fragment
    private static final int COLUMN_INDEX_DISPLAY_NAME = 5;
    private static final int COLUMN_INDEX_DISPLAY_NAME_ALT = 6;

    public interface Listener {
        void onDeletionFinished();
    }

    private boolean mActive;
    private Uri mContactUri;
    private String mDisplayName;
@@ -88,6 +92,7 @@ public class ContactDeletionInteraction extends Fragment
    private boolean mFinishActivityWhenDone;
    private Context mContext;
    private AlertDialog mDialog;
    private Listener mListener;

    /** This is a wrapper around the fragment's loader manager to be used only during testing. */
    private TestLoaderManagerBase mTestLoaderManager;
@@ -346,6 +351,9 @@ public class ContactDeletionInteraction extends Fragment

    protected void doDeleteContact(Uri contactUri) {
        mContext.startService(ContactSaveService.createDeleteContactIntent(mContext, contactUri));
        if (mListener != null) {
            mListener.onDeletionFinished();
        }
        if (isAdded() && mFinishActivityWhenDone) {
            getActivity().setResult(RESULT_CODE_DELETED);
            getActivity().finish();
@@ -362,4 +370,8 @@ public class ContactDeletionInteraction extends Fragment
            Toast.makeText(mContext, deleteToastMessage, Toast.LENGTH_LONG).show();
        }
    }

    public void setListener(Listener listener) {
        mListener = listener;
    }
}
+3 −1
Original line number Diff line number Diff line
@@ -313,8 +313,10 @@ public class ContactMultiDeletionInteraction extends Fragment
    protected void doDeleteContact(long[] contactIds, final String[] names) {
        mContext.startService(ContactSaveService.createDeleteMultipleContactsIntent(mContext,
                contactIds, names));
        if (mListener != null) {
            mListener.onDeletionFinished();
        }
    }

    public void setListener(MultiContactDeleteListener listener) {
        mListener = listener;
+16 −0
Original line number Diff line number Diff line
@@ -348,6 +348,22 @@ public abstract class ContactEntryListFragment<T extends ContactEntryListAdapter
        mLoadPriorityDirectoriesOnly = false;
    }

    /** Restarts the {@link DirectoryPartition} with {@link Directory#DEFAULT} directory ID. */
    protected void restartDefaultDirectoryPartitionLoader() {
        if (mAdapter == null) return;
        int partitionCount = mAdapter.getPartitionCount();
        for (int i = 0; i < partitionCount; i++) {
            final Partition partition = mAdapter.getPartition(i);
            if (partition instanceof DirectoryPartition) {
                final DirectoryPartition directoryPartition = (DirectoryPartition) partition;
                long directoryId = directoryPartition.getDirectoryId();
                if (directoryId == Directory.DEFAULT) {
                    loadDirectoryPartitionDelayed(i, directoryPartition);
                }
            }
        }
    }

    @Override
    public Loader<Cursor> onCreateLoader(int id, Bundle args) {
        if (id == DIRECTORY_LOADER_ID) {
+25 −4
Original line number Diff line number Diff line
@@ -97,6 +97,7 @@ public class DefaultContactBrowseListFragment extends ContactBrowseListFragment
    private static final String KEY_SEARCH_RESULT_CLICKED = "search_result_clicked";

    private static final int ACTIVITY_REQUEST_CODE_SHARE = 0;
    public static final int ACTIVITY_REQUEST_QUICK_CONTACT = 1000;

    private View mSearchHeaderView;
    private View mSearchProgress;
@@ -942,14 +943,24 @@ public class DefaultContactBrowseListFragment extends ContactBrowseListFragment
                        /* count */ getAdapter().getCount(),
                        /* clickedIndex */ position, /* numSelected */ 0);

                ImplicitIntentsUtil.startQuickContact(
                        getActivity(), contactLookupUri, previousScreen);
                // Start QuickContact "for result" in case we're using yenta search and need
                // to manually reload the default directory partition when contacts are deleted.
                // The QuickContact Activity result is handled in PeopleActivity.
                ImplicitIntentsUtil.startQuickContactForResult(getActivity(), contactLookupUri,
                        previousScreen, ACTIVITY_REQUEST_QUICK_CONTACT);
            }
        }

        @Override
        public void onDeleteContactAction(Uri contactUri) {
            final ContactDeletionInteraction interacton =
                    ContactDeletionInteraction.start(mActivity, contactUri, false);
            interacton.setListener(new ContactDeletionInteraction.Listener() {
                @Override
                public void onDeletionFinished() {
                    maybeRestartDefaultDirectoryPartitionLoader();
                }
            });
        }

        @Override
@@ -1157,6 +1168,16 @@ public class DefaultContactBrowseListFragment extends ContactBrowseListFragment
                /* numSelected */ getSelectedContactIds().size());
            mActionBarAdapter.setSelectionMode(false);
            mIsDeletionInProgress = false;
            maybeRestartDefaultDirectoryPartitionLoader();
        }
    }

    // Because the yenta search loader is not automatically restarted when contacts are deleted
    // we must manually restart it when contacts displayed in yenta search results are deleted
    // either on this fragment directly or after opening QuickContact.
    public void maybeRestartDefaultDirectoryPartitionLoader() {
        if (isSearchMode() && Flags.getInstance().getBoolean(Experiments.SEARCH_YENTA)) {
            restartDefaultDirectoryPartitionLoader();
        }
    }

@@ -1183,7 +1204,7 @@ public class DefaultContactBrowseListFragment extends ContactBrowseListFragment
                    /* listType */ getListTypeIncludingSearch(),
                    /* count */ getAdapter().getCount(), /* clickedIndex */ -1,
                    /* numSelected */ getAdapter().getSelectedContactIds().size());

                break;
// TODO fix or remove multipicker code: ag/54762
//                else if (resultCode == RESULT_CANCELED && mMode == MODE_PICK_MULTIPLE_PHONES) {
//                    // Finish the activity if the sub activity was canceled as back key is used