Skip to content

Commit

Permalink
support loading root with factory
Browse files Browse the repository at this point in the history
  • Loading branch information
vitaviva committed Jan 24, 2021
1 parent 958a343 commit e02e8c4
Show file tree
Hide file tree
Showing 7 changed files with 35 additions and 30 deletions.
9 changes: 2 additions & 7 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -44,21 +44,16 @@ dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.core:core-ktx:1.0.2'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'com.google.android.material:material:1.0.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.navigation:navigation-fragment:2.3.0'
implementation 'androidx.navigation:navigation-ui:2.3.0'
implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0'
implementation 'androidx.navigation:navigation-fragment-ktx:2.0.0'
implementation 'androidx.navigation:navigation-ui-ktx:2.0.0'
implementation "androidx.fragment:fragment:$fragment_version"
implementation "androidx.fragment:fragment-ktx:$fragment_version"
if (codeDepend) {
implementation project(':library')
implementation project(':processor')
kapt project(':processor')
} else {
implementation 'com.github.fragivity:core:0.1.1'
implementation 'com.github.fragivity:core:0.1.2'
implementation 'com.github.fragivity:processor:0.1.0'
kapt 'com.github.fragivity:processor:0.1.0'
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ class MainActivity : AppCompatActivity() {
val navHostFragment = supportFragmentManager
.findFragmentById(R.id.nav_host) as NavHostFragment

// //you also can loadRoot with a factory
// navHostFragment.loadRoot { HomeFragment() }

navHostFragment.loadRoot(HomeFragment::class)
navHostFragment.handleDeepLink(intent)
navHostFragment.showDebugView(container)
Expand Down
4 changes: 1 addition & 3 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,5 @@ kotlin.code.style=official
# bintray upload
USER_ORG=vitaviva
ARTIFACT_GROUP=com.github.fragivity
ARTIFACT_VERSION=0.1.1
ARTIFACT_VERSION=0.1.2
WEB_SITE=https://github.com/vitaviva/fragivity
BINTRAY_USER=vitaviva
BINTRAY_KEY=
4 changes: 4 additions & 0 deletions library/CHANGE_LOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@

## 0.1.2
* Support loading root with factory

## 0.1.1
* Make Fragivity working when configuration changes

Expand Down
11 changes: 5 additions & 6 deletions library/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,9 @@ dependencies {
implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.core:core-ktx:1.2.0'
implementation 'androidx.navigation:navigation-fragment:2.3.2'
implementation "androidx.navigation:navigation-fragment-ktx:2.3.2"
implementation 'androidx.navigation:navigation-ui:2.3.0'
api 'androidx.navigation:navigation-fragment:2.3.2'
api "androidx.navigation:navigation-fragment-ktx:2.3.2"
implementation 'androidx.navigation:navigation-ui:2.3.2'
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
implementation 'androidx.lifecycle:lifecycle-runtime:2.2.0'
testImplementation 'junit:junit:4.12'
Expand All @@ -61,14 +61,13 @@ configurations.all {
}



publish {
userOrg = USER_ORG
groupId = ARTIFACT_GROUP
artifactId = ARTIFACT_NAME
publishVersion = ARTIFACT_VERSION
desc = 'Use Fragment like Activity'
website = WEB_SITE
bintrayUser = BINTRAY_USER
bintrayKey = BINTRAY_KEY
bintrayUser = properties.get("BINTRAY_USER", "")
bintrayKey = properties.get("BINTRAY_KEY", "")
}
30 changes: 18 additions & 12 deletions library/src/main/java/com/github/fragivity/NavHost.kt
Original file line number Diff line number Diff line change
Expand Up @@ -48,21 +48,16 @@ fun MyNavHost.push(
)
}


/**
* Navigates to a fragment by its factory
*/
inline fun <reified T : Fragment> MyNavHost.push(
noinline optionsBuilder: NavOptions.() -> Unit = {},
noinline block: () -> T
) {

val type = object : TypeToken<T>() {}.type
val node = navController.putFragment(requireActivity(), (type as Class<out Fragment>).kotlin)

FragmentProvider[type.name] = block

navController.navigate(
node.id, null,
convertNavOptions(T::class, NavOptions().apply(optionsBuilder))
)
val clazz = T::class
FragmentProvider[clazz.qualifiedName!!] = block
push(clazz, optionsBuilder = optionsBuilder)
}


Expand All @@ -83,7 +78,7 @@ fun NavHost.popTo(clazz: KClass<out Fragment>) {


/**
* load root fragment
* Load root fragment
*/
fun NavHostFragment.loadRoot(root: KClass<out Fragment>) {
val context = activity ?: return
Expand Down Expand Up @@ -120,6 +115,17 @@ fun NavHostFragment.loadRoot(root: KClass<out Fragment>) {
}
}

/**
* Load root fragment by factory
*/
inline fun <reified T : Fragment> NavHostFragment.loadRoot(
noinline block: () -> T
) {
val clazz = T::class
FragmentProvider[clazz.qualifiedName!!] = block
loadRoot(T::class)
}


@PublishedApi
internal fun NavController.putFragment(
Expand Down
4 changes: 2 additions & 2 deletions processor/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,6 @@ publish {
publishVersion = ARTIFACT_VERSION
desc = 'Use Fragment like Activity'
website = WEB_SITE
bintrayUser = BINTRAY_USER
bintrayKey = BINTRAY_KEY
bintrayUser = properties.get("BINTRAY_USER", "")
bintrayKey = properties.get("BINTRAY_KEY", "")
}

0 comments on commit e02e8c4

Please sign in to comment.