Provide UrlLauncher through Ambient

Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
This commit is contained in:
Harsh Shandilya 2020-09-14 00:03:41 +05:30
parent 44393643c9
commit 0eb4f74e36
No known key found for this signature in database
GPG key ID: 366D7BBAD1031E80

View file

@ -14,6 +14,8 @@ import androidx.compose.material.Scaffold
import androidx.compose.material.TopAppBar import androidx.compose.material.TopAppBar
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.MutableState import androidx.compose.runtime.MutableState
import androidx.compose.runtime.Providers
import androidx.compose.runtime.ambientOf
import androidx.compose.runtime.collectAsState import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
@ -33,16 +35,21 @@ import dev.msfjarvis.todo.data.model.TodoItem
import dev.msfjarvis.todo.data.source.TodoDatabase import dev.msfjarvis.todo.data.source.TodoDatabase
import dev.msfjarvis.todo.ui.TodoRowItem import dev.msfjarvis.todo.ui.TodoRowItem
import dev.msfjarvis.todo.ui.TodoTheme import dev.msfjarvis.todo.ui.TodoTheme
import dev.msfjarvis.todo.urllauncher.UrlLauncher
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import javax.inject.Inject import javax.inject.Inject
val UrlLauncherAmbient = ambientOf<UrlLauncher> { error("Needs to be provided") }
@AndroidEntryPoint @AndroidEntryPoint
class MainActivity : AppCompatActivity() { class MainActivity : AppCompatActivity() {
@Inject lateinit var database: TodoDatabase @Inject lateinit var database: TodoDatabase
@Inject lateinit var urlLauncher: UrlLauncher
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContent { setContent {
Providers(UrlLauncherAmbient provides urlLauncher) {
TodoTheme { TodoTheme {
val coroutineScope = rememberCoroutineScope() val coroutineScope = rememberCoroutineScope()
val itemsDao = database.todoItemsDao() val itemsDao = database.todoItemsDao()
@ -55,6 +62,7 @@ class MainActivity : AppCompatActivity() {
} }
} }
} }
}
} }
@Composable @Composable
@ -64,6 +72,7 @@ fun TodoApp(
onDelete: (item: TodoItem) -> Unit, onDelete: (item: TodoItem) -> Unit,
) { ) {
val showingDialog = remember { mutableStateOf(false) } val showingDialog = remember { mutableStateOf(false) }
val urlLauncher = UrlLauncherAmbient.current
if (showingDialog.value) { if (showingDialog.value) {
ItemAddDialog( ItemAddDialog(
@ -94,7 +103,7 @@ fun TodoApp(
) { todoItem -> ) { todoItem ->
TodoRowItem( TodoRowItem(
item = todoItem, item = todoItem,
onClick = { }, onClick = { urlLauncher.launch(todoItem.title) },
onDelete = { onDelete.invoke(todoItem) }, onDelete = { onDelete.invoke(todoItem) },
) )
} }