├── app ├── .gitignore ├── src │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── android │ │ │ │ └── template │ │ │ │ ├── utils │ │ │ │ ├── .keep │ │ │ │ └── extenstions │ │ │ │ │ ├── .keep │ │ │ │ │ └── viewmodel │ │ │ │ │ └── ViewModelExtensions.kt │ │ │ │ ├── providers │ │ │ │ ├── .keep │ │ │ │ └── dispatchers │ │ │ │ │ ├── DispatcherProvider.kt │ │ │ │ │ └── DispatcherProviderImpl.kt │ │ │ │ ├── compose │ │ │ │ ├── uistate │ │ │ │ │ ├── models │ │ │ │ │ │ ├── EmptyEvent.kt │ │ │ │ │ │ ├── EmptyUiState.kt │ │ │ │ │ │ └── ErrorState.kt │ │ │ │ │ ├── mappers │ │ │ │ │ │ └── ExceptionMappers.kt │ │ │ │ │ └── viewmodel │ │ │ │ │ │ └── UiStateViewModel.kt │ │ │ │ ├── theme │ │ │ │ │ ├── Color.kt │ │ │ │ │ ├── Type.kt │ │ │ │ │ └── Theme.kt │ │ │ │ └── components │ │ │ │ │ ├── loading │ │ │ │ │ └── Loading.kt │ │ │ │ │ ├── error │ │ │ │ │ └── ErrorDialog.kt │ │ │ │ │ └── uistate │ │ │ │ │ └── UiStateScreen.kt │ │ │ │ ├── features │ │ │ │ ├── tasks │ │ │ │ │ ├── models │ │ │ │ │ │ ├── TaskListDestination.kt │ │ │ │ │ │ ├── TaskListEvent.kt │ │ │ │ │ │ └── TaskListUiState.kt │ │ │ │ │ ├── components │ │ │ │ │ │ ├── TaskList.kt │ │ │ │ │ │ ├── TaskListTopBar.kt │ │ │ │ │ │ └── TaskItem.kt │ │ │ │ │ ├── TaskListScreen.kt │ │ │ │ │ └── TaskListViewModel.kt │ │ │ │ ├── taskdetail │ │ │ │ │ ├── models │ │ │ │ │ │ ├── TaskDetailDestination.kt │ │ │ │ │ │ └── TaskDetailUiState.kt │ │ │ │ │ ├── components │ │ │ │ │ │ ├── TaskDetailContent.kt │ │ │ │ │ │ └── TaskDetailTopBar.kt │ │ │ │ │ ├── TaskDetailScreen.kt │ │ │ │ │ └── TaskDetailViewModel.kt │ │ │ │ └── main │ │ │ │ │ ├── MainActivity.kt │ │ │ │ │ └── MainNavHost.kt │ │ │ │ ├── TemplateApp.kt │ │ │ │ └── di │ │ │ │ └── modules │ │ │ │ └── DispatcherModule.kt │ │ ├── res │ │ │ ├── mipmap-hdpi │ │ │ │ ├── ic_launcher.webp │ │ │ │ └── ic_launcher_round.webp │ │ │ ├── mipmap-mdpi │ │ │ │ ├── ic_launcher.webp │ │ │ │ └── ic_launcher_round.webp │ │ │ ├── mipmap-xhdpi │ │ │ │ ├── ic_launcher.webp │ │ │ │ └── ic_launcher_round.webp │ │ │ ├── mipmap-xxhdpi │ │ │ │ ├── ic_launcher.webp │ │ │ │ └── ic_launcher_round.webp │ │ │ ├── mipmap-xxxhdpi │ │ │ │ ├── ic_launcher.webp │ │ │ │ └── ic_launcher_round.webp │ │ │ ├── values │ │ │ │ ├── themes.xml │ │ │ │ ├── colors.xml │ │ │ │ └── strings.xml │ │ │ ├── mipmap-anydpi │ │ │ │ ├── ic_launcher.xml │ │ │ │ └── ic_launcher_round.xml │ │ │ ├── xml │ │ │ │ ├── backup_rules.xml │ │ │ │ └── data_extraction_rules.xml │ │ │ └── drawable │ │ │ │ ├── ic_launcher_foreground.xml │ │ │ │ └── ic_launcher_background.xml │ │ └── AndroidManifest.xml │ └── test │ │ └── java │ │ └── com │ │ └── android │ │ └── template │ │ ├── utils │ │ └── MockkUtils.kt │ │ └── features │ │ ├── taskdetail │ │ └── TaskDetailViewModelTest.kt │ │ └── tasks │ │ └── TaskListViewModelTest.kt ├── proguard-rules.pro └── build.gradle.kts ├── data ├── .gitignore ├── consumer-rules.pro ├── src │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── android │ │ │ │ └── template │ │ │ │ └── data │ │ │ │ ├── remote │ │ │ │ ├── models │ │ │ │ │ ├── requests │ │ │ │ │ │ └── .keep │ │ │ │ │ └── responses │ │ │ │ │ │ ├── errors │ │ │ │ │ │ └── ErrorResponse.kt │ │ │ │ │ │ └── tasks │ │ │ │ │ │ └── TaskResponse.kt │ │ │ │ ├── services │ │ │ │ │ └── TasksService.kt │ │ │ │ ├── interceptors │ │ │ │ │ └── HeaderInterceptor.kt │ │ │ │ └── adapters │ │ │ │ │ ├── errors │ │ │ │ │ ├── ErrorHandlingCallAdapterFactory.kt │ │ │ │ │ ├── ErrorHandlingCallAdapter.kt │ │ │ │ │ └── ErrorHandlingCallback.kt │ │ │ │ │ └── mappers │ │ │ │ │ └── ErrorMappers.kt │ │ │ │ ├── storages │ │ │ │ ├── databases │ │ │ │ │ └── .keep │ │ │ │ └── datastore │ │ │ │ │ ├── .keep │ │ │ │ │ └── preferences │ │ │ │ │ ├── PreferencesDataStore.kt │ │ │ │ │ └── PreferencesDataStoreImpl.kt │ │ │ │ ├── repositories │ │ │ │ ├── tasks │ │ │ │ │ ├── mappers │ │ │ │ │ │ └── TaskMappers.kt │ │ │ │ │ └── TasksRepositoryImpl.kt │ │ │ │ └── preferences │ │ │ │ │ └── PreferencesRepositoryImpl.kt │ │ │ │ └── di │ │ │ │ └── modules │ │ │ │ ├── StoragesModule.kt │ │ │ │ ├── RepositoriesModule.kt │ │ │ │ └── RemoteModule.kt │ │ └── AndroidManifest.xml │ └── test │ │ └── java │ │ └── com │ │ └── android │ │ └── template │ │ └── data │ │ ├── repositories │ │ ├── tasks │ │ │ ├── mappers │ │ │ │ └── TaskMappersKtTest.kt │ │ │ └── TasksRepositoryImplTest.kt │ │ └── preferences │ │ │ └── PreferencesRepositoryImplTest.kt │ │ └── remote │ │ └── adapters │ │ ├── mappers │ │ └── ErrorMappersKtTest.kt │ │ └── errors │ │ └── ErrorHandlingCallbackTest.kt ├── proguard-rules.pro └── build.gradle.kts ├── domain ├── .gitignore ├── consumer-rules.pro ├── src │ ├── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ │ └── com │ │ │ └── android │ │ │ └── template │ │ │ └── domain │ │ │ ├── models │ │ │ ├── tasks │ │ │ │ └── Task.kt │ │ │ └── errors │ │ │ │ ├── ApiException.kt │ │ │ │ ├── NoConnectionException.kt │ │ │ │ └── UnauthorizedException.kt │ │ │ ├── repositories │ │ │ ├── preferences │ │ │ │ └── PreferencesRepository.kt │ │ │ └── tasks │ │ │ │ └── TasksRepository.kt │ │ │ ├── usecases │ │ │ ├── tasks │ │ │ │ ├── GetTaskListUseCase.kt │ │ │ │ ├── CreateTaskUseCase.kt │ │ │ │ └── GetTaskUseCase.kt │ │ │ └── preferences │ │ │ │ ├── IsFirstRunUseCase.kt │ │ │ │ └── SetFirstRunUseCase.kt │ │ │ └── utils │ │ │ └── NullSafetyExtensions.kt │ └── test │ │ └── java │ │ └── com │ │ └── android │ │ └── template │ │ └── domain │ │ ├── usecases │ │ ├── tasks │ │ │ ├── CreateTaskUseCaseTest.kt │ │ │ ├── GetTaskUseCaseTest.kt │ │ │ └── GetTaskListUseCaseTest.kt │ │ └── preferences │ │ │ ├── SetFirstRunUseCaseTest.kt │ │ │ └── IsFirstRunUseCaseTest.kt │ │ └── utils │ │ └── NullSafetyExtensionsKtTest.kt ├── proguard-rules.pro └── build.gradle.kts ├── gradle ├── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties └── libs.versions.toml ├── .gitignore ├── gradle.properties ├── settings.gradle.kts ├── README.md ├── gradlew.bat └── gradlew /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /data/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /data/consumer-rules.pro: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /domain/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /domain/consumer-rules.pro: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/src/main/java/com/android/template/utils/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/src/main/java/com/android/template/providers/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/src/main/java/com/android/template/utils/extenstions/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /data/src/main/java/com/android/template/data/remote/models/requests/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /data/src/main/java/com/android/template/data/storages/databases/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /data/src/main/java/com/android/template/data/storages/datastore/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huuphuoc1396/android-template/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /app/src/main/java/com/android/template/compose/uistate/models/EmptyEvent.kt: -------------------------------------------------------------------------------- 1 | package com.android.template.compose.uistate.models 2 | 3 | data object EmptyEvent -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huuphuoc1396/android-template/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huuphuoc1396/android-template/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huuphuoc1396/android-template/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/java/com/android/template/compose/uistate/models/EmptyUiState.kt: -------------------------------------------------------------------------------- 1 | package com.android.template.compose.uistate.models 2 | 3 | data object EmptyUiState -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huuphuoc1396/android-template/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huuphuoc1396/android-template/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huuphuoc1396/android-template/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huuphuoc1396/android-template/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /data/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /domain/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea 5 | .DS_Store 6 | /build 7 | /captures 8 | .externalNativeBuild 9 | .cxx 10 | local.properties 11 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huuphuoc1396/android-template/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huuphuoc1396/android-template/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huuphuoc1396/android-template/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/values/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |