diff --git a/app/src/fdroid/java/org/fossasia/openevent/general/search/location/LocationServiceImpl.kt b/app/src/fdroid/java/org/fossasia/openevent/general/search/location/LocationServiceImpl.kt index 05914e8d17..1f9f6f8252 100644 --- a/app/src/fdroid/java/org/fossasia/openevent/general/search/location/LocationServiceImpl.kt +++ b/app/src/fdroid/java/org/fossasia/openevent/general/search/location/LocationServiceImpl.kt @@ -8,10 +8,16 @@ import android.location.LocationListener import android.location.LocationManager import android.os.Bundle import io.reactivex.Single +import org.fossasia.openevent.general.R +import org.fossasia.openevent.general.data.Resource +import org.fossasia.openevent.general.utils.nullToEmpty import java.lang.IllegalArgumentException import java.util.Locale -class LocationServiceImpl(private val context: Context) : LocationService { +class LocationServiceImpl( + private val context: Context, + private val resource: Resource +) : LocationService { @SuppressLint("MissingPermission") override fun getAdministrativeArea(): Single { @@ -30,7 +36,8 @@ class LocationServiceImpl(private val context: Context) : LocationService { } val addresses = geoCoder.getFromLocation(location.latitude, location.longitude, 1) try { - val adminArea = addresses[0].adminArea + val adminArea = if (addresses.isNotEmpty()) addresses[0].adminArea + else resource.getString(R.string.no_location).nullToEmpty() emitter.onSuccess(adminArea) } catch (e: IllegalArgumentException) { emitter.onError(e) 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 3436123ac7..5cd23c3f4c 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 @@ -132,7 +132,7 @@ val commonModule = module { single { Network() } single { Resource() } factory { MutableConnectionLiveData() } - factory { LocationServiceImpl(androidContext()) } + factory { LocationServiceImpl(androidContext(), get()) } } val apiModule = module { @@ -246,7 +246,7 @@ val viewModelModule = module { viewModel { SearchViewModel(get(), get()) } viewModel { SearchResultsViewModel(get(), get(), get(), get(), get(), get()) } viewModel { AttendeeViewModel(get(), get(), get(), get(), get(), get(), get(), get()) } - viewModel { SearchLocationViewModel(get(), get()) } + viewModel { SearchLocationViewModel(get(), get(), get()) } viewModel { SearchTimeViewModel(get()) } viewModel { SearchTypeViewModel(get(), get(), get()) } viewModel { TicketsViewModel(get(), get(), get(), get(), get(), get()) } diff --git a/app/src/main/java/org/fossasia/openevent/general/event/EventsViewModel.kt b/app/src/main/java/org/fossasia/openevent/general/event/EventsViewModel.kt index b59aecf63b..e7f2b7a3f5 100644 --- a/app/src/main/java/org/fossasia/openevent/general/event/EventsViewModel.kt +++ b/app/src/main/java/org/fossasia/openevent/general/event/EventsViewModel.kt @@ -53,7 +53,12 @@ class EventsViewModel( } fun loadLocationEvents() { - if (mutableSavedLocation.value == null) return + val location = mutableSavedLocation.value + if (location == null || location == resource.getString(R.string.enter_location) || + location == resource.getString(R.string.no_location)) { + mutableProgress.value = false + return + } sourceFactory = EventsDataSourceFactory( compositeDisposable, diff --git a/app/src/main/java/org/fossasia/openevent/general/search/location/SearchLocationViewModel.kt b/app/src/main/java/org/fossasia/openevent/general/search/location/SearchLocationViewModel.kt index 4bf4092551..d0c6c4441c 100644 --- a/app/src/main/java/org/fossasia/openevent/general/search/location/SearchLocationViewModel.kt +++ b/app/src/main/java/org/fossasia/openevent/general/search/location/SearchLocationViewModel.kt @@ -12,7 +12,9 @@ import org.fossasia.openevent.general.BuildConfig import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.CompositeDisposable import io.reactivex.schedulers.Schedulers +import org.fossasia.openevent.general.R import org.fossasia.openevent.general.data.Preference +import org.fossasia.openevent.general.data.Resource import org.fossasia.openevent.general.event.EventService import org.fossasia.openevent.general.event.location.EventLocation import org.jetbrains.anko.doAsync @@ -28,7 +30,8 @@ const val SEARCH_INTERVAL = 250L class SearchLocationViewModel( private val eventService: EventService, - private val preference: Preference + private val preference: Preference, + private val resource: Resource ) : ViewModel() { private val compositeDisposable = CompositeDisposable() @@ -44,6 +47,8 @@ class SearchLocationViewModel( fun saveSearch(query: String) { preference.putString(SAVED_LOCATION, query) + if (query == resource.getString(R.string.no_location)) return + if (savedLocationList.size == SAVED_LOCATION_LIST_SIZE) savedLocationList.removeAt(SAVED_LOCATION_LIST_SIZE - 1) val index = savedLocationList.indexOf(query) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 24607548e3..010228145e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -525,5 +525,6 @@ Speaking Experience LinkedIn Order Now + No Location diff --git a/app/src/playStore/java/org/fossasia/openevent/general/search/location/LocationServiceImpl.kt b/app/src/playStore/java/org/fossasia/openevent/general/search/location/LocationServiceImpl.kt index 97f87e3d63..e444f2575b 100644 --- a/app/src/playStore/java/org/fossasia/openevent/general/search/location/LocationServiceImpl.kt +++ b/app/src/playStore/java/org/fossasia/openevent/general/search/location/LocationServiceImpl.kt @@ -8,13 +8,20 @@ import com.google.android.gms.location.LocationRequest import com.google.android.gms.location.LocationResult import com.google.android.gms.location.LocationServices import io.reactivex.Single +import org.fossasia.openevent.general.R +import org.fossasia.openevent.general.data.Resource import org.fossasia.openevent.general.location.LocationPermissionException import org.fossasia.openevent.general.location.NoLocationSourceException +import org.fossasia.openevent.general.utils.nullToEmpty import timber.log.Timber import java.io.IOException +import java.lang.Exception import java.util.Locale -class LocationServiceImpl(private val context: Context) : LocationService { +class LocationServiceImpl( + private val context: Context, + private val resource: Resource +) : LocationService { override fun getAdministrativeArea(): Single { val locationManager = context.getSystemService(Context.LOCATION_SERVICE) @@ -44,8 +51,9 @@ class LocationServiceImpl(private val context: Context) : LocationService { try { val adminArea = locationResult.getAdminArea() emitter.onSuccess(adminArea) - } catch (e: IllegalArgumentException) { - emitter.onError(e) + } catch (e: Exception) { + Timber.e(e, "Error finding user current location") + emitter.onSuccess(resource.getString(R.string.no_location).nullToEmpty()) } } }, null)