Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Error Handling for urlConnection #2902

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
494f766
added try catch
anandwana001 Dec 9, 2024
e00b968
Merge branch 'master' into anandwana001/2683/prevent-socket-timeout-e…
anandwana001 Dec 10, 2024
d41ab05
not throwing
anandwana001 Dec 12, 2024
ff4c85f
Merge branch 'master' into anandwana001/2683/prevent-socket-timeout-e…
anandwana001 Dec 16, 2024
96871f2
added failure handling
anandwana001 Dec 16, 2024
60d4787
nit fix
anandwana001 Dec 16, 2024
b70eb4a
Merge branch 'master' into anandwana001/2683/prevent-socket-timeout-e…
anandwana001 Dec 16, 2024
a16a172
nit fixes
anandwana001 Dec 17, 2024
e8555fe
Merge remote-tracking branch 'origin/anandwana001/2683/prevent-socket…
anandwana001 Dec 17, 2024
6b8fa5e
Merge branch 'master' into anandwana001/2683/prevent-socket-timeout-e…
anandwana001 Dec 17, 2024
a0fe855
Merge branch 'master' into anandwana001/2683/prevent-socket-timeout-e…
anandwana001 Dec 19, 2024
9530810
Merge branch 'master' into anandwana001/2683/prevent-socket-timeout-e…
shobhitagarwal1612 Jan 1, 2025
48890ae
Merge branch 'master' into anandwana001/2683/prevent-socket-timeout-e…
anandwana001 Jan 8, 2025
7bcb1a0
partial test added
anandwana001 Jan 8, 2025
4d1c6ad
Merge branch 'master' into anandwana001/2683/prevent-socket-timeout-e…
anandwana001 Jan 13, 2025
011d10f
Merge branch 'master' into anandwana001/2683/prevent-socket-timeout-e…
anandwana001 Feb 3, 2025
2d7e8eb
import fix
anandwana001 Feb 3, 2025
f88c972
Merge branch 'master' into anandwana001/2683/prevent-socket-timeout-e…
anandwana001 Feb 5, 2025
ea08f37
merge latest
anandwana001 Feb 5, 2025
027c3bd
few fixes
anandwana001 Feb 7, 2025
73902c2
Automatically added GitHub issue links to TODOs
anandwana001 Feb 7, 2025
6729e81
Merge branch 'master' into anandwana001/2683/prevent-socket-timeout-e…
anandwana001 Feb 7, 2025
1dabbe2
remove test
anandwana001 Feb 7, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@
* Downloads tiles in the specified bounds and stores them in the local filesystem. Emits the
* number of bytes processed and total expected bytes as the download progresses.
*/
suspend fun downloadTiles(bounds: Bounds): Flow<Pair<Int, Int>> = flow {
fun downloadTiles(bounds: Bounds): Flow<Pair<Int, Int>> = flow {

Check warning on line 88 in app/src/main/java/com/google/android/ground/repository/OfflineAreaRepository.kt

View check run for this annotation

Codecov / codecov/patch

app/src/main/java/com/google/android/ground/repository/OfflineAreaRepository.kt#L88

Added line #L88 was not covered by tests
val requests = mogClient.buildTilesRequests(bounds)
val totalBytes = requests.sumOf { it.totalBytes }
var bytesDownloaded = 0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import java.io.InputStream
import java.net.HttpURLConnection
import java.net.URL

const val READ_TIMEOUT_MS = 5 * 1000
private const val READ_TIMEOUT_MS = 5 * 1000

/**
* @constructor Creates a [UrlInputStream] by opening a connection to an actual URL, requesting the
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
Expand Down Expand Up @@ -68,8 +69,15 @@

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewModel.isDownloadProgressVisible.observe(viewLifecycleOwner) {
showDownloadProgressDialog(it)
viewLifecycleOwner.lifecycleScope.launch {
viewModel.isDownloadProgressVisible.observe(viewLifecycleOwner) {
showDownloadProgressDialog(it)
}
viewModel.isFailure.observe(viewLifecycleOwner) {
if (it) {
Toast.makeText(context, R.string.offline_area_download_error, Toast.LENGTH_LONG).show()

Check warning on line 78 in app/src/main/java/com/google/android/ground/ui/offlineareas/selector/OfflineAreaSelectorFragment.kt

View check run for this annotation

Codecov / codecov/patch

app/src/main/java/com/google/android/ground/ui/offlineareas/selector/OfflineAreaSelectorFragment.kt#L78

Added line #L78 was not covered by tests
}
}
}

lifecycleScope.launch {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,9 @@
import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.asSharedFlow
import kotlinx.coroutines.flow.catch
import kotlinx.coroutines.launch
import timber.log.Timber

private const val MIN_DOWNLOAD_ZOOM_LEVEL = 9
private const val MAX_AREA_DOWNLOAD_SIZE_MB = 50
Expand Down Expand Up @@ -78,6 +80,7 @@
val downloadProgress = MutableLiveData(0f)
val bottomText = MutableLiveData<String?>(null)
val downloadButtonEnabled = MutableLiveData(false)
val isFailure = MutableLiveData(false)

private val _navigate = MutableSharedFlow<UiState>(replay = 0)
val navigate = _navigate.asSharedFlow()
Expand All @@ -102,20 +105,31 @@
downloadProgress.value = 0f
downloadJob =
viewModelScope.launch(ioDispatcher) {
offlineAreaRepository.downloadTiles(viewport!!).collect { (bytesDownloaded, totalBytes) ->
val progressValue =
if (totalBytes > 0) {
(bytesDownloaded.toFloat() / totalBytes.toFloat()).coerceIn(0f, 1f)
} else {
0f
}
downloadProgress.postValue(progressValue)
}
offlineAreaRepository
.downloadTiles(viewport!!)

Check warning on line 109 in app/src/main/java/com/google/android/ground/ui/offlineareas/selector/OfflineAreaSelectorViewModel.kt

View check run for this annotation

Codecov / codecov/patch

app/src/main/java/com/google/android/ground/ui/offlineareas/selector/OfflineAreaSelectorViewModel.kt#L108-L109

Added lines #L108 - L109 were not covered by tests
.catch {
isFailure.postValue(true)
isDownloadProgressVisible.postValue(false)
Timber.d("Download Stopped by $it ")
}
.collect { (bytesDownloaded, totalBytes) ->
updateDownloadProgress(bytesDownloaded, totalBytes)
}

Check warning on line 117 in app/src/main/java/com/google/android/ground/ui/offlineareas/selector/OfflineAreaSelectorViewModel.kt

View check run for this annotation

Codecov / codecov/patch

app/src/main/java/com/google/android/ground/ui/offlineareas/selector/OfflineAreaSelectorViewModel.kt#L111-L117

Added lines #L111 - L117 were not covered by tests
isDownloadProgressVisible.postValue(false)
_navigate.emit(UiState.OfflineAreaBackToHomeScreen)
}
}

private fun updateDownloadProgress(bytesDownloaded: Int, totalBytes: Int) {
val progressValue =

Check warning on line 124 in app/src/main/java/com/google/android/ground/ui/offlineareas/selector/OfflineAreaSelectorViewModel.kt

View check run for this annotation

Codecov / codecov/patch

app/src/main/java/com/google/android/ground/ui/offlineareas/selector/OfflineAreaSelectorViewModel.kt#L124

Added line #L124 was not covered by tests
if (totalBytes > 0) {
(bytesDownloaded.toFloat() / totalBytes.toFloat()).coerceIn(0f, 1f)

Check warning on line 126 in app/src/main/java/com/google/android/ground/ui/offlineareas/selector/OfflineAreaSelectorViewModel.kt

View check run for this annotation

Codecov / codecov/patch

app/src/main/java/com/google/android/ground/ui/offlineareas/selector/OfflineAreaSelectorViewModel.kt#L126

Added line #L126 was not covered by tests
} else {
0f

Check warning on line 128 in app/src/main/java/com/google/android/ground/ui/offlineareas/selector/OfflineAreaSelectorViewModel.kt

View check run for this annotation

Codecov / codecov/patch

app/src/main/java/com/google/android/ground/ui/offlineareas/selector/OfflineAreaSelectorViewModel.kt#L128

Added line #L128 was not covered by tests
}
downloadProgress.postValue(progressValue)
}

Check warning on line 131 in app/src/main/java/com/google/android/ground/ui/offlineareas/selector/OfflineAreaSelectorViewModel.kt

View check run for this annotation

Codecov / codecov/patch

app/src/main/java/com/google/android/ground/ui/offlineareas/selector/OfflineAreaSelectorViewModel.kt#L130-L131

Added lines #L130 - L131 were not covered by tests

fun onCancelClick() {
viewModelScope.launch { _navigate.emit(UiState.Up) }
}
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values-es/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
<string name="settings">Configuración</string>
<string name="offline_area_viewer_title">Área descargada</string>
<string name="offline_area_viewer_remove_button">Eliminar del dispositivo</string>
<string name="offline_area_download_error">¡Error de descarga. Por favor inténtalo de nuevo</string>
<!-- Label of button used enter the offline area selector. -->
<string name="offline_area_selector_select">Seleccionar área</string>
<string name="no_basemaps_downloaded">No se ha descargado ningún mapa para su uso sin conexión</string>
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values-fr/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
<string name="settings">Paramètres</string>
<string name="offline_area_viewer_title">Zone téléchargée</string>
<string name="offline_area_viewer_remove_button">Supprimer de l&#8217;appareil</string>
<string name="offline_area_download_error">Échec du téléchargement. Veuillez réessayer</string>
<!-- Label of button used enter the offline area selector. -->
<string name="offline_area_selector_select">Sélectionnez une zone</string>
<string name="no_basemaps_downloaded">Aucune image n&#8217;a été téléchargée pour l&#8217;utilisation hors ligne. Appuyez sur « Sélectionner et télécharger » pour commencer.</string>
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values-pt/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
<string name="settings">Configurações</string>
<string name="offline_area_viewer_title">Área descarregada</string>
<string name="offline_area_viewer_remove_button">Remover do dispositivo</string>
<string name="offline_area_download_error">Falha no download! Por favor, tente novamente</string>
<!-- Label of button used enter the offline area selector. -->
<string name="offline_area_selector_select">Selecionar área</string>
<string name="no_basemaps_downloaded">Nenhuma imagem de mapa descarregada para uso offline</string>
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
<string name="settings">Settings</string>
<string name="offline_area_viewer_title">Downloaded area</string>
<string name="offline_area_viewer_remove_button">Remove from device</string>
<string name="offline_area_download_error">Download failed. Please try again</string>
<!-- Label of button used enter the offline area selector. -->
<string name="offline_area_selector_select">Select area</string>
<string name="no_basemaps_downloaded">No map imagery downloaded for offline use</string>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -125,4 +125,7 @@ class OfflineAreaSelectorFragmentTest : BaseHiltTest() {

viewModel.downloadProgress.removeObserver(observer)
}

// TODO: Write `test test failure case displays toast`
// Issue URL: https://github.com/google/ground-android/issues/3038
}