Loading src/com/android/contacts/activities/PeopleActivity.java +9 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); } } } src/com/android/contacts/interactions/ContactDeletionInteraction.java +12 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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(); Loading @@ -362,4 +370,8 @@ public class ContactDeletionInteraction extends Fragment Toast.makeText(mContext, deleteToastMessage, Toast.LENGTH_LONG).show(); } } public void setListener(Listener listener) { mListener = listener; } } src/com/android/contacts/interactions/ContactMultiDeletionInteraction.java +3 −1 Original line number Diff line number Diff line Loading @@ -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; Loading src/com/android/contacts/list/ContactEntryListFragment.java +16 −0 Original line number Diff line number Diff line Loading @@ -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) { Loading src/com/android/contacts/list/DefaultContactBrowseListFragment.java +25 −4 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading Loading @@ -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(); } } Loading @@ -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 Loading Loading
src/com/android/contacts/activities/PeopleActivity.java +9 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); } } }
src/com/android/contacts/interactions/ContactDeletionInteraction.java +12 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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(); Loading @@ -362,4 +370,8 @@ public class ContactDeletionInteraction extends Fragment Toast.makeText(mContext, deleteToastMessage, Toast.LENGTH_LONG).show(); } } public void setListener(Listener listener) { mListener = listener; } }
src/com/android/contacts/interactions/ContactMultiDeletionInteraction.java +3 −1 Original line number Diff line number Diff line Loading @@ -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; Loading
src/com/android/contacts/list/ContactEntryListFragment.java +16 −0 Original line number Diff line number Diff line Loading @@ -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) { Loading
src/com/android/contacts/list/DefaultContactBrowseListFragment.java +25 −4 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading Loading @@ -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(); } } Loading @@ -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 Loading