Better error handling
This commit is contained in:
@@ -1,16 +1,13 @@
|
||||
package net.buzzert.kordophonedroid
|
||||
|
||||
import android.app.Application
|
||||
import androidx.hilt.navigation.compose.hiltViewModel
|
||||
import dagger.hilt.android.HiltAndroidApp
|
||||
import net.buzzert.kordophonedroid.data.AppContainer
|
||||
import net.buzzert.kordophonedroid.data.AppContainerImpl
|
||||
|
||||
@HiltAndroidApp
|
||||
class KordophoneApplication : Application() {
|
||||
lateinit var container: AppContainer
|
||||
|
||||
override fun onCreate() {
|
||||
super.onCreate()
|
||||
container = AppContainerImpl()
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,6 @@ import android.os.Bundle
|
||||
import androidx.activity.ComponentActivity
|
||||
import androidx.activity.compose.setContent
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import net.buzzert.kordophonedroid.data.AppContainerImpl
|
||||
import net.buzzert.kordophonedroid.ui.KordophoneApp
|
||||
|
||||
@AndroidEntryPoint
|
||||
@@ -12,9 +11,8 @@ class MainActivity : ComponentActivity() {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
val container = (application as KordophoneApplication).container
|
||||
setContent {
|
||||
KordophoneApp(appContainer = container)
|
||||
KordophoneApp()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,18 +1,15 @@
|
||||
package net.buzzert.kordophonedroid.data
|
||||
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.ViewModelStore
|
||||
import androidx.lifecycle.ViewModelStoreOwner
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import net.buzzert.kordophone.backend.server.ChatRepository
|
||||
import javax.inject.Inject
|
||||
|
||||
interface AppContainer: ViewModelStoreOwner {
|
||||
@HiltViewModel
|
||||
class AppContainer @Inject constructor(
|
||||
val repository: ChatRepository
|
||||
}
|
||||
|
||||
class AppContainerImpl() : AppContainer {
|
||||
override val repository: ChatRepository
|
||||
get() = TODO("Not yet implemented")
|
||||
|
||||
override val viewModelStore: ViewModelStore
|
||||
get() = TODO("Not yet implemented")
|
||||
}
|
||||
) : ViewModel() {
|
||||
|
||||
}
|
||||
@@ -1,11 +1,20 @@
|
||||
package net.buzzert.kordophonedroid.ui
|
||||
|
||||
import androidx.compose.material.AlertDialog
|
||||
import androidx.compose.material.Button
|
||||
import androidx.compose.material.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.hilt.navigation.compose.hiltViewModel
|
||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||
import androidx.navigation.compose.NavHost
|
||||
import androidx.navigation.compose.composable
|
||||
import androidx.navigation.compose.rememberNavController
|
||||
import kotlinx.coroutines.flow.collectLatest
|
||||
import net.buzzert.kordophone.backend.server.ChatRepository
|
||||
|
||||
import net.buzzert.kordophonedroid.data.AppContainer
|
||||
import net.buzzert.kordophonedroid.ui.theme.KordophoneTheme
|
||||
@@ -19,12 +28,35 @@ sealed class Destination(val route: String) {
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun ErrorDialog(title: String, body: String, onDismiss: () -> Unit) {
|
||||
AlertDialog(
|
||||
onDismissRequest = { onDismiss() },
|
||||
title = { Text(title) },
|
||||
text = { Text(body) },
|
||||
confirmButton = {
|
||||
Button(onClick = { onDismiss() }) {
|
||||
Text("OK")
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun KordophoneApp(
|
||||
appContainer: AppContainer,
|
||||
appContainer: AppContainer = hiltViewModel(),
|
||||
) {
|
||||
KordophoneTheme {
|
||||
val navController = rememberNavController()
|
||||
val errorVisible = remember { mutableStateOf<ChatRepository.Error?>(null) }
|
||||
val error = appContainer.repository.errorEncounteredChannel.collectAsStateWithLifecycle(
|
||||
initialValue = null
|
||||
)
|
||||
|
||||
LaunchedEffect(key1 = error.value) {
|
||||
errorVisible.value = error.value
|
||||
}
|
||||
|
||||
NavHost(
|
||||
navController = navController,
|
||||
startDestination = Destination.ConversationList.route,
|
||||
@@ -42,5 +74,11 @@ fun KordophoneApp(
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
errorVisible.value?.let {
|
||||
ErrorDialog(title = it.title, body = it.description) {
|
||||
errorVisible.value = null
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user