From 09210ff6f48b2ef1bdca1ec3af251cf12ad52e00 Mon Sep 17 00:00:00 2001 From: Roman Pytkov Date: Fri, 1 Nov 2024 22:34:08 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9D=D0=BE=D1=80=D0=BC=D0=B0=D0=BB=D1=8C?= =?UTF-8?q?=D0=BD=D0=B0=D1=8F=20=D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D1=8C=D0=BD?= =?UTF-8?q?=D0=B0=D1=8F=20=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82=D1=83=D1=80?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle.kts | 9 ++- .../nullptroma/wallenc/app/MainActivity.kt | 18 +++-- .../wallenc/app/WallencApplication.kt | 4 +- .../app/di/modules/domain/UseCasesModule.kt | 21 ++++++ .../app/ui/screens/main/MainScreenState.kt | 3 - .../app/ui/screens/main/MainViewModel.kt | 11 --- build.gradle.kts | 8 +- data/build.gradle.kts | 6 +- .../nullptroma/wallenc/data/TestImpl.kt | 20 +++++ .../wallenc/data/di/SingletonModule.kt | 18 +++++ domain/build.gradle.kts | 9 ++- .../nullptroma/wallenc/domain/MyClass.kt | 4 - .../wallenc/domain/models/IDirectory.kt | 6 ++ .../nullptroma/wallenc/domain/models/IFile.kt | 5 ++ .../wallenc/domain/models/IMetaInfo.kt | 14 ++++ .../wallenc/domain/storage/IStorage.kt | 16 ++++ .../domain/storage/IStorageAccessor.kt | 32 ++++++++ .../wallenc/domain/usecases/TestUseCase.kt | 7 ++ .../wallenc/domain/utils/DataPackage.kt | 8 ++ .../wallenc/domain/utils/DataPage.kt | 7 ++ gradle/libs.versions.toml | 12 ++- lib/.gitignore | 1 + lib/build.gradle.kts | 9 +++ lib/src/main/java/com/example/lib/MyClass.kt | 5 ++ presentation/.gitignore | 1 + presentation/build.gradle.kts | 74 +++++++++++++++++++ presentation/consumer-rules.pro | 0 presentation/proguard-rules.pro | 21 ++++++ .../presentation/ExampleInstrumentedTest.kt | 24 ++++++ presentation/src/main/AndroidManifest.xml | 4 + .../presentation}/screens/main/MainScreen.kt | 12 +-- .../screens/main/MainScreenState.kt | 3 + .../screens/main/MainViewModel.kt | 14 ++++ .../wallenc/presentation}/theme/Color.kt | 2 +- .../wallenc/presentation}/theme/Theme.kt | 2 +- .../wallenc/presentation}/theme/Type.kt | 2 +- .../wallenc/presentation/ExampleUnitTest.kt | 17 +++++ settings.gradle.kts | 1 + 38 files changed, 381 insertions(+), 49 deletions(-) create mode 100644 app/src/main/java/com/github/nullptroma/wallenc/app/di/modules/domain/UseCasesModule.kt delete mode 100644 app/src/main/java/com/github/nullptroma/wallenc/app/ui/screens/main/MainScreenState.kt delete mode 100644 app/src/main/java/com/github/nullptroma/wallenc/app/ui/screens/main/MainViewModel.kt create mode 100644 data/src/main/java/com/github/nullptroma/wallenc/data/TestImpl.kt create mode 100644 data/src/main/java/com/github/nullptroma/wallenc/data/di/SingletonModule.kt delete mode 100644 domain/src/main/java/com/github/nullptroma/wallenc/domain/MyClass.kt create mode 100644 domain/src/main/java/com/github/nullptroma/wallenc/domain/models/IDirectory.kt create mode 100644 domain/src/main/java/com/github/nullptroma/wallenc/domain/models/IFile.kt create mode 100644 domain/src/main/java/com/github/nullptroma/wallenc/domain/models/IMetaInfo.kt create mode 100644 domain/src/main/java/com/github/nullptroma/wallenc/domain/storage/IStorage.kt create mode 100644 domain/src/main/java/com/github/nullptroma/wallenc/domain/storage/IStorageAccessor.kt create mode 100644 domain/src/main/java/com/github/nullptroma/wallenc/domain/usecases/TestUseCase.kt create mode 100644 domain/src/main/java/com/github/nullptroma/wallenc/domain/utils/DataPackage.kt create mode 100644 domain/src/main/java/com/github/nullptroma/wallenc/domain/utils/DataPage.kt create mode 100644 lib/.gitignore create mode 100644 lib/build.gradle.kts create mode 100644 lib/src/main/java/com/example/lib/MyClass.kt create mode 100644 presentation/.gitignore create mode 100644 presentation/build.gradle.kts create mode 100644 presentation/consumer-rules.pro create mode 100644 presentation/proguard-rules.pro create mode 100644 presentation/src/androidTest/java/com/github/nullptroma/wallenc/presentation/ExampleInstrumentedTest.kt create mode 100644 presentation/src/main/AndroidManifest.xml rename {app/src/main/java/com/github/nullptroma/wallenc/app/ui => presentation/src/main/java/com/github/nullptroma/wallenc/presentation}/screens/main/MainScreen.kt (63%) create mode 100644 presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/MainScreenState.kt create mode 100644 presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/MainViewModel.kt rename {app/src/main/java/com/github/nullptroma/wallenc/app/ui/screens => presentation/src/main/java/com/github/nullptroma/wallenc/presentation}/theme/Color.kt (81%) rename {app/src/main/java/com/github/nullptroma/wallenc/app/ui/screens => presentation/src/main/java/com/github/nullptroma/wallenc/presentation}/theme/Theme.kt (96%) rename {app/src/main/java/com/github/nullptroma/wallenc/app/ui/screens => presentation/src/main/java/com/github/nullptroma/wallenc/presentation}/theme/Type.kt (94%) create mode 100644 presentation/src/test/java/com/github/nullptroma/wallenc/presentation/ExampleUnitTest.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 2630398..4f25f80 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -35,11 +35,11 @@ android { } } compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 } kotlinOptions { - jvmTarget = "1.8" + jvmTarget = "17" } buildFeatures { compose = true @@ -81,6 +81,7 @@ dependencies { androidTestImplementation(platform(libs.androidx.compose.bom)) androidTestImplementation(libs.androidx.ui.test.junit4) - implementation(project(":data")) implementation(project(":domain")) + implementation(project(":presentation")) + runtimeOnly(project(":data")) } \ No newline at end of file diff --git a/app/src/main/java/com/github/nullptroma/wallenc/app/MainActivity.kt b/app/src/main/java/com/github/nullptroma/wallenc/app/MainActivity.kt index 46d55a1..1c29115 100644 --- a/app/src/main/java/com/github/nullptroma/wallenc/app/MainActivity.kt +++ b/app/src/main/java/com/github/nullptroma/wallenc/app/MainActivity.kt @@ -18,7 +18,8 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview -import com.github.nullptroma.wallenc.app.ui.theme.WallencTheme +import com.github.nullptroma.wallenc.presentation.screens.main.MainScreen +import com.github.nullptroma.wallenc.presentation.theme.WallencTheme import com.yandex.authsdk.YandexAuthLoginOptions import com.yandex.authsdk.YandexAuthOptions import com.yandex.authsdk.YandexAuthResult @@ -29,10 +30,10 @@ import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint class MainActivity : ComponentActivity() { + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge() - val sdk = YandexAuthSdk.create(YandexAuthOptions(applicationContext, true)) val launcher = registerForActivityResult(sdk.contract) { result -> handleResult(result) } @@ -41,9 +42,14 @@ class MainActivity : ComponentActivity() { setContent { WallencTheme { Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding -> - Greeting(Modifier.padding(innerPadding)) { - launcher.launch(loginOptions) - } +// Greeting(Modifier.padding(innerPadding)) { +// launcher.launch(loginOptions) +// } + MainScreen( + Modifier.padding( + innerPadding + ) + ) } } } @@ -76,7 +82,7 @@ fun Greeting(modifier: Modifier = Modifier, onClick: () -> Unit) { @Preview(showBackground = true) @Composable fun GreetingPreview() { - WallencTheme { + com.github.nullptroma.wallenc.presentation.theme.WallencTheme { Greeting(Modifier) { } diff --git a/app/src/main/java/com/github/nullptroma/wallenc/app/WallencApplication.kt b/app/src/main/java/com/github/nullptroma/wallenc/app/WallencApplication.kt index a768589..b2fc6c0 100644 --- a/app/src/main/java/com/github/nullptroma/wallenc/app/WallencApplication.kt +++ b/app/src/main/java/com/github/nullptroma/wallenc/app/WallencApplication.kt @@ -4,6 +4,4 @@ import android.app.Application import dagger.hilt.android.HiltAndroidApp @HiltAndroidApp -class WallencApplication : Application() { - -} \ No newline at end of file +class WallencApplication : Application() \ No newline at end of file diff --git a/app/src/main/java/com/github/nullptroma/wallenc/app/di/modules/domain/UseCasesModule.kt b/app/src/main/java/com/github/nullptroma/wallenc/app/di/modules/domain/UseCasesModule.kt new file mode 100644 index 0000000..2bea31f --- /dev/null +++ b/app/src/main/java/com/github/nullptroma/wallenc/app/di/modules/domain/UseCasesModule.kt @@ -0,0 +1,21 @@ +package com.github.nullptroma.wallenc.app.di.modules.domain + +import com.github.nullptroma.wallenc.domain.models.IMetaInfo +import com.github.nullptroma.wallenc.domain.usecases.TestUseCase +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +class UseCasesModule { + var count = 0 + + @Provides + @Singleton + fun provideTestUseCase(meta: IMetaInfo): TestUseCase { + return TestUseCase(meta, count++) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/github/nullptroma/wallenc/app/ui/screens/main/MainScreenState.kt b/app/src/main/java/com/github/nullptroma/wallenc/app/ui/screens/main/MainScreenState.kt deleted file mode 100644 index c91dc4d..0000000 --- a/app/src/main/java/com/github/nullptroma/wallenc/app/ui/screens/main/MainScreenState.kt +++ /dev/null @@ -1,3 +0,0 @@ -package com.github.nullptroma.wallenc.app.ui.screens.main - -data class MainScreenState(val value: String) \ No newline at end of file diff --git a/app/src/main/java/com/github/nullptroma/wallenc/app/ui/screens/main/MainViewModel.kt b/app/src/main/java/com/github/nullptroma/wallenc/app/ui/screens/main/MainViewModel.kt deleted file mode 100644 index 37f974c..0000000 --- a/app/src/main/java/com/github/nullptroma/wallenc/app/ui/screens/main/MainViewModel.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.github.nullptroma.wallenc.app.ui.screens.main - -import androidx.lifecycle.ViewModel -import dagger.hilt.android.lifecycle.HiltViewModel -import javax.inject.Inject - -@HiltViewModel -class MainViewModel @Inject constructor( -): ViewModel() { - val stateFlow = MainScreenState("hello") -} \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 2e23357..828c19d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -8,4 +8,10 @@ plugins { alias(libs.plugins.dagger.hilt) apply false alias(libs.plugins.ksp) apply false alias(libs.plugins.jetbrains.kotlin.jvm) apply false -} \ No newline at end of file +} + +allprojects { + tasks.withType { + options.compilerArgs.addAll(listOf("-Xlint:unchecked", "-Xlint:deprecation")) + } +} diff --git a/data/build.gradle.kts b/data/build.gradle.kts index 4bff425..beaf2ec 100644 --- a/data/build.gradle.kts +++ b/data/build.gradle.kts @@ -26,11 +26,11 @@ android { } } compileOptions { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 } kotlinOptions { - jvmTarget = "1.8" + jvmTarget = "17" } } diff --git a/data/src/main/java/com/github/nullptroma/wallenc/data/TestImpl.kt b/data/src/main/java/com/github/nullptroma/wallenc/data/TestImpl.kt new file mode 100644 index 0000000..4f43e32 --- /dev/null +++ b/data/src/main/java/com/github/nullptroma/wallenc/data/TestImpl.kt @@ -0,0 +1,20 @@ +package com.github.nullptroma.wallenc.data + +import com.github.nullptroma.wallenc.domain.models.IMetaInfo +import java.net.URI +import java.time.LocalDateTime + +class TestImpl : IMetaInfo { + override val name: String + get() = "Hello225" + override val size: Int + get() = 10 + override val isDeleted: Boolean + get() = true + override val isHidden: Boolean + get() = true + override val lastModified: LocalDateTime + get() = TODO("Not yet implemented") + override val path: URI + get() = URI("/Hello/path") +} \ No newline at end of file diff --git a/data/src/main/java/com/github/nullptroma/wallenc/data/di/SingletonModule.kt b/data/src/main/java/com/github/nullptroma/wallenc/data/di/SingletonModule.kt new file mode 100644 index 0000000..66f67ce --- /dev/null +++ b/data/src/main/java/com/github/nullptroma/wallenc/data/di/SingletonModule.kt @@ -0,0 +1,18 @@ +package com.github.nullptroma.wallenc.data.di + +import com.github.nullptroma.wallenc.data.TestImpl +import com.github.nullptroma.wallenc.domain.models.IMetaInfo +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent + +@Module +@InstallIn(SingletonComponent::class) +class SingletonModule { + + @Provides + fun provideIMeta() : IMetaInfo { + return TestImpl() + } +} \ No newline at end of file diff --git a/domain/build.gradle.kts b/domain/build.gradle.kts index a8c8c10..1474413 100644 --- a/domain/build.gradle.kts +++ b/domain/build.gradle.kts @@ -4,6 +4,11 @@ plugins { } java { - sourceCompatibility = JavaVersion.VERSION_21 - targetCompatibility = JavaVersion.VERSION_21 + toolchain { + languageVersion = JavaLanguageVersion.of(17) + } +} + +dependencies { + implementation(libs.kotlinx.coroutines.core) } \ No newline at end of file diff --git a/domain/src/main/java/com/github/nullptroma/wallenc/domain/MyClass.kt b/domain/src/main/java/com/github/nullptroma/wallenc/domain/MyClass.kt deleted file mode 100644 index 2a3e089..0000000 --- a/domain/src/main/java/com/github/nullptroma/wallenc/domain/MyClass.kt +++ /dev/null @@ -1,4 +0,0 @@ -package com.github.nullptroma.wallenc.domain - -class MyClass { -} \ No newline at end of file diff --git a/domain/src/main/java/com/github/nullptroma/wallenc/domain/models/IDirectory.kt b/domain/src/main/java/com/github/nullptroma/wallenc/domain/models/IDirectory.kt new file mode 100644 index 0000000..62cacb0 --- /dev/null +++ b/domain/src/main/java/com/github/nullptroma/wallenc/domain/models/IDirectory.kt @@ -0,0 +1,6 @@ +package com.github.nullptroma.wallenc.domain.models + +interface IDirectory { + val metaInfo: IMetaInfo + val elementsCount: Int +} \ No newline at end of file diff --git a/domain/src/main/java/com/github/nullptroma/wallenc/domain/models/IFile.kt b/domain/src/main/java/com/github/nullptroma/wallenc/domain/models/IFile.kt new file mode 100644 index 0000000..b6ea2ce --- /dev/null +++ b/domain/src/main/java/com/github/nullptroma/wallenc/domain/models/IFile.kt @@ -0,0 +1,5 @@ +package com.github.nullptroma.wallenc.domain.models + +interface IFile { + val metaInfo: IMetaInfo +} \ No newline at end of file diff --git a/domain/src/main/java/com/github/nullptroma/wallenc/domain/models/IMetaInfo.kt b/domain/src/main/java/com/github/nullptroma/wallenc/domain/models/IMetaInfo.kt new file mode 100644 index 0000000..423837b --- /dev/null +++ b/domain/src/main/java/com/github/nullptroma/wallenc/domain/models/IMetaInfo.kt @@ -0,0 +1,14 @@ +package com.github.nullptroma.wallenc.domain.models + +import java.net.URI +import java.time.LocalDateTime + + +interface IMetaInfo { + val name: String + val size: Int + val isDeleted: Boolean + val isHidden: Boolean + val lastModified: LocalDateTime + val path: URI +} \ No newline at end of file diff --git a/domain/src/main/java/com/github/nullptroma/wallenc/domain/storage/IStorage.kt b/domain/src/main/java/com/github/nullptroma/wallenc/domain/storage/IStorage.kt new file mode 100644 index 0000000..36ef727 --- /dev/null +++ b/domain/src/main/java/com/github/nullptroma/wallenc/domain/storage/IStorage.kt @@ -0,0 +1,16 @@ +package com.github.nullptroma.wallenc.domain.storage + +import kotlinx.coroutines.flow.StateFlow + +interface IStorage { + val size: StateFlow + val numberOfFiles: StateFlow + val uuid: String + val name: StateFlow + val totalSpace: StateFlow + val availableSpace: StateFlow + val isAvailable: StateFlow + val accessor: IStorageAccessor + + suspend fun rename(newName: String) +} diff --git a/domain/src/main/java/com/github/nullptroma/wallenc/domain/storage/IStorageAccessor.kt b/domain/src/main/java/com/github/nullptroma/wallenc/domain/storage/IStorageAccessor.kt new file mode 100644 index 0000000..bc7de7b --- /dev/null +++ b/domain/src/main/java/com/github/nullptroma/wallenc/domain/storage/IStorageAccessor.kt @@ -0,0 +1,32 @@ +package com.github.nullptroma.wallenc.domain.storage + +import com.github.nullptroma.wallenc.domain.models.IDirectory +import com.github.nullptroma.wallenc.domain.models.IFile +import com.github.nullptroma.wallenc.domain.utils.DataPackage +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.SharedFlow +import kotlinx.coroutines.flow.StateFlow +import java.net.URI + +interface IStorageAccessor { + val isAvailable: StateFlow + val filesUpdates: SharedFlow + val dirsUpdates: SharedFlow + + suspend fun getAllFiles(): List + suspend fun getFiles(path: URI): List + fun getFilesStream(path: URI): Flow> + + suspend fun getAllDirs(): List + suspend fun getDirs(path: URI): List + fun getDirsStream(path: URI): Flow> + + suspend fun touchFile(path: URI) + suspend fun touchDir(path: URI) + suspend fun delete(path: URI) + suspend fun getFileInfo(path: URI) + suspend fun getDirInfo(path: URI) + suspend fun openWrite(path: URI) + suspend fun openRead(path: URI) + suspend fun moveToTrash(path: URI) +} \ No newline at end of file diff --git a/domain/src/main/java/com/github/nullptroma/wallenc/domain/usecases/TestUseCase.kt b/domain/src/main/java/com/github/nullptroma/wallenc/domain/usecases/TestUseCase.kt new file mode 100644 index 0000000..061fd0c --- /dev/null +++ b/domain/src/main/java/com/github/nullptroma/wallenc/domain/usecases/TestUseCase.kt @@ -0,0 +1,7 @@ +package com.github.nullptroma.wallenc.domain.usecases + +import com.github.nullptroma.wallenc.domain.models.IMetaInfo + +class TestUseCase (val meta: IMetaInfo, val id: Int) { + +} \ No newline at end of file diff --git a/domain/src/main/java/com/github/nullptroma/wallenc/domain/utils/DataPackage.kt b/domain/src/main/java/com/github/nullptroma/wallenc/domain/utils/DataPackage.kt new file mode 100644 index 0000000..b0b0d75 --- /dev/null +++ b/domain/src/main/java/com/github/nullptroma/wallenc/domain/utils/DataPackage.kt @@ -0,0 +1,8 @@ +package com.github.nullptroma.wallenc.domain.utils + +open class DataPackage( + val data: T, + val hasNext: Boolean? = false, + val isLoading: Boolean? = false, + val isError: Boolean? = false +) \ No newline at end of file diff --git a/domain/src/main/java/com/github/nullptroma/wallenc/domain/utils/DataPage.kt b/domain/src/main/java/com/github/nullptroma/wallenc/domain/utils/DataPage.kt new file mode 100644 index 0000000..9bd4bf2 --- /dev/null +++ b/domain/src/main/java/com/github/nullptroma/wallenc/domain/utils/DataPage.kt @@ -0,0 +1,7 @@ +package com.github.nullptroma.wallenc.domain.utils + +class DataPage( + list: List, + val pageLength: Int, + val pageNumber: Int +) : DataPackage>(list) \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 389c18a..72ca82d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -5,22 +5,25 @@ coreKtx = "1.15.0" junit = "4.13.2" junitVersion = "1.2.1" espressoCore = "3.6.1" +kotlinxCoroutinesCore = "1.9.0" lifecycleRuntimeKtx = "2.8.7" activityCompose = "1.9.3" composeBom = "2024.10.01" navigation = "2.8.3" hiltNavigation = "1.2.0" -yandexAuthSdk = "3.1.1" -daggerHilt = "2.51.1" +yandexAuthSdk = "3.1.2" +daggerHilt = "2.52" ksp = "2.0.20-1.0.25" room = "2.6.1" -retrofit = "2.9.0" -gson = "2.10.1" +retrofit = "2.11.0" +gson = "2.11.0" appcompat = "1.7.0" material = "1.12.0" jetbrainsKotlinJvm = "2.0.20" +runtimeAndroid = "1.7.5" [libraries] +kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlinxCoroutinesCore" } navigation = { group = "androidx.navigation", name = "navigation-compose", version.ref = "navigation" } navigation-hilt-compose = { group = "androidx.hilt", name = "hilt-navigation-compose", version.ref = "hiltNavigation" } @@ -59,6 +62,7 @@ androidx-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-man androidx-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4" } androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" } material = { group = "com.google.android.material", name = "material", version.ref = "material" } +androidx-runtime-android = { group = "androidx.compose.runtime", name = "runtime-android", version.ref = "runtimeAndroid" } [plugins] diff --git a/lib/.gitignore b/lib/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/lib/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/lib/build.gradle.kts b/lib/build.gradle.kts new file mode 100644 index 0000000..a8c8c10 --- /dev/null +++ b/lib/build.gradle.kts @@ -0,0 +1,9 @@ +plugins { + id("java-library") + alias(libs.plugins.jetbrains.kotlin.jvm) +} + +java { + sourceCompatibility = JavaVersion.VERSION_21 + targetCompatibility = JavaVersion.VERSION_21 +} \ No newline at end of file diff --git a/lib/src/main/java/com/example/lib/MyClass.kt b/lib/src/main/java/com/example/lib/MyClass.kt new file mode 100644 index 0000000..dd2b7ee --- /dev/null +++ b/lib/src/main/java/com/example/lib/MyClass.kt @@ -0,0 +1,5 @@ +package com.example.lib + +class MyClass { + val test: java.time.LocalDate; +} \ No newline at end of file diff --git a/presentation/.gitignore b/presentation/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/presentation/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/presentation/build.gradle.kts b/presentation/build.gradle.kts new file mode 100644 index 0000000..10ec7ac --- /dev/null +++ b/presentation/build.gradle.kts @@ -0,0 +1,74 @@ +plugins { + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.android) + alias(libs.plugins.compose.compiler) + alias(libs.plugins.dagger.hilt) + alias(libs.plugins.ksp) +} + +android { + namespace = "com.github.nullptroma.wallenc.presentation" + compileSdk = 34 + + defaultConfig { + minSdk = 24 + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + consumerProguardFiles("consumer-rules.pro") + } + + buildTypes { + release { + isMinifyEnabled = false + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } + kotlinOptions { + jvmTarget = "17" + } + buildFeatures { + compose = true + } + + packaging { + resources { + excludes += "/META-INF/{AL2.0,LGPL2.1}" + } + } +} + +dependencies { + implementation(libs.navigation) + implementation(libs.navigation.hilt.compose) + + // Hilt + implementation(libs.dagger.hilt) + ksp(libs.dagger.hilt.compiler) + + implementation(libs.androidx.core.ktx) + implementation(libs.androidx.lifecycle.runtime.ktx) + implementation(libs.androidx.activity.compose) + implementation(platform(libs.androidx.compose.bom)) + + debugImplementation(libs.androidx.ui.tooling) + debugImplementation(libs.androidx.ui.test.manifest) + implementation(libs.androidx.ui) + implementation(libs.androidx.ui.graphics) + implementation(libs.androidx.ui.tooling.preview) + implementation(libs.androidx.material3) + + testImplementation(libs.junit) + androidTestImplementation(libs.androidx.junit) + androidTestImplementation(libs.androidx.espresso.core) + androidTestImplementation(platform(libs.androidx.compose.bom)) + androidTestImplementation(libs.androidx.ui.test.junit4) + + implementation(project(":domain")) +} \ No newline at end of file diff --git a/presentation/consumer-rules.pro b/presentation/consumer-rules.pro new file mode 100644 index 0000000..e69de29 diff --git a/presentation/proguard-rules.pro b/presentation/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/presentation/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/presentation/src/androidTest/java/com/github/nullptroma/wallenc/presentation/ExampleInstrumentedTest.kt b/presentation/src/androidTest/java/com/github/nullptroma/wallenc/presentation/ExampleInstrumentedTest.kt new file mode 100644 index 0000000..fd6d1da --- /dev/null +++ b/presentation/src/androidTest/java/com/github/nullptroma/wallenc/presentation/ExampleInstrumentedTest.kt @@ -0,0 +1,24 @@ +package com.github.nullptroma.wallenc.presentation + +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.ext.junit.runners.AndroidJUnit4 + +import org.junit.Test +import org.junit.runner.RunWith + +import org.junit.Assert.* + +/** + * Instrumented test, which will execute on an Android device. + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +@RunWith(AndroidJUnit4::class) +class ExampleInstrumentedTest { + @Test + fun useAppContext() { + // Context of the app under test. + val appContext = InstrumentationRegistry.getInstrumentation().targetContext + assertEquals("com.github.nullptroma.wallenc.presentation.test", appContext.packageName) + } +} \ No newline at end of file diff --git a/presentation/src/main/AndroidManifest.xml b/presentation/src/main/AndroidManifest.xml new file mode 100644 index 0000000..a5918e6 --- /dev/null +++ b/presentation/src/main/AndroidManifest.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/app/src/main/java/com/github/nullptroma/wallenc/app/ui/screens/main/MainScreen.kt b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/MainScreen.kt similarity index 63% rename from app/src/main/java/com/github/nullptroma/wallenc/app/ui/screens/main/MainScreen.kt rename to presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/MainScreen.kt index 7654da3..d05db3e 100644 --- a/app/src/main/java/com/github/nullptroma/wallenc/app/ui/screens/main/MainScreen.kt +++ b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/MainScreen.kt @@ -1,4 +1,4 @@ -package com.github.nullptroma.wallenc.app.ui.screens.main +package com.github.nullptroma.wallenc.presentation.screens.main import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -6,19 +6,21 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.imePadding import androidx.compose.material3.Text import androidx.compose.material3.TextField -import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.hilt.navigation.compose.hiltViewModel -@Composable -fun MainScreen(modifier: Modifier = Modifier, viewModel: MainViewModel = hiltViewModel()) { +@androidx.compose.runtime.Composable +fun MainScreen(modifier: Modifier = Modifier.Companion, viewModel: MainViewModel = hiltViewModel()) { val state = viewModel.stateFlow Column(modifier = modifier.imePadding()) { Text(text = state.value) - Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.BottomCenter) { + Box( + modifier = Modifier.Companion.fillMaxSize(), + contentAlignment = Alignment.Companion.BottomCenter + ) { TextField("", onValueChange = { }) diff --git a/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/MainScreenState.kt b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/MainScreenState.kt new file mode 100644 index 0000000..8e4e246 --- /dev/null +++ b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/MainScreenState.kt @@ -0,0 +1,3 @@ +package com.github.nullptroma.wallenc.presentation.screens.main + +data class MainScreenState(val value: String) \ No newline at end of file diff --git a/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/MainViewModel.kt b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/MainViewModel.kt new file mode 100644 index 0000000..8e7286c --- /dev/null +++ b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/screens/main/MainViewModel.kt @@ -0,0 +1,14 @@ +package com.github.nullptroma.wallenc.presentation.screens.main + +import androidx.lifecycle.ViewModel +import com.github.nullptroma.wallenc.domain.usecases.TestUseCase +import dagger.hilt.android.lifecycle.HiltViewModel + +@HiltViewModel +class MainViewModel @javax.inject.Inject constructor( + testUseCase: TestUseCase, + testUseCase2: TestUseCase, + testUseCase3: TestUseCase, +): ViewModel() { + val stateFlow = MainScreenState("${testUseCase3.meta.name}, number ${testUseCase3.id}") +} \ No newline at end of file diff --git a/app/src/main/java/com/github/nullptroma/wallenc/app/ui/screens/theme/Color.kt b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/theme/Color.kt similarity index 81% rename from app/src/main/java/com/github/nullptroma/wallenc/app/ui/screens/theme/Color.kt rename to presentation/src/main/java/com/github/nullptroma/wallenc/presentation/theme/Color.kt index eeae900..592b613 100644 --- a/app/src/main/java/com/github/nullptroma/wallenc/app/ui/screens/theme/Color.kt +++ b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/theme/Color.kt @@ -1,4 +1,4 @@ -package com.github.nullptroma.wallenc.app.ui.theme +package com.github.nullptroma.wallenc.presentation.theme import androidx.compose.ui.graphics.Color diff --git a/app/src/main/java/com/github/nullptroma/wallenc/app/ui/screens/theme/Theme.kt b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/theme/Theme.kt similarity index 96% rename from app/src/main/java/com/github/nullptroma/wallenc/app/ui/screens/theme/Theme.kt rename to presentation/src/main/java/com/github/nullptroma/wallenc/presentation/theme/Theme.kt index 9b88026..fd82008 100644 --- a/app/src/main/java/com/github/nullptroma/wallenc/app/ui/screens/theme/Theme.kt +++ b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/theme/Theme.kt @@ -1,4 +1,4 @@ -package com.github.nullptroma.wallenc.app.ui.theme +package com.github.nullptroma.wallenc.presentation.theme import android.os.Build import androidx.compose.foundation.isSystemInDarkTheme diff --git a/app/src/main/java/com/github/nullptroma/wallenc/app/ui/screens/theme/Type.kt b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/theme/Type.kt similarity index 94% rename from app/src/main/java/com/github/nullptroma/wallenc/app/ui/screens/theme/Type.kt rename to presentation/src/main/java/com/github/nullptroma/wallenc/presentation/theme/Type.kt index 231e445..3aacdbc 100644 --- a/app/src/main/java/com/github/nullptroma/wallenc/app/ui/screens/theme/Type.kt +++ b/presentation/src/main/java/com/github/nullptroma/wallenc/presentation/theme/Type.kt @@ -1,4 +1,4 @@ -package com.github.nullptroma.wallenc.app.ui.theme +package com.github.nullptroma.wallenc.presentation.theme import androidx.compose.material3.Typography import androidx.compose.ui.text.TextStyle diff --git a/presentation/src/test/java/com/github/nullptroma/wallenc/presentation/ExampleUnitTest.kt b/presentation/src/test/java/com/github/nullptroma/wallenc/presentation/ExampleUnitTest.kt new file mode 100644 index 0000000..2673a60 --- /dev/null +++ b/presentation/src/test/java/com/github/nullptroma/wallenc/presentation/ExampleUnitTest.kt @@ -0,0 +1,17 @@ +package com.github.nullptroma.wallenc.presentation + +import org.junit.Test + +import org.junit.Assert.* + +/** + * Example local unit test, which will execute on the development machine (host). + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +class ExampleUnitTest { + @Test + fun addition_isCorrect() { + assertEquals(4, 2 + 2) + } +} \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index 9a05bb0..bcf0a00 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -23,3 +23,4 @@ rootProject.name = "Wallenc" include(":app") include(":data") include(":domain") +include(":presentation")