am fe8eacdf: (-s ours) Import translations. DO NOT MERGE

* commit 'fe8eacdff5132421e7c25b1394584c913160d6a8':
  Import translations. DO NOT MERGE
diff --git a/proguard.flags b/proguard.flags
index 3991a14..05071df 100644
--- a/proguard.flags
+++ b/proguard.flags
@@ -10,10 +10,10 @@
 }
 
 # Any class or method annotated with NeededForTesting or NeededForReflection.
--keep @com.android.contacts.common.test.NeededForTesting class *
+-keep @com.android.contacts.common.testing.NeededForTesting class *
 -keep @com.android.contacts.test.NeededForReflection class *
 -keepclassmembers class * {
-@com.android.contacts.common.test.NeededForTesting *;
+@com.android.contacts.common.testing.NeededForTesting *;
 @com.android.contacts.test.NeededForReflection *;
 }
 
diff --git a/src/com/android/contacts/ContactsActivity.java b/src/com/android/contacts/ContactsActivity.java
index b94a237..82d1f98 100644
--- a/src/com/android/contacts/ContactsActivity.java
+++ b/src/com/android/contacts/ContactsActivity.java
@@ -26,7 +26,7 @@
 import android.view.View;
 
 import com.android.contacts.common.activity.TransactionSafeActivity;
-import com.android.contacts.common.test.InjectedServices;
+import com.android.contacts.common.testing.InjectedServices;
 
 /**
  * A common superclass for Contacts activities that handles application-wide services.
diff --git a/src/com/android/contacts/ContactsApplication.java b/src/com/android/contacts/ContactsApplication.java
index 95fad48..2d2a782 100644
--- a/src/com/android/contacts/ContactsApplication.java
+++ b/src/com/android/contacts/ContactsApplication.java
@@ -32,7 +32,7 @@
 import com.android.contacts.common.ContactPhotoManager;
 import com.android.contacts.common.list.ContactListFilterController;
 import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.test.InjectedServices;
+import com.android.contacts.common.testing.InjectedServices;
 import com.android.contacts.common.util.Constants;
 import com.google.common.annotations.VisibleForTesting;
 
diff --git a/src/com/android/contacts/activities/AttachPhotoActivity.java b/src/com/android/contacts/activities/AttachPhotoActivity.java
index 25c23e0..4c4d4dc 100644
--- a/src/com/android/contacts/activities/AttachPhotoActivity.java
+++ b/src/com/android/contacts/activities/AttachPhotoActivity.java
@@ -16,6 +16,7 @@
 
 package com.android.contacts.activities;
 
+import android.content.ActivityNotFoundException;
 import android.content.ContentResolver;
 import android.content.Intent;
 import android.content.Loader;
@@ -30,9 +31,11 @@
 import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.DisplayPhoto;
 import android.util.Log;
+import android.widget.Toast;
 
 import com.android.contacts.ContactSaveService;
 import com.android.contacts.ContactsActivity;
+import com.android.contacts.R;
 import com.android.contacts.common.model.Contact;
 import com.android.contacts.common.model.ContactLoader;
 import com.android.contacts.common.model.RawContactDelta;
@@ -152,7 +155,12 @@
             ContactPhotoUtils.addPhotoPickerExtras(intent, mCroppedPhotoUri);
             ContactPhotoUtils.addCropExtras(intent, mPhotoDim != 0 ? mPhotoDim : mDefaultPhotoDim);
 
-            startActivityForResult(intent, REQUEST_CROP_PHOTO);
+            try {
+                startActivityForResult(intent, REQUEST_CROP_PHOTO);
+            } catch (ActivityNotFoundException ex) {
+                Toast.makeText(this, R.string.missing_app, Toast.LENGTH_SHORT).show();
+                return;
+            }
 
             mContactUri = result.getData();
 
diff --git a/src/com/android/contacts/datepicker/DatePicker.java b/src/com/android/contacts/datepicker/DatePicker.java
index fde265a..d662c3a 100644
--- a/src/com/android/contacts/datepicker/DatePicker.java
+++ b/src/com/android/contacts/datepicker/DatePicker.java
@@ -221,7 +221,7 @@
         // We use numeric spinners for year and day, but textual months. Ask icu4c what
         // order the user's locale uses for that combination. http://b/7207103.
         String skeleton = mHasYear ? "yyyyMMMdd" : "MMMdd";
-        String pattern = ICU.getBestDateTimePattern(skeleton, Locale.getDefault().toString());
+        String pattern = DateFormat.getBestDateTimePattern(Locale.getDefault(), skeleton);
         char[] order = ICU.getDateFormatOrder(pattern);
 
         /* Remove the 3 pickers from their parent and then add them back in the
diff --git a/src/com/android/contacts/detail/ContactLoaderFragment.java b/src/com/android/contacts/detail/ContactLoaderFragment.java
index 0b420f7..1288cf7 100644
--- a/src/com/android/contacts/detail/ContactLoaderFragment.java
+++ b/src/com/android/contacts/detail/ContactLoaderFragment.java
@@ -439,7 +439,11 @@
         intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, ringtoneUri);
 
         // Launch!
-        startActivityForResult(intent, REQUEST_CODE_PICK_RINGTONE);
+        try {
+            startActivityForResult(intent, REQUEST_CODE_PICK_RINGTONE);
+        } catch (ActivityNotFoundException ex) {
+            Toast.makeText(mContext, R.string.missing_app, Toast.LENGTH_SHORT).show();
+        }
     }
 
     @Override
diff --git a/src/com/android/contacts/editor/AggregationSuggestionEngine.java b/src/com/android/contacts/editor/AggregationSuggestionEngine.java
index f121605..91df272 100644
--- a/src/com/android/contacts/editor/AggregationSuggestionEngine.java
+++ b/src/com/android/contacts/editor/AggregationSuggestionEngine.java
@@ -335,25 +335,24 @@
         }
     }
 
-    private boolean updateSuggestedContactIds(Cursor cursor) {
-        int count = cursor.getCount();
+    private boolean updateSuggestedContactIds(final Cursor cursor) {
+        final int count = cursor.getCount();
         boolean changed = count != mSuggestedContactIds.length;
-        if (!changed) {
-            while (cursor.moveToNext()) {
-                long contactId = cursor.getLong(0);
-                if (Arrays.binarySearch(mSuggestedContactIds, contactId) < 0) {
-                    changed = true;
-                    break;
-                }
+        final ArrayList<Long> newIds = new ArrayList<Long>(count);
+        while (cursor.moveToNext()) {
+            final long contactId = cursor.getLong(0);
+            if (!changed &&
+                    Arrays.binarySearch(mSuggestedContactIds, contactId) < 0) {
+                changed = true;
             }
+            newIds.add(contactId);
         }
 
         if (changed) {
-            mSuggestedContactIds = new long[count];
-            cursor.moveToPosition(-1);
-            for (int i = 0; i < count; i++) {
-                cursor.moveToNext();
-                mSuggestedContactIds[i] = cursor.getLong(0);
+            mSuggestedContactIds = new long[newIds.size()];
+            int i = 0;
+            for (final Long newId : newIds) {
+                mSuggestedContactIds[i++] = newId;
             }
             Arrays.sort(mSuggestedContactIds);
         }
diff --git a/src/com/android/contacts/editor/ContactEditorUtils.java b/src/com/android/contacts/editor/ContactEditorUtils.java
index e93d3c8..b132217 100644
--- a/src/com/android/contacts/editor/ContactEditorUtils.java
+++ b/src/com/android/contacts/editor/ContactEditorUtils.java
@@ -26,7 +26,7 @@
 import android.text.TextUtils;
 import android.util.Log;
 
-import com.android.contacts.common.test.NeededForTesting;
+import com.android.contacts.common.testing.NeededForTesting;
 import com.android.contacts.common.model.AccountTypeManager;
 import com.android.contacts.common.model.account.AccountType;
 import com.android.contacts.common.model.account.AccountWithDataSet;
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index e950fcb..db3a341 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -710,6 +710,9 @@
         @Override
         public void onPageSelected(int position) {
             final CheckableImageView actionView = getActionViewAt(position);
+            if (actionView == null) {
+                return;
+            }
             mTrackScroller.requestChildRectangleOnScreen(actionView,
                     new Rect(0, 0, actionView.getWidth(), actionView.getHeight()), false);
             // Don't render rectangle if we are currently scrolling to prevent it from flickering
diff --git a/src/com/android/contacts/widget/CompositeListAdapter.java b/src/com/android/contacts/widget/CompositeListAdapter.java
index d83246a..4c72ee8 100644
--- a/src/com/android/contacts/widget/CompositeListAdapter.java
+++ b/src/com/android/contacts/widget/CompositeListAdapter.java
@@ -21,7 +21,7 @@
 import android.widget.BaseAdapter;
 import android.widget.ListAdapter;
 
-import com.android.contacts.common.test.NeededForTesting;
+import com.android.contacts.common.testing.NeededForTesting;
 import com.google.common.annotations.VisibleForTesting;
 
 /**
diff --git a/tests/src/com/android/contacts/activities/PeopleActivityTest.java b/tests/src/com/android/contacts/activities/PeopleActivityTest.java
index d882da7..592b606 100644
--- a/tests/src/com/android/contacts/activities/PeopleActivityTest.java
+++ b/tests/src/com/android/contacts/activities/PeopleActivityTest.java
@@ -16,6 +16,7 @@
 
 package com.android.contacts.activities;
 
+import android.content.ContentUris;
 import android.content.ContentValues;
 import android.content.Intent;
 import android.content.Loader;
@@ -35,6 +36,7 @@
 import com.android.contacts.ContactsApplication;
 import com.android.contacts.R;
 import com.android.contacts.common.ContactPhotoManager;
+import com.android.contacts.common.testing.InjectedServices;
 import com.android.contacts.common.test.mocks.ContactsMockContext;
 import com.android.contacts.common.test.mocks.MockContentProvider;
 import com.android.contacts.common.test.mocks.MockContentProvider.Query;
@@ -45,7 +47,6 @@
 import com.android.contacts.common.model.account.AccountType;
 import com.android.contacts.common.model.account.AccountWithDataSet;
 import com.android.contacts.common.model.account.BaseAccountType;
-import com.android.contacts.common.test.InjectedServices;
 import com.android.contacts.common.test.mocks.MockAccountTypeManager;
 import com.android.contacts.common.test.mocks.MockContactPhotoManager;
 import com.android.contacts.common.test.mocks.MockSharedPreferences;
@@ -88,6 +89,10 @@
     public void setUp() {
         mContext = new ContactsMockContext(getInstrumentation().getTargetContext());
         mContactsProvider = mContext.getContactsProvider();
+        // The ContactsApplication performs this getType query to warm up the provider - see
+        // ContactsApplication#DelayedInitialization.doInBackground
+        mContactsProvider.expectTypeQuery(ContentUris.withAppendedId(Contacts.CONTENT_URI, 1),
+                Contacts.CONTENT_ITEM_TYPE);
         mSettingsProvider = mContext.getSettingsProvider();
         InjectedServices services = new InjectedServices();
         services.setContentResolver(mContext.getContentResolver());
diff --git a/tests/src/com/android/contacts/interactions/ContactDeletionInteractionTest.java b/tests/src/com/android/contacts/interactions/ContactDeletionInteractionTest.java
index bcaa398..5932c87 100644
--- a/tests/src/com/android/contacts/interactions/ContactDeletionInteractionTest.java
+++ b/tests/src/com/android/contacts/interactions/ContactDeletionInteractionTest.java
@@ -34,7 +34,7 @@
 import com.android.contacts.common.model.AccountTypeManager;
 import com.android.contacts.common.model.account.AccountType;
 import com.android.contacts.common.model.account.BaseAccountType;
-import com.android.contacts.common.test.InjectedServices;
+import com.android.contacts.common.testing.InjectedServices;
 import com.android.contacts.common.test.mocks.MockAccountTypeManager;
 
 /**