From e9f94c74ff76f9673d744ddc357b66def1f37f14 Mon Sep 17 00:00:00 2001 From: wangqi Date: Fri, 10 Nov 2017 11:51:50 -0800 Subject: Fix bug that "+" is dropped when performing actions in smart dial search. This is caused by normalizing numbers from dialpad search into search box, while "add new contacts" and "send sms" etc. wouldn't work properly without full number. This change also fix "send sms" in old search fragment. This change includes upstream change from: https://android-review.googlesource.com/#/c/platform/packages/apps/Dialer/+/530377/ Change address format when sending message from smart dial In Android O, send search key number as address to message app. In Android N, send real input number as address to message app. Fixed the issue by reverting to Android N implementation. Affected Area: Send SMS operation from Dialer smart dial search result list. Bug: 68962106 Test: manual PiperOrigin-RevId: 175317850 Change-Id: I96dd576144f93f7502977bfdb4b9e9d9c8f73526 --- .../dialer/searchfragment/list/NewSearchFragment.java | 11 +++++++++-- .../android/dialer/searchfragment/list/SearchAdapter.java | 12 ++++++++++-- 2 files changed, 19 insertions(+), 4 deletions(-) (limited to 'java/com/android/dialer/searchfragment') diff --git a/java/com/android/dialer/searchfragment/list/NewSearchFragment.java b/java/com/android/dialer/searchfragment/list/NewSearchFragment.java index e797a0390..8306d37a6 100644 --- a/java/com/android/dialer/searchfragment/list/NewSearchFragment.java +++ b/java/com/android/dialer/searchfragment/list/NewSearchFragment.java @@ -112,6 +112,9 @@ public final class NewSearchFragment extends Fragment private RecyclerView recyclerView; private SearchAdapter adapter; private String query; + // Raw query number from dialpad, which may contain special character such as "+". This is used + // for actions to add contact or send sms. + private String rawNumber; private CallInitiationType.Type callInitiationType = CallInitiationType.Type.UNKNOWN_INITIATION; private boolean remoteDirectoriesDisabledForTesting; @@ -138,7 +141,7 @@ public final class NewSearchFragment extends Fragment LayoutInflater inflater, @Nullable ViewGroup parent, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_search, parent, false); adapter = new SearchAdapter(getContext(), new SearchCursorManager(), this); - adapter.setQuery(query); + adapter.setQuery(query, rawNumber); adapter.setSearchActions(getActions()); adapter.setZeroSuggestVisible(getArguments().getBoolean(KEY_SHOW_ZERO_SUGGEST)); emptyContentView = view.findViewById(R.id.empty_view); @@ -248,11 +251,15 @@ public final class NewSearchFragment extends Fragment } } + public void setRawNumber(String rawNumber) { + this.rawNumber = rawNumber; + } + public void setQuery(String query, CallInitiationType.Type callInitiationType) { this.query = query; this.callInitiationType = callInitiationType; if (adapter != null) { - adapter.setQuery(query); + adapter.setQuery(query, rawNumber); adapter.setSearchActions(getActions()); adapter.setZeroSuggestVisible(isRegularSearch()); loadNearbyPlacesCursor(); diff --git a/java/com/android/dialer/searchfragment/list/SearchAdapter.java b/java/com/android/dialer/searchfragment/list/SearchAdapter.java index cc090ac47..4254baece 100644 --- a/java/com/android/dialer/searchfragment/list/SearchAdapter.java +++ b/java/com/android/dialer/searchfragment/list/SearchAdapter.java @@ -18,6 +18,7 @@ package com.android.dialer.searchfragment.list; import android.content.Context; import android.database.Cursor; +import android.support.annotation.Nullable; import android.support.annotation.VisibleForTesting; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView.ViewHolder; @@ -47,6 +48,9 @@ public final class SearchAdapter extends RecyclerView.Adapter { private boolean showZeroSuggest; private String query; + // Raw query number from dialpad, which may contain special character such as "+". This is used + // for actions to add contact or send sms. + private String rawNumber; private OnClickListener allowClickListener; private OnClickListener dismissClickListener; private RowClickListener rowClickListener; @@ -127,7 +131,10 @@ public final class SearchAdapter extends RecyclerView.Adapter { ((HeaderViewHolder) holder).setHeader(header); } else if (holder instanceof SearchActionViewHolder) { ((SearchActionViewHolder) holder) - .setAction(searchCursorManager.getSearchAction(position), position, query); + .setAction( + searchCursorManager.getSearchAction(position), + position, + TextUtils.isEmpty(rawNumber) ? query : rawNumber); } else if (holder instanceof LocationPermissionViewHolder) { // No-op } else { @@ -179,8 +186,9 @@ public final class SearchAdapter extends RecyclerView.Adapter { showZeroSuggest = visible; } - public void setQuery(String query) { + public void setQuery(String query, @Nullable String rawNumber) { this.query = query; + this.rawNumber = rawNumber; if (searchCursorManager.setQuery(query)) { notifyDataSetChanged(); } -- cgit v1.2.3