diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..2dc435e1 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,23 @@ +# https://editorconfig.org +root = true + +[*] +indent_style = space +indent_size = 2 + +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.{java,kt,kts,xml}] +indent_size = 2 +ij_continuation_indent_size = 2 + +[*.{kt,kts}] +kotlin_imports_layout=ascii +ij_kotlin_code_style_defaults = KOTLIN_OFFICIAL +ij_kotlin_field_annotation_wrap = normal + +[*.md] +trim_trailing_whitespace = false diff --git a/app/build.gradle b/app/build.gradle index f8212682..b269f2a4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -74,8 +74,8 @@ dependencies { implementation "androidx.ui:ui-tooling:$compose_version" implementation 'com.google.android.material:material:1.3.0-alpha02' testImplementation 'junit:junit:4.13' - androidTestImplementation 'androidx.test.ext:junit:1.1.2-rc03' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0-rc03' + androidTestImplementation 'androidx.test.ext:junit:1.1.2' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' androidTestImplementation "androidx.ui:ui-test:$compose_version" coreLibraryDesugaring "com.android.tools:desugar_jdk_libs:1.0.10" } diff --git a/app/src/main/java/dev/msfjarvis/todo/MainActivity.kt b/app/src/main/java/dev/msfjarvis/todo/MainActivity.kt index 9f130d04..d2321032 100644 --- a/app/src/main/java/dev/msfjarvis/todo/MainActivity.kt +++ b/app/src/main/java/dev/msfjarvis/todo/MainActivity.kt @@ -3,21 +3,33 @@ package dev.msfjarvis.todo import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import androidx.compose.foundation.Text +import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumnFor +import androidx.compose.material.AlertDialog import androidx.compose.material.FloatingActionButton import androidx.compose.material.MaterialTheme +import androidx.compose.material.OutlinedTextField import androidx.compose.material.Scaffold import androidx.compose.material.TopAppBar import androidx.compose.runtime.Composable +import androidx.compose.runtime.MutableState import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember 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.semantics.semantics import androidx.compose.ui.semantics.testTag +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.font.FontStyle +import androidx.compose.ui.text.input.TextFieldValue +import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp import androidx.ui.tooling.preview.Preview import dev.msfjarvis.todo.compose.utils.IconResource import dev.msfjarvis.todo.data.model.TodoItem @@ -50,12 +62,20 @@ fun TodoApp( onAdd: (item: TodoItem) -> Unit, onDelete: (item: TodoItem) -> Unit, ) { + val showingDialog = remember { mutableStateOf(false) } + + if (showingDialog.value) { + ItemAddDialog( + showingDialog = showingDialog, + onAdd = onAdd, + ) + } Scaffold( topBar = { TopAppBar({ Text(text = "I can Compose?") }) }, floatingActionButton = { FloatingActionButton( - onClick = { onAdd.invoke(TodoItem("Item ${items.size + 1}")) }, + onClick = { showingDialog.value = true }, elevation = 8.dp, modifier = Modifier.semantics { testTag = "fab" } ) { @@ -76,6 +96,50 @@ fun TodoApp( ) } +@Composable +fun ItemAddDialog( + showingDialog: MutableState, + onAdd: (item: TodoItem) -> Unit, +) { + var newItemName by mutableStateOf(TextFieldValue("")) + AlertDialog( + onDismissRequest = { + showingDialog.value = false + }, + text = { + OutlinedTextField( + value = newItemName, + onValueChange = { newItemName = it }, + label = { + Text( + text = "Name", + ) + }, + ) + }, + title = { + Text( + text = "Create new item", + ) + }, + confirmButton = { + Text( + text = "Add", + modifier = Modifier.padding(16.dp).clickable(onClick = { + onAdd.invoke(TodoItem(newItemName.text)) + newItemName = TextFieldValue("") + showingDialog.value = false + }), + style = TextStyle( + fontSize = 18.sp, + textAlign = TextAlign.End, + fontStyle = FontStyle.Normal, + ), + ) + } + ) +} + @Preview @Composable fun PreviewApp() { diff --git a/app/src/main/java/dev/msfjarvis/todo/ui/TodoRow.kt b/app/src/main/java/dev/msfjarvis/todo/ui/TodoRow.kt index 130d66ff..0ee522de 100644 --- a/app/src/main/java/dev/msfjarvis/todo/ui/TodoRow.kt +++ b/app/src/main/java/dev/msfjarvis/todo/ui/TodoRow.kt @@ -15,7 +15,6 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import dev.msfjarvis.todo.data.model.TodoItem -import kotlinx.coroutines.coroutineScope @Composable fun LazyItemScope.TodoRowItem(item: TodoItem, onLongClick: () -> Unit) { diff --git a/app/src/main/java/dev/msfjarvis/todo/ui/TodoTheme.kt b/app/src/main/java/dev/msfjarvis/todo/ui/TodoTheme.kt index 74d78c68..9baee8e4 100644 --- a/app/src/main/java/dev/msfjarvis/todo/ui/TodoTheme.kt +++ b/app/src/main/java/dev/msfjarvis/todo/ui/TodoTheme.kt @@ -2,54 +2,14 @@ package dev.msfjarvis.todo.ui import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.material.MaterialTheme -import androidx.compose.material.Typography import androidx.compose.material.darkColors import androidx.compose.material.lightColors import androidx.compose.runtime.Composable -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.text.TextStyle -import androidx.compose.ui.text.font.FontFamily -import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.text.style.TextIndent -import androidx.compose.ui.unit.sp - -val lightColors = lightColors( - primary = Color.White, - secondary = Color(0xFF3700B3), - background = Color.White, - surface = Color.White, - onPrimary = Color.Black, - onSecondary = Color.White, - onBackground = Color.Black, - onSurface = Color.White, -) -val darkColors = darkColors( - primary = Color(0xFF121212), - secondary = Color(0xFFBB86FC), - background = Color.Black, - surface = Color(0xFF121212), - onPrimary = Color.White, - onSecondary = Color.White, - onBackground = Color.White, - onSurface = Color.White, -) - -private val typography = Typography( - body1 = TextStyle( - fontFamily = FontFamily.Serif, - fontWeight = FontWeight.Normal, - fontSize = 20.sp, - textIndent = TextIndent(firstLine = 16.sp), - textAlign = TextAlign.Justify - ) -) @Composable fun TodoTheme(children: @Composable () -> Unit) { MaterialTheme( - colors = if (isSystemInDarkTheme()) darkColors else lightColors, + colors = if (isSystemInDarkTheme()) darkColors() else lightColors(), content = children, - typography = typography, ) } diff --git a/app/src/main/java/dev/msfjarvis/todo/ui/WireGuardItem.kt b/app/src/main/java/dev/msfjarvis/todo/ui/WireGuardItem.kt index d9ed1ff3..38831de0 100644 --- a/app/src/main/java/dev/msfjarvis/todo/ui/WireGuardItem.kt +++ b/app/src/main/java/dev/msfjarvis/todo/ui/WireGuardItem.kt @@ -13,9 +13,9 @@ import androidx.compose.material.Switch import androidx.compose.material.ripple.RippleIndication import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue -import androidx.compose.runtime.setValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.style.TextAlign