Skip to content

Commit c327b70

Browse files
committed
remove feature dependencies from main module
1 parent e5200fa commit c327b70

12 files changed

Lines changed: 108 additions & 20 deletions

File tree

app/src/main/java/com/example/util/simpletimetracker/di/ScreenKey.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@ import com.example.util.simpletimetracker.navigation.params.screen.ScreenParams
44
import dagger.MapKey
55
import kotlin.reflect.KClass
66

7-
@Retention(AnnotationRetention.RUNTIME)
87
@MapKey
8+
@Retention(AnnotationRetention.RUNTIME)
99
annotation class ScreenKey(val value: KClass<out ScreenParams>)
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.example.util.simpletimetracker.core.model
2+
3+
import dagger.MapKey
4+
import kotlin.reflect.KClass
5+
6+
@MapKey
7+
@Retention(AnnotationRetention.RUNTIME)
8+
annotation class NavigationTabKey(val value: KClass<out NavigationTab>)
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.example.util.simpletimetracker.core.model
2+
3+
import androidx.fragment.app.Fragment
4+
5+
fun interface NavigationTabProvider {
6+
fun provide(): Fragment
7+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.example.util.simpletimetracker.feature_goals.di
2+
3+
import com.example.util.simpletimetracker.core.model.NavigationTab
4+
import com.example.util.simpletimetracker.core.model.NavigationTabKey
5+
import com.example.util.simpletimetracker.core.model.NavigationTabProvider
6+
import com.example.util.simpletimetracker.feature_goals.view.GoalsFragment
7+
import dagger.Module
8+
import dagger.Provides
9+
import dagger.hilt.InstallIn
10+
import dagger.hilt.components.SingletonComponent
11+
import dagger.multibindings.IntoMap
12+
13+
@Module
14+
@InstallIn(SingletonComponent::class)
15+
class GoalsModule {
16+
17+
@Provides
18+
@IntoMap
19+
@NavigationTabKey(NavigationTab.Goals::class)
20+
fun bindNavigationTab(): NavigationTabProvider {
21+
return NavigationTabProvider { GoalsFragment.newInstance() }
22+
}
23+
}

features/feature_main/build.gradle.kts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,6 @@ android {
1616

1717
dependencies {
1818
implementation(project(":core"))
19-
implementation(project(":feature_running_records")) // TODO remove feature dependency
20-
implementation(project(":feature_records"))
21-
implementation(project(":feature_statistics"))
22-
implementation(project(":feature_settings"))
23-
implementation(project(":feature_goals"))
24-
implementation(project(":feature_dialogs:api")) // TODO remove?
2519
implementation(libs.google.dagger)
2620
ksp(libs.kapt.dagger)
2721
}

features/feature_main/src/main/java/com/example/util/simpletimetracker/feature_main/adapter/MainContentAdapter.kt

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,18 @@ package com.example.util.simpletimetracker.feature_main.adapter
33
import androidx.fragment.app.Fragment
44
import androidx.viewpager2.adapter.FragmentStateAdapter
55
import com.example.util.simpletimetracker.core.model.NavigationTab
6-
import com.example.util.simpletimetracker.feature_goals.view.GoalsFragment
7-
import com.example.util.simpletimetracker.feature_records.view.RecordsContainerFragment
8-
import com.example.util.simpletimetracker.feature_running_records.view.RunningRecordsFragment
9-
import com.example.util.simpletimetracker.feature_settings.view.SettingsFragment
10-
import com.example.util.simpletimetracker.feature_statistics.view.StatisticsContainerFragment
6+
import com.example.util.simpletimetracker.core.model.NavigationTabProvider
117

128
class MainContentAdapter(
139
fragment: Fragment,
1410
tabs: List<NavigationTab>,
11+
providers: Map<Class<out NavigationTab>, NavigationTabProvider>,
1512
) : FragmentStateAdapter(fragment) {
1613

17-
private val fragments = tabs.map {
18-
when (it) {
19-
is NavigationTab.RunningRecords -> lazy { RunningRecordsFragment.newInstance() }
20-
is NavigationTab.Records -> lazy { RecordsContainerFragment.newInstance() }
21-
is NavigationTab.Statistics -> lazy { StatisticsContainerFragment.newInstance() }
22-
is NavigationTab.Settings -> lazy { SettingsFragment.newInstance() }
23-
is NavigationTab.Goals -> lazy { GoalsFragment.newInstance() }
24-
}
14+
private val fragments = tabs.mapNotNull {
15+
providers[it::class.java]
16+
}.map {
17+
lazy { it.provide() }
2518
}
2619

2720
override fun getItemCount(): Int =

features/feature_main/src/main/java/com/example/util/simpletimetracker/feature_main/provider/MainTabsProvider.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.example.util.simpletimetracker.feature_main.provider
22

33
import androidx.annotation.DrawableRes
44
import com.example.util.simpletimetracker.core.model.NavigationTab
5+
import com.example.util.simpletimetracker.core.model.NavigationTabProvider
56
import com.example.util.simpletimetracker.core.repo.ResourceRepo
67
import com.example.util.simpletimetracker.core.utils.SHORTCUT_NAVIGATION_RECORDS
78
import com.example.util.simpletimetracker.core.utils.SHORTCUT_NAVIGATION_SETTINGS
@@ -13,6 +14,7 @@ import kotlinx.coroutines.runBlocking
1314
import javax.inject.Inject
1415

1516
class MainTabsProvider @Inject constructor(
17+
val tabProviders: Map<Class<out NavigationTab>, @JvmSuppressWildcards NavigationTabProvider>,
1618
private val resourceRepo: ResourceRepo,
1719
private val prefsInteractor: PrefsInteractor,
1820
) {

features/feature_main/src/main/java/com/example/util/simpletimetracker/feature_main/view/MainFragment.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ class MainFragment : BaseFragment<Binding>() {
8888
MainContentAdapter(
8989
fragment = this@MainFragment,
9090
tabs = mainTabsProvider.tabsList,
91+
providers = mainTabsProvider.tabProviders,
9192
),
9293
)
9394
mainPager.offscreenPageLimit = 3 // Same as number of pages to avoid recreating.
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,31 @@
11
package com.example.util.simpletimetracker.feature_records.di
22

3+
import com.example.util.simpletimetracker.core.model.NavigationTab
4+
import com.example.util.simpletimetracker.core.model.NavigationTabKey
5+
import com.example.util.simpletimetracker.core.model.NavigationTabProvider
36
import com.example.util.simpletimetracker.feature_records.api.RecordsContainerOptionsListMapper
47
import com.example.util.simpletimetracker.feature_records.mapper.RecordsContainerOptionsListMapperImpl
8+
import com.example.util.simpletimetracker.feature_records.view.RecordsContainerFragment
59
import dagger.Binds
610
import dagger.Module
11+
import dagger.Provides
712
import dagger.hilt.InstallIn
813
import dagger.hilt.components.SingletonComponent
14+
import dagger.multibindings.IntoMap
915

1016
@Module
1117
@InstallIn(SingletonComponent::class)
1218
interface RecordsModule {
1319

1420
@Binds
1521
fun bindRecordsContainerOptionsListMapper(impl: RecordsContainerOptionsListMapperImpl): RecordsContainerOptionsListMapper
22+
23+
companion object {
24+
@Provides
25+
@IntoMap
26+
@NavigationTabKey(NavigationTab.Records::class)
27+
fun bindNavigationTab(): NavigationTabProvider {
28+
return NavigationTabProvider { RecordsContainerFragment.newInstance() }
29+
}
30+
}
1631
}

features/feature_running_records/src/main/java/com/example/util/simpletimetracker/feature_running_records/di/RunningRecordsModule.kt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,19 @@
11
package com.example.util.simpletimetracker.feature_running_records.di
22

3+
import com.example.util.simpletimetracker.core.model.NavigationTab
4+
import com.example.util.simpletimetracker.core.model.NavigationTabKey
5+
import com.example.util.simpletimetracker.core.model.NavigationTabProvider
36
import com.example.util.simpletimetracker.feature_running_records.api.OnShortcutClickInteractor
47
import com.example.util.simpletimetracker.feature_running_records.api.RecordsShortcutsViewDataInteractor
58
import com.example.util.simpletimetracker.feature_running_records.interactor.OnShortcutClickInteractorImpl
69
import com.example.util.simpletimetracker.feature_running_records.interactor.RecordsShortcutsViewDataInteractorImpl
10+
import com.example.util.simpletimetracker.feature_running_records.view.RunningRecordsFragment
711
import dagger.Binds
812
import dagger.Module
13+
import dagger.Provides
914
import dagger.hilt.InstallIn
1015
import dagger.hilt.components.SingletonComponent
16+
import dagger.multibindings.IntoMap
1117

1218
@Module
1319
@InstallIn(SingletonComponent::class)
@@ -18,4 +24,13 @@ interface RunningRecordsModule {
1824

1925
@Binds
2026
fun bindOnShortcutClickInteractor(impl: OnShortcutClickInteractorImpl): OnShortcutClickInteractor
27+
28+
companion object {
29+
@Provides
30+
@IntoMap
31+
@NavigationTabKey(NavigationTab.RunningRecords::class)
32+
fun bindNavigationTab(): NavigationTabProvider {
33+
return NavigationTabProvider { RunningRecordsFragment.newInstance() }
34+
}
35+
}
2136
}

0 commit comments

Comments
 (0)