From 3dd18f9567ba42feee0566cf1b22632110251009 Mon Sep 17 00:00:00 2001 From: Christian Schneppe Date: Wed, 2 May 2018 21:56:35 +0200 Subject: persist search across device rotations --- .../de/pixart/messenger/ui/SearchActivity.java | 42 +++++++++++++++++++--- 1 file changed, 37 insertions(+), 5 deletions(-) (limited to 'src/main/java/de/pixart/messenger/ui/SearchActivity.java') diff --git a/src/main/java/de/pixart/messenger/ui/SearchActivity.java b/src/main/java/de/pixart/messenger/ui/SearchActivity.java index 7ce4ddc98..f7e9ccd68 100644 --- a/src/main/java/de/pixart/messenger/ui/SearchActivity.java +++ b/src/main/java/de/pixart/messenger/ui/SearchActivity.java @@ -60,6 +60,7 @@ import de.pixart.messenger.ui.util.Color; import de.pixart.messenger.ui.util.DateSeparator; import de.pixart.messenger.ui.util.Drawable; import de.pixart.messenger.ui.util.ListViewUtils; +import de.pixart.messenger.ui.util.PendingItem; import de.pixart.messenger.ui.util.ShareUtil; import de.pixart.messenger.utils.FtsUtils; import de.pixart.messenger.utils.MessageUtils; @@ -69,15 +70,22 @@ import static de.pixart.messenger.ui.util.SoftKeyboardUtils.showKeyboard; public class SearchActivity extends XmppActivity implements TextWatcher, OnSearchResultsAvailable, MessageAdapter.OnContactPictureClicked { + private static final String EXTRA_SEARCH_TERM = "search-term"; private ActivitySearchBinding binding; private MessageAdapter messageListAdapter; private final List messages = new ArrayList<>(); private WeakReference selectedMessageReference = new WeakReference<>(null); private final ChangeWatcher> currentSearch = new ChangeWatcher<>(); + private final PendingItem pendingSearchTerm = new PendingItem<>(); + private final PendingItem> pendingSearch = new PendingItem<>(); @Override - public void onCreate(final Bundle savedInstanceState) { - super.onCreate(savedInstanceState); + public void onCreate(final Bundle bundle) { + final String searchTerm = bundle == null ? null : bundle.getString(EXTRA_SEARCH_TERM); + if (searchTerm != null) { + pendingSearchTerm.push(searchTerm); + } + super.onCreate(bundle); this.binding = DataBindingUtil.setContentView(this, R.layout.activity_search); setSupportActionBar((Toolbar) this.binding.toolbar); configureActionBar(getSupportActionBar()); @@ -90,8 +98,20 @@ public class SearchActivity extends XmppActivity implements TextWatcher, OnSearc @Override public boolean onCreateOptionsMenu(final Menu menu) { getMenuInflater().inflate(R.menu.activity_search, menu); - MenuItem searchActionMenuItem = menu.findItem(R.id.action_search); - EditText searchField = searchActionMenuItem.getActionView().findViewById(R.id.search_field); + final MenuItem searchActionMenuItem = menu.findItem(R.id.action_search); + final EditText searchField = searchActionMenuItem.getActionView().findViewById(R.id.search_field); + final String term = pendingSearchTerm.pop(); + if (term != null) { + searchField.append(term); + List searchTerm = FtsUtils.parse(term); + if (xmppConnectionService != null) { + if (currentSearch.watch(searchTerm)) { + xmppConnectionService.search(searchTerm, this); + } + } else { + pendingSearch.push(searchTerm); + } + } searchField.addTextChangedListener(this); searchField.setHint(R.string.search_messages); searchField.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_AUTO_COMPLETE); @@ -150,6 +170,15 @@ public class SearchActivity extends XmppActivity implements TextWatcher, OnSearc return super.onContextItemSelected(item); } + @Override + public void onSaveInstanceState(Bundle bundle) { + List term = currentSearch.get(); + if (term != null && term.size() > 0) { + bundle.putString(EXTRA_SEARCH_TERM, FtsUtils.toUserEnteredString(term)); + } + super.onSaveInstanceState(bundle); + } + private void quote(Message message) { switchToConversationAndQuote(wrap(message.getConversation()), MessageUtils.prepareQuote(message)); } @@ -173,7 +202,10 @@ public class SearchActivity extends XmppActivity implements TextWatcher, OnSearc @Override void onBackendConnected() { - + final List searchTerm = pendingSearch.pop(); + if (searchTerm != null && currentSearch.watch(searchTerm)) { + xmppConnectionService.search(searchTerm, this); + } } private void changeBackground(boolean hasSearch, boolean hasResults) { -- cgit v1.2.3