Merge "Import revised translations.  DO NOT MERGE" into ics-mr1
diff --git a/res/layout-sw580dp/group_editor_view.xml b/res/layout-sw580dp/group_editor_view.xml
index a16c240..76c05d4 100644
--- a/res/layout-sw580dp/group_editor_view.xml
+++ b/res/layout-sw580dp/group_editor_view.xml
@@ -18,9 +18,9 @@
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:paddingTop="50dip"
-    android:paddingLeft="64dip"
-    android:paddingRight="64dip"
+    android:paddingTop="32dip"
+    android:paddingLeft="@dimen/group_editor_side_padding"
+    android:paddingRight="@dimen/group_editor_side_padding"
     android:orientation="horizontal"
     android:background="@color/background_primary">
 
diff --git a/res/layout-sw580dp/quickcontact_activity.xml b/res/layout-sw580dp/quickcontact_activity.xml
index 8c8bfae..ba9c9ab 100644
--- a/res/layout-sw580dp/quickcontact_activity.xml
+++ b/res/layout-sw580dp/quickcontact_activity.xml
@@ -29,7 +29,7 @@
         android:orientation="vertical">
         <FrameLayout
             android:layout_width="400dip"
-            android:layout_height="200dip">
+            android:layout_height="@dimen/quick_contact_photo_container_height">
             <include layout="@layout/quickcontact_photo_container" />
         </FrameLayout>
         <include layout="@layout/quickcontact_track" />
@@ -41,6 +41,6 @@
         <android.support.v4.view.ViewPager
             android:id="@+id/item_list_pager"
             android:layout_width="match_parent"
-            android:layout_height="180dip" />
+            android:layout_height="160dip" />
     </LinearLayout>
 </view>
diff --git a/res/layout-sw580dp-w1000dp/contact_detail_container.xml b/res/layout-sw680dp-w1000dp/contact_detail_container.xml
similarity index 100%
rename from res/layout-sw580dp-w1000dp/contact_detail_container.xml
rename to res/layout-sw680dp-w1000dp/contact_detail_container.xml
diff --git a/res/layout-sw580dp-w1000dp/contact_detail_empty.xml b/res/layout-sw680dp-w1000dp/contact_detail_empty.xml
similarity index 100%
rename from res/layout-sw580dp-w1000dp/contact_detail_empty.xml
rename to res/layout-sw680dp-w1000dp/contact_detail_empty.xml
diff --git a/res/layout-sw580dp-w1000dp/contact_detail_fragment.xml b/res/layout-sw680dp-w1000dp/contact_detail_fragment.xml
similarity index 100%
rename from res/layout-sw580dp-w1000dp/contact_detail_fragment.xml
rename to res/layout-sw680dp-w1000dp/contact_detail_fragment.xml
diff --git a/res/layout-sw580dp-w1000dp/contact_detail_list_item.xml b/res/layout-sw680dp-w1000dp/contact_detail_list_item.xml
similarity index 98%
rename from res/layout-sw580dp-w1000dp/contact_detail_list_item.xml
rename to res/layout-sw680dp-w1000dp/contact_detail_list_item.xml
index ffde8b0..ccecc35 100644
--- a/res/layout-sw580dp-w1000dp/contact_detail_list_item.xml
+++ b/res/layout-sw680dp-w1000dp/contact_detail_list_item.xml
@@ -76,6 +76,15 @@
             android:layout_gravity="center_vertical"
             android:visibility="gone" />
 
+        <View
+            android:id="@+id/primary_indicator"
+            android:layout_width="16dip"
+            android:layout_height="16dip"
+            android:visibility="gone"
+            android:layout_gravity="center_vertical"
+            android:background="@drawable/ic_list_default_mime_holo_dark"
+            android:layout_marginRight="8dip" />
+
         <TextView
             android:id="@+id/type"
             style="@style/ContactDetailItemType"
@@ -85,14 +94,6 @@
             android:paddingRight="16dip" />
 
         <View
-            android:id="@+id/primary_indicator"
-            android:layout_width="16dip"
-            android:layout_height="16dip"
-            android:visibility="gone"
-            android:layout_gravity="center_vertical"
-            android:background="@drawable/ic_list_default_mime_holo_dark" />
-
-        <View
             android:id="@+id/vertical_divider"
             android:layout_width="1px"
             android:layout_height="match_parent"
diff --git a/res/layout-sw580dp-w1000dp/contact_detail_updates_fragment.xml b/res/layout-sw680dp-w1000dp/contact_detail_updates_fragment.xml
similarity index 100%
rename from res/layout-sw580dp-w1000dp/contact_detail_updates_fragment.xml
rename to res/layout-sw680dp-w1000dp/contact_detail_updates_fragment.xml
diff --git a/res/layout-sw580dp-w1000dp/detail_header_contact_with_updates.xml b/res/layout-sw680dp-w1000dp/detail_header_contact_with_updates.xml
similarity index 100%
rename from res/layout-sw580dp-w1000dp/detail_header_contact_with_updates.xml
rename to res/layout-sw680dp-w1000dp/detail_header_contact_with_updates.xml
diff --git a/res/layout-sw580dp-w1000dp/detail_header_contact_without_updates.xml b/res/layout-sw680dp-w1000dp/detail_header_contact_without_updates.xml
similarity index 100%
rename from res/layout-sw580dp-w1000dp/detail_header_contact_without_updates.xml
rename to res/layout-sw680dp-w1000dp/detail_header_contact_without_updates.xml
diff --git a/res/layout-sw580dp-w1000dp/people_activity.xml b/res/layout-sw680dp-w1000dp/people_activity.xml
similarity index 100%
rename from res/layout-sw580dp-w1000dp/people_activity.xml
rename to res/layout-sw680dp-w1000dp/people_activity.xml
diff --git a/res/layout-sw580dp-w1000dp/updates_header_contact.xml b/res/layout-sw680dp-w1000dp/updates_header_contact.xml
similarity index 100%
rename from res/layout-sw580dp-w1000dp/updates_header_contact.xml
rename to res/layout-sw680dp-w1000dp/updates_header_contact.xml
diff --git a/res/layout/carousel_updates_tab.xml b/res/layout/carousel_updates_tab.xml
index d471d93..d23f650 100644
--- a/res/layout/carousel_updates_tab.xml
+++ b/res/layout/carousel_updates_tab.xml
@@ -56,7 +56,8 @@
         android:textAppearance="?android:attr/textAppearanceLarge"
         android:textColor="@color/detail_update_tab_text_color"
         android:textStyle="bold"
-        android:maxLines="@integer/updates_tab_snippet_max_lines"/>
+        android:maxLines="@integer/updates_tab_snippet_max_lines"
+        android:ellipsize="end" />
 
     <View
         android:id="@+id/alpha_overlay"
diff --git a/res/layout/raw_contact_readonly_editor_view.xml b/res/layout/raw_contact_readonly_editor_view.xml
index b34028a..aa7d705 100644
--- a/res/layout/raw_contact_readonly_editor_view.xml
+++ b/res/layout/raw_contact_readonly_editor_view.xml
@@ -19,6 +19,7 @@
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:orientation="vertical"
+    android:paddingTop="@dimen/editor_padding_top"
     android:paddingBottom="32dip">
 
     <include
diff --git a/res/values-sw580dp-w1000dp-port/dimens.xml b/res/values-sw580dp-w1000dp-port/dimens.xml
deleted file mode 100644
index 767fda4..0000000
--- a/res/values-sw580dp-w1000dp-port/dimens.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<resources>
-    <dimen name="contact_detail_list_top_padding">8dip</dimen>
-</resources>
diff --git a/res/values-sw580dp-w1000dp/dimens.xml b/res/values-sw580dp-w1000dp/dimens.xml
index 940e456..1cbc395 100644
--- a/res/values-sw580dp-w1000dp/dimens.xml
+++ b/res/values-sw580dp-w1000dp/dimens.xml
@@ -14,9 +14,5 @@
      limitations under the License.
 -->
 <resources>
-    <dimen name="group_detail_border_padding">32dip</dimen>
-    <dimen name="group_detail_side_margin">32dip</dimen>
-    <dimen name="detail_contact_photo_margin">16dip</dimen>
-    <dimen name="contact_detail_list_top_padding">32dip</dimen>
-    <dimen name="contact_tile_list_padding_top">32dip</dimen>
+    <dimen name="group_editor_side_padding">64dip</dimen>
 </resources>
diff --git a/res/values-sw580dp-w1000dp/integers.xml b/res/values-sw580dp-w1000dp/integers.xml
index 5fda2ed..c09a1f3 100644
--- a/res/values-sw580dp-w1000dp/integers.xml
+++ b/res/values-sw580dp-w1000dp/integers.xml
@@ -14,5 +14,5 @@
      limitations under the License.
 -->
 <resources>
-    <integer name="contact_tile_column_count">4</integer>
-</resources>
\ No newline at end of file
+    <integer name="updates_tab_snippet_max_lines">7</integer>
+</resources>
diff --git a/res/values-sw580dp/integers.xml b/res/values-sw580dp/integers.xml
index 56e837e..a62fa14 100644
--- a/res/values-sw580dp/integers.xml
+++ b/res/values-sw580dp/integers.xml
@@ -15,5 +15,5 @@
 -->
 <resources>
     <integer name="contact_tile_column_count">2</integer>
-    <integer name="updates_tab_snippet_max_lines">5</integer>
+    <integer name="updates_tab_snippet_max_lines">4</integer>
 </resources>
diff --git a/res/values-sw580dp-w720dp/integers.xml b/res/values-sw680dp-w1000dp/dimens.xml
similarity index 65%
copy from res/values-sw580dp-w720dp/integers.xml
copy to res/values-sw680dp-w1000dp/dimens.xml
index c629f7e..e492e5b 100644
--- a/res/values-sw580dp-w720dp/integers.xml
+++ b/res/values-sw680dp-w1000dp/dimens.xml
@@ -14,5 +14,10 @@
      limitations under the License.
 -->
 <resources>
-    <integer name="contact_tile_column_count">2</integer>
+    <dimen name="group_detail_border_padding">32dip</dimen>
+    <dimen name="group_detail_side_margin">32dip</dimen>
+    <dimen name="group_editor_side_padding">64dip</dimen>
+    <dimen name="detail_contact_photo_margin">16dip</dimen>
+    <dimen name="contact_detail_list_top_padding">32dip</dimen>
+    <dimen name="contact_tile_list_padding_top">32dip</dimen>
 </resources>
diff --git a/res/values-sw580dp-w720dp/integers.xml b/res/values-sw680dp-w1000dp/integers.xml
similarity index 91%
copy from res/values-sw580dp-w720dp/integers.xml
copy to res/values-sw680dp-w1000dp/integers.xml
index c629f7e..5fda2ed 100644
--- a/res/values-sw580dp-w720dp/integers.xml
+++ b/res/values-sw680dp-w1000dp/integers.xml
@@ -14,5 +14,5 @@
      limitations under the License.
 -->
 <resources>
-    <integer name="contact_tile_column_count">2</integer>
-</resources>
+    <integer name="contact_tile_column_count">4</integer>
+</resources>
\ No newline at end of file
diff --git a/res/values-sw580dp-w1000dp/styles.xml b/res/values-sw680dp-w1000dp/styles.xml
similarity index 100%
rename from res/values-sw580dp-w1000dp/styles.xml
rename to res/values-sw680dp-w1000dp/styles.xml
diff --git a/res/values-sw580dp-w720dp/dimens.xml b/res/values-sw680dp/dimens.xml
similarity index 87%
rename from res/values-sw580dp-w720dp/dimens.xml
rename to res/values-sw680dp/dimens.xml
index a69c20a..0876995 100644
--- a/res/values-sw580dp-w720dp/dimens.xml
+++ b/res/values-sw680dp/dimens.xml
@@ -17,4 +17,6 @@
     <dimen name="editor_type_label_width">180dip</dimen>
     <dimen name="editor_round_button_padding_left">8dip</dimen>
     <dimen name="editor_round_button_padding_right">8dip</dimen>
+    <dimen name="group_editor_side_padding">16dip</dimen>
+    <dimen name="quick_contact_photo_container_height">400dip</dimen>
 </resources>
diff --git a/res/values-sw580dp-w720dp/integers.xml b/res/values-sw680dp/integers.xml
similarity index 92%
rename from res/values-sw580dp-w720dp/integers.xml
rename to res/values-sw680dp/integers.xml
index c629f7e..eaf5971 100644
--- a/res/values-sw580dp-w720dp/integers.xml
+++ b/res/values-sw680dp/integers.xml
@@ -15,4 +15,5 @@
 -->
 <resources>
     <integer name="contact_tile_column_count">2</integer>
+    <integer name="updates_tab_snippet_max_lines">7</integer>
 </resources>
diff --git a/res/values-sw580dp-w720dp/styles.xml b/res/values-sw680dp/styles.xml
similarity index 100%
rename from res/values-sw580dp-w720dp/styles.xml
rename to res/values-sw680dp/styles.xml
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 89122ca..9f5766e 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -131,6 +131,9 @@
     <!-- Left padding for a group member list item -->
     <dimen name="group_member_item_left_padding">4dip</dimen>
 
+    <!-- Left and right padding for the group editor view -->
+    <dimen name="group_editor_side_padding">16dip</dimen>
+
     <!-- Left margin for the group member list to match the built in margin in the autocomplete asset -->
     <dimen name="group_editor_member_list_left_margin">4dip</dimen>
 
@@ -146,6 +149,9 @@
     <!-- Left and right margin for the divider in the group detail fragment -->
     <dimen name="group_detail_side_margin">0dip</dimen>
 
+    <!-- Height of the quick contact photo container (for screens that are too large to use the screen width/height as a constraint)-->
+    <dimen name="quick_contact_photo_container_height">200dip</dimen>
+
     <!-- Height of edit text in dialpad fragment -->
     <dimen name="dialpad_horizontal_margin">0dip</dimen>
     <dimen name="dialpad_vertical_margin">2dip</dimen>
diff --git a/src/com/android/contacts/ContactsUtils.java b/src/com/android/contacts/ContactsUtils.java
index 64dfaef..cb19713 100644
--- a/src/com/android/contacts/ContactsUtils.java
+++ b/src/com/android/contacts/ContactsUtils.java
@@ -24,6 +24,7 @@
 
 import android.content.Context;
 import android.content.Intent;
+import android.graphics.Rect;
 import android.location.CountryDetector;
 import android.net.Uri;
 import android.provider.ContactsContract;
@@ -221,4 +222,22 @@
         textView.setText(context.getString(textResourceId));
         return view;
     }
+
+    /**
+     * Returns the {@link Rect} with left, top, right, and bottom coordinates
+     * that are equivalent to the given {@link View}'s bounds. This is equivalent to how the
+     * target {@link Rect} is calculated in {@link QuickContact#showQuickContact}.
+     */
+    public static Rect getTargetRectFromView(Context context, View view) {
+        final float appScale = context.getResources().getCompatibilityInfo().applicationScale;
+        final int[] pos = new int[2];
+        view.getLocationOnScreen(pos);
+
+        final Rect rect = new Rect();
+        rect.left = (int) (pos[0] * appScale + 0.5f);
+        rect.top = (int) (pos[1] * appScale + 0.5f);
+        rect.right = (int) ((pos[0] + view.getWidth()) * appScale + 0.5f);
+        rect.bottom = (int) ((pos[1] + view.getHeight()) * appScale + 0.5f);
+        return rect;
+    }
 }
diff --git a/src/com/android/contacts/GroupMemberLoader.java b/src/com/android/contacts/GroupMemberLoader.java
index a75da48..9012362 100644
--- a/src/com/android/contacts/GroupMemberLoader.java
+++ b/src/com/android/contacts/GroupMemberLoader.java
@@ -38,7 +38,7 @@
     /**
      * Projection map is taken from {@link ContactListAdapter}
      */
-    private final String[] PROJECTION_DATA = new String[] {
+    private static final String[] PROJECTION_DATA = new String[] {
         // TODO: Pull Projection_data out into util class
         Data.CONTACT_ID,                        // 0
         Data.RAW_CONTACT_ID,                    // 1
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index b4ad78a..031f0c8 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -68,6 +68,7 @@
 import android.content.ActivityNotFoundException;
 import android.content.ContentValues;
 import android.content.Intent;
+import android.graphics.Rect;
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.Handler;
@@ -77,6 +78,7 @@
 import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.Intents;
 import android.provider.ContactsContract.ProviderStatus;
+import android.provider.ContactsContract.QuickContact;
 import android.provider.Settings;
 import android.support.v13.app.FragmentPagerAdapter;
 import android.support.v4.view.PagerAdapter;
@@ -739,6 +741,8 @@
 
         private boolean mTabPagerAdapterSearchMode;
 
+        private Fragment mCurrentPrimaryItem;
+
         public TabPagerAdapter() {
             mFragmentManager = getFragmentManager();
         }
@@ -809,6 +813,9 @@
             }
             Fragment f = getFragment(position);
             mCurTransaction.show(f);
+
+            // Non primary pages should be deferred.
+            f.setStartDeferred(f != mCurrentPrimaryItem);
             return f;
         }
 
@@ -835,6 +842,20 @@
         }
 
         @Override
+        public void setPrimaryItem(View container, int position, Object object) {
+            Fragment fragment = (Fragment) object;
+            if (mCurrentPrimaryItem != fragment) {
+                if (mCurrentPrimaryItem != null) {
+                    mCurrentPrimaryItem.setStartDeferred(true);
+                }
+                if (fragment != null) {
+                    fragment.setStartDeferred(false);
+                }
+                mCurrentPrimaryItem = fragment;
+            }
+        }
+
+        @Override
         public Parcelable saveState() {
             return null;
         }
@@ -1142,9 +1163,9 @@
     private final class StrequentContactListFragmentListener
             implements ContactTileListFragment.Listener {
         @Override
-        public void onContactSelected(Uri contactUri) {
+        public void onContactSelected(Uri contactUri, Rect targetRect) {
             if (PhoneCapabilityTester.isUsingTwoPanes(PeopleActivity.this)) {
-                setupContactDetailFragment(contactUri);
+                QuickContact.showQuickContact(PeopleActivity.this, targetRect, contactUri, 0, null);
             } else {
                 startActivity(new Intent(Intent.ACTION_VIEW, contactUri));
             }
diff --git a/src/com/android/contacts/group/GroupDetailFragment.java b/src/com/android/contacts/group/GroupDetailFragment.java
index b3472ab..c856594 100644
--- a/src/com/android/contacts/group/GroupDetailFragment.java
+++ b/src/com/android/contacts/group/GroupDetailFragment.java
@@ -37,6 +37,7 @@
 import android.content.Loader;
 import android.content.res.Resources;
 import android.database.Cursor;
+import android.graphics.Rect;
 import android.net.Uri;
 import android.os.Bundle;
 import android.provider.ContactsContract.Groups;
@@ -208,7 +209,7 @@
             new ContactTileAdapter.Listener() {
 
         @Override
-        public void onContactSelected(Uri contactUri) {
+        public void onContactSelected(Uri contactUri, Rect targetRect) {
             mListener.onContactSelected(contactUri);
         }
     };
diff --git a/src/com/android/contacts/list/ContactTileAdapter.java b/src/com/android/contacts/list/ContactTileAdapter.java
index 48bc5c3..3eb7232 100644
--- a/src/com/android/contacts/list/ContactTileAdapter.java
+++ b/src/com/android/contacts/list/ContactTileAdapter.java
@@ -27,6 +27,7 @@
 import android.content.Context;
 import android.content.res.Resources;
 import android.database.Cursor;
+import android.graphics.Rect;
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
 import android.provider.ContactsContract.CommonDataKinds.Phone;
@@ -477,7 +478,8 @@
         @Override
         public void onClick(ContactTileView contactTileView) {
             if (mListener != null) {
-                mListener.onContactSelected(contactTileView.getLookupUri());
+                mListener.onContactSelected(contactTileView.getLookupUri(),
+                        ContactsUtils.getTargetRectFromView(mContext, contactTileView));
             }
         }
     };
@@ -659,6 +661,6 @@
     }
 
     public interface Listener {
-        public void onContactSelected(Uri contactUri);
+        public void onContactSelected(Uri contactUri, Rect targetRect);
     }
 }
diff --git a/src/com/android/contacts/list/ContactTileListFragment.java b/src/com/android/contacts/list/ContactTileListFragment.java
index f28c2b5..d4d961b 100644
--- a/src/com/android/contacts/list/ContactTileListFragment.java
+++ b/src/com/android/contacts/list/ContactTileListFragment.java
@@ -28,6 +28,7 @@
 import android.content.Loader;
 import android.content.res.Resources;
 import android.database.Cursor;
+import android.graphics.Rect;
 import android.net.Uri;
 import android.os.Bundle;
 import android.view.LayoutInflater;
@@ -48,7 +49,7 @@
     private static final String TAG = ContactTileListFragment.class.getSimpleName();
 
     public interface Listener {
-        public void onContactSelected(Uri contactUri);
+        public void onContactSelected(Uri contactUri, Rect targetRect);
     }
 
     private static int LOADER_CONTACTS = 1;
@@ -166,9 +167,9 @@
     private ContactTileAdapter.Listener mAdapterListener =
             new ContactTileAdapter.Listener() {
         @Override
-        public void onContactSelected(Uri contactUri) {
+        public void onContactSelected(Uri contactUri, Rect targetRect) {
             if (mListener != null) {
-                mListener.onContactSelected(contactUri);
+                mListener.onContactSelected(contactUri, targetRect);
             }
         }
     };
diff --git a/src/com/android/contacts/list/PhoneFavoriteFragment.java b/src/com/android/contacts/list/PhoneFavoriteFragment.java
index 6876789..b6e8dd6 100644
--- a/src/com/android/contacts/list/PhoneFavoriteFragment.java
+++ b/src/com/android/contacts/list/PhoneFavoriteFragment.java
@@ -29,6 +29,7 @@
 import android.content.Intent;
 import android.content.Loader;
 import android.database.Cursor;
+import android.graphics.Rect;
 import android.net.Uri;
 import android.os.Bundle;
 import android.provider.ContactsContract.Directory;
@@ -131,7 +132,7 @@
 
     private class ContactTileAdapterListener implements ContactTileAdapter.Listener {
         @Override
-        public void onContactSelected(Uri contactUri) {
+        public void onContactSelected(Uri contactUri, Rect targetRect) {
             if (mListener != null) {
                 mListener.onContactSelected(contactUri);
             }