Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit d11adb2

Browse files
add BaseNavHostFragment, BaseDynamicNavHostFragment and extensions
1 parent fabd299 commit d11adb2

File tree

17 files changed

+382
-29
lines changed

17 files changed

+382
-29
lines changed

‎app/build.gradle.kts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,8 @@ android {
9696
}
9797
dynamicFeatures = mutableSetOf(
9898
Modules.DynamicFeature.POST_DETAIL,
99-
Modules.DynamicFeature.SEARCH
99+
Modules.DynamicFeature.SEARCH,
100+
Modules.DynamicFeature.DASHBOARD
100101
)
101102

102103
testOptions {

‎app/src/main/java/com/smarttoolfactory/postdynamichilt/ui/BottomNavigationStateAdapter.kt

Lines changed: 47 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import androidx.navigation.fragment.NavHostFragment
99
import androidx.viewpager2.adapter.FragmentStateAdapter
1010
import androidx.viewpager2.adapter.FragmentStateAdapter.FragmentTransactionCallback.OnPostEventListener
1111
import com.google.android.material.bottomnavigation.BottomNavigationView
12-
import com.smarttoolfactory.core.ui.fragment.navhost.NavHostContainerFragment
12+
import com.smarttoolfactory.core.ui.fragment.navhost.BaseDynamicNavHostFragment
1313
import com.smarttoolfactory.postdynamichilt.R
1414

1515
/**
@@ -48,32 +48,57 @@ class BottomNavigationStateAdapter(fragmentManager: FragmentManager, lifecycle:
4848

4949
override fun getItemCount(): Int = 4
5050

51-
override fun createFragment(position: Int): Fragment {
51+
// override fun createFragment(position: Int): Fragment {
52+
//
53+
// return when (position) {
54+
// // Home(ViewPager Fragment NavHost Container)
55+
// 0 -> NavHostContainerFragment.createNavHostContainerFragment(
56+
// R.layout.fragment_navhost_home,
57+
// R.id.nested_nav_host_fragment_home
58+
// )
59+
//
60+
// // Dashboard Fragment NavHost Container
61+
// 1 -> NavHostContainerFragment.createNavHostContainerFragment(
62+
// R.layout.fragment_navhost_dashboard,
63+
// R.id.nested_nav_host_fragment_dashboard
64+
// )
65+
//
66+
// // Notification Fragment NavHost Container
67+
// 2 -> NavHostContainerFragment.createNavHostContainerFragment(
68+
// R.layout.fragment_navhost_notification,
69+
// R.id.nested_nav_host_fragment_notification
70+
// )
71+
//
72+
// // Account Fragment NavHost Container
73+
// else -> NavHostContainerFragment.createNavHostContainerFragment(
74+
// R.layout.fragment_navhost_account,
75+
// R.id.nested_nav_host_fragment_account
76+
// )
77+
// }
78+
// }
5279

80+
override fun createFragment(position: Int): Fragment {
5381
return when (position) {
54-
// ViewPager Fragment NavHost Container
55-
0 -> NavHostContainerFragment.newInstance(
56-
R.layout.fragment_navhost_home,
57-
R.id.nested_nav_host_fragment_home
58-
)
5982

60-
// Dashboard Fragment NavHost Container
61-
1 -> NavHostContainerFragment.newInstance(
62-
R.layout.fragment_navhost_dashboard,
63-
R.id.nested_nav_host_fragment_dashboard
64-
)
83+
// Home nav graph
84+
0 ->
85+
BaseDynamicNavHostFragment
86+
.createDynamicNavHostFragment(R.navigation.nav_graph_home)
87+
88+
// Dashboard nav graph
89+
1 ->
90+
BaseDynamicNavHostFragment
91+
.createDynamicNavHostFragment(R.navigation.nav_graph_dashboard)
6592

66-
// Notification Fragment NavHost Container
67-
2 -> NavHostContainerFragment.newInstance(
68-
R.layout.fragment_navhost_notification,
69-
R.id.nested_nav_host_fragment_notification
70-
)
93+
// Notification nav graph
94+
2 ->
95+
BaseDynamicNavHostFragment
96+
.createDynamicNavHostFragment(R.navigation.nav_graph_notification)
7197

72-
// Account Fragment NavHost Container
73-
else -> NavHostContainerFragment.newInstance(
74-
R.layout.fragment_navhost_account,
75-
R.id.nested_nav_host_fragment_account
76-
)
98+
// Account nav graph
99+
else ->
100+
BaseDynamicNavHostFragment
101+
.createDynamicNavHostFragment(R.navigation.nav_graph_account)
77102
}
78103
}
79104
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<layout xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:app="http://schemas.android.com/apk/res-auto">
4+
5+
<androidx.constraintlayout.widget.ConstraintLayout
6+
android:layout_width="match_parent"
7+
android:layout_height="match_parent">
8+
9+
<androidx.fragment.app.FragmentContainerView
10+
android:id="@+id/nested_nav_host_fragment"
11+
android:name="androidx.navigation.dynamicfeatures.fragment.DynamicNavHostFragment"
12+
android:layout_width="0dp"
13+
android:layout_height="0dp"
14+
app:defaultNavHost="true"
15+
app:layout_constraintBottom_toBottomOf="parent"
16+
app:layout_constraintLeft_toLeftOf="parent"
17+
app:layout_constraintRight_toRightOf="parent"
18+
app:layout_constraintTop_toTopOf="parent" />
19+
20+
</androidx.constraintlayout.widget.ConstraintLayout>
21+
22+
</layout>

‎app/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@
22
<string name="app_name">Poster</string>
33
<string name="title_post_detail">Post Detail</string>
44
<string name="title_search">Search</string>
5+
<string name="title_dashboard">Dashboard</string>
56
</resources>

‎build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Top-level build file where you can add configuration options common to all sub-projects/modules.
22
buildscript {
33

4+
val kotlin_version by extra("1.4.0")
45
repositories {
56
google()
67
jcenter()

‎buildSrc/src/main/java/Modules.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,6 @@ object Modules {
1515
object DynamicFeature {
1616
const val POST_DETAIL = ":features:post_detail"
1717
const val SEARCH = ":features:search"
18+
const val DASHBOARD = ":features:dashboard"
1819
}
1920
}

‎features/dashboard/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/build

‎features/dashboard/build.gradle.kts

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
import extension.addBaseDynamicFeatureModuleDependencies
2+
import extension.addInstrumentationTestDependencies
3+
import extension.addUnitTestDependencies
4+
5+
plugins {
6+
id(Plugins.ANDROID_DYNAMIC_FEATURE_PLUGIN)
7+
id(Plugins.KOTLIN_ANDROID_PLUGIN)
8+
id(Plugins.KOTLIN_ANDROID_EXTENSIONS_PLUGIN)
9+
id(Plugins.KOTLIN_KAPT_PLUGIN)
10+
id(Plugins.DAGGER_HILT_PLUGIN)
11+
}
12+
13+
android {
14+
15+
compileSdkVersion(AndroidVersion.COMPILE_SDK_VERSION)
16+
17+
defaultConfig {
18+
19+
applicationId = "com.smarttoolfactory.dashboard"
20+
21+
minSdkVersion(AndroidVersion.MIN_SDK_VERSION)
22+
targetSdkVersion(AndroidVersion.TARGET_SDK_VERSION)
23+
versionCode = AndroidVersion.VERSION_CODE
24+
versionName = AndroidVersion.VERSION_NAME
25+
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
26+
}
27+
28+
buildTypes {
29+
getByName("release") {
30+
isMinifyEnabled = false
31+
proguardFiles(
32+
getDefaultProguardFile("proguard-android-optimize.txt"),
33+
"proguard-rules.pro"
34+
)
35+
}
36+
}
37+
38+
packagingOptions {
39+
exclude("META-INF/AL2.0")
40+
}
41+
42+
dataBinding.isEnabled = true
43+
// android.buildFeatures.viewBinding = true
44+
45+
compileOptions {
46+
sourceCompatibility = JavaVersion.VERSION_1_8
47+
targetCompatibility = JavaVersion.VERSION_1_8
48+
}
49+
kotlinOptions {
50+
jvmTarget = "1.8"
51+
}
52+
}
53+
54+
dependencies {
55+
56+
implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar"))))
57+
58+
implementation(project(Modules.APP))
59+
implementation(project(Modules.AndroidLibrary.CORE))
60+
implementation(project(Modules.AndroidLibrary.DOMAIN))
61+
62+
addBaseDynamicFeatureModuleDependencies()
63+
64+
// Support and Widgets
65+
implementation(Deps.APPCOMPAT)
66+
implementation(Deps.MATERIAL)
67+
implementation(Deps.CONSTRAINT_LAYOUT)
68+
69+
// Glide
70+
implementation(Deps.GLIDE)
71+
kapt(Deps.GLIDE_COMPILER)
72+
73+
// Lottie
74+
implementation(Deps.LOTTIE)
75+
76+
// Unit Tests
77+
addUnitTestDependencies()
78+
testImplementation(project(Modules.AndroidLibrary.TEST_UTILS))
79+
80+
// Instrumentation Tests
81+
addInstrumentationTestDependencies()
82+
androidTestImplementation(project(Modules.AndroidLibrary.TEST_UTILS))
83+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.smarttoolfactory.dashboard
2+
3+
import androidx.test.ext.junit.runners.AndroidJUnit4
4+
import androidx.test.platform.app.InstrumentationRegistry
5+
import org.junit.Assert.assertEquals
6+
import org.junit.Test
7+
import org.junit.runner.RunWith
8+
9+
/**
10+
* Instrumented test, which will execute on an Android device.
11+
*
12+
* See [testing documentation](http://d.android.com/tools/testing).
13+
*/
14+
@RunWith(AndroidJUnit4::class)
15+
class ExampleInstrumentedTest {
16+
@Test
17+
fun useAppContext() {
18+
// Context of the app under test.
19+
val appContext = InstrumentationRegistry.getInstrumentation().targetContext
20+
assertEquals("com.smarttoolfactory.dashboard", appContext.packageName)
21+
}
22+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:dist="http://schemas.android.com/apk/distribution"
4+
package="com.smarttoolfactory.dashboard">
5+
6+
<dist:module
7+
dist:instant="false"
8+
dist:title="@string/title_dashboard">
9+
<dist:delivery>
10+
<dist:on-demand />
11+
</dist:delivery>
12+
<dist:fusing dist:include="true" />
13+
</dist:module>
14+
</manifest>

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /