├── .gitignore ├── LICENSE ├── README.md ├── app ├── .gitignore ├── build.gradle.kts ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── ic_launcher-playstore.png │ ├── java │ └── com │ │ └── conf │ │ └── mad │ │ └── todo │ │ ├── App.kt │ │ ├── MainActivity.kt │ │ └── TodoApp.kt │ └── res │ ├── drawable │ ├── ic_launcher_background.xml │ └── ic_launcher_foreground.xml │ ├── mipmap-anydpi-v26 │ ├── ic_launcher.xml │ └── ic_launcher_round.xml │ ├── mipmap-hdpi │ ├── ic_launcher.webp │ ├── ic_launcher_foreground.webp │ └── ic_launcher_round.webp │ ├── mipmap-mdpi │ ├── ic_launcher.webp │ ├── ic_launcher_foreground.webp │ └── ic_launcher_round.webp │ ├── mipmap-xhdpi │ ├── ic_launcher.webp │ ├── ic_launcher_foreground.webp │ └── ic_launcher_round.webp │ ├── mipmap-xxhdpi │ ├── ic_launcher.webp │ ├── ic_launcher_foreground.webp │ └── ic_launcher_round.webp │ ├── mipmap-xxxhdpi │ ├── ic_launcher.webp │ ├── ic_launcher_foreground.webp │ └── ic_launcher_round.webp │ ├── values │ ├── colors.xml │ ├── ic_launcher_background.xml │ ├── strings.xml │ └── themes.xml │ └── xml │ ├── backup_rules.xml │ └── data_extraction_rules.xml ├── build-logic ├── .gitignore ├── README.md ├── build.gradle.kts ├── gradle.properties ├── settings.gradle └── src │ └── main │ └── kotlin │ └── com │ └── conf │ └── mad │ └── todo │ ├── convention │ ├── AndroidFeaturePlugin.kt │ └── PureKotlinPlugin.kt │ ├── dsl │ ├── AndroidGradleDsl.kt │ ├── GradleDsl.kt │ ├── KotlinGradleDsl.kt │ └── VersionCatalogDsl.kt │ └── primitive │ ├── AndroidApplicationPlugin.kt │ ├── AndroidComposePlugin.kt │ ├── AndroidHiltPlugin.kt │ ├── AndroidKotlinPlugin.kt │ ├── AndroidPlugin.kt │ ├── AndroidRoomPlugin.kt │ └── KotlinSerializationPlugin.kt ├── build.gradle.kts ├── core ├── common │ ├── .gitignore │ ├── build.gradle.kts │ ├── consumer-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ └── com │ │ └── conf │ │ └── mad │ │ └── todo │ │ └── common │ │ ├── TodoDispatchers.kt │ │ └── di │ │ └── DispatchersModule.kt ├── database │ ├── .gitignore │ ├── build.gradle.kts │ ├── consumer-rules.pro │ ├── schemas │ │ └── com.conf.mad.todo.database.TodoDatabase │ │ │ └── 1.json │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ └── com │ │ └── conf │ │ └── mad │ │ └── todo │ │ └── database │ │ ├── TaskDao.kt │ │ ├── TodoDatabase.kt │ │ ├── di │ │ └── DatabaseModule.kt │ │ └── entity │ │ └── TaskEntity.kt ├── designsystem │ ├── .gitignore │ ├── build.gradle.kts │ ├── consumer-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── com │ │ │ └── conf │ │ │ └── mad │ │ │ └── todo │ │ │ └── designsystem │ │ │ ├── Color.kt │ │ │ ├── Theme.kt │ │ │ ├── Type.kt │ │ │ └── preview │ │ │ ├── ComponentPreview.kt │ │ │ └── DevicePreview.kt │ │ └── res │ │ ├── drawable │ │ ├── ic_add_task.xml │ │ ├── ic_clear.xml │ │ ├── ic_star_default.xml │ │ ├── ic_star_filled.xml │ │ └── ic_title_home.xml │ │ └── font │ │ ├── pretendard_medium.otf │ │ ├── pretendard_regular.otf │ │ ├── pretendard_semibold.otf │ │ └── stretch_pro.otf └── ui │ ├── .gitignore │ ├── build.gradle.kts │ ├── consumer-rules.pro │ └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── com │ └── conf │ └── mad │ └── todo │ └── ui │ └── Clickable.kt ├── data └── task │ ├── .gitignore │ ├── build.gradle.kts │ ├── consumer-rules.pro │ └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── com │ └── conf │ └── mad │ └── todo │ └── data │ └── task │ ├── di │ └── TaskModule.kt │ ├── mapper │ └── Task.kt │ └── repository │ └── DefaultTaskRepository.kt ├── domain └── task │ ├── .gitignore │ ├── build.gradle.kts │ └── src │ └── main │ └── java │ └── com │ └── conf │ └── mad │ └── todo │ └── task │ ├── model │ └── Task.kt │ └── repository │ └── TaskRepository.kt ├── feature ├── home │ ├── .gitignore │ ├── build.gradle.kts │ ├── consumer-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── com │ │ │ └── conf │ │ │ └── mad │ │ │ └── todo │ │ │ └── home │ │ │ ├── HomeScreen.kt │ │ │ ├── HomeViewModel.kt │ │ │ ├── component │ │ │ ├── CompletedTaskVisibilityToggleButton.kt │ │ │ ├── DeleteTaskDialog.kt │ │ │ ├── EmptyTaskView.kt │ │ │ ├── HomeBottomAppBar.kt │ │ │ ├── HomeTopAppBar.kt │ │ │ └── TaskItem.kt │ │ │ └── model │ │ │ ├── HomeMenu.kt │ │ │ ├── HomeUiState.kt │ │ │ ├── TaskStatus.kt │ │ │ └── TaskUiModel.kt │ │ └── res │ │ └── drawable │ │ ├── ic_clip.xml │ │ ├── ic_navi_add.xml │ │ ├── ic_navi_favorite_default.xml │ │ ├── ic_navi_favorite_selected.xml │ │ ├── ic_navi_task_default.xml │ │ ├── ic_navi_task_selected.xml │ │ ├── ic_star_home_default.xml │ │ ├── ic_star_home_filled.xml │ │ ├── ic_task_completed.xml │ │ ├── ic_task_default.xml │ │ └── ic_task_done.xml └── post │ ├── .gitignore │ ├── build.gradle.kts │ ├── consumer-rules.pro │ └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── com │ └── conf │ └── mad │ └── todo │ └── post │ ├── PostScreen.kt │ ├── PostViewModel.kt │ ├── component │ ├── AddTaskTopAppBar.kt │ └── TaskTextField.kt │ └── model │ └── PostUiState.kt ├── gradle.properties ├── gradle ├── libs.versions.toml └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── renovate.json ├── settings.gradle.kts └── spotless ├── .editorconfig ├── spotless.license.kt └── spotless.license.xml /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by https://www.toptal.com/developers/gitignore/api/kotlin,android,jetbrains,gradle 2 | # Edit at https://www.toptal.com/developers/gitignore?templates=kotlin,android,jetbrains,gradle 3 | 4 | ### Android ### 5 | # Gradle files 6 | .gradle/ 7 | build/ 8 | .kotlin 9 | 10 | # Local configuration file (sdk path, etc) 11 | local.properties 12 | 13 | # Log/OS Files 14 | *.log 15 | 16 | # Android Studio generated files and folders 17 | captures/ 18 | .externalNativeBuild/ 19 | .cxx/ 20 | *.apk 21 | output.json 22 | report 23 | 24 | # IntelliJ 25 | *.iml 26 | .idea/ 27 | misc.xml 28 | deploymentTargetDropDown.xml 29 | render.experimental.xml 30 | 31 | # Keystore files 32 | *.jks 33 | *.keystore 34 | 35 | # Google Services (e.g. APIs or Firebase) 36 | google-services.json 37 | 38 | # Android Profiling 39 | *.hprof 40 | 41 | ### Android Patch ### 42 | gen-external-apklibs 43 | 44 | # Replacement of .externalNativeBuild directories introduced 45 | # with Android Studio 3.5. 46 | 47 | ### JetBrains ### 48 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider 49 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 50 | 51 | # User-specific stuff 52 | .idea/**/workspace.xml 53 | .idea/**/tasks.xml 54 | .idea/**/usage.statistics.xml 55 | .idea/**/dictionaries 56 | .idea/**/shelf 57 | 58 | # AWS User-specific 59 | .idea/**/aws.xml 60 | 61 | # Generated files 62 | .idea/**/contentModel.xml 63 | 64 | # Sensitive or high-churn files 65 | .idea/**/dataSources/ 66 | .idea/**/dataSources.ids 67 | .idea/**/dataSources.local.xml 68 | .idea/**/sqlDataSources.xml 69 | .idea/**/dynamic.xml 70 | .idea/**/uiDesigner.xml 71 | .idea/**/dbnavigator.xml 72 | 73 | # Gradle 74 | .idea/**/gradle.xml 75 | .idea/**/libraries 76 | 77 | # Gradle and Maven with auto-import 78 | # When using Gradle or Maven with auto-import, you should exclude module files, 79 | # since they will be recreated, and may cause churn. Uncomment if using 80 | # auto-import. 81 | # .idea/artifacts 82 | # .idea/compiler.xml 83 | # .idea/jarRepositories.xml 84 | # .idea/modules.xml 85 | # .idea/*.iml 86 | # .idea/modules 87 | # *.iml 88 | # *.ipr 89 | 90 | # CMake 91 | cmake-build-*/ 92 | 93 | # Mongo Explorer plugin 94 | .idea/**/mongoSettings.xml 95 | 96 | # File-based project format 97 | *.iws 98 | 99 | # IntelliJ 100 | out/ 101 | 102 | # mpeltonen/sbt-idea plugin 103 | .idea_modules/ 104 | 105 | # JIRA plugin 106 | atlassian-ide-plugin.xml 107 | 108 | # Cursive Clojure plugin 109 | .idea/replstate.xml 110 | 111 | # SonarLint plugin 112 | .idea/sonarlint/ 113 | 114 | # Crashlytics plugin (for Android Studio and IntelliJ) 115 | com_crashlytics_export_strings.xml 116 | crashlytics.properties 117 | crashlytics-build.properties 118 | fabric.properties 119 | 120 | # Editor-based Rest Client 121 | .idea/httpRequests 122 | 123 | # Android studio 3.1+ serialized cache file 124 | .idea/caches/build_file_checksums.ser 125 | 126 | ### JetBrains Patch ### 127 | # Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 128 | 129 | # *.iml 130 | # modules.xml 131 | # .idea/misc.xml 132 | # *.ipr 133 | 134 | # Sonarlint plugin 135 | # https://plugins.jetbrains.com/plugin/7973-sonarlint 136 | .idea/**/sonarlint/ 137 | 138 | # SonarQube Plugin 139 | # https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin 140 | .idea/**/sonarIssues.xml 141 | 142 | # Markdown Navigator plugin 143 | # https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced 144 | .idea/**/markdown-navigator.xml 145 | .idea/**/markdown-navigator-enh.xml 146 | .idea/**/markdown-navigator/ 147 | 148 | # Cache file creation bug 149 | # See https://youtrack.jetbrains.com/issue/JBR-2257 150 | .idea/$CACHE_FILE$ 151 | 152 | # CodeStream plugin 153 | # https://plugins.jetbrains.com/plugin/12206-codestream 154 | .idea/codestream.xml 155 | 156 | # Azure Toolkit for IntelliJ plugin 157 | # https://plugins.jetbrains.com/plugin/8053-azure-toolkit-for-intellij 158 | .idea/**/azureSettings.xml 159 | 160 | ### Kotlin ### 161 | # Compiled class file 162 | *.class 163 | 164 | # Log file 165 | 166 | # BlueJ files 167 | *.ctxt 168 | 169 | # Mobile Tools for Java (J2ME) 170 | .mtj.tmp/ 171 | 172 | # Package Files # 173 | *.jar 174 | *.war 175 | *.nar 176 | *.ear 177 | *.zip 178 | *.tar.gz 179 | *.rar 180 | 181 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml 182 | hs_err_pid* 183 | replay_pid* 184 | 185 | ### Gradle ### 186 | .gradle 187 | **/build/ 188 | !src/**/build/ 189 | 190 | # Ignore Gradle GUI config 191 | gradle-app.setting 192 | 193 | # Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) 194 | !gradle-wrapper.jar 195 | 196 | # Avoid ignore Gradle wrappper properties 197 | !gradle-wrapper.properties 198 | 199 | # Cache of project 200 | .gradletasknamecache 201 | 202 | # Eclipse Gradle plugin generated files 203 | # Eclipse Core 204 | .project 205 | # JDT-specific (Eclipse Java Development Tools) 206 | .classpath 207 | 208 | ### Gradle Patch ### 209 | # Java heap dump 210 | 211 | # End of https://www.toptal.com/developers/gitignore/api/kotlin,android,jetbrains,gradle 212 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023-2024 MADConference 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

To-Do Sample Application

2 | 3 |

4 | License 5 | 6 |

7 | 8 |

9 | Android Sample App for Mobile App Developer Conference(MADC) 10 |

11 | 12 |

Download

13 | 14 | Go to the [Releases](https://github.com/MobileAppDeveloperConference/android/releases) to download 15 | the latest APK. 16 | 17 |

Tech Stack

18 | 19 | - 100% Kotlin + Jetpack Compose 20 | - Kotlinx Libraries 21 | - kotlinx.coroutines 22 | - kotlinx.serialization 23 | - Jetpack 24 | - Startup 25 | - ViewModel 26 | - Navigation 27 | - Room + ksp 28 | - Dagger-Hilt + ksp 29 | - Timber 30 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /app/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * MIT License 3 | * Copyright 2023 MADConference 4 | * 5 | * Permission is hereby granted, free of charge, to any person obtaining a copy 6 | * of this software and associated documentation files (the "Software"), to deal 7 | * in the Software without restriction, including without limitation the rights 8 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | * copies of the Software, and to permit persons to whom the Software is 10 | * furnished to do so, subject to the following conditions: 11 | * 12 | * The above copyright notice and this permission notice shall be included in all 13 | * copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | * SOFTWARE. 22 | */ 23 | plugins { 24 | id("conf.mad.primitive.android.application") 25 | id("conf.mad.primitive.android.kotlin") 26 | id("conf.mad.primitive.android.compose") 27 | id("conf.mad.primitive.android.hilt") 28 | id("conf.mad.primitive.kotlin.serialization") 29 | } 30 | 31 | android { 32 | namespace = "com.conf.mad.todo" 33 | 34 | defaultConfig { 35 | applicationId = "com.conf.mad.todo" 36 | versionCode = libs.versions.versionCode.get().toInt() 37 | versionName = libs.versions.appVersion.get() 38 | 39 | testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" 40 | vectorDrawables { 41 | useSupportLibrary = true 42 | } 43 | } 44 | 45 | signingConfigs { 46 | getByName("debug") { 47 | keyAlias = "androiddebugkey" 48 | keyPassword = "android" 49 | storeFile = File("${project.rootDir.absolutePath}/keystore/debug.keystore") 50 | storePassword = "android" 51 | } 52 | } 53 | 54 | buildTypes { 55 | release { 56 | isMinifyEnabled = true 57 | isShrinkResources = true 58 | proguardFiles( 59 | getDefaultProguardFile("proguard-android-optimize.txt"), 60 | "proguard-rules.pro" 61 | ) 62 | signingConfig = signingConfigs.getByName("debug") 63 | } 64 | } 65 | buildFeatures { 66 | buildConfig = true 67 | } 68 | } 69 | 70 | dependencies { 71 | implementation(projects.core.common) 72 | implementation(projects.core.database) 73 | implementation(projects.core.designsystem) 74 | implementation(projects.`data`.task) 75 | implementation(projects.feature.home) 76 | implementation(projects.feature.post) 77 | testImplementation(libs.junit) 78 | androidTestImplementation(libs.androidx.test.junit) 79 | androidTestImplementation(libs.androidx.test.espresso) 80 | androidTestImplementation(platform(libs.androidx.compose.bom)) 81 | } 82 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 25 | 27 | 28 | 39 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /app/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobileAppDeveloperConference/android/bc050b2fa736aaabd1414edb83fcf1e847419a8c/app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /app/src/main/java/com/conf/mad/todo/App.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * MIT License 3 | * Copyright 2023 MADConference 4 | * 5 | * Permission is hereby granted, free of charge, to any person obtaining a copy 6 | * of this software and associated documentation files (the "Software"), to deal 7 | * in the Software without restriction, including without limitation the rights 8 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | * copies of the Software, and to permit persons to whom the Software is 10 | * furnished to do so, subject to the following conditions: 11 | * 12 | * The above copyright notice and this permission notice shall be included in all 13 | * copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | * SOFTWARE. 22 | */ 23 | package com.conf.mad.todo 24 | 25 | import android.app.Application 26 | import dagger.hilt.android.HiltAndroidApp 27 | 28 | @HiltAndroidApp 29 | class App : Application() 30 | -------------------------------------------------------------------------------- /app/src/main/java/com/conf/mad/todo/MainActivity.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * MIT License 3 | * Copyright 2023 MADConference 4 | * 5 | * Permission is hereby granted, free of charge, to any person obtaining a copy 6 | * of this software and associated documentation files (the "Software"), to deal 7 | * in the Software without restriction, including without limitation the rights 8 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | * copies of the Software, and to permit persons to whom the Software is 10 | * furnished to do so, subject to the following conditions: 11 | * 12 | * The above copyright notice and this permission notice shall be included in all 13 | * copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | * SOFTWARE. 22 | */ 23 | package com.conf.mad.todo 24 | 25 | import android.os.Bundle 26 | import androidx.activity.ComponentActivity 27 | import androidx.activity.SystemBarStyle 28 | import androidx.activity.compose.setContent 29 | import androidx.activity.enableEdgeToEdge 30 | import androidx.compose.runtime.DisposableEffect 31 | import com.conf.mad.todo.designsystem.TodoTheme 32 | import dagger.hilt.android.AndroidEntryPoint 33 | 34 | @AndroidEntryPoint 35 | class MainActivity : ComponentActivity() { 36 | override fun onCreate(savedInstanceState: Bundle?) { 37 | super.onCreate(savedInstanceState) 38 | setContent { 39 | DisposableEffect(true) { 40 | enableEdgeToEdge( 41 | statusBarStyle = SystemBarStyle.light( 42 | android.graphics.Color.TRANSPARENT, 43 | android.graphics.Color.TRANSPARENT 44 | ) 45 | ) 46 | onDispose {} 47 | } 48 | TodoTheme { 49 | TodoApp() 50 | } 51 | } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /app/src/main/java/com/conf/mad/todo/TodoApp.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * MIT License 3 | * Copyright 2023 MADConference 4 | * 5 | * Permission is hereby granted, free of charge, to any person obtaining a copy 6 | * of this software and associated documentation files (the "Software"), to deal 7 | * in the Software without restriction, including without limitation the rights 8 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | * copies of the Software, and to permit persons to whom the Software is 10 | * furnished to do so, subject to the following conditions: 11 | * 12 | * The above copyright notice and this permission notice shall be included in all 13 | * copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | * SOFTWARE. 22 | */ 23 | package com.conf.mad.todo 24 | 25 | import androidx.compose.runtime.Composable 26 | import androidx.navigation.NavHostController 27 | import androidx.navigation.compose.NavHost 28 | import androidx.navigation.compose.rememberNavController 29 | import com.conf.mad.todo.designsystem.TodoTheme 30 | import com.conf.mad.todo.home.HOME_SCREEN_ROUTE 31 | import com.conf.mad.todo.home.homeScreen 32 | import com.conf.mad.todo.post.POST_SCREEN_ROUTE 33 | import com.conf.mad.todo.post.POST_SCREEN_TASK_DEFAULT_ID 34 | import com.conf.mad.todo.post.postScreen 35 | 36 | @Composable 37 | fun TodoApp(navController: NavHostController = rememberNavController()) { 38 | TodoTheme { 39 | NavHost( 40 | navController = navController, 41 | startDestination = HOME_SCREEN_ROUTE 42 | ) { 43 | homeScreen( 44 | onPost = { 45 | navController.navigate("${POST_SCREEN_ROUTE}/${POST_SCREEN_TASK_DEFAULT_ID}") 46 | } 47 | ) 48 | postScreen( 49 | onCancel = { navController.popBackStack() }, 50 | onComplete = { 51 | navController.navigate(HOME_SCREEN_ROUTE) { 52 | launchSingleTop = true 53 | } 54 | } 55 | ) 56 | } 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 2 | 25 | 31 | 32 | 33 | 39 | 42 | 45 | 46 | 47 | 48 | 54 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobileAppDeveloperConference/android/bc050b2fa736aaabd1414edb83fcf1e847419a8c/app/src/main/res/mipmap-hdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobileAppDeveloperConference/android/bc050b2fa736aaabd1414edb83fcf1e847419a8c/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobileAppDeveloperConference/android/bc050b2fa736aaabd1414edb83fcf1e847419a8c/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobileAppDeveloperConference/android/bc050b2fa736aaabd1414edb83fcf1e847419a8c/app/src/main/res/mipmap-mdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobileAppDeveloperConference/android/bc050b2fa736aaabd1414edb83fcf1e847419a8c/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobileAppDeveloperConference/android/bc050b2fa736aaabd1414edb83fcf1e847419a8c/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobileAppDeveloperConference/android/bc050b2fa736aaabd1414edb83fcf1e847419a8c/app/src/main/res/mipmap-xhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobileAppDeveloperConference/android/bc050b2fa736aaabd1414edb83fcf1e847419a8c/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobileAppDeveloperConference/android/bc050b2fa736aaabd1414edb83fcf1e847419a8c/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobileAppDeveloperConference/android/bc050b2fa736aaabd1414edb83fcf1e847419a8c/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobileAppDeveloperConference/android/bc050b2fa736aaabd1414edb83fcf1e847419a8c/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobileAppDeveloperConference/android/bc050b2fa736aaabd1414edb83fcf1e847419a8c/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobileAppDeveloperConference/android/bc050b2fa736aaabd1414edb83fcf1e847419a8c/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobileAppDeveloperConference/android/bc050b2fa736aaabd1414edb83fcf1e847419a8c/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MobileAppDeveloperConference/android/bc050b2fa736aaabd1414edb83fcf1e847419a8c/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 25 | 26 | #FFBB86FC 27 | #FF6200EE 28 | #FF3700B3 29 | #FF03DAC5 30 | #FF018786 31 | #FF000000 32 | #FFFFFFFF 33 | -------------------------------------------------------------------------------- /app/src/main/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 25 | 26 | #000000 27 | -------------------------------------------------------------------------------- /app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 25 | 26 | TodoMad 27 | -------------------------------------------------------------------------------- /app/src/main/res/values/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 25 | 26 | 27 |