mirror of
https://github.com/msfjarvis/compose-lobsters
synced 2025-08-18 09:07:01 +05:30
all: remove now unused to-do app code
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
This commit is contained in:
parent
63f5bea155
commit
06549bad2c
9 changed files with 0 additions and 451 deletions
|
@ -1,81 +0,0 @@
|
||||||
package dev.msfjarvis.lobsters
|
|
||||||
|
|
||||||
import androidx.compose.runtime.getValue
|
|
||||||
import androidx.compose.runtime.mutableStateOf
|
|
||||||
import androidx.ui.test.assertIsDisplayed
|
|
||||||
import androidx.ui.test.createComposeRule
|
|
||||||
import androidx.ui.test.onNodeWithTag
|
|
||||||
import androidx.ui.test.onNodeWithText
|
|
||||||
import androidx.ui.test.performClick
|
|
||||||
import androidx.ui.test.performTextInput
|
|
||||||
import dev.msfjarvis.lobsters.data.model.TodoItem
|
|
||||||
import dev.msfjarvis.lobsters.ui.LobstersTheme
|
|
||||||
import org.junit.Ignore
|
|
||||||
import org.junit.Rule
|
|
||||||
import org.junit.Test
|
|
||||||
|
|
||||||
@Ignore("This shit is absolutely fucked")
|
|
||||||
class MainActivityTest {
|
|
||||||
|
|
||||||
@get:Rule
|
|
||||||
val composeTestRule = createComposeRule()
|
|
||||||
|
|
||||||
@Test
|
|
||||||
fun item_add_dialog_shows_on_fab_click() {
|
|
||||||
composeTestRule.apply {
|
|
||||||
setContent {
|
|
||||||
LobstersTheme {
|
|
||||||
val items = arrayListOf<TodoItem>()
|
|
||||||
TodoApp(
|
|
||||||
items,
|
|
||||||
items::add,
|
|
||||||
items::remove,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
onNodeWithTag("fab").performClick()
|
|
||||||
onNodeWithTag("item_dialog").assertIsDisplayed()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
fun item_addition_adds_new_entry() {
|
|
||||||
composeTestRule.apply {
|
|
||||||
setContent {
|
|
||||||
val items by mutableStateOf(arrayListOf<TodoItem>())
|
|
||||||
LobstersTheme {
|
|
||||||
TodoApp(
|
|
||||||
items,
|
|
||||||
items::add,
|
|
||||||
items::remove,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
onNodeWithText("Item 1").assertDoesNotExist()
|
|
||||||
onNodeWithTag("fab").performClick()
|
|
||||||
onNodeWithTag("item_name").performTextInput("Item 1")
|
|
||||||
onNodeWithTag("add_button").performClick()
|
|
||||||
onNodeWithText("Item 1").assertIsDisplayed()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
fun item_addition_with_empty_name_does_not_add_new_entry() {
|
|
||||||
composeTestRule.apply {
|
|
||||||
setContent {
|
|
||||||
val items by mutableStateOf(arrayListOf<TodoItem>())
|
|
||||||
LobstersTheme {
|
|
||||||
TodoApp(
|
|
||||||
items,
|
|
||||||
items::add,
|
|
||||||
items::remove,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
onNodeWithText("Item 1").assertDoesNotExist()
|
|
||||||
onNodeWithTag("fab").performClick()
|
|
||||||
onNodeWithTag("add_button").performClick()
|
|
||||||
onNodeWithText("Item 1").assertDoesNotExist()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -3,39 +3,19 @@ package dev.msfjarvis.lobsters
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.compose.foundation.Text
|
import androidx.compose.foundation.Text
|
||||||
import androidx.compose.foundation.layout.PaddingValues
|
|
||||||
import androidx.compose.foundation.layout.padding
|
|
||||||
import androidx.compose.foundation.lazy.LazyColumnFor
|
import androidx.compose.foundation.lazy.LazyColumnFor
|
||||||
import androidx.compose.material.AlertDialog
|
|
||||||
import androidx.compose.material.Button
|
|
||||||
import androidx.compose.material.FloatingActionButton
|
|
||||||
import androidx.compose.material.MaterialTheme
|
|
||||||
import androidx.compose.material.OutlinedTextField
|
|
||||||
import androidx.compose.material.Scaffold
|
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.Providers
|
import androidx.compose.runtime.Providers
|
||||||
import androidx.compose.runtime.ambientOf
|
import androidx.compose.runtime.ambientOf
|
||||||
import androidx.compose.runtime.getValue
|
|
||||||
import androidx.compose.runtime.mutableStateListOf
|
import androidx.compose.runtime.mutableStateListOf
|
||||||
import androidx.compose.runtime.mutableStateOf
|
|
||||||
import androidx.compose.runtime.remember
|
|
||||||
import androidx.compose.runtime.rememberCoroutineScope
|
import androidx.compose.runtime.rememberCoroutineScope
|
||||||
import androidx.compose.runtime.setValue
|
|
||||||
import androidx.compose.ui.Modifier
|
|
||||||
import androidx.compose.ui.platform.setContent
|
import androidx.compose.ui.platform.setContent
|
||||||
import androidx.compose.ui.platform.testTag
|
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.text.input.TextFieldValue
|
|
||||||
import androidx.compose.ui.unit.dp
|
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import dev.msfjarvis.lobsters.api.LobstersApi
|
import dev.msfjarvis.lobsters.api.LobstersApi
|
||||||
import dev.msfjarvis.lobsters.compose.utils.IconResource
|
|
||||||
import dev.msfjarvis.lobsters.data.model.TodoItem
|
|
||||||
import dev.msfjarvis.lobsters.data.source.TodoDatabase
|
|
||||||
import dev.msfjarvis.lobsters.model.LobstersPost
|
import dev.msfjarvis.lobsters.model.LobstersPost
|
||||||
import dev.msfjarvis.lobsters.ui.ListContent
|
|
||||||
import dev.msfjarvis.lobsters.ui.LobstersItem
|
import dev.msfjarvis.lobsters.ui.LobstersItem
|
||||||
import dev.msfjarvis.lobsters.ui.LobstersTheme
|
import dev.msfjarvis.lobsters.ui.LobstersTheme
|
||||||
import dev.msfjarvis.lobsters.urllauncher.UrlLauncher
|
import dev.msfjarvis.lobsters.urllauncher.UrlLauncher
|
||||||
|
@ -49,7 +29,6 @@ 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 urlLauncher: UrlLauncher
|
@Inject lateinit var urlLauncher: UrlLauncher
|
||||||
@Inject lateinit var apiClient: LobstersApi
|
@Inject lateinit var apiClient: LobstersApi
|
||||||
|
|
||||||
|
@ -77,15 +56,6 @@ class MainActivity : AppCompatActivity() {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
LobstersApp(posts)
|
LobstersApp(posts)
|
||||||
/*
|
|
||||||
val itemsDao = database.todoItemsDao()
|
|
||||||
val items by itemsDao.getAllItems().collectAsState(initial = emptyList())
|
|
||||||
TodoApp(
|
|
||||||
items,
|
|
||||||
{ item -> coroutineScope.launch { itemsDao.insert(item) } },
|
|
||||||
{ item -> coroutineScope.launch { itemsDao.delete(item) } },
|
|
||||||
)
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -109,98 +79,3 @@ fun LobstersApp(
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
|
||||||
fun TodoApp(
|
|
||||||
items: List<TodoItem>,
|
|
||||||
onAdd: (item: TodoItem) -> Unit,
|
|
||||||
onDelete: (item: TodoItem) -> Unit,
|
|
||||||
) {
|
|
||||||
val showingDialog = remember { mutableStateOf(false) }
|
|
||||||
val urlLauncher = UrlLauncherAmbient.current
|
|
||||||
|
|
||||||
if (showingDialog.value) {
|
|
||||||
ItemAddDialog(
|
|
||||||
showingDialog = showingDialog,
|
|
||||||
onAdd = onAdd,
|
|
||||||
modifier = Modifier.testTag("item_dialog")
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
Scaffold(
|
|
||||||
topBar = { TopAppBar({ Text(text = stringResource(R.string.app_name)) }) },
|
|
||||||
floatingActionButton = {
|
|
||||||
FloatingActionButton(
|
|
||||||
onClick = { showingDialog.value = true },
|
|
||||||
elevation = 8.dp,
|
|
||||||
modifier = Modifier.testTag("fab")
|
|
||||||
) {
|
|
||||||
IconResource(
|
|
||||||
resourceId = R.drawable.ic_exposure_plus_1_24dp,
|
|
||||||
tint = MaterialTheme.colors.onSecondary,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
bodyContent = {
|
|
||||||
ListContent(
|
|
||||||
innerPadding = PaddingValues(start = 8.dp, end = 8.dp),
|
|
||||||
items = items,
|
|
||||||
onSwipe = onDelete::invoke,
|
|
||||||
onClick = { urlLauncher.launch(it.title) },
|
|
||||||
modifier = Modifier.padding(top = 16.dp),
|
|
||||||
)
|
|
||||||
},
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Composable
|
|
||||||
fun ItemAddDialog(
|
|
||||||
showingDialog: MutableState<Boolean>,
|
|
||||||
onAdd: (item: TodoItem) -> Unit,
|
|
||||||
modifier: Modifier = Modifier,
|
|
||||||
) {
|
|
||||||
var newItemName by mutableStateOf(TextFieldValue(""))
|
|
||||||
val hideDialog = { showingDialog.value = false }
|
|
||||||
AlertDialog(
|
|
||||||
onDismissRequest = hideDialog,
|
|
||||||
text = {
|
|
||||||
OutlinedTextField(
|
|
||||||
activeColor = MaterialTheme.colors.secondary,
|
|
||||||
value = newItemName,
|
|
||||||
onValueChange = { newItemName = it },
|
|
||||||
label = { Text(text = "Name") },
|
|
||||||
modifier = Modifier.testTag("item_name")
|
|
||||||
)
|
|
||||||
},
|
|
||||||
confirmButton = {
|
|
||||||
Button(
|
|
||||||
onClick = {
|
|
||||||
if (newItemName.text.isNotEmpty()) {
|
|
||||||
onAdd.invoke(TodoItem(newItemName.text))
|
|
||||||
newItemName = TextFieldValue("")
|
|
||||||
hideDialog.invoke()
|
|
||||||
}
|
|
||||||
},
|
|
||||||
modifier = Modifier.testTag("add_button")
|
|
||||||
) {
|
|
||||||
Text(text = "Add")
|
|
||||||
}
|
|
||||||
},
|
|
||||||
modifier = Modifier then modifier,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
@Preview
|
|
||||||
@Composable
|
|
||||||
fun PreviewApp() {
|
|
||||||
LobstersTheme {
|
|
||||||
val items = arrayListOf(TodoItem("Item 1"))
|
|
||||||
TodoApp(
|
|
||||||
items,
|
|
||||||
items::add,
|
|
||||||
items::remove,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
|
@ -1,20 +0,0 @@
|
||||||
package dev.msfjarvis.lobsters.di
|
|
||||||
|
|
||||||
import android.content.Context
|
|
||||||
import androidx.room.Room
|
|
||||||
import dagger.Module
|
|
||||||
import dagger.Provides
|
|
||||||
import dagger.hilt.InstallIn
|
|
||||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
|
||||||
import dagger.hilt.components.SingletonComponent
|
|
||||||
import dev.msfjarvis.lobsters.data.source.TodoDatabase
|
|
||||||
|
|
||||||
@InstallIn(SingletonComponent::class)
|
|
||||||
@Module
|
|
||||||
object PersistenceModule {
|
|
||||||
@Provides
|
|
||||||
fun provideItemsDatabase(@ApplicationContext context: Context): TodoDatabase {
|
|
||||||
return Room.databaseBuilder(context, TodoDatabase::class.java, "data.db")
|
|
||||||
.fallbackToDestructiveMigration().build()
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,58 +0,0 @@
|
||||||
package dev.msfjarvis.lobsters.ui
|
|
||||||
|
|
||||||
import androidx.compose.animation.AnimatedVisibility
|
|
||||||
import androidx.compose.animation.EnterTransition
|
|
||||||
import androidx.compose.animation.ExitTransition
|
|
||||||
import androidx.compose.animation.ExperimentalAnimationApi
|
|
||||||
import androidx.compose.animation.core.tween
|
|
||||||
import androidx.compose.animation.expandVertically
|
|
||||||
import androidx.compose.animation.shrinkVertically
|
|
||||||
import androidx.compose.material.DismissDirection
|
|
||||||
import androidx.compose.material.DismissValue
|
|
||||||
import androidx.compose.material.ExperimentalMaterialApi
|
|
||||||
import androidx.compose.material.SwipeToDismiss
|
|
||||||
import androidx.compose.material.rememberDismissState
|
|
||||||
import androidx.compose.runtime.Composable
|
|
||||||
import androidx.compose.runtime.onCommit
|
|
||||||
import androidx.compose.ui.Modifier
|
|
||||||
|
|
||||||
@OptIn(ExperimentalAnimationApi::class, ExperimentalMaterialApi::class)
|
|
||||||
@Composable
|
|
||||||
fun <T> AnimatedSwipeDismiss(
|
|
||||||
modifier: Modifier = Modifier,
|
|
||||||
item: T,
|
|
||||||
background: @Composable (isDismissed: Boolean) -> Unit,
|
|
||||||
content: @Composable (isDismissed: Boolean) -> Unit,
|
|
||||||
directions: Set<DismissDirection> = setOf(DismissDirection.EndToStart),
|
|
||||||
enter: EnterTransition = expandVertically(),
|
|
||||||
exit: ExitTransition = shrinkVertically(
|
|
||||||
animSpec = tween(
|
|
||||||
durationMillis = 500,
|
|
||||||
)
|
|
||||||
),
|
|
||||||
onDismiss: (T) -> Unit
|
|
||||||
) {
|
|
||||||
val dismissState = rememberDismissState()
|
|
||||||
val isDismissed = dismissState.isDismissed(DismissDirection.EndToStart)
|
|
||||||
|
|
||||||
onCommit(dismissState.value) {
|
|
||||||
if (dismissState.value == DismissValue.DismissedToStart) {
|
|
||||||
onDismiss(item)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
AnimatedVisibility(
|
|
||||||
modifier = modifier,
|
|
||||||
visible = !isDismissed,
|
|
||||||
enter = enter,
|
|
||||||
exit = exit
|
|
||||||
) {
|
|
||||||
SwipeToDismiss(
|
|
||||||
modifier = modifier,
|
|
||||||
state = dismissState,
|
|
||||||
directions = directions,
|
|
||||||
background = { background(isDismissed) },
|
|
||||||
dismissContent = { content(isDismissed) }
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,53 +0,0 @@
|
||||||
package dev.msfjarvis.lobsters.ui
|
|
||||||
|
|
||||||
import androidx.compose.animation.animate
|
|
||||||
import androidx.compose.foundation.Box
|
|
||||||
import androidx.compose.foundation.ContentGravity
|
|
||||||
import androidx.compose.foundation.Icon
|
|
||||||
import androidx.compose.foundation.background
|
|
||||||
import androidx.compose.foundation.layout.PaddingValues
|
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
|
||||||
import androidx.compose.foundation.layout.padding
|
|
||||||
import androidx.compose.foundation.lazy.LazyColumnFor
|
|
||||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
|
||||||
import androidx.compose.material.DismissDirection
|
|
||||||
import androidx.compose.material.icons.Icons
|
|
||||||
import androidx.compose.material.icons.filled.Delete
|
|
||||||
import androidx.compose.runtime.Composable
|
|
||||||
import androidx.compose.ui.Modifier
|
|
||||||
import androidx.compose.ui.graphics.Color
|
|
||||||
import androidx.compose.ui.unit.dp
|
|
||||||
import dev.msfjarvis.lobsters.data.model.TodoItem
|
|
||||||
|
|
||||||
@Composable
|
|
||||||
fun ListContent(
|
|
||||||
innerPadding: PaddingValues,
|
|
||||||
items: List<TodoItem>,
|
|
||||||
onSwipe: (TodoItem) -> Unit,
|
|
||||||
onClick: (TodoItem) -> Unit,
|
|
||||||
modifier: Modifier = Modifier,
|
|
||||||
) {
|
|
||||||
LazyColumnFor(
|
|
||||||
modifier = modifier.padding(innerPadding),
|
|
||||||
items = items,
|
|
||||||
) { item ->
|
|
||||||
AnimatedSwipeDismiss(
|
|
||||||
item = item,
|
|
||||||
background = { isDismissed ->
|
|
||||||
Box(
|
|
||||||
modifier = Modifier.background(shape = RoundedCornerShape(8.dp), color = Color.Red)
|
|
||||||
.fillMaxSize(),
|
|
||||||
paddingStart = 20.dp,
|
|
||||||
paddingEnd = 20.dp,
|
|
||||||
gravity = ContentGravity.CenterEnd
|
|
||||||
) {
|
|
||||||
val alpha = animate(if (isDismissed) 0f else 1f)
|
|
||||||
Icon(Icons.Filled.Delete, tint = Color.White.copy(alpha = alpha))
|
|
||||||
}
|
|
||||||
},
|
|
||||||
content = { TodoRowItem(item, onClick) },
|
|
||||||
onDismiss = { onSwipe(it) },
|
|
||||||
directions = setOf(DismissDirection.EndToStart, DismissDirection.StartToEnd),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,47 +0,0 @@
|
||||||
package dev.msfjarvis.lobsters.ui
|
|
||||||
|
|
||||||
import androidx.compose.foundation.Text
|
|
||||||
import androidx.compose.foundation.clickable
|
|
||||||
import androidx.compose.foundation.layout.padding
|
|
||||||
import androidx.compose.foundation.lazy.LazyItemScope
|
|
||||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
|
||||||
import androidx.compose.material.Card
|
|
||||||
import androidx.compose.material.ListItem
|
|
||||||
import androidx.compose.material.ripple.RippleIndication
|
|
||||||
import androidx.compose.runtime.Composable
|
|
||||||
import androidx.compose.ui.Modifier
|
|
||||||
import androidx.compose.ui.text.TextStyle
|
|
||||||
import androidx.compose.ui.text.style.TextAlign
|
|
||||||
import androidx.compose.ui.unit.dp
|
|
||||||
import androidx.compose.ui.unit.sp
|
|
||||||
import dev.msfjarvis.lobsters.data.model.TodoItem
|
|
||||||
|
|
||||||
@Composable
|
|
||||||
fun LazyItemScope.TodoRowItem(
|
|
||||||
item: TodoItem,
|
|
||||||
onClick: (TodoItem) -> Unit,
|
|
||||||
) {
|
|
||||||
Card(
|
|
||||||
shape = RoundedCornerShape(8.dp),
|
|
||||||
modifier = Modifier.fillParentMaxWidth()
|
|
||||||
.clickable(
|
|
||||||
onClick = { onClick.invoke(item) },
|
|
||||||
indication = RippleIndication()
|
|
||||||
),
|
|
||||||
) {
|
|
||||||
ListItem(
|
|
||||||
modifier = Modifier.padding(vertical = 8.dp)
|
|
||||||
.fillParentMaxWidth(),
|
|
||||||
text = {
|
|
||||||
Text(
|
|
||||||
text = item.title,
|
|
||||||
style = TextStyle(
|
|
||||||
fontSize = 20.sp,
|
|
||||||
textAlign = TextAlign.Center
|
|
||||||
),
|
|
||||||
modifier = Modifier.padding(16.dp),
|
|
||||||
)
|
|
||||||
},
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,14 +0,0 @@
|
||||||
package dev.msfjarvis.lobsters.data.model
|
|
||||||
|
|
||||||
import androidx.room.Entity
|
|
||||||
import androidx.room.PrimaryKey
|
|
||||||
import java.time.LocalDateTime
|
|
||||||
import java.time.ZoneId
|
|
||||||
|
|
||||||
@Entity(
|
|
||||||
tableName = "todo_items",
|
|
||||||
)
|
|
||||||
data class TodoItem(
|
|
||||||
@PrimaryKey val title: String,
|
|
||||||
val time: LocalDateTime = LocalDateTime.now(ZoneId.of("GMT")),
|
|
||||||
)
|
|
|
@ -1,18 +0,0 @@
|
||||||
package dev.msfjarvis.lobsters.data.source
|
|
||||||
|
|
||||||
import androidx.room.Database
|
|
||||||
import androidx.room.RoomDatabase
|
|
||||||
import androidx.room.TypeConverters
|
|
||||||
import dev.msfjarvis.lobsters.data.model.TodoItem
|
|
||||||
|
|
||||||
@Database(
|
|
||||||
entities = [
|
|
||||||
TodoItem::class,
|
|
||||||
],
|
|
||||||
version = 1,
|
|
||||||
exportSchema = false,
|
|
||||||
)
|
|
||||||
@TypeConverters(DateTimeTypeConverters::class)
|
|
||||||
abstract class TodoDatabase : RoomDatabase() {
|
|
||||||
abstract fun todoItemsDao(): TodoItemDao
|
|
||||||
}
|
|
|
@ -1,35 +0,0 @@
|
||||||
package dev.msfjarvis.lobsters.data.source
|
|
||||||
|
|
||||||
import androidx.room.Dao
|
|
||||||
import androidx.room.Delete
|
|
||||||
import androidx.room.Insert
|
|
||||||
import androidx.room.OnConflictStrategy
|
|
||||||
import androidx.room.Query
|
|
||||||
import androidx.room.Update
|
|
||||||
import dev.msfjarvis.lobsters.data.model.TodoItem
|
|
||||||
import kotlinx.coroutines.flow.Flow
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Room [Dao] for [TodoItem]
|
|
||||||
*/
|
|
||||||
@Dao
|
|
||||||
abstract class TodoItemDao {
|
|
||||||
|
|
||||||
@Query("SELECT * FROM todo_items")
|
|
||||||
abstract fun getAllItems(): Flow<List<TodoItem>>
|
|
||||||
|
|
||||||
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
|
||||||
abstract suspend fun insert(entity: TodoItem): Long
|
|
||||||
|
|
||||||
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
|
||||||
abstract suspend fun insertAll(vararg entity: TodoItem)
|
|
||||||
|
|
||||||
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
|
||||||
abstract suspend fun insertAll(entities: Collection<TodoItem>)
|
|
||||||
|
|
||||||
@Update(onConflict = OnConflictStrategy.REPLACE)
|
|
||||||
abstract suspend fun update(entity: TodoItem)
|
|
||||||
|
|
||||||
@Delete
|
|
||||||
abstract suspend fun delete(entity: TodoItem): Int
|
|
||||||
}
|
|
Loading…
Add table
Add a link
Reference in a new issue