Merge "Change contacts version and target SDK to 25 (1/2)"
diff --git a/res/drawable/ic_menu_delete.xml b/res/drawable/ic_menu_delete.xml
new file mode 100644
index 0000000..d994368
--- /dev/null
+++ b/res/drawable/ic_menu_delete.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 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.
+-->
+
+<!-- A trash can icon (ic_menu_delete) -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportHeight="24.0"
+ android:viewportWidth="24.0">
+ <path
+ android:fillColor="@color/actionbar_icon_color_grey"
+ android:pathData="M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z"/>
+</vector>
diff --git a/res/drawable/ic_menu_link.xml b/res/drawable/ic_menu_link.xml
new file mode 100644
index 0000000..e631034
--- /dev/null
+++ b/res/drawable/ic_menu_link.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 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.
+-->
+
+<!-- ic_menu_link -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportHeight="24.0"
+ android:viewportWidth="24.0">
+ <path
+ android:fillColor="@color/actionbar_icon_color_grey"
+ android:pathData="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"/>
+</vector>
diff --git a/res/drawable/ic_menu_share.xml b/res/drawable/ic_menu_share.xml
new file mode 100644
index 0000000..99e873b
--- /dev/null
+++ b/res/drawable/ic_menu_share.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 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.
+-->
+
+<!-- ic_menu_share -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportHeight="24.0"
+ android:viewportWidth="24.0">
+ <path
+ android:fillColor="@color/actionbar_icon_color_grey"
+ android:pathData="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81 1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9c-1.66 0-3 1.34-3 3s1.34 3 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.16c-.05.21-.08.43-.08.65 0 1.61 1.31 2.92 2.92 2.92 1.61 0 2.92-1.31 2.92-2.92s-1.31-2.92-2.92-2.92z"/>
+</vector>
diff --git a/res/layout/selection_bar.xml b/res/layout/selection_bar.xml
index ca81faf..f8fd7fc 100644
--- a/res/layout/selection_bar.xml
+++ b/res/layout/selection_bar.xml
@@ -28,15 +28,29 @@
android:background="?attr/selectableItemBackgroundBorderless"
android:contentDescription="@string/action_menu_back_from_edit_select"
android:layout_gravity="center_vertical|start"
- android:tint="@android:color/white" />
+ android:alpha="@dimen/close_icon_alpha" />
<TextView
android:id="@+id/selection_count_text"
android:layout_marginStart="72dp"
+ android:layout_marginEnd="@dimen/edit_group_end_margin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:layout_gravity="center_vertical|start"
- style="@style/ContactsActionBarTitleTextAppCompat" />
+ android:singleLine="true"
+ android:ellipsize="end"
+ style="@style/ContactsActionBarTitleTextBlack" />
+
+ <TextView
+ android:id="@+id/add_contacts"
+ android:layout_marginEnd="16dp"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:visibility="gone"
+ android:layout_gravity="center_vertical|end"
+ android:text="@string/menu_add_contacts"
+ android:textColor="@color/primary_color"
+ android:textStyle="bold"/>
</FrameLayout>
diff --git a/res/menu/group_member_picker.xml b/res/menu/group_member_picker.xml
index ab1fadf..9e623f6 100644
--- a/res/menu/group_member_picker.xml
+++ b/res/menu/group_member_picker.xml
@@ -18,12 +18,6 @@
xmlns:contacts="http://schemas.android.com/apk/res-auto">
<item
- android:id="@+id/menu_done"
- android:icon="@drawable/ic_done_wht_24dp"
- android:title="@string/menu_addContactsToGroup"
- contacts:showAsAction="always" />
-
- <item
android:id="@+id/menu_select"
android:title="@string/menu_selectForGroup" />
contacts:showAsAction="never" />
diff --git a/res/menu/people_options.xml b/res/menu/people_options.xml
index 46d6856..a2402b9 100644
--- a/res/menu/people_options.xml
+++ b/res/menu/people_options.xml
@@ -28,15 +28,21 @@
android:showAsAction="never" />
<item
- android:id="@+id/menu_join"
- android:title="@string/menu_joinAggregate" />
+ android:id="@+id/menu_share"
+ android:icon="@drawable/ic_menu_share"
+ android:title="@string/menu_share"
+ contacts:showAsAction="ifRoom"/>
<item
android:id="@+id/menu_delete"
- android:title="@string/menu_deleteContact" />
+ android:icon="@drawable/ic_menu_delete"
+ android:title="@string/menu_deleteContact"
+ contacts:showAsAction="ifRoom"/>
<item
- android:id="@+id/menu_share"
- android:title="@string/menu_share" />
+ android:id="@+id/menu_join"
+ android:icon="@drawable/ic_menu_link"
+ android:title="@string/menu_joinAggregate"
+ contacts:showAsAction="ifRoom"/>
</menu>
diff --git a/res/values-sw600dp/dimens.xml b/res/values-sw600dp/dimens.xml
index 68e4e87..f0b28a9 100644
--- a/res/values-sw600dp/dimens.xml
+++ b/res/values-sw600dp/dimens.xml
@@ -45,4 +45,7 @@
<dimen name="account_container_left_padding">16dip</dimen>
<dimen name="contact_detail_list_top_padding">8dip</dimen>
<dimen name="frequently_contacted_title_text_size">24sp</dimen>
+
+ <!-- End margin of edit group title -->
+ <dimen name="edit_group_end_margin">80dp</dimen>
</resources>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index ee4f55a..8089a2e 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -30,9 +30,9 @@
<color name="actionbar_background_color">@color/primary_color</color>
<color name="actionbar_background_color_dark">@color/primary_color_dark</color>
- <color name="contextual_selection_bar_color">#616161</color>
+ <color name="contextual_selection_bar_color">#f6f6f6</color>
<!-- Color of the status bar above the contextual selection bar. -->
- <color name="contextual_selection_bar_status_bar_color">#424242</color>
+ <color name="contextual_selection_bar_status_bar_color">#bababa</color>
<color name="primary_color_dark">#0277bd</color>
<color name="primary_color">#0288d1</color>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 2badc01..b1fecc8 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -286,4 +286,7 @@
<!-- Width for the image for empty group view-->
<dimen name="empty_group_view_image_width">232dp</dimen>
+
+ <!-- End margin of edit group title -->
+ <dimen name="edit_group_end_margin">72dp</dimen>
</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 06e4ad7..d72b4b2 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -438,6 +438,9 @@
<!-- The menu item to add the the currently viewed contact to your contacts [CHAR LIMIT=30] -->
<string name="menu_add_contact">Add to contacts</string>
+ <!-- The menu item to add the the currently selected contacts to a label [CHAR LIMIT=10] -->
+ <string name="menu_add_contacts">Add</string>
+
<!-- Dialog title when picking the application to share one or multiple contacts with. [CHAR LIMIT=40] -->
<plurals name="title_share_via">
<item quantity="one">Share contact via</item>
@@ -669,7 +672,7 @@
<string name="enter_contact_name">Search contacts</string>
<!-- Title of edit label view [CHAR LIMIT=20]-->
- <string name="title_edit_group">Edit Label</string>
+ <string name="title_edit_group">Edit Label: <xliff:g id="group_name" example="Friends">%1$s</xliff:g></string>
<!-- Header label in the contact editor for a profile that is local to the device only (and not associated with any account) [CHAR LIMIT=25] -->
<string name="local_profile_title">My local profile</string>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 50d53dc..0af01f7 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -238,6 +238,10 @@
<item name="android:textColor">@color/actionbar_text_color</item>
</style>
+ <style name="ContactsActionBarTitleTextBlack" parent="@style/ContactsActionBarTitleTextAppCompat">
+ <item name="android:textColor">@color/actionbar_text_color_black</item>
+ </style>
+
<!-- Styling for the tab bar; handles styling of the divider line. -->
<style name="ContactsActionBarTabBarStyle"
parent="@android:style/Widget.Material.ActionBar.TabBar">
diff --git a/src/com/android/contacts/ContactsDrawerActivity.java b/src/com/android/contacts/ContactsDrawerActivity.java
index e4f8010..cf44fe3 100644
--- a/src/com/android/contacts/ContactsDrawerActivity.java
+++ b/src/com/android/contacts/ContactsDrawerActivity.java
@@ -32,7 +32,10 @@
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
+import android.util.DisplayMetrics;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
@@ -95,6 +98,13 @@
protected static final String ACTION_CREATE_GROUP = "createGroup";
+ // TODO(wenyiw): remove all the code related to these constants after switching to fragments.
+ // Positions of "all contacts" and "duplicates" in navigation drawer.
+ private static final int ALL_CONTACTS_POSITION = 1;
+ private static final int DUPLICATES_POSITION = 2;
+ // Gap between two menu groups, including a separator, a menu group header.
+ private static final int GAP_BETWEEN_TWO_MENU_GROUPS = 2;
+
private class ContactsActionBarDrawerToggle extends ActionBarDrawerToggle {
private Runnable mRunnable;
@@ -153,6 +163,8 @@
// The account the new group will be created under.
private AccountWithDataSet mNewGroupAccount;
+ private int mPositionOfLastGroup;
+
@Override
protected void onCreate(Bundle savedState) {
super.onCreate(savedState);
@@ -202,6 +214,7 @@
clearCheckedMenus();
mIdMenuMap.get(R.id.nav_find_duplicates).setCheckable(true);
mIdMenuMap.get(R.id.nav_find_duplicates).setChecked(true);
+ updateScrollPosition(DUPLICATES_POSITION);
}
if (savedState != null && savedState.containsKey(KEY_NEW_GROUP_ACCOUNT)) {
@@ -210,6 +223,20 @@
}
}
+ private void updateScrollPosition(int position) {
+ final RecyclerView recyclerView = (RecyclerView) mNavigationView.getChildAt(0);
+ final LinearLayoutManager layoutManager =
+ (LinearLayoutManager) recyclerView.getLayoutManager();
+
+ // Get screen height
+ final DisplayMetrics metrics = getResources().getDisplayMetrics();
+ final int height = metrics.heightPixels;
+
+ // Set 1/3 screen height as offset if possible.
+ layoutManager.scrollToPositionWithOffset(position, height / 3);
+ recyclerView.requestLayout();
+ }
+
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
@@ -227,9 +254,10 @@
}
private void makeStatusBarTransparent() {
- if (CompatUtils.isLollipopCompatible()
- && getWindow().getStatusBarColor() ==
- ContextCompat.getColor(this, R.color.primary_color_dark)) {
+ // Avoid making status bar transparent when action bar's selection mode is on.
+ if (getWindow().getStatusBarColor() !=
+ ContextCompat.getColor(this, R.color.contextual_selection_bar_status_bar_color)
+ && CompatUtils.isLollipopCompatible()) {
getWindow().setStatusBarColor(Color.TRANSPARENT);
}
}
@@ -312,15 +340,18 @@
subMenu.removeGroup(R.id.nav_groups_items);
mGroupMenuMap = new HashMap<>();
+ mPositionOfLastGroup = DUPLICATES_POSITION + GAP_BETWEEN_TWO_MENU_GROUPS;
+
if (groupListItems != null) {
// Add each group
for (final GroupListItem groupListItem : groupListItems) {
if (GroupUtil.isEmptyFFCGroup(groupListItem)) {
continue;
}
+ mPositionOfLastGroup++;
final String title = groupListItem.getTitle();
final MenuItem menuItem =
- subMenu.add(R.id.nav_groups_items, Menu.NONE, Menu.NONE, title);
+ subMenu.add(R.id.nav_groups_items, Menu.NONE, mPositionOfLastGroup, title);
mGroupMenuMap.put(groupListItem.getGroupId(), menuItem);
menuItem.setIcon(R.drawable.ic_menu_label);
menuItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@@ -345,9 +376,10 @@
return;
}
+ mPositionOfLastGroup++;
// Create a menu item in the sub menu to add new groups
- final MenuItem menuItem = subMenu.add(R.id.nav_groups_items, Menu.NONE, Menu.NONE,
- getString(R.string.menu_new_group_action_bar));
+ final MenuItem menuItem = subMenu.add(R.id.nav_groups_items, Menu.NONE,
+ mPositionOfLastGroup, getString(R.string.menu_new_group_action_bar));
menuItem.setIcon(R.drawable.ic_add);
menuItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
@@ -374,6 +406,7 @@
&& mGroupMenuMap.get(groupMetadata.groupId) != null) {
mGroupMenuMap.get(groupMetadata.groupId).setCheckable(true);
mGroupMenuMap.get(groupMetadata.groupId).setChecked(true);
+ updateScrollPosition(mGroupMenuMap.get(groupMetadata.groupId).getOrder());
}
}
@@ -420,13 +453,16 @@
return;
}
+ int positionOfLastFilter = mPositionOfLastGroup + GAP_BETWEEN_TWO_MENU_GROUPS;
+
for (int i = 0; i < accountFilterItems.size(); i++) {
+ positionOfLastFilter++;
final ContactListFilter filter = accountFilterItems.get(i);
final String menuName =
filter.filterType == ContactListFilter.FILTER_TYPE_DEVICE_CONTACTS
? getString(R.string.account_phone) : filter.accountName;
- final MenuItem menuItem = subMenu.add(R.id.nav_filters_items, Menu.NONE, Menu.NONE,
- menuName);
+ final MenuItem menuItem = subMenu.add(R.id.nav_filters_items, Menu.NONE,
+ positionOfLastFilter, menuName);
mFilterMenuMap.put(filter, menuItem);
final Intent intent = new Intent();
intent.putExtra(AccountFilterUtil.EXTRA_CONTACT_LIST_FILTER, filter);
@@ -449,7 +485,7 @@
}
});
menuItem.setIcon(filter.icon);
- // Get rid of the default memu item overlay and show original account icons.
+ // Get rid of the default menu item overlay and show original account icons.
menuItem.getIcon().setColorFilter(Color.TRANSPARENT, PorterDuff.Mode.SRC_ATOP);
}
@@ -464,11 +500,13 @@
if (mIdMenuMap != null && mIdMenuMap.get(R.id.nav_all_contacts) != null) {
mIdMenuMap.get(R.id.nav_all_contacts).setCheckable(true);
mIdMenuMap.get(R.id.nav_all_contacts).setChecked(true);
+ updateScrollPosition(ALL_CONTACTS_POSITION);
}
} else {
if (mFilterMenuMap != null && mFilterMenuMap.get(filter) != null) {
mFilterMenuMap.get(filter).setCheckable(true);
mFilterMenuMap.get(filter).setChecked(true);
+ updateScrollPosition(mFilterMenuMap.get(filter).getOrder());
}
}
}
diff --git a/src/com/android/contacts/activities/ActionBarAdapter.java b/src/com/android/contacts/activities/ActionBarAdapter.java
index 669735c..aa48bce 100644
--- a/src/com/android/contacts/activities/ActionBarAdapter.java
+++ b/src/com/android/contacts/activities/ActionBarAdapter.java
@@ -20,6 +20,7 @@
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
+import android.content.res.ColorStateList;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.preference.PreferenceManager;
@@ -33,8 +34,10 @@
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.view.ViewTreeObserver;
import android.view.inputmethod.InputMethodManager;
import android.widget.FrameLayout;
+import android.widget.ImageView;
import android.widget.LinearLayout.LayoutParams;
import android.widget.SearchView.OnCloseListener;
import android.view.View.OnClickListener;
@@ -46,6 +49,8 @@
import com.android.contacts.common.compat.CompatUtils;
import com.android.contacts.list.ContactsRequest;
+import java.util.ArrayList;
+
/**
* Adapter for the action bar at the top of the Contacts activity.
*/
@@ -156,6 +161,10 @@
return mSearchView;
}
+ public View getSelectionContainer() {
+ return mSelectionContainer;
+ }
+
private void setupTabs(Context context) {
final TypedArray attributeArray = context.obtainStyledAttributes(
new int[]{android.R.attr.actionBarSize});
@@ -417,6 +426,8 @@
private void update(boolean skipAnimation) {
updateStatusBarColor();
+ updateOverflowButtonColor();
+
final boolean isSelectionModeChanging
= (mSelectionContainer.getParent() == null) == mSelectionMode;
final boolean isSwitchingFromSearchToSelection =
@@ -498,6 +509,45 @@
}
}
+ /**
+ * Find overflow menu ImageView by its content description and update its color.
+ */
+ private void updateOverflowButtonColor() {
+ final String overflowDescription = mActivity.getResources().getString(
+ R.string.abc_action_menu_overflow_description);
+ final ViewGroup decorView = (ViewGroup) mActivity.getWindow().getDecorView();
+ final ViewTreeObserver viewTreeObserver = decorView.getViewTreeObserver();
+ viewTreeObserver.addOnGlobalLayoutListener(
+ new ViewTreeObserver.OnGlobalLayoutListener() {
+ @Override
+ public void onGlobalLayout() {
+ // Find the overflow ImageView.
+ final ArrayList<View> outViews = new ArrayList<>();
+ decorView.findViewsWithText(outViews, overflowDescription,
+ View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION);
+ if (outViews.isEmpty()) {
+ return;
+ }
+ final ImageView overflow = (ImageView) outViews.get(0);
+ overflow.setImageResource(R.drawable.ic_more_vert);
+
+ // Update the overflow image color.
+ final int iconColor;
+ if (mSelectionMode) {
+ iconColor = mActivity.getResources().getColor(
+ R.color.actionbar_color_grey_solid);
+ } else {
+ iconColor = mActivity.getResources().getColor(
+ R.color.actionbar_text_color);
+ }
+ overflow.setImageTintList(ColorStateList.valueOf(iconColor));
+
+ // We're done, remove the listener.
+ decorView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
+ }
+ });
+ }
+
public void setSelectionCount(int selectionCount) {
TextView textView = (TextView) mSelectionContainer.findViewById(R.id.selection_count_text);
if (selectionCount == 0) {
diff --git a/src/com/android/contacts/activities/ContactSelectionActivity.java b/src/com/android/contacts/activities/ContactSelectionActivity.java
index 22d9f7a..dae57fc 100644
--- a/src/com/android/contacts/activities/ContactSelectionActivity.java
+++ b/src/com/android/contacts/activities/ContactSelectionActivity.java
@@ -31,6 +31,7 @@
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnFocusChangeListener;
+import android.widget.TextView;
import android.widget.Toast;
import com.android.contacts.AppCompatContactsActivity;
@@ -441,13 +442,34 @@
@Override
public void onSelectedContactIdsChanged() {
if (mListFragment instanceof MultiSelectContactsListFragment) {
- mActionBarAdapter.setSelectionCount(((MultiSelectContactsListFragment) mListFragment)
- .getSelectedContactIds().size());
+ final int count = getMultiSelectListFragment().getSelectedContactIds().size();
+ mActionBarAdapter.setSelectionCount(count);
+ updateAddContactsButton(count);
+
// Show or hide the multi select "Done" button
invalidateOptionsMenu();
}
}
+ private void updateAddContactsButton(int count) {
+ final TextView textView = (TextView) mActionBarAdapter.getSelectionContainer()
+ .findViewById(R.id.add_contacts);
+ if (count > 0) {
+ textView.setVisibility(View.VISIBLE);
+ textView.setAllCaps(true);
+ textView.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ final long[] contactIds =
+ getMultiSelectListFragment().getSelectedContactIdsArray();
+ returnSelectedContacts(contactIds);
+ }
+ });
+ } else {
+ textView.setVisibility(View.GONE);
+ }
+ }
+
@Override
public void onStopDisplayingCheckBoxes() {
mActionBarAdapter.setSelectionMode(false);
@@ -532,9 +554,7 @@
@Override
public void onGroupMembersSelected(long[] contactIds) {
- final Intent intent = new Intent();
- intent.putExtra(UiIntentActions.TARGET_CONTACT_IDS_EXTRA_KEY, contactIds);
- returnPickerResult(intent);
+ returnSelectedContacts(contactIds);
}
@Override
@@ -543,6 +563,12 @@
}
}
+ private void returnSelectedContacts(long[] contactIds) {
+ final Intent intent = new Intent();
+ intent.putExtra(UiIntentActions.TARGET_CONTACT_IDS_EXTRA_KEY, contactIds);
+ returnPickerResult(intent);
+ }
+
private final class PostalAddressPickerActionListener implements
OnPostalAddressPickerActionListener {
@Override
diff --git a/src/com/android/contacts/activities/GroupMembersActivity.java b/src/com/android/contacts/activities/GroupMembersActivity.java
index 88b5db2..34b6b25 100644
--- a/src/com/android/contacts/activities/GroupMembersActivity.java
+++ b/src/com/android/contacts/activities/GroupMembersActivity.java
@@ -495,7 +495,8 @@
if (mMembersFragment != null) {
if (mIsEditMode) {
mMembersFragment.displayDeleteButtons(true);
- mActionBarAdapter.setActionBarTitle(getString(R.string.title_edit_group));
+ mActionBarAdapter.setActionBarTitle(
+ getString(R.string.title_edit_group, mGroupMetadata.groupName));
} else {
mMembersFragment.displayCheckBoxes(true);
}
@@ -544,7 +545,8 @@
@Override
public void onSelectedContactIdsChanged() {
if (mIsEditMode) {
- mActionBarAdapter.setActionBarTitle(getString(R.string.title_edit_group));
+ mActionBarAdapter.setActionBarTitle(
+ getString(R.string.title_edit_group, mGroupMetadata.groupName));
} else {
mActionBarAdapter.setSelectionCount(mMembersFragment.getSelectedContactIds().size());
}
diff --git a/src/com/android/contacts/editor/LabeledEditorView.java b/src/com/android/contacts/editor/LabeledEditorView.java
index 63d75d8..61c1061 100644
--- a/src/com/android/contacts/editor/LabeledEditorView.java
+++ b/src/com/android/contacts/editor/LabeledEditorView.java
@@ -300,8 +300,8 @@
mEntry.getAsString(mType.customColumn),
getContext().getString(mKind.titleRes)));
} else {
- mLabel.setSelection(mEditTypeAdapter.getPosition(mType));
if (mType != null) {
+ mLabel.setSelection(mEditTypeAdapter.getPosition(mType));
mDeleteContainer.setContentDescription(
getContext().getString(R.string.editor_delete_view_description,
getContext().getString(mType.labelRes),
@@ -408,10 +408,8 @@
mLabel.setEnabled(!readOnly && isEnabled());
mLabel.setContentDescription(getContext().getResources().getString(mKind.titleRes));
- if (hasTypes) {
- mType = RawContactModifier.getCurrentType(entry, kind);
- rebuildLabel();
- }
+ mType = RawContactModifier.getCurrentType(entry, kind);
+ rebuildLabel();
}
public ValuesDelta getValues() {
diff --git a/src/com/android/contacts/list/GroupMemberPickerFragment.java b/src/com/android/contacts/list/GroupMemberPickerFragment.java
index d981de0..519a6a9 100644
--- a/src/com/android/contacts/list/GroupMemberPickerFragment.java
+++ b/src/com/android/contacts/list/GroupMemberPickerFragment.java
@@ -279,9 +279,6 @@
// Added in ContactSelectionActivity but we must account for selection mode
setVisible(menu, R.id.menu_search, !isSearchMode && !isSelectionMode);
-
- setVisible(menu, R.id.menu_done, isSelectionMode &&
- getAdapter().getSelectedContactIds().size() > 0);
setVisible(menu, R.id.menu_select, !isSearchMode && !isSelectionMode);
}
@@ -310,12 +307,6 @@
}
return true;
}
- case R.id.menu_done: {
- if (mListener != null) {
- mListener.onGroupMembersSelected(getAdapter().getSelectedContactIdsArray());
- }
- return true;
- }
case R.id.menu_select: {
if (mListener != null) {
mListener.onSelectGroupMembers();
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index 5ec7818..07720f2 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -69,6 +69,7 @@
import android.provider.ContactsContract.Intents;
import android.provider.ContactsContract.QuickContact;
import android.provider.ContactsContract.RawContacts;
+import android.support.graphics.drawable.VectorDrawableCompat;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.graphics.Palette;
@@ -2683,8 +2684,9 @@
Trace.endSection();
Trace.beginSection("initialize permission explanation card");
- final Drawable historyIcon = getResources().getDrawable(
- R.drawable.ic_history_24dp).mutate();
+ final Drawable historyIcon = VectorDrawableCompat.create(
+ getResources(), R.drawable.ic_history_24dp, null);
+
final Entry permissionExplanationEntry = new Entry(CARD_ENTRY_ID_REQUEST_PERMISSION,
historyIcon, getString(R.string.permission_explanation_header),
mPermissionExplanationCardSubHeader, /* subHeaderIcon = */ null,