turbo-native-initializer 0.0.1 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +12 -1
- data/README.md +23 -2
- data/lib/turbo_native_initializer/generator.rb +11 -39
- data/lib/turbo_native_initializer/templates/android_stack/app/src/main/java/dev/hotwire/turbo/turbonativeproject/base/NavDestination.kt.tt +0 -4
- data/lib/turbo_native_initializer/templates/android_stack/app/src/main/java/dev/hotwire/turbo/turbonativeproject/features/native/NativeFragment.kt.tt +25 -0
- data/lib/turbo_native_initializer/templates/android_stack/app/src/main/java/dev/hotwire/turbo/turbonativeproject/features/native/NumbersFragment.kt.tt +40 -0
- data/lib/turbo_native_initializer/templates/android_stack/app/src/main/java/dev/hotwire/turbo/turbonativeproject/features/web/WebFragment.kt.tt +0 -19
- data/lib/turbo_native_initializer/templates/android_stack/app/src/main/java/dev/hotwire/turbo/turbonativeproject/main/MainSessionNavHostFragment.kt.tt +2 -1
- data/lib/turbo_native_initializer/templates/android_stack/{app → base/app}/build.gradle.kts.tt +16 -3
- data/lib/turbo_native_initializer/templates/android_stack/{app → base/app}/src/main/assets/json/configuration.json +2 -1
- data/lib/turbo_native_initializer/templates/android_stack/base/app/src/main/res/layout/fragment_native.xml +36 -0
- data/lib/turbo_native_initializer/templates/android_tabs/app/src/main/java/dev/hotwire/turbo/turbonativeproject/base/NavDestination.kt.tt +0 -4
- data/lib/turbo_native_initializer/templates/android_tabs/app/src/main/java/dev/hotwire/turbo/turbonativeproject/features/native/NativeFragment.kt.tt +25 -0
- data/lib/turbo_native_initializer/templates/android_tabs/app/src/main/java/dev/hotwire/turbo/turbonativeproject/features/native/NumbersFragment.kt.tt +40 -0
- data/lib/turbo_native_initializer/templates/android_tabs/app/src/main/java/dev/hotwire/turbo/turbonativeproject/features/web/WebFragment.kt.tt +1 -22
- data/lib/turbo_native_initializer/templates/android_tabs/app/src/main/java/dev/hotwire/turbo/turbonativeproject/main/BaseSessionNavHostFragment.kt.tt +32 -0
- data/lib/turbo_native_initializer/templates/android_tabs/app/src/main/java/dev/hotwire/turbo/turbonativeproject/main/MainActivity.kt.tt +8 -5
- data/lib/turbo_native_initializer/templates/android_tabs/app/src/main/java/dev/hotwire/turbo/turbonativeproject/main/TabOneSessionNavHostFragment.kt.tt +2 -30
- data/lib/turbo_native_initializer/templates/android_tabs/app/src/main/java/dev/hotwire/turbo/turbonativeproject/main/TabTwoSessionNavHostFragment.kt.tt +2 -30
- data/lib/turbo_native_initializer/templates/android_tabs/{app → base/app}/build.gradle.kts.tt +16 -3
- data/lib/turbo_native_initializer/templates/android_tabs/{app → base/app}/src/main/assets/json/configuration.json +2 -1
- data/lib/turbo_native_initializer/templates/android_tabs/base/app/src/main/res/layout/fragment_native.xml +36 -0
- data/lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject/Configuration/path-configuration.json +2 -1
- data/lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject/Controllers/NumbersViewController.swift +31 -0
- data/lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject/Controllers/TurboNavigationController.swift +1 -1
- data/lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject/Delegates/AppDelegate.swift +1 -5
- data/lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject/Delegates/SceneDelegate.swift.tt +1 -1
- data/lib/turbo_native_initializer/templates/ios_stack/TurboNativeProject.xcodeproj/project.pbxproj.tt +4 -0
- data/lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject/Configuration/path-configuration.json +2 -1
- data/lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject/Controllers/NumbersViewController.swift +31 -0
- data/lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject/Controllers/TurboNavigationController.swift +2 -2
- data/lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject/Delegates/AppDelegate.swift +1 -5
- data/lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject/Delegates/SceneDelegate.swift.tt +10 -9
- data/lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject/Resources/Base.lproj/Main.storyboard +2 -2
- data/lib/turbo_native_initializer/templates/ios_tabs/TurboNativeProject.xcodeproj/project.pbxproj.tt +4 -0
- data/lib/turbo_native_initializer/version.rb +1 -1
- metadata +80 -75
- data/lib/turbo_native_initializer/templates/android_stack/app/src/main/res/layout/toolbar_progress.xml +0 -13
- data/lib/turbo_native_initializer/templates/android_stack/app/src/main/res/menu/web.xml +0 -14
- data/lib/turbo_native_initializer/templates/android_tabs/app/src/main/res/layout/toolbar_progress.xml +0 -13
- data/lib/turbo_native_initializer/templates/android_tabs/app/src/main/res/menu/web.xml +0 -14
- /data/lib/turbo_native_initializer/templates/android_stack/{app → base/app}/.gitignore +0 -0
- /data/lib/turbo_native_initializer/templates/android_stack/{app → base/app}/proguard-rules.pro +0 -0
- /data/lib/turbo_native_initializer/templates/android_stack/{app → base/app}/src/debug/AndroidManifest.xml.tt +0 -0
- /data/lib/turbo_native_initializer/templates/android_stack/{app → base/app}/src/main/AndroidManifest.xml.tt +0 -0
- /data/lib/turbo_native_initializer/templates/android_stack/{app → base/app}/src/main/res/anim/nav_slide_enter.xml +0 -0
- /data/lib/turbo_native_initializer/templates/android_stack/{app → base/app}/src/main/res/anim/nav_slide_exit.xml +0 -0
- /data/lib/turbo_native_initializer/templates/android_stack/{app → base/app}/src/main/res/anim/nav_slide_pop_enter.xml +0 -0
- /data/lib/turbo_native_initializer/templates/android_stack/{app → base/app}/src/main/res/anim/nav_slide_pop_exit.xml +0 -0
- /data/lib/turbo_native_initializer/templates/android_stack/{app → base/app}/src/main/res/anim/overshoot_interpolator.xml +0 -0
- /data/lib/turbo_native_initializer/templates/android_stack/{app → base/app}/src/main/res/drawable/ic_close.xml +0 -0
- /data/lib/turbo_native_initializer/templates/android_stack/{app → base/app}/src/main/res/drawable/ic_launcher_foreground.xml +0 -0
- /data/lib/turbo_native_initializer/templates/android_stack/{app → base/app}/src/main/res/layout/activity_main.xml.tt +0 -0
- /data/lib/turbo_native_initializer/templates/android_stack/{app → base/app}/src/main/res/layout/fragment_web_home.xml +0 -0
- /data/lib/turbo_native_initializer/templates/android_stack/{app → base/app}/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +0 -0
- /data/lib/turbo_native_initializer/templates/android_stack/{app → base/app}/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +0 -0
- /data/lib/turbo_native_initializer/templates/android_stack/{app → base/app}/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
- /data/lib/turbo_native_initializer/templates/android_stack/{app → base/app}/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
- /data/lib/turbo_native_initializer/templates/android_stack/{app → base/app}/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
- /data/lib/turbo_native_initializer/templates/android_stack/{app → base/app}/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
- /data/lib/turbo_native_initializer/templates/android_stack/{app → base/app}/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
- /data/lib/turbo_native_initializer/templates/android_stack/{app → base/app}/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
- /data/lib/turbo_native_initializer/templates/android_stack/{app → base/app}/src/main/res/values/colors.xml +0 -0
- /data/lib/turbo_native_initializer/templates/android_stack/{app → base/app}/src/main/res/values/themes.xml.tt +0 -0
- /data/lib/turbo_native_initializer/templates/android_stack/{build.gradle.kts → base/build.gradle.kts} +0 -0
- /data/lib/turbo_native_initializer/templates/android_stack/{gradle → base/gradle}/wrapper/gradle-wrapper.jar +0 -0
- /data/lib/turbo_native_initializer/templates/android_stack/{gradle → base/gradle}/wrapper/gradle-wrapper.properties +0 -0
- /data/lib/turbo_native_initializer/templates/android_stack/{gradle.properties → base/gradle.properties} +0 -0
- /data/lib/turbo_native_initializer/templates/android_stack/{gradlew → base/gradlew} +0 -0
- /data/lib/turbo_native_initializer/templates/android_stack/{gradlew.bat → base/gradlew.bat} +0 -0
- /data/lib/turbo_native_initializer/templates/android_stack/{local.properties → base/local.properties} +0 -0
- /data/lib/turbo_native_initializer/templates/android_stack/{settings.gradle.kts.tt → base/settings.gradle.kts.tt} +0 -0
- /data/lib/turbo_native_initializer/templates/android_tabs/{app → base/app}/.gitignore +0 -0
- /data/lib/turbo_native_initializer/templates/android_tabs/{app → base/app}/proguard-rules.pro +0 -0
- /data/lib/turbo_native_initializer/templates/android_tabs/{app → base/app}/src/debug/AndroidManifest.xml.tt +0 -0
- /data/lib/turbo_native_initializer/templates/android_tabs/{app → base/app}/src/main/AndroidManifest.xml.tt +0 -0
- /data/lib/turbo_native_initializer/templates/android_tabs/{app → base/app}/src/main/res/anim/nav_slide_enter.xml +0 -0
- /data/lib/turbo_native_initializer/templates/android_tabs/{app → base/app}/src/main/res/anim/nav_slide_exit.xml +0 -0
- /data/lib/turbo_native_initializer/templates/android_tabs/{app → base/app}/src/main/res/anim/nav_slide_pop_enter.xml +0 -0
- /data/lib/turbo_native_initializer/templates/android_tabs/{app → base/app}/src/main/res/anim/nav_slide_pop_exit.xml +0 -0
- /data/lib/turbo_native_initializer/templates/android_tabs/{app → base/app}/src/main/res/anim/overshoot_interpolator.xml +0 -0
- /data/lib/turbo_native_initializer/templates/android_tabs/{app → base/app}/src/main/res/drawable/ic_close.xml +0 -0
- /data/lib/turbo_native_initializer/templates/android_tabs/{app → base/app}/src/main/res/drawable/ic_home.xml +0 -0
- /data/lib/turbo_native_initializer/templates/android_tabs/{app → base/app}/src/main/res/drawable/ic_launcher_foreground.xml +0 -0
- /data/lib/turbo_native_initializer/templates/android_tabs/{app → base/app}/src/main/res/drawable/ic_settings.xml +0 -0
- /data/lib/turbo_native_initializer/templates/android_tabs/{app → base/app}/src/main/res/layout/activity_main.xml.tt +0 -0
- /data/lib/turbo_native_initializer/templates/android_tabs/{app → base/app}/src/main/res/layout/fragment_web_home.xml +0 -0
- /data/lib/turbo_native_initializer/templates/android_tabs/{app → base/app}/src/main/res/menu/bottom_navigation_menu.xml +0 -0
- /data/lib/turbo_native_initializer/templates/android_tabs/{app → base/app}/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +0 -0
- /data/lib/turbo_native_initializer/templates/android_tabs/{app → base/app}/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +0 -0
- /data/lib/turbo_native_initializer/templates/android_tabs/{app → base/app}/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
- /data/lib/turbo_native_initializer/templates/android_tabs/{app → base/app}/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
- /data/lib/turbo_native_initializer/templates/android_tabs/{app → base/app}/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
- /data/lib/turbo_native_initializer/templates/android_tabs/{app → base/app}/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
- /data/lib/turbo_native_initializer/templates/android_tabs/{app → base/app}/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
- /data/lib/turbo_native_initializer/templates/android_tabs/{app → base/app}/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
- /data/lib/turbo_native_initializer/templates/android_tabs/{app → base/app}/src/main/res/values/colors.xml +0 -0
- /data/lib/turbo_native_initializer/templates/android_tabs/{app → base/app}/src/main/res/values/themes.xml.tt +0 -0
- /data/lib/turbo_native_initializer/templates/android_tabs/{build.gradle.kts → base/build.gradle.kts} +0 -0
- /data/lib/turbo_native_initializer/templates/android_tabs/{gradle → base/gradle}/wrapper/gradle-wrapper.jar +0 -0
- /data/lib/turbo_native_initializer/templates/android_tabs/{gradle → base/gradle}/wrapper/gradle-wrapper.properties +0 -0
- /data/lib/turbo_native_initializer/templates/android_tabs/{gradle.properties → base/gradle.properties} +0 -0
- /data/lib/turbo_native_initializer/templates/android_tabs/{gradlew → base/gradlew} +0 -0
- /data/lib/turbo_native_initializer/templates/android_tabs/{gradlew.bat → base/gradlew.bat} +0 -0
- /data/lib/turbo_native_initializer/templates/android_tabs/{local.properties → base/local.properties} +0 -0
- /data/lib/turbo_native_initializer/templates/android_tabs/{settings.gradle.kts.tt → base/settings.gradle.kts.tt} +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 87f651e0de673db040c8ed9f369d404b8f08946654c721329d07bfd9cbbc0149
|
|
4
|
+
data.tar.gz: ec47793c2bf2370f5cd4390bcf45a8ef14bad81ff70f0f3c4ba6cb1d3bb8c980
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 40079d2dc7c716940cf72a536304801180f62c509a8d64e6bf7bcdd4cf4f5179f52b1e2213f57ac7e9fb4e1865c02a45f8ba8e123813fbff92e3f541090909a8
|
|
7
|
+
data.tar.gz: 0bebf193304c04ed0ddaa53340fb4d0c9f4d46209471f18f883a9e0df83ec8038b2a16544372d2b704d421119519552b01c0641cd0f82181615287db906724e0
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
## [Unreleased]
|
|
2
2
|
|
|
3
|
-
## [0.
|
|
3
|
+
## [0.0.3] - 2023-09-08
|
|
4
|
+
|
|
5
|
+
- Add a Swift UI native screen
|
|
6
|
+
- Add a jetpack compose screen
|
|
7
|
+
- Fix android package
|
|
8
|
+
|
|
9
|
+
## [0.0.2] - 2023-09-07
|
|
10
|
+
|
|
11
|
+
- Fix android tab navigation
|
|
12
|
+
- General cleanup
|
|
13
|
+
|
|
14
|
+
## [0.0.1] - 2023-09-06
|
|
4
15
|
|
|
5
16
|
- Initial release
|
data/README.md
CHANGED
|
@@ -2,6 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
A turbo native project generator for iOS and Android.
|
|
4
4
|
|
|
5
|
+
## Differences when compared to the demos
|
|
6
|
+
|
|
7
|
+
- Added SwiftUI error screen. (iOS)
|
|
8
|
+
- Added SwiftUI numbers screen. (iOS)
|
|
9
|
+
- Added Jetpack Compose numbers screen. (Android)
|
|
10
|
+
- Added UIAlertController to handle `turbo-native-confirm`. (iOS)
|
|
11
|
+
- Added presentations `clear-all`, `replace-all`, `replace`, `pop`, `refresh`, and `none`. (iOS)
|
|
12
|
+
- Added visitable property in order to avoid visits. (iOS)
|
|
13
|
+
- Added full screen option to modals. (iOS/Android)
|
|
14
|
+
- Added support for tab navigation. (iOS/Android)
|
|
15
|
+
|
|
5
16
|
## Installation
|
|
6
17
|
|
|
7
18
|
```
|
|
@@ -28,10 +39,20 @@ $ cd AwesomeProject
|
|
|
28
39
|
$ studio .
|
|
29
40
|
```
|
|
30
41
|
|
|
31
|
-
|
|
42
|
+
## Usage
|
|
32
43
|
|
|
33
44
|
```
|
|
34
|
-
|
|
45
|
+
Usage:
|
|
46
|
+
turbo-native-initializer NAME --platform=PLATFORM
|
|
47
|
+
|
|
48
|
+
Options:
|
|
49
|
+
--platform=PLATFORM
|
|
50
|
+
# Possible values: ios, android
|
|
51
|
+
[--navigation=NAVIGATION]
|
|
52
|
+
# Default: stack
|
|
53
|
+
# Possible values: stack, tabs
|
|
54
|
+
[--package=PACKAGE]
|
|
55
|
+
# Default: dev.hotwire.turbo
|
|
35
56
|
```
|
|
36
57
|
|
|
37
58
|
## Development
|
|
@@ -18,60 +18,32 @@ module TurboNativeInitializer
|
|
|
18
18
|
|
|
19
19
|
def copy_template_files
|
|
20
20
|
case options.platform
|
|
21
|
-
when "android"
|
|
22
|
-
copy_android_files
|
|
23
21
|
when "ios"
|
|
24
|
-
copy_ios_files
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
private
|
|
29
|
-
def project
|
|
30
|
-
"#{options[:platform]}_#{options[:navigation]}"
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def copy_ios_files
|
|
34
|
-
# project/TurboNativeProject
|
|
35
22
|
directory "#{project}/TurboNativeProject/Configuration", "#{name}/#{name}/Configuration"
|
|
36
23
|
directory "#{project}/TurboNativeProject/Controllers", "#{name}/#{name}/Controllers"
|
|
37
24
|
directory "#{project}/TurboNativeProject/Delegates", "#{name}/#{name}/Delegates"
|
|
38
25
|
directory "#{project}/TurboNativeProject/Resources", "#{name}/#{name}/Resources"
|
|
39
|
-
template "#{project}/TurboNativeProject/TurboNativeProject.swift", "#{name}/#{name}/#{name}.swift"
|
|
40
|
-
# project
|
|
41
26
|
directory "#{project}/TurboNativeProject.xcodeproj", "#{name}/#{name}.xcodeproj"
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
# project/app
|
|
46
|
-
copy_file "#{project}/app/.gitignore", "#{name}/app/.gitignore"
|
|
47
|
-
copy_file "#{project}/app/proguard-rules.pro", "#{name}/app/proguard-rules.pro"
|
|
48
|
-
template "#{project}/app/build.gradle.kts", "#{name}/app/build.gradle.kts"
|
|
49
|
-
# project/app/src/debug
|
|
50
|
-
directory "#{project}/app/src/debug", "#{name}/app/src/debug"
|
|
51
|
-
# project/app/src/main
|
|
52
|
-
directory "#{project}/app/src/main/assets", "#{name}/app/src/main/assets"
|
|
27
|
+
template "#{project}/TurboNativeProject/TurboNativeProject.swift", "#{name}/#{name}/#{name}.swift"
|
|
28
|
+
when "android"
|
|
29
|
+
directory "#{project}/base", "#{name}"
|
|
53
30
|
directory "#{project}/app/src/main/java/dev/hotwire/turbo/turbonativeproject", "#{name}/app/src/main/java/#{package_path}"
|
|
54
|
-
directory "#{project}/app/src/main/res", "#{name}/app/src/main/res"
|
|
55
|
-
template "#{project}/app/src/main/AndroidManifest.xml", "#{name}/app/src/main/AndroidManifest.xml"
|
|
56
|
-
# project/gradle
|
|
57
|
-
directory "#{project}/gradle", "#{name}/gradle"
|
|
58
|
-
# project
|
|
59
|
-
copy_file "#{project}/build.gradle.kts", "#{name}/build.gradle.kts"
|
|
60
|
-
copy_file "#{project}/gradle.properties", "#{name}/gradle.properties"
|
|
61
|
-
copy_file "#{project}/gradlew", "#{name}/gradlew"
|
|
62
|
-
copy_file "#{project}/gradlew.bat", "#{name}/gradlew.bat"
|
|
63
|
-
copy_file "#{project}/local.properties", "#{name}/local.properties"
|
|
64
|
-
template "#{project}/settings.gradle.kts", "#{name}/settings.gradle.kts"
|
|
65
31
|
end
|
|
32
|
+
end
|
|
66
33
|
|
|
67
|
-
|
|
68
|
-
|
|
34
|
+
private
|
|
35
|
+
def project
|
|
36
|
+
"#{options[:platform]}_#{options[:navigation]}"
|
|
69
37
|
end
|
|
70
38
|
|
|
71
39
|
def package_name
|
|
72
40
|
"#{options[:package]}.#{name.downcase}"
|
|
73
41
|
end
|
|
74
42
|
|
|
43
|
+
def package_path
|
|
44
|
+
package_name.split(".").join("/")
|
|
45
|
+
end
|
|
46
|
+
|
|
75
47
|
def bundle_identifier
|
|
76
48
|
"#{options[:package]}.#{name}"
|
|
77
49
|
end
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
package <%= package_name %>.base
|
|
2
2
|
|
|
3
3
|
import android.net.Uri
|
|
4
|
-
import android.view.MenuItem
|
|
5
4
|
import androidx.browser.customtabs.CustomTabColorSchemeParams
|
|
6
5
|
import androidx.browser.customtabs.CustomTabsIntent
|
|
7
6
|
import androidx.browser.customtabs.CustomTabsIntent.SHARE_STATE_ON
|
|
@@ -15,9 +14,6 @@ import dev.hotwire.turbo.nav.TurboNavDestination
|
|
|
15
14
|
import dev.hotwire.turbo.nav.TurboNavPresentationContext.MODAL
|
|
16
15
|
|
|
17
16
|
interface NavDestination : TurboNavDestination {
|
|
18
|
-
val menuProgress: MenuItem?
|
|
19
|
-
get() = toolbarForNavigation()?.menu?.findItem(R.id.menu_progress)
|
|
20
|
-
|
|
21
17
|
override fun shouldNavigateTo(newLocation: String): Boolean {
|
|
22
18
|
return when (isNavigable(newLocation)) {
|
|
23
19
|
true -> true
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
package <%= package_name %>.features.native
|
|
2
|
+
|
|
3
|
+
import android.view.LayoutInflater
|
|
4
|
+
import android.view.View
|
|
5
|
+
import android.view.ViewGroup
|
|
6
|
+
import androidx.compose.runtime.Composable
|
|
7
|
+
import androidx.compose.ui.platform.ComposeView
|
|
8
|
+
import androidx.compose.ui.platform.ViewCompositionStrategy
|
|
9
|
+
import dev.hotwire.turbo.fragments.TurboFragment
|
|
10
|
+
import <%= package_name %>.R
|
|
11
|
+
import <%= package_name %>.base.NavDestination
|
|
12
|
+
|
|
13
|
+
abstract class NativeFragment : TurboFragment(), NavDestination {
|
|
14
|
+
fun setContent(inflater: LayoutInflater, container: ViewGroup?, content: @Composable () -> Unit): View? {
|
|
15
|
+
val root = inflater.inflate(R.layout.fragment_native, container, false)
|
|
16
|
+
val composeView = root.findViewById<ComposeView>(R.id.compose_view)
|
|
17
|
+
|
|
18
|
+
composeView.apply {
|
|
19
|
+
setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
|
|
20
|
+
setContent { content.invoke() }
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return root
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
package <%= package_name %>.features.native
|
|
2
|
+
|
|
3
|
+
import android.os.Bundle
|
|
4
|
+
import android.view.LayoutInflater
|
|
5
|
+
import android.view.View
|
|
6
|
+
import android.view.ViewGroup
|
|
7
|
+
import androidx.compose.foundation.lazy.LazyColumn
|
|
8
|
+
import androidx.compose.material3.Divider
|
|
9
|
+
import androidx.compose.material3.ListItem
|
|
10
|
+
import androidx.compose.material3.Text
|
|
11
|
+
import dev.hotwire.turbo.nav.TurboNavGraphDestination
|
|
12
|
+
import androidx.compose.runtime.Composable
|
|
13
|
+
import androidx.compose.ui.tooling.preview.Preview
|
|
14
|
+
|
|
15
|
+
@TurboNavGraphDestination(uri = "turbo://fragment/numbers")
|
|
16
|
+
class NumbersFragment : NativeFragment() {
|
|
17
|
+
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
|
18
|
+
return setContent(inflater, container) {
|
|
19
|
+
NumbersList()
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@Composable
|
|
25
|
+
fun NumbersList() {
|
|
26
|
+
val numbers = 1..100
|
|
27
|
+
|
|
28
|
+
LazyColumn {
|
|
29
|
+
items(numbers.count()) { index ->
|
|
30
|
+
ListItem(headlineContent = { Text("Row number ${index + 1}") })
|
|
31
|
+
Divider()
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
@Preview
|
|
37
|
+
@Composable
|
|
38
|
+
fun PreviewNumbersList() {
|
|
39
|
+
NumbersList()
|
|
40
|
+
}
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
package <%= package_name %>.features.web
|
|
2
2
|
|
|
3
|
-
import android.os.Bundle
|
|
4
|
-
import android.view.View
|
|
5
|
-
import <%= package_name %>.R
|
|
6
3
|
import <%= package_name %>.base.NavDestination
|
|
7
4
|
import <%= package_name %>.util.SIGN_IN_URL
|
|
8
5
|
import dev.hotwire.turbo.fragments.TurboWebFragment
|
|
@@ -12,26 +9,10 @@ import dev.hotwire.turbo.visit.TurboVisitOptions
|
|
|
12
9
|
|
|
13
10
|
@TurboNavGraphDestination(uri = "turbo://fragment/web")
|
|
14
11
|
open class WebFragment : TurboWebFragment(), NavDestination {
|
|
15
|
-
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
|
16
|
-
super.onViewCreated(view, savedInstanceState); setupMenu()
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
override fun onFormSubmissionStarted(location: String) {
|
|
20
|
-
menuProgress?.isVisible = true
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
override fun onFormSubmissionFinished(location: String) {
|
|
24
|
-
menuProgress?.isVisible = false
|
|
25
|
-
}
|
|
26
|
-
|
|
27
12
|
override fun onVisitErrorReceived(location: String, errorCode: Int) {
|
|
28
13
|
when (errorCode) {
|
|
29
14
|
401 -> navigate(SIGN_IN_URL, TurboVisitOptions(action = REPLACE))
|
|
30
15
|
else -> super.onVisitErrorReceived(location, errorCode)
|
|
31
16
|
}
|
|
32
17
|
}
|
|
33
|
-
|
|
34
|
-
private fun setupMenu() {
|
|
35
|
-
toolbarForNavigation()?.inflateMenu(R.menu.web)
|
|
36
|
-
}
|
|
37
18
|
}
|
|
@@ -4,6 +4,7 @@ import android.webkit.WebView
|
|
|
4
4
|
import androidx.appcompat.app.AppCompatActivity
|
|
5
5
|
import androidx.fragment.app.Fragment
|
|
6
6
|
import dev.hotwire.turbo.config.TurboPathConfiguration
|
|
7
|
+
import <%= package_name %>.features.native.NumbersFragment
|
|
7
8
|
import <%= package_name %>.features.web.WebFragment
|
|
8
9
|
import <%= package_name %>.features.web.WebHomeFragment
|
|
9
10
|
import <%= package_name %>.features.web.WebModalFragment
|
|
@@ -21,7 +22,7 @@ class MainSessionNavHostFragment : TurboSessionNavHostFragment() {
|
|
|
21
22
|
get() = listOf()
|
|
22
23
|
|
|
23
24
|
override val registeredFragments: List<KClass<out Fragment>>
|
|
24
|
-
get() = listOf(WebFragment::class, WebHomeFragment::class, WebModalFragment::class)
|
|
25
|
+
get() = listOf(WebFragment::class, WebHomeFragment::class, WebModalFragment::class, NumbersFragment::class)
|
|
25
26
|
|
|
26
27
|
override val pathConfigurationLocation: TurboPathConfiguration.Location
|
|
27
28
|
get() = TurboPathConfiguration.Location(assetFilePath = "json/configuration.json")
|
data/lib/turbo_native_initializer/templates/android_stack/{app → base/app}/build.gradle.kts.tt
RENAMED
|
@@ -13,8 +13,6 @@ android {
|
|
|
13
13
|
targetSdk = 33
|
|
14
14
|
versionCode = 1
|
|
15
15
|
versionName = "1.0"
|
|
16
|
-
|
|
17
|
-
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
|
18
16
|
}
|
|
19
17
|
|
|
20
18
|
buildTypes {
|
|
@@ -33,12 +31,27 @@ android {
|
|
|
33
31
|
kotlinOptions {
|
|
34
32
|
jvmTarget = "1.8"
|
|
35
33
|
}
|
|
34
|
+
buildFeatures {
|
|
35
|
+
compose = true
|
|
36
|
+
}
|
|
37
|
+
composeOptions {
|
|
38
|
+
kotlinCompilerExtensionVersion = "1.5.2"
|
|
39
|
+
}
|
|
36
40
|
}
|
|
37
|
-
|
|
38
41
|
dependencies {
|
|
42
|
+
// Android
|
|
39
43
|
implementation("androidx.core:core-ktx:1.9.0")
|
|
40
44
|
implementation("androidx.appcompat:appcompat:1.6.1")
|
|
41
45
|
implementation("androidx.browser:browser:1.5.0")
|
|
42
46
|
implementation("com.google.android.material:material:1.9.0")
|
|
47
|
+
|
|
48
|
+
// Jetpack Compose
|
|
49
|
+
implementation(platform("androidx.compose:compose-bom:2023.06.01"))
|
|
50
|
+
implementation("androidx.compose.material3:material3")
|
|
51
|
+
implementation("androidx.compose.ui:ui-tooling-preview")
|
|
52
|
+
debugImplementation("androidx.compose.ui:ui-tooling")
|
|
53
|
+
implementation("androidx.activity:activity-compose:1.7.2")
|
|
54
|
+
|
|
55
|
+
// Turbo Android
|
|
43
56
|
implementation("dev.hotwire:turbo:7.0.0")
|
|
44
57
|
}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
{ "patterns": ["/recede_historical_location"], "properties": { "presentation": "pop" } },
|
|
7
7
|
{ "patterns": ["/resume_historical_location"], "properties": { "presentation": "none" } },
|
|
8
8
|
{ "patterns": ["^/$"], "properties": { "uri": "turbo://fragment/web/home", "presentation": "replace_all" } },
|
|
9
|
-
{ "patterns": ["/new$", "/edit$", "/signin$"], "properties": { "context": "modal", "uri": "turbo://fragment/web/modal" } }
|
|
9
|
+
{ "patterns": ["/new$", "/edit$", "/signin$"], "properties": { "context": "modal", "uri": "turbo://fragment/web/modal" } },
|
|
10
|
+
{ "patterns": ["/numbers$"], "properties": { "uri": "turbo://fragment/numbers", "title": "Numbers" } }
|
|
10
11
|
]
|
|
11
12
|
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<androidx.constraintlayout.widget.ConstraintLayout
|
|
3
|
+
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
4
|
+
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
5
|
+
android:layout_width="match_parent"
|
|
6
|
+
android:layout_height="match_parent">
|
|
7
|
+
|
|
8
|
+
<com.google.android.material.appbar.AppBarLayout
|
|
9
|
+
android:id="@+id/app_bar"
|
|
10
|
+
android:layout_width="match_parent"
|
|
11
|
+
android:layout_height="56dp"
|
|
12
|
+
app:layout_constraintEnd_toEndOf="parent"
|
|
13
|
+
app:layout_constraintStart_toStartOf="parent"
|
|
14
|
+
app:layout_constraintTop_toTopOf="parent">
|
|
15
|
+
|
|
16
|
+
<FrameLayout
|
|
17
|
+
android:layout_width="match_parent"
|
|
18
|
+
android:layout_height="match_parent">
|
|
19
|
+
|
|
20
|
+
<com.google.android.material.appbar.MaterialToolbar
|
|
21
|
+
android:id="@+id/toolbar"
|
|
22
|
+
android:layout_width="match_parent"
|
|
23
|
+
android:layout_height="wrap_content" />
|
|
24
|
+
|
|
25
|
+
</FrameLayout>
|
|
26
|
+
|
|
27
|
+
</com.google.android.material.appbar.AppBarLayout>
|
|
28
|
+
|
|
29
|
+
<androidx.compose.ui.platform.ComposeView
|
|
30
|
+
android:id="@+id/compose_view"
|
|
31
|
+
android:layout_width="match_parent"
|
|
32
|
+
android:layout_height="0dp"
|
|
33
|
+
app:layout_constraintBottom_toBottomOf="parent"
|
|
34
|
+
app:layout_constraintTop_toBottomOf="@+id/app_bar" />
|
|
35
|
+
|
|
36
|
+
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
package <%= package_name %>.base
|
|
2
2
|
|
|
3
3
|
import android.net.Uri
|
|
4
|
-
import android.view.MenuItem
|
|
5
4
|
import androidx.browser.customtabs.CustomTabColorSchemeParams
|
|
6
5
|
import androidx.browser.customtabs.CustomTabsIntent
|
|
7
6
|
import androidx.browser.customtabs.CustomTabsIntent.SHARE_STATE_ON
|
|
@@ -15,9 +14,6 @@ import dev.hotwire.turbo.nav.TurboNavDestination
|
|
|
15
14
|
import dev.hotwire.turbo.nav.TurboNavPresentationContext.MODAL
|
|
16
15
|
|
|
17
16
|
interface NavDestination : TurboNavDestination {
|
|
18
|
-
val menuProgress: MenuItem?
|
|
19
|
-
get() = toolbarForNavigation()?.menu?.findItem(R.id.menu_progress)
|
|
20
|
-
|
|
21
17
|
override fun shouldNavigateTo(newLocation: String): Boolean {
|
|
22
18
|
return when (isNavigable(newLocation)) {
|
|
23
19
|
true -> true
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
package <%= package_name %>.features.native
|
|
2
|
+
|
|
3
|
+
import android.view.LayoutInflater
|
|
4
|
+
import android.view.View
|
|
5
|
+
import android.view.ViewGroup
|
|
6
|
+
import androidx.compose.runtime.Composable
|
|
7
|
+
import androidx.compose.ui.platform.ComposeView
|
|
8
|
+
import androidx.compose.ui.platform.ViewCompositionStrategy
|
|
9
|
+
import dev.hotwire.turbo.fragments.TurboFragment
|
|
10
|
+
import <%= package_name %>.R
|
|
11
|
+
import <%= package_name %>.base.NavDestination
|
|
12
|
+
|
|
13
|
+
abstract class NativeFragment : TurboFragment(), NavDestination {
|
|
14
|
+
fun setContent(inflater: LayoutInflater, container: ViewGroup?, content: @Composable () -> Unit): View? {
|
|
15
|
+
val root = inflater.inflate(R.layout.fragment_native, container, false)
|
|
16
|
+
val composeView = root.findViewById<ComposeView>(R.id.compose_view)
|
|
17
|
+
|
|
18
|
+
composeView.apply {
|
|
19
|
+
setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
|
|
20
|
+
setContent { content.invoke() }
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return root
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
package <%= package_name %>.features.native
|
|
2
|
+
|
|
3
|
+
import android.os.Bundle
|
|
4
|
+
import android.view.LayoutInflater
|
|
5
|
+
import android.view.View
|
|
6
|
+
import android.view.ViewGroup
|
|
7
|
+
import androidx.compose.foundation.lazy.LazyColumn
|
|
8
|
+
import androidx.compose.material3.Divider
|
|
9
|
+
import androidx.compose.material3.ListItem
|
|
10
|
+
import androidx.compose.material3.Text
|
|
11
|
+
import dev.hotwire.turbo.nav.TurboNavGraphDestination
|
|
12
|
+
import androidx.compose.runtime.Composable
|
|
13
|
+
import androidx.compose.ui.tooling.preview.Preview
|
|
14
|
+
|
|
15
|
+
@TurboNavGraphDestination(uri = "turbo://fragment/numbers")
|
|
16
|
+
class NumbersFragment : NativeFragment() {
|
|
17
|
+
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
|
18
|
+
return setContent(inflater, container) {
|
|
19
|
+
NumbersList()
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@Composable
|
|
25
|
+
fun NumbersList() {
|
|
26
|
+
val numbers = 1..100
|
|
27
|
+
|
|
28
|
+
LazyColumn {
|
|
29
|
+
items(numbers.count()) { index ->
|
|
30
|
+
ListItem(headlineContent = { Text("Row number ${index + 1}") })
|
|
31
|
+
Divider()
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
@Preview
|
|
37
|
+
@Composable
|
|
38
|
+
fun PreviewNumbersList() {
|
|
39
|
+
NumbersList()
|
|
40
|
+
}
|
|
@@ -1,29 +1,8 @@
|
|
|
1
1
|
package <%= package_name %>.features.web
|
|
2
2
|
|
|
3
|
-
import android.os.Bundle
|
|
4
|
-
import android.view.View
|
|
5
|
-
import <%= package_name %>.R
|
|
6
3
|
import <%= package_name %>.base.NavDestination
|
|
7
4
|
import dev.hotwire.turbo.fragments.TurboWebFragment
|
|
8
5
|
import dev.hotwire.turbo.nav.TurboNavGraphDestination
|
|
9
|
-
import dev.hotwire.turbo.visit.TurboVisitAction.REPLACE
|
|
10
|
-
import dev.hotwire.turbo.visit.TurboVisitOptions
|
|
11
6
|
|
|
12
7
|
@TurboNavGraphDestination(uri = "turbo://fragment/web")
|
|
13
|
-
open class WebFragment : TurboWebFragment(), NavDestination
|
|
14
|
-
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
|
15
|
-
super.onViewCreated(view, savedInstanceState); setupMenu()
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
override fun onFormSubmissionStarted(location: String) {
|
|
19
|
-
menuProgress?.isVisible = true
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
override fun onFormSubmissionFinished(location: String) {
|
|
23
|
-
menuProgress?.isVisible = false
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
private fun setupMenu() {
|
|
27
|
-
toolbarForNavigation()?.inflateMenu(R.menu.web)
|
|
28
|
-
}
|
|
29
|
-
}
|
|
8
|
+
open class WebFragment : TurboWebFragment(), NavDestination
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
package <%= package_name %>.main
|
|
2
|
+
|
|
3
|
+
import android.webkit.WebView
|
|
4
|
+
import androidx.appcompat.app.AppCompatActivity
|
|
5
|
+
import androidx.fragment.app.Fragment
|
|
6
|
+
import dev.hotwire.turbo.config.TurboPathConfiguration
|
|
7
|
+
import <%= package_name %>.features.native.NumbersFragment
|
|
8
|
+
import <%= package_name %>.features.web.WebFragment
|
|
9
|
+
import <%= package_name %>.features.web.WebHomeFragment
|
|
10
|
+
import <%= package_name %>.features.web.WebModalFragment
|
|
11
|
+
import dev.hotwire.turbo.session.TurboSessionNavHostFragment
|
|
12
|
+
import kotlin.reflect.KClass
|
|
13
|
+
|
|
14
|
+
abstract class BaseSessionNavHostFragment : TurboSessionNavHostFragment() {
|
|
15
|
+
override val registeredActivities: List<KClass<out AppCompatActivity>>
|
|
16
|
+
get() = listOf()
|
|
17
|
+
|
|
18
|
+
override val registeredFragments: List<KClass<out Fragment>>
|
|
19
|
+
get() = listOf(WebFragment::class, WebHomeFragment::class, WebModalFragment::class, NumbersFragment::class)
|
|
20
|
+
|
|
21
|
+
override val pathConfigurationLocation: TurboPathConfiguration.Location
|
|
22
|
+
get() = TurboPathConfiguration.Location(assetFilePath = "json/configuration.json")
|
|
23
|
+
|
|
24
|
+
override fun onSessionCreated() {
|
|
25
|
+
super.onSessionCreated()
|
|
26
|
+
session.webView.settings.userAgentString = customUserAgent(session.webView)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
private fun customUserAgent(webView: WebView): String {
|
|
30
|
+
return "Turbo Native Android ${webView.settings.userAgentString}"
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -9,6 +9,12 @@ import dev.hotwire.turbo.delegates.TurboActivityDelegate
|
|
|
9
9
|
import <%= package_name %>.R
|
|
10
10
|
|
|
11
11
|
class MainActivity : AppCompatActivity(), TurboActivity {
|
|
12
|
+
private val viewFliper: ViewFlipper
|
|
13
|
+
get() = findViewById(R.id.view_flipper)
|
|
14
|
+
|
|
15
|
+
private val bottomNavigationView: BottomNavigationView
|
|
16
|
+
get() = findViewById(R.id.bottom_navigation_view)
|
|
17
|
+
|
|
12
18
|
override lateinit var delegate: TurboActivityDelegate
|
|
13
19
|
|
|
14
20
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
@@ -23,19 +29,16 @@ class MainActivity : AppCompatActivity(), TurboActivity {
|
|
|
23
29
|
}
|
|
24
30
|
|
|
25
31
|
private fun setupBottomNavigationView() {
|
|
26
|
-
val viewFliper = findViewById<ViewFlipper>(R.id.view_flipper)
|
|
27
|
-
val bottomNavigationView = findViewById<BottomNavigationView>(R.id.bottom_navigation_view)
|
|
28
|
-
|
|
29
32
|
bottomNavigationView.setOnItemSelectedListener {
|
|
30
33
|
when (it.itemId) {
|
|
31
34
|
R.id.tab_item_one -> {
|
|
32
|
-
viewFliper.displayedChild = 0
|
|
33
35
|
delegate.currentNavHostFragmentId = R.id.tab_one_nav_host
|
|
36
|
+
viewFliper.displayedChild = 0
|
|
34
37
|
true
|
|
35
38
|
}
|
|
36
39
|
R.id.tab_item_two -> {
|
|
37
|
-
viewFliper.displayedChild = 1
|
|
38
40
|
delegate.currentNavHostFragmentId = R.id.tab_two_nav_host
|
|
41
|
+
viewFliper.displayedChild = 1
|
|
39
42
|
true
|
|
40
43
|
}
|
|
41
44
|
else -> {
|
|
@@ -1,37 +1,9 @@
|
|
|
1
1
|
package <%= package_name %>.main
|
|
2
2
|
|
|
3
|
-
import android.webkit.WebView
|
|
4
|
-
import androidx.appcompat.app.AppCompatActivity
|
|
5
|
-
import androidx.fragment.app.Fragment
|
|
6
|
-
import dev.hotwire.turbo.config.TurboPathConfiguration
|
|
7
|
-
import <%= package_name %>.features.web.WebFragment
|
|
8
|
-
import <%= package_name %>.features.web.WebHomeFragment
|
|
9
|
-
import <%= package_name %>.features.web.WebModalFragment
|
|
10
3
|
import <%= package_name %>.util.CURRENT_URL_1
|
|
11
|
-
import dev.hotwire.turbo.session.TurboSessionNavHostFragment
|
|
12
|
-
import kotlin.reflect.KClass
|
|
13
4
|
|
|
14
5
|
@Suppress("unused")
|
|
15
|
-
class TabOneSessionNavHostFragment :
|
|
16
|
-
override val sessionName = "
|
|
17
|
-
|
|
6
|
+
class TabOneSessionNavHostFragment : BaseSessionNavHostFragment() {
|
|
7
|
+
override val sessionName = "tab_one"
|
|
18
8
|
override val startLocation = CURRENT_URL_1
|
|
19
|
-
|
|
20
|
-
override val registeredActivities: List<KClass<out AppCompatActivity>>
|
|
21
|
-
get() = listOf()
|
|
22
|
-
|
|
23
|
-
override val registeredFragments: List<KClass<out Fragment>>
|
|
24
|
-
get() = listOf(WebFragment::class, WebHomeFragment::class, WebModalFragment::class)
|
|
25
|
-
|
|
26
|
-
override val pathConfigurationLocation: TurboPathConfiguration.Location
|
|
27
|
-
get() = TurboPathConfiguration.Location(assetFilePath = "json/configuration.json")
|
|
28
|
-
|
|
29
|
-
override fun onSessionCreated() {
|
|
30
|
-
super.onSessionCreated()
|
|
31
|
-
session.webView.settings.userAgentString = customUserAgent(session.webView)
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
private fun customUserAgent(webView: WebView): String {
|
|
35
|
-
return "Turbo Native Android ${webView.settings.userAgentString}"
|
|
36
|
-
}
|
|
37
9
|
}
|
|
@@ -1,37 +1,9 @@
|
|
|
1
1
|
package <%= package_name %>.main
|
|
2
2
|
|
|
3
|
-
import android.webkit.WebView
|
|
4
|
-
import androidx.appcompat.app.AppCompatActivity
|
|
5
|
-
import androidx.fragment.app.Fragment
|
|
6
|
-
import dev.hotwire.turbo.config.TurboPathConfiguration
|
|
7
|
-
import <%= package_name %>.features.web.WebFragment
|
|
8
|
-
import <%= package_name %>.features.web.WebHomeFragment
|
|
9
|
-
import <%= package_name %>.features.web.WebModalFragment
|
|
10
3
|
import <%= package_name %>.util.CURRENT_URL_2
|
|
11
|
-
import dev.hotwire.turbo.session.TurboSessionNavHostFragment
|
|
12
|
-
import kotlin.reflect.KClass
|
|
13
4
|
|
|
14
5
|
@Suppress("unused")
|
|
15
|
-
class TabTwoSessionNavHostFragment :
|
|
16
|
-
override val sessionName = "
|
|
17
|
-
|
|
6
|
+
class TabTwoSessionNavHostFragment : BaseSessionNavHostFragment() {
|
|
7
|
+
override val sessionName = "tab_two"
|
|
18
8
|
override val startLocation = CURRENT_URL_2
|
|
19
|
-
|
|
20
|
-
override val registeredActivities: List<KClass<out AppCompatActivity>>
|
|
21
|
-
get() = listOf()
|
|
22
|
-
|
|
23
|
-
override val registeredFragments: List<KClass<out Fragment>>
|
|
24
|
-
get() = listOf(WebFragment::class, WebHomeFragment::class, WebModalFragment::class)
|
|
25
|
-
|
|
26
|
-
override val pathConfigurationLocation: TurboPathConfiguration.Location
|
|
27
|
-
get() = TurboPathConfiguration.Location(assetFilePath = "json/configuration.json")
|
|
28
|
-
|
|
29
|
-
override fun onSessionCreated() {
|
|
30
|
-
super.onSessionCreated()
|
|
31
|
-
session.webView.settings.userAgentString = customUserAgent(session.webView)
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
private fun customUserAgent(webView: WebView): String {
|
|
35
|
-
return "Turbo Native Android ${webView.settings.userAgentString}"
|
|
36
|
-
}
|
|
37
9
|
}
|