diff options
Diffstat (limited to 'src/com/android/contacts/common/interactions/ImportExportDialogFragment.java')
-rw-r--r-- | src/com/android/contacts/common/interactions/ImportExportDialogFragment.java | 130 |
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); + } + } } |