11package com.android1500.gpssetter
22
33import android.app.Notification
4+ import android.app.ProgressDialog
45import android.location.Address
56import android.location.Geocoder
67import 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