From e02e8c46de10b278edeed56558db9eecb47f594d Mon Sep 17 00:00:00 2001 From: "wangpeng.rocky" Date: Mon, 25 Jan 2021 00:16:53 +0800 Subject: [PATCH] support loading root with factory --- app/build.gradle | 9 ++---- .../github/fragivity/example/MainActivity.kt | 3 ++ gradle.properties | 4 +-- library/CHANGE_LOG.md | 4 +++ library/build.gradle | 11 ++++--- .../main/java/com/github/fragivity/NavHost.kt | 30 +++++++++++-------- processor/build.gradle | 4 +-- 7 files changed, 35 insertions(+), 30 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 021cc46..927fb72 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -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' } diff --git a/app/src/main/java/com/github/fragivity/example/MainActivity.kt b/app/src/main/java/com/github/fragivity/example/MainActivity.kt index 5a2c78f..b4dbf54 100644 --- a/app/src/main/java/com/github/fragivity/example/MainActivity.kt +++ b/app/src/main/java/com/github/fragivity/example/MainActivity.kt @@ -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) diff --git a/gradle.properties b/gradle.properties index 4a934c7..8a9c337 100644 --- a/gradle.properties +++ b/gradle.properties @@ -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= \ No newline at end of file diff --git a/library/CHANGE_LOG.md b/library/CHANGE_LOG.md index 8512de6..d3714fc 100644 --- a/library/CHANGE_LOG.md +++ b/library/CHANGE_LOG.md @@ -1,3 +1,7 @@ + +## 0.1.2 +* Support loading root with factory + ## 0.1.1 * Make Fragivity working when configuration changes diff --git a/library/build.gradle b/library/build.gradle index 16bb1b3..4f1fbf9 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -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' @@ -61,7 +61,6 @@ configurations.all { } - publish { userOrg = USER_ORG groupId = ARTIFACT_GROUP @@ -69,6 +68,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", "") } diff --git a/library/src/main/java/com/github/fragivity/NavHost.kt b/library/src/main/java/com/github/fragivity/NavHost.kt index 8a06e6a..1629449 100644 --- a/library/src/main/java/com/github/fragivity/NavHost.kt +++ b/library/src/main/java/com/github/fragivity/NavHost.kt @@ -48,21 +48,16 @@ fun MyNavHost.push( ) } - +/** + * Navigates to a fragment by its factory + */ inline fun MyNavHost.push( noinline optionsBuilder: NavOptions.() -> Unit = {}, noinline block: () -> T ) { - - val type = object : TypeToken() {}.type - val node = navController.putFragment(requireActivity(), (type as Class).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) } @@ -83,7 +78,7 @@ fun NavHost.popTo(clazz: KClass) { /** - * load root fragment + * Load root fragment */ fun NavHostFragment.loadRoot(root: KClass) { val context = activity ?: return @@ -120,6 +115,17 @@ fun NavHostFragment.loadRoot(root: KClass) { } } +/** + * Load root fragment by factory + */ +inline fun NavHostFragment.loadRoot( + noinline block: () -> T +) { + val clazz = T::class + FragmentProvider[clazz.qualifiedName!!] = block + loadRoot(T::class) +} + @PublishedApi internal fun NavController.putFragment( diff --git a/processor/build.gradle b/processor/build.gradle index 7a46e83..491fbe2 100644 --- a/processor/build.gradle +++ b/processor/build.gradle @@ -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", "") }