summaryrefslogtreecommitdiffstats
path: root/src/com/android/contacts/common/interactions/ImportExportDialogFragment.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/contacts/common/interactions/ImportExportDialogFragment.java')
-rw-r--r--src/com/android/contacts/common/interactions/ImportExportDialogFragment.java130
1 files changed, 95 insertions, 35 deletions
diff --git a/src/com/android/contacts/common/interactions/ImportExportDialogFragment.java b/src/com/android/contacts/common/interactions/ImportExportDialogFragment.java
index 6908b09d..68fb7df4 100644
--- a/src/com/android/contacts/common/interactions/ImportExportDialogFragment.java
+++ b/src/com/android/contacts/common/interactions/ImportExportDialogFragment.java
@@ -22,6 +22,7 @@ import android.accounts.Account;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
+import android.app.DialogFragment;
import android.app.FragmentManager;
import android.app.ProgressDialog;
import android.content.BroadcastReceiver;
@@ -52,8 +53,11 @@ import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.Data;
import android.provider.ContactsContract.CommonDataKinds.StructuredName;
import android.provider.Settings;
+import android.telephony.PhoneNumberUtils;
import android.telephony.TelephonyManager;
+import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
+import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
@@ -75,8 +79,9 @@ import com.android.contacts.common.util.AccountSelectionUtil;
import com.android.contacts.common.util.AccountsListAdapter.AccountListFilter;
import com.android.contacts.common.vcard.ExportVCardActivity;
import com.android.contacts.common.vcard.VCardCommonArguments;
-import com.android.dialerbind.analytics.AnalyticsDialogFragment;
+import com.android.contacts.commonbind.analytics.AnalyticsUtil;
+import java.util.Collections;
import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;
@@ -84,13 +89,12 @@ import java.util.Iterator;
/**
* An dialog invoked to import/export contacts.
*/
-public class ImportExportDialogFragment extends AnalyticsDialogFragment
+public class ImportExportDialogFragment extends DialogFragment
implements SelectAccountDialogFragment.Listener {
public static final String TAG = "ImportExportDialogFragment";
- private static final String SIM_INDEX = "sim_index";
-
private static final String KEY_RES_ID = "resourceId";
+ private static final String KEY_SUBSCRIPTION_ID = "subscriptionId";
private static final String ARG_CONTACTS_ARE_AVAILABLE = "CONTACTS_ARE_AVAILABLE";
private static int SIM_ID_INVALID = -1;
private static int mSelectedSim = SIM_ID_INVALID;
@@ -155,6 +159,9 @@ public class ImportExportDialogFragment extends AnalyticsDialogFragment
public void showExportToSIMProgressDialog(Activity activity){
mExportThread.showExportProgressDialog(activity);
}
+
+ private SubscriptionManager mSubscriptionManager;
+
/** Preferred way to show this dialog */
public static void show(FragmentManager fragmentManager, boolean contactsAreAvailable,
Class callingActivity) {
@@ -169,7 +176,7 @@ public class ImportExportDialogFragment extends AnalyticsDialogFragment
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
- sendScreenView();
+ AnalyticsUtil.sendScreenView(this);
}
@Override
@@ -184,35 +191,70 @@ public class ImportExportDialogFragment extends AnalyticsDialogFragment
VCardCommonArguments.ARG_CALLING_ACTIVITY);
// Adapter that shows a list of string resources
- mAdapter = new ArrayAdapter<Integer>(getActivity(),
+ final ArrayAdapter<AdapterEntry> adapter = new ArrayAdapter<AdapterEntry>(getActivity(),
R.layout.select_dialog_item) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final TextView result = (TextView)(convertView != null ? convertView :
dialogInflater.inflate(R.layout.select_dialog_item, parent, false));
- final int resId = getItem(position);
- result.setText(resId);
+ result.setText(getItem(position).mLabel);
return result;
}
};
// Manually call notifyDataSetChanged() to refresh the list.
- mAdapter.setNotifyOnChange(false);
+ adapter.setNotifyOnChange(false);
loadData(contactsAreAvailable);
+ final TelephonyManager manager =
+ (TelephonyManager) getActivity().getSystemService(Context.TELEPHONY_SERVICE);
+
+ mSubscriptionManager = SubscriptionManager.from(getActivity());
+
+ if (res.getBoolean(R.bool.config_allow_import_from_sdcard)) {
+ adapter.add(new AdapterEntry(getString(R.string.import_from_sdcard),
+ R.string.import_from_sdcard));
+ }
+ if (manager != null && res.getBoolean(R.bool.config_allow_sim_import)) {
+ final List<SubscriptionInfo> subInfoRecords =
+ mSubscriptionManager.getActiveSubscriptionInfoList();
+ if (subInfoRecords != null) {
+ if (subInfoRecords.size() == 1) {
+ adapter.add(new AdapterEntry(getString(R.string.import_from_sim),
+ R.string.import_from_sim, subInfoRecords.get(0).getSubscriptionId()));
+ } else {
+ for (SubscriptionInfo record : subInfoRecords) {
+ adapter.add(new AdapterEntry(getSubDescription(record),
+ R.string.import_from_sim, record.getSubscriptionId()));
+ }
+ }
+ }
+ }
+ if (res.getBoolean(R.bool.config_allow_export_to_sdcard)) {
+ if (contactsAreAvailable) {
+ adapter.add(new AdapterEntry(getString(R.string.export_to_sdcard),
+ R.string.export_to_sdcard));
+ }
+ }
+ if (res.getBoolean(R.bool.config_allow_share_visible_contacts)) {
+ if (contactsAreAvailable) {
+ adapter.add(new AdapterEntry(getString(R.string.share_visible_contacts),
+ R.string.share_visible_contacts));
+ }
+ }
+
final DialogInterface.OnClickListener clickListener =
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
- final int resId = mAdapter.getItem(which);
+ boolean dismissDialog;
+ final int resId = adapter.getItem(which).mChoiceResourceId;
switch (resId) {
- case R.string.import_from_sim: {
- handleImportFromSimRequest(resId);
- break;
- }
+ case R.string.import_from_sim:
case R.string.import_from_sdcard: {
- handleImportRequest(resId);
+ dismissDialog = handleImportRequest(resId,
+ adapter.getItem(which).mSubscriptionId);
break;
}
case R.string.export_to_sim: {
@@ -308,9 +350,10 @@ public class ImportExportDialogFragment extends AnalyticsDialogFragment
*
* @return {@code true} if the dialog show be closed. {@code false} otherwise.
*/
- private boolean handleImportRequest(int resId) {
- // There are two possibilities:
- // - one or more than one accounts -> ask the user (user can select phone-local also)
+ private boolean handleImportRequest(int resId, int subscriptionId) {
+ // There are three possibilities:
+ // - more than one accounts -> ask the user
+ // - just one account -> use the account without asking the user
// - no account -> use phone-local storage without asking the user
final AccountTypeManager accountTypes = AccountTypeManager.getInstance(mActivity);
final List<AccountWithDataSet> accountList = accountTypes.getAccounts(true);
@@ -319,6 +362,7 @@ public class ImportExportDialogFragment extends AnalyticsDialogFragment
// Send over to the account selector
final Bundle args = new Bundle();
args.putInt(KEY_RES_ID, resId);
+ args.putInt(KEY_SUBSCRIPTION_ID, subscriptionId);
SelectAccountDialogFragment.show(
mActivity.getFragmentManager(), this,
R.string.dialog_new_contact_account,
@@ -330,7 +374,8 @@ public class ImportExportDialogFragment extends AnalyticsDialogFragment
return false;
}
- AccountSelectionUtil.doImport(mActivity, resId, null);
+ AccountSelectionUtil.doImport(getActivity(), resId,
+ (size == 1 ? accountList.get(0) : null), subscriptionId);
return true; // Close the dialog.
}
@@ -339,7 +384,8 @@ public class ImportExportDialogFragment extends AnalyticsDialogFragment
*/
@Override
public void onAccountChosen(AccountWithDataSet account, Bundle extraArgs) {
- AccountSelectionUtil.doImport(mActivity, extraArgs.getInt(KEY_RES_ID), account);
+ AccountSelectionUtil.doImport(getActivity(), extraArgs.getInt(KEY_RES_ID),
+ account, extraArgs.getInt(KEY_SUBSCRIPTION_ID));
// At this point the dialog is still showing (which is why we can use getActivity() above)
// So close it.
@@ -375,7 +421,7 @@ public class ImportExportDialogFragment extends AnalyticsDialogFragment
if (which >= 0) {
AccountSelectionUtil.setImportSubscription(which);
} else if (which == DialogInterface.BUTTON_POSITIVE) {
- handleImportRequest(R.string.import_from_sim);
+ handleImportRequest(R.string.import_from_sim, which);
}
}
}
@@ -750,20 +796,6 @@ public class ImportExportDialogFragment extends AnalyticsDialogFragment
.setSingleChoiceItems(items, 0, listener).create().show();
}
- private void handleImportFromSimRequest(int Id) {
- if (TelephonyManager.getDefault().isMultiSimEnabled()) {
- if (MoreContactUtils.getEnabledSimCount() > 1) {
- displayImportExportDialog(R.string.import_from_sim_select
- ,null);
- } else {
- AccountSelectionUtil.setImportSubscription(getEnabledIccCard());
- handleImportRequest(Id);
- }
- } else {
- handleImportRequest(Id);
- }
- }
-
private void handleExportToSimRequest(int Id) {
if (MoreContactUtils.getEnabledSimCount() >1) {
//has two enalbed sim cards, prompt dialog to select one
@@ -796,4 +828,32 @@ public class ImportExportDialogFragment extends AnalyticsDialogFragment
}
return SimContactsConstants.SUB_1;
}
+
+ private CharSequence getSubDescription(SubscriptionInfo record) {
+ CharSequence name = record.getDisplayName();
+ if (TextUtils.isEmpty(record.getNumber())) {
+ // Don't include the phone number in the description, since we don't know the number.
+ return getString(R.string.import_from_sim_summary_no_number, name);
+ }
+ return TextUtils.expandTemplate(
+ getString(R.string.import_from_sim_summary),
+ name,
+ PhoneNumberUtils.ttsSpanAsPhoneNumber(record.getNumber()));
+ }
+
+ private static class AdapterEntry {
+ public final CharSequence mLabel;
+ public final int mChoiceResourceId;
+ public final int mSubscriptionId;
+
+ public AdapterEntry(CharSequence label, int resId, int subId) {
+ mLabel = label;
+ mChoiceResourceId = resId;
+ mSubscriptionId = subId;
+ }
+
+ public AdapterEntry(String label, int resId) {
+ this(label, resId, SubscriptionManager.INVALID_SUBSCRIPTION_ID);
+ }
+ }
}