Merge "Import translations. DO NOT MERGE" into ub-contactsdialer-h-dev
diff --git a/src/com/android/contacts/ContactsDrawerActivity.java b/src/com/android/contacts/ContactsDrawerActivity.java
index 497295d..caaa326 100644
--- a/src/com/android/contacts/ContactsDrawerActivity.java
+++ b/src/com/android/contacts/ContactsDrawerActivity.java
@@ -420,7 +420,8 @@
                         mToggle.runWhenIdle(new Runnable() {
                             @Override
                             public void run() {
-                                onGroupMenuItemClicked(groupListItem);
+                                onGroupMenuItemClicked(groupListItem.getGroupId(),
+                                        groupListItem.getTitle());
                                 updateMenuSelection(menuItem);
                             }
                         });
@@ -491,7 +492,7 @@
         return isGroupView() || isAssistantView();
     }
 
-    protected abstract void onGroupMenuItemClicked(GroupListItem group);
+    protected abstract void onGroupMenuItemClicked(long groupId, String title);
 
     protected void onCreateGroupMenuItemClicked() {
         // Select the account to create the group
@@ -586,7 +587,6 @@
     }
 
     protected void onFilterMenuItemClicked(Intent intent) {
-        resetFilter();
         AccountFilterUtil.handleAccountFilterResult(mContactListFilterController,
                 AppCompatActivity.RESULT_OK, intent);
     }
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index bbe9721..0ee9965 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -22,6 +22,7 @@
 import android.app.FragmentTransaction;
 import android.content.BroadcastReceiver;
 import android.content.ContentResolver;
+import android.content.ContentUris;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
@@ -29,6 +30,7 @@
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.Handler;
+import android.provider.ContactsContract;
 import android.provider.ContactsContract.ProviderStatus;
 import android.support.design.widget.CoordinatorLayout;
 import android.support.design.widget.Snackbar;
@@ -65,7 +67,6 @@
 import com.android.contacts.common.util.Constants;
 import com.android.contacts.common.util.ImplicitIntentsUtil;
 import com.android.contacts.common.widget.FloatingActionButtonController;
-import com.android.contacts.group.GroupListItem;
 import com.android.contacts.group.GroupMembersFragment;
 import com.android.contacts.group.GroupMetaData;
 import com.android.contacts.group.GroupUtil;
@@ -769,18 +770,12 @@
     }
 
     @Override
-    protected void onGroupMenuItemClicked(GroupListItem group) {
+    protected void onGroupMenuItemClicked(long groupId, String title) {
         if (isGroupView() && mMembersFragment != null
-                && mMembersFragment.isCurrentGroup(group.getGroupId())) {
+                && mMembersFragment.isCurrentGroup(groupId)) {
             return;
         }
-        mGroupUri = group.getUri();
-        // Set the filter. This isn't used by the GroupMembersFragment but makes sure that the
-        // filter will change when switching to a different view from the GroupMembersFragment.
-        mContactListFilterController.setContactListFilter(
-                ContactListFilter.createGroupMembersFilter(group.getAccountName(),
-                        group.getAccountType(), group.getDataSet()), /* persistent */ false,
-                /* notifyListeners */ false);
+        mGroupUri = ContentUris.withAppendedId(ContactsContract.Groups.CONTENT_URI, groupId);
         switchToOrUpdateGroupView(GroupUtil.ACTION_SWITCH_GROUP);
     }
 
@@ -790,6 +785,12 @@
         if (isInSecondLevel()) {
             popSecondLevel();
             showFabWithAnimation(/* showFab */ true);
+            // HACK: swap the current filter to force listeners to update because the group
+            // member view no longer changes the filter. Fix for b/32223767
+            final ContactListFilter current = mContactListFilterController.getFilter();
+            mContactListFilterController.setContactListFilter(
+                    AccountFilterUtil.createContactsFilter(this), false);
+            mContactListFilterController.setContactListFilter(current, false);
         }
         mCurrentView = ContactsView.ACCOUNT_VIEW;
         super.onFilterMenuItemClicked(intent);
@@ -907,8 +908,11 @@
     }
 
     private void handleFilterChangeForActivity(ContactListFilter filter) {
-        // Set mShouldSwitchToAllContacts to true, so that we can switch to all contacts later.
-        if (filter.isContactsFilterType()) {
+        // The filter was changed while this activity was in the background. If we're in the
+        // assistant view Switch to the main contacts list when we resume to prevent
+        // b/31838582 and b/31829161
+        // TODO: this is a hack; we need to do some cleanup of the contact list filter stuff
+        if (isAssistantView() && filter.isContactsFilterType()) {
             mShouldSwitchToAllContacts = true;
         }
 
diff --git a/src/com/android/contacts/common/list/ContactListFilter.java b/src/com/android/contacts/common/list/ContactListFilter.java
index c6baf41..5b7472d 100644
--- a/src/com/android/contacts/common/list/ContactListFilter.java
+++ b/src/com/android/contacts/common/list/ContactListFilter.java
@@ -397,11 +397,14 @@
      * (see {@link #isGoogleAccountType)
      */
     public boolean isSyncable(List<AccountWithDataSet> accounts) {
-        // TODO(samchen): Check FILTER_TYPE_CUSTOM
         if (isGoogleAccountType() && filterType == ContactListFilter.FILTER_TYPE_ACCOUNT) {
             return true;
         }
+        // Since we don't know which group is selected until the actual contacts loading, we
+        // consider a custom filter syncable as long as there is a Google account on the device,
+        // and don't check if there is any group that belongs to a Google account is selected.
         if (filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS
+                || filterType == ContactListFilter.FILTER_TYPE_CUSTOM
                 || filterType == ContactListFilter.FILTER_TYPE_DEFAULT) {
             if (accounts != null && accounts.size() > 0) {
                 // If we're showing all contacts and there is any Google account on the device then
@@ -422,10 +425,11 @@
      */
     public List<Account> getSyncableAccounts(List<AccountWithDataSet> accounts) {
         final List<Account> syncableAccounts = new ArrayList<>();
-        // TODO(samchen): Check FILTER_TYPE_CUSTOM
+
         if (isGoogleAccountType() && filterType == ContactListFilter.FILTER_TYPE_ACCOUNT) {
             syncableAccounts.add(new Account(accountName, accountType));
         } else if (filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS
+                || filterType == ContactListFilter.FILTER_TYPE_CUSTOM
                 || filterType == ContactListFilter.FILTER_TYPE_DEFAULT) {
             if (accounts != null && accounts.size() > 0) {
                 for (AccountWithDataSet account : accounts) {
diff --git a/src/com/android/contacts/common/list/ContactListFilterController.java b/src/com/android/contacts/common/list/ContactListFilterController.java
index 36e740f..4d3d6ad 100644
--- a/src/com/android/contacts/common/list/ContactListFilterController.java
+++ b/src/com/android/contacts/common/list/ContactListFilterController.java
@@ -71,9 +71,6 @@
      */
     public abstract void setContactListFilter(ContactListFilter filter, boolean persistent);
 
-    public abstract void setContactListFilter(ContactListFilter filter, boolean persistent,
-            boolean notifyListeners);
-
     public abstract void selectCustomFilter();
 
     /**
@@ -142,8 +139,7 @@
         setContactListFilter(filter, persistent, /* notifyListeners */ true);
     }
 
-    @Override
-    public void setContactListFilter(ContactListFilter filter, boolean persistent,
+    private void setContactListFilter(ContactListFilter filter, boolean persistent,
             boolean notifyListeners) {
         if (!filter.equals(mFilter)) {
             mFilter = filter;
diff --git a/src/com/android/contacts/common/list/ContactListItemView.java b/src/com/android/contacts/common/list/ContactListItemView.java
index 67f6d35..f74c671 100644
--- a/src/com/android/contacts/common/list/ContactListItemView.java
+++ b/src/com/android/contacts/common/list/ContactListItemView.java
@@ -450,13 +450,13 @@
         // All the other Views will honor the photo, so available width for them may be shrunk.
         if (mPhotoViewWidth > 0 || mKeepHorizontalPaddingForPhotoView) {
             effectiveWidth = specWidth - getPaddingLeft() - getPaddingRight()
-                    - (mPhotoViewWidth + mGapBetweenImageAndText);
+                    - (mPhotoViewWidth + mGapBetweenImageAndText + mGapBetweenIndexerAndImage);
         } else {
             effectiveWidth = specWidth - getPaddingLeft() - getPaddingRight();
         }
 
         if (mIsSectionHeaderEnabled) {
-            effectiveWidth -= mHeaderWidth + mGapBetweenIndexerAndImage;
+            effectiveWidth -= mHeaderWidth;
         }
 
         if (mSupportVideoCallIcon) {
diff --git a/src/com/android/contacts/group/GroupListItem.java b/src/com/android/contacts/group/GroupListItem.java
index 2906821..f2359b6 100644
--- a/src/com/android/contacts/group/GroupListItem.java
+++ b/src/com/android/contacts/group/GroupListItem.java
@@ -15,10 +15,6 @@
  */
 package com.android.contacts.group;
 
-import android.content.ContentUris;
-import android.net.Uri;
-import android.provider.ContactsContract;
-
 /**
  * Meta-data for a contact group.  We load all groups associated with the contact's
  * constituent accounts.
@@ -87,8 +83,4 @@
     public String getSystemId() {
         return mSystemId;
     }
-
-    public Uri getUri() {
-        return ContentUris.withAppendedId(ContactsContract.Groups.CONTENT_URI, mGroupId);
-    }
 }
\ No newline at end of file