Skip to content

Commit

Permalink
refactor: fix packages, class names
Browse files Browse the repository at this point in the history
  • Loading branch information
makeevrserg committed Oct 11, 2023
1 parent df95285 commit f7830d5
Show file tree
Hide file tree
Showing 38 changed files with 294 additions and 252 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,15 @@ import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.ExperimentalMaterialApi
import androidx.compose.material.ModalBottomSheetLayout
import androidx.compose.runtime.getValue
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
import androidx.core.view.WindowCompat
import com.arkivanov.decompose.defaultComponentContext
import com.makeevrserg.empireprojekt.mobile.core.ui.rememberSlotModalBottomSheetState
import com.makeevrserg.empireprojekt.mobile.core.ui.theme.AppTheme
import com.makeevrserg.empireprojekt.mobile.features.root.DefaultRootBottomSheetComponent
import com.makeevrserg.empireprojekt.mobile.features.root.DefaultRootComponent
import com.makeevrserg.empireprojekt.mobile.features.root.di.RootModule
import com.makeevrserg.empireprojekt.mobile.features.root.modal.DefaultRootBottomSheetComponent
import com.makeevrserg.empireprojekt.mobile.features.ui.info.InfoScreen
import com.makeevrserg.empireprojekt.mobile.features.ui.root.ApplicationContent
import com.makeevrserg.empireprojekt.mobile.features.ui.root.ComposeApplication
Expand All @@ -37,7 +36,7 @@ class MainActivity : ComponentActivity() {
WindowCompat.setDecorFitsSystemWindows(window, false)
setTheme(R.style.AppTheme)
val componentContext = defaultComponentContext()
val rootComponent = DefaultRootComponent(componentContext, rootModule, servicesModule)
val rootComponent = DefaultRootComponent(componentContext, rootModule)
val rootBottomSheetComponent = rootComponent.rootBottomSheetComponent

setContent {
Expand All @@ -51,7 +50,7 @@ class MainActivity : ComponentActivity() {
}
}
}
ComposeApplication(rootModule.themeSwitcher.value) {
ComposeApplication(rootModule.themeSwitcherComponent.value) {
ModalBottomSheetLayout(
sheetState = bottomSheetState.sheetState,
sheetContent = bottomSheetState.sheetContent.value,
Expand All @@ -60,7 +59,6 @@ class MainActivity : ComponentActivity() {
) {
ApplicationContent(
rootComponent = rootComponent,
rootBottomSheetComponent = rootBottomSheetComponent,
modifier = Modifier
)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.makeevrserg.empireprojekt.mobile.features.root.di.factories
package com.makeevrserg.empireprojekt.mobile.features.root.di.factory

import com.makeevrserg.empireprojekt.mobile.services.core.AndroidLinkBrowser
import com.makeevrserg.empireprojekt.mobile.services.core.LinkBrowser
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.makeevrserg.empireprojekt.mobile.features.root.di.factories
package com.makeevrserg.empireprojekt.mobile.features.root.di.factory

import com.russhwolf.settings.Settings
import com.russhwolf.settings.SharedPreferencesSettings
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,85 +2,20 @@ package com.makeevrserg.empireprojekt.mobile.features.root

import com.arkivanov.decompose.ComponentContext
import com.arkivanov.decompose.childContext
import com.arkivanov.decompose.router.stack.ChildStack
import com.arkivanov.decompose.router.stack.StackNavigation
import com.arkivanov.decompose.router.stack.childStack
import com.arkivanov.decompose.router.stack.pop
import com.arkivanov.decompose.router.stack.push
import com.arkivanov.decompose.router.stack.replaceAll
import com.arkivanov.decompose.router.stack.replaceCurrent
import com.arkivanov.decompose.value.Value
import com.makeevrserg.empireprojekt.mobile.features.logic.splash.SplashComponent
import com.makeevrserg.empireprojekt.mobile.features.logic.splash.SplashComponentImpl
import com.makeevrserg.empireprojekt.mobile.features.root.di.RootModule
import com.makeevrserg.empireprojekt.mobile.features.root.di.ServicesModule
import com.makeevrserg.empireprojekt.mobile.features.root.di.impl.splash.SplashComponentModuleImpl
import com.makeevrserg.empireprojekt.mobile.features.status.root.RootStatusComponent
import com.makeevrserg.empireprojekt.mobile.features.theme.ThemeSwitcher
import com.makeevrserg.empireprojekt.mobile.features.root.modal.DefaultRootBottomSheetComponent
import com.makeevrserg.empireprojekt.mobile.features.root.screen.DefaultRootScreenComponent

class DefaultRootComponent(
componentContext: ComponentContext,
rootModule: RootModule,
servicesModule: ServicesModule
rootModule: RootModule
) : RootComponent, ComponentContext by componentContext {
override val rootBottomSheetComponent: RootBottomSheetComponent =
DefaultRootBottomSheetComponent(
componentContext = childContext("RootBottomSheetComponent"),
servicesModule = servicesModule,
)
private val navigation = StackNavigation<RootComponent.Child>()

override val childStack: Value<ChildStack<*, Configuration>> = childStack(
source = navigation,
initialConfiguration = RootComponent.Child.Splash,
handleBackButton = true,
childFactory = { config, context ->
when (config) {
RootComponent.Child.Splash -> Configuration.Splash(
splashComponent = SplashComponentImpl(
context = context,
module = SplashComponentModuleImpl(
rootModule = rootModule,
servicesModule = servicesModule
)
)
)

RootComponent.Child.Status -> {
Configuration.Status(
themeSwitcher = rootModule.themeSwitcher.value,
rootStatusComponent = rootModule.rootStatusComponent.value
)
}
}
}
override val rootBottomSheetComponent = DefaultRootBottomSheetComponent(
componentContext = childContext("RootBottomSheetComponent"),
servicesModule = rootModule.servicesModule,
)
override val rootScreenComponent = DefaultRootScreenComponent(
componentContext = childContext("RootScreenComponent"),
rootModule = rootModule,
)

override fun push(screen: RootComponent.Child) {
navigation.push(screen)
}

override fun replaceCurrent(screen: RootComponent.Child) {
navigation.replaceCurrent(screen)
}

override fun replaceAll(screen: RootComponent.Child) {
navigation.replaceAll(screen)
}

override fun pop() {
navigation.pop()
}

sealed interface Configuration {

class Splash(
val splashComponent: SplashComponent
) : Configuration

class Status(
val rootStatusComponent: RootStatusComponent,
val themeSwitcher: ThemeSwitcher
) : Configuration
}
}
Original file line number Diff line number Diff line change
@@ -1,25 +1,9 @@
package com.makeevrserg.empireprojekt.mobile.features.root

import com.arkivanov.decompose.router.stack.ChildStack
import com.arkivanov.decompose.value.Value
import com.arkivanov.essenty.backhandler.BackHandlerOwner
import com.arkivanov.essenty.parcelable.Parcelable
import com.arkivanov.essenty.parcelable.Parcelize
import com.makeevrserg.empireprojekt.mobile.features.root.modal.RootBottomSheetComponent
import com.makeevrserg.empireprojekt.mobile.features.root.screen.RootScreenComponent

interface RootComponent : BackHandlerOwner {
interface RootComponent {
val rootScreenComponent: RootScreenComponent
val rootBottomSheetComponent: RootBottomSheetComponent
val childStack: Value<ChildStack<*, DefaultRootComponent.Configuration>>

fun push(screen: Child)
fun replaceCurrent(screen: Child)
fun replaceAll(screen: Child)
fun pop()

sealed interface Child : Parcelable {
@Parcelize
object Splash : Child

@Parcelize
object Status : Child
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package com.makeevrserg.empireprojekt.mobile.features.root.di

import com.makeevrserg.empireprojekt.mobile.features.root.di.impl.root.RootModuleImpl
import com.makeevrserg.empireprojekt.mobile.features.status.root.RootStatusComponent
import com.makeevrserg.empireprojekt.mobile.features.theme.ThemeSwitcher
import com.makeevrserg.empireprojekt.mobile.features.theme.ThemeSwitcherComponent
import com.russhwolf.settings.Settings
import kotlinx.coroutines.CoroutineScope
import ru.astrainteractive.klibs.kdi.Module
Expand All @@ -15,7 +15,7 @@ interface RootModule : Module {
val settings: Single<Settings>
val dispatchers: Single<KotlinDispatchers>
val mainScope: Single<CoroutineScope>
val themeSwitcher: Single<ThemeSwitcher>
val themeSwitcherComponent: Single<ThemeSwitcherComponent>
val rootStatusComponent: Single<RootStatusComponent>
companion object : RootModule by RootModuleImpl
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.makeevrserg.empireprojekt.mobile.features.root.di.factories
package com.makeevrserg.empireprojekt.mobile.features.root.di.factory

import com.makeevrserg.empireprojekt.mobile.services.core.LinkBrowser
import ru.astrainteractive.klibs.kdi.Factory
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.makeevrserg.empireprojekt.mobile.features.root.di.factories
package com.makeevrserg.empireprojekt.mobile.features.root.di.factory

import com.russhwolf.settings.Settings
import ru.astrainteractive.klibs.kdi.Factory
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package com.makeevrserg.empireprojekt.mobile.features.root.di.impl.root

import com.makeevrserg.empireprojekt.mobile.features.root.di.RootModule
import com.makeevrserg.empireprojekt.mobile.features.root.di.factories.SettingsFactory
import com.makeevrserg.empireprojekt.mobile.features.root.di.factory.SettingsFactory
import com.makeevrserg.empireprojekt.mobile.features.root.di.impl.status.StatusModuleImpl
import com.makeevrserg.empireprojekt.mobile.features.status.root.DefaultRootStatusComponent
import com.makeevrserg.empireprojekt.mobile.features.status.root.RootStatusComponent
import com.makeevrserg.empireprojekt.mobile.features.theme.ThemeSwitcher
import com.makeevrserg.empireprojekt.mobile.features.theme.DefaultThemeSwitcherComponentComponent
import com.makeevrserg.empireprojekt.mobile.features.theme.ThemeSwitcherComponent
import kotlinx.coroutines.MainScope
import ru.astrainteractive.klibs.kdi.Single
Expand All @@ -30,8 +30,8 @@ internal object RootModuleImpl : RootModule {
override val mainScope = Single {
MainScope()
}
override val themeSwitcher: Single<ThemeSwitcher> = Single {
ThemeSwitcherComponent(settings.value)
override val themeSwitcherComponent: Single<ThemeSwitcherComponent> = Single {
DefaultThemeSwitcherComponentComponent(settings.value)
}
override val rootStatusComponent: Single<RootStatusComponent> = Single {
DefaultRootStatusComponent(StatusModuleImpl(this))
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.makeevrserg.empireprojekt.mobile.features.root.di.impl.root

import com.makeevrserg.empireprojekt.mobile.features.root.di.ServicesModule
import com.makeevrserg.empireprojekt.mobile.features.root.di.factories.LinkBrowserFactory
import com.makeevrserg.empireprojekt.mobile.features.root.di.factory.LinkBrowserFactory
import com.makeevrserg.empireprojekt.mobile.services.core.LinkBrowser
import io.ktor.client.HttpClient
import io.ktor.client.plugins.contentnegotiation.ContentNegotiation
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.makeevrserg.empireprojekt.mobile.features.root.di.impl.splash

import com.makeevrserg.empireprojekt.mobile.features.logic.splash.data.SplashComponentRepository
import com.makeevrserg.empireprojekt.mobile.features.logic.splash.data.SplashComponentRepositoryImpl
import com.makeevrserg.empireprojekt.mobile.features.logic.splash.di.SplashComponentModule
import com.makeevrserg.empireprojekt.mobile.features.root.di.RootModule
import com.makeevrserg.empireprojekt.mobile.features.root.di.ServicesModule
Expand All @@ -18,6 +19,6 @@ class SplashComponentModuleImpl(
override val scope: CoroutineScope by rootModule.mainScope
override val dispatchers: KotlinDispatchers by rootModule.dispatchers
override val repository: SplashComponentRepository = Provider {
SplashComponentRepository.Default()
SplashComponentRepositoryImpl()
}.provide()
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.makeevrserg.empireprojekt.mobile.features.root
package com.makeevrserg.empireprojekt.mobile.features.root.modal

import com.arkivanov.decompose.ComponentContext
import com.arkivanov.decompose.router.slot.ChildSlot
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.makeevrserg.empireprojekt.mobile.features.root
package com.makeevrserg.empireprojekt.mobile.features.root.modal

import com.arkivanov.decompose.router.slot.ChildSlot
import com.arkivanov.decompose.value.Value
Expand All @@ -12,6 +12,6 @@ interface RootBottomSheetComponent {

sealed interface Child : Parcelable {
@Parcelize
object Settings : Child
data object Settings : Child
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package com.makeevrserg.empireprojekt.mobile.features.root.screen

import com.arkivanov.decompose.ComponentContext
import com.arkivanov.decompose.router.stack.ChildStack
import com.arkivanov.decompose.router.stack.StackNavigation
import com.arkivanov.decompose.router.stack.childStack
import com.arkivanov.decompose.router.stack.pop
import com.arkivanov.decompose.router.stack.push
import com.arkivanov.decompose.router.stack.replaceAll
import com.arkivanov.decompose.router.stack.replaceCurrent
import com.arkivanov.decompose.value.Value
import com.makeevrserg.empireprojekt.mobile.features.logic.splash.SplashComponent
import com.makeevrserg.empireprojekt.mobile.features.root.di.RootModule
import com.makeevrserg.empireprojekt.mobile.features.root.screen.di.factory.RootScreenComponentChildFactory
import com.makeevrserg.empireprojekt.mobile.features.status.root.RootStatusComponent
import com.makeevrserg.empireprojekt.mobile.features.theme.ThemeSwitcherComponent

class DefaultRootScreenComponent(
componentContext: ComponentContext,
rootModule: RootModule,
) : RootScreenComponent, ComponentContext by componentContext {

private val navigation = StackNavigation<RootScreenComponent.Child>()

override val childStack: Value<ChildStack<*, Configuration>> = childStack(
source = navigation,
initialConfiguration = RootScreenComponent.Child.Splash,
handleBackButton = true,
childFactory = { config, context ->
RootScreenComponentChildFactory(
config = config,
context = context,
rootModule = rootModule
).create()
}
)

override fun push(screen: RootScreenComponent.Child) {
navigation.push(screen)
}

override fun replaceCurrent(screen: RootScreenComponent.Child) {
navigation.replaceCurrent(screen)
}

override fun replaceAll(screen: RootScreenComponent.Child) {
navigation.replaceAll(screen)
}

override fun pop() {
navigation.pop()
}

sealed interface Configuration {

class Splash(
val splashComponent: SplashComponent
) : Configuration

class Status(
val rootStatusComponent: RootStatusComponent,
val themeSwitcherComponent: ThemeSwitcherComponent
) : Configuration
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.makeevrserg.empireprojekt.mobile.features.root.screen

import com.arkivanov.decompose.router.stack.ChildStack
import com.arkivanov.decompose.value.Value
import com.arkivanov.essenty.backhandler.BackHandlerOwner
import com.arkivanov.essenty.parcelable.Parcelable
import com.arkivanov.essenty.parcelable.Parcelize

interface RootScreenComponent : BackHandlerOwner {
val childStack: Value<ChildStack<*, DefaultRootScreenComponent.Configuration>>

fun push(screen: Child)
fun replaceCurrent(screen: Child)
fun replaceAll(screen: Child)
fun pop()

sealed interface Child : Parcelable {
@Parcelize
object Splash : Child

@Parcelize
object Status : Child
}
}
Loading

0 comments on commit f7830d5

Please sign in to comment.