Merge "Forward intent extras to editor activity from springboard" into ub-contactsdialer-h-dev
diff --git a/src/com/android/contacts/SimImportFragment.java b/src/com/android/contacts/SimImportFragment.java
index 7421df4..7ce00d2 100644
--- a/src/com/android/contacts/SimImportFragment.java
+++ b/src/com/android/contacts/SimImportFragment.java
@@ -57,7 +57,7 @@
implements LoaderManager.LoaderCallbacks<ArrayList<SimContact>>,
MultiSelectEntryContactListAdapter.SelectedContactsListener {
- private static final String KEY_ACCOUNT = "account";
+ private static final String KEY_SELECTED_IDS = "selectedIds";
private static final String ARG_SUBSCRIPTION_ID = "subscriptionId";
public static final int NO_SUBSCRIPTION_ID = -1;
@@ -70,11 +70,14 @@
private ListView mListView;
private View mImportButton;
+ private long[] mSelectedContacts;
+
private int mSubscriptionId;
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+
setStyle(STYLE_NORMAL, R.style.PeopleThemeAppCompat_FullScreenDialog);
mPreferences = new ContactsPreferences(getContext());
mAccountTypeManager = AccountTypeManager.getInstance(getActivity());
@@ -87,6 +90,9 @@
final Bundle args = getArguments();
mSubscriptionId = args == null ? NO_SUBSCRIPTION_ID : args.getInt(ARG_SUBSCRIPTION_ID,
NO_SUBSCRIPTION_ID);
+
+ if (savedInstanceState == null) return;
+ mSelectedContacts = savedInstanceState.getLongArray(KEY_SELECTED_IDS);
}
@Override
@@ -112,8 +118,7 @@
mAccountHeaderPresenter = new AccountHeaderPresenter(
view.findViewById(R.id.account_header_container));
if (savedInstanceState != null) {
- AccountWithDataSet account = savedInstanceState.getParcelable(KEY_ACCOUNT);
- mAccountHeaderPresenter.setCurrentAccount(account);
+ mAccountHeaderPresenter.onRestoreInstanceState(savedInstanceState);
} else {
final AccountWithDataSet currentDefaultAccount = AccountWithDataSet
.getDefaultOrBestFallback(mPreferences, mAccountTypeManager);
@@ -164,7 +169,10 @@
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
- outState.putParcelable(KEY_ACCOUNT, mAccountHeaderPresenter.getCurrentAccount());
+ mAccountHeaderPresenter.onSaveInstanceState(outState);
+ if (mAdapter != null) {
+ outState.putLongArray(KEY_SELECTED_IDS, mAdapter.getSelectedContactIdsArray());
+ }
}
@Override
@@ -177,8 +185,11 @@
ArrayList<SimContact> data) {
mListView.setEmptyView(getView().findViewById(R.id.empty_message));
mAdapter.setContacts(data);
- // we default to selecting all contacts.
- mAdapter.selectAll();
+ if (mSelectedContacts != null) {
+ mAdapter.select(mSelectedContacts);
+ } else {
+ mAdapter.selectAll();
+ }
mLoadingIndicator.hide();
}
@@ -293,6 +304,14 @@
}
setSelectedContactIds(selected);
}
+
+ public void select(long[] contacts) {
+ final TreeSet<Long> selected = new TreeSet<>();
+ for (long contact : contacts) {
+ selected.add(contact);
+ }
+ setSelectedContactIds(selected);
+ }
}
public static class SimContactLoader extends AsyncTaskLoader<ArrayList<SimContact>> {
diff --git a/src/com/android/contacts/editor/AccountHeaderPresenter.java b/src/com/android/contacts/editor/AccountHeaderPresenter.java
index de2b014..5323c60 100644
--- a/src/com/android/contacts/editor/AccountHeaderPresenter.java
+++ b/src/com/android/contacts/editor/AccountHeaderPresenter.java
@@ -16,6 +16,7 @@
package com.android.contacts.editor;
import android.content.Context;
+import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.StringRes;
import android.view.View;
@@ -42,6 +43,8 @@
*/
public class AccountHeaderPresenter {
+ private static final String KEY_SELECTED_ACCOUNT = "accountHeaderSelectedAccount";
+
public interface Observer {
void onChange(AccountHeaderPresenter sender);
@@ -100,6 +103,18 @@
return mCurrentAccount;
}
+ public void onSaveInstanceState(Bundle outState) {
+ outState.putParcelable(KEY_SELECTED_ACCOUNT, mCurrentAccount);
+ }
+
+ public void onRestoreInstanceState(Bundle savedInstanceState) {
+ if (savedInstanceState == null) return;
+ if (mCurrentAccount == null) {
+ mCurrentAccount = savedInstanceState.getParcelable(KEY_SELECTED_ACCOUNT);
+ }
+ updateDisplayedAccount();
+ }
+
private void updateDisplayedAccount() {
mAccountHeaderContainer.setVisibility(View.GONE);
if (mCurrentAccount == null) return;
@@ -146,31 +161,40 @@
final View.OnClickListener onClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
- final ListPopupWindow popup = new ListPopupWindow(mContext, null);
- final AccountsListAdapter adapter =
- new AccountsListAdapter(mContext,
- AccountsListAdapter.AccountListFilter.ACCOUNTS_CONTACT_WRITABLE,
- mCurrentAccount);
- popup.setWidth(mAccountHeaderContainer.getWidth());
- popup.setAnchorView(mAccountHeaderContainer);
- popup.setAdapter(adapter);
- popup.setModal(true);
- popup.setInputMethodMode(ListPopupWindow.INPUT_METHOD_NOT_NEEDED);
- popup.setOnItemClickListener(new AdapterView.OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView<?> parent, View view, int position,
- long id) {
- UiClosables.closeQuietly(popup);
- final AccountWithDataSet newAccount = adapter.getItem(position);
- setCurrentAccount(newAccount);
- }
- });
- popup.show();
+ showPopup();
}
};
setUpAccountSelector(nameLabel.toString(), onClickListener);
}
+ private void showPopup() {
+ final ListPopupWindow popup = new ListPopupWindow(mContext);
+ final AccountsListAdapter adapter =
+ new AccountsListAdapter(mContext,
+ AccountsListAdapter.AccountListFilter.ACCOUNTS_CONTACT_WRITABLE,
+ mCurrentAccount);
+ popup.setWidth(mAccountHeaderContainer.getWidth());
+ popup.setAnchorView(mAccountHeaderContainer);
+ popup.setAdapter(adapter);
+ popup.setModal(true);
+ popup.setInputMethodMode(ListPopupWindow.INPUT_METHOD_NOT_NEEDED);
+ popup.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView<?> parent, View view, int position,
+ long id) {
+ UiClosables.closeQuietly(popup);
+ final AccountWithDataSet newAccount = adapter.getItem(position);
+ setCurrentAccount(newAccount);
+ }
+ });
+ mAccountHeaderContainer.post(new Runnable() {
+ @Override
+ public void run() {
+ popup.show();
+ }
+ });
+ }
+
private void setUpAccountSelector(String nameLabel, View.OnClickListener listener) {
addAccountHeader(nameLabel);
// Add handlers for choosing another account to save to.