diff options
-rw-r--r-- | AndroidManifest.xml | 5 | ||||
-rw-r--r-- | res/layout/dialtacts_activity.xml | 47 | ||||
-rw-r--r-- | res/layout/search_edittext.xml | 48 | ||||
-rw-r--r-- | res/menu/dialtacts_options.xml | 9 | ||||
-rw-r--r-- | res/values/dimens.xml | 4 | ||||
-rw-r--r-- | src/com/android/dialer/DialtactsActivity.java | 100 |
6 files changed, 109 insertions, 104 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 7795aa826..6879f3a2b 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -122,11 +122,6 @@ <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.TAB" /> </intent-filter> - <intent-filter> - <action android:name="android.intent.action.SEARCH" /> - </intent-filter> - <meta-data android:name="android.app.searchable" - android:resource="@xml/searchable"/> </activity> <activity android:name="com.android.dialer.calllog.CallLogActivity" diff --git a/res/layout/dialtacts_activity.xml b/res/layout/dialtacts_activity.xml index 6d041034b..2cd796b60 100644 --- a/res/layout/dialtacts_activity.xml +++ b/res/layout/dialtacts_activity.xml @@ -46,53 +46,6 @@ android:id="@+id/search_and_remove_view_container" android:visibility="gone" > - <!-- TODO: This is set to visibility:gone for now, should be removed entirely --> - <LinearLayout - android:layout_width="match_parent" - android:layout_height="@dimen/search_box_height" - android:id="@+id/search_view_container" - android:orientation="horizontal" - android:layout_marginTop="@dimen/search_top_margin" - android:layout_marginBottom="@dimen/search_bottom_margin" - android:layout_marginLeft="@dimen/search_margin_horizontal" - android:layout_marginRight="@dimen/search_margin_horizontal" - android:paddingLeft="@dimen/search_box_left_padding" - android:paddingRight="@dimen/search_box_right_padding" - android:background="@drawable/search_bg" - android:gravity="center_vertical" - android:visibility="gone" - > - <EditText - android:id="@+id/search_view" - android:layout_width="match_parent" - android:layout_height="@dimen/search_box_icon_size" - android:layout_weight="1" - android:layout_marginLeft="@dimen/search_box_text_left_margin" - android:textSize="@dimen/search_text_size" - android:fontFamily="@string/search_font_family" - android:textColor="@color/searchbox_text_color" - android:textColorHint="@color/searchbox_hint_text_color" - android:inputType="textFilter"/> - <ImageView - android:id="@+id/search_close_button" - android:layout_height="@dimen/search_box_icon_size" - android:layout_width="@dimen/search_box_icon_size" - android:padding="6dp" - android:src="@drawable/ic_close_dk" - android:clickable="true" - android:background="?android:attr/selectableItemBackground" - android:contentDescription="@string/description_clear_search" - android:visibility="gone" /> - <ImageView - android:id="@+id/voice_search_button" - android:layout_height="@dimen/search_box_icon_size" - android:layout_width="@dimen/search_box_icon_size" - android:padding="@dimen/search_box_icon_padding" - android:src="@drawable/ic_voice_search" - android:clickable="true" - android:contentDescription="@string/description_start_voice_search" - android:background="?android:attr/selectableItemBackground" /> - </LinearLayout> <com.android.dialer.list.RemoveView android:layout_width="match_parent" android:layout_height="56dp" diff --git a/res/layout/search_edittext.xml b/res/layout/search_edittext.xml new file mode 100644 index 000000000..236d2bf93 --- /dev/null +++ b/res/layout/search_edittext.xml @@ -0,0 +1,48 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:id="@+id/search_view_container" + android:orientation="horizontal" + android:layout_marginTop="@dimen/search_top_margin" + android:layout_marginBottom="@dimen/search_bottom_margin" + android:layout_marginLeft="@dimen/search_margin_horizontal" + android:layout_marginRight="@dimen/search_margin_horizontal" + android:paddingLeft="@dimen/search_box_left_padding" + android:paddingRight="@dimen/search_box_right_padding" + android:background="@drawable/search_bg" + android:gravity="center_vertical" + > + <EditText + android:id="@+id/search_view" + android:layout_width="0dp" + android:layout_height="@dimen/search_box_icon_size" + android:layout_weight="1" + android:layout_marginLeft="@dimen/search_box_text_left_margin" + android:textSize="@dimen/search_text_size" + android:fontFamily="@string/search_font_family" + android:textColor="@color/searchbox_text_color" + android:textColorHint="@color/searchbox_hint_text_color" + android:hint="@string/dialer_hint_find_contact" + android:inputType="textFilter"/> + <ImageView + android:id="@+id/search_close_button" + android:layout_height="@dimen/search_box_icon_size" + android:layout_width="@dimen/search_box_icon_size" + android:padding="6dp" + android:src="@drawable/ic_close_dk" + android:clickable="true" + android:background="?android:attr/selectableItemBackground" + android:contentDescription="@string/description_clear_search" + android:visibility="gone" /> + <ImageView + android:id="@+id/voice_search_button" + android:layout_height="@dimen/search_box_icon_size" + android:layout_width="@dimen/search_box_icon_size" + android:padding="@dimen/search_box_icon_padding" + android:src="@drawable/ic_voice_search" + android:clickable="true" + android:contentDescription="@string/description_start_voice_search" + android:background="?android:attr/selectableItemBackground" /> +</LinearLayout>
\ No newline at end of file diff --git a/res/menu/dialtacts_options.xml b/res/menu/dialtacts_options.xml index a332030ff..17f4d9fe1 100644 --- a/res/menu/dialtacts_options.xml +++ b/res/menu/dialtacts_options.xml @@ -14,16 +14,11 @@ limitations under the License. --> <menu xmlns:android="http://schemas.android.com/apk/res/android"> - <item - android:id="@+id/menu_search" - android:title="@string/description_search_button" - android:showAsAction="always" - android:actionViewClass="android.widget.SearchView"/> + <item android:id="@+id/menu_history" android:icon="@drawable/ic_menu_history_lt" - android:title="@string/action_menu_call_history_description" - android:showAsAction="ifRoom"/> + android:title="@string/action_menu_call_history_description" /> <item android:id="@+id/menu_import_export" android:title="@string/menu_import_export" /> diff --git a/res/values/dimens.xml b/res/values/dimens.xml index 66b36a773..57fbe82a5 100644 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -113,11 +113,9 @@ <!-- Margin to the left and right of the search box. --> <dimen name="search_margin_horizontal">7dp</dimen> <!-- Margin above the search box. --> - <dimen name="search_top_margin">10dp</dimen> + <dimen name="search_top_margin">4dp</dimen> <!-- Margin below the search box. --> <dimen name="search_bottom_margin">4dp</dimen> - <!-- Height of the search box. --> - <dimen name="search_box_height">41dp</dimen> <!-- Search box text size --> <dimen name="search_text_size">13.24sp</dimen> <!-- Search box interior padding - left --> diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java index 2e0225a37..4e96e3e45 100644 --- a/src/com/android/dialer/DialtactsActivity.java +++ b/src/com/android/dialer/DialtactsActivity.java @@ -20,18 +20,17 @@ import android.animation.Animator; import android.animation.LayoutTransition; import android.animation.Animator.AnimatorListener; import android.animation.AnimatorListenerAdapter; +import android.app.ActionBar; import android.app.Activity; import android.app.Fragment; import android.app.FragmentManager; import android.app.FragmentTransaction; -import android.app.SearchManager; import android.content.ActivityNotFoundException; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.res.TypedArray; -import android.graphics.Outline; import android.net.Uri; import android.os.Bundle; import android.os.RemoteException; @@ -41,28 +40,23 @@ import android.provider.ContactsContract.Intents; import android.speech.RecognizerIntent; import android.support.v4.view.ViewPager; import android.telephony.TelephonyManager; +import android.text.Editable; import android.text.TextUtils; +import android.text.TextWatcher; import android.util.Log; -import android.view.Gravity; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; -import android.view.View.OnClickListener; -import android.view.View.OnLayoutChangeListener; -import android.view.ViewGroup.LayoutParams; -import android.view.ViewTreeObserver.OnGlobalLayoutListener; import android.view.animation.AccelerateInterpolator; import android.view.animation.DecelerateInterpolator; import android.view.animation.Interpolator; import android.view.inputmethod.InputMethodManager; import android.widget.AbsListView.OnScrollListener; -import android.widget.FrameLayout; -import android.widget.LinearLayout; +import android.widget.EditText; import android.widget.PopupMenu; import android.widget.RelativeLayout; import android.widget.SearchView; -import android.widget.SearchView.OnQueryTextListener; import android.widget.Toast; import com.android.contacts.common.CallUtil; @@ -82,7 +76,6 @@ import com.android.dialer.list.ListsFragment; import com.android.dialer.list.OnDragDropListener; import com.android.dialer.list.OnListFragmentScrolledListener; import com.android.dialer.list.SpeedDialFragment; -import com.android.dialer.list.PhoneFavoriteTileView; import com.android.dialer.list.PhoneFavoriteSquareTileView; import com.android.dialer.list.RegularSearchFragment; import com.android.dialer.list.RemoveView; @@ -195,7 +188,9 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O // This view points to the Framelayout that houses both the search view and remove view // containers. private View mSearchAndRemoveViewContainer; - private SearchView mSearchView; + private EditText mSearchView; + private View mSearchViewCloseButton; + private View mVoiceSearchButton; /** * View that contains the "Remove" dialog that shows up when the user long presses a contact. * If the user releases a contact when hovering on top of this, the contact is unfavorited and @@ -260,19 +255,19 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O /** * Listener used to send search queries to the phone search fragment. */ - private final OnQueryTextListener mPhoneSearchQueryTextListener = new OnQueryTextListener() { + private final TextWatcher mPhoneSearchQueryTextListener = new TextWatcher() { @Override - public boolean onQueryTextSubmit(String query) { - return false; + public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override - public boolean onQueryTextChange(String newText) { + public void onTextChanged(CharSequence s, int start, int before, int count) { + final String newText = s.toString(); if (newText.equals(mSearchQuery)) { // If the query hasn't changed (perhaps due to activity being destroyed // and restored, or user launching the same DIAL intent twice), then there is // no need to do anything here. - return true; + return; } mSearchQuery = newText; if (DEBUG) { @@ -283,7 +278,9 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O // Show search result with non-empty text. Show a bare list otherwise. if (TextUtils.isEmpty(newText) && getInSearchUi()) { exitSearchUi(); - return true; + mSearchViewCloseButton.setVisibility(View.GONE); + mVoiceSearchButton.setVisibility(View.VISIBLE); + return; } else if (!TextUtils.isEmpty(newText)) { final boolean sameSearchMode = (dialpadSearch && mInDialpadSearch) || (!dialpadSearch && mInRegularSearch); @@ -298,9 +295,15 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O } else if (mRegularSearchFragment != null) { mRegularSearchFragment.setQueryString(newText, false); } - return true; + mSearchViewCloseButton.setVisibility(View.VISIBLE); + mVoiceSearchButton.setVisibility(View.GONE); + return; } - return true; + return; + } + + @Override + public void afterTextChanged(Editable s) { } }; @@ -316,8 +319,17 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O setContentView(R.layout.dialtacts_activity); getWindow().setBackgroundDrawable(null); - getActionBar().setDisplayShowHomeEnabled(false); - getActionBar().setDisplayShowTitleEnabled(false); + final ActionBar actionBar = getActionBar(); + actionBar.setCustomView(R.layout.search_edittext); + actionBar.setDisplayShowCustomEnabled(true); + + final View customView = actionBar.getCustomView(); + + mSearchView = (EditText) customView.findViewById(R.id.search_view); + mSearchView.addTextChangedListener(mPhoneSearchQueryTextListener); + + mSearchViewCloseButton = customView.findViewById(R.id.search_close_button); + mSearchViewCloseButton.setOnClickListener(this); final TypedArray styledAttributes = getTheme().obtainStyledAttributes( new int[] { android.R.attr.actionBarSize }); @@ -368,6 +380,7 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O mInCallDialpadUp = false; } mFirstLaunch = false; + prepareVoiceSearchButton(); mDialerDatabaseHelper.startSmartDialUpdateThread(); } @@ -442,9 +455,9 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O break; case R.id.search_close_button: // Clear the search field - if (!TextUtils.isEmpty(mSearchView.getQuery())) { + if (!TextUtils.isEmpty(mSearchView.getText())) { mDialpadFragment.clearDialpad(); - mSearchView.setQuery("", false); + mSearchView.setText(null); } break; case R.id.voice_search_button: @@ -523,7 +536,7 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O RecognizerIntent.EXTRA_RESULTS); if (matches.size() > 0) { final String match = matches.get(0); - mSearchView.setQuery(match, false); + mSearchView.setText(match); } else { Log.e(TAG, "Voice search - nothing heard"); } @@ -578,7 +591,7 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O } private void hideDialpadAndSearchUi() { - mSearchView.setQuery("", false); + mSearchView.setText(null); hideDialpadFragment(false, true); } @@ -641,6 +654,17 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O } } + private void prepareVoiceSearchButton() { + mVoiceSearchButton = getActionBar().getCustomView().findViewById(R.id.voice_search_button); + final Intent voiceIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); + if (canIntentBeHandled(voiceIntent)) { + mVoiceSearchButton.setVisibility(View.VISIBLE); + mVoiceSearchButton.setOnClickListener(this); + } else { + mVoiceSearchButton.setVisibility(View.GONE); + } + } + @Override public boolean onCreateOptionsMenu(Menu menu) { if (DEBUG) { @@ -648,15 +672,9 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O } MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.dialtacts_options, menu); - final MenuItem searchItem = menu.findItem(R.id.menu_search); - mSearchView = (SearchView) searchItem.getActionView(); - SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); - mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); - mSearchView.setOnQueryTextListener(mPhoneSearchQueryTextListener); - mSearchView.setIconifiedByDefault(false); if (mPendingSearchViewQuery != null) { - mSearchView.setQuery(mPendingSearchViewQuery, false); + mSearchView.setText(mPendingSearchViewQuery); mPendingSearchViewQuery = null; } return super.onCreateOptionsMenu(menu); @@ -823,7 +841,7 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O if (mDialpadFragment != null && mDialpadFragment.isVisible()) { hideDialpadFragment(true, false); } else if (getInSearchUi()) { - mSearchView.setQuery(null, false); + mSearchView.setText(null); mDialpadFragment.clearDialpad(); } else { super.onBackPressed(); @@ -837,13 +855,8 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O } final String normalizedQuery = SmartDialNameMatcher.normalizeNumber(query, SmartDialNameMatcher.LATIN_SMART_DIAL_MAP); - if (mSearchView == null) { - if (!TextUtils.isEmpty(normalizedQuery)) { - mPendingSearchViewQuery = normalizedQuery; - } - return; - } - if (!TextUtils.equals(mSearchView.getQuery(), normalizedQuery)) { + + if (!TextUtils.equals(mSearchView.getText(), normalizedQuery)) { if (DEBUG) { Log.d(TAG, "onDialpadQueryChanged - new query: " + query); } @@ -853,9 +866,12 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O // that would bring the user back to the search fragment regardless of the // previous state of the application. Instead, just return here and let the // fragment manager correctly figure out whatever fragment was last displayed. + if (!TextUtils.isEmpty(normalizedQuery)) { + mPendingSearchViewQuery = normalizedQuery; + } return; } - mSearchView.setQuery(normalizedQuery, false); + mSearchView.setText(normalizedQuery); } } |