├── .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 | 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 | 6 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 12 | 13 | 14 | 15 | 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 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /demos/core/documentation/kotlin/images/arrow_down.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /demos/core/documentation/kotlin/images/copy-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /demos/core/documentation/kotlin/images/copy-successful-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /demos/core/documentation/kotlin/images/footer-go-to-link.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /demos/core/documentation/kotlin/images/go-to-top-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /demos/core/documentation/kotlin/images/logo-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /demos/core/documentation/kotlin/images/nav-icons/class-kotlin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /demos/core/documentation/kotlin/images/nav-icons/class.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /demos/core/documentation/kotlin/images/nav-icons/enum-kotlin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /demos/core/documentation/kotlin/images/nav-icons/enum.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /demos/core/documentation/kotlin/images/nav-icons/exception-class.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /demos/core/documentation/kotlin/images/nav-icons/field-value.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /demos/core/documentation/kotlin/images/nav-icons/field-variable.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /demos/core/documentation/kotlin/images/nav-icons/interface-kotlin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /demos/core/documentation/kotlin/images/nav-icons/interface.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /demos/core/documentation/kotlin/images/nav-icons/object.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /demos/core/documentation/kotlin/images/theme-toggle.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /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 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /demos/mvc/documentation/kotlin/images/arrow_down.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /demos/mvc/documentation/kotlin/images/copy-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /demos/mvc/documentation/kotlin/images/copy-successful-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /demos/mvc/documentation/kotlin/images/footer-go-to-link.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /demos/mvc/documentation/kotlin/images/go-to-top-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /demos/mvc/documentation/kotlin/images/logo-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /demos/mvc/documentation/kotlin/images/nav-icons/class-kotlin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /demos/mvc/documentation/kotlin/images/nav-icons/class.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /demos/mvc/documentation/kotlin/images/nav-icons/enum-kotlin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /demos/mvc/documentation/kotlin/images/nav-icons/enum.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /demos/mvc/documentation/kotlin/images/nav-icons/exception-class.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /demos/mvc/documentation/kotlin/images/nav-icons/field-value.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /demos/mvc/documentation/kotlin/images/nav-icons/field-variable.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /demos/mvc/documentation/kotlin/images/nav-icons/interface-kotlin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /demos/mvc/documentation/kotlin/images/nav-icons/interface.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /demos/mvc/documentation/kotlin/images/nav-icons/object.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /demos/mvc/documentation/kotlin/images/theme-toggle.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /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 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /demos/mvvm-with-a-service/documentation/kotlin/images/arrow_down.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /demos/mvvm-with-a-service/documentation/kotlin/images/copy-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /demos/mvvm-with-a-service/documentation/kotlin/images/copy-successful-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /demos/mvvm-with-a-service/documentation/kotlin/images/footer-go-to-link.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /demos/mvvm-with-a-service/documentation/kotlin/images/go-to-top-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /demos/mvvm-with-a-service/documentation/kotlin/images/logo-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /demos/mvvm-with-a-service/documentation/kotlin/images/nav-icons/class-kotlin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /demos/mvvm-with-a-service/documentation/kotlin/images/nav-icons/class.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /demos/mvvm-with-a-service/documentation/kotlin/images/nav-icons/enum-kotlin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /demos/mvvm-with-a-service/documentation/kotlin/images/nav-icons/enum.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /demos/mvvm-with-a-service/documentation/kotlin/images/nav-icons/exception-class.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /demos/mvvm-with-a-service/documentation/kotlin/images/nav-icons/field-value.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /demos/mvvm-with-a-service/documentation/kotlin/images/nav-icons/field-variable.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /demos/mvvm-with-a-service/documentation/kotlin/images/nav-icons/interface-kotlin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /demos/mvvm-with-a-service/documentation/kotlin/images/nav-icons/interface.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /demos/mvvm-with-a-service/documentation/kotlin/images/nav-icons/object.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /demos/mvvm-with-a-service/documentation/kotlin/images/theme-toggle.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /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 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /demos/mvvm-with-compose/documentation/kotlin/images/arrow_down.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /demos/mvvm-with-compose/documentation/kotlin/images/copy-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /demos/mvvm-with-compose/documentation/kotlin/images/copy-successful-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /demos/mvvm-with-compose/documentation/kotlin/images/footer-go-to-link.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /demos/mvvm-with-compose/documentation/kotlin/images/go-to-top-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /demos/mvvm-with-compose/documentation/kotlin/images/logo-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /demos/mvvm-with-compose/documentation/kotlin/images/nav-icons/class-kotlin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /demos/mvvm-with-compose/documentation/kotlin/images/nav-icons/class.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /demos/mvvm-with-compose/documentation/kotlin/images/nav-icons/enum-kotlin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /demos/mvvm-with-compose/documentation/kotlin/images/nav-icons/enum.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /demos/mvvm-with-compose/documentation/kotlin/images/nav-icons/exception-class.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /demos/mvvm-with-compose/documentation/kotlin/images/nav-icons/field-value.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /demos/mvvm-with-compose/documentation/kotlin/images/nav-icons/field-variable.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /demos/mvvm-with-compose/documentation/kotlin/images/nav-icons/interface-kotlin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /demos/mvvm-with-compose/documentation/kotlin/images/nav-icons/interface.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /demos/mvvm-with-compose/documentation/kotlin/images/nav-icons/object.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /demos/mvvm-with-compose/documentation/kotlin/images/theme-toggle.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /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 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /demos/mvvm-with-navigation/documentation/kotlin/images/arrow_down.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /demos/mvvm-with-navigation/documentation/kotlin/images/copy-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /demos/mvvm-with-navigation/documentation/kotlin/images/copy-successful-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /demos/mvvm-with-navigation/documentation/kotlin/images/footer-go-to-link.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /demos/mvvm-with-navigation/documentation/kotlin/images/go-to-top-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /demos/mvvm-with-navigation/documentation/kotlin/images/logo-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /demos/mvvm-with-navigation/documentation/kotlin/images/nav-icons/class-kotlin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /demos/mvvm-with-navigation/documentation/kotlin/images/nav-icons/class.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /demos/mvvm-with-navigation/documentation/kotlin/images/nav-icons/enum-kotlin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /demos/mvvm-with-navigation/documentation/kotlin/images/nav-icons/enum.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /demos/mvvm-with-navigation/documentation/kotlin/images/nav-icons/exception-class.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /demos/mvvm-with-navigation/documentation/kotlin/images/nav-icons/field-value.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /demos/mvvm-with-navigation/documentation/kotlin/images/nav-icons/field-variable.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /demos/mvvm-with-navigation/documentation/kotlin/images/nav-icons/interface-kotlin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /demos/mvvm-with-navigation/documentation/kotlin/images/nav-icons/interface.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /demos/mvvm-with-navigation/documentation/kotlin/images/nav-icons/object.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /demos/mvvm-with-navigation/documentation/kotlin/images/theme-toggle.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /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 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /demos/mvvm/documentation/kotlin/images/arrow_down.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /demos/mvvm/documentation/kotlin/images/copy-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /demos/mvvm/documentation/kotlin/images/copy-successful-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /demos/mvvm/documentation/kotlin/images/footer-go-to-link.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /demos/mvvm/documentation/kotlin/images/go-to-top-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /demos/mvvm/documentation/kotlin/images/logo-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /demos/mvvm/documentation/kotlin/images/nav-icons/class-kotlin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /demos/mvvm/documentation/kotlin/images/nav-icons/class.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /demos/mvvm/documentation/kotlin/images/nav-icons/enum-kotlin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /demos/mvvm/documentation/kotlin/images/nav-icons/enum.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /demos/mvvm/documentation/kotlin/images/nav-icons/exception-class.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /demos/mvvm/documentation/kotlin/images/nav-icons/field-value.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /demos/mvvm/documentation/kotlin/images/nav-icons/field-variable.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /demos/mvvm/documentation/kotlin/images/nav-icons/interface-kotlin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /demos/mvvm/documentation/kotlin/images/nav-icons/interface.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /demos/mvvm/documentation/kotlin/images/nav-icons/object.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /demos/mvvm/documentation/kotlin/images/theme-toggle.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /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 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /framework-addons/navigation-component/documentation/kotlin/images/arrow_down.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /framework-addons/navigation-component/documentation/kotlin/images/copy-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /framework-addons/navigation-component/documentation/kotlin/images/copy-successful-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /framework-addons/navigation-component/documentation/kotlin/images/footer-go-to-link.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /framework-addons/navigation-component/documentation/kotlin/images/go-to-top-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /framework-addons/navigation-component/documentation/kotlin/images/logo-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /framework-addons/navigation-component/documentation/kotlin/images/nav-icons/class-kotlin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /framework-addons/navigation-component/documentation/kotlin/images/nav-icons/class.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /framework-addons/navigation-component/documentation/kotlin/images/nav-icons/enum-kotlin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /framework-addons/navigation-component/documentation/kotlin/images/nav-icons/enum.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /framework-addons/navigation-component/documentation/kotlin/images/nav-icons/exception-class.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /framework-addons/navigation-component/documentation/kotlin/images/nav-icons/field-value.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /framework-addons/navigation-component/documentation/kotlin/images/nav-icons/field-variable.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /framework-addons/navigation-component/documentation/kotlin/images/nav-icons/interface-kotlin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /framework-addons/navigation-component/documentation/kotlin/images/nav-icons/interface.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /framework-addons/navigation-component/documentation/kotlin/images/nav-icons/object.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /framework-addons/navigation-component/documentation/kotlin/images/theme-toggle.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /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 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /framework-integrations-extensions/room/documentation/kotlin/images/arrow_down.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /framework-integrations-extensions/room/documentation/kotlin/images/copy-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /framework-integrations-extensions/room/documentation/kotlin/images/copy-successful-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /framework-integrations-extensions/room/documentation/kotlin/images/footer-go-to-link.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /framework-integrations-extensions/room/documentation/kotlin/images/go-to-top-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /framework-integrations-extensions/room/documentation/kotlin/images/logo-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /framework-integrations-extensions/room/documentation/kotlin/images/nav-icons/class-kotlin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /framework-integrations-extensions/room/documentation/kotlin/images/nav-icons/enum-kotlin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /framework-integrations-extensions/room/documentation/kotlin/images/nav-icons/enum.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /framework-integrations-extensions/room/documentation/kotlin/images/nav-icons/exception-class.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /framework-integrations-extensions/room/documentation/kotlin/images/nav-icons/field-value.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /framework-integrations-extensions/room/documentation/kotlin/images/nav-icons/field-variable.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /framework-integrations-extensions/room/documentation/kotlin/images/nav-icons/interface-kotlin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /framework-integrations-extensions/room/documentation/kotlin/images/nav-icons/interface.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /framework-integrations-extensions/room/documentation/kotlin/images/nav-icons/object.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /framework-integrations-extensions/room/documentation/kotlin/images/theme-toggle.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /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 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /framework-integrations/persistence/documentation/kotlin/images/arrow_down.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /framework-integrations/persistence/documentation/kotlin/images/copy-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /framework-integrations/persistence/documentation/kotlin/images/copy-successful-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /framework-integrations/persistence/documentation/kotlin/images/footer-go-to-link.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /framework-integrations/persistence/documentation/kotlin/images/go-to-top-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /framework-integrations/persistence/documentation/kotlin/images/logo-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /framework-integrations/persistence/documentation/kotlin/images/nav-icons/class-kotlin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /framework-integrations/persistence/documentation/kotlin/images/nav-icons/class.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /framework-integrations/persistence/documentation/kotlin/images/nav-icons/enum-kotlin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /framework-integrations/persistence/documentation/kotlin/images/nav-icons/enum.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /framework-integrations/persistence/documentation/kotlin/images/nav-icons/exception-class.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /framework-integrations/persistence/documentation/kotlin/images/nav-icons/field-value.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /framework-integrations/persistence/documentation/kotlin/images/nav-icons/field-variable.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /framework-integrations/persistence/documentation/kotlin/images/nav-icons/interface-kotlin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /framework-integrations/persistence/documentation/kotlin/images/nav-icons/interface.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /framework-integrations/persistence/documentation/kotlin/images/nav-icons/object.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /framework-integrations/persistence/documentation/kotlin/images/theme-toggle.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /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 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /framework/documentation/kotlin/images/arrow_down.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /framework/documentation/kotlin/images/copy-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /framework/documentation/kotlin/images/copy-successful-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /framework/documentation/kotlin/images/footer-go-to-link.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /framework/documentation/kotlin/images/go-to-top-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /framework/documentation/kotlin/images/logo-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /framework/documentation/kotlin/images/nav-icons/class-kotlin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /framework/documentation/kotlin/images/nav-icons/class.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /framework/documentation/kotlin/images/nav-icons/enum-kotlin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /framework/documentation/kotlin/images/nav-icons/enum.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /framework/documentation/kotlin/images/nav-icons/exception-class.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /framework/documentation/kotlin/images/nav-icons/field-value.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /framework/documentation/kotlin/images/nav-icons/field-variable.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /framework/documentation/kotlin/images/nav-icons/interface-kotlin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /framework/documentation/kotlin/images/nav-icons/interface.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /framework/documentation/kotlin/images/nav-icons/object.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /framework/documentation/kotlin/images/theme-toggle.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /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 | --------------------------------------------------------------------------------