@@ -46,13 +46,16 @@ class SearchActivity : AppCompatActivity(), SearchRecyclerView.OnSearchResultCli
4646 private lateinit var searchTextWatcher: SearchTextWatcher
4747
4848 private var hasQuery: Boolean = false
49+ private lateinit var initialQuery: String
4950
5051 override fun onCreate (savedInstanceState : Bundle ? ) {
5152 super .onCreate(savedInstanceState)
5253 setContentView(R .layout.activity_search)
5354 enableLightNavigationBar(this )
5455 setupToolbar()
5556
57+ initialQuery = savedInstanceState?.getString(QUERY_KEY ) ? : " "
58+
5659 with (searchComponent(this )) {
5760 searchService = service()
5861 navigator = navigator()
@@ -72,10 +75,9 @@ class SearchActivity : AppCompatActivity(), SearchRecyclerView.OnSearchResultCli
7275 searchTextWatcher = SearchTextWatcher (querySubject)
7376 searchField.addTextChangedListener(searchTextWatcher)
7477
75- val searchSubscription = querySubject.distinctUntilChanged()
76- .debounce(QUERY_DEBOUNCE_TIMEOUT , TimeUnit .MILLISECONDS )
78+ val searchSubscription = querySubject.throttleLast(QUERY_DEBOUNCE_TIMEOUT , TimeUnit .MILLISECONDS )
7779 .doOnNext(::updateSearchActionIcon)
78- .startWith(getInitialQuery() )
80+ .startWith(initialQuery )
7981 .flatMap(searchService::find)
8082 .distinctUntilChanged()
8183 .subscribeOn(Schedulers .io())
@@ -94,11 +96,6 @@ class SearchActivity : AppCompatActivity(), SearchRecyclerView.OnSearchResultCli
9496 searchField.requestFocus()
9597 }
9698
97- private fun getInitialQuery (): String {
98- val text = searchField.text
99- return text?.toString() ? : EMPTY_QUERY
100- }
101-
10299 private fun updateSearchActionIcon (query : String ) {
103100 hasQuery = query.isNotEmpty()
104101 invalidateOptionsMenu()
@@ -123,9 +120,8 @@ class SearchActivity : AppCompatActivity(), SearchRecyclerView.OnSearchResultCli
123120 } else {
124121 emptyView.isInvisible = true
125122 searchRecyclerView.isVisible = true
126-
127- searchRecyclerView.updateWith(searchResult, this )
128123 }
124+ searchRecyclerView.updateWith(searchResult, this )
129125 }
130126
131127 private fun onSearchError () {
@@ -193,6 +189,11 @@ class SearchActivity : AppCompatActivity(), SearchRecyclerView.OnSearchResultCli
193189 }
194190 }
195191
192+ override fun onSaveInstanceState (outState : Bundle ? ) {
193+ outState?.putString(QUERY_KEY , searchField.text?.toString())
194+ super .onSaveInstanceState(outState)
195+ }
196+
196197 private fun onVoiceSearchClicked () {
197198 Intent (RecognizerIntent .ACTION_RECOGNIZE_SPEECH ).apply {
198199 putExtra(RecognizerIntent .EXTRA_MAX_RESULTS , 1 )
@@ -246,6 +247,6 @@ class SearchActivity : AppCompatActivity(), SearchRecyclerView.OnSearchResultCli
246247 private const val SPEECH_REQUEST_CODE = 100
247248 private const val QUERY_DEBOUNCE_TIMEOUT = 250L
248249 private const val MIN_QUERY_LENGTH = 2
249- private const val EMPTY_QUERY = " "
250+ private const val QUERY_KEY = " SearchActivity.query_key "
250251 }
251252}
0 commit comments