├── .gitignore
├── .idea
├── .gitignore
├── androidTestResultsUserPreferences.xml
├── checkstyle-idea.xml
├── codeStyles
│ ├── Project.xml
│ └── codeStyleConfig.xml
├── compiler.xml
├── deploymentTargetDropDown.xml
├── deploymentTargetSelector.xml
├── inspectionProfiles
│ └── Project_Default.xml
├── jarRepositories.xml
├── kotlinc.xml
├── markdown-navigator-enh.xml
├── markdown-navigator.xml
├── misc.xml
├── runConfigurations.xml
└── uiDesigner.xml
├── CHANGELOG.md
├── CONTRIBUTING.md
├── LICENSE.md
├── README.md
├── build.gradle
├── demos
├── core
│ ├── .gitignore
│ ├── build.gradle
│ ├── consumer-rules.pro
│ ├── documentation
│ │ └── kotlin
│ │ │ ├── demos-core-lib
│ │ │ ├── com.grarcht.shuttle.demo.core.image
│ │ │ │ ├── -bitmap-decoder
│ │ │ │ │ ├── -bitmap-decoder.html
│ │ │ │ │ ├── decode-bitmap.html
│ │ │ │ │ └── index.html
│ │ │ │ ├── -image-message-type
│ │ │ │ │ ├── -image-data
│ │ │ │ │ │ ├── index.html
│ │ │ │ │ │ ├── name.html
│ │ │ │ │ │ ├── ordinal.html
│ │ │ │ │ │ └── value.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── to-string.html
│ │ │ │ │ ├── value-of.html
│ │ │ │ │ ├── value.html
│ │ │ │ │ └── values.html
│ │ │ │ ├── -image-model
│ │ │ │ │ ├── -companion
│ │ │ │ │ │ └── index.html
│ │ │ │ │ ├── -image-model.html
│ │ │ │ │ ├── cargo-id.html
│ │ │ │ │ ├── equals.html
│ │ │ │ │ ├── hash-code.html
│ │ │ │ │ ├── image-data.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ └── to-string.html
│ │ │ │ └── index.html
│ │ │ ├── com.grarcht.shuttle.demo.core.io
│ │ │ │ ├── -i-o-result
│ │ │ │ │ ├── -error
│ │ │ │ │ │ ├── -error.html
│ │ │ │ │ │ ├── index.html
│ │ │ │ │ │ ├── message.html
│ │ │ │ │ │ └── throwable.html
│ │ │ │ │ ├── -loading
│ │ │ │ │ │ └── index.html
│ │ │ │ │ ├── -success
│ │ │ │ │ │ ├── -success.html
│ │ │ │ │ │ ├── data.html
│ │ │ │ │ │ └── index.html
│ │ │ │ │ ├── -unknown
│ │ │ │ │ │ └── index.html
│ │ │ │ │ └── index.html
│ │ │ │ ├── -raw-resource-gateway
│ │ │ │ │ ├── -companion
│ │ │ │ │ │ ├── index.html
│ │ │ │ │ │ └── with.html
│ │ │ │ │ ├── -raw-resource-gateway.html
│ │ │ │ │ ├── bytes-from-raw-resource.html
│ │ │ │ │ ├── create.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ └── log-tag.html
│ │ │ │ └── index.html
│ │ │ ├── com.grarcht.shuttle.demo.core.os
│ │ │ │ ├── get-parcelable-with.html
│ │ │ │ └── index.html
│ │ │ ├── index.html
│ │ │ └── package-list
│ │ │ ├── images
│ │ │ ├── anchor-copy-button.svg
│ │ │ ├── arrow_down.svg
│ │ │ ├── copy-icon.svg
│ │ │ ├── copy-successful-icon.svg
│ │ │ ├── docs_logo.svg
│ │ │ ├── footer-go-to-link.svg
│ │ │ ├── go-to-top-icon.svg
│ │ │ ├── logo-icon.svg
│ │ │ ├── nav-icons
│ │ │ │ ├── abstract-class-kotlin.svg
│ │ │ │ ├── abstract-class.svg
│ │ │ │ ├── annotation-kotlin.svg
│ │ │ │ ├── annotation.svg
│ │ │ │ ├── class-kotlin.svg
│ │ │ │ ├── class.svg
│ │ │ │ ├── enum-kotlin.svg
│ │ │ │ ├── enum.svg
│ │ │ │ ├── exception-class.svg
│ │ │ │ ├── field-value.svg
│ │ │ │ ├── field-variable.svg
│ │ │ │ ├── function.svg
│ │ │ │ ├── interface-kotlin.svg
│ │ │ │ ├── interface.svg
│ │ │ │ └── object.svg
│ │ │ └── theme-toggle.svg
│ │ │ ├── index.html
│ │ │ ├── navigation.html
│ │ │ ├── scripts
│ │ │ ├── clipboard.js
│ │ │ ├── main.js
│ │ │ ├── navigation-loader.js
│ │ │ ├── navigation-pane.json
│ │ │ ├── pages.js
│ │ │ ├── pages.json
│ │ │ ├── platform-content-handler.js
│ │ │ ├── prism.js
│ │ │ ├── sourceset_dependencies.js
│ │ │ └── symbol-parameters-wrapper_deferred.js
│ │ │ └── styles
│ │ │ ├── jetbrains-mono.css
│ │ │ ├── logo-styles.css
│ │ │ ├── main.css
│ │ │ ├── prism.css
│ │ │ └── style.css
│ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ └── com
│ │ │ └── grarcht
│ │ │ └── shuttle
│ │ │ └── demo
│ │ │ └── core
│ │ │ ├── image
│ │ │ ├── BitmapDecoder.kt
│ │ │ ├── ImageMessageType.kt
│ │ │ └── ImageModel.kt
│ │ │ ├── io
│ │ │ ├── IOResult.kt
│ │ │ └── RawResourceGateway.kt
│ │ │ └── os
│ │ │ └── BundleKtx.kt
│ │ └── res
│ │ ├── layout
│ │ └── first_view.xml
│ │ ├── raw
│ │ ├── broken_soccer_ball.jpg
│ │ ├── loading.jpg
│ │ └── tower.jpg
│ │ └── values
│ │ ├── colors.xml
│ │ ├── dimens.xml
│ │ ├── strings.xml
│ │ └── styles.xml
├── mvc
│ ├── .gitignore
│ ├── build.gradle
│ ├── documentation
│ │ └── kotlin
│ │ │ ├── demo-mvc
│ │ │ ├── com.grarcht.shuttle.demo.mvc.controller
│ │ │ │ ├── -m-v-c-first-controller-fragment
│ │ │ │ │ ├── -companion
│ │ │ │ │ │ ├── -t-a-g.html
│ │ │ │ │ │ └── index.html
│ │ │ │ │ ├── -m-v-c-first-controller-fragment.html
│ │ │ │ │ ├── image-model.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── on-activity-created.html
│ │ │ │ │ ├── on-create-view.html
│ │ │ │ │ ├── on-create.html
│ │ │ │ │ ├── on-destroy-view.html
│ │ │ │ │ ├── on-resume.html
│ │ │ │ │ ├── on-view-created.html
│ │ │ │ │ └── shuttle.html
│ │ │ │ ├── -m-v-c-second-controller-activity
│ │ │ │ │ ├── -m-v-c-second-controller-activity.html
│ │ │ │ │ └── index.html
│ │ │ │ ├── -m-v-c-second-controller-fragment
│ │ │ │ │ ├── -m-v-c-second-controller-fragment.html
│ │ │ │ │ ├── image-model.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── on-create-view.html
│ │ │ │ │ ├── on-destroy-view.html
│ │ │ │ │ ├── on-save-instance-state.html
│ │ │ │ │ ├── on-view-created.html
│ │ │ │ │ ├── shuttle.html
│ │ │ │ │ └── stored-cargo-id.html
│ │ │ │ ├── -main-activity
│ │ │ │ │ ├── -main-activity.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ └── shuttle.html
│ │ │ │ └── index.html
│ │ │ ├── com.grarcht.shuttle.demo.mvc.dependencyinjection
│ │ │ │ ├── -app-module
│ │ │ │ │ ├── index.html
│ │ │ │ │ └── provide-shuttle.html
│ │ │ │ └── index.html
│ │ │ ├── com.grarcht.shuttle.demo.mvc
│ │ │ │ ├── -demo-application
│ │ │ │ │ ├── -demo-application.html
│ │ │ │ │ └── index.html
│ │ │ │ └── index.html
│ │ │ ├── index.html
│ │ │ └── package-list
│ │ │ ├── images
│ │ │ ├── anchor-copy-button.svg
│ │ │ ├── arrow_down.svg
│ │ │ ├── copy-icon.svg
│ │ │ ├── copy-successful-icon.svg
│ │ │ ├── docs_logo.svg
│ │ │ ├── footer-go-to-link.svg
│ │ │ ├── go-to-top-icon.svg
│ │ │ ├── logo-icon.svg
│ │ │ ├── nav-icons
│ │ │ │ ├── abstract-class-kotlin.svg
│ │ │ │ ├── abstract-class.svg
│ │ │ │ ├── annotation-kotlin.svg
│ │ │ │ ├── annotation.svg
│ │ │ │ ├── class-kotlin.svg
│ │ │ │ ├── class.svg
│ │ │ │ ├── enum-kotlin.svg
│ │ │ │ ├── enum.svg
│ │ │ │ ├── exception-class.svg
│ │ │ │ ├── field-value.svg
│ │ │ │ ├── field-variable.svg
│ │ │ │ ├── function.svg
│ │ │ │ ├── interface-kotlin.svg
│ │ │ │ ├── interface.svg
│ │ │ │ └── object.svg
│ │ │ └── theme-toggle.svg
│ │ │ ├── index.html
│ │ │ ├── navigation.html
│ │ │ ├── scripts
│ │ │ ├── clipboard.js
│ │ │ ├── main.js
│ │ │ ├── navigation-loader.js
│ │ │ ├── navigation-pane.json
│ │ │ ├── pages.js
│ │ │ ├── pages.json
│ │ │ ├── platform-content-handler.js
│ │ │ ├── prism.js
│ │ │ ├── sourceset_dependencies.js
│ │ │ └── symbol-parameters-wrapper_deferred.js
│ │ │ └── styles
│ │ │ ├── jetbrains-mono.css
│ │ │ ├── logo-styles.css
│ │ │ ├── main.css
│ │ │ ├── prism.css
│ │ │ └── style.css
│ ├── proguard-rules.pro
│ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ └── com
│ │ │ └── grarcht
│ │ │ └── shuttle
│ │ │ └── demo
│ │ │ └── mvc
│ │ │ ├── DemoApplication.kt
│ │ │ ├── controller
│ │ │ ├── MVCFirstControllerFragment.kt
│ │ │ ├── MVCSecondControllerActivity.kt
│ │ │ ├── MVCSecondControllerFragment.kt
│ │ │ └── MainActivity.kt
│ │ │ └── dependencyinjection
│ │ │ └── AppModule.kt
│ │ └── res
│ │ ├── drawable-v24
│ │ └── ic_launcher_foreground.xml
│ │ ├── drawable
│ │ └── ic_launcher_background.xml
│ │ ├── layout
│ │ ├── main_activity.xml
│ │ ├── main_fragment.xml
│ │ ├── second_activity.xml
│ │ └── second_fragment.xml
│ │ ├── mipmap-anydpi-v26
│ │ ├── ic_launcher.xml
│ │ └── ic_launcher_round.xml
│ │ ├── mipmap-hdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-mdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-xhdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-xxhdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-xxxhdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ └── values
│ │ ├── colors.xml
│ │ ├── dimens.xml
│ │ ├── strings.xml
│ │ └── styles.xml
├── mvvm-with-a-service
│ ├── .gitignore
│ ├── build.gradle
│ ├── documentation
│ │ └── kotlin
│ │ │ ├── demo-mvvm-with-a-service
│ │ │ ├── com.grarcht.shuttle.demo.mvvmwithaservice.dependencyinjection
│ │ │ │ ├── -app-module
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── provide-remote-service-config.html
│ │ │ │ │ ├── provide-shuttle-service-connection-factory.html
│ │ │ │ │ ├── provide-shuttle.html
│ │ │ │ │ ├── provides-main-scope.html
│ │ │ │ │ ├── provides-reporter.html
│ │ │ │ │ └── provides-shuttle-error-observable.html
│ │ │ │ └── index.html
│ │ │ ├── com.grarcht.shuttle.demo.mvvmwithaservice.model
│ │ │ │ ├── -image-result
│ │ │ │ │ ├── -companion
│ │ │ │ │ │ ├── get-image-result.html
│ │ │ │ │ │ └── index.html
│ │ │ │ │ ├── -e-r-r-o-r
│ │ │ │ │ │ └── index.html
│ │ │ │ │ ├── -l-o-a-d-i-n-g
│ │ │ │ │ │ └── index.html
│ │ │ │ │ ├── -s-u-c-c-e-s-s
│ │ │ │ │ │ └── index.html
│ │ │ │ │ ├── -u-n-k-n-o-w-n
│ │ │ │ │ │ └── index.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── state.html
│ │ │ │ │ ├── value-of.html
│ │ │ │ │ └── values.html
│ │ │ │ ├── -messaging-action
│ │ │ │ │ ├── -companion
│ │ │ │ │ │ ├── get-action-with.html
│ │ │ │ │ │ └── index.html
│ │ │ │ │ ├── -t-r-a-n-s-p-o-r-t_-i-m-a-g-e_-c-a-r-g-o_-w-i-t-h-o-u-t_-s-h-u-t-t-l-e
│ │ │ │ │ │ └── index.html
│ │ │ │ │ ├── -t-r-a-n-s-p-o-r-t_-i-m-a-g-e_-c-a-r-g-o_-w-i-t-h_-s-h-u-t-t-l-e
│ │ │ │ │ │ └── index.html
│ │ │ │ │ ├── -u-n-k-n-o-w-n_-d-o_-n-o-t_-u-s-e
│ │ │ │ │ │ └── index.html
│ │ │ │ │ ├── action-value.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── value-of.html
│ │ │ │ │ └── values.html
│ │ │ │ ├── -receiver
│ │ │ │ │ ├── -receiver.html
│ │ │ │ │ ├── flow.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── on-receive.html
│ │ │ │ │ ├── register.html
│ │ │ │ │ ├── release-resources.html
│ │ │ │ │ └── unregister-receiver-quietly.html
│ │ │ │ ├── -remote-service
│ │ │ │ │ ├── -companion
│ │ │ │ │ │ ├── -k-e-y_-e-r-r-o-r_-m-e-s-s-a-g-e.html
│ │ │ │ │ │ ├── -k-e-y_-i-m-a-g-e_-d-a-t-a.html
│ │ │ │ │ │ ├── -k-e-y_-i-m-a-g-e_-i-d.html
│ │ │ │ │ │ ├── -k-e-y_-i-m-a-g-e_-r-e-s-u-l-t.html
│ │ │ │ │ │ ├── -s-e-r-v-i-c-e_-n-a-m-e.html
│ │ │ │ │ │ └── index.html
│ │ │ │ │ ├── -remote-service.html
│ │ │ │ │ ├── config.html
│ │ │ │ │ ├── get-cargo-intent-for-transport.html
│ │ │ │ │ ├── get-service-name.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── on-destroy.html
│ │ │ │ │ └── on-receive-message.html
│ │ │ │ └── index.html
│ │ │ ├── com.grarcht.shuttle.demo.mvvmwithaservice.view
│ │ │ │ ├── -dialog-type
│ │ │ │ │ ├── -c-o-n-t-e-n-t
│ │ │ │ │ │ └── index.html
│ │ │ │ │ ├── -companion
│ │ │ │ │ │ ├── index.html
│ │ │ │ │ │ └── to-dialog-type.html
│ │ │ │ │ ├── -e-r-r-o-r
│ │ │ │ │ │ └── index.html
│ │ │ │ │ ├── -l-o-a-d-i-n-g
│ │ │ │ │ │ └── index.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── type-value.html
│ │ │ │ │ ├── value-of.html
│ │ │ │ │ └── values.html
│ │ │ │ ├── -l-c-e-dialog-fragment
│ │ │ │ │ ├── -companion
│ │ │ │ │ │ ├── -t-a-g_-l-c-e_-c-o-n-t-e-n-t.html
│ │ │ │ │ │ ├── -t-a-g_-l-c-e_-e-r-r-o-r.html
│ │ │ │ │ │ ├── -t-a-g_-l-c-e_-l-o-a-d-i-n-g.html
│ │ │ │ │ │ ├── create-content-dialog-with.html
│ │ │ │ │ │ ├── create-error-dialog-with.html
│ │ │ │ │ │ ├── create-loading-dialog-with.html
│ │ │ │ │ │ └── index.html
│ │ │ │ │ ├── -l-c-e-dialog-fragment.html
│ │ │ │ │ ├── dialog-type.html
│ │ │ │ │ ├── fade-out-view.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── on-create-dialog.html
│ │ │ │ │ ├── on-create-view.html
│ │ │ │ │ ├── on-create.html
│ │ │ │ │ ├── on-dismiss.html
│ │ │ │ │ ├── on-view-created.html
│ │ │ │ │ └── set-on-dismiss-listener.html
│ │ │ │ ├── -m-v-v-m-view-activity
│ │ │ │ │ ├── -m-v-v-m-view-activity.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ └── shuttle.html
│ │ │ │ ├── -m-v-v-m-view-fragment
│ │ │ │ │ ├── -companion
│ │ │ │ │ │ ├── -t-a-g.html
│ │ │ │ │ │ └── index.html
│ │ │ │ │ ├── -m-v-v-m-view-fragment.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── on-create-view.html
│ │ │ │ │ ├── on-resume.html
│ │ │ │ │ ├── on-stop.html
│ │ │ │ │ ├── on-view-created.html
│ │ │ │ │ └── shuttle.html
│ │ │ │ └── index.html
│ │ │ ├── com.grarcht.shuttle.demo.mvvmwithaservice.viewmodel
│ │ │ │ ├── -demo-view-model
│ │ │ │ │ ├── -companion
│ │ │ │ │ │ ├── -l-o-g_-t-a-g.html
│ │ │ │ │ │ └── index.html
│ │ │ │ │ ├── -demo-view-model.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── init-messaging.html
│ │ │ │ │ ├── transport-image-cargo-using-shuttle-and-i-p-c.html
│ │ │ │ │ └── transport-image-cargo-without-using-shuttle.html
│ │ │ │ └── index.html
│ │ │ ├── com.grarcht.shuttle.demo.mvvmwithaservice.visibility
│ │ │ │ ├── -default-logger-visibility-reporter
│ │ │ │ │ ├── -default-logger-visibility-reporter.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ └── report-for-visibility-with.html
│ │ │ │ └── index.html
│ │ │ ├── com.grarcht.shuttle.demo.mvvmwithaservice
│ │ │ │ ├── -demo-application
│ │ │ │ │ ├── -demo-application.html
│ │ │ │ │ └── index.html
│ │ │ │ └── index.html
│ │ │ └── package-list
│ │ │ ├── images
│ │ │ ├── anchor-copy-button.svg
│ │ │ ├── arrow_down.svg
│ │ │ ├── copy-icon.svg
│ │ │ ├── copy-successful-icon.svg
│ │ │ ├── footer-go-to-link.svg
│ │ │ ├── go-to-top-icon.svg
│ │ │ ├── logo-icon.svg
│ │ │ ├── nav-icons
│ │ │ │ ├── abstract-class-kotlin.svg
│ │ │ │ ├── abstract-class.svg
│ │ │ │ ├── annotation-kotlin.svg
│ │ │ │ ├── annotation.svg
│ │ │ │ ├── class-kotlin.svg
│ │ │ │ ├── class.svg
│ │ │ │ ├── enum-kotlin.svg
│ │ │ │ ├── enum.svg
│ │ │ │ ├── exception-class.svg
│ │ │ │ ├── field-value.svg
│ │ │ │ ├── field-variable.svg
│ │ │ │ ├── function.svg
│ │ │ │ ├── interface-kotlin.svg
│ │ │ │ ├── interface.svg
│ │ │ │ └── object.svg
│ │ │ └── theme-toggle.svg
│ │ │ ├── index.html
│ │ │ ├── navigation.html
│ │ │ ├── scripts
│ │ │ ├── clipboard.js
│ │ │ ├── main.js
│ │ │ ├── navigation-loader.js
│ │ │ ├── pages.json
│ │ │ ├── platform-content-handler.js
│ │ │ ├── prism.js
│ │ │ ├── sourceset_dependencies.js
│ │ │ └── symbol-parameters-wrapper_deferred.js
│ │ │ └── styles
│ │ │ ├── jetbrains-mono.css
│ │ │ ├── logo-styles.css
│ │ │ ├── main.css
│ │ │ ├── prism.css
│ │ │ └── style.css
│ ├── proguard-rules.pro
│ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ └── com
│ │ │ └── grarcht
│ │ │ └── shuttle
│ │ │ └── demo
│ │ │ └── mvvmwithaservice
│ │ │ ├── DemoApplication.kt
│ │ │ ├── dependencyinjection
│ │ │ └── AppModule.kt
│ │ │ ├── model
│ │ │ ├── ImageResult.kt
│ │ │ ├── MessagingAction.kt
│ │ │ ├── Receiver.kt
│ │ │ └── RemoteService.kt
│ │ │ ├── view
│ │ │ ├── DialogType.kt
│ │ │ ├── LCEDialogFragment.kt
│ │ │ ├── MVVMViewActivity.kt
│ │ │ └── MVVMViewFragment.kt
│ │ │ ├── viewmodel
│ │ │ └── DemoViewModel.kt
│ │ │ └── visibility
│ │ │ └── DefaultLoggerVisibilityReporter.kt
│ │ └── res
│ │ ├── drawable-v24
│ │ └── ic_launcher_foreground.xml
│ │ ├── drawable
│ │ └── ic_launcher_background.xml
│ │ ├── layout
│ │ ├── lce_view.xml
│ │ ├── main_activity.xml
│ │ └── main_fragment.xml
│ │ ├── mipmap-anydpi-v26
│ │ ├── ic_launcher.xml
│ │ └── ic_launcher_round.xml
│ │ ├── mipmap-hdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-mdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-xhdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-xxhdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-xxxhdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ └── values
│ │ ├── colors.xml
│ │ ├── dimens.xml
│ │ ├── strings.xml
│ │ └── styles.xml
├── mvvm-with-compose
│ ├── .gitignore
│ ├── build.gradle
│ ├── documentation
│ │ └── kotlin
│ │ │ ├── demo-mvvm-with-compose
│ │ │ ├── com.grarcht.shuttle.demo.mvvmwithcompose.dependencyinjection
│ │ │ │ ├── -app-module
│ │ │ │ │ ├── index.html
│ │ │ │ │ └── provide-shuttle.html
│ │ │ │ └── index.html
│ │ │ ├── com.grarcht.shuttle.demo.mvvmwithcompose.ui
│ │ │ │ ├── index.html
│ │ │ │ └── raw-painter-resource.html
│ │ │ ├── com.grarcht.shuttle.demo.mvvmwithcompose.view
│ │ │ │ ├── -m-v-v-m-first-view-activity
│ │ │ │ │ ├── -m-v-v-m-first-view-activity.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ └── shuttle.html
│ │ │ │ ├── -m-v-v-m-first-view
│ │ │ │ │ ├── -m-v-v-m-first-view.html
│ │ │ │ │ ├── -set-view-content.html
│ │ │ │ │ ├── clean-up-view-resources.html
│ │ │ │ │ └── index.html
│ │ │ │ ├── -m-v-v-m-second-view-activity
│ │ │ │ │ ├── -m-v-v-m-second-view-activity.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── on-save-instance-state.html
│ │ │ │ │ └── shuttle.html
│ │ │ │ ├── -m-v-v-m-second-view
│ │ │ │ │ ├── -m-v-v-m-second-view.html
│ │ │ │ │ ├── -set-view-content.html
│ │ │ │ │ ├── clean-up-view-resources.html
│ │ │ │ │ ├── get-saved-instance-state.html
│ │ │ │ │ └── index.html
│ │ │ │ └── index.html
│ │ │ ├── com.grarcht.shuttle.demo.mvvmwithcompose.viewmodel
│ │ │ │ ├── -first-view-model
│ │ │ │ │ ├── -first-view-model.html
│ │ │ │ │ ├── get-image.html
│ │ │ │ │ └── index.html
│ │ │ │ ├── -second-view-model
│ │ │ │ │ ├── -second-view-model.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ └── load-image.html
│ │ │ │ └── index.html
│ │ │ ├── com.grarcht.shuttle.demo.mvvmwithcompose
│ │ │ │ ├── -demo-application
│ │ │ │ │ ├── -demo-application.html
│ │ │ │ │ └── index.html
│ │ │ │ └── index.html
│ │ │ └── package-list
│ │ │ ├── images
│ │ │ ├── anchor-copy-button.svg
│ │ │ ├── arrow_down.svg
│ │ │ ├── copy-icon.svg
│ │ │ ├── copy-successful-icon.svg
│ │ │ ├── footer-go-to-link.svg
│ │ │ ├── go-to-top-icon.svg
│ │ │ ├── logo-icon.svg
│ │ │ ├── nav-icons
│ │ │ │ ├── abstract-class-kotlin.svg
│ │ │ │ ├── abstract-class.svg
│ │ │ │ ├── annotation-kotlin.svg
│ │ │ │ ├── annotation.svg
│ │ │ │ ├── class-kotlin.svg
│ │ │ │ ├── class.svg
│ │ │ │ ├── enum-kotlin.svg
│ │ │ │ ├── enum.svg
│ │ │ │ ├── exception-class.svg
│ │ │ │ ├── field-value.svg
│ │ │ │ ├── field-variable.svg
│ │ │ │ ├── function.svg
│ │ │ │ ├── interface-kotlin.svg
│ │ │ │ ├── interface.svg
│ │ │ │ └── object.svg
│ │ │ └── theme-toggle.svg
│ │ │ ├── index.html
│ │ │ ├── navigation.html
│ │ │ ├── scripts
│ │ │ ├── clipboard.js
│ │ │ ├── main.js
│ │ │ ├── navigation-loader.js
│ │ │ ├── pages.json
│ │ │ ├── platform-content-handler.js
│ │ │ ├── prism.js
│ │ │ ├── sourceset_dependencies.js
│ │ │ └── symbol-parameters-wrapper_deferred.js
│ │ │ └── styles
│ │ │ ├── jetbrains-mono.css
│ │ │ ├── logo-styles.css
│ │ │ ├── main.css
│ │ │ ├── prism.css
│ │ │ └── style.css
│ ├── proguard-rules.pro
│ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ └── com
│ │ │ └── grarcht
│ │ │ └── shuttle
│ │ │ └── demo
│ │ │ └── mvvmwithcompose
│ │ │ ├── DemoApplication.kt
│ │ │ ├── dependencyinjection
│ │ │ └── AppModule.kt
│ │ │ ├── ui
│ │ │ └── RawPainterResource.kt
│ │ │ ├── view
│ │ │ ├── MVVMFirstView.kt
│ │ │ ├── MVVMFirstViewActivity.kt
│ │ │ ├── MVVMSecondView.kt
│ │ │ └── MVVMSecondViewActivity.kt
│ │ │ └── viewmodel
│ │ │ ├── FirstViewModel.kt
│ │ │ └── SecondViewModel.kt
│ │ └── res
│ │ ├── drawable-v24
│ │ └── ic_launcher_foreground.xml
│ │ ├── drawable
│ │ └── ic_launcher_background.xml
│ │ ├── layout
│ │ └── activity_main.xml
│ │ ├── mipmap-anydpi-v26
│ │ ├── ic_launcher.xml
│ │ └── ic_launcher_round.xml
│ │ ├── mipmap-hdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-mdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-xhdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-xxhdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-xxxhdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ └── values
│ │ ├── colors.xml
│ │ ├── dimens.xml
│ │ ├── strings.xml
│ │ └── styles.xml
├── mvvm-with-navigation
│ ├── .gitignore
│ ├── build.gradle
│ ├── documentation
│ │ └── kotlin
│ │ │ ├── demo-mvvm-with-navigation
│ │ │ ├── com.grarcht.shuttle.demo.mvvmwithnavigation.dependencyinjection
│ │ │ │ ├── -app-module
│ │ │ │ │ ├── index.html
│ │ │ │ │ └── provide-shuttle.html
│ │ │ │ └── index.html
│ │ │ ├── com.grarcht.shuttle.demo.mvvmwithnavigation.view
│ │ │ │ ├── -m-v-v-m-nav-entry-point-view-activity
│ │ │ │ │ ├── -m-v-v-m-nav-entry-point-view-activity.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ └── shuttle.html
│ │ │ │ ├── -m-v-v-m-nav-first-view-fragment
│ │ │ │ │ ├── -m-v-v-m-nav-first-view-fragment.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── on-create-view.html
│ │ │ │ │ ├── on-destroy-view.html
│ │ │ │ │ ├── on-resume.html
│ │ │ │ │ ├── on-view-created.html
│ │ │ │ │ └── shuttle.html
│ │ │ │ ├── -m-v-v-m-nav-second-view-activity
│ │ │ │ │ ├── -m-v-v-m-nav-second-view-activity.html
│ │ │ │ │ └── index.html
│ │ │ │ ├── -m-v-v-m-nav-second-view-fragment
│ │ │ │ │ ├── -m-v-v-m-nav-second-view-fragment.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── on-create-view.html
│ │ │ │ │ ├── on-destroy-view.html
│ │ │ │ │ ├── on-save-instance-state.html
│ │ │ │ │ ├── on-view-created.html
│ │ │ │ │ └── shuttle.html
│ │ │ │ └── index.html
│ │ │ ├── com.grarcht.shuttle.demo.mvvmwithnavigation.viewmodel
│ │ │ │ ├── -first-view-model
│ │ │ │ │ ├── -first-view-model.html
│ │ │ │ │ ├── get-image.html
│ │ │ │ │ └── index.html
│ │ │ │ ├── -second-view-model
│ │ │ │ │ ├── -second-view-model.html
│ │ │ │ │ ├── image-model.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── load-image.html
│ │ │ │ │ └── shuttle-pickup-cargo-result.html
│ │ │ │ └── index.html
│ │ │ ├── com.grarcht.shuttle.demo.mvvmwithnavigation
│ │ │ │ ├── -demo-application
│ │ │ │ │ ├── -demo-application.html
│ │ │ │ │ └── index.html
│ │ │ │ └── index.html
│ │ │ ├── index.html
│ │ │ └── package-list
│ │ │ ├── demo
│ │ │ ├── com.grarcht.shuttle.demo.commonviews
│ │ │ │ ├── -first-view
│ │ │ │ │ ├── -first-view.html
│ │ │ │ │ ├── enable-buttons.html
│ │ │ │ │ ├── extract-args.html
│ │ │ │ │ ├── image-model.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── on-create-view.html
│ │ │ │ │ └── on-view-created.html
│ │ │ │ ├── -second-view
│ │ │ │ │ ├── -second-view.html
│ │ │ │ │ ├── extract-args.html
│ │ │ │ │ ├── get-save-instance-state.html
│ │ │ │ │ ├── image-model.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── init-loading-view.html
│ │ │ │ │ ├── on-create-view.html
│ │ │ │ │ ├── on-destroy-view.html
│ │ │ │ │ ├── on-loading.html
│ │ │ │ │ ├── show-error-view.html
│ │ │ │ │ ├── show-success-view.html
│ │ │ │ │ └── stored-cargo-id.html
│ │ │ │ └── index.html
│ │ │ ├── com.grarcht.shuttle.demo.dependencyinjection
│ │ │ │ ├── -app-module
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── provide-second-view-model-factory.html
│ │ │ │ │ └── provide-shuttle.html
│ │ │ │ └── index.html
│ │ │ ├── com.grarcht.shuttle.demo.image
│ │ │ │ ├── -bitmap-decoder
│ │ │ │ │ ├── -bitmap-decoder.html
│ │ │ │ │ ├── decode-bitmap.html
│ │ │ │ │ └── index.html
│ │ │ │ ├── -image-message-type
│ │ │ │ │ ├── -image-data
│ │ │ │ │ │ ├── index.html
│ │ │ │ │ │ ├── name.html
│ │ │ │ │ │ ├── ordinal.html
│ │ │ │ │ │ └── value.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── to-string.html
│ │ │ │ │ └── value.html
│ │ │ │ ├── -image-model
│ │ │ │ │ ├── -c-r-e-a-t-o-r
│ │ │ │ │ │ ├── create-from-parcel.html
│ │ │ │ │ │ ├── index.html
│ │ │ │ │ │ └── new-array.html
│ │ │ │ │ ├── -image-model.html
│ │ │ │ │ ├── cargo-id.html
│ │ │ │ │ ├── describe-contents.html
│ │ │ │ │ ├── equals.html
│ │ │ │ │ ├── hash-code.html
│ │ │ │ │ ├── image-data.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── to-string.html
│ │ │ │ │ └── write-to-parcel.html
│ │ │ │ └── index.html
│ │ │ ├── com.grarcht.shuttle.demo.io
│ │ │ │ ├── -i-o-result
│ │ │ │ │ ├── -error
│ │ │ │ │ │ ├── -error.html
│ │ │ │ │ │ ├── index.html
│ │ │ │ │ │ └── throwable.html
│ │ │ │ │ ├── -loading
│ │ │ │ │ │ └── index.html
│ │ │ │ │ ├── -success
│ │ │ │ │ │ ├── -success.html
│ │ │ │ │ │ ├── data.html
│ │ │ │ │ │ └── index.html
│ │ │ │ │ └── index.html
│ │ │ │ ├── -raw-resource-gateway
│ │ │ │ │ ├── -companion
│ │ │ │ │ │ ├── index.html
│ │ │ │ │ │ └── with.html
│ │ │ │ │ ├── -raw-resource-gateway.html
│ │ │ │ │ ├── bytes-from-raw-resource.html
│ │ │ │ │ ├── create.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ └── log-tag.html
│ │ │ │ ├── close-quietly.html
│ │ │ │ └── index.html
│ │ │ ├── com.grarcht.shuttle.demo.mvc.controller
│ │ │ │ ├── -m-v-c-first-controller-fragment
│ │ │ │ │ ├── -companion
│ │ │ │ │ │ ├── -a-r-g-s_-k-e-y_-p-a-r-e-n-t_-c-o-n-t-a-i-n-e-r_-i-d.html
│ │ │ │ │ │ ├── -t-a-g.html
│ │ │ │ │ │ └── index.html
│ │ │ │ │ ├── -m-v-c-first-controller-fragment.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── on-activity-created.html
│ │ │ │ │ ├── on-create-view.html
│ │ │ │ │ ├── on-create.html
│ │ │ │ │ ├── on-destroy-view.html
│ │ │ │ │ ├── on-view-created.html
│ │ │ │ │ └── shuttle.html
│ │ │ │ ├── -m-v-c-second-controller-activity
│ │ │ │ │ ├── -m-v-c-second-controller-activity.html
│ │ │ │ │ └── index.html
│ │ │ │ ├── -m-v-c-second-controller-fragment
│ │ │ │ │ ├── -m-v-c-second-controller-fragment.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── on-create-view.html
│ │ │ │ │ ├── on-destroy-view.html
│ │ │ │ │ ├── on-save-instance-state.html
│ │ │ │ │ ├── on-view-created.html
│ │ │ │ │ └── shuttle.html
│ │ │ │ └── index.html
│ │ │ ├── com.grarcht.shuttle.demo.mvvm.view
│ │ │ │ ├── -m-v-v-m-first-view-fragment
│ │ │ │ │ ├── -companion
│ │ │ │ │ │ ├── -a-r-g-s_-k-e-y_-p-a-r-e-n-t_-c-o-n-t-a-i-n-e-r_-i-d.html
│ │ │ │ │ │ ├── -t-a-g.html
│ │ │ │ │ │ └── index.html
│ │ │ │ │ ├── -m-v-v-m-first-view-fragment.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── on-activity-created.html
│ │ │ │ │ ├── on-create-view.html
│ │ │ │ │ ├── on-create.html
│ │ │ │ │ ├── on-destroy-view.html
│ │ │ │ │ ├── on-view-created.html
│ │ │ │ │ └── shuttle.html
│ │ │ │ ├── -m-v-v-m-second-view-activity
│ │ │ │ │ ├── -m-v-v-m-second-view-activity.html
│ │ │ │ │ └── index.html
│ │ │ │ ├── -m-v-v-m-second-view-fragment
│ │ │ │ │ ├── -m-v-v-m-second-view-fragment.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── on-create-view.html
│ │ │ │ │ ├── on-destroy-view.html
│ │ │ │ │ ├── on-save-instance-state.html
│ │ │ │ │ ├── on-view-created.html
│ │ │ │ │ ├── shuttle.html
│ │ │ │ │ └── view-model-factory.html
│ │ │ │ └── index.html
│ │ │ ├── com.grarcht.shuttle.demo.mvvm.viewmodel
│ │ │ │ ├── -first-view-model
│ │ │ │ │ ├── -first-view-model.html
│ │ │ │ │ ├── get-image.html
│ │ │ │ │ └── index.html
│ │ │ │ ├── -second-view-model-factory
│ │ │ │ │ ├── -second-view-model-factory.html
│ │ │ │ │ ├── create.html
│ │ │ │ │ └── index.html
│ │ │ │ ├── -second-view-model
│ │ │ │ │ ├── -second-view-model.html
│ │ │ │ │ ├── get-image-model-channel.html
│ │ │ │ │ └── index.html
│ │ │ │ └── index.html
│ │ │ ├── com.grarcht.shuttle.demo
│ │ │ │ ├── -demo-application
│ │ │ │ │ ├── -demo-application.html
│ │ │ │ │ └── index.html
│ │ │ │ ├── -main-activity
│ │ │ │ │ ├── -main-activity.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── on-back-pressed.html
│ │ │ │ │ └── shuttle.html
│ │ │ │ ├── -main-fragment
│ │ │ │ │ ├── -companion
│ │ │ │ │ │ ├── -t-a-g.html
│ │ │ │ │ │ └── index.html
│ │ │ │ │ ├── -main-fragment.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── on-create-view.html
│ │ │ │ │ └── on-view-created.html
│ │ │ │ └── index.html
│ │ │ ├── index.html
│ │ │ └── package-list
│ │ │ ├── images
│ │ │ ├── anchor-copy-button.svg
│ │ │ ├── arrow_down.svg
│ │ │ ├── copy-icon.svg
│ │ │ ├── copy-successful-icon.svg
│ │ │ ├── docs_logo.svg
│ │ │ ├── footer-go-to-link.svg
│ │ │ ├── go-to-top-icon.svg
│ │ │ ├── logo-icon.svg
│ │ │ ├── nav-icons
│ │ │ │ ├── abstract-class-kotlin.svg
│ │ │ │ ├── abstract-class.svg
│ │ │ │ ├── annotation-kotlin.svg
│ │ │ │ ├── annotation.svg
│ │ │ │ ├── class-kotlin.svg
│ │ │ │ ├── class.svg
│ │ │ │ ├── enum-kotlin.svg
│ │ │ │ ├── enum.svg
│ │ │ │ ├── exception-class.svg
│ │ │ │ ├── field-value.svg
│ │ │ │ ├── field-variable.svg
│ │ │ │ ├── function.svg
│ │ │ │ ├── interface-kotlin.svg
│ │ │ │ ├── interface.svg
│ │ │ │ └── object.svg
│ │ │ └── theme-toggle.svg
│ │ │ ├── index.html
│ │ │ ├── navigation.html
│ │ │ ├── scripts
│ │ │ ├── clipboard.js
│ │ │ ├── main.js
│ │ │ ├── navigation-loader.js
│ │ │ ├── navigation-pane.json
│ │ │ ├── pages.js
│ │ │ ├── pages.json
│ │ │ ├── platform-content-handler.js
│ │ │ ├── prism.js
│ │ │ ├── sourceset_dependencies.js
│ │ │ └── symbol-parameters-wrapper_deferred.js
│ │ │ └── styles
│ │ │ ├── jetbrains-mono.css
│ │ │ ├── logo-styles.css
│ │ │ ├── main.css
│ │ │ ├── prism.css
│ │ │ └── style.css
│ ├── proguard-rules.pro
│ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ └── com
│ │ │ └── grarcht
│ │ │ └── shuttle
│ │ │ └── demo
│ │ │ └── mvvmwithnavigation
│ │ │ ├── DemoApplication.kt
│ │ │ ├── dependencyinjection
│ │ │ └── AppModule.kt
│ │ │ ├── view
│ │ │ ├── MVVMNavEntryPointViewActivity.kt
│ │ │ ├── MVVMNavFirstViewFragment.kt
│ │ │ ├── MVVMNavSecondViewActivity.kt
│ │ │ └── MVVMNavSecondViewFragment.kt
│ │ │ └── viewmodel
│ │ │ ├── FirstViewModel.kt
│ │ │ └── SecondViewModel.kt
│ │ └── res
│ │ ├── drawable-v24
│ │ └── ic_launcher_foreground.xml
│ │ ├── drawable
│ │ └── ic_launcher_background.xml
│ │ ├── layout
│ │ ├── first_view.xml
│ │ ├── mvvm_nav_entry_point_view_activity.xml
│ │ ├── mvvm_nav_second_view_activity.xml
│ │ ├── nav_host_fragment.xml
│ │ └── second_fragment.xml
│ │ ├── mipmap-anydpi-v26
│ │ ├── ic_launcher.xml
│ │ └── ic_launcher_round.xml
│ │ ├── mipmap-hdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-mdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-xhdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-xxhdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-xxxhdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ ├── navigation
│ │ ├── first_nav_graph.xml
│ │ └── second_nav_graph.xml
│ │ └── values
│ │ ├── colors.xml
│ │ ├── dimens.xml
│ │ ├── strings.xml
│ │ └── styles.xml
└── mvvm
│ ├── .gitignore
│ ├── build.gradle
│ ├── documentation
│ └── kotlin
│ │ ├── demo-mvvm
│ │ ├── com.grarcht.shuttle.demo.mvvm.dependencyinjection
│ │ │ ├── -app-module
│ │ │ │ ├── index.html
│ │ │ │ └── provide-shuttle.html
│ │ │ └── index.html
│ │ ├── com.grarcht.shuttle.demo.mvvm.view
│ │ │ ├── -m-v-v-m-first-view-activity
│ │ │ │ ├── -m-v-v-m-first-view-activity.html
│ │ │ │ ├── index.html
│ │ │ │ └── shuttle.html
│ │ │ ├── -m-v-v-m-first-view-fragment
│ │ │ │ ├── -companion
│ │ │ │ │ ├── -t-a-g.html
│ │ │ │ │ └── index.html
│ │ │ │ ├── -m-v-v-m-first-view-fragment.html
│ │ │ │ ├── image-model.html
│ │ │ │ ├── index.html
│ │ │ │ ├── on-activity-created.html
│ │ │ │ ├── on-create-view.html
│ │ │ │ ├── on-create.html
│ │ │ │ ├── on-destroy-view.html
│ │ │ │ ├── on-resume.html
│ │ │ │ ├── on-view-created.html
│ │ │ │ └── shuttle.html
│ │ │ ├── -m-v-v-m-second-view-activity
│ │ │ │ ├── -m-v-v-m-second-view-activity.html
│ │ │ │ └── index.html
│ │ │ ├── -m-v-v-m-second-view-fragment
│ │ │ │ ├── -m-v-v-m-second-view-fragment.html
│ │ │ │ ├── index.html
│ │ │ │ ├── on-create-view.html
│ │ │ │ ├── on-destroy-view.html
│ │ │ │ ├── on-save-instance-state.html
│ │ │ │ ├── on-view-created.html
│ │ │ │ └── shuttle.html
│ │ │ └── index.html
│ │ ├── com.grarcht.shuttle.demo.mvvm.viewmodel
│ │ │ ├── -first-view-model
│ │ │ │ ├── -first-view-model.html
│ │ │ │ ├── get-image.html
│ │ │ │ └── index.html
│ │ │ ├── -second-view-model
│ │ │ │ ├── -second-view-model.html
│ │ │ │ ├── image-model.html
│ │ │ │ ├── index.html
│ │ │ │ ├── load-image.html
│ │ │ │ └── shuttle-pickup-cargo-result.html
│ │ │ └── index.html
│ │ ├── com.grarcht.shuttle.demo.mvvm
│ │ │ ├── -demo-application
│ │ │ │ ├── -demo-application.html
│ │ │ │ └── index.html
│ │ │ └── index.html
│ │ ├── index.html
│ │ └── package-list
│ │ ├── images
│ │ ├── anchor-copy-button.svg
│ │ ├── arrow_down.svg
│ │ ├── copy-icon.svg
│ │ ├── copy-successful-icon.svg
│ │ ├── docs_logo.svg
│ │ ├── footer-go-to-link.svg
│ │ ├── go-to-top-icon.svg
│ │ ├── logo-icon.svg
│ │ ├── nav-icons
│ │ │ ├── abstract-class-kotlin.svg
│ │ │ ├── abstract-class.svg
│ │ │ ├── annotation-kotlin.svg
│ │ │ ├── annotation.svg
│ │ │ ├── class-kotlin.svg
│ │ │ ├── class.svg
│ │ │ ├── enum-kotlin.svg
│ │ │ ├── enum.svg
│ │ │ ├── exception-class.svg
│ │ │ ├── field-value.svg
│ │ │ ├── field-variable.svg
│ │ │ ├── function.svg
│ │ │ ├── interface-kotlin.svg
│ │ │ ├── interface.svg
│ │ │ └── object.svg
│ │ └── theme-toggle.svg
│ │ ├── index.html
│ │ ├── navigation.html
│ │ ├── scripts
│ │ ├── clipboard.js
│ │ ├── main.js
│ │ ├── navigation-loader.js
│ │ ├── navigation-pane.json
│ │ ├── pages.js
│ │ ├── pages.json
│ │ ├── platform-content-handler.js
│ │ ├── prism.js
│ │ ├── sourceset_dependencies.js
│ │ └── symbol-parameters-wrapper_deferred.js
│ │ └── styles
│ │ ├── jetbrains-mono.css
│ │ ├── logo-styles.css
│ │ ├── main.css
│ │ ├── prism.css
│ │ └── style.css
│ ├── proguard-rules.pro
│ └── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ └── com
│ │ └── grarcht
│ │ └── shuttle
│ │ └── demo
│ │ └── mvvm
│ │ ├── DemoApplication.kt
│ │ ├── dependencyinjection
│ │ └── AppModule.kt
│ │ ├── view
│ │ ├── MVVMFirstViewActivity.kt
│ │ ├── MVVMFirstViewFragment.kt
│ │ ├── MVVMSecondViewActivity.kt
│ │ └── MVVMSecondViewFragment.kt
│ │ └── viewmodel
│ │ ├── FirstViewModel.kt
│ │ └── SecondViewModel.kt
│ └── res
│ ├── drawable-v24
│ └── ic_launcher_foreground.xml
│ ├── drawable
│ └── ic_launcher_background.xml
│ ├── layout
│ ├── main_activity.xml
│ ├── main_fragment.xml
│ ├── second_activity.xml
│ └── second_fragment.xml
│ ├── mipmap-anydpi-v26
│ ├── ic_launcher.xml
│ └── ic_launcher_round.xml
│ ├── mipmap-hdpi
│ ├── ic_launcher.png
│ └── ic_launcher_round.png
│ ├── mipmap-mdpi
│ ├── ic_launcher.png
│ └── ic_launcher_round.png
│ ├── mipmap-xhdpi
│ ├── ic_launcher.png
│ └── ic_launcher_round.png
│ ├── mipmap-xxhdpi
│ ├── ic_launcher.png
│ └── ic_launcher_round.png
│ ├── mipmap-xxxhdpi
│ ├── ic_launcher.png
│ └── ic_launcher_round.png
│ └── values
│ ├── colors.xml
│ ├── dimens.xml
│ ├── strings.xml
│ └── styles.xml
├── detekt
├── baseline-debug.xml
├── baseline-release.xml
├── baseline.xml
├── detekt.gradle
└── detekt.yml
├── framework-addons
└── navigation-component
│ ├── .gitignore
│ ├── build.gradle
│ ├── consumer-rules.pro
│ ├── documentation
│ └── kotlin
│ │ ├── framework-addons-navigation-component
│ │ ├── com.grarcht.extensions.navigation
│ │ │ ├── -shuttle-nav-controller
│ │ │ │ ├── -companion
│ │ │ │ │ ├── index.html
│ │ │ │ │ └── navigate-with.html
│ │ │ │ ├── -shuttle-nav-controller.html
│ │ │ │ ├── clean-shuttle-on-return-to.html
│ │ │ │ ├── deliver.html
│ │ │ │ ├── index.html
│ │ │ │ ├── log-tag.html
│ │ │ │ └── transport.html
│ │ │ ├── -shuttle-nav-directions
│ │ │ │ ├── -shuttle-nav-directions.html
│ │ │ │ ├── get-action-id.html
│ │ │ │ ├── get-arguments.html
│ │ │ │ └── index.html
│ │ │ ├── index.html
│ │ │ ├── navigate-with-shuttle.html
│ │ │ └── navigate.html
│ │ ├── com.grarcht.shuttle.framework.addons.navigation
│ │ │ ├── -shuttle-nav-controller
│ │ │ │ ├── -companion
│ │ │ │ │ ├── index.html
│ │ │ │ │ └── navigate-with.html
│ │ │ │ ├── -shuttle-nav-controller.html
│ │ │ │ ├── clean-shuttle-on-return-to.html
│ │ │ │ ├── deliver.html
│ │ │ │ ├── index.html
│ │ │ │ ├── log-tag.html
│ │ │ │ └── transport.html
│ │ │ ├── -shuttle-nav-directions
│ │ │ │ ├── -shuttle-nav-directions.html
│ │ │ │ ├── action-id.html
│ │ │ │ ├── arguments.html
│ │ │ │ ├── get-action-id.html
│ │ │ │ ├── get-arguments.html
│ │ │ │ └── index.html
│ │ │ ├── index.html
│ │ │ └── navigate-with-shuttle.html
│ │ ├── index.html
│ │ └── package-list
│ │ ├── images
│ │ ├── anchor-copy-button.svg
│ │ ├── arrow_down.svg
│ │ ├── copy-icon.svg
│ │ ├── copy-successful-icon.svg
│ │ ├── docs_logo.svg
│ │ ├── footer-go-to-link.svg
│ │ ├── go-to-top-icon.svg
│ │ ├── logo-icon.svg
│ │ ├── nav-icons
│ │ │ ├── abstract-class-kotlin.svg
│ │ │ ├── abstract-class.svg
│ │ │ ├── annotation-kotlin.svg
│ │ │ ├── annotation.svg
│ │ │ ├── class-kotlin.svg
│ │ │ ├── class.svg
│ │ │ ├── enum-kotlin.svg
│ │ │ ├── enum.svg
│ │ │ ├── exception-class.svg
│ │ │ ├── field-value.svg
│ │ │ ├── field-variable.svg
│ │ │ ├── function.svg
│ │ │ ├── interface-kotlin.svg
│ │ │ ├── interface.svg
│ │ │ └── object.svg
│ │ └── theme-toggle.svg
│ │ ├── index.html
│ │ ├── navigation.html
│ │ ├── scripts
│ │ ├── clipboard.js
│ │ ├── main.js
│ │ ├── navigation-loader.js
│ │ ├── navigation-pane.json
│ │ ├── pages.js
│ │ ├── pages.json
│ │ ├── platform-content-handler.js
│ │ ├── prism.js
│ │ ├── sourceset_dependencies.js
│ │ └── symbol-parameters-wrapper_deferred.js
│ │ └── styles
│ │ ├── jetbrains-mono.css
│ │ ├── logo-styles.css
│ │ ├── main.css
│ │ ├── prism.css
│ │ └── style.css
│ └── src
│ ├── main
│ ├── AndroidManifest.xml
│ └── java
│ │ └── com
│ │ └── grarcht
│ │ └── shuttle
│ │ └── framework
│ │ └── addons
│ │ └── navigation
│ │ ├── NavControllerKtx.kt
│ │ ├── ShuttleNavController.kt
│ │ └── ShuttleNavDirections.kt
│ └── test
│ └── java
│ └── com
│ └── grarcht
│ └── shuttle
│ └── framework
│ └── addons
│ ├── ArchtTestTaskExecutorExtension.kt
│ ├── bundle
│ └── MockBundleFactory.kt
│ ├── coroutines
│ └── CompositeDisposableHandle.kt
│ ├── navigation
│ ├── Cargo.kt
│ └── ShuttleNavControllerTests.kt
│ └── warehouse
│ └── ShuttleDataWarehouse.kt
├── framework-integrations-extensions
└── room
│ ├── .gitignore
│ ├── build.gradle
│ ├── consumer-rules.pro
│ ├── documentation
│ └── kotlin
│ │ ├── framework-integrations-extensions-room
│ │ ├── com.grarcht.room
│ │ │ ├── -c-o-l-u-m-n_-b-l-o-b.html
│ │ │ ├── -c-o-l-u-m-n_-c-a-r-g-o_-i-d.html
│ │ │ ├── -c-o-l-u-m-n_-f-i-l-e-p-a-t-h.html
│ │ │ ├── -d-e-f-a-u-l-t_-c-u-r-s-o-r_-w-i-n-d-o-w_-s-i-z-e.html
│ │ │ ├── -shuttle-room-dao
│ │ │ │ ├── -companion
│ │ │ │ │ ├── -i-n-s-e-r-t-i-o-n_-f-a-i-l-e-d_-u-n-s-u-p-p-o-r-t-e-d_-t-y-p-e.html
│ │ │ │ │ └── index.html
│ │ │ │ ├── -dao
│ │ │ │ │ ├── delete-all-cargo-data.html
│ │ │ │ │ ├── delete-cargo-by.html
│ │ │ │ │ ├── get-cargo-by-id.html
│ │ │ │ │ ├── get-number-of-cargo-items.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ └── insert-cargo.html
│ │ │ │ ├── -shuttle-room-dao.html
│ │ │ │ ├── delete-all-cargo-data.html
│ │ │ │ ├── delete-cargo-by.html
│ │ │ │ ├── get-cargo-by.html
│ │ │ │ ├── get-number-of-cargo-items.html
│ │ │ │ ├── index.html
│ │ │ │ └── insert-cargo.html
│ │ │ ├── -shuttle-room-data-db
│ │ │ │ ├── -companion
│ │ │ │ │ ├── get-instance.html
│ │ │ │ │ └── index.html
│ │ │ │ ├── -shuttle-room-data-db.html
│ │ │ │ ├── index.html
│ │ │ │ └── shuttle-data-access-object.html
│ │ │ ├── -shuttle-room-data-model-factory
│ │ │ │ ├── -shuttle-room-data-model-factory.html
│ │ │ │ ├── create-data-model.html
│ │ │ │ └── index.html
│ │ │ ├── -shuttle-room-data
│ │ │ │ ├── -shuttle-room-data.html
│ │ │ │ ├── cargo-id.html
│ │ │ │ ├── data.html
│ │ │ │ ├── file-path.html
│ │ │ │ └── index.html
│ │ │ ├── -shuttle-room-db-config
│ │ │ │ ├── -shuttle-room-db-config.html
│ │ │ │ ├── component1.html
│ │ │ │ ├── component2.html
│ │ │ │ ├── context.html
│ │ │ │ ├── copy.html
│ │ │ │ ├── db-cursor-window-size.html
│ │ │ │ └── index.html
│ │ │ ├── -shuttle-room-db-factory
│ │ │ │ ├── -shuttle-room-db-factory.html
│ │ │ │ ├── create-db.html
│ │ │ │ └── index.html
│ │ │ ├── -t-a-b-l-e_-n-a-m-e.html
│ │ │ └── index.html
│ │ ├── com.grarcht.shuttle.framework.integrations.extensions.room
│ │ │ ├── -c-o-l-u-m-n_-c-a-r-g-o_-i-d.html
│ │ │ ├── -c-o-l-u-m-n_-f-i-l-e-p-a-t-h.html
│ │ │ ├── -shuttle-room-dao
│ │ │ │ ├── -dao
│ │ │ │ │ ├── delete-all-cargo-data.html
│ │ │ │ │ ├── delete-cargo-by.html
│ │ │ │ │ ├── get-cargo-by-id.html
│ │ │ │ │ ├── get-number-of-cargo-items.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ └── insert-cargo.html
│ │ │ │ ├── -shuttle-room-dao.html
│ │ │ │ ├── delete-all-cargo-data.html
│ │ │ │ ├── delete-cargo-by.html
│ │ │ │ ├── get-cargo-by.html
│ │ │ │ ├── get-number-of-cargo-items.html
│ │ │ │ ├── index.html
│ │ │ │ └── insert-cargo.html
│ │ │ ├── -shuttle-room-data-db
│ │ │ │ ├── -companion
│ │ │ │ │ ├── get-instance.html
│ │ │ │ │ └── index.html
│ │ │ │ ├── -shuttle-room-data-db.html
│ │ │ │ ├── index.html
│ │ │ │ └── shuttle-data-access-object.html
│ │ │ ├── -shuttle-room-data-model-factory
│ │ │ │ ├── -shuttle-room-data-model-factory.html
│ │ │ │ ├── create-data-model.html
│ │ │ │ └── index.html
│ │ │ ├── -shuttle-room-data
│ │ │ │ ├── -shuttle-room-data.html
│ │ │ │ ├── cargo-id.html
│ │ │ │ ├── file-path.html
│ │ │ │ └── index.html
│ │ │ ├── -shuttle-room-db-config
│ │ │ │ ├── -shuttle-room-db-config.html
│ │ │ │ ├── component1.html
│ │ │ │ ├── context.html
│ │ │ │ ├── copy.html
│ │ │ │ ├── index.html
│ │ │ │ └── multiprocess.html
│ │ │ ├── -shuttle-room-db-factory
│ │ │ │ ├── -shuttle-room-db-factory.html
│ │ │ │ ├── create-db.html
│ │ │ │ └── index.html
│ │ │ ├── -t-a-b-l-e_-n-a-m-e.html
│ │ │ └── index.html
│ │ ├── index.html
│ │ └── package-list
│ │ ├── images
│ │ ├── anchor-copy-button.svg
│ │ ├── arrow_down.svg
│ │ ├── copy-icon.svg
│ │ ├── copy-successful-icon.svg
│ │ ├── docs_logo.svg
│ │ ├── footer-go-to-link.svg
│ │ ├── go-to-top-icon.svg
│ │ ├── logo-icon.svg
│ │ ├── nav-icons
│ │ │ ├── abstract-class-kotlin.svg
│ │ │ ├── abstract-class.svg
│ │ │ ├── annotation-kotlin.svg
│ │ │ ├── annotation.svg
│ │ │ ├── class-kotlin.svg
│ │ │ ├── class.svg
│ │ │ ├── enum-kotlin.svg
│ │ │ ├── enum.svg
│ │ │ ├── exception-class.svg
│ │ │ ├── field-value.svg
│ │ │ ├── field-variable.svg
│ │ │ ├── function.svg
│ │ │ ├── interface-kotlin.svg
│ │ │ ├── interface.svg
│ │ │ └── object.svg
│ │ └── theme-toggle.svg
│ │ ├── index.html
│ │ ├── navigation.html
│ │ ├── scripts
│ │ ├── clipboard.js
│ │ ├── main.js
│ │ ├── navigation-loader.js
│ │ ├── navigation-pane.json
│ │ ├── pages.js
│ │ ├── pages.json
│ │ ├── platform-content-handler.js
│ │ ├── prism.js
│ │ ├── sourceset_dependencies.js
│ │ └── symbol-parameters-wrapper_deferred.js
│ │ └── styles
│ │ ├── jetbrains-mono.css
│ │ ├── logo-styles.css
│ │ ├── main.css
│ │ ├── prism.css
│ │ └── style.css
│ └── src
│ ├── androidTest
│ └── java
│ │ ├── AndroidManifest.xml
│ │ └── com
│ │ └── grarcht
│ │ └── shuttle
│ │ └── framework
│ │ └── integrations
│ │ └── extensions
│ │ └── room
│ │ └── ShuttleRoomDaoTests.kt
│ ├── main
│ └── java
│ │ └── com
│ │ └── grarcht
│ │ └── shuttle
│ │ └── framework
│ │ └── integrations
│ │ └── extensions
│ │ └── room
│ │ ├── ShuttleRoomDao.kt
│ │ ├── ShuttleRoomData.kt
│ │ ├── ShuttleRoomDataDb.kt
│ │ ├── ShuttleRoomDataModelFactory.kt
│ │ ├── ShuttleRoomDbConfig.kt
│ │ └── ShuttleRoomDbFactory.kt
│ └── test
│ └── java
│ └── com
│ └── grarcht
│ └── shuttle
│ └── framework
│ └── integrations
│ └── extensions
│ └── room
│ ├── ShuttleRoomDataModelFactoryTest.kt
│ └── ShuttleRoomDbFactoryTest.kt
├── framework-integrations
└── persistence
│ ├── .gitignore
│ ├── build.gradle
│ ├── consumer-rules.pro
│ ├── documentation
│ └── kotlin
│ │ ├── framework-integrations-persistence
│ │ ├── com.grarcht.persistence.blob
│ │ │ ├── -shuttle-blob-adapter
│ │ │ │ ├── adapt-to-byte-array.html
│ │ │ │ ├── adapt-to-parcelable.html
│ │ │ │ └── index.html
│ │ │ ├── -shuttle-database-blob-adapter
│ │ │ │ ├── -shuttle-database-blob-adapter.html
│ │ │ │ ├── adapt-to-byte-array.html
│ │ │ │ ├── adapt-to-parcelable.html
│ │ │ │ └── index.html
│ │ │ └── index.html
│ │ ├── com.grarcht.persistence.datamodel
│ │ │ ├── -shuttle-data-model-factory
│ │ │ │ ├── create-data-model.html
│ │ │ │ └── index.html
│ │ │ ├── -shuttle-data-model
│ │ │ │ ├── cargo-id.html
│ │ │ │ ├── data.html
│ │ │ │ ├── file-path.html
│ │ │ │ └── index.html
│ │ │ └── index.html
│ │ ├── com.grarcht.persistence.io.file.factory
│ │ │ ├── -shuttle-file-factory
│ │ │ │ ├── create-file.html
│ │ │ │ └── index.html
│ │ │ ├── -shuttle-persistence-file-factory
│ │ │ │ ├── -shuttle-persistence-file-factory.html
│ │ │ │ ├── create-file.html
│ │ │ │ └── index.html
│ │ │ └── index.html
│ │ ├── com.grarcht.persistence.io.file.gateway
│ │ │ ├── -shuttle-file-system-gateway
│ │ │ │ ├── delete-all-files-at.html
│ │ │ │ ├── delete-file.html
│ │ │ │ ├── index.html
│ │ │ │ ├── read-from-file.html
│ │ │ │ └── write-to-file.html
│ │ │ ├── -shuttle-persistence-file-system-gateway
│ │ │ │ ├── -shuttle-persistence-file-system-gateway.html
│ │ │ │ ├── delete-all-files-at.html
│ │ │ │ ├── delete-file.html
│ │ │ │ ├── index.html
│ │ │ │ ├── read-from-file.html
│ │ │ │ └── write-to-file.html
│ │ │ └── index.html
│ │ ├── com.grarcht.persistence.io
│ │ │ ├── close-quietly.html
│ │ │ └── index.html
│ │ ├── com.grarcht.persistence.result
│ │ │ ├── -shuttle-persistence-remove-cargo-result
│ │ │ │ ├── -does-not-exist
│ │ │ │ │ └── index.html
│ │ │ │ ├── -removed
│ │ │ │ │ └── index.html
│ │ │ │ ├── -unable-to-remove
│ │ │ │ │ └── index.html
│ │ │ │ └── index.html
│ │ │ └── index.html
│ │ ├── com.grarcht.persistence
│ │ │ ├── -shuttle-data-access-object
│ │ │ │ ├── -companion
│ │ │ │ │ ├── -r-e-m-o-v-e_-c-a-r-g-o_-f-a-i-l-e-d.html
│ │ │ │ │ ├── -s-t-o-r-e_-c-a-r-g-o_-f-a-i-l-e-d.html
│ │ │ │ │ └── index.html
│ │ │ │ ├── delete-all-cargo-data.html
│ │ │ │ ├── delete-cargo-by.html
│ │ │ │ ├── get-cargo-by.html
│ │ │ │ ├── get-number-of-cargo-items.html
│ │ │ │ ├── index.html
│ │ │ │ └── insert-cargo.html
│ │ │ ├── -shuttle-database
│ │ │ │ ├── index.html
│ │ │ │ └── shuttle-data-access-object.html
│ │ │ └── index.html
│ │ ├── com.grarcht.shuttle.framework.integrations.persistence.datamodel
│ │ │ ├── -shuttle-data-model-factory
│ │ │ │ ├── create-data-model.html
│ │ │ │ └── index.html
│ │ │ ├── -shuttle-data-model
│ │ │ │ ├── cargo-id.html
│ │ │ │ ├── file-path.html
│ │ │ │ └── index.html
│ │ │ └── index.html
│ │ ├── com.grarcht.shuttle.framework.integrations.persistence.io.file.factory
│ │ │ ├── -shuttle-file-factory
│ │ │ │ ├── create-file.html
│ │ │ │ └── index.html
│ │ │ ├── -shuttle-persistence-file-factory
│ │ │ │ ├── -shuttle-persistence-file-factory.html
│ │ │ │ ├── create-file.html
│ │ │ │ └── index.html
│ │ │ └── index.html
│ │ ├── com.grarcht.shuttle.framework.integrations.persistence.io.file.gateway
│ │ │ ├── -shuttle-file-system-gateway
│ │ │ │ ├── delete-all-files-at.html
│ │ │ │ ├── delete-file.html
│ │ │ │ ├── index.html
│ │ │ │ ├── read-from-file.html
│ │ │ │ └── write-to-file.html
│ │ │ ├── -shuttle-persistence-file-system-gateway
│ │ │ │ ├── -shuttle-persistence-file-system-gateway.html
│ │ │ │ ├── delete-all-files-at.html
│ │ │ │ ├── delete-file.html
│ │ │ │ ├── index.html
│ │ │ │ ├── read-from-file.html
│ │ │ │ └── write-to-file.html
│ │ │ └── index.html
│ │ ├── com.grarcht.shuttle.framework.integrations.persistence.io
│ │ │ ├── close-quietly.html
│ │ │ └── index.html
│ │ ├── com.grarcht.shuttle.framework.integrations.persistence.result
│ │ │ ├── -shuttle-persistence-remove-cargo-result
│ │ │ │ ├── -does-not-exist
│ │ │ │ │ └── index.html
│ │ │ │ ├── -removed
│ │ │ │ │ └── index.html
│ │ │ │ ├── -unable-to-remove
│ │ │ │ │ └── index.html
│ │ │ │ └── index.html
│ │ │ └── index.html
│ │ ├── com.grarcht.shuttle.framework.integrations.persistence
│ │ │ ├── -shuttle-data-access-object
│ │ │ │ ├── -companion
│ │ │ │ │ ├── -r-e-m-o-v-e_-c-a-r-g-o_-f-a-i-l-e-d.html
│ │ │ │ │ ├── -s-t-o-r-e_-c-a-r-g-o_-f-a-i-l-e-d.html
│ │ │ │ │ └── index.html
│ │ │ │ ├── delete-all-cargo-data.html
│ │ │ │ ├── delete-cargo-by.html
│ │ │ │ ├── get-cargo-by.html
│ │ │ │ ├── get-number-of-cargo-items.html
│ │ │ │ ├── index.html
│ │ │ │ └── insert-cargo.html
│ │ │ ├── -shuttle-database
│ │ │ │ ├── index.html
│ │ │ │ └── shuttle-data-access-object.html
│ │ │ └── index.html
│ │ ├── index.html
│ │ └── package-list
│ │ ├── images
│ │ ├── anchor-copy-button.svg
│ │ ├── arrow_down.svg
│ │ ├── copy-icon.svg
│ │ ├── copy-successful-icon.svg
│ │ ├── docs_logo.svg
│ │ ├── footer-go-to-link.svg
│ │ ├── go-to-top-icon.svg
│ │ ├── logo-icon.svg
│ │ ├── nav-icons
│ │ │ ├── abstract-class-kotlin.svg
│ │ │ ├── abstract-class.svg
│ │ │ ├── annotation-kotlin.svg
│ │ │ ├── annotation.svg
│ │ │ ├── class-kotlin.svg
│ │ │ ├── class.svg
│ │ │ ├── enum-kotlin.svg
│ │ │ ├── enum.svg
│ │ │ ├── exception-class.svg
│ │ │ ├── field-value.svg
│ │ │ ├── field-variable.svg
│ │ │ ├── function.svg
│ │ │ ├── interface-kotlin.svg
│ │ │ ├── interface.svg
│ │ │ └── object.svg
│ │ └── theme-toggle.svg
│ │ ├── index.html
│ │ ├── navigation.html
│ │ ├── scripts
│ │ ├── clipboard.js
│ │ ├── main.js
│ │ ├── navigation-loader.js
│ │ ├── navigation-pane.json
│ │ ├── pages.js
│ │ ├── pages.json
│ │ ├── platform-content-handler.js
│ │ ├── prism.js
│ │ ├── sourceset_dependencies.js
│ │ └── symbol-parameters-wrapper_deferred.js
│ │ └── styles
│ │ ├── jetbrains-mono.css
│ │ ├── logo-styles.css
│ │ ├── main.css
│ │ ├── prism.css
│ │ └── style.css
│ └── src
│ ├── main
│ └── java
│ │ └── com
│ │ └── grarcht
│ │ └── shuttle
│ │ └── framework
│ │ └── integrations
│ │ └── persistence
│ │ ├── ShuttleDataAccessObject.kt
│ │ ├── ShuttleDatabase.kt
│ │ ├── datamodel
│ │ ├── ShuttleDataModel.kt
│ │ └── ShuttleDataModelFactory.kt
│ │ ├── io
│ │ ├── CloseableKtx.kt
│ │ └── file
│ │ │ ├── factory
│ │ │ ├── ShuttleFileFactory.kt
│ │ │ └── ShuttlePersistenceFileFactory.kt
│ │ │ └── gateway
│ │ │ ├── ShuttleFileSystemGateway.kt
│ │ │ └── ShuttlePersistenceFileSystemGateway.kt
│ │ └── result
│ │ └── ShuttlePersistenceRemoveCargoResult.kt
│ └── test
│ └── java
│ └── com
│ └── grarcht
│ └── shuttle
│ └── framework
│ └── integrations
│ └── persistence
│ └── io
│ ├── PaintColor.kt
│ ├── ShuttlePersistenceFileFactoryTests.kt
│ └── ShuttlePersistenceFileSystemGatewayTests.kt
├── framework
├── .gitignore
├── build.gradle
├── consumer-rules.pro
├── documentation
│ └── kotlin
│ │ ├── framework
│ │ ├── com.grarcht.shuttle.framework.app
│ │ │ ├── -shuttle-connected-service-model
│ │ │ │ ├── -shuttle-connected-service-model.html
│ │ │ │ ├── index.html
│ │ │ │ ├── ipc-messenger.html
│ │ │ │ └── local-service.html
│ │ │ ├── -shuttle-service-config
│ │ │ │ ├── -shuttle-service-config.html
│ │ │ │ ├── binding-type.html
│ │ │ │ ├── error-observable.html
│ │ │ │ ├── index.html
│ │ │ │ ├── message-validator.html
│ │ │ │ ├── messenger-factory.html
│ │ │ │ ├── rebind-on-unbind.html
│ │ │ │ ├── service-name.html
│ │ │ │ └── shuttle.html
│ │ │ ├── -shuttle-service-type
│ │ │ │ ├── -b-o-u-n-d_-a-i-d-l
│ │ │ │ │ └── index.html
│ │ │ │ ├── -b-o-u-n-d_-l-o-c-a-l
│ │ │ │ │ └── index.html
│ │ │ │ ├── -b-o-u-n-d_-m-e-s-s-e-n-g-e-r
│ │ │ │ │ └── index.html
│ │ │ │ ├── -n-o-n_-b-o-u-n-d_-s-t-a-r-t-e-d
│ │ │ │ │ └── index.html
│ │ │ │ ├── index.html
│ │ │ │ ├── is-a-i-d-l-bound-service.html
│ │ │ │ ├── is-bound-service.html
│ │ │ │ ├── is-local-bound-service.html
│ │ │ │ ├── is-messenger-bound-service.html
│ │ │ │ ├── is-non-bound-service.html
│ │ │ │ ├── value-of.html
│ │ │ │ └── values.html
│ │ │ ├── -shuttle-service
│ │ │ │ ├── -shuttle-service.html
│ │ │ │ ├── binder.html
│ │ │ │ ├── config.html
│ │ │ │ ├── create-binder-for-local-bound-service.html
│ │ │ │ ├── create-messenger-decorator-for-i-p-c.html
│ │ │ │ ├── get-cargo-intent-for-transport.html
│ │ │ │ ├── get-service-name.html
│ │ │ │ ├── index.html
│ │ │ │ ├── ipc-service-messenger-decorator.html
│ │ │ │ ├── on-bind.html
│ │ │ │ ├── on-destroy.html
│ │ │ │ ├── on-rebind.html
│ │ │ │ ├── on-receive-message.html
│ │ │ │ ├── on-start-command.html
│ │ │ │ ├── on-unbind.html
│ │ │ │ ├── release-resources-for-i-p-c-services.html
│ │ │ │ ├── release-resources-for-local-services.html
│ │ │ │ └── transport-cargo-with-shuttle.html
│ │ │ └── index.html
│ │ ├── com.grarcht.shuttle.framework.content.bundle
│ │ │ ├── -bundle-factory
│ │ │ │ ├── create.html
│ │ │ │ └── index.html
│ │ │ ├── -default-bundle-factory
│ │ │ │ ├── -default-bundle-factory.html
│ │ │ │ ├── create.html
│ │ │ │ └── index.html
│ │ │ ├── -serializable-parcelable
│ │ │ │ ├── -companion
│ │ │ │ │ └── index.html
│ │ │ │ ├── -serializable-parcelable.html
│ │ │ │ ├── component1.html
│ │ │ │ ├── copy.html
│ │ │ │ ├── index.html
│ │ │ │ └── parcelable.html
│ │ │ ├── -shuttle-bundle
│ │ │ │ ├── -companion
│ │ │ │ │ ├── index.html
│ │ │ │ │ └── with.html
│ │ │ │ ├── -shuttle-bundle.html
│ │ │ │ ├── create.html
│ │ │ │ ├── index.html
│ │ │ │ ├── log-tag.html
│ │ │ │ └── transport.html
│ │ │ └── index.html
│ │ ├── com.grarcht.shuttle.framework.content.serviceconnection.factory
│ │ │ ├── -shuttle-service-connection-factory
│ │ │ │ ├── create-lifecycle-aware-service-connection-config.html
│ │ │ │ ├── create-lifecycle-aware-service-connection.html
│ │ │ │ ├── create-service-connection-config.html
│ │ │ │ ├── create-service-connection.html
│ │ │ │ └── index.html
│ │ │ ├── -shuttle-service-connection-types-factory
│ │ │ │ ├── -shuttle-service-connection-types-factory.html
│ │ │ │ ├── create-lifecycle-aware-service-connection-config.html
│ │ │ │ ├── create-lifecycle-aware-service-connection.html
│ │ │ │ ├── create-service-connection-config.html
│ │ │ │ ├── create-service-connection.html
│ │ │ │ └── index.html
│ │ │ └── index.html
│ │ ├── com.grarcht.shuttle.framework.content.serviceconnection.lifecycleaware
│ │ │ ├── -shuttle-lifecycle-aware-service-connection-config
│ │ │ │ ├── -shuttle-lifecycle-aware-service-connection-config.html
│ │ │ │ ├── context.html
│ │ │ │ ├── coroutine-scope.html
│ │ │ │ ├── error-observable.html
│ │ │ │ ├── index.html
│ │ │ │ ├── lifecycle.html
│ │ │ │ ├── service-channel.html
│ │ │ │ ├── service-clazz.html
│ │ │ │ ├── service-connection-factory.html
│ │ │ │ ├── service-name.html
│ │ │ │ └── use-with-i-p-c.html
│ │ │ ├── -shuttle-lifecycle-aware-service-connection
│ │ │ │ ├── -shuttle-lifecycle-aware-service-connection.html
│ │ │ │ ├── index.html
│ │ │ │ ├── on-destroy.html
│ │ │ │ ├── on-start.html
│ │ │ │ └── on-stop.html
│ │ │ └── index.html
│ │ ├── com.grarcht.shuttle.framework.content.serviceconnection
│ │ │ ├── -shuttle-service-connection-config
│ │ │ │ ├── -shuttle-service-connection-config.html
│ │ │ │ ├── context.html
│ │ │ │ ├── coroutine-scope.html
│ │ │ │ ├── error-observable.html
│ │ │ │ ├── index.html
│ │ │ │ ├── service-channel.html
│ │ │ │ ├── service-name.html
│ │ │ │ └── use-with-i-p-c.html
│ │ │ ├── -shuttle-service-connection
│ │ │ │ ├── -shuttle-service-connection.html
│ │ │ │ ├── connect-to-service.html
│ │ │ │ ├── disconnect-from-service.html
│ │ │ │ ├── index.html
│ │ │ │ ├── ipc-service-messenger.html
│ │ │ │ ├── local-service.html
│ │ │ │ ├── on-service-connected.html
│ │ │ │ └── on-service-disconnected.html
│ │ │ └── index.html
│ │ ├── com.grarcht.shuttle.framework.content
│ │ │ ├── -shuttle-intent
│ │ │ │ ├── -companion
│ │ │ │ │ ├── index.html
│ │ │ │ │ └── with.html
│ │ │ │ ├── clean-shuttle-on-return-to.html
│ │ │ │ ├── create.html
│ │ │ │ ├── deliver.html
│ │ │ │ ├── index.html
│ │ │ │ ├── intent-chooser.html
│ │ │ │ ├── intent.html
│ │ │ │ ├── log-tag.html
│ │ │ │ └── transport.html
│ │ │ ├── -shuttle-result
│ │ │ │ ├── -error
│ │ │ │ │ ├── -error.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ └── throwable.html
│ │ │ │ ├── -loading
│ │ │ │ │ └── index.html
│ │ │ │ ├── -success
│ │ │ │ │ ├── -success.html
│ │ │ │ │ ├── data.html
│ │ │ │ │ └── index.html
│ │ │ │ └── index.html
│ │ │ ├── index.html
│ │ │ ├── register-receiver-quietly.html
│ │ │ └── unregister-receiver-quietly.html
│ │ ├── com.grarcht.shuttle.framework.coroutines.channel
│ │ │ ├── close-quietly.html
│ │ │ ├── index.html
│ │ │ └── relay-flow-if-available.html
│ │ ├── com.grarcht.shuttle.framework.coroutines.scope
│ │ │ ├── cancel-scope-quietly.html
│ │ │ └── index.html
│ │ ├── com.grarcht.shuttle.framework.model
│ │ │ ├── -n-o_-c-a-r-g-o_-i-d.html
│ │ │ ├── -n-o_-f-i-l-e_-d-e-s-c-r-i-p-t-o-r.html
│ │ │ ├── -shuttle-parcel-cargo
│ │ │ │ ├── -c-r-e-a-t-o-r
│ │ │ │ │ ├── create-from-parcel.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ └── new-array.html
│ │ │ │ ├── -shuttle-parcel-cargo.html
│ │ │ │ ├── cargo-id.html
│ │ │ │ ├── describe-contents.html
│ │ │ │ ├── index.html
│ │ │ │ └── write-to-parcel.html
│ │ │ └── index.html
│ │ ├── com.grarcht.shuttle.framework.os.messenger.factory
│ │ │ ├── -shuttle-messenger-factory
│ │ │ │ ├── create-messenger.html
│ │ │ │ └── index.html
│ │ │ ├── -shuttle-service-messenger-factory
│ │ │ │ ├── -shuttle-service-messenger-factory.html
│ │ │ │ ├── create-messenger.html
│ │ │ │ └── index.html
│ │ │ └── index.html
│ │ ├── com.grarcht.shuttle.framework.os.messenger
│ │ │ ├── -shuttle-message-receiver
│ │ │ │ ├── index.html
│ │ │ │ └── on-receive-message.html
│ │ │ ├── -shuttle-messenger-decorator
│ │ │ │ ├── -shuttle-messenger-decorator.html
│ │ │ │ ├── cargo-ids.html
│ │ │ │ ├── clear-cargo-ids.html
│ │ │ │ ├── get-binder.html
│ │ │ │ └── index.html
│ │ │ └── index.html
│ │ ├── com.grarcht.shuttle.framework.os
│ │ │ ├── -shuttle-binder
│ │ │ │ ├── -shuttle-binder.html
│ │ │ │ ├── get-service.html
│ │ │ │ └── index.html
│ │ │ └── index.html
│ │ ├── com.grarcht.shuttle.framework.respository
│ │ │ ├── -shuttle-repository
│ │ │ │ ├── -shuttle-repository.html
│ │ │ │ ├── id.html
│ │ │ │ ├── index.html
│ │ │ │ ├── pickup.html
│ │ │ │ ├── remove-all-cargo.html
│ │ │ │ ├── remove-cargo-by.html
│ │ │ │ └── store.html
│ │ │ ├── -shuttle-warehouse
│ │ │ │ ├── id.html
│ │ │ │ ├── index.html
│ │ │ │ ├── pickup.html
│ │ │ │ ├── remove-all-cargo.html
│ │ │ │ ├── remove-cargo-by.html
│ │ │ │ └── store.html
│ │ │ └── index.html
│ │ ├── com.grarcht.shuttle.framework.result
│ │ │ ├── -shuttle-pickup-cargo-result
│ │ │ │ ├── -error
│ │ │ │ │ ├── -error.html
│ │ │ │ │ ├── cargo-id.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── message.html
│ │ │ │ │ └── throwable.html
│ │ │ │ ├── -loading
│ │ │ │ │ ├── -loading.html
│ │ │ │ │ ├── cargo-id.html
│ │ │ │ │ └── index.html
│ │ │ │ ├── -not-picking-up-cargo-yet
│ │ │ │ │ └── index.html
│ │ │ │ ├── -success
│ │ │ │ │ ├── -success.html
│ │ │ │ │ ├── data.html
│ │ │ │ │ └── index.html
│ │ │ │ └── index.html
│ │ │ ├── -shuttle-remove-cargo-result
│ │ │ │ ├── -companion
│ │ │ │ │ ├── -a-l-l_-c-a-r-g-o.html
│ │ │ │ │ └── index.html
│ │ │ │ ├── -does-not-exist
│ │ │ │ │ ├── -does-not-exist.html
│ │ │ │ │ ├── cargo-id.html
│ │ │ │ │ └── index.html
│ │ │ │ ├── -not-removing-cargo-yet
│ │ │ │ │ ├── -not-removing-cargo-yet.html
│ │ │ │ │ ├── cargo-id.html
│ │ │ │ │ └── index.html
│ │ │ │ ├── -removed
│ │ │ │ │ ├── -removed.html
│ │ │ │ │ ├── cargo-id.html
│ │ │ │ │ └── index.html
│ │ │ │ ├── -removing
│ │ │ │ │ ├── -removing.html
│ │ │ │ │ ├── cargo-id.html
│ │ │ │ │ └── index.html
│ │ │ │ ├── -unable-to-remove
│ │ │ │ │ ├── -unable-to-remove.html
│ │ │ │ │ ├── cargo-id.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── message.html
│ │ │ │ │ └── throwable.html
│ │ │ │ └── index.html
│ │ │ ├── -shuttle-store-cargo-result
│ │ │ │ ├── -error
│ │ │ │ │ ├── -error.html
│ │ │ │ │ ├── cargo-id.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── message.html
│ │ │ │ │ └── throwable.html
│ │ │ │ ├── -not-storing-cargo-yet
│ │ │ │ │ ├── -not-storing-cargo-yet.html
│ │ │ │ │ ├── cargo-id.html
│ │ │ │ │ └── index.html
│ │ │ │ ├── -storing
│ │ │ │ │ ├── -storing.html
│ │ │ │ │ ├── cargo-id.html
│ │ │ │ │ └── index.html
│ │ │ │ ├── -success
│ │ │ │ │ ├── -success.html
│ │ │ │ │ ├── cargo-id.html
│ │ │ │ │ └── index.html
│ │ │ │ └── index.html
│ │ │ └── index.html
│ │ ├── com.grarcht.shuttle.framework.screen
│ │ │ ├── -shuttle-cargo-facade
│ │ │ │ ├── -shuttle-cargo-facade.html
│ │ │ │ ├── index.html
│ │ │ │ └── remove-cargo-after-delivery.html
│ │ │ ├── -shuttle-facade
│ │ │ │ ├── index.html
│ │ │ │ └── remove-cargo-after-delivery.html
│ │ │ └── index.html
│ │ ├── com.grarcht.shuttle.framework.validator
│ │ │ ├── -shuttle-service-message-validator
│ │ │ │ ├── -shuttle-service-message-validator.html
│ │ │ │ ├── index.html
│ │ │ │ └── validate.html
│ │ │ ├── -shuttle-validator
│ │ │ │ ├── index.html
│ │ │ │ └── validate.html
│ │ │ └── index.html
│ │ ├── com.grarcht.shuttle.framework.visibility.error
│ │ │ ├── -shuttle-default-error
│ │ │ │ ├── -observed-error
│ │ │ │ │ ├── -observed-error.html
│ │ │ │ │ ├── context.html
│ │ │ │ │ ├── error-message.html
│ │ │ │ │ ├── error.html
│ │ │ │ │ └── index.html
│ │ │ │ └── index.html
│ │ │ ├── -shuttle-error
│ │ │ │ └── index.html
│ │ │ ├── -shuttle-service-error
│ │ │ │ ├── -connect-to-service-error
│ │ │ │ │ ├── -connect-to-service-error.html
│ │ │ │ │ ├── data.html
│ │ │ │ │ ├── error-message.html
│ │ │ │ │ ├── error.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ └── service-name.html
│ │ │ │ ├── -disconnect-from-service-error
│ │ │ │ │ ├── -disconnect-from-service-error.html
│ │ │ │ │ ├── data.html
│ │ │ │ │ ├── error-message.html
│ │ │ │ │ ├── error.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ └── service-name.html
│ │ │ │ ├── -general-error
│ │ │ │ │ ├── -general-error.html
│ │ │ │ │ ├── data.html
│ │ │ │ │ ├── error-message.html
│ │ │ │ │ ├── error.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ └── service-name.html
│ │ │ │ ├── -handle-message-error
│ │ │ │ │ ├── -handle-message-error.html
│ │ │ │ │ ├── data.html
│ │ │ │ │ ├── error-message.html
│ │ │ │ │ ├── error.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ └── service-name.html
│ │ │ │ └── index.html
│ │ │ └── index.html
│ │ ├── com.grarcht.shuttle.framework.visibility.information
│ │ │ ├── -shuttle-visibility-feedback
│ │ │ │ ├── -information
│ │ │ │ │ ├── -information.html
│ │ │ │ │ ├── context.html
│ │ │ │ │ ├── data.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ └── message.html
│ │ │ │ └── index.html
│ │ │ └── index.html
│ │ ├── com.grarcht.shuttle.framework.visibility.observation
│ │ │ ├── -shuttle-channel-visibility-observable
│ │ │ │ ├── -shuttle-channel-visibility-observable.html
│ │ │ │ ├── add.html
│ │ │ │ ├── dispose.html
│ │ │ │ ├── index.html
│ │ │ │ └── observe.html
│ │ │ ├── -shuttle-visibility-observable
│ │ │ │ ├── add.html
│ │ │ │ ├── dispose.html
│ │ │ │ ├── index.html
│ │ │ │ └── observe.html
│ │ │ └── index.html
│ │ ├── com.grarcht.shuttle.framework.visibility
│ │ │ ├── -shuttle-visibility-data
│ │ │ │ └── index.html
│ │ │ ├── -shuttle-visibility-reporter
│ │ │ │ ├── index.html
│ │ │ │ └── report-for-visibility-with.html
│ │ │ └── index.html
│ │ ├── com.grarcht.shuttle.framework.warehouse
│ │ │ ├── -shuttle-repository
│ │ │ │ ├── -shuttle-repository.html
│ │ │ │ ├── index.html
│ │ │ │ ├── pickup.html
│ │ │ │ ├── remove-all-cargo.html
│ │ │ │ ├── remove-cargo-by.html
│ │ │ │ └── store.html
│ │ │ ├── -shuttle-warehouse
│ │ │ │ ├── index.html
│ │ │ │ ├── pickup.html
│ │ │ │ ├── remove-all-cargo.html
│ │ │ │ ├── remove-cargo-by.html
│ │ │ │ └── store.html
│ │ │ └── index.html
│ │ ├── com.grarcht.shuttle.framework
│ │ │ ├── -c-a-r-g-o_-i-d_-k-e-y.html
│ │ │ ├── -cargo-shuttle
│ │ │ │ ├── -cargo-shuttle.html
│ │ │ │ ├── bundle-cargo-with.html
│ │ │ │ ├── clean-shuttle-from-all-deliveries.html
│ │ │ │ ├── clean-shuttle-from-delivery-for.html
│ │ │ │ ├── clean-shuttle-on-return-to.html
│ │ │ │ ├── index.html
│ │ │ │ ├── intent-cargo-with.html
│ │ │ │ ├── intent-chooser-cargo-with.html
│ │ │ │ ├── pickup-cargo.html
│ │ │ │ ├── shuttle-facade.html
│ │ │ │ └── shuttle-warehouse.html
│ │ │ ├── -n-o_-c-a-r-g-o_-i-d.html
│ │ │ ├── -shuttle
│ │ │ │ ├── bundle-cargo-with.html
│ │ │ │ ├── clean-shuttle-from-all-deliveries.html
│ │ │ │ ├── clean-shuttle-from-delivery-for.html
│ │ │ │ ├── clean-shuttle-on-return-to.html
│ │ │ │ ├── index.html
│ │ │ │ ├── intent-cargo-with.html
│ │ │ │ ├── intent-chooser-cargo-with.html
│ │ │ │ ├── pickup-cargo.html
│ │ │ │ ├── shuttle-facade.html
│ │ │ │ └── shuttle-warehouse.html
│ │ │ └── index.html
│ │ ├── index.html
│ │ └── package-list
│ │ ├── images
│ │ ├── anchor-copy-button.svg
│ │ ├── arrow_down.svg
│ │ ├── copy-icon.svg
│ │ ├── copy-successful-icon.svg
│ │ ├── docs_logo.svg
│ │ ├── footer-go-to-link.svg
│ │ ├── go-to-top-icon.svg
│ │ ├── logo-icon.svg
│ │ ├── nav-icons
│ │ │ ├── abstract-class-kotlin.svg
│ │ │ ├── abstract-class.svg
│ │ │ ├── annotation-kotlin.svg
│ │ │ ├── annotation.svg
│ │ │ ├── class-kotlin.svg
│ │ │ ├── class.svg
│ │ │ ├── enum-kotlin.svg
│ │ │ ├── enum.svg
│ │ │ ├── exception-class.svg
│ │ │ ├── field-value.svg
│ │ │ ├── field-variable.svg
│ │ │ ├── function.svg
│ │ │ ├── interface-kotlin.svg
│ │ │ ├── interface.svg
│ │ │ └── object.svg
│ │ └── theme-toggle.svg
│ │ ├── index.html
│ │ ├── navigation.html
│ │ ├── scripts
│ │ ├── clipboard.js
│ │ ├── main.js
│ │ ├── navigation-loader.js
│ │ ├── navigation-pane.json
│ │ ├── pages.js
│ │ ├── pages.json
│ │ ├── platform-content-handler.js
│ │ ├── prism.js
│ │ ├── sourceset_dependencies.js
│ │ └── symbol-parameters-wrapper_deferred.js
│ │ └── styles
│ │ ├── jetbrains-mono.css
│ │ ├── logo-styles.css
│ │ ├── main.css
│ │ ├── prism.css
│ │ └── style.css
└── src
│ ├── main
│ └── java
│ │ └── com
│ │ └── grarcht
│ │ └── shuttle
│ │ └── framework
│ │ ├── CargoShuttle.kt
│ │ ├── Constants.kt
│ │ ├── Shuttle.kt
│ │ ├── app
│ │ ├── ShuttleConnectedServiceModel.kt
│ │ ├── ShuttleService.kt
│ │ ├── ShuttleServiceConfig.kt
│ │ └── ShuttleServiceType.kt
│ │ ├── content
│ │ ├── ContextKtx.kt
│ │ ├── ShuttleIntent.kt
│ │ ├── bundle
│ │ │ ├── BundleFactory.kt
│ │ │ ├── DefaultBundleFactory.kt
│ │ │ ├── SerializableParcelable.kt
│ │ │ └── ShuttleBundle.kt
│ │ └── serviceconnection
│ │ │ ├── ShuttleServiceConnection.kt
│ │ │ ├── ShuttleServiceConnectionConfig.kt
│ │ │ ├── factory
│ │ │ ├── ShuttleServiceConnectionFactory.kt
│ │ │ └── ShuttleServiceConnectionTypesFactory.kt
│ │ │ └── lifecycleaware
│ │ │ ├── ShuttleLifecycleAwareServiceConnection.kt
│ │ │ └── ShuttleLifecycleAwareServiceConnectionConfig.kt
│ │ ├── coroutines
│ │ ├── channel
│ │ │ └── ChannelKtx.kt
│ │ └── scope
│ │ │ └── ScopesKtx.kt
│ │ ├── model
│ │ └── ShuttleParcelCargo.kt
│ │ ├── os
│ │ ├── ShuttleBinder.kt
│ │ └── messenger
│ │ │ ├── ShuttleMessageReceiver.kt
│ │ │ ├── ShuttleMessengerDecorator.kt
│ │ │ └── factory
│ │ │ ├── ShuttleMessengerFactory.kt
│ │ │ └── ShuttleServiceMessengerFactory.kt
│ │ ├── result
│ │ ├── ShuttlePickupCargoResult.kt
│ │ ├── ShuttleRemoveCargoResult.kt
│ │ └── ShuttleStoreCargoResult.kt
│ │ ├── screen
│ │ ├── ActivityLifecycleCallback.kt
│ │ ├── ShuttleCargoFacade.kt
│ │ └── ShuttleFacade.kt
│ │ ├── validator
│ │ ├── ShuttleServiceMessageValidator.kt
│ │ └── ShuttleValidator.kt
│ │ ├── visibility
│ │ ├── ShuttleVisibilityData.kt
│ │ ├── ShuttleVisibilityReporter.kt
│ │ ├── error
│ │ │ ├── ShuttleDefaultError.kt
│ │ │ ├── ShuttleError.kt
│ │ │ └── ShuttleServiceError.kt
│ │ ├── information
│ │ │ └── ShuttleVisibilityFeedback.kt
│ │ └── observation
│ │ │ ├── ShuttleChannelVisibilityObservable.kt
│ │ │ └── ShuttleVisibilityObservable.kt
│ │ └── warehouse
│ │ ├── ShuttleRepository.kt
│ │ └── ShuttleWarehouse.kt
│ └── test
│ ├── java
│ └── com
│ │ └── grarcht
│ │ └── shuttle
│ │ └── framework
│ │ ├── ArchtTestTaskExecutorExtension.kt
│ │ ├── Cargo.kt
│ │ ├── CargoShuttleTests.kt
│ │ ├── bundle
│ │ ├── MockBundleFactory.kt
│ │ ├── PaintColor.kt
│ │ └── ShuttleBundleTest.kt
│ │ ├── coroutines
│ │ ├── CompositeDisposableHandle.kt
│ │ ├── CompositeDisposableHandleKtx.kt
│ │ └── channel
│ │ │ └── ChannelKtxTest.kt
│ │ ├── intent
│ │ └── ShuttleIntentTests.kt
│ │ ├── screen
│ │ ├── ActivityLifecycleCallbackTests.kt
│ │ └── ShuttleCargoFacadeTests.kt
│ │ ├── validator
│ │ └── ShuttleServiceMessageValidatorTests.kt
│ │ └── warehouse
│ │ ├── ShuttleDataWarehouse.kt
│ │ └── ShuttleWarehouseTests.kt
│ └── resources
│ └── mockito-extensions
│ └── org.mockito.plugins.MockMaker
├── gradle.properties
├── gradle
├── ext.gradle
├── libs.versions.toml
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── media
├── screenshots
│ ├── loaded_image_cargo.png
│ ├── loading_image_cargo.png
│ ├── loading_image_cargo_failed.png
│ └── main_menu.png
└── videos
│ ├── app_crash.gif
│ └── loaded_image_cargo.gif
├── modeling
├── Context.png
└── Module Dependencies.PNG
├── settings.gradle
├── shuttle_header.png
├── shuttle_thumbnail.png
└── solution-builder
├── .gitignore
├── build.gradle
├── consumer-rules.pro
├── proguard-rules.pro
└── src
└── main
└── AndroidManifest.xml
/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | /.idea/caches
5 | /.idea/libraries
6 | /.idea/modules.xml
7 | /.idea/workspace.xml
8 | /.idea/navEditor.xml
9 | /.idea/assetWizardSettings.xml
10 | .DS_Store
11 | /build
12 | /captures
13 | .externalNativeBuild
14 | .cxx
15 | *.apk
16 | *.aar
17 | *.ap_
18 | *.aab
19 | *.dex
20 | *.class
21 | *.log
22 | .gradle/
23 | build/
24 | proguard/
25 | .navigation/
26 | captures/
27 | .idea/workspace.xml
28 | .idea/tasks.xml
29 | .idea/gradle.xml
30 | .idea/assetWizardSettings.xml
31 | .idea/dictionaries
32 | .idea/libraries
33 | .idea/caches
34 | .idea/modules.xml
35 | .idea/navEditor.xml
36 | lint/intermediates/
37 | lint/generated/
38 | lint/outputs/
39 | lint/tmp/
40 | vcs.xml
41 | local.properties
--------------------------------------------------------------------------------
/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 |
--------------------------------------------------------------------------------
/.idea/checkstyle-idea.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
15 |
16 |
--------------------------------------------------------------------------------
/.idea/codeStyles/codeStyleConfig.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/.idea/compiler.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/deploymentTargetDropDown.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/.idea/kotlinc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # How to contribute
2 | Contributions are welcome.
3 |
4 |
5 | # Reporting issues
6 |
7 | We use the GitHub issue tracker to track bugs, feature requests and questions.
8 |
9 | Before filing a new issue, please search the tracker to check if it's already covered by an existing report. Avoiding duplicates helps us maximize the time we can spend fixing bugs and adding new features.
10 |
11 | When filing an issue, be sure to provide enough information for us to efficiently diagnose and reproduce the problem. In particular, please include all the information requested in the issue template.
12 |
13 |
14 | # Branching Strategies and Pull Requests
15 | When contributing, the project must first be forked, and the PR should target the "develop" branch.
16 |
17 | Changes in pull requests should adhere to best practices, principles, and styling. Effort should be made to align with architectural attributes, such as readability, maintainability, etc.
18 |
--------------------------------------------------------------------------------
/demos/core/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/demos/core/consumer-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/core/consumer-rules.pro
--------------------------------------------------------------------------------
/demos/core/documentation/kotlin/images/anchor-copy-button.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/core/documentation/kotlin/images/arrow_down.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/core/documentation/kotlin/images/copy-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/core/documentation/kotlin/images/copy-successful-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/core/documentation/kotlin/images/footer-go-to-link.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/core/documentation/kotlin/images/go-to-top-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/core/documentation/kotlin/images/logo-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/core/documentation/kotlin/images/nav-icons/class-kotlin.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/demos/core/documentation/kotlin/images/nav-icons/class.svg:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/demos/core/documentation/kotlin/images/nav-icons/enum-kotlin.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/demos/core/documentation/kotlin/images/nav-icons/enum.svg:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/demos/core/documentation/kotlin/images/nav-icons/exception-class.svg:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/demos/core/documentation/kotlin/images/nav-icons/field-value.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/demos/core/documentation/kotlin/images/nav-icons/field-variable.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/demos/core/documentation/kotlin/images/nav-icons/interface-kotlin.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/demos/core/documentation/kotlin/images/nav-icons/interface.svg:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/demos/core/documentation/kotlin/images/nav-icons/object.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/demos/core/documentation/kotlin/images/theme-toggle.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/core/documentation/kotlin/scripts/sourceset_dependencies.js:
--------------------------------------------------------------------------------
1 | sourceset_dependencies='{":demos-core-lib:dokkaHtml/debug":[],":demos-core-lib:dokkaHtml/main":[],":demos-core-lib:dokkaHtml/release":[]}'
2 |
--------------------------------------------------------------------------------
/demos/core/documentation/kotlin/styles/logo-styles.css:
--------------------------------------------------------------------------------
1 | .library-name a {
2 | position: relative;
3 | margin-left: 55px;
4 | }
5 |
6 | .library-name a::before {
7 | content: '';
8 | background: url("../images/logo-icon.svg") center no-repeat;
9 | background-size: contain;
10 | position: absolute;
11 | width: 50px;
12 | height: 50px;
13 | top: -18px;
14 | left: -55px;
15 | }
--------------------------------------------------------------------------------
/demos/core/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/demos/core/src/main/java/com/grarcht/shuttle/demo/core/image/BitmapDecoder.kt:
--------------------------------------------------------------------------------
1 | package com.grarcht.shuttle.demo.core.image
2 |
3 | import android.graphics.Bitmap
4 | import android.graphics.BitmapFactory
5 |
6 | /**
7 | * This class decodes [ByteArray] into [Bitmap] objects.
8 | */
9 | class BitmapDecoder {
10 |
11 | /**
12 | * Decodes [ByteArray] into [Bitmap] objects.
13 | * @param imageBytes to decode
14 | * @return the decoded [Bitmap] or null if an exception was thrown
15 | */
16 | fun decodeBitmap(imageBytes: ByteArray): Bitmap? {
17 | @Suppress("SwallowedException")
18 | return try {
19 | val bitmap = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.size)
20 | bitmap
21 | } catch (e: IllegalArgumentException) {
22 | null
23 | }
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/demos/core/src/main/java/com/grarcht/shuttle/demo/core/image/ImageMessageType.kt:
--------------------------------------------------------------------------------
1 | package com.grarcht.shuttle.demo.core.image
2 |
3 | enum class ImageMessageType(val value: String) {
4 | ImageData("imageData500");
5 |
6 | override fun toString(): String {
7 | return "PostalMessageType(value='$value')"
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/demos/core/src/main/java/com/grarcht/shuttle/demo/core/io/IOResult.kt:
--------------------------------------------------------------------------------
1 | package com.grarcht.shuttle.demo.core.io
2 |
3 | /**
4 | * This class represents the LCE (Loading-Content-Error) states for IO bound work.
5 | */
6 | sealed class IOResult {
7 | /**
8 | * State for other than [Loading], [Success], and [Error].
9 | */
10 | object Unknown : IOResult()
11 |
12 | /**
13 | * State for loading data.
14 | */
15 | object Loading : IOResult()
16 |
17 | /**
18 | * State for successful IO work.
19 | * @param data retrieved/sent data
20 | */
21 | class Success(val data: D) : IOResult()
22 |
23 | /**
24 | * State for unsuccessful IO work.
25 | * @param throwable caught with IO work
26 | */
27 | class Error(val message: String? = null, val throwable: T) : IOResult() where T : Throwable
28 | }
29 |
--------------------------------------------------------------------------------
/demos/core/src/main/java/com/grarcht/shuttle/demo/core/os/BundleKtx.kt:
--------------------------------------------------------------------------------
1 | package com.grarcht.shuttle.demo.core.os
2 |
3 | import android.os.Bundle
4 |
5 | /**
6 | * Gets the parcelable from the bundle.
7 | * @return the parcelable or null
8 | */
9 | fun Bundle.getParcelableWith(key: String?, clazz: Class): T? {
10 | return if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.TIRAMISU) {
11 | getParcelable(key, clazz)
12 | } else {
13 | @Suppress("DEPRECATION")
14 | getParcelable(key)
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/demos/core/src/main/res/raw/broken_soccer_ball.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/core/src/main/res/raw/broken_soccer_ball.jpg
--------------------------------------------------------------------------------
/demos/core/src/main/res/raw/loading.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/core/src/main/res/raw/loading.jpg
--------------------------------------------------------------------------------
/demos/core/src/main/res/raw/tower.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/core/src/main/res/raw/tower.jpg
--------------------------------------------------------------------------------
/demos/core/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #6200EE
4 | #3700B3
5 | #03DAC5
6 |
--------------------------------------------------------------------------------
/demos/core/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 8dp
4 | 64dp
5 |
--------------------------------------------------------------------------------
/demos/core/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/demos/mvc/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/demos/mvc/documentation/kotlin/images/anchor-copy-button.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/mvc/documentation/kotlin/images/arrow_down.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/mvc/documentation/kotlin/images/copy-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/mvc/documentation/kotlin/images/copy-successful-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/mvc/documentation/kotlin/images/footer-go-to-link.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/mvc/documentation/kotlin/images/go-to-top-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/mvc/documentation/kotlin/images/logo-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/mvc/documentation/kotlin/images/nav-icons/class-kotlin.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/demos/mvc/documentation/kotlin/images/nav-icons/class.svg:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/demos/mvc/documentation/kotlin/images/nav-icons/enum-kotlin.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/demos/mvc/documentation/kotlin/images/nav-icons/enum.svg:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/demos/mvc/documentation/kotlin/images/nav-icons/exception-class.svg:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/demos/mvc/documentation/kotlin/images/nav-icons/field-value.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/demos/mvc/documentation/kotlin/images/nav-icons/field-variable.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/demos/mvc/documentation/kotlin/images/nav-icons/interface-kotlin.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/demos/mvc/documentation/kotlin/images/nav-icons/interface.svg:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/demos/mvc/documentation/kotlin/images/nav-icons/object.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/demos/mvc/documentation/kotlin/images/theme-toggle.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/mvc/documentation/kotlin/scripts/sourceset_dependencies.js:
--------------------------------------------------------------------------------
1 | sourceset_dependencies='{":demo-mvc:dokkaHtml/debug":[],":demo-mvc:dokkaHtml/generatedByKspDebugKotlin":[],":demo-mvc:dokkaHtml/generatedByKspReleaseKotlin":[],":demo-mvc:dokkaHtml/main":[],":demo-mvc:dokkaHtml/release":[]}'
2 |
--------------------------------------------------------------------------------
/demos/mvc/documentation/kotlin/styles/logo-styles.css:
--------------------------------------------------------------------------------
1 | .library-name a {
2 | position: relative;
3 | margin-left: 55px;
4 | }
5 |
6 | .library-name a::before {
7 | content: '';
8 | background: url("../images/logo-icon.svg") center no-repeat;
9 | background-size: contain;
10 | position: absolute;
11 | width: 50px;
12 | height: 50px;
13 | top: -18px;
14 | left: -55px;
15 | }
--------------------------------------------------------------------------------
/demos/mvc/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/demos/mvc/src/main/java/com/grarcht/shuttle/demo/mvc/DemoApplication.kt:
--------------------------------------------------------------------------------
1 | package com.grarcht.shuttle.demo.mvc
2 |
3 | import android.app.Application
4 | import dagger.hilt.android.HiltAndroidApp
5 |
6 | @HiltAndroidApp
7 | class DemoApplication : Application()
8 |
--------------------------------------------------------------------------------
/demos/mvc/src/main/java/com/grarcht/shuttle/demo/mvc/controller/MVCSecondControllerActivity.kt:
--------------------------------------------------------------------------------
1 | package com.grarcht.shuttle.demo.mvc.controller
2 |
3 | import android.os.Bundle
4 | import androidx.appcompat.app.AppCompatActivity
5 | import com.grarcht.shuttle.demo.mvc.R
6 | import dagger.hilt.android.AndroidEntryPoint
7 |
8 | @AndroidEntryPoint
9 | class MVCSecondControllerActivity : AppCompatActivity() {
10 | override fun onCreate(savedInstanceState: Bundle?) {
11 | super.onCreate(savedInstanceState)
12 | setContentView(R.layout.second_activity)
13 | initContainer(savedInstanceState)
14 | }
15 |
16 | private fun initContainer(savedInstanceState: Bundle?) {
17 | if (null == savedInstanceState) {
18 | supportFragmentManager.beginTransaction()
19 | .replace(R.id.container, MVCSecondControllerFragment())
20 | .commit()
21 | }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/demos/mvc/src/main/res/layout/main_activity.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/demos/mvc/src/main/res/layout/second_activity.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/demos/mvc/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/demos/mvc/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/demos/mvc/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvc/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/demos/mvc/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvc/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/demos/mvc/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvc/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/demos/mvc/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvc/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/demos/mvc/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvc/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/demos/mvc/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvc/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/demos/mvc/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvc/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/demos/mvc/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvc/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/demos/mvc/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvc/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/demos/mvc/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvc/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/demos/mvc/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #6200EE
4 | #3700B3
5 | #03DAC5
6 |
--------------------------------------------------------------------------------
/demos/mvc/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 8dp
4 | 64dp
5 |
--------------------------------------------------------------------------------
/demos/mvvm-with-a-service/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/demos/mvvm-with-a-service/documentation/kotlin/images/anchor-copy-button.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/mvvm-with-a-service/documentation/kotlin/images/arrow_down.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/mvvm-with-a-service/documentation/kotlin/images/copy-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/mvvm-with-a-service/documentation/kotlin/images/copy-successful-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/mvvm-with-a-service/documentation/kotlin/images/footer-go-to-link.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/mvvm-with-a-service/documentation/kotlin/images/go-to-top-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/mvvm-with-a-service/documentation/kotlin/images/logo-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/mvvm-with-a-service/documentation/kotlin/images/nav-icons/class-kotlin.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/demos/mvvm-with-a-service/documentation/kotlin/images/nav-icons/class.svg:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/demos/mvvm-with-a-service/documentation/kotlin/images/nav-icons/enum-kotlin.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/demos/mvvm-with-a-service/documentation/kotlin/images/nav-icons/enum.svg:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/demos/mvvm-with-a-service/documentation/kotlin/images/nav-icons/exception-class.svg:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/demos/mvvm-with-a-service/documentation/kotlin/images/nav-icons/field-value.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/demos/mvvm-with-a-service/documentation/kotlin/images/nav-icons/field-variable.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/demos/mvvm-with-a-service/documentation/kotlin/images/nav-icons/interface-kotlin.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/demos/mvvm-with-a-service/documentation/kotlin/images/nav-icons/interface.svg:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/demos/mvvm-with-a-service/documentation/kotlin/images/nav-icons/object.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/demos/mvvm-with-a-service/documentation/kotlin/images/theme-toggle.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/mvvm-with-a-service/documentation/kotlin/scripts/sourceset_dependencies.js:
--------------------------------------------------------------------------------
1 | sourceset_dependencies='{":demo-mvvm-with-a-service:dokkaHtml/debug":[],":demo-mvvm-with-a-service:dokkaHtml/main":[],":demo-mvvm-with-a-service:dokkaHtml/release":[]}'
2 |
--------------------------------------------------------------------------------
/demos/mvvm-with-a-service/documentation/kotlin/styles/logo-styles.css:
--------------------------------------------------------------------------------
1 | .library-name a {
2 | position: relative;
3 | margin-left: 55px;
4 | }
5 |
6 | .library-name a::before {
7 | content: '';
8 | background: url("../images/logo-icon.svg") center no-repeat;
9 | background-size: contain;
10 | position: absolute;
11 | width: 50px;
12 | height: 50px;
13 | top: -18px;
14 | left: -55px;
15 | }
--------------------------------------------------------------------------------
/demos/mvvm-with-a-service/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/demos/mvvm-with-a-service/src/main/java/com/grarcht/shuttle/demo/mvvmwithaservice/DemoApplication.kt:
--------------------------------------------------------------------------------
1 | package com.grarcht.shuttle.demo.mvvmwithaservice
2 |
3 | import android.app.Application
4 | import dagger.hilt.android.HiltAndroidApp
5 |
6 | @HiltAndroidApp
7 | class DemoApplication : Application()
8 |
--------------------------------------------------------------------------------
/demos/mvvm-with-a-service/src/main/java/com/grarcht/shuttle/demo/mvvmwithaservice/model/ImageResult.kt:
--------------------------------------------------------------------------------
1 | package com.grarcht.shuttle.demo.mvvmwithaservice.model
2 |
3 | /**
4 | * Denotes the image retrieval state in the [RemoteService] and [Receiver].
5 | */
6 | @Suppress("MagicNumber")
7 | enum class ImageResult(val state: Int) {
8 | UNKNOWN(0),
9 | LOADING(1),
10 | SUCCESS(3),
11 | ERROR(4);
12 |
13 | companion object {
14 | /**
15 | * Maps the [state] to the [ImageResult].
16 | *
17 | * @return the mapped [ImageResult].
18 | */
19 | fun getImageResult(state: Int): ImageResult {
20 | return when (state) {
21 | LOADING.state -> LOADING
22 | SUCCESS.state -> SUCCESS
23 | ERROR.state -> ERROR
24 | else -> UNKNOWN
25 | }
26 | }
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/demos/mvvm-with-a-service/src/main/java/com/grarcht/shuttle/demo/mvvmwithaservice/view/DialogType.kt:
--------------------------------------------------------------------------------
1 | package com.grarcht.shuttle.demo.mvvmwithaservice.view
2 |
3 | /**
4 | * Used to control the flow for the type of dialog to display.
5 | */
6 | enum class DialogType(val typeValue: Int) {
7 | LOADING(0), CONTENT(1), ERROR(2);
8 |
9 | companion object {
10 |
11 | /**
12 | * Maps the type value to the [DIALOG_TYPE] and is used for UI flow.
13 | */
14 | fun toDialogType(value: Int): DialogType {
15 | return when (value) {
16 | CONTENT.typeValue -> CONTENT
17 | ERROR.typeValue -> ERROR
18 | else -> LOADING
19 | }
20 | }
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/demos/mvvm-with-a-service/src/main/res/layout/main_activity.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/demos/mvvm-with-a-service/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/demos/mvvm-with-a-service/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/demos/mvvm-with-a-service/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvvm-with-a-service/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/demos/mvvm-with-a-service/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvvm-with-a-service/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/demos/mvvm-with-a-service/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvvm-with-a-service/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/demos/mvvm-with-a-service/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvvm-with-a-service/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/demos/mvvm-with-a-service/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvvm-with-a-service/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/demos/mvvm-with-a-service/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvvm-with-a-service/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/demos/mvvm-with-a-service/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvvm-with-a-service/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/demos/mvvm-with-a-service/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvvm-with-a-service/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/demos/mvvm-with-a-service/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvvm-with-a-service/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/demos/mvvm-with-a-service/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvvm-with-a-service/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/demos/mvvm-with-a-service/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #6200EE
4 | #3700B3
5 | #03DAC5
6 |
--------------------------------------------------------------------------------
/demos/mvvm-with-a-service/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 8dp
4 | 64dp
5 |
--------------------------------------------------------------------------------
/demos/mvvm-with-a-service/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | Shuttle MVVM Demo
3 | image retrieved
4 | MVVM Architecture With A Service
5 | Get image from service without Shuttle
6 | Get image from service with Shuttle
7 | The app will crash without using Shuttle.
8 | The app will not crash when using Shuttle.
9 | The image could not be retrieved. Please double-check the changes.
10 |
--------------------------------------------------------------------------------
/demos/mvvm-with-compose/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/demos/mvvm-with-compose/documentation/kotlin/images/anchor-copy-button.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/mvvm-with-compose/documentation/kotlin/images/arrow_down.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/mvvm-with-compose/documentation/kotlin/images/copy-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/mvvm-with-compose/documentation/kotlin/images/copy-successful-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/mvvm-with-compose/documentation/kotlin/images/footer-go-to-link.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/mvvm-with-compose/documentation/kotlin/images/go-to-top-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/mvvm-with-compose/documentation/kotlin/images/logo-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/mvvm-with-compose/documentation/kotlin/images/nav-icons/class-kotlin.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/demos/mvvm-with-compose/documentation/kotlin/images/nav-icons/class.svg:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/demos/mvvm-with-compose/documentation/kotlin/images/nav-icons/enum-kotlin.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/demos/mvvm-with-compose/documentation/kotlin/images/nav-icons/enum.svg:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/demos/mvvm-with-compose/documentation/kotlin/images/nav-icons/exception-class.svg:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/demos/mvvm-with-compose/documentation/kotlin/images/nav-icons/field-value.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/demos/mvvm-with-compose/documentation/kotlin/images/nav-icons/field-variable.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/demos/mvvm-with-compose/documentation/kotlin/images/nav-icons/interface-kotlin.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/demos/mvvm-with-compose/documentation/kotlin/images/nav-icons/interface.svg:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/demos/mvvm-with-compose/documentation/kotlin/images/nav-icons/object.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/demos/mvvm-with-compose/documentation/kotlin/images/theme-toggle.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/mvvm-with-compose/documentation/kotlin/scripts/sourceset_dependencies.js:
--------------------------------------------------------------------------------
1 | sourceset_dependencies='{":demo-mvvm-with-compose:dokkaHtml/debug":[],":demo-mvvm-with-compose:dokkaHtml/main":[],":demo-mvvm-with-compose:dokkaHtml/release":[]}'
2 |
--------------------------------------------------------------------------------
/demos/mvvm-with-compose/documentation/kotlin/styles/logo-styles.css:
--------------------------------------------------------------------------------
1 | .library-name a {
2 | position: relative;
3 | margin-left: 55px;
4 | }
5 |
6 | .library-name a::before {
7 | content: '';
8 | background: url("../images/logo-icon.svg") center no-repeat;
9 | background-size: contain;
10 | position: absolute;
11 | width: 50px;
12 | height: 50px;
13 | top: -18px;
14 | left: -55px;
15 | }
--------------------------------------------------------------------------------
/demos/mvvm-with-compose/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/demos/mvvm-with-compose/src/main/java/com/grarcht/shuttle/demo/mvvmwithcompose/DemoApplication.kt:
--------------------------------------------------------------------------------
1 | package com.grarcht.shuttle.demo.mvvmwithcompose
2 |
3 | import android.app.Application
4 | import dagger.hilt.android.HiltAndroidApp
5 |
6 | @HiltAndroidApp
7 | class DemoApplication : Application()
8 |
--------------------------------------------------------------------------------
/demos/mvvm-with-compose/src/main/java/com/grarcht/shuttle/demo/mvvmwithcompose/viewmodel/FirstViewModel.kt:
--------------------------------------------------------------------------------
1 | package com.grarcht.shuttle.demo.mvvmwithcompose.viewmodel
2 |
3 | import android.content.res.Resources
4 | import androidx.annotation.RawRes
5 | import androidx.lifecycle.ViewModel
6 | import com.grarcht.shuttle.demo.core.io.IOResult
7 | import com.grarcht.shuttle.demo.core.io.RawResourceGateway
8 | import kotlinx.coroutines.flow.Flow
9 |
10 | /**
11 | * The MVVM ViewModel used with the First View and corresponding model.
12 | */
13 | class FirstViewModel : ViewModel() {
14 | fun getImage(resources: Resources, @RawRes imageId: Int): Flow {
15 | return RawResourceGateway.with(resources).bytesFromRawResource(imageId).create()
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/demos/mvvm-with-compose/src/main/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
17 |
18 |
--------------------------------------------------------------------------------
/demos/mvvm-with-compose/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/demos/mvvm-with-compose/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/demos/mvvm-with-compose/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvvm-with-compose/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/demos/mvvm-with-compose/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvvm-with-compose/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/demos/mvvm-with-compose/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvvm-with-compose/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/demos/mvvm-with-compose/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvvm-with-compose/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/demos/mvvm-with-compose/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvvm-with-compose/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/demos/mvvm-with-compose/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvvm-with-compose/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/demos/mvvm-with-compose/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvvm-with-compose/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/demos/mvvm-with-compose/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvvm-with-compose/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/demos/mvvm-with-compose/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvvm-with-compose/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/demos/mvvm-with-compose/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvvm-with-compose/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/demos/mvvm-with-compose/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #6200EE
4 | #3700B3
5 | #03DAC5
6 |
--------------------------------------------------------------------------------
/demos/mvvm-with-compose/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 8dp
4 | 64dp
5 |
--------------------------------------------------------------------------------
/demos/mvvm-with-navigation/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/demos/mvvm-with-navigation/documentation/kotlin/demo/package-list:
--------------------------------------------------------------------------------
1 | $dokka.format:html-v1
2 | $dokka.linkExtension:html
3 |
4 | com.grarcht.shuttle.demo
5 | com.grarcht.shuttle.demo.core.commonviews
6 | com.grarcht.shuttle.demo.core.dependencyinjection
7 | com.grarcht.shuttle.demo.core.image
8 | com.grarcht.shuttle.demo.core.io
9 | com.grarcht.shuttle.demo.mvc.controller
10 | com.grarcht.shuttle.demo.mvvm.view
11 | com.grarcht.shuttle.demo.mvvm.viewmodel
12 |
13 |
--------------------------------------------------------------------------------
/demos/mvvm-with-navigation/documentation/kotlin/images/anchor-copy-button.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/mvvm-with-navigation/documentation/kotlin/images/arrow_down.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/mvvm-with-navigation/documentation/kotlin/images/copy-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/mvvm-with-navigation/documentation/kotlin/images/copy-successful-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/mvvm-with-navigation/documentation/kotlin/images/footer-go-to-link.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/mvvm-with-navigation/documentation/kotlin/images/go-to-top-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/mvvm-with-navigation/documentation/kotlin/images/logo-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/mvvm-with-navigation/documentation/kotlin/images/nav-icons/class-kotlin.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/demos/mvvm-with-navigation/documentation/kotlin/images/nav-icons/class.svg:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/demos/mvvm-with-navigation/documentation/kotlin/images/nav-icons/enum-kotlin.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/demos/mvvm-with-navigation/documentation/kotlin/images/nav-icons/enum.svg:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/demos/mvvm-with-navigation/documentation/kotlin/images/nav-icons/exception-class.svg:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/demos/mvvm-with-navigation/documentation/kotlin/images/nav-icons/field-value.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/demos/mvvm-with-navigation/documentation/kotlin/images/nav-icons/field-variable.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/demos/mvvm-with-navigation/documentation/kotlin/images/nav-icons/interface-kotlin.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/demos/mvvm-with-navigation/documentation/kotlin/images/nav-icons/interface.svg:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/demos/mvvm-with-navigation/documentation/kotlin/images/nav-icons/object.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/demos/mvvm-with-navigation/documentation/kotlin/images/theme-toggle.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/mvvm-with-navigation/documentation/kotlin/scripts/sourceset_dependencies.js:
--------------------------------------------------------------------------------
1 | sourceset_dependencies='{":demo-mvvm-with-navigation:dokkaHtml/debug":[],":demo-mvvm-with-navigation:dokkaHtml/main":[],":demo-mvvm-with-navigation:dokkaHtml/release":[]}'
2 |
--------------------------------------------------------------------------------
/demos/mvvm-with-navigation/documentation/kotlin/styles/logo-styles.css:
--------------------------------------------------------------------------------
1 | .library-name a {
2 | position: relative;
3 | margin-left: 55px;
4 | }
5 |
6 | .library-name a::before {
7 | content: '';
8 | background: url("../images/logo-icon.svg") center no-repeat;
9 | background-size: contain;
10 | position: absolute;
11 | width: 50px;
12 | height: 50px;
13 | top: -18px;
14 | left: -55px;
15 | }
--------------------------------------------------------------------------------
/demos/mvvm-with-navigation/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/demos/mvvm-with-navigation/src/main/java/com/grarcht/shuttle/demo/mvvmwithnavigation/DemoApplication.kt:
--------------------------------------------------------------------------------
1 | package com.grarcht.shuttle.demo.mvvmwithnavigation
2 |
3 | import android.app.Application
4 | import dagger.hilt.android.HiltAndroidApp
5 |
6 | @HiltAndroidApp
7 | class DemoApplication : Application()
8 |
--------------------------------------------------------------------------------
/demos/mvvm-with-navigation/src/main/java/com/grarcht/shuttle/demo/mvvmwithnavigation/viewmodel/FirstViewModel.kt:
--------------------------------------------------------------------------------
1 | package com.grarcht.shuttle.demo.mvvmwithnavigation.viewmodel
2 |
3 | import android.content.res.Resources
4 | import androidx.annotation.RawRes
5 | import androidx.lifecycle.ViewModel
6 | import com.grarcht.shuttle.demo.core.io.IOResult
7 | import com.grarcht.shuttle.demo.core.io.RawResourceGateway
8 | import kotlinx.coroutines.flow.Flow
9 |
10 | /**
11 | * The MVVM ViewModel used with the First View and corresponding model.
12 | */
13 | class FirstViewModel : ViewModel() {
14 | // This function shows using the view model without databinding. This is one of the ways that MVVM is applied in
15 | // apps. For a demonstration with Databinding, look at the SecondViewModel class.
16 | fun getImage(resources: Resources, @RawRes imageId: Int): Flow {
17 | return RawResourceGateway.with(resources).bytesFromRawResource(imageId).create()
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/demos/mvvm-with-navigation/src/main/res/layout/mvvm_nav_entry_point_view_activity.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
13 |
--------------------------------------------------------------------------------
/demos/mvvm-with-navigation/src/main/res/layout/mvvm_nav_second_view_activity.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
13 |
--------------------------------------------------------------------------------
/demos/mvvm-with-navigation/src/main/res/layout/nav_host_fragment.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/demos/mvvm-with-navigation/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/demos/mvvm-with-navigation/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/demos/mvvm-with-navigation/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvvm-with-navigation/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/demos/mvvm-with-navigation/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvvm-with-navigation/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/demos/mvvm-with-navigation/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvvm-with-navigation/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/demos/mvvm-with-navigation/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvvm-with-navigation/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/demos/mvvm-with-navigation/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvvm-with-navigation/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/demos/mvvm-with-navigation/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvvm-with-navigation/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/demos/mvvm-with-navigation/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvvm-with-navigation/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/demos/mvvm-with-navigation/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvvm-with-navigation/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/demos/mvvm-with-navigation/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvvm-with-navigation/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/demos/mvvm-with-navigation/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvvm-with-navigation/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/demos/mvvm-with-navigation/src/main/res/navigation/second_nav_graph.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
10 |
11 |
15 |
--------------------------------------------------------------------------------
/demos/mvvm-with-navigation/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #6200EE
4 | #3700B3
5 | #03DAC5
6 |
--------------------------------------------------------------------------------
/demos/mvvm-with-navigation/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 8dp
4 | 64dp
5 |
--------------------------------------------------------------------------------
/demos/mvvm/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/demos/mvvm/documentation/kotlin/images/anchor-copy-button.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/mvvm/documentation/kotlin/images/arrow_down.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/mvvm/documentation/kotlin/images/copy-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/mvvm/documentation/kotlin/images/copy-successful-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/mvvm/documentation/kotlin/images/footer-go-to-link.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/mvvm/documentation/kotlin/images/go-to-top-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/mvvm/documentation/kotlin/images/logo-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/mvvm/documentation/kotlin/images/nav-icons/class-kotlin.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/demos/mvvm/documentation/kotlin/images/nav-icons/class.svg:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/demos/mvvm/documentation/kotlin/images/nav-icons/enum-kotlin.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/demos/mvvm/documentation/kotlin/images/nav-icons/enum.svg:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/demos/mvvm/documentation/kotlin/images/nav-icons/exception-class.svg:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/demos/mvvm/documentation/kotlin/images/nav-icons/field-value.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/demos/mvvm/documentation/kotlin/images/nav-icons/field-variable.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/demos/mvvm/documentation/kotlin/images/nav-icons/interface-kotlin.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/demos/mvvm/documentation/kotlin/images/nav-icons/interface.svg:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/demos/mvvm/documentation/kotlin/images/nav-icons/object.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/demos/mvvm/documentation/kotlin/images/theme-toggle.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/mvvm/documentation/kotlin/scripts/sourceset_dependencies.js:
--------------------------------------------------------------------------------
1 | sourceset_dependencies='{":demo-mvvm:dokkaHtml/debug":[],":demo-mvvm:dokkaHtml/main":[],":demo-mvvm:dokkaHtml/release":[]}'
2 |
--------------------------------------------------------------------------------
/demos/mvvm/documentation/kotlin/styles/logo-styles.css:
--------------------------------------------------------------------------------
1 | .library-name a {
2 | position: relative;
3 | margin-left: 55px;
4 | }
5 |
6 | .library-name a::before {
7 | content: '';
8 | background: url("../images/logo-icon.svg") center no-repeat;
9 | background-size: contain;
10 | position: absolute;
11 | width: 50px;
12 | height: 50px;
13 | top: -18px;
14 | left: -55px;
15 | }
--------------------------------------------------------------------------------
/demos/mvvm/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/demos/mvvm/src/main/java/com/grarcht/shuttle/demo/mvvm/DemoApplication.kt:
--------------------------------------------------------------------------------
1 | package com.grarcht.shuttle.demo.mvvm
2 |
3 | import android.app.Application
4 | import dagger.hilt.android.HiltAndroidApp
5 |
6 | @HiltAndroidApp
7 | class DemoApplication : Application()
8 |
--------------------------------------------------------------------------------
/demos/mvvm/src/main/java/com/grarcht/shuttle/demo/mvvm/view/MVVMSecondViewActivity.kt:
--------------------------------------------------------------------------------
1 | package com.grarcht.shuttle.demo.mvvm.view
2 |
3 | import android.os.Bundle
4 | import androidx.appcompat.app.AppCompatActivity
5 | import com.grarcht.shuttle.demo.mvvm.R
6 | import dagger.hilt.android.AndroidEntryPoint
7 |
8 | @AndroidEntryPoint
9 | class MVVMSecondViewActivity : AppCompatActivity() {
10 | override fun onCreate(savedInstanceState: Bundle?) {
11 | super.onCreate(savedInstanceState)
12 | setContentView(R.layout.second_activity)
13 | initContainer(savedInstanceState)
14 | }
15 |
16 | private fun initContainer(savedInstanceState: Bundle?) {
17 | if (null == savedInstanceState) {
18 | supportFragmentManager.beginTransaction()
19 | .replace(R.id.container, MVVMSecondViewFragment())
20 | .commitNow()
21 | }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/demos/mvvm/src/main/java/com/grarcht/shuttle/demo/mvvm/viewmodel/FirstViewModel.kt:
--------------------------------------------------------------------------------
1 | package com.grarcht.shuttle.demo.mvvm.viewmodel
2 |
3 | import android.content.res.Resources
4 | import androidx.annotation.RawRes
5 | import androidx.lifecycle.ViewModel
6 | import com.grarcht.shuttle.demo.core.io.IOResult
7 | import com.grarcht.shuttle.demo.core.io.RawResourceGateway
8 | import kotlinx.coroutines.flow.Flow
9 |
10 | /**
11 | * The MVVM ViewModel used with the First View and corresponding model.
12 | */
13 | class FirstViewModel : ViewModel() {
14 | // This function shows using the view model without databinding. This is one of the ways that MVVM is applied in
15 | // apps. For a demonstration with Databinding, look at the SecondViewModel class.
16 | fun getImage(resources: Resources, @RawRes imageId: Int): Flow {
17 | return RawResourceGateway.with(resources).bytesFromRawResource(imageId).create()
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/demos/mvvm/src/main/res/layout/main_activity.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/demos/mvvm/src/main/res/layout/second_activity.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/demos/mvvm/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/demos/mvvm/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/demos/mvvm/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvvm/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/demos/mvvm/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvvm/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/demos/mvvm/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvvm/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/demos/mvvm/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvvm/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/demos/mvvm/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvvm/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/demos/mvvm/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvvm/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/demos/mvvm/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvvm/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/demos/mvvm/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvvm/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/demos/mvvm/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvvm/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/demos/mvvm/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/demos/mvvm/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/demos/mvvm/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #6200EE
4 | #3700B3
5 | #03DAC5
6 |
--------------------------------------------------------------------------------
/demos/mvvm/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 8dp
4 | 64dp
5 |
--------------------------------------------------------------------------------
/detekt/baseline-debug.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | NoNameShadowing:MVVMNavFirstViewFragment.kt$MVVMNavFirstViewFragment${ Log.w(LOG_TAG, "Caught when getting the image model.", it) }
6 | UseOrEmpty:MVVMNavSecondViewFragment.kt$MVVMNavSecondViewFragment$storedCargoId ?: ""
7 | VarCouldBeVal:MVVMNavSecondViewFragment.kt$MVVMNavSecondViewFragment$private var deferredImageLoad: Deferred<Unit>? = null
8 |
9 |
10 |
--------------------------------------------------------------------------------
/detekt/baseline-release.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | NoNameShadowing:MVVMFirstView.kt$MVVMFirstView${ if (it !is CancellationException) { Log.w(TAG, UNABLE_TO_GET_IMAGE_MODEL_ERROR_MESSAGE, it) } }
6 | UseOrEmpty:MVVMSecondView.kt$MVVMSecondView$storedCargoId ?: ""
7 | VarCouldBeVal:MVVMSecondView.kt$MVVMSecondView$private var deferredImageLoad: Deferred<Unit>? = null
8 |
9 |
10 |
--------------------------------------------------------------------------------
/detekt/baseline.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/detekt/detekt.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'io.gitlab.arturbosch.detekt'
2 |
3 | detekt {
4 | allRules = true
5 | buildUponDefaultConfig = true
6 | def rootDirectory = rootProject.getRootDir()
7 | println("Dir ${rootDirectory}")
8 | config = files("${rootDirectory}/detekt/detekt.yml")
9 | baseline = file("${rootDirectory}/detekt/baseline.xml")
10 | autoCorrect = true
11 |
12 | reports {
13 | html.enabled = true
14 | xml.enabled = true
15 | txt.enabled = true
16 | sarif.enabled = true
17 | }
18 |
19 | toolVersion = "1.23.1"
20 | }
21 |
22 | dependencies {
23 | detektPlugins "io.gitlab.arturbosch.detekt:detekt-formatting:1.23.1"
24 | }
25 |
--------------------------------------------------------------------------------
/framework-addons/navigation-component/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/framework-addons/navigation-component/consumer-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/framework-addons/navigation-component/consumer-rules.pro
--------------------------------------------------------------------------------
/framework-addons/navigation-component/documentation/kotlin/images/anchor-copy-button.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/framework-addons/navigation-component/documentation/kotlin/images/arrow_down.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/framework-addons/navigation-component/documentation/kotlin/images/copy-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/framework-addons/navigation-component/documentation/kotlin/images/copy-successful-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/framework-addons/navigation-component/documentation/kotlin/images/footer-go-to-link.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/framework-addons/navigation-component/documentation/kotlin/images/go-to-top-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/framework-addons/navigation-component/documentation/kotlin/images/logo-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/framework-addons/navigation-component/documentation/kotlin/images/nav-icons/class-kotlin.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/framework-addons/navigation-component/documentation/kotlin/images/nav-icons/class.svg:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/framework-addons/navigation-component/documentation/kotlin/images/nav-icons/enum-kotlin.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/framework-addons/navigation-component/documentation/kotlin/images/nav-icons/enum.svg:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/framework-addons/navigation-component/documentation/kotlin/images/nav-icons/exception-class.svg:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/framework-addons/navigation-component/documentation/kotlin/images/nav-icons/field-value.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/framework-addons/navigation-component/documentation/kotlin/images/nav-icons/field-variable.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/framework-addons/navigation-component/documentation/kotlin/images/nav-icons/interface-kotlin.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/framework-addons/navigation-component/documentation/kotlin/images/nav-icons/interface.svg:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/framework-addons/navigation-component/documentation/kotlin/images/nav-icons/object.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/framework-addons/navigation-component/documentation/kotlin/images/theme-toggle.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/framework-addons/navigation-component/documentation/kotlin/scripts/sourceset_dependencies.js:
--------------------------------------------------------------------------------
1 | sourceset_dependencies='{":framework-addons-navigation-component:dokkaHtml/debug":[],":framework-addons-navigation-component:dokkaHtml/main":[],":framework-addons-navigation-component:dokkaHtml/release":[]}'
2 |
--------------------------------------------------------------------------------
/framework-addons/navigation-component/documentation/kotlin/styles/logo-styles.css:
--------------------------------------------------------------------------------
1 | .library-name a {
2 | position: relative;
3 | margin-left: 55px;
4 | }
5 |
6 | .library-name a::before {
7 | content: '';
8 | background: url("../images/logo-icon.svg") center no-repeat;
9 | background-size: contain;
10 | position: absolute;
11 | width: 50px;
12 | height: 50px;
13 | top: -18px;
14 | left: -55px;
15 | }
--------------------------------------------------------------------------------
/framework-addons/navigation-component/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/framework-addons/navigation-component/src/main/java/com/grarcht/shuttle/framework/addons/navigation/ShuttleNavDirections.kt:
--------------------------------------------------------------------------------
1 | package com.grarcht.shuttle.framework.addons.navigation
2 |
3 | import android.os.Bundle
4 | import androidx.navigation.NavDirections
5 |
6 | /**
7 | * This class enables creation of new nav directions from the [arguments]
8 | * not created from the navigation component.
9 | * @param actionId from the original [NavDirections]
10 | * @param arguments for use with Shuttle
11 | */
12 | class ShuttleNavDirections(
13 | override val actionId: Int,
14 | override val arguments: Bundle
15 | ) : NavDirections
16 |
--------------------------------------------------------------------------------
/framework-addons/navigation-component/src/test/java/com/grarcht/shuttle/framework/addons/coroutines/CompositeDisposableHandle.kt:
--------------------------------------------------------------------------------
1 | package com.grarcht.shuttle.framework.addons.coroutines
2 |
3 | import kotlinx.coroutines.DisposableHandle
4 |
5 | class CompositeDisposableHandle {
6 | private val disposables = mutableListOf()
7 |
8 | fun add(disposable: DisposableHandle) {
9 | if (disposables.contains(disposable).not()) {
10 | disposables.add(disposable)
11 | }
12 | }
13 |
14 | fun dispose() {
15 | disposables.forEach { disposable ->
16 | disposable.dispose()
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/framework-addons/navigation-component/src/test/java/com/grarcht/shuttle/framework/addons/navigation/Cargo.kt:
--------------------------------------------------------------------------------
1 | package com.grarcht.shuttle.framework.addons.navigation
2 |
3 | import java.io.Serializable
4 |
5 | data class Cargo(val cargoId: String, val numberOfBoxes: Int) : Serializable {
6 | companion object {
7 | private const val serialVersionUID: Long = -53
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/framework-integrations-extensions/room/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/framework-integrations-extensions/room/consumer-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/framework-integrations-extensions/room/consumer-rules.pro
--------------------------------------------------------------------------------
/framework-integrations-extensions/room/documentation/kotlin/images/anchor-copy-button.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/framework-integrations-extensions/room/documentation/kotlin/images/arrow_down.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/framework-integrations-extensions/room/documentation/kotlin/images/copy-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/framework-integrations-extensions/room/documentation/kotlin/images/copy-successful-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/framework-integrations-extensions/room/documentation/kotlin/images/footer-go-to-link.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/framework-integrations-extensions/room/documentation/kotlin/images/go-to-top-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/framework-integrations-extensions/room/documentation/kotlin/images/logo-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/framework-integrations-extensions/room/documentation/kotlin/images/nav-icons/class-kotlin.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/framework-integrations-extensions/room/documentation/kotlin/images/nav-icons/enum-kotlin.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/framework-integrations-extensions/room/documentation/kotlin/images/nav-icons/enum.svg:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/framework-integrations-extensions/room/documentation/kotlin/images/nav-icons/exception-class.svg:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/framework-integrations-extensions/room/documentation/kotlin/images/nav-icons/field-value.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/framework-integrations-extensions/room/documentation/kotlin/images/nav-icons/field-variable.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/framework-integrations-extensions/room/documentation/kotlin/images/nav-icons/interface-kotlin.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/framework-integrations-extensions/room/documentation/kotlin/images/nav-icons/interface.svg:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/framework-integrations-extensions/room/documentation/kotlin/images/nav-icons/object.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/framework-integrations-extensions/room/documentation/kotlin/images/theme-toggle.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/framework-integrations-extensions/room/documentation/kotlin/scripts/sourceset_dependencies.js:
--------------------------------------------------------------------------------
1 | sourceset_dependencies='{":framework-integrations-extensions-room:dokkaHtml/debug":[],":framework-integrations-extensions-room:dokkaHtml/generatedByKspDebugKotlin":[],":framework-integrations-extensions-room:dokkaHtml/generatedByKspReleaseKotlin":[],":framework-integrations-extensions-room:dokkaHtml/main":[],":framework-integrations-extensions-room:dokkaHtml/release":[]}'
2 |
--------------------------------------------------------------------------------
/framework-integrations-extensions/room/documentation/kotlin/styles/logo-styles.css:
--------------------------------------------------------------------------------
1 | .library-name a {
2 | position: relative;
3 | margin-left: 55px;
4 | }
5 |
6 | .library-name a::before {
7 | content: '';
8 | background: url("../images/logo-icon.svg") center no-repeat;
9 | background-size: contain;
10 | position: absolute;
11 | width: 50px;
12 | height: 50px;
13 | top: -18px;
14 | left: -55px;
15 | }
--------------------------------------------------------------------------------
/framework-integrations-extensions/room/src/androidTest/java/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
6 |
10 |
14 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/framework-integrations-extensions/room/src/main/java/com/grarcht/shuttle/framework/integrations/extensions/room/ShuttleRoomDbConfig.kt:
--------------------------------------------------------------------------------
1 | package com.grarcht.shuttle.framework.integrations.extensions.room
2 |
3 | import android.content.Context
4 |
5 | /**
6 | * The config used in configuring the database.
7 | */
8 | data class ShuttleRoomDbConfig(val context: Context, val multiprocess: Boolean = false)
9 |
--------------------------------------------------------------------------------
/framework-integrations-extensions/room/src/test/java/com/grarcht/shuttle/framework/integrations/extensions/room/ShuttleRoomDataModelFactoryTest.kt:
--------------------------------------------------------------------------------
1 | package com.grarcht.shuttle.framework.integrations.extensions.room
2 |
3 | import org.junit.jupiter.api.Assertions
4 | import org.junit.jupiter.api.Test
5 |
6 | /**
7 | * Verifies the [ShuttleRoomDataModelFactory] functionality.
8 | */
9 | class ShuttleRoomDataModelFactoryTest {
10 | private val modelFactory = ShuttleRoomDataModelFactory()
11 |
12 | @Test
13 | fun verifyCreationOfTheDb() {
14 | val model = modelFactory.createDataModel(cargoId = "cargoId1", filePath = "app/cargo/cargoId1")
15 | Assertions.assertNotNull(model)
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/framework-integrations/persistence/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/framework-integrations/persistence/consumer-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/framework-integrations/persistence/consumer-rules.pro
--------------------------------------------------------------------------------
/framework-integrations/persistence/documentation/kotlin/images/anchor-copy-button.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/framework-integrations/persistence/documentation/kotlin/images/arrow_down.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/framework-integrations/persistence/documentation/kotlin/images/copy-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/framework-integrations/persistence/documentation/kotlin/images/copy-successful-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/framework-integrations/persistence/documentation/kotlin/images/footer-go-to-link.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/framework-integrations/persistence/documentation/kotlin/images/go-to-top-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/framework-integrations/persistence/documentation/kotlin/images/logo-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/framework-integrations/persistence/documentation/kotlin/images/nav-icons/class-kotlin.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/framework-integrations/persistence/documentation/kotlin/images/nav-icons/class.svg:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/framework-integrations/persistence/documentation/kotlin/images/nav-icons/enum-kotlin.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/framework-integrations/persistence/documentation/kotlin/images/nav-icons/enum.svg:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/framework-integrations/persistence/documentation/kotlin/images/nav-icons/exception-class.svg:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/framework-integrations/persistence/documentation/kotlin/images/nav-icons/field-value.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/framework-integrations/persistence/documentation/kotlin/images/nav-icons/field-variable.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/framework-integrations/persistence/documentation/kotlin/images/nav-icons/interface-kotlin.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/framework-integrations/persistence/documentation/kotlin/images/nav-icons/interface.svg:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/framework-integrations/persistence/documentation/kotlin/images/nav-icons/object.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/framework-integrations/persistence/documentation/kotlin/images/theme-toggle.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/framework-integrations/persistence/documentation/kotlin/scripts/sourceset_dependencies.js:
--------------------------------------------------------------------------------
1 | sourceset_dependencies='{":framework-integrations-persistence:dokkaHtml/debug":[],":framework-integrations-persistence:dokkaHtml/main":[],":framework-integrations-persistence:dokkaHtml/release":[]}'
2 |
--------------------------------------------------------------------------------
/framework-integrations/persistence/documentation/kotlin/styles/logo-styles.css:
--------------------------------------------------------------------------------
1 | .library-name a {
2 | position: relative;
3 | margin-left: 55px;
4 | }
5 |
6 | .library-name a::before {
7 | content: '';
8 | background: url("../images/logo-icon.svg") center no-repeat;
9 | background-size: contain;
10 | position: absolute;
11 | width: 50px;
12 | height: 50px;
13 | top: -18px;
14 | left: -55px;
15 | }
--------------------------------------------------------------------------------
/framework-integrations/persistence/src/main/java/com/grarcht/shuttle/framework/integrations/persistence/ShuttleDatabase.kt:
--------------------------------------------------------------------------------
1 | package com.grarcht.shuttle.framework.integrations.persistence
2 |
3 | /**
4 | * The contractual interface used to various database implementations for Shuttle.
5 | */
6 | interface ShuttleDatabase {
7 | /**
8 | * The Data Access Object (DAO) reference for the DAO used to access the Shuttle database.
9 | */
10 | val shuttleDataAccessObject: ShuttleDataAccessObject
11 | }
12 |
--------------------------------------------------------------------------------
/framework-integrations/persistence/src/main/java/com/grarcht/shuttle/framework/integrations/persistence/datamodel/ShuttleDataModel.kt:
--------------------------------------------------------------------------------
1 | package com.grarcht.shuttle.framework.integrations.persistence.datamodel
2 |
3 | /**
4 | * The contractual interface used to ensure data, sent to the database implementations,
5 | * will be the same across various database solutions, like Room and others.
6 | */
7 | interface ShuttleDataModel {
8 | /**
9 | * Used to retrieve the blobs from the database.
10 | */
11 | val cargoId: String
12 |
13 | /**
14 | * The file path for the data blob, stored in the file system.
15 | */
16 | val filePath: String
17 | }
18 |
--------------------------------------------------------------------------------
/framework-integrations/persistence/src/main/java/com/grarcht/shuttle/framework/integrations/persistence/io/CloseableKtx.kt:
--------------------------------------------------------------------------------
1 | package com.grarcht.shuttle.framework.integrations.persistence.io
2 |
3 | import java.io.Closeable
4 | import java.io.IOException
5 |
6 | /**
7 | * Closes [Closeable]s without logging exceptions when an [IOException] occurs with closing the [Closeable].
8 | * Additionally, if the closable reference is null, no action will be taken.
9 | */
10 | fun Closeable?.closeQuietly() {
11 | @Suppress("SwallowedException")
12 | this?.let {
13 | try {
14 | this.close()
15 | } catch (ioe: IOException) {
16 | // ignore on purpose
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/framework-integrations/persistence/src/main/java/com/grarcht/shuttle/framework/integrations/persistence/io/file/factory/ShuttleFileFactory.kt:
--------------------------------------------------------------------------------
1 | package com.grarcht.shuttle.framework.integrations.persistence.io.file.factory
2 |
3 | import java.io.File
4 |
5 | /**
6 | * This factory contractual interface is used to create [File]s. This class uses the factory design pattern.
7 | * For more information on this design pattern, refer to:
8 | * Factory Design Pattern
9 | */
10 | interface ShuttleFileFactory {
11 | /**
12 | * Creates a new file.
13 | * @param directoryName the name for the directory where the file is being created
14 | * @param fileName the name for the file to create
15 | * @return the reference to the newly created file or null if it was not created
16 | */
17 | fun createFile(directoryName: String, fileName: String): File?
18 | }
19 |
--------------------------------------------------------------------------------
/framework-integrations/persistence/src/main/java/com/grarcht/shuttle/framework/integrations/persistence/result/ShuttlePersistenceRemoveCargoResult.kt:
--------------------------------------------------------------------------------
1 | package com.grarcht.shuttle.framework.integrations.persistence.result
2 |
3 | /**
4 | * Represents states from attempts to remove the cargo.
5 | */
6 | sealed class ShuttlePersistenceRemoveCargoResult {
7 | /**
8 | * The state for when the cargo does not exist.
9 | */
10 | object DoesNotExist : ShuttlePersistenceRemoveCargoResult()
11 |
12 | /**
13 | * The state for when Shuttle has successfully picked up the cargo.
14 | */
15 | object Removed : ShuttlePersistenceRemoveCargoResult()
16 |
17 | /**
18 | * The state for when Shuttle has started removing the cargo.
19 | */
20 | object UnableToRemove : ShuttlePersistenceRemoveCargoResult()
21 | }
22 |
--------------------------------------------------------------------------------
/framework-integrations/persistence/src/test/java/com/grarcht/shuttle/framework/integrations/persistence/io/PaintColor.kt:
--------------------------------------------------------------------------------
1 | package com.grarcht.shuttle.framework.integrations.persistence.io
2 |
3 | import java.io.Serializable
4 |
5 | class PaintColor(val color: String?) : Serializable {
6 | companion object {
7 | private const val serialVersionUID: Long = -84
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/framework/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/framework/consumer-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/framework/consumer-rules.pro
--------------------------------------------------------------------------------
/framework/documentation/kotlin/images/anchor-copy-button.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/framework/documentation/kotlin/images/arrow_down.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/framework/documentation/kotlin/images/copy-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/framework/documentation/kotlin/images/copy-successful-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/framework/documentation/kotlin/images/footer-go-to-link.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/framework/documentation/kotlin/images/go-to-top-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/framework/documentation/kotlin/images/logo-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/framework/documentation/kotlin/images/nav-icons/class-kotlin.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/framework/documentation/kotlin/images/nav-icons/class.svg:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/framework/documentation/kotlin/images/nav-icons/enum-kotlin.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/framework/documentation/kotlin/images/nav-icons/enum.svg:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/framework/documentation/kotlin/images/nav-icons/exception-class.svg:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/framework/documentation/kotlin/images/nav-icons/field-value.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/framework/documentation/kotlin/images/nav-icons/field-variable.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/framework/documentation/kotlin/images/nav-icons/interface-kotlin.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/framework/documentation/kotlin/images/nav-icons/interface.svg:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/framework/documentation/kotlin/images/nav-icons/object.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/framework/documentation/kotlin/images/theme-toggle.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/framework/documentation/kotlin/scripts/sourceset_dependencies.js:
--------------------------------------------------------------------------------
1 | sourceset_dependencies='{":framework:dokkaHtml/debug":[],":framework:dokkaHtml/main":[],":framework:dokkaHtml/release":[]}'
2 |
--------------------------------------------------------------------------------
/framework/documentation/kotlin/styles/logo-styles.css:
--------------------------------------------------------------------------------
1 | .library-name a {
2 | position: relative;
3 | margin-left: 55px;
4 | }
5 |
6 | .library-name a::before {
7 | content: '';
8 | background: url("../images/logo-icon.svg") center no-repeat;
9 | background-size: contain;
10 | position: absolute;
11 | width: 50px;
12 | height: 50px;
13 | top: -18px;
14 | left: -55px;
15 | }
--------------------------------------------------------------------------------
/framework/src/main/java/com/grarcht/shuttle/framework/Constants.kt:
--------------------------------------------------------------------------------
1 | package com.grarcht.shuttle.framework
2 |
3 | /**
4 | *
5 | */
6 | const val CARGO_ID_KEY = "cargo_id"
7 |
8 | /**
9 | *
10 | */
11 | const val NO_CARGO_ID = "no_cargo_id_available"
12 |
--------------------------------------------------------------------------------
/framework/src/main/java/com/grarcht/shuttle/framework/app/ShuttleConnectedServiceModel.kt:
--------------------------------------------------------------------------------
1 | package com.grarcht.shuttle.framework.app
2 |
3 | import android.os.Messenger
4 | import com.grarcht.shuttle.framework.content.serviceconnection.ShuttleServiceConnection
5 |
6 | /**
7 | * Holds the service references, emitted from the [ShuttleServiceConnection].
8 | * @param localService used for transporting cargo with the local service
9 | * @param ipcMessenger used for transporting cargo with the remote service via IPC
10 | */
11 | data class ShuttleConnectedServiceModel(
12 | var localService: S? = null,
13 | var ipcMessenger: Messenger? = null
14 | )
15 |
--------------------------------------------------------------------------------
/framework/src/main/java/com/grarcht/shuttle/framework/content/bundle/SerializableParcelable.kt:
--------------------------------------------------------------------------------
1 | package com.grarcht.shuttle.framework.content.bundle
2 |
3 | import android.os.Parcelable
4 | import java.io.Serializable
5 |
6 | data class SerializableParcelable(val parcelable: Parcelable) : Serializable {
7 | companion object {
8 | private const val serialVersionUID: Long = -32453
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/framework/src/main/java/com/grarcht/shuttle/framework/os/ShuttleBinder.kt:
--------------------------------------------------------------------------------
1 | package com.grarcht.shuttle.framework.os
2 |
3 | import android.os.Binder
4 | import com.grarcht.shuttle.framework.app.ShuttleService
5 |
6 | /**
7 | * Binds clients to the [service].
8 | * @param service - to bind to
9 | */
10 | data class ShuttleBinder(private val service: T) : Binder() {
11 | // Enables clients to call service functions
12 | fun getService(): T = service
13 | }
14 |
--------------------------------------------------------------------------------
/framework/src/main/java/com/grarcht/shuttle/framework/os/messenger/ShuttleMessageReceiver.kt:
--------------------------------------------------------------------------------
1 | package com.grarcht.shuttle.framework.os.messenger
2 |
3 | import android.os.Message
4 | import android.os.Messenger
5 |
6 | /**
7 | * Receives and handles IPC [Message]s from [Messenger]s.
8 | */
9 | interface ShuttleMessageReceiver {
10 | /**
11 | * Override this function to handle IPC messaging.
12 | *
13 | * Since this service supports local binding and messenger binding for IPC, and this function is for the
14 | * latter, then this function is open and not abstract.
15 | *
16 | * @param messageWhat see [Message.what]
17 | * @param msg see [Message]
18 | */
19 | fun onReceiveMessage(messageWhat: Int, msg: Message)
20 | }
21 |
--------------------------------------------------------------------------------
/framework/src/main/java/com/grarcht/shuttle/framework/screen/ShuttleFacade.kt:
--------------------------------------------------------------------------------
1 | package com.grarcht.shuttle.framework.screen
2 |
3 | /**
4 | * This is a contractual interface for a facade that hides functionality, such as removing cargo after a delivery
5 | * (data is removed from the db after the user presses the back button on the screen where the data was delivered).
6 | */
7 | interface ShuttleFacade {
8 |
9 | /**
10 | * Removes the cargo in the warehouse after it has been delivered.
11 | * @param currentScreenClass where the cargo is first used with Shuttle
12 | * @param nextScreenClass the screen where app is navigating to next
13 | * @param cargoId denotes the cargo to remove
14 | */
15 | fun removeCargoAfterDelivery(currentScreenClass: Class<*>, nextScreenClass: Class<*>, cargoId: String)
16 | }
17 |
--------------------------------------------------------------------------------
/framework/src/main/java/com/grarcht/shuttle/framework/validator/ShuttleServiceMessageValidator.kt:
--------------------------------------------------------------------------------
1 | package com.grarcht.shuttle.framework.validator
2 |
3 | import android.os.Bundle
4 | import android.os.Message
5 | import com.grarcht.shuttle.framework.CARGO_ID_KEY
6 | import com.grarcht.shuttle.framework.NO_CARGO_ID
7 |
8 | /**
9 | * Validates data.
10 | */
11 | class ShuttleServiceMessageValidator : ShuttleValidator {
12 | /**
13 | * Validates the [data].
14 | * @param data to validate
15 | *
16 | * @return true if the data is valid.
17 | */
18 | override fun validate(data: Message): Boolean {
19 | val dataBundle: Bundle? = data.data
20 | return if (dataBundle != null) {
21 | val cargoId = dataBundle.getString(CARGO_ID_KEY, NO_CARGO_ID)
22 | cargoId != NO_CARGO_ID
23 | } else {
24 | false
25 | }
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/framework/src/main/java/com/grarcht/shuttle/framework/validator/ShuttleValidator.kt:
--------------------------------------------------------------------------------
1 | package com.grarcht.shuttle.framework.validator
2 |
3 | /**
4 | * Validates data.
5 | */
6 | interface ShuttleValidator {
7 |
8 | /**
9 | * Validates the [data].
10 | * @param data to validate
11 | *
12 | * @return true if the data is valid.
13 | */
14 | fun validate(data: D): Boolean
15 | }
16 |
--------------------------------------------------------------------------------
/framework/src/main/java/com/grarcht/shuttle/framework/visibility/ShuttleVisibilityData.kt:
--------------------------------------------------------------------------------
1 | package com.grarcht.shuttle.framework.visibility
2 |
3 | /**
4 | * The root type for visibility data, such as errors, information, and more. It is
5 | * used to provide visibility into customer experiences, such as errors and more.
6 | */
7 | interface ShuttleVisibilityData
8 |
--------------------------------------------------------------------------------
/framework/src/main/java/com/grarcht/shuttle/framework/visibility/ShuttleVisibilityReporter.kt:
--------------------------------------------------------------------------------
1 | package com.grarcht.shuttle.framework.visibility
2 |
3 | /**
4 | * Responsible for reporting data for visibility.
5 | */
6 | interface ShuttleVisibilityReporter {
7 |
8 | /**
9 | * Reports data for visibility.
10 | *
11 | * @param visibilityData
12 | */
13 | fun reportForVisibilityWith(visibilityData: D)
14 | }
15 |
--------------------------------------------------------------------------------
/framework/src/main/java/com/grarcht/shuttle/framework/visibility/error/ShuttleDefaultError.kt:
--------------------------------------------------------------------------------
1 | package com.grarcht.shuttle.framework.visibility.error
2 |
3 | /**
4 | * The default error type for errors that occur during customer journeys.
5 | */
6 | interface ShuttleDefaultError : ShuttleError {
7 |
8 | /**
9 | * @param context provides context into the error. Do NOT use
10 | * the Android context in string format. This needs to be a
11 | * human-readable string for obfuscated apps.
12 | *
13 | * @param errorMessage the message for the error
14 | *
15 | * @param error the observed error
16 | */
17 | data class ObservedError(
18 | val context: String,
19 | val errorMessage: String = "",
20 | val error: Throwable
21 | ) : ShuttleDefaultError
22 | }
23 |
--------------------------------------------------------------------------------
/framework/src/main/java/com/grarcht/shuttle/framework/visibility/error/ShuttleError.kt:
--------------------------------------------------------------------------------
1 | package com.grarcht.shuttle.framework.visibility.error
2 |
3 | import com.grarcht.shuttle.framework.visibility.ShuttleVisibilityData
4 |
5 | /**
6 | * The error visibility data type. It is used to provide visibility into errors
7 | * that occur during customer journeys.
8 | */
9 | interface ShuttleError : ShuttleVisibilityData
10 |
--------------------------------------------------------------------------------
/framework/src/main/java/com/grarcht/shuttle/framework/visibility/information/ShuttleVisibilityFeedback.kt:
--------------------------------------------------------------------------------
1 | package com.grarcht.shuttle.framework.visibility.information
2 |
3 | import com.grarcht.shuttle.framework.visibility.ShuttleVisibilityData
4 |
5 | interface ShuttleVisibilityFeedback : ShuttleVisibilityData {
6 | /**
7 | * Represents errors that occur when connecting to a service.
8 | *
9 | * @param context provides context into the error. Do NOT use
10 | * the Android context in string format. This needs to be a
11 | * human-readable string for obfuscated apps.
12 | *
13 | * @param data useful data for visibility
14 | *
15 | * @param message an informational message
16 | */
17 | data class Information(
18 | val context: String,
19 | val data: D? = null,
20 | val message: String = ""
21 | ) : ShuttleVisibilityFeedback
22 | }
23 |
--------------------------------------------------------------------------------
/framework/src/test/java/com/grarcht/shuttle/framework/Cargo.kt:
--------------------------------------------------------------------------------
1 | package com.grarcht.shuttle.framework
2 |
3 | import java.io.Serializable
4 |
5 | data class Cargo(val cargoId: String, val numberOfBoxes: Int) : Serializable {
6 | companion object {
7 | private const val serialVersionUID: Long = -53
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/framework/src/test/java/com/grarcht/shuttle/framework/bundle/PaintColor.kt:
--------------------------------------------------------------------------------
1 | package com.grarcht.shuttle.framework.bundle
2 |
3 | import java.io.Serializable
4 |
5 | class PaintColor(val color: String?) : Serializable {
6 | companion object {
7 | private const val serialVersionUID: Long = -84
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/framework/src/test/java/com/grarcht/shuttle/framework/coroutines/CompositeDisposableHandle.kt:
--------------------------------------------------------------------------------
1 | package com.grarcht.shuttle.framework.coroutines
2 |
3 | import kotlinx.coroutines.DisposableHandle
4 |
5 | class CompositeDisposableHandle {
6 | private val disposables = mutableListOf()
7 |
8 | fun add(disposable: DisposableHandle) {
9 | if (disposables.contains(disposable).not()) {
10 | disposables.add(disposable)
11 | }
12 | }
13 |
14 | fun dispose() {
15 | disposables.forEach { disposable ->
16 | disposable.dispose()
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/framework/src/test/java/com/grarcht/shuttle/framework/coroutines/CompositeDisposableHandleKtx.kt:
--------------------------------------------------------------------------------
1 | package com.grarcht.shuttle.framework.coroutines
2 |
3 | import kotlinx.coroutines.DisposableHandle
4 |
5 | fun DisposableHandle?.addForDisposal(compositeDisposable: CompositeDisposableHandle?) {
6 | this?.let {
7 | compositeDisposable?.add(it)
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/framework/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker:
--------------------------------------------------------------------------------
1 | mock-maker-inline
--------------------------------------------------------------------------------
/gradle/ext.gradle:
--------------------------------------------------------------------------------
1 | ext {
2 | obfuscationRulesDesp = [
3 | optimize: 'proguard-android-optimize.txt',
4 | module : 'proguard-rules.pro'
5 | ]
6 | }
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Wed May 15 09:35:23 PDT 2024
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.1-all.zip
7 |
--------------------------------------------------------------------------------
/media/screenshots/loaded_image_cargo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/media/screenshots/loaded_image_cargo.png
--------------------------------------------------------------------------------
/media/screenshots/loading_image_cargo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/media/screenshots/loading_image_cargo.png
--------------------------------------------------------------------------------
/media/screenshots/loading_image_cargo_failed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/media/screenshots/loading_image_cargo_failed.png
--------------------------------------------------------------------------------
/media/screenshots/main_menu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/media/screenshots/main_menu.png
--------------------------------------------------------------------------------
/media/videos/app_crash.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/media/videos/app_crash.gif
--------------------------------------------------------------------------------
/media/videos/loaded_image_cargo.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/media/videos/loaded_image_cargo.gif
--------------------------------------------------------------------------------
/modeling/Context.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/modeling/Context.png
--------------------------------------------------------------------------------
/modeling/Module Dependencies.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/modeling/Module Dependencies.PNG
--------------------------------------------------------------------------------
/shuttle_header.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/shuttle_header.png
--------------------------------------------------------------------------------
/shuttle_thumbnail.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/shuttle_thumbnail.png
--------------------------------------------------------------------------------
/solution-builder/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/solution-builder/consumer-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/grarcht/Shuttle/c8d19cab6fa6f758400c9b8018b65b6f52e892ef/solution-builder/consumer-rules.pro
--------------------------------------------------------------------------------
/solution-builder/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/solution-builder/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------