Move add contact to group autocomplete to the ActionBar (1/2)
Bug 28707265
Bug 18641067
Change-Id: Ibcaf95b5592bbb471d2ac42c7d2c84f19d77c379
diff --git a/res/layout/group_editor_autocomplete_view.xml b/res/layout/group_editor_autocomplete_view.xml
deleted file mode 100644
index c8e716a..0000000
--- a/res/layout/group_editor_autocomplete_view.xml
+++ /dev/null
@@ -1,29 +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.
--->
-
-<!-- Autocomplete text input field for adding new members to a group in the group editor -->
-
-<AutoCompleteTextView
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textColor="?android:attr/textColorPrimary"
- android:imeOptions="flagNoExtractUi|flagNoFullscreen"
- android:hint="@string/enter_contact_name"
- android:minHeight="48dip"
- android:paddingLeft="@dimen/group_editor_autocomplete_left_padding"
- android:paddingStart="@dimen/group_editor_autocomplete_left_padding"/>
\ No newline at end of file
diff --git a/res/layout/group_editor_view.xml b/res/layout/group_editor_view.xml
index d94853d..72ceaf3 100644
--- a/res/layout/group_editor_view.xml
+++ b/res/layout/group_editor_view.xml
@@ -45,10 +45,6 @@
android:paddingStart="8dip"/>
<include
- layout="@layout/group_editor_autocomplete_view"
- android:id="@+id/add_member_field"/>
-
- <include
layout="@layout/group_editor_existing_member_list"
android:id="@android:id/list"/>
</LinearLayout>
diff --git a/res/menu/edit_group.xml b/res/menu/edit_group.xml
index ad17b80..c2d7f47 100644
--- a/res/menu/edit_group.xml
+++ b/res/menu/edit_group.xml
@@ -14,12 +14,21 @@
limitations under the License.
-->
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:contacts="http://schemas.android.com/apk/res-auto">
+
+ <item
+ android:id="@+id/menu_add"
+ android:icon="@drawable/ic_person_add_tinted_24dp"
+ android:title="@string/menu_addToGroup"
+ contacts:showAsAction="ifRoom" />
+
<item
android:id="@+id/menu_save"
- android:showAsAction="ifRoom"
android:icon="@drawable/ic_done_wht_24dp"
- android:title="@string/menu_save" />
+ android:title="@string/menu_save"
+ contacts:showAsAction="ifRoom" />
+
<item
android:id="@+id/menu_discard"
android:title="@string/menu_discard" />
diff --git a/res/values-sw600dp/dimens.xml b/res/values-sw600dp/dimens.xml
index 78bec34..b519318 100644
--- a/res/values-sw600dp/dimens.xml
+++ b/res/values-sw600dp/dimens.xml
@@ -52,8 +52,6 @@
<dimen name="group_editor_member_list_right_margin">4dip</dimen>
<!-- Account title left padding -->
<dimen name="account_container_left_padding">16dip</dimen>
- <!-- Left padding of the auto complete field to line hint text up with member list -->
- <dimen name="group_editor_autocomplete_left_padding">16dip</dimen>
<dimen name="contact_detail_list_top_padding">8dip</dimen>
<dimen name="frequently_contacted_title_text_size">24sp</dimen>
</resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index d4e40ee..6d516cf 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -154,9 +154,6 @@
<!-- Right margin for the group member list to match the built in margin in the autocomplete asset -->
<dimen name="group_editor_member_list_right_margin">4dip</dimen>
- <!-- Left padding of the auto complete field to line hint text up with member list -->
- <dimen name="group_editor_autocomplete_left_padding">8dip</dimen>
-
<!-- Border padding for the group detail fragment -->
<dimen name="group_detail_border_padding">0dip</dimen>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index cec807f..22169e4 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -137,11 +137,14 @@
<!-- Menu item that deletes the currently selected label [CHAR LIMIT=30] -->
<string name="menu_deleteGroup">Delete label</string>
+ <!-- Menu item to search for contacts to add to the currently selected label. CHAR LIMIT=30] -->
+ <string name="menu_addToGroup">Add contact</string>
+
<!-- Menu item to remove the currently selected contacts from the currently selected label. [CHAR LIMIT=60] -->
<string name="menu_removeFromGroup">Remove from label</string>
<!-- Menu item (in the action bar) that creates a new contact [CHAR LIMIT=30] -->
- <string name="menu_new_contact_action_bar">Add Contact</string>
+ <string name="menu_new_contact_action_bar">Add contact</string>
<!-- Menu item (in the action bar) that creates a new label [CHAR LIMIT=30] -->
<string name="menu_new_group_action_bar">Create new…</string>
diff --git a/src/com/android/contacts/activities/ActionBarAdapter.java b/src/com/android/contacts/activities/ActionBarAdapter.java
index 2d6740d..7042121 100644
--- a/src/com/android/contacts/activities/ActionBarAdapter.java
+++ b/src/com/android/contacts/activities/ActionBarAdapter.java
@@ -110,6 +110,8 @@
private boolean mShowHomeIcon;
private boolean mShowHomeAsUp;
+ private int mSearchHintResId;
+
public interface TabState {
public static int ALL = 0;
@@ -121,6 +123,12 @@
public ActionBarAdapter(Activity activity, Listener listener, ActionBar actionBar,
View portraitTabs, View landscapeTabs, Toolbar toolbar) {
+ this(activity, listener, actionBar, portraitTabs, landscapeTabs, toolbar,
+ R.string.hint_findContacts);
+ }
+
+ public ActionBarAdapter(Activity activity, Listener listener, ActionBar actionBar,
+ View portraitTabs, View landscapeTabs, Toolbar toolbar, int searchHintResId) {
mActivity = activity;
mListener = listener;
mActionBar = actionBar;
@@ -130,6 +138,7 @@
mToolbar = toolbar;
mToolBarFrame = (FrameLayout) mToolbar.getParent();
mMaxToolbarContentInsetStart = mToolbar.getContentInsetStart();
+ mSearchHintResId = searchHintResId;
setupSearchAndSelectionViews();
setupTabs(mActivity);
@@ -143,6 +152,10 @@
mShowHomeAsUp = showHomeAsUp;
}
+ public EditText getSearchView() {
+ return mSearchView;
+ }
+
private void setupTabs(Context context) {
final TypedArray attributeArray = context.obtainStyledAttributes(
new int[]{android.R.attr.actionBarSize});
@@ -163,7 +176,7 @@
mSearchContainer.setBackgroundColor(mActivity.getResources().getColor(
R.color.searchbox_background_color));
mSearchView = (EditText) mSearchContainer.findViewById(R.id.search_view);
- mSearchView.setHint(mActivity.getString(R.string.hint_findContacts));
+ mSearchView.setHint(mActivity.getString(mSearchHintResId));
mSearchView.addTextChangedListener(new SearchTextWatcher());
mSearchContainer.findViewById(R.id.search_back_button).setOnClickListener(
new OnClickListener() {
diff --git a/src/com/android/contacts/activities/GroupEditorActivity.java b/src/com/android/contacts/activities/GroupEditorActivity.java
index 5f2789e..e316902 100644
--- a/src/com/android/contacts/activities/GroupEditorActivity.java
+++ b/src/com/android/contacts/activities/GroupEditorActivity.java
@@ -22,6 +22,7 @@
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
+import android.widget.AutoCompleteTextView;
import com.android.contacts.ContactsActivity;
import com.android.contacts.R;
@@ -140,6 +141,20 @@
startActivity(ImplicitIntentsUtil.composeQuickContactIntent(
contactLookupUri, QuickContactActivity.MODE_FULLY_EXPANDED));
}
+
+ @Override
+ public AutoCompleteTextView getSearchView() {
+ return null;
+ }
+
+ @Override
+ public boolean isSearchMode() {
+ return false;
+ }
+
+ @Override
+ public void setSearchMode(boolean searchMode) {
+ }
};
@Override
diff --git a/src/com/android/contacts/activities/GroupMembersActivity.java b/src/com/android/contacts/activities/GroupMembersActivity.java
index 2221820..7ebb3e0 100644
--- a/src/com/android/contacts/activities/GroupMembersActivity.java
+++ b/src/com/android/contacts/activities/GroupMembersActivity.java
@@ -31,6 +31,7 @@
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
+import android.widget.AutoCompleteTextView;
import android.widget.Toast;
import com.android.contacts.AppCompatContactsActivity;
@@ -257,7 +258,8 @@
final ContactsRequest contactsRequest = new ContactsRequest();
contactsRequest.setActionCode(ContactsRequest.ACTION_GROUP);
mActionBarAdapter = new ActionBarAdapter(this, this, getSupportActionBar(),
- /* portraitTabs */ null, /* landscapeTabs */ null, toolbar);
+ /* portraitTabs */ null, /* landscapeTabs */ null, toolbar,
+ R.string.enter_contact_name);
mActionBarAdapter.setShowHomeIcon(true);
mActionBarAdapter.setShowHomeAsUp(true);
mActionBarAdapter.initialize(savedState, contactsRequest);
@@ -429,9 +431,6 @@
@Override
public void onAction(int action) {
switch (action) {
- case ActionBarAdapter.Listener.Action.CHANGE_SEARCH_QUERY:
- // TODO(wjang)
- break;
case ActionBarAdapter.Listener.Action.START_SEARCH_MODE:
mActionBarAdapter.setSearchMode(true);
invalidateOptionsMenu();
@@ -528,4 +527,22 @@
startActivity(ImplicitIntentsUtil.composeQuickContactIntent(
contactLookupUri, QuickContactActivity.MODE_FULLY_EXPANDED));
}
+
+ @Override
+ public AutoCompleteTextView getSearchView() {
+ return mActionBarAdapter == null
+ ? null : (AutoCompleteTextView) mActionBarAdapter.getSearchView();
+ }
+
+ @Override
+ public boolean isSearchMode() {
+ return mActionBarAdapter == null ? false : mActionBarAdapter.isSearchMode();
+ }
+
+ @Override
+ public void setSearchMode(boolean searchMode) {
+ if (mActionBarAdapter != null) {
+ mActionBarAdapter.setSearchMode(searchMode);
+ }
+ }
}
diff --git a/src/com/android/contacts/group/GroupEditorFragment.java b/src/com/android/contacts/group/GroupEditorFragment.java
index c738e33..a7d30a4 100644
--- a/src/com/android/contacts/group/GroupEditorFragment.java
+++ b/src/com/android/contacts/group/GroupEditorFragment.java
@@ -121,6 +121,24 @@
* Group member name or photo was clicked in order to view contact details.
*/
void onGroupMemberClicked(Uri contactLookupUri);
+
+ // TODO(wjang): consider calling these directly on the host Activity or moving these
+ // options menu items to the host Activity.
+
+ /**
+ * Returns the autocomplete view from the action bar.
+ */
+ AutoCompleteTextView getSearchView();
+
+ /**
+ * Whether the action bar is currently in search mode.
+ */
+ boolean isSearchMode();
+
+ /**
+ * Change whether the action bar is in search mode.
+ */
+ void setSearchMode(boolean searchMode);
}
private static final int LOADER_EXISTING_MEMBERS = 2;
@@ -421,8 +439,9 @@
}
mGroupNameView = (TextView) editorView.findViewById(R.id.group_name);
- mAutoCompleteTextView = (AutoCompleteTextView) editorView.findViewById(
- R.id.add_member_field);
+ if (mListener != null) {
+ mAutoCompleteTextView = mListener.getSearchView();
+ }
mListView = (ListView) editorView.findViewById(android.R.id.list);
mListView.setAdapter(mMemberListAdapter);
@@ -520,6 +539,21 @@
}
@Override
+ public void onPrepareOptionsMenu(Menu menu) {
+ final boolean isSearchMode = mListener == null ? false : mListener.isSearchMode();
+ setVisible(menu, R.id.menu_add, !isSearchMode);
+ setVisible(menu, R.id.menu_save, !isSearchMode);
+ setVisible(menu, R.id.menu_discard, !isSearchMode);
+ }
+
+ private static void setVisible(Menu menu, int id, boolean visible) {
+ final MenuItem menuItem = menu.findItem(id);
+ if (menuItem != null) {
+ menuItem.setVisible(visible);
+ }
+ }
+
+ @Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home: {
@@ -530,6 +564,11 @@
}
return true;
}
+ case R.id.menu_add:
+ if (mListener != null) {
+ mListener.setSearchMode(true);
+ }
+ return true;
case R.id.menu_save:
onDoneClicked();
return true;