From 09cc4c7801a454d7e7cabd4a369e8edf20aa7f98 Mon Sep 17 00:00:00 2001 From: T8RIN Date: Wed, 20 Mar 2024 17:50:06 +0300 Subject: [PATCH] more modularization --- app/build.gradle.kts | 2 +- .../app/presentation/AppActivity.kt | 14 ++--- .../ImageToolboxLibraryFeaturePlugin.kt | 1 + .../core/ui/widget/other}/NavigationItem.kt | 2 +- feature/easter-egg/.gitignore | 1 + feature/easter-egg/build.gradle.kts | 24 ++++++++ .../easter-egg/src/main/AndroidManifest.xml | 4 ++ .../presentation}/EasterEggScreen.kt | 2 +- feature/main/build.gradle.kts | 24 -------- .../feature/main/presentation/MainScreen.kt | 26 ++++++--- .../components/MainScreenContent.kt | 1 + feature/root/.gitignore | 1 + feature/root/build.gradle.kts | 55 +++++++++++++++++++ feature/root/src/main/AndroidManifest.xml | 4 ++ .../feature/root/presentation/RootContent.kt | 26 ++++----- .../presentation/components/AppExitDialog.kt | 4 +- .../components/EditPresetsSheet.kt | 4 +- .../components/FirstLaunchSetupDialog.kt | 4 +- .../components/GithubReviewDialog.kt | 4 +- .../components/PermissionDialog.kt | 4 +- .../ScreenBasedMaxBrightnessEnforcement.kt | 6 +- .../presentation/components/ScreenSelector.kt | 13 +++-- .../presentation/viewModel/RootViewModel.kt} | 8 +-- settings.gradle.kts | 2 + 24 files changed, 158 insertions(+), 78 deletions(-) rename {feature/main/src/main/java/ru/tech/imageresizershrinker/feature/main/presentation/components => core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/widget/other}/NavigationItem.kt (99%) create mode 100644 feature/easter-egg/.gitignore create mode 100644 feature/easter-egg/build.gradle.kts create mode 100644 feature/easter-egg/src/main/AndroidManifest.xml rename feature/{main/src/main/java/ru/tech/imageresizershrinker/feature/main/presentation/components => easter-egg/src/main/java/ru/tech/imageresizershrinker/feature/easter_egg/presentation}/EasterEggScreen.kt (99%) create mode 100644 feature/root/.gitignore create mode 100644 feature/root/build.gradle.kts create mode 100644 feature/root/src/main/AndroidManifest.xml rename app/src/main/java/ru/tech/imageresizershrinker/app/presentation/components/AppContent.kt => feature/root/src/main/java/ru/tech/imageresizershrinker/feature/root/presentation/RootContent.kt (92%) rename feature/{main/src/main/java/ru/tech/imageresizershrinker/feature/main => root/src/main/java/ru/tech/imageresizershrinker/feature/root}/presentation/components/AppExitDialog.kt (96%) rename feature/{main/src/main/java/ru/tech/imageresizershrinker/feature/main => root/src/main/java/ru/tech/imageresizershrinker/feature/root}/presentation/components/EditPresetsSheet.kt (99%) rename feature/{main/src/main/java/ru/tech/imageresizershrinker/feature/main => root/src/main/java/ru/tech/imageresizershrinker/feature/root}/presentation/components/FirstLaunchSetupDialog.kt (98%) rename feature/{main/src/main/java/ru/tech/imageresizershrinker/feature/main => root/src/main/java/ru/tech/imageresizershrinker/feature/root}/presentation/components/GithubReviewDialog.kt (96%) rename feature/{main/src/main/java/ru/tech/imageresizershrinker/feature/main => root/src/main/java/ru/tech/imageresizershrinker/feature/root}/presentation/components/PermissionDialog.kt (97%) rename feature/{main/src/main/java/ru/tech/imageresizershrinker/feature/main => root/src/main/java/ru/tech/imageresizershrinker/feature/root}/presentation/components/ScreenBasedMaxBrightnessEnforcement.kt (93%) rename feature/{main/src/main/java/ru/tech/imageresizershrinker/feature/main => root/src/main/java/ru/tech/imageresizershrinker/feature/root}/presentation/components/ScreenSelector.kt (95%) rename feature/{main/src/main/java/ru/tech/imageresizershrinker/feature/main/presentation/viewModel/MainViewModel.kt => root/src/main/java/ru/tech/imageresizershrinker/feature/root/presentation/viewModel/RootViewModel.kt} (97%) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 065a67e8a..b438c453e 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -135,7 +135,7 @@ dependencies { implementation(projects.core.filters) implementation(projects.core.crash) - implementation(projects.feature.main) + implementation(projects.feature.root) implementation(projects.feature.mediaPicker) implementation(projects.feature.quickTiles) } diff --git a/app/src/main/java/ru/tech/imageresizershrinker/app/presentation/AppActivity.kt b/app/src/main/java/ru/tech/imageresizershrinker/app/presentation/AppActivity.kt index c65f1bf79..ff730ec09 100644 --- a/app/src/main/java/ru/tech/imageresizershrinker/app/presentation/AppActivity.kt +++ b/app/src/main/java/ru/tech/imageresizershrinker/app/presentation/AppActivity.kt @@ -18,26 +18,20 @@ package ru.tech.imageresizershrinker.app.presentation import android.content.Intent -import android.graphics.Bitmap import android.os.Bundle import androidx.activity.viewModels import dagger.hilt.android.AndroidEntryPoint import dev.olshevski.navigation.reimagined.navigate -import ru.tech.imageresizershrinker.app.presentation.components.AppContent import ru.tech.imageresizershrinker.core.crash.components.M3Activity -import ru.tech.imageresizershrinker.core.filters.domain.FavoriteFiltersInteractor import ru.tech.imageresizershrinker.core.ui.utils.helper.ContextUtils.parseImageFromIntent import ru.tech.imageresizershrinker.core.ui.widget.utils.setContentWithWindowSizeClass -import ru.tech.imageresizershrinker.feature.main.presentation.viewModel.MainViewModel -import javax.inject.Inject +import ru.tech.imageresizershrinker.feature.root.presentation.RootContent +import ru.tech.imageresizershrinker.feature.root.presentation.viewModel.RootViewModel @AndroidEntryPoint class AppActivity : M3Activity() { - private val viewModel by viewModels() - - @Inject - lateinit var favoriteFiltersInteractor: FavoriteFiltersInteractor + private val viewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -45,7 +39,7 @@ class AppActivity : M3Activity() { parseImage(intent) setContentWithWindowSizeClass { - AppContent(viewModel = viewModel) + RootContent(viewModel = viewModel) } } diff --git a/build-logic/convention/src/main/kotlin/ImageToolboxLibraryFeaturePlugin.kt b/build-logic/convention/src/main/kotlin/ImageToolboxLibraryFeaturePlugin.kt index 9b9ccee14..26872d308 100644 --- a/build-logic/convention/src/main/kotlin/ImageToolboxLibraryFeaturePlugin.kt +++ b/build-logic/convention/src/main/kotlin/ImageToolboxLibraryFeaturePlugin.kt @@ -34,6 +34,7 @@ class ImageToolboxLibraryFeaturePlugin : Plugin { "implementation"(project(":core:resources")) "implementation"(project(":core:settings")) "implementation"(project(":core:di")) + "implementation"(project(":core:crash")) } } } diff --git a/feature/main/src/main/java/ru/tech/imageresizershrinker/feature/main/presentation/components/NavigationItem.kt b/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/widget/other/NavigationItem.kt similarity index 99% rename from feature/main/src/main/java/ru/tech/imageresizershrinker/feature/main/presentation/components/NavigationItem.kt rename to core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/widget/other/NavigationItem.kt index 2b89a6188..f3016b6cb 100644 --- a/feature/main/src/main/java/ru/tech/imageresizershrinker/feature/main/presentation/components/NavigationItem.kt +++ b/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/widget/other/NavigationItem.kt @@ -17,7 +17,7 @@ @file:Suppress("ConstPropertyName") -package ru.tech.imageresizershrinker.feature.main.presentation.components +package ru.tech.imageresizershrinker.core.ui.widget.other import androidx.compose.animation.animateColorAsState import androidx.compose.animation.core.animateFloatAsState diff --git a/feature/easter-egg/.gitignore b/feature/easter-egg/.gitignore new file mode 100644 index 000000000..42afabfd2 --- /dev/null +++ b/feature/easter-egg/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/feature/easter-egg/build.gradle.kts b/feature/easter-egg/build.gradle.kts new file mode 100644 index 000000000..f180bf55b --- /dev/null +++ b/feature/easter-egg/build.gradle.kts @@ -0,0 +1,24 @@ +/* + * ImageToolbox is an image editor for android + * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * You should have received a copy of the Apache License + * along with this program. If not, see . + */ + +plugins { + alias(libs.plugins.image.toolbox.library) + alias(libs.plugins.image.toolbox.feature) + alias(libs.plugins.image.toolbox.compose) +} + +android.namespace = "ru.tech.imageresizershrinker.feature.easter_egg" \ No newline at end of file diff --git a/feature/easter-egg/src/main/AndroidManifest.xml b/feature/easter-egg/src/main/AndroidManifest.xml new file mode 100644 index 000000000..44008a433 --- /dev/null +++ b/feature/easter-egg/src/main/AndroidManifest.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/feature/main/src/main/java/ru/tech/imageresizershrinker/feature/main/presentation/components/EasterEggScreen.kt b/feature/easter-egg/src/main/java/ru/tech/imageresizershrinker/feature/easter_egg/presentation/EasterEggScreen.kt similarity index 99% rename from feature/main/src/main/java/ru/tech/imageresizershrinker/feature/main/presentation/components/EasterEggScreen.kt rename to feature/easter-egg/src/main/java/ru/tech/imageresizershrinker/feature/easter_egg/presentation/EasterEggScreen.kt index 8a4ff9440..7a2a48097 100644 --- a/feature/main/src/main/java/ru/tech/imageresizershrinker/feature/main/presentation/components/EasterEggScreen.kt +++ b/feature/easter-egg/src/main/java/ru/tech/imageresizershrinker/feature/easter_egg/presentation/EasterEggScreen.kt @@ -17,7 +17,7 @@ @file:Suppress("KotlinConstantConditions") -package ru.tech.imageresizershrinker.feature.main.presentation.components +package ru.tech.imageresizershrinker.feature.easter_egg.presentation import androidx.activity.compose.BackHandler import androidx.compose.animation.core.animateFloatAsState diff --git a/feature/main/build.gradle.kts b/feature/main/build.gradle.kts index 21c548f06..6db56f7f3 100644 --- a/feature/main/build.gradle.kts +++ b/feature/main/build.gradle.kts @@ -25,29 +25,5 @@ plugins { android.namespace = "ru.tech.imageresizershrinker.feature.main" dependencies { - implementation(projects.feature.loadNetImage) - implementation(projects.feature.crop) - implementation(projects.feature.limitsResize) - implementation(projects.feature.cipher) - implementation(projects.feature.imagePreview) - implementation(projects.feature.bytesResize) - implementation(projects.feature.compare) - implementation(projects.feature.deleteExif) - implementation(projects.feature.generatePalette) - implementation(projects.feature.resizeConvert) - implementation(projects.feature.pdfTools) - implementation(projects.feature.singleEdit) - implementation(projects.feature.eraseBackground) - implementation(projects.feature.draw) - implementation(projects.feature.filters) - implementation(projects.feature.imageStitch) - implementation(projects.feature.pickColor) - implementation(projects.feature.recognizeText) - implementation(projects.feature.gradientMaker) - implementation(projects.feature.watermarking) - implementation(projects.feature.gifTools) - implementation(projects.feature.apngTools) - implementation(projects.feature.zip) - implementation(projects.feature.jxlTools) implementation(projects.feature.settings) } \ No newline at end of file diff --git a/feature/main/src/main/java/ru/tech/imageresizershrinker/feature/main/presentation/MainScreen.kt b/feature/main/src/main/java/ru/tech/imageresizershrinker/feature/main/presentation/MainScreen.kt index 5b54eac94..240543132 100644 --- a/feature/main/src/main/java/ru/tech/imageresizershrinker/feature/main/presentation/MainScreen.kt +++ b/feature/main/src/main/java/ru/tech/imageresizershrinker/feature/main/presentation/MainScreen.kt @@ -17,6 +17,7 @@ package ru.tech.imageresizershrinker.feature.main.presentation +import android.net.Uri import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.core.tween import androidx.compose.animation.fadeIn @@ -71,13 +72,24 @@ import ru.tech.imageresizershrinker.core.ui.widget.other.LocalToastHostState import ru.tech.imageresizershrinker.core.ui.widget.utils.LocalWindowSizeClass import ru.tech.imageresizershrinker.feature.main.presentation.components.MainScreenContent import ru.tech.imageresizershrinker.feature.main.presentation.components.MainScreenDrawerContent -import ru.tech.imageresizershrinker.feature.main.presentation.viewModel.MainViewModel import ru.tech.imageresizershrinker.feature.settings.presentation.SettingsScreen @Composable fun MainScreen( - viewModel: MainViewModel + onTryGetUpdate: ( + newRequest: Boolean, + installedFromMarket: Boolean, + onNoUpdates: () -> Unit + ) -> Unit, + updateAvailable: Boolean, + updateUris: (List) -> Unit ) { + fun tryGetUpdate( + newRequest: Boolean, + installedFromMarket: Boolean, + onNoUpdates: () -> Unit + ) = onTryGetUpdate(newRequest, installedFromMarket, onNoUpdates) + val settingsState = LocalSettingsState.current val isGrid = LocalWindowSizeClass.current.widthSizeClass != WindowWidthSizeClass.Compact @@ -98,8 +110,8 @@ fun MainScreen( settingsBlockContent = { settingsSearchKeyword -> SettingsScreen( searchKeyword = settingsSearchKeyword, - onTryGetUpdate = viewModel::tryGetUpdate, - updateAvailable = viewModel.updateAvailable + onTryGetUpdate = ::tryGetUpdate, + updateAvailable = updateAvailable ) } ) @@ -121,9 +133,9 @@ fun MainScreen( onShowSnowfall = { showSnowfall = true }, - onGetClipList = viewModel::updateUris, + onGetClipList = updateUris, onTryGetUpdate = { - viewModel.tryGetUpdate( + tryGetUpdate( newRequest = true, installedFromMarket = context.isInstalledFromPlayStore(), onNoUpdates = { @@ -136,7 +148,7 @@ fun MainScreen( } ) }, - updateAvailable = viewModel.updateAvailable + updateAvailable = updateAvailable ) } diff --git a/feature/main/src/main/java/ru/tech/imageresizershrinker/feature/main/presentation/components/MainScreenContent.kt b/feature/main/src/main/java/ru/tech/imageresizershrinker/feature/main/presentation/components/MainScreenContent.kt index a96ae66ef..095410113 100644 --- a/feature/main/src/main/java/ru/tech/imageresizershrinker/feature/main/presentation/components/MainScreenContent.kt +++ b/feature/main/src/main/java/ru/tech/imageresizershrinker/feature/main/presentation/components/MainScreenContent.kt @@ -148,6 +148,7 @@ import ru.tech.imageresizershrinker.core.ui.widget.other.BoxAnimatedVisibility import ru.tech.imageresizershrinker.core.ui.widget.other.EnhancedTopAppBar import ru.tech.imageresizershrinker.core.ui.widget.other.EnhancedTopAppBarType import ru.tech.imageresizershrinker.core.ui.widget.other.LocalToastHostState +import ru.tech.imageresizershrinker.core.ui.widget.other.NavigationItem import ru.tech.imageresizershrinker.core.ui.widget.other.TopAppBarEmoji import ru.tech.imageresizershrinker.core.ui.widget.preferences.PreferenceItemOverload import ru.tech.imageresizershrinker.core.ui.widget.text.Marquee diff --git a/feature/root/.gitignore b/feature/root/.gitignore new file mode 100644 index 000000000..42afabfd2 --- /dev/null +++ b/feature/root/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/feature/root/build.gradle.kts b/feature/root/build.gradle.kts new file mode 100644 index 000000000..a4e3011b2 --- /dev/null +++ b/feature/root/build.gradle.kts @@ -0,0 +1,55 @@ +/* + * ImageToolbox is an image editor for android + * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * You should have received a copy of the Apache License + * along with this program. If not, see . + */ + +plugins { + alias(libs.plugins.image.toolbox.library) + alias(libs.plugins.image.toolbox.feature) + alias(libs.plugins.image.toolbox.hilt) + alias(libs.plugins.image.toolbox.compose) +} + +android.namespace = "ru.tech.imageresizershrinker.feature.root" + +dependencies { + implementation(projects.feature.main) + implementation(projects.feature.loadNetImage) + implementation(projects.feature.crop) + implementation(projects.feature.limitsResize) + implementation(projects.feature.cipher) + implementation(projects.feature.imagePreview) + implementation(projects.feature.bytesResize) + implementation(projects.feature.compare) + implementation(projects.feature.deleteExif) + implementation(projects.feature.generatePalette) + implementation(projects.feature.resizeConvert) + implementation(projects.feature.pdfTools) + implementation(projects.feature.singleEdit) + implementation(projects.feature.eraseBackground) + implementation(projects.feature.draw) + implementation(projects.feature.filters) + implementation(projects.feature.imageStitch) + implementation(projects.feature.pickColor) + implementation(projects.feature.recognizeText) + implementation(projects.feature.gradientMaker) + implementation(projects.feature.watermarking) + implementation(projects.feature.gifTools) + implementation(projects.feature.apngTools) + implementation(projects.feature.zip) + implementation(projects.feature.jxlTools) + implementation(projects.feature.settings) + implementation(projects.feature.easterEgg) +} \ No newline at end of file diff --git a/feature/root/src/main/AndroidManifest.xml b/feature/root/src/main/AndroidManifest.xml new file mode 100644 index 000000000..44008a433 --- /dev/null +++ b/feature/root/src/main/AndroidManifest.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/app/src/main/java/ru/tech/imageresizershrinker/app/presentation/components/AppContent.kt b/feature/root/src/main/java/ru/tech/imageresizershrinker/feature/root/presentation/RootContent.kt similarity index 92% rename from app/src/main/java/ru/tech/imageresizershrinker/app/presentation/components/AppContent.kt rename to feature/root/src/main/java/ru/tech/imageresizershrinker/feature/root/presentation/RootContent.kt index 81e9acf44..893a868c2 100644 --- a/app/src/main/java/ru/tech/imageresizershrinker/app/presentation/components/AppContent.kt +++ b/feature/root/src/main/java/ru/tech/imageresizershrinker/feature/root/presentation/RootContent.kt @@ -15,12 +15,13 @@ * along with this program. If not, see . */ -package ru.tech.imageresizershrinker.app.presentation.components +package ru.tech.imageresizershrinker.feature.root.presentation import android.content.ClipData import android.content.res.Configuration import android.os.Build import android.view.WindowManager +import androidx.activity.ComponentActivity import androidx.activity.compose.BackHandler import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material3.Surface @@ -45,7 +46,6 @@ import com.google.accompanist.systemuicontroller.rememberSystemUiController import dev.olshevski.navigation.reimagined.NavAction import dev.olshevski.navigation.reimagined.navigate import kotlinx.coroutines.delay -import ru.tech.imageresizershrinker.app.presentation.AppActivity import ru.tech.imageresizershrinker.core.crash.components.GlobalExceptionHandler import ru.tech.imageresizershrinker.core.filters.presentation.utils.LocalFavoriteFiltersInteractor import ru.tech.imageresizershrinker.core.resources.emoji.Emoji @@ -66,19 +66,19 @@ import ru.tech.imageresizershrinker.core.ui.widget.other.LocalToastHostState import ru.tech.imageresizershrinker.core.ui.widget.other.ToastHost import ru.tech.imageresizershrinker.core.ui.widget.sheets.ProcessImagesPreferenceSheet import ru.tech.imageresizershrinker.core.ui.widget.utils.LocalImageLoader -import ru.tech.imageresizershrinker.feature.main.presentation.components.AppExitDialog -import ru.tech.imageresizershrinker.feature.main.presentation.components.EditPresetsSheet -import ru.tech.imageresizershrinker.feature.main.presentation.components.FirstLaunchSetupDialog -import ru.tech.imageresizershrinker.feature.main.presentation.components.GithubReviewDialog -import ru.tech.imageresizershrinker.feature.main.presentation.components.PermissionDialog -import ru.tech.imageresizershrinker.feature.main.presentation.components.ScreenSelector -import ru.tech.imageresizershrinker.feature.main.presentation.viewModel.MainViewModel +import ru.tech.imageresizershrinker.feature.root.presentation.components.AppExitDialog +import ru.tech.imageresizershrinker.feature.root.presentation.components.EditPresetsSheet +import ru.tech.imageresizershrinker.feature.root.presentation.components.FirstLaunchSetupDialog +import ru.tech.imageresizershrinker.feature.root.presentation.components.GithubReviewDialog +import ru.tech.imageresizershrinker.feature.root.presentation.components.PermissionDialog +import ru.tech.imageresizershrinker.feature.root.presentation.components.ScreenSelector +import ru.tech.imageresizershrinker.feature.root.presentation.viewModel.RootViewModel @Composable -internal fun AppContent( - viewModel: MainViewModel +fun RootContent( + viewModel: RootViewModel ) { - val context = LocalContext.current as AppActivity + val context = LocalContext.current as ComponentActivity var showExitDialog by rememberSaveable { mutableStateOf(false) } val editPresetsState = rememberSaveable { mutableStateOf(false) } @@ -134,7 +134,7 @@ internal fun AppContent( LocalConfettiHostState provides rememberConfettiHostState(), LocalImageLoader provides viewModel.imageLoader, LocalHapticFeedback provides customHapticFeedback(viewModel.settingsState.hapticsStrength), - LocalFavoriteFiltersInteractor provides context.favoriteFiltersInteractor + LocalFavoriteFiltersInteractor provides viewModel.favoriteFiltersInteractor ) { val showSelectSheet = rememberSaveable(viewModel.showSelectDialog) { mutableStateOf(viewModel.showSelectDialog) diff --git a/feature/main/src/main/java/ru/tech/imageresizershrinker/feature/main/presentation/components/AppExitDialog.kt b/feature/root/src/main/java/ru/tech/imageresizershrinker/feature/root/presentation/components/AppExitDialog.kt similarity index 96% rename from feature/main/src/main/java/ru/tech/imageresizershrinker/feature/main/presentation/components/AppExitDialog.kt rename to feature/root/src/main/java/ru/tech/imageresizershrinker/feature/root/presentation/components/AppExitDialog.kt index 12a606275..e8b8992d0 100644 --- a/feature/main/src/main/java/ru/tech/imageresizershrinker/feature/main/presentation/components/AppExitDialog.kt +++ b/feature/root/src/main/java/ru/tech/imageresizershrinker/feature/root/presentation/components/AppExitDialog.kt @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package ru.tech.imageresizershrinker.feature.main.presentation.components +package ru.tech.imageresizershrinker.feature.root.presentation.components import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.DoorBack @@ -34,7 +34,7 @@ import ru.tech.imageresizershrinker.core.ui.widget.buttons.EnhancedButton import ru.tech.imageresizershrinker.core.ui.widget.modifier.alertDialogBorder @Composable -fun AppExitDialog( +internal fun AppExitDialog( onDismiss: () -> Unit, visible: Boolean ) { diff --git a/feature/main/src/main/java/ru/tech/imageresizershrinker/feature/main/presentation/components/EditPresetsSheet.kt b/feature/root/src/main/java/ru/tech/imageresizershrinker/feature/root/presentation/components/EditPresetsSheet.kt similarity index 99% rename from feature/main/src/main/java/ru/tech/imageresizershrinker/feature/main/presentation/components/EditPresetsSheet.kt rename to feature/root/src/main/java/ru/tech/imageresizershrinker/feature/root/presentation/components/EditPresetsSheet.kt index d02ffa72a..4eb7a6358 100644 --- a/feature/main/src/main/java/ru/tech/imageresizershrinker/feature/main/presentation/components/EditPresetsSheet.kt +++ b/feature/root/src/main/java/ru/tech/imageresizershrinker/feature/root/presentation/components/EditPresetsSheet.kt @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package ru.tech.imageresizershrinker.feature.main.presentation.components +package ru.tech.imageresizershrinker.feature.root.presentation.components import androidx.compose.animation.AnimatedContent import androidx.compose.animation.fadeIn @@ -66,7 +66,7 @@ import ru.tech.imageresizershrinker.core.ui.widget.text.TitleItem @OptIn(ExperimentalLayoutApi::class) @Composable -fun EditPresetsSheet( +internal fun EditPresetsSheet( editPresetsState: MutableState, updatePresets: (List) -> Unit ) { diff --git a/feature/main/src/main/java/ru/tech/imageresizershrinker/feature/main/presentation/components/FirstLaunchSetupDialog.kt b/feature/root/src/main/java/ru/tech/imageresizershrinker/feature/root/presentation/components/FirstLaunchSetupDialog.kt similarity index 98% rename from feature/main/src/main/java/ru/tech/imageresizershrinker/feature/main/presentation/components/FirstLaunchSetupDialog.kt rename to feature/root/src/main/java/ru/tech/imageresizershrinker/feature/root/presentation/components/FirstLaunchSetupDialog.kt index 1d8eee773..f7699437b 100644 --- a/feature/main/src/main/java/ru/tech/imageresizershrinker/feature/main/presentation/components/FirstLaunchSetupDialog.kt +++ b/feature/root/src/main/java/ru/tech/imageresizershrinker/feature/root/presentation/components/FirstLaunchSetupDialog.kt @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package ru.tech.imageresizershrinker.feature.main.presentation.components +package ru.tech.imageresizershrinker.feature.root.presentation.components import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer @@ -59,7 +59,7 @@ import ru.tech.imageresizershrinker.core.ui.widget.preferences.PreferenceRowSwit @Suppress("KotlinConstantConditions") @Composable -fun FirstLaunchSetupDialog( +internal fun FirstLaunchSetupDialog( toggleAllowBetas: (Boolean) -> Unit, toggleShowUpdateDialog: () -> Unit ) { diff --git a/feature/main/src/main/java/ru/tech/imageresizershrinker/feature/main/presentation/components/GithubReviewDialog.kt b/feature/root/src/main/java/ru/tech/imageresizershrinker/feature/root/presentation/components/GithubReviewDialog.kt similarity index 96% rename from feature/main/src/main/java/ru/tech/imageresizershrinker/feature/main/presentation/components/GithubReviewDialog.kt rename to feature/root/src/main/java/ru/tech/imageresizershrinker/feature/root/presentation/components/GithubReviewDialog.kt index 85eccdb81..65fe7b030 100644 --- a/feature/main/src/main/java/ru/tech/imageresizershrinker/feature/main/presentation/components/GithubReviewDialog.kt +++ b/feature/root/src/main/java/ru/tech/imageresizershrinker/feature/root/presentation/components/GithubReviewDialog.kt @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package ru.tech.imageresizershrinker.feature.main.presentation.components +package ru.tech.imageresizershrinker.feature.root.presentation.components import androidx.compose.material.icons.Icons import androidx.compose.material.icons.rounded.StarRate @@ -33,7 +33,7 @@ import ru.tech.imageresizershrinker.core.ui.widget.buttons.EnhancedButton import ru.tech.imageresizershrinker.core.ui.widget.modifier.alertDialogBorder @Composable -fun GithubReviewDialog( +internal fun GithubReviewDialog( onDismiss: () -> Unit, showNotShowAgainButton: Boolean, onNotShowAgain: () -> Unit diff --git a/feature/main/src/main/java/ru/tech/imageresizershrinker/feature/main/presentation/components/PermissionDialog.kt b/feature/root/src/main/java/ru/tech/imageresizershrinker/feature/root/presentation/components/PermissionDialog.kt similarity index 97% rename from feature/main/src/main/java/ru/tech/imageresizershrinker/feature/main/presentation/components/PermissionDialog.kt rename to feature/root/src/main/java/ru/tech/imageresizershrinker/feature/root/presentation/components/PermissionDialog.kt index ea17f86c9..035fe3ea3 100644 --- a/feature/main/src/main/java/ru/tech/imageresizershrinker/feature/main/presentation/components/PermissionDialog.kt +++ b/feature/root/src/main/java/ru/tech/imageresizershrinker/feature/root/presentation/components/PermissionDialog.kt @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package ru.tech.imageresizershrinker.feature.main.presentation.components +package ru.tech.imageresizershrinker.feature.root.presentation.components import android.Manifest import android.app.Activity @@ -48,7 +48,7 @@ import ru.tech.imageresizershrinker.core.ui.widget.buttons.EnhancedButton import ru.tech.imageresizershrinker.core.ui.widget.modifier.alertDialogBorder @Composable -fun PermissionDialog() { +internal fun PermissionDialog() { val context = LocalContext.current as Activity val settingsState = LocalSettingsState.current diff --git a/feature/main/src/main/java/ru/tech/imageresizershrinker/feature/main/presentation/components/ScreenBasedMaxBrightnessEnforcement.kt b/feature/root/src/main/java/ru/tech/imageresizershrinker/feature/root/presentation/components/ScreenBasedMaxBrightnessEnforcement.kt similarity index 93% rename from feature/main/src/main/java/ru/tech/imageresizershrinker/feature/main/presentation/components/ScreenBasedMaxBrightnessEnforcement.kt rename to feature/root/src/main/java/ru/tech/imageresizershrinker/feature/root/presentation/components/ScreenBasedMaxBrightnessEnforcement.kt index e2eb5d1e7..a1530e4d2 100644 --- a/feature/main/src/main/java/ru/tech/imageresizershrinker/feature/main/presentation/components/ScreenBasedMaxBrightnessEnforcement.kt +++ b/feature/root/src/main/java/ru/tech/imageresizershrinker/feature/root/presentation/components/ScreenBasedMaxBrightnessEnforcement.kt @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package ru.tech.imageresizershrinker.feature.main.presentation.components +package ru.tech.imageresizershrinker.feature.root.presentation.components import android.view.WindowManager import androidx.activity.ComponentActivity @@ -27,7 +27,9 @@ import ru.tech.imageresizershrinker.core.settings.presentation.LocalSettingsStat import ru.tech.imageresizershrinker.core.ui.utils.navigation.Screen @Composable -fun ScreenBasedMaxBrightnessEnforcement(screen: Screen?) { +internal fun ScreenBasedMaxBrightnessEnforcement( + screen: Screen? +) { val context = LocalContext.current as ComponentActivity val listToForceBrightness = LocalSettingsState.current.screenListWithMaxBrightnessEnforcement diff --git a/feature/main/src/main/java/ru/tech/imageresizershrinker/feature/main/presentation/components/ScreenSelector.kt b/feature/root/src/main/java/ru/tech/imageresizershrinker/feature/root/presentation/components/ScreenSelector.kt similarity index 95% rename from feature/main/src/main/java/ru/tech/imageresizershrinker/feature/main/presentation/components/ScreenSelector.kt rename to feature/root/src/main/java/ru/tech/imageresizershrinker/feature/root/presentation/components/ScreenSelector.kt index 511e6ab2c..508e30abf 100644 --- a/feature/main/src/main/java/ru/tech/imageresizershrinker/feature/main/presentation/components/ScreenSelector.kt +++ b/feature/root/src/main/java/ru/tech/imageresizershrinker/feature/root/presentation/components/ScreenSelector.kt @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package ru.tech.imageresizershrinker.feature.main.presentation.components +package ru.tech.imageresizershrinker.feature.root.presentation.components import androidx.compose.animation.core.CubicBezierEasing import androidx.compose.animation.core.tween @@ -46,6 +46,7 @@ import ru.tech.imageresizershrinker.feature.compare.presentation.CompareScreen import ru.tech.imageresizershrinker.feature.crop.presentation.CropScreen import ru.tech.imageresizershrinker.feature.delete_exif.presentation.DeleteExifScreen import ru.tech.imageresizershrinker.feature.draw.presentation.DrawScreen +import ru.tech.imageresizershrinker.feature.easter_egg.presentation.EasterEggScreen import ru.tech.imageresizershrinker.feature.erase_background.presentation.EraseBackgroundScreen import ru.tech.imageresizershrinker.feature.filters.presentation.FiltersScreen import ru.tech.imageresizershrinker.feature.generate_palette.presentation.GeneratePaletteScreen @@ -57,18 +58,18 @@ import ru.tech.imageresizershrinker.feature.jxl_tools.presentation.JxlToolsScree import ru.tech.imageresizershrinker.feature.limits_resize.presentation.LimitsResizeScreen import ru.tech.imageresizershrinker.feature.load_net_image.presentation.LoadNetImageScreen import ru.tech.imageresizershrinker.feature.main.presentation.MainScreen -import ru.tech.imageresizershrinker.feature.main.presentation.viewModel.MainViewModel import ru.tech.imageresizershrinker.feature.pdf_tools.presentation.PdfToolsScreen import ru.tech.imageresizershrinker.feature.pick_color.presentation.PickColorFromImageScreen import ru.tech.imageresizershrinker.feature.recognize.text.presentation.RecognizeTextScreen import ru.tech.imageresizershrinker.feature.resize_convert.presentation.ResizeAndConvertScreen +import ru.tech.imageresizershrinker.feature.root.presentation.viewModel.RootViewModel import ru.tech.imageresizershrinker.feature.single_edit.presentation.SingleEditScreen import ru.tech.imageresizershrinker.feature.watermarking.presentation.WatermarkingScreen import ru.tech.imageresizershrinker.feature.zip.presentation.ZipScreen @Composable -fun ScreenSelector( - viewModel: MainViewModel +internal fun ScreenSelector( + viewModel: RootViewModel ) { val scope = rememberCoroutineScope() val navController = viewModel.navController @@ -125,7 +126,9 @@ fun ScreenSelector( is Screen.Main -> { MainScreen( - viewModel = viewModel + onTryGetUpdate = viewModel::tryGetUpdate, + updateAvailable = viewModel.updateAvailable, + updateUris = viewModel::updateUris ) } diff --git a/feature/main/src/main/java/ru/tech/imageresizershrinker/feature/main/presentation/viewModel/MainViewModel.kt b/feature/root/src/main/java/ru/tech/imageresizershrinker/feature/root/presentation/viewModel/RootViewModel.kt similarity index 97% rename from feature/main/src/main/java/ru/tech/imageresizershrinker/feature/main/presentation/viewModel/MainViewModel.kt rename to feature/root/src/main/java/ru/tech/imageresizershrinker/feature/root/presentation/viewModel/RootViewModel.kt index ba805b045..eca9ed189 100644 --- a/feature/main/src/main/java/ru/tech/imageresizershrinker/feature/main/presentation/viewModel/MainViewModel.kt +++ b/feature/root/src/main/java/ru/tech/imageresizershrinker/feature/root/presentation/viewModel/RootViewModel.kt @@ -15,9 +15,7 @@ * along with this program. If not, see . */ -@file:Suppress("SameParameterValue", "unused") - -package ru.tech.imageresizershrinker.feature.main.presentation.viewModel +package ru.tech.imageresizershrinker.feature.root.presentation.viewModel import android.graphics.Bitmap import android.net.Uri @@ -44,6 +42,7 @@ import ru.tech.imageresizershrinker.core.di.DefaultDispatcher import ru.tech.imageresizershrinker.core.domain.APP_RELEASES import ru.tech.imageresizershrinker.core.domain.image.ImageGetter import ru.tech.imageresizershrinker.core.domain.saving.FileController +import ru.tech.imageresizershrinker.core.filters.domain.FavoriteFiltersInteractor import ru.tech.imageresizershrinker.core.resources.BuildConfig import ru.tech.imageresizershrinker.core.settings.domain.SettingsRepository import ru.tech.imageresizershrinker.core.settings.domain.model.SettingsState @@ -55,8 +54,9 @@ import javax.inject.Inject import javax.xml.parsers.DocumentBuilderFactory @HiltViewModel -class MainViewModel @Inject constructor( +class RootViewModel @Inject constructor( val imageLoader: ImageLoader, + val favoriteFiltersInteractor: FavoriteFiltersInteractor, private val imageGetter: ImageGetter, fileController: FileController, private val settingsRepository: SettingsRepository, diff --git a/settings.gradle.kts b/settings.gradle.kts index fdb0ad3cf..1b5dc4018 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -69,6 +69,8 @@ include(":feature:jxl-tools") include(":feature:media-picker") include(":feature:quick-tiles") include(":feature:settings") +include(":feature:easter-egg") +include(":feature:root") include(":core:settings") include(":core:resources")