Merge "Import revised translations."
diff --git a/res/values/ids.xml b/res/values/ids.xml
index 1a553d1..2de327a 100644
--- a/res/values/ids.xml
+++ b/res/values/ids.xml
@@ -18,7 +18,6 @@
<item type="id" name="data"/>
<item type="id" name="header_phones"/>
<item type="id" name="dialog_sync_add"/>
- <item type="id" name="dialog_import_export"/>
<!-- For vcard.ImportVCardActivity -->
<item type="id" name="dialog_searching_vcard"/>
@@ -39,9 +38,6 @@
<item type="id" name="dialog_delete_contact_confirmation"/>
<item type="id" name="dialog_delete_contact_loader_id" />
- <!-- For ImportExportInteraction -->
- <item type="id" name="dialog_import_export_options"/>
-
<!-- For ExportVCardActivity -->
<item type="id" name="dialog_export_confirmation"/>
<item type="id" name="dialog_exporting_vcard"/>
diff --git a/src/com/android/contacts/activities/ContactBrowserActivity.java b/src/com/android/contacts/activities/ContactBrowserActivity.java
index 0672481..ba72ecc 100644
--- a/src/com/android/contacts/activities/ContactBrowserActivity.java
+++ b/src/com/android/contacts/activities/ContactBrowserActivity.java
@@ -23,7 +23,7 @@
import com.android.contacts.interactions.ContactDeletionInteraction;
import com.android.contacts.interactions.GroupDeletionDialogFragment;
import com.android.contacts.interactions.GroupRenamingDialogFragment;
-import com.android.contacts.interactions.ImportExportInteraction;
+import com.android.contacts.interactions.ImportExportDialogFragment;
import com.android.contacts.interactions.PhoneNumberInteraction;
import com.android.contacts.list.ContactBrowseListContextMenuAdapter;
import com.android.contacts.list.ContactBrowseListFragment;
@@ -112,7 +112,6 @@
private PhoneNumberInteraction mPhoneNumberCallInteraction;
private PhoneNumberInteraction mSendTextMessageInteraction;
- private ImportExportInteraction mImportExportInteraction;
private boolean mSearchInitiated;
@@ -733,7 +732,7 @@
return true;
}
case R.id.menu_import_export: {
- getImportExportInteraction().startInteraction();
+ ImportExportDialogFragment.show(getFragmentManager());
return true;
}
case R.id.menu_accounts: {
@@ -793,9 +792,6 @@
dialog = getSendTextMessageInteraction().onCreateDialog(id, bundle);
if (dialog != null) return dialog;
- dialog = getImportExportInteraction().onCreateDialog(id, bundle);
- if (dialog != null) return dialog;
-
return super.onCreateDialog(id, bundle);
}
@@ -956,13 +952,6 @@
return mSendTextMessageInteraction;
}
- private ImportExportInteraction getImportExportInteraction() {
- if (mImportExportInteraction == null) {
- mImportExportInteraction = new ImportExportInteraction(this);
- }
- return mImportExportInteraction;
- }
-
@Override
public DialogManager getDialogManager() {
return mDialogManager;
diff --git a/src/com/android/contacts/activities/DialtactsActivity.java b/src/com/android/contacts/activities/DialtactsActivity.java
index ae8f479..baae703 100644
--- a/src/com/android/contacts/activities/DialtactsActivity.java
+++ b/src/com/android/contacts/activities/DialtactsActivity.java
@@ -19,7 +19,7 @@
import com.android.contacts.R;
import com.android.contacts.calllog.CallLogFragment;
import com.android.contacts.dialpad.DialpadFragment;
-import com.android.contacts.interactions.ImportExportInteraction;
+import com.android.contacts.interactions.ImportExportDialogFragment;
import com.android.contacts.list.ContactListFilter;
import com.android.contacts.list.ContactsIntentResolver;
import com.android.contacts.list.ContactsRequest;
@@ -33,7 +33,6 @@
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.Activity;
-import android.app.Dialog;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
@@ -46,8 +45,8 @@
import android.provider.CallLog.Calls;
import android.provider.ContactsContract;
import android.provider.ContactsContract.Contacts;
-import android.provider.Settings;
import android.provider.ContactsContract.Intents.UI;
+import android.provider.Settings;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
@@ -86,7 +85,6 @@
private CallLogFragment mCallLogFragment;
private DefaultContactBrowseListFragment mContactsFragment;
private DefaultContactBrowseListFragment mFavoritesFragment;
- private ImportExportInteraction mImportExportInteraction;
/**
* The index of the tab that has last been manually selected (the user clicked on a tab).
@@ -541,7 +539,7 @@
return true;
}
case R.id.menu_import_export: {
- getImportExportInteraction().startInteraction();
+ ImportExportDialogFragment.show(getFragmentManager());
return true;
}
case R.id.menu_accounts: {
@@ -557,18 +555,4 @@
return super.onOptionsItemSelected(item);
}
}
-
- @Override
- protected Dialog onCreateDialog(int id, Bundle bundle) {
- Dialog dialog = getImportExportInteraction().onCreateDialog(id, bundle);
- if (dialog != null) return dialog;
- return super.onCreateDialog(id, bundle);
- }
-
- private ImportExportInteraction getImportExportInteraction() {
- if (mImportExportInteraction == null) {
- mImportExportInteraction = new ImportExportInteraction(this);
- }
- return mImportExportInteraction;
- }
}
diff --git a/src/com/android/contacts/detail/ContactDetailFragment.java b/src/com/android/contacts/detail/ContactDetailFragment.java
index 88008a3..f3a4805 100644
--- a/src/com/android/contacts/detail/ContactDetailFragment.java
+++ b/src/com/android/contacts/detail/ContactDetailFragment.java
@@ -1286,7 +1286,7 @@
}
@Override
- public void onAccountChosen(Account account) {
+ public void onAccountChosen(int requestCode, Account account) {
createCopy(account);
}
diff --git a/src/com/android/contacts/editor/SelectAccountDialogFragment.java b/src/com/android/contacts/editor/SelectAccountDialogFragment.java
index 67c5f6e..65370f5 100644
--- a/src/com/android/contacts/editor/SelectAccountDialogFragment.java
+++ b/src/com/android/contacts/editor/SelectAccountDialogFragment.java
@@ -53,8 +53,7 @@
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
- final Listener target = (Listener) getTargetFragment();
- target.onAccountChosen(accountAdapter.getItem(which));
+ onAccountSelected(accountAdapter.getItem(which));
}
};
@@ -67,12 +66,27 @@
@Override
public void onCancel(DialogInterface dialog) {
super.onCancel(dialog);
- final Listener target = (Listener) getTargetFragment();
- target.onAccountSelectorCancelled();
+ final Fragment targetFragment = getTargetFragment();
+ if (targetFragment != null && targetFragment instanceof Listener) {
+ final Listener target = (Listener) targetFragment;
+ target.onAccountSelectorCancelled();
+ }
+ }
+
+ /**
+ * Calls {@link Listener#onAccountChosen(int, Account)} if the target fragment is castable
+ * to {@link Listener}. Subclasses can also overide to directly perform an operation
+ */
+ protected void onAccountSelected(Account account) {
+ final Fragment targetFragment = getTargetFragment();
+ if (targetFragment != null && targetFragment instanceof Listener) {
+ final Listener target = (Listener) targetFragment;
+ target.onAccountChosen(getTargetRequestCode(), account);
+ }
}
public interface Listener {
- void onAccountChosen(Account account);
+ void onAccountChosen(int requestCode, Account account);
void onAccountSelectorCancelled();
}
}
diff --git a/src/com/android/contacts/interactions/ImportExportInteraction.java b/src/com/android/contacts/interactions/ImportExportDialogFragment.java
similarity index 62%
rename from src/com/android/contacts/interactions/ImportExportInteraction.java
rename to src/com/android/contacts/interactions/ImportExportDialogFragment.java
index bd8ac16..4e22fa2 100644
--- a/src/com/android/contacts/interactions/ImportExportInteraction.java
+++ b/src/com/android/contacts/interactions/ImportExportDialogFragment.java
@@ -17,14 +17,16 @@
package com.android.contacts.interactions;
import com.android.contacts.R;
+import com.android.contacts.editor.SelectAccountDialogFragment;
import com.android.contacts.model.AccountTypeManager;
import com.android.contacts.util.AccountSelectionUtil;
import com.android.contacts.vcard.ExportVCardActivity;
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.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
@@ -35,7 +37,6 @@
import android.provider.ContactsContract.Contacts;
import android.telephony.TelephonyManager;
import android.util.Log;
-import android.view.ContextThemeWrapper;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -46,70 +47,39 @@
import java.util.List;
/**
- * An interaction invoked to import/export contacts.
+ * An dialog invoked to import/export contacts.
*/
-public class ImportExportInteraction {
-
- private static final String TAG = "ImportExportInteraction";
+public class ImportExportDialogFragment extends DialogFragment {
+ public static final String TAG = "ImportExportDialogFragment";
private final String[] LOOKUP_PROJECTION = new String[] {
Contacts.LOOKUP_KEY
};
- private final Context mContext;
-
- public ImportExportInteraction(Context context) {
- this.mContext = context;
+ /** Preferred way to show this dialog */
+ public static void show(FragmentManager fragmentManager) {
+ final ImportExportDialogFragment fragment = new ImportExportDialogFragment();
+ fragment.show(fragmentManager, ImportExportDialogFragment.TAG);
}
- /**
- * Creates a {@link Dialog} that allows the user to choose between a bulk import
- * and bulk export task across all contacts.
- */
- public void startInteraction() {
- showDialog(R.id.dialog_import_export_options, null);
- }
-
- public Dialog onCreateDialog(int id, Bundle bundle) {
- switch (id) {
- case R.id.dialog_import_export_options: {
- return createOptionsDialog();
- }
- case R.string.import_from_sim:
- case R.string.import_from_sdcard: {
- return AccountSelectionUtil.getSelectAccountDialog(mContext, id);
- }
- case R.id.dialog_sdcard_not_found: {
- return new AlertDialog.Builder(mContext)
- .setTitle(R.string.no_sdcard_title)
- .setIconAttribute(android.R.attr.alertDialogIcon)
- .setMessage(R.string.no_sdcard_message)
- .setPositiveButton(android.R.string.ok, null).create();
- }
- }
-
- return null;
- }
-
- private Dialog createOptionsDialog() {
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
// Wrap our context to inflate list items using the correct theme
- final Resources res = mContext.getResources();
- final LayoutInflater dialogInflater = (LayoutInflater)mContext
+ final Resources res = getActivity().getResources();
+ final LayoutInflater dialogInflater = (LayoutInflater)getActivity()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// Adapter that shows a list of string resources
- final ArrayAdapter<Integer> adapter = new ArrayAdapter<Integer>(mContext,
+ final ArrayAdapter<Integer> adapter = new ArrayAdapter<Integer>(getActivity(),
android.R.layout.select_dialog_item) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
- if (convertView == null) {
- convertView = dialogInflater.inflate(android.R.layout.select_dialog_item,
- parent, false);
- }
+ final TextView result = (TextView)(convertView != null ? convertView :
+ dialogInflater.inflate(android.R.layout.select_dialog_item, parent, false));
- final int resId = this.getItem(position);
- ((TextView)convertView).setText(resId);
- return convertView;
+ final int resId = getItem(position);
+ result.setText(resId);
+ return result;
}
};
@@ -128,6 +98,7 @@
final DialogInterface.OnClickListener clickListener =
new DialogInterface.OnClickListener() {
+ @Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
@@ -139,8 +110,8 @@
break;
}
case R.string.export_to_sdcard: {
- Intent exportIntent = new Intent(mContext, ExportVCardActivity.class);
- mContext.startActivity(exportIntent);
+ Intent exportIntent = new Intent(getActivity(), ExportVCardActivity.class);
+ getActivity().startActivity(exportIntent);
break;
}
case R.string.share_visible_contacts: {
@@ -148,14 +119,13 @@
break;
}
default: {
- Log.e(TAG, "Unexpected resource: " +
- mContext.getResources().getResourceEntryName(resId));
+ Log.e(TAG, "Unexpected resource: "
+ + getActivity().getResources().getResourceEntryName(resId));
}
}
}
};
-
- return new AlertDialog.Builder(mContext)
+ return new AlertDialog.Builder(getActivity())
.setTitle(R.string.dialog_import_export)
.setNegativeButton(android.R.string.cancel, null)
.setSingleChoiceItems(adapter, -1, clickListener)
@@ -163,13 +133,12 @@
}
private void doShareVisibleContacts() {
-
- // TODO move the query into a loader
- final Cursor cursor = mContext.getContentResolver().query(Contacts.CONTENT_URI,
+ // TODO move the query into a loader and do this in a background thread
+ final Cursor cursor = getActivity().getContentResolver().query(Contacts.CONTENT_URI,
LOOKUP_PROJECTION, Contacts.IN_VISIBLE_GROUP + "!=0", null, null);
try {
if (!cursor.moveToFirst()) {
- Toast.makeText(mContext, R.string.share_error, Toast.LENGTH_SHORT).show();
+ Toast.makeText(getActivity(), R.string.share_error, Toast.LENGTH_SHORT).show();
return;
}
@@ -188,7 +157,7 @@
final Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType(Contacts.CONTENT_VCARD_TYPE);
intent.putExtra(Intent.EXTRA_STREAM, uri);
- mContext.startActivity(intent);
+ getActivity().startActivity(intent);
} finally {
cursor.close();
}
@@ -199,19 +168,37 @@
// - 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(mContext);
+ final AccountTypeManager accountTypes = AccountTypeManager.getInstance(getActivity());
final List<Account> accountList = accountTypes.getAccounts(true);
final int size = accountList.size();
if (size > 1) {
- showDialog(resId, null);
+ // Send over to the account selector
+ ImportExportAccountSelectorDialog.show(getFragmentManager(), resId);
return;
}
- AccountSelectionUtil.doImport(mContext, resId, (size == 1 ? accountList.get(0) : null));
+ AccountSelectionUtil.doImport(getActivity(), resId,
+ (size == 1 ? accountList.get(0) : null));
}
- /* Visible for testing */
- void showDialog(int dialogId, Bundle bundle) {
- ((Activity)mContext).showDialog(dialogId, bundle);
+ /** Sub-Dialog for showing an account selector in case there are several accounts */
+ public static class ImportExportAccountSelectorDialog extends SelectAccountDialogFragment {
+ private static final String SELECTOR_TAG = "ImportExportAccountSelectorDialog";
+ private static final String BUNDLE_RES_ID = "resourceId";
+
+ public static void show(FragmentManager manager, int resId) {
+ final ImportExportAccountSelectorDialog dialog =
+ new ImportExportAccountSelectorDialog();
+ final Bundle bundle = new Bundle();
+ bundle.putInt(BUNDLE_RES_ID, resId);
+ dialog.setArguments(bundle);
+ dialog.show(manager, SELECTOR_TAG);
+ }
+
+ @Override
+ protected void onAccountSelected(Account account) {
+ final int resourceId = getArguments().getInt(BUNDLE_RES_ID);
+ AccountSelectionUtil.doImport(getActivity(), resourceId, account);
+ }
}
}