Skip to content

Commit 051404f

Browse files
committed
- Add progressbar while searching address
1 parent 6aa9ec1 commit 051404f

1 file changed

Lines changed: 44 additions & 13 deletions

File tree

app/src/main/java/com/android1500/gpssetter/MapsActivity.kt

Lines changed: 44 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.android1500.gpssetter
22

33
import android.app.Notification
4+
import android.app.ProgressDialog
45
import android.location.Address
56
import android.location.Geocoder
67
import android.os.Bundle
@@ -248,6 +249,8 @@ class MapsActivity : AppCompatActivity(), OnMapReadyCallback, GoogleMap.OnMapCli
248249
alertDialog = MaterialAlertDialogBuilder(this)
249250
val view = layoutInflater.inflate(R.layout.search_layout,null)
250251
val editText = view.findViewById<EditText>(R.id.search_edittxt)
252+
val progressBar = ProgressDialog(this)
253+
progressBar.setMessage("searching...")
251254
alertDialog.setTitle("Search")
252255
alertDialog.setView(view)
253256
alertDialog.setPositiveButton("Search") { _, _ ->
@@ -257,10 +260,30 @@ class MapsActivity : AppCompatActivity(), OnMapReadyCallback, GoogleMap.OnMapCli
257260
if (getInput.isNotEmpty()){
258261
getSearchAddress(getInput).let {
259262
it.collect { value ->
260-
val address = value as Address
261-
lat = address.latitude
262-
lon = address.longitude
263-
moveMapToNewLocation(true)
263+
when(value){
264+
is SearchProgress.Progress -> {
265+
progressBar.show()
266+
}
267+
is SearchProgress.Complete -> {
268+
progressBar.cancel()
269+
val address = value.address
270+
lat = address.latitude
271+
lon = address.longitude
272+
moveMapToNewLocation(true)
273+
}
274+
is SearchProgress.RegexMatch -> {
275+
lat = value.lat
276+
lon = value.lon
277+
progressBar.cancel()
278+
moveMapToNewLocation(true)
279+
}
280+
is SearchProgress.Fail -> {
281+
showToast(value.error)
282+
progressBar.cancel()
283+
}
284+
285+
}
286+
264287
}
265288
}
266289
}
@@ -421,27 +444,27 @@ class MapsActivity : AppCompatActivity(), OnMapReadyCallback, GoogleMap.OnMapCli
421444
}
422445

423446

424-
private suspend fun getSearchAddress(address: String) = callbackFlow<Any> {
447+
private suspend fun getSearchAddress(address: String) = callbackFlow<SearchProgress> {
425448
withContext(Dispatchers.IO){
449+
trySend(SearchProgress.Progress)
450+
426451
if (isRegexMatch(address)){
427452
val split = address.split(",")
428-
mLatLng = LatLng(split[0].toDouble(),split[1].toDouble())
453+
trySend(SearchProgress.RegexMatch(split[0].toDouble(),split[1].toDouble()))
429454
}
430-
val geocoder = Geocoder(this@MapsActivity)
455+
431456
try {
432-
val addresses = geocoder.getFromLocationName(address,5)
457+
val addresses = Geocoder(this@MapsActivity).getFromLocationName(address,5)
433458
if (address.isEmpty()){
434-
trySend("")
459+
trySend(SearchProgress.Fail(""))
435460
}
436461
addresses!![0]?.let {
437-
trySend(it)
462+
trySend(SearchProgress.Complete(it))
438463
}
439464

440465
}catch (io : IOException){
441-
io.stackTrace
466+
trySend(SearchProgress.Fail("No internet"))
442467
}
443-
444-
445468
}
446469

447470
awaitClose { this.cancel() }
@@ -459,6 +482,14 @@ class MapsActivity : AppCompatActivity(), OnMapReadyCallback, GoogleMap.OnMapCli
459482

460483
}
461484

485+
sealed class SearchProgress {
486+
object Progress : SearchProgress()
487+
data class Complete(val address: Address) : SearchProgress()
488+
data class Fail(val error: String) : SearchProgress()
489+
data class RegexMatch(val lat: Double, val lon: Double) : SearchProgress()
490+
491+
}
492+
462493

463494

464495

0 commit comments

Comments
 (0)