diff --git a/app/src/main/kotlin/app/grapheneos/info/ui/releases/ReleasesViewModel.kt b/app/src/main/kotlin/app/grapheneos/info/ui/releases/ReleasesViewModel.kt
index 7051985..6a3af0e 100644
--- a/app/src/main/kotlin/app/grapheneos/info/ui/releases/ReleasesViewModel.kt
+++ b/app/src/main/kotlin/app/grapheneos/info/ui/releases/ReleasesViewModel.kt
@@ -16,6 +16,7 @@ import org.grapheneos.tls.ModernTLSSocketFactory
import java.io.IOException
import java.net.SocketTimeoutException
import java.net.URL
+import java.net.UnknownHostException
import java.net.UnknownServiceException
import javax.net.ssl.HttpsURLConnection
@@ -60,38 +61,49 @@ class ReleasesViewModel(
try {
connection.useCaches = useCaches
-
connection.connect()
val responseText = String(connection.inputStream.readBytes())
- var newEntries = "(.*?)".toRegex().findAll(responseText).map { it.groups[1]!!.value }.map { entry ->
- Pair("(.*?)".toRegex().find(entry)?.groups?.get(1)?.value ?: entry.hashCode().toString(), entry)
- }.toMap()
+ var newEntries = "(.*?)".toRegex()
+ .findAll(responseText)
+ .map { it.groups[1]!!.value }
+ .map { entry ->
+ Pair(
+ "(.*?)".toRegex()
+ .find(entry)?.groups?.get(1)?.value
+ ?: entry.hashCode().toString(),
+ entry
+ )
+ }
+ .toMap()
- var currentOsChangelogIndex = newEntries.toSortedMap().toList().asReversed().indexOfFirst { entry ->
- val title = "
(.*?)".toRegex()
- .find(entry.second)?.groups?.get(1)?.value
+ var currentOsChangelogIndex =
+ newEntries.toSortedMap().toList().asReversed().indexOfFirst { entry ->
+ val title = "(.*?)".toRegex()
+ .find(entry.second)?.groups?.get(1)?.value
- title == android.os.Build.VERSION.INCREMENTAL
- }
+ title == android.os.Build.VERSION.INCREMENTAL
+ }
if (currentOsChangelogIndex == -1) {
currentOsChangelogIndex = 0
}
- newEntries = newEntries.toSortedMap().toList().asReversed().filterIndexed { index, _ ->
- index <= currentOsChangelogIndex + 3
- }.toMap()
+ newEntries = newEntries.toSortedMap().toList().asReversed()
+ .filterIndexed { index, _ ->
+ index <= currentOsChangelogIndex + 3
+ }
+ .toMap()
// Only update if there are changes to the number of changelogs
if ((newEntries.count() - uiState.value.entries.size) != 0) {
withContext(Dispatchers.Main) {
- _uiState.value.entries.filterKeys {
- !newEntries.keys.contains(it)
- }.forEach {
- _uiState.value.entries.remove(it.key)
- }
+ _uiState.value.entries
+ .filterKeys { !newEntries.keys.contains(it) }
+ .forEach {
+ _uiState.value.entries.remove(it.key)
+ }
_uiState.value.entries.putAll(newEntries)
}
}
@@ -101,35 +113,47 @@ class ReleasesViewModel(
scrollChangelogLazyListTo(currentOsChangelogIndex)
}
} catch (e: SocketTimeoutException) {
- val errorMessage =
- application.getString(R.string.update_changelog_socket_timeout_exception_snackbar_message)
+ val errorMessage = application.getString(
+ R.string.update_changelog_socket_timeout_exception_snackbar_message
+ )
Log.e(TAG, errorMessage, e)
viewModelScope.launch {
- showSnackbarError("$errorMessage: $e")
+ showSnackbarError(errorMessage)
}
} catch (e: IOException) {
val errorMessage =
- application.getString(R.string.update_changelog_io_exception_snackbar_message)
+ if (e is UnknownHostException || e.cause is UnknownHostException) {
+ application.getString(
+ R.string.update_changelog_no_internet_connection_snackbar_message
+ )
+ } else {
+ application.getString(
+ R.string.update_changelog_io_exception_snackbar_message
+ )
+ }
+
Log.e(TAG, errorMessage, e)
viewModelScope.launch {
- showSnackbarError("$errorMessage: $e")
+ showSnackbarError(errorMessage)
}
} catch (e: UnknownServiceException) {
- val errorMessage =
- application.getString(R.string.update_changelog_unknown_service_exception_snackbar_message)
+ val errorMessage = application.getString(
+ R.string.update_changelog_unknown_service_exception_snackbar_message
+ )
Log.e(TAG, errorMessage, e)
viewModelScope.launch {
- showSnackbarError("$errorMessage: $e")
+ showSnackbarError(errorMessage)
}
} finally {
connection.disconnect()
}
} catch (e: IOException) {
- val errorMessage =
- application.getString(R.string.update_changelog_failed_to_create_httpsurlconnection_snackbar_message)
+ val errorMessage = application.getString(
+ R.string.update_changelog_failed_to_create_httpsurlconnection_snackbar_message
+ )
Log.e(TAG, errorMessage, e)
viewModelScope.launch {
- showSnackbarError("$errorMessage: $e")
+ showSnackbarError(errorMessage)
}
} finally {
onFinishedUpdating()
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index fb4e569..3fdcad9 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -139,4 +139,8 @@
Unable to open link. Make sure a browser is installed and enabled on your device.
Info about the releases
See all release notes
+
+ Internet connection not found
+
+