Now persist state through configuration changes in Search.
This CL adds logic to persist the search query and call
initiation type through configuration changes like device
rotation.
list of bugs:
https://docs.google.com/document/d/1GajzkAqXXRqbj_-qeYeDxIKr0fPsSZC3nXhRkIQg5tE/edit#heading=h.bopot1qivvxg
Bug: 65751247
Test: NSFT
PiperOrigin-RevId: 169146766
Change-Id: I7a68c01d5698c07a362ad621642a9138fd9a9aaa
diff --git a/java/com/android/dialer/searchfragment/list/NewSearchFragment.java b/java/com/android/dialer/searchfragment/list/NewSearchFragment.java
index 2527b87..036d53f 100644
--- a/java/com/android/dialer/searchfragment/list/NewSearchFragment.java
+++ b/java/com/android/dialer/searchfragment/list/NewSearchFragment.java
@@ -80,6 +80,9 @@
private static final int REMOTE_DIRECTORIES_LOADER_ID = 2;
private static final int REMOTE_CONTACTS_LOADER_ID = 3;
+ private static final String KEY_QUERY = "key_query";
+ private static final String KEY_CALL_INITIATION_TYPE = "key_call_initiation_type";
+
private EmptyContentView emptyContentView;
private RecyclerView recyclerView;
private SearchAdapter adapter;
@@ -99,7 +102,7 @@
@Nullable
@Override
public View onCreateView(
- LayoutInflater inflater, @Nullable ViewGroup parent, @Nullable Bundle bundle) {
+ LayoutInflater inflater, @Nullable ViewGroup parent, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_search, parent, false);
adapter = new SearchAdapter(getActivity(), new SearchCursorManager());
adapter.setCallInitiationType(callInitiationType);
@@ -119,12 +122,25 @@
initLoaders();
}
+ if (savedInstanceState != null) {
+ setQuery(
+ savedInstanceState.getString(KEY_QUERY),
+ CallInitiationType.Type.forNumber(savedInstanceState.getInt(KEY_CALL_INITIATION_TYPE)));
+ }
+
if (updatePositionRunnable != null) {
ViewUtil.doOnPreDraw(view, false, updatePositionRunnable);
}
return view;
}
+ @Override
+ public void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ outState.putInt(KEY_CALL_INITIATION_TYPE, callInitiationType.getNumber());
+ outState.putString(KEY_QUERY, query);
+ }
+
private void initLoaders() {
getLoaderManager().initLoader(CONTACTS_LOADER_ID, null, this);
loadRemoteDirectoriesCursor();
diff --git a/java/com/android/dialer/searchfragment/list/SearchAdapter.java b/java/com/android/dialer/searchfragment/list/SearchAdapter.java
index 61055a0..3bfdd98 100644
--- a/java/com/android/dialer/searchfragment/list/SearchAdapter.java
+++ b/java/com/android/dialer/searchfragment/list/SearchAdapter.java
@@ -111,8 +111,11 @@
}
public void setContactsCursor(SearchCursor cursor) {
- searchCursorManager.setContactsCursor(cursor);
- notifyDataSetChanged();
+ if (searchCursorManager.setContactsCursor(cursor)) {
+ // Since this is a new contacts cursor, we need to reapply the filter.
+ searchCursorManager.setQuery(query);
+ notifyDataSetChanged();
+ }
}
void clear() {