From 7f57007df30ebb9f32e7e7dd50eff95528426a6b Mon Sep 17 00:00:00 2001 From: liveHarshit Date: Fri, 7 Dec 2018 15:53:54 +0530 Subject: [PATCH] feat: Show no internet error in search activity (#283) Fixes #283 --- .../org/fossasia/openevent/general/di/Modules.kt | 2 +- .../openevent/general/search/SearchFragment.kt | 12 ++++++++++++ .../openevent/general/search/SearchViewModel.kt | 11 ++++++++++- app/src/main/res/layout/fragment_search.xml | 12 ++++++++++++ app/src/main/res/values/dimens.xml | 1 + app/src/main/res/values/strings.xml | 1 + 6 files changed, 37 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/fossasia/openevent/general/di/Modules.kt b/app/src/main/java/org/fossasia/openevent/general/di/Modules.kt index b8ab27f74..2dda1c3c4 100644 --- a/app/src/main/java/org/fossasia/openevent/general/di/Modules.kt +++ b/app/src/main/java/org/fossasia/openevent/general/di/Modules.kt @@ -96,7 +96,7 @@ val viewModelModule = applicationContext { viewModel { ProfileFragmentViewModel(get()) } viewModel { SignUpFragmentViewModel(get(), get()) } viewModel { EventDetailsViewModel(get()) } - viewModel { SearchViewModel(get(), get()) } + viewModel { SearchViewModel(get(), get(), get()) } viewModel { AttendeeViewModel(get(), get(), get(), get(), get(), get()) } viewModel { SearchLocationViewModel(get()) } viewModel { SearchTimeViewModel(get()) } diff --git a/app/src/main/java/org/fossasia/openevent/general/search/SearchFragment.kt b/app/src/main/java/org/fossasia/openevent/general/search/SearchFragment.kt index f791982c2..6c859aeeb 100644 --- a/app/src/main/java/org/fossasia/openevent/general/search/SearchFragment.kt +++ b/app/src/main/java/org/fossasia/openevent/general/search/SearchFragment.kt @@ -10,6 +10,7 @@ import android.support.v7.widget.SearchView import android.text.TextUtils import android.view.* import android.widget.Toast +import kotlinx.android.synthetic.main.fragment_search.* import kotlinx.android.synthetic.main.fragment_search.view.* import org.fossasia.openevent.general.R import org.fossasia.openevent.general.event.* @@ -83,6 +84,10 @@ class SearchFragment : Fragment() { it?.let { Utils.showProgressBar(rootView.progressBar, it) } }) + searchViewModel.showNoInternetError.observe(this, Observer { + it?.let { showNoInternetError(it) } + }) + rootView.timeTextView.setOnClickListener { val intent = Intent(activity, SearchTimeActivity::class.java) startActivity(intent) @@ -107,6 +112,10 @@ class SearchFragment : Fragment() { return rootView } + private fun showNoInternetError(show: Boolean) { + errorTextView.visibility = if (show) View.VISIBLE else View.GONE + } + override fun onOptionsItemSelected(item: MenuItem?): Boolean { when (item?.getItemId()) { R.id.search_item -> { @@ -144,6 +153,9 @@ class SearchFragment : Fragment() { rootView.fabSearch.setOnClickListener { queryListener.onQueryTextSubmit(searchView.query.toString()) } + rootView.errorTextView.setOnClickListener { + queryListener.onQueryTextSubmit(searchView.query.toString()) + } super.onPrepareOptionsMenu(menu) } diff --git a/app/src/main/java/org/fossasia/openevent/general/search/SearchViewModel.kt b/app/src/main/java/org/fossasia/openevent/general/search/SearchViewModel.kt index 6b806d73b..871fada17 100644 --- a/app/src/main/java/org/fossasia/openevent/general/search/SearchViewModel.kt +++ b/app/src/main/java/org/fossasia/openevent/general/search/SearchViewModel.kt @@ -6,12 +6,13 @@ import android.text.TextUtils import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.CompositeDisposable import io.reactivex.schedulers.Schedulers +import org.fossasia.openevent.general.data.Network import org.fossasia.openevent.general.data.Preference import org.fossasia.openevent.general.event.Event import org.fossasia.openevent.general.event.EventService import timber.log.Timber -class SearchViewModel(private val eventService: EventService, private val preference: Preference) : ViewModel() { +class SearchViewModel(private val eventService: EventService, private val preference: Preference, private val network: Network) : ViewModel() { private val compositeDisposable = CompositeDisposable() private val tokenKey = "LOCATION" @@ -21,12 +22,14 @@ class SearchViewModel(private val eventService: EventService, private val prefer val progress = MutableLiveData() val events = MutableLiveData>() val error = MutableLiveData() + val showNoInternetError = MutableLiveData() var searchEvent: String? = null val savedLocation by lazy { preference.getString(tokenKey) } val savedDate by lazy { preference.getString(tokenKeyDate) } val savedNextDate by lazy { preference.getString(tokenKeyNextDate) } fun loadEvents(location: String, time: String) { + if (!isConnected()) return preference.putString(tokenKey, location) val query: String = if (TextUtils.isEmpty(location)) "[{\"name\":\"name\",\"op\":\"ilike\",\"val\":\"%$searchEvent%\"}]" @@ -65,6 +68,12 @@ class SearchViewModel(private val eventService: EventService, private val prefer })) } + fun isConnected(): Boolean { + val isConnected = network.isNetworkConnected() + showNoInternetError.value = !isConnected + return isConnected + } + override fun onCleared() { super.onCleared() compositeDisposable.clear() diff --git a/app/src/main/res/layout/fragment_search.xml b/app/src/main/res/layout/fragment_search.xml index 4f1b426c0..ba9f7d7fb 100644 --- a/app/src/main/res/layout/fragment_search.xml +++ b/app/src/main/res/layout/fragment_search.xml @@ -36,6 +36,18 @@ android:layout_height="match_parent" android:orientation="vertical"> + + 10dp 16dp 32dp + 56dp 2dp diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b4b66874e..8ced23bf7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -33,6 +33,7 @@ Hmmm, we\'\re not getting\nany results. Our bad - try\nanother search Event details See maps + There was an error. Tap here to try again. Username