diff --git a/frontend/android/src/main/java/com/jakewharton/sdksearch/ui/MainActivity.kt b/frontend/android/src/main/java/com/jakewharton/sdksearch/ui/MainActivity.kt index 75039443..8b9487f0 100644 --- a/frontend/android/src/main/java/com/jakewharton/sdksearch/ui/MainActivity.kt +++ b/frontend/android/src/main/java/com/jakewharton/sdksearch/ui/MainActivity.kt @@ -15,6 +15,7 @@ import android.view.View import android.view.View.INVISIBLE import android.view.inputmethod.EditorInfo.IME_ACTION_GO import android.widget.EditText +import android.widget.TextView import com.jakewharton.rxbinding2.view.keys import com.jakewharton.rxbinding2.view.visibility import com.jakewharton.rxbinding2.widget.editorActionEvents @@ -28,6 +29,8 @@ import com.jakewharton.sdksearch.reference.ITEM_LIST_URL_PATHS import com.jakewharton.sdksearch.reference.PRODUCTION_DAC import com.jakewharton.sdksearch.reference.PRODUCTION_GIT_WEB import com.jakewharton.sdksearch.sync.ItemSynchronizer +import com.jakewharton.sdksearch.util.plusAssign +import com.jakewharton.sdksearch.util.visible import io.reactivex.Observable import io.reactivex.Observable.just import io.reactivex.Observable.merge @@ -79,6 +82,9 @@ class MainActivity : Activity() { setContentView(R.layout.main) + val noQuery = findViewById(R.id.noQuery) + val noResultsText = findViewById(R.id.noResultsText) + val noResults = findViewById(R.id.noResults) val recycler = findViewById(R.id.results) val layoutManager = LinearLayoutManager(this) recycler.layoutManager = layoutManager @@ -129,6 +135,9 @@ class MainActivity : Activity() { adapter.updateItems(it.query, it.data) it.diff.dispatchUpdatesTo(adapter) recycler.scrollToPosition(scrollPosition) + noQuery.visible = it.query.isBlank() + noResults.visible = !it.query.isBlank() && it.data.isEmpty() + noResultsText.text = getString(R.string.no_results, it.query) } val clear = findViewById(R.id.clear_query) @@ -194,15 +203,12 @@ class MainActivity : Activity() { @Suppress("NOTHING_TO_INLINE") // Needed for correct stacktraces. private inline fun Observable.crashingSubscribe(noinline onNext: (I) -> Unit) { - subscribe(onNext, { throw OnErrorNotImplementedException(it) }).addTo(disposables) + disposables += subscribe(onNext, { throw OnErrorNotImplementedException(it) }) } @Suppress("NOTHING_TO_INLINE") // Needed for correct stacktraces. private inline fun Observable.crashingSubscribe(onNext: Consumer) { - subscribe(onNext, Consumer { throw OnErrorNotImplementedException(it) }).addTo(disposables) + disposables += subscribe(onNext, Consumer { throw OnErrorNotImplementedException(it) }) } - private fun Disposable.addTo(compositeDisposable: CompositeDisposable) { - compositeDisposable.add(this) - } } diff --git a/frontend/android/src/main/java/com/jakewharton/sdksearch/util/DisposableExtensions.kt b/frontend/android/src/main/java/com/jakewharton/sdksearch/util/DisposableExtensions.kt new file mode 100644 index 00000000..75b3b0ac --- /dev/null +++ b/frontend/android/src/main/java/com/jakewharton/sdksearch/util/DisposableExtensions.kt @@ -0,0 +1,8 @@ +package com.jakewharton.sdksearch.util + +import io.reactivex.disposables.CompositeDisposable +import io.reactivex.disposables.Disposable + +operator fun CompositeDisposable.plusAssign(disposable: Disposable) { + this.add(disposable) +} diff --git a/frontend/android/src/main/java/com/jakewharton/sdksearch/util/ViewExtensions.kt b/frontend/android/src/main/java/com/jakewharton/sdksearch/util/ViewExtensions.kt new file mode 100644 index 00000000..73b7c6c7 --- /dev/null +++ b/frontend/android/src/main/java/com/jakewharton/sdksearch/util/ViewExtensions.kt @@ -0,0 +1,7 @@ +package com.jakewharton.sdksearch.util + +import android.view.View + +inline var View.visible: Boolean + get() = visibility == View.VISIBLE + set(visible) { visibility = if (visible) View.VISIBLE else View.GONE } \ No newline at end of file diff --git a/frontend/android/src/main/res/drawable/ic_android_green_80dp.xml b/frontend/android/src/main/res/drawable/ic_android_green_80dp.xml new file mode 100644 index 00000000..995bb5c5 --- /dev/null +++ b/frontend/android/src/main/res/drawable/ic_android_green_80dp.xml @@ -0,0 +1,4 @@ + + + diff --git a/frontend/android/src/main/res/drawable/ic_block_grey_24dp.xml b/frontend/android/src/main/res/drawable/ic_block_grey_24dp.xml new file mode 100644 index 00000000..45ba506a --- /dev/null +++ b/frontend/android/src/main/res/drawable/ic_block_grey_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/frontend/android/src/main/res/drawable/ic_search_grey_24dp.xml b/frontend/android/src/main/res/drawable/ic_search_grey_24dp.xml new file mode 100644 index 00000000..0fb9caec --- /dev/null +++ b/frontend/android/src/main/res/drawable/ic_search_grey_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/frontend/android/src/main/res/drawable/no_query.xml b/frontend/android/src/main/res/drawable/no_query.xml new file mode 100644 index 00000000..e4e90c6a --- /dev/null +++ b/frontend/android/src/main/res/drawable/no_query.xml @@ -0,0 +1,16 @@ + + + + + + + + \ No newline at end of file diff --git a/frontend/android/src/main/res/drawable/no_results.xml b/frontend/android/src/main/res/drawable/no_results.xml new file mode 100644 index 00000000..a6953035 --- /dev/null +++ b/frontend/android/src/main/res/drawable/no_results.xml @@ -0,0 +1,16 @@ + + + + + + + + \ No newline at end of file diff --git a/frontend/android/src/main/res/layout/main.xml b/frontend/android/src/main/res/layout/main.xml index cd263355..7104b806 100644 --- a/frontend/android/src/main/res/layout/main.xml +++ b/frontend/android/src/main/res/layout/main.xml @@ -62,4 +62,18 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/toolbar" /> + + diff --git a/frontend/android/src/main/res/layout/main_no_query.xml b/frontend/android/src/main/res/layout/main_no_query.xml new file mode 100644 index 00000000..72f2aa30 --- /dev/null +++ b/frontend/android/src/main/res/layout/main_no_query.xml @@ -0,0 +1,30 @@ + + + + + + + + \ No newline at end of file diff --git a/frontend/android/src/main/res/layout/main_no_results.xml b/frontend/android/src/main/res/layout/main_no_results.xml new file mode 100644 index 00000000..37846019 --- /dev/null +++ b/frontend/android/src/main/res/layout/main_no_results.xml @@ -0,0 +1,32 @@ + + + + + + + + \ No newline at end of file diff --git a/frontend/android/src/main/res/values/strings.xml b/frontend/android/src/main/res/values/strings.xml index 19dd14a4..d4db334f 100644 --- a/frontend/android/src/main/res/values/strings.xml +++ b/frontend/android/src/main/res/values/strings.xml @@ -17,6 +17,8 @@ View source View %s source Unknown source location! + What are you looking for? + No classes matching \"%s\" Updating %d class list…