gitextract_os7hyq2r/ ├── .github/ │ ├── PULL_REQUEST_TEMPLATE.md │ └── workflows/ │ └── android.yml ├── .gitignore ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE.txt ├── README.md ├── RELEASING.md ├── build.gradle.kts ├── config/ │ ├── lint/ │ │ └── lint.xml │ └── spotless/ │ ├── copyright.java │ └── copyright.kt ├── conventions/ │ ├── build.gradle.kts │ ├── settings.gradle.kts │ └── src/ │ └── main/ │ └── kotlin/ │ ├── Extensions.kt │ ├── ribs.android.application.errorprone.gradle.kts │ ├── ribs.android.application.gradle.kts │ ├── ribs.android.library.gradle.kts │ ├── ribs.kotlin.library.gradle.kts │ └── ribs.spotless.gradle.kts ├── demos/ │ ├── compose/ │ │ ├── README.md │ │ ├── build.gradle.kts │ │ └── src/ │ │ └── main/ │ │ ├── AndroidManifest.xml │ │ ├── kotlin/ │ │ │ └── com/ │ │ │ └── uber/ │ │ │ └── rib/ │ │ │ └── compose/ │ │ │ ├── ComposeApplication.kt │ │ │ ├── root/ │ │ │ │ ├── RootActivity.kt │ │ │ │ ├── RootInteractor.kt │ │ │ │ ├── RootRouter.kt │ │ │ │ ├── RootScope.kt │ │ │ │ ├── RootView.kt │ │ │ │ └── main/ │ │ │ │ ├── AuthStream.kt │ │ │ │ ├── MainInteractor.kt │ │ │ │ ├── MainRouter.kt │ │ │ │ ├── MainScope.kt │ │ │ │ ├── MainView.kt │ │ │ │ ├── loggedin/ │ │ │ │ │ ├── LoggedInEvent.kt │ │ │ │ │ ├── LoggedInInteractor.kt │ │ │ │ │ ├── LoggedInRouter.kt │ │ │ │ │ ├── LoggedInScope.kt │ │ │ │ │ ├── LoggedInView.kt │ │ │ │ │ ├── ScoreStream.kt │ │ │ │ │ ├── offgame/ │ │ │ │ │ │ ├── OffGameEvent.kt │ │ │ │ │ │ ├── OffGameInteractor.kt │ │ │ │ │ │ ├── OffGameRouter.kt │ │ │ │ │ │ ├── OffGameScope.kt │ │ │ │ │ │ ├── OffGameView.kt │ │ │ │ │ │ └── OffGameViewModel.kt │ │ │ │ │ └── tictactoe/ │ │ │ │ │ ├── Board.kt │ │ │ │ │ ├── BoardCoordinate.kt │ │ │ │ │ ├── TicTacToeEvent.kt │ │ │ │ │ ├── TicTacToeInteractor.kt │ │ │ │ │ ├── TicTacToeRouter.kt │ │ │ │ │ ├── TicTacToeScope.kt │ │ │ │ │ ├── TicTacToeView.kt │ │ │ │ │ └── TicTacToeViewModel.kt │ │ │ │ └── loggedout/ │ │ │ │ ├── LoggedOutEvent.kt │ │ │ │ ├── LoggedOutInteractor.kt │ │ │ │ ├── LoggedOutRouter.kt │ │ │ │ ├── LoggedOutScope.kt │ │ │ │ ├── LoggedOutView.kt │ │ │ │ └── LoggedOutViewModel.kt │ │ │ └── util/ │ │ │ ├── AnalyticsClient.kt │ │ │ ├── CustomButton.kt │ │ │ ├── CustomClientProvider.kt │ │ │ ├── EventStream.kt │ │ │ ├── ExperimentClient.kt │ │ │ ├── LoggerClient.kt │ │ │ └── StateStream.kt │ │ └── res/ │ │ ├── drawable/ │ │ │ └── ic_launcher_background.xml │ │ ├── drawable-v24/ │ │ │ └── ic_launcher_foreground.xml │ │ ├── mipmap-anydpi-v26/ │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ └── values/ │ │ ├── ids.xml │ │ ├── strings.xml │ │ └── themes.xml │ ├── flipper/ │ │ ├── README.md │ │ ├── build.gradle.kts │ │ └── src/ │ │ └── main/ │ │ ├── AndroidManifest.xml │ │ ├── java/ │ │ │ └── com/ │ │ │ └── uber/ │ │ │ └── rib/ │ │ │ ├── RootActivity.java │ │ │ ├── SampleApplication.java │ │ │ └── root/ │ │ │ ├── RootBuilder.java │ │ │ ├── RootInteractor.java │ │ │ ├── RootRouter.java │ │ │ ├── RootView.java │ │ │ ├── loggedin/ │ │ │ │ ├── LoggedInBuilder.java │ │ │ │ ├── LoggedInInteractor.java │ │ │ │ ├── LoggedInRouter.java │ │ │ │ ├── offgame/ │ │ │ │ │ ├── OffGameBuilder.java │ │ │ │ │ ├── OffGameInteractor.java │ │ │ │ │ ├── OffGameRouter.java │ │ │ │ │ └── OffGameView.java │ │ │ │ └── tictactoe/ │ │ │ │ ├── Board.java │ │ │ │ ├── BoardCoordinate.java │ │ │ │ ├── TicTacToeBuilder.java │ │ │ │ ├── TicTacToeInteractor.java │ │ │ │ ├── TicTacToeRouter.java │ │ │ │ └── TicTacToeView.java │ │ │ └── loggedout/ │ │ │ ├── LoggedOutBuilder.java │ │ │ ├── LoggedOutInteractor.java │ │ │ ├── LoggedOutRouter.java │ │ │ └── LoggedOutView.java │ │ └── res/ │ │ ├── layout/ │ │ │ ├── logged_out_rib.xml │ │ │ ├── off_game_rib.xml │ │ │ ├── root_rib.xml │ │ │ └── tic_tac_toe_rib.xml │ │ └── values/ │ │ └── ub__strings.xml │ ├── intellij/ │ │ ├── README.md │ │ ├── build.gradle.kts │ │ └── src/ │ │ └── main/ │ │ ├── AndroidManifest.xml │ │ ├── java/ │ │ │ └── com/ │ │ │ └── uber/ │ │ │ └── rib/ │ │ │ ├── RootActivity.java │ │ │ ├── SampleApplication.java │ │ │ └── root/ │ │ │ ├── RootBuilder.java │ │ │ ├── RootInteractor.java │ │ │ ├── RootRouter.java │ │ │ ├── RootView.java │ │ │ ├── loggedin/ │ │ │ │ ├── LoggedInBuilder.java │ │ │ │ ├── LoggedInInteractor.java │ │ │ │ ├── LoggedInRouter.java │ │ │ │ ├── offgame/ │ │ │ │ │ ├── OffGameBuilder.java │ │ │ │ │ ├── OffGameInteractor.java │ │ │ │ │ ├── OffGameRouter.java │ │ │ │ │ └── OffGameView.java │ │ │ │ └── tictactoe/ │ │ │ │ ├── Board.java │ │ │ │ ├── BoardCoordinate.java │ │ │ │ ├── TicTacToeBuilder.java │ │ │ │ ├── TicTacToeInteractor.java │ │ │ │ ├── TicTacToeRouter.java │ │ │ │ └── TicTacToeView.java │ │ │ └── loggedout/ │ │ │ ├── LoggedOutBuilder.java │ │ │ ├── LoggedOutInteractor.java │ │ │ ├── LoggedOutRouter.java │ │ │ └── LoggedOutView.java │ │ └── res/ │ │ ├── layout/ │ │ │ ├── logged_out_rib.xml │ │ │ ├── off_game_rib.xml │ │ │ ├── root_rib.xml │ │ │ └── tic_tac_toe_rib.xml │ │ └── values/ │ │ └── ub__strings.xml │ ├── memory-leaks/ │ │ ├── README.md │ │ ├── build.gradle.kts │ │ └── src/ │ │ └── main/ │ │ ├── AndroidManifest.xml │ │ ├── java/ │ │ │ └── com/ │ │ │ └── uber/ │ │ │ └── rib/ │ │ │ ├── RootActivity.java │ │ │ ├── SampleApplication.java │ │ │ └── root/ │ │ │ ├── RootBuilder.java │ │ │ ├── RootInteractor.java │ │ │ ├── RootRouter.java │ │ │ ├── RootView.java │ │ │ ├── loggedin/ │ │ │ │ ├── LoggedInBuilder.java │ │ │ │ ├── LoggedInInteractor.java │ │ │ │ └── LoggedInRouter.java │ │ │ └── loggedout/ │ │ │ ├── LoggedOutBuilder.java │ │ │ ├── LoggedOutInteractor.java │ │ │ ├── LoggedOutRouter.java │ │ │ └── LoggedOutView.java │ │ └── res/ │ │ ├── layout/ │ │ │ ├── logged_out_rib.xml │ │ │ └── root_rib.xml │ │ └── values/ │ │ └── ub__strings.xml │ └── rib-workers/ │ ├── README.md │ ├── build.gradle.kts │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ ├── kotlin/ │ │ └── com/ │ │ └── uber/ │ │ └── rib/ │ │ └── workers/ │ │ ├── ComposeApplication.kt │ │ ├── root/ │ │ │ ├── RootActivity.kt │ │ │ ├── RootInteractor.kt │ │ │ ├── RootRouter.kt │ │ │ ├── RootScope.kt │ │ │ ├── RootView.kt │ │ │ ├── logger/ │ │ │ │ └── ApplicationLevelWorkerLogger.kt │ │ │ └── main/ │ │ │ ├── MainInteractor.kt │ │ │ ├── MainRouter.kt │ │ │ ├── MainScope.kt │ │ │ ├── MainView.kt │ │ │ ├── ribworkerselection/ │ │ │ │ ├── RibWorkerBindTypeClickType.kt │ │ │ │ ├── RibWorkerSelectionInteractor.kt │ │ │ │ ├── RibWorkerSelectionRouter.kt │ │ │ │ ├── RibWorkerSelectionScope.kt │ │ │ │ ├── RibWorkerSelectionView.kt │ │ │ │ └── RibWorkerSelectionViewModel.kt │ │ │ └── workers/ │ │ │ ├── BackgroundWorker.kt │ │ │ ├── DefaultRibCoroutineWorker.kt │ │ │ ├── DefaultWorker.kt │ │ │ ├── IoWorker.kt │ │ │ └── UiWorker.kt │ │ └── util/ │ │ ├── EventStream.kt │ │ └── StateStream.kt │ └── res/ │ ├── drawable/ │ │ └── ic_launcher_background.xml │ ├── drawable-v24/ │ │ └── ic_launcher_foreground.xml │ ├── mipmap-anydpi-v26/ │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.xml │ └── values/ │ ├── strings.xml │ └── themes.xml ├── gradle/ │ ├── app-libs.versions.toml │ ├── japicmp.gradle │ ├── libs.versions.toml │ ├── test-libs.versions.toml │ └── wrapper/ │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradle.properties ├── gradlew ├── gradlew.bat ├── libraries/ │ ├── rib-android/ │ │ ├── build.gradle.kts │ │ ├── gradle.properties │ │ └── src/ │ │ ├── main/ │ │ │ └── kotlin/ │ │ │ └── com/ │ │ │ └── uber/ │ │ │ └── rib/ │ │ │ └── core/ │ │ │ ├── ActivityContext.kt │ │ │ ├── ActivityStarter.kt │ │ │ ├── BasicViewRouter.kt │ │ │ ├── IntentCreator.kt │ │ │ ├── IntentCreatorImpl.kt │ │ │ ├── IntentFactory.kt │ │ │ ├── RibActivity.kt │ │ │ ├── RibDebugOverlay.kt │ │ │ ├── RxActivityEvents.kt │ │ │ ├── ViewBuilder.kt │ │ │ ├── ViewPresenter.kt │ │ │ ├── ViewRouter.kt │ │ │ ├── XRay.kt │ │ │ └── lifecycle/ │ │ │ ├── ActivityCallbackEvent.kt │ │ │ ├── ActivityEvent.kt │ │ │ └── ActivityLifecycleEvent.kt │ │ └── test/ │ │ ├── kotlin/ │ │ │ └── com/ │ │ │ └── uber/ │ │ │ └── rib/ │ │ │ └── core/ │ │ │ ├── BundleTest.kt │ │ │ ├── RibActivityTest.kt │ │ │ ├── ViewBuilderTest.kt │ │ │ └── XRayTest.kt │ │ └── resources/ │ │ └── robolectric.properties │ ├── rib-android-compose/ │ │ ├── build.gradle.kts │ │ ├── gradle.properties │ │ └── src/ │ │ └── main/ │ │ └── kotlin/ │ │ └── com/ │ │ └── uber/ │ │ └── rib/ │ │ └── core/ │ │ ├── BasicComposeRouter.kt │ │ └── ComposePresenter.kt │ ├── rib-android-core/ │ │ ├── build.gradle.kts │ │ ├── gradle.properties │ │ └── src/ │ │ ├── main/ │ │ │ └── kotlin/ │ │ │ └── com/ │ │ │ └── uber/ │ │ │ └── rib/ │ │ │ └── core/ │ │ │ ├── ActivityDelegate.kt │ │ │ ├── CoreAppCompatActivity.kt │ │ │ └── HasActivityDelegate.kt │ │ └── test/ │ │ └── resources/ │ │ └── robolectric.properties │ ├── rib-base/ │ │ ├── README.md │ │ ├── build.gradle.kts │ │ ├── gradle.properties │ │ └── src/ │ │ ├── main/ │ │ │ └── kotlin/ │ │ │ └── com/ │ │ │ └── uber/ │ │ │ └── rib/ │ │ │ └── core/ │ │ │ ├── BasicInteractor.kt │ │ │ ├── BasicRouter.kt │ │ │ ├── Builder.kt │ │ │ ├── Bundle.kt │ │ │ ├── EmptyPresenter.kt │ │ │ ├── FlowAsScope.kt │ │ │ ├── Initializer.kt │ │ │ ├── Interactor.kt │ │ │ ├── InteractorAndViewModule.kt │ │ │ ├── InteractorBaseComponent.kt │ │ │ ├── InteractorComponent.kt │ │ │ ├── InteractorModule.kt │ │ │ ├── InteractorType.kt │ │ │ ├── LazyBackingProperty.kt │ │ │ ├── Presenter.kt │ │ │ ├── Rib.kt │ │ │ ├── RibBuilder.kt │ │ │ ├── RibCoroutineWorker.kt │ │ │ ├── RibEventType.kt │ │ │ ├── RibEvents.kt │ │ │ ├── RibInteractor.kt │ │ │ ├── RibRefWatcher.kt │ │ │ ├── RibRouterEvent.kt │ │ │ ├── Router.kt │ │ │ ├── Worker.kt │ │ │ ├── WorkerBinder.kt │ │ │ ├── WorkerScopeProvider.kt │ │ │ ├── WorkerUnbinder.kt │ │ │ ├── internal/ │ │ │ │ └── CoreFriendModuleApi.kt │ │ │ └── lifecycle/ │ │ │ ├── InteractorEvent.kt │ │ │ ├── PresenterEvent.kt │ │ │ └── WorkerEvent.kt │ │ └── test/ │ │ └── kotlin/ │ │ ├── android/ │ │ │ └── os/ │ │ │ ├── Bundle.kt │ │ │ └── Parcelable.kt │ │ └── com/ │ │ └── uber/ │ │ └── rib/ │ │ └── core/ │ │ ├── InteractorAndRouterTest.kt │ │ ├── LazyBackingPropertyTest.kt │ │ ├── RecordingObserver.kt │ │ ├── RibCoroutineWorkerTest.kt │ │ ├── RibEventsTest.kt │ │ ├── RibEventsUtils.kt │ │ ├── RibRefWatcherTest.kt │ │ ├── RouterTest.kt │ │ ├── WorkerBinderTest.kt │ │ ├── WorkerScopeProviderTest.kt │ │ └── WorkerTest.kt │ ├── rib-compiler-app/ │ │ ├── README.md │ │ ├── build.gradle.kts │ │ ├── gradle.properties │ │ └── src/ │ │ ├── main/ │ │ │ └── kotlin/ │ │ │ └── com/ │ │ │ └── uber/ │ │ │ └── rib/ │ │ │ └── compiler/ │ │ │ ├── AnnotatedClass.kt │ │ │ ├── AnnotationVerifier.kt │ │ │ ├── CompilerUtils.kt │ │ │ ├── Constants.kt │ │ │ ├── ErrorReporter.kt │ │ │ ├── Generator.kt │ │ │ ├── InteractorAnnotatedClass.kt │ │ │ ├── InteractorAnnotationVerifier.kt │ │ │ ├── ProcessContext.kt │ │ │ ├── ProcessorPipeline.kt │ │ │ ├── RibInteractorProcessorPipeline.kt │ │ │ ├── RibProcessor.kt │ │ │ ├── TypeProcessorPipeline.kt │ │ │ └── VerificationFailedException.kt │ │ └── test/ │ │ ├── kotlin/ │ │ │ └── com/ │ │ │ └── uber/ │ │ │ └── rib/ │ │ │ └── compiler/ │ │ │ ├── InteractorAnnotationVerifierTest.kt │ │ │ └── InteractorProcessorTestBase.kt │ │ └── resources/ │ │ └── fixtures/ │ │ ├── AnnotatedInteractor.java │ │ ├── AnnotatedInteractorNoSuffix.java │ │ ├── AnnotatedNonInteractor.java │ │ └── CustomConstructorInteractor.java │ ├── rib-compiler-test/ │ │ ├── README.md │ │ ├── build.gradle.kts │ │ ├── gradle.properties │ │ ├── libs/ │ │ │ └── tools.jar │ │ └── src/ │ │ ├── main/ │ │ │ └── kotlin/ │ │ │ └── com/ │ │ │ └── uber/ │ │ │ └── rib/ │ │ │ └── compiler/ │ │ │ ├── Constants.kt │ │ │ ├── InteractorTestGenerator.kt │ │ │ └── RibTestProcessor.kt │ │ └── test/ │ │ ├── kotlin/ │ │ │ └── com/ │ │ │ └── uber/ │ │ │ └── rib/ │ │ │ └── compiler/ │ │ │ ├── InteractorTestGeneratorProcessorTestBase.kt │ │ │ └── InteractorTestGeneratorTest.kt │ │ └── resources/ │ │ └── fixtures/ │ │ ├── AnnotatedBasicInteractor.java │ │ ├── AnnotatedInteractor.java │ │ ├── TestAnnotatedBasicInteractor.java │ │ ├── TestAnnotatedInteractor.java │ │ └── TestForcedBasicInteractor.java │ ├── rib-coroutines/ │ │ ├── README.md │ │ ├── build.gradle.kts │ │ ├── gradle.properties │ │ └── src/ │ │ ├── main/ │ │ │ └── kotlin/ │ │ │ └── com/ │ │ │ └── uber/ │ │ │ └── rib/ │ │ │ └── core/ │ │ │ ├── RibCoroutineScopes.kt │ │ │ ├── RibCoroutinesConfig.kt │ │ │ ├── RibDispatchers.kt │ │ │ └── internal/ │ │ │ └── CoroutinesFriendModuleApi.kt │ │ └── test/ │ │ └── kotlin/ │ │ └── com/ │ │ └── uber/ │ │ └── rib/ │ │ └── core/ │ │ └── RibCoroutineScopesTest.kt │ ├── rib-coroutines-test/ │ │ ├── README.md │ │ ├── build.gradle.kts │ │ ├── gradle.properties │ │ └── src/ │ │ ├── main/ │ │ │ └── kotlin/ │ │ │ └── com/ │ │ │ └── uber/ │ │ │ └── rib/ │ │ │ └── core/ │ │ │ ├── RibCoroutinesRule.kt │ │ │ ├── TestRibCoroutineScopes.kt │ │ │ └── TestRibDispatchers.kt │ │ └── test/ │ │ └── kotlin/ │ │ └── com/ │ │ └── uber/ │ │ └── rib/ │ │ └── core/ │ │ ├── RibCoroutinesRuleTest.kt │ │ ├── RibDispatchersTest.kt │ │ └── RibScopesTest.kt │ ├── rib-debug-utils/ │ │ ├── build.gradle.kts │ │ ├── gradle.properties │ │ └── src/ │ │ └── main/ │ │ └── kotlin/ │ │ └── com/ │ │ └── uber/ │ │ └── rib/ │ │ └── core/ │ │ └── RouterDebugUtils.kt │ ├── rib-router-navigator/ │ │ ├── README.md │ │ ├── build.gradle.kts │ │ ├── gradle.properties │ │ └── src/ │ │ ├── main/ │ │ │ └── kotlin/ │ │ │ └── com/ │ │ │ └── uber/ │ │ │ └── rib/ │ │ │ └── core/ │ │ │ ├── RouterAndState.kt │ │ │ ├── RouterNavigator.kt │ │ │ ├── RouterNavigatorEvent.kt │ │ │ ├── RouterNavigatorEventType.kt │ │ │ ├── RouterNavigatorEvents.kt │ │ │ ├── RouterNavigatorFactory.kt │ │ │ ├── RouterNavigatorState.kt │ │ │ └── StackRouterNavigator.kt │ │ └── test/ │ │ └── kotlin/ │ │ ├── com/ │ │ │ └── uber/ │ │ │ └── rib/ │ │ │ └── core/ │ │ │ ├── RouterAndStateTest.kt │ │ │ └── StackRouterNavigatorTest.kt │ │ └── os/ │ │ ├── Bundle.kt │ │ └── Parcelable.kt │ ├── rib-screen-stack-base/ │ │ ├── README.md │ │ ├── build.gradle.kts │ │ ├── gradle.properties │ │ └── src/ │ │ └── main/ │ │ └── kotlin/ │ │ └── com/ │ │ └── uber/ │ │ └── rib/ │ │ └── core/ │ │ └── screenstack/ │ │ ├── ScreenStackBase.kt │ │ ├── ViewProvider.kt │ │ └── lifecycle/ │ │ └── ScreenStackEvent.kt │ ├── rib-test/ │ │ ├── README.md │ │ ├── build.gradle.kts │ │ ├── gradle.properties │ │ └── src/ │ │ └── main/ │ │ └── kotlin/ │ │ └── com/ │ │ └── uber/ │ │ └── rib/ │ │ └── core/ │ │ ├── AndroidRecordingRx2Observer.kt │ │ ├── FakeComponent.kt │ │ ├── FakeInteractor.kt │ │ ├── FakePresenter.kt │ │ ├── FakeRouter.kt │ │ ├── FakeWorker.kt │ │ ├── InteractorHelper.kt │ │ ├── PresenterHelper.kt │ │ ├── RibTestBasePlaceholder.kt │ │ ├── RouterHelper.kt │ │ ├── TestRibCoroutineWorker.kt │ │ └── WorkerHelper.kt │ ├── rib-workflow/ │ │ ├── README.md │ │ ├── build.gradle.kts │ │ ├── gradle.properties │ │ └── src/ │ │ ├── main/ │ │ │ └── kotlin/ │ │ │ └── com/ │ │ │ └── uber/ │ │ │ └── rib/ │ │ │ └── workflow/ │ │ │ └── core/ │ │ │ ├── ActionableItem.kt │ │ │ ├── Step.kt │ │ │ ├── Workflow.kt │ │ │ └── internal/ │ │ │ └── WorkflowFriendModuleApi.kt │ │ └── test/ │ │ └── kotlin/ │ │ └── com/ │ │ └── uber/ │ │ └── rib/ │ │ └── workflow/ │ │ └── core/ │ │ ├── AndroidSchedulersRule.kt │ │ ├── DelegatingScheduler.kt │ │ ├── StepTest.kt │ │ └── WorkflowTest.kt │ └── rib-workflow-test/ │ ├── build.gradle.kts │ ├── gradle.properties │ └── src/ │ └── main/ │ └── kotlin/ │ └── com/ │ └── uber/ │ └── rib/ │ └── workflow/ │ └── core/ │ └── StepTester.kt ├── releasing.sh ├── settings.gradle ├── tooling/ │ ├── rib-flipper-plugin/ │ │ ├── README.md │ │ ├── build.gradle.kts │ │ ├── desktop/ │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ └── src/ │ │ │ ├── TreeChart.js │ │ │ ├── index.js │ │ │ └── utils.js │ │ ├── gradle.properties │ │ └── src/ │ │ └── main/ │ │ └── kotlin/ │ │ └── com/ │ │ └── uber/ │ │ └── rib/ │ │ └── flipper/ │ │ ├── RibEventPayload.kt │ │ ├── RibTreeMessageType.kt │ │ └── RibTreePlugin.kt │ ├── rib-intellij-plugin/ │ │ ├── README.md │ │ ├── build.gradle.kts │ │ ├── deploy/ │ │ │ └── rib-intellij-plugin.jar │ │ ├── gradle.properties │ │ ├── native/ │ │ │ ├── gradle.properties │ │ │ └── intellij-broadcast-rib/ │ │ │ ├── README.md │ │ │ ├── build.gradle.kts │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── uber/ │ │ │ └── debug/ │ │ │ └── broadcast/ │ │ │ └── rib/ │ │ │ ├── RibHierarchyDebugBroadcastHandler.java │ │ │ ├── RibHierarchyPayload.java │ │ │ ├── RibHierarchyUtils.java │ │ │ └── RibHierarchyWithSelectionPayload.java │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── uber/ │ │ │ │ └── presidio/ │ │ │ │ └── intellij_plugin/ │ │ │ │ ├── action/ │ │ │ │ │ └── rib/ │ │ │ │ │ ├── GenerateAction.java │ │ │ │ │ ├── GenerateRibAction.java │ │ │ │ │ ├── GenerateRibDialog.form │ │ │ │ │ ├── GenerateRibDialog.java │ │ │ │ │ └── Generators.java │ │ │ │ └── generator/ │ │ │ │ ├── Generator.java │ │ │ │ ├── GeneratorPair.java │ │ │ │ └── rib/ │ │ │ │ ├── BuilderGenerator.java │ │ │ │ ├── InteractorWithEmptyPresenterGenerator.java │ │ │ │ ├── InteractorWithEmptyPresenterTestGenerator.java │ │ │ │ ├── InteractorWithPresenterGenerator.java │ │ │ │ ├── InteractorWithPresenterTestGenerator.java │ │ │ │ ├── RouterGenerator.java │ │ │ │ ├── RouterTestGenerator.java │ │ │ │ ├── ViewBuilderGenerator.java │ │ │ │ ├── ViewGenerator.java │ │ │ │ ├── ViewRouterGenerator.java │ │ │ │ └── ViewRouterTestGenerator.java │ │ │ ├── kotlin/ │ │ │ │ └── com/ │ │ │ │ └── uber/ │ │ │ │ └── intellij/ │ │ │ │ └── plugin/ │ │ │ │ └── android/ │ │ │ │ └── rib/ │ │ │ │ ├── AndroidDeviceRepository.kt │ │ │ │ ├── AttachRibProjectServiceActivity.kt │ │ │ │ ├── CommandLineUtils.kt │ │ │ │ ├── RibHierarchyBrowser.kt │ │ │ │ ├── RibHierarchyPanel.kt │ │ │ │ ├── RibHierarchyUtils.kt │ │ │ │ ├── RibIcons.kt │ │ │ │ ├── RibProjectService.kt │ │ │ │ ├── RibViewBrowser.kt │ │ │ │ ├── io/ │ │ │ │ │ ├── AckRequest.kt │ │ │ │ │ ├── LogcatMessageDecoder.kt │ │ │ │ │ ├── LogcatRequestProcessor.kt │ │ │ │ │ ├── Request.kt │ │ │ │ │ ├── RequestProcessor.kt │ │ │ │ │ ├── Response.kt │ │ │ │ │ ├── RibHierarchyRequest.kt │ │ │ │ │ ├── RibHighlightRequest.kt │ │ │ │ │ └── RibLocateRequest.kt │ │ │ │ └── ui/ │ │ │ │ ├── HierarchyBrowserBase.kt │ │ │ │ ├── RibHierarchyActivityDescriptor.kt │ │ │ │ ├── RibHierarchyApplicationDescriptor.kt │ │ │ │ ├── RibHierarchyDescriptor.kt │ │ │ │ ├── RibHierarchyNodeDescriptor.kt │ │ │ │ ├── RibHierarchyRootNodeDescriptor.kt │ │ │ │ ├── RibHierarchyTreeStructure.kt │ │ │ │ ├── RibViewNodeDescriptor.kt │ │ │ │ └── RibViewRootNodeDescriptor.kt │ │ │ └── resources/ │ │ │ ├── META-INF/ │ │ │ │ └── plugin.xml │ │ │ ├── partials/ │ │ │ │ ├── ExampleInteractorTest.java.partial │ │ │ │ ├── ExampleRouterTest.java.partial │ │ │ │ ├── RibInteractorDidBecomeActive.java.partial │ │ │ │ └── RibInteractorWillResignActive.java.partial │ │ │ └── templates/ │ │ │ ├── java/ │ │ │ │ ├── RibBuilder.java.template │ │ │ │ ├── RibInteractorWithEmptyPresenter.java.template │ │ │ │ ├── RibInteractorWithEmptyPresenterTest.java.template │ │ │ │ ├── RibInteractorWithPresenter.java.template │ │ │ │ ├── RibInteractorWithPresenterTest.java.template │ │ │ │ ├── RibRouter.java.template │ │ │ │ ├── RibRouterTest.java.template │ │ │ │ ├── RibView.java.template │ │ │ │ ├── RibViewBuilder.java.template │ │ │ │ ├── RibViewRouter.java.template │ │ │ │ └── RibViewRouterTest.java.template │ │ │ └── kotlin/ │ │ │ ├── RibBuilder.kt.template │ │ │ ├── RibInteractorWithEmptyPresenter.kt.template │ │ │ ├── RibInteractorWithEmptyPresenterTest.kt.template │ │ │ ├── RibInteractorWithPresenter.kt.template │ │ │ ├── RibInteractorWithPresenterTest.kt.template │ │ │ ├── RibRouter.kt.template │ │ │ ├── RibRouterTest.kt.template │ │ │ ├── RibView.kt.template │ │ │ ├── RibViewBuilder.kt.template │ │ │ ├── RibViewRouter.kt.template │ │ │ └── RibViewRouterTest.kt.template │ │ └── test/ │ │ └── java/ │ │ └── com/ │ │ └── uber/ │ │ └── presidio/ │ │ └── intellij_plugin/ │ │ └── action/ │ │ └── rib/ │ │ └── RibGeneratorsTest.java │ └── utils/ │ └── intellij-broadcast-core/ │ ├── README.md │ ├── build.gradle.kts │ ├── gradle.properties │ └── src/ │ └── main/ │ └── java/ │ └── com/ │ └── uber/ │ └── debug/ │ └── broadcast/ │ └── core/ │ ├── AckDebugBroadcastHandler.java │ ├── DebugBroadcastReceiver.java │ ├── DebugBroadcastRequest.java │ └── DebugBroadcastResponse.java └── tutorials/ ├── tutorial1/ │ ├── README.md │ ├── build.gradle.kts │ └── src/ │ ├── main/ │ │ ├── AndroidManifest.xml │ │ ├── java/ │ │ │ └── com/ │ │ │ └── uber/ │ │ │ └── rib/ │ │ │ ├── RootActivity.java │ │ │ ├── SampleApplication.java │ │ │ └── root/ │ │ │ ├── RootBuilder.java │ │ │ ├── RootInteractor.java │ │ │ ├── RootRouter.java │ │ │ └── RootView.java │ │ └── res/ │ │ ├── layout/ │ │ │ └── root_rib.xml │ │ └── values/ │ │ └── ub__strings.xml │ └── test/ │ └── java/ │ └── com/ │ └── uber/ │ └── rib/ │ └── root/ │ ├── RootInteractorTest.java │ └── RootRouterTest.java ├── tutorial2/ │ ├── README.md │ ├── build.gradle.kts │ └── src/ │ ├── main/ │ │ ├── AndroidManifest.xml │ │ ├── java/ │ │ │ └── com/ │ │ │ └── uber/ │ │ │ └── rib/ │ │ │ ├── RootActivity.java │ │ │ ├── SampleApplication.java │ │ │ └── root/ │ │ │ ├── RootBuilder.java │ │ │ ├── RootInteractor.java │ │ │ ├── RootRouter.java │ │ │ ├── RootView.java │ │ │ ├── loggedin/ │ │ │ │ ├── offgame/ │ │ │ │ │ ├── OffGameBuilder.java │ │ │ │ │ ├── OffGameInteractor.java │ │ │ │ │ ├── OffGameRouter.java │ │ │ │ │ └── OffGameView.java │ │ │ │ └── tictactoe/ │ │ │ │ ├── Board.java │ │ │ │ ├── BoardCoordinate.java │ │ │ │ ├── TicTacToeBuilder.java │ │ │ │ ├── TicTacToeInteractor.java │ │ │ │ ├── TicTacToeRouter.java │ │ │ │ └── TicTacToeView.java │ │ │ └── loggedout/ │ │ │ ├── LoggedOutBuilder.java │ │ │ ├── LoggedOutInteractor.java │ │ │ ├── LoggedOutRouter.java │ │ │ └── LoggedOutView.java │ │ └── res/ │ │ ├── layout/ │ │ │ ├── logged_out_rib.xml │ │ │ ├── off_game_rib.xml │ │ │ ├── root_rib.xml │ │ │ └── tic_tac_toe_rib.xml │ │ └── values/ │ │ └── ub__strings.xml │ └── test/ │ └── java/ │ └── com/ │ └── uber/ │ └── rib/ │ └── root/ │ ├── RootInteractorTest.java │ ├── RootRouterTest.java │ └── loggedout/ │ ├── LoggedOutInteractorTest.java │ └── LoggedOutRouterTest.java ├── tutorial3/ │ ├── README.md │ ├── build.gradle.kts │ └── src/ │ ├── main/ │ │ ├── AndroidManifest.xml │ │ ├── java/ │ │ │ └── com/ │ │ │ └── uber/ │ │ │ └── rib/ │ │ │ ├── RootActivity.java │ │ │ ├── SampleApplication.java │ │ │ └── root/ │ │ │ ├── RootBuilder.java │ │ │ ├── RootInteractor.java │ │ │ ├── RootRouter.java │ │ │ ├── RootView.java │ │ │ ├── loggedin/ │ │ │ │ ├── LoggedInBuilder.java │ │ │ │ ├── LoggedInInteractor.java │ │ │ │ ├── LoggedInRouter.java │ │ │ │ ├── offgame/ │ │ │ │ │ ├── OffGameBuilder.java │ │ │ │ │ ├── OffGameInteractor.java │ │ │ │ │ ├── OffGameRouter.java │ │ │ │ │ └── OffGameView.java │ │ │ │ └── tictactoe/ │ │ │ │ ├── Board.java │ │ │ │ ├── BoardCoordinate.java │ │ │ │ ├── TicTacToeBuilder.java │ │ │ │ ├── TicTacToeInteractor.java │ │ │ │ ├── TicTacToeRouter.java │ │ │ │ └── TicTacToeView.java │ │ │ └── loggedout/ │ │ │ ├── LoggedOutBuilder.java │ │ │ ├── LoggedOutInteractor.java │ │ │ ├── LoggedOutRouter.java │ │ │ └── LoggedOutView.java │ │ └── res/ │ │ ├── layout/ │ │ │ ├── logged_out_rib.xml │ │ │ ├── off_game_rib.xml │ │ │ ├── root_rib.xml │ │ │ └── tic_tac_toe_rib.xml │ │ └── values/ │ │ └── ub__strings.xml │ └── test/ │ └── java/ │ └── com/ │ └── uber/ │ └── rib/ │ └── root/ │ ├── RootInteractorTest.java │ ├── RootRouterTest.java │ ├── loggedin/ │ │ ├── LoggedInInteractorTest.java │ │ ├── LoggedInRouterTest.java │ │ ├── offgame/ │ │ │ ├── OffGameInteractorTest.java │ │ │ └── OffGameRouterTest.java │ │ └── tictactoe/ │ │ ├── TicTacToeInteractorTest.java │ │ └── TicTacToeRouterTest.java │ └── loggedout/ │ ├── LoggedOutInteractorTest.java │ └── LoggedOutRouterTest.java ├── tutorial3-completed/ │ ├── README.md │ ├── build.gradle.kts │ └── src/ │ ├── main/ │ │ ├── AndroidManifest.xml │ │ ├── java/ │ │ │ └── com/ │ │ │ └── uber/ │ │ │ └── rib/ │ │ │ ├── RootActivity.java │ │ │ ├── SampleApplication.java │ │ │ └── root/ │ │ │ ├── RootBuilder.java │ │ │ ├── RootInteractor.java │ │ │ ├── RootRouter.java │ │ │ ├── RootView.java │ │ │ ├── loggedin/ │ │ │ │ ├── LoggedInBuilder.java │ │ │ │ ├── LoggedInInteractor.java │ │ │ │ ├── LoggedInRouter.java │ │ │ │ ├── MutableScoreStream.java │ │ │ │ ├── ScoreStream.java │ │ │ │ ├── offgame/ │ │ │ │ │ ├── OffGameBuilder.java │ │ │ │ │ ├── OffGameInteractor.java │ │ │ │ │ ├── OffGameRouter.java │ │ │ │ │ └── OffGameView.java │ │ │ │ └── tictactoe/ │ │ │ │ ├── Board.java │ │ │ │ ├── BoardCoordinate.java │ │ │ │ ├── TicTacToeBuilder.java │ │ │ │ ├── TicTacToeInteractor.java │ │ │ │ ├── TicTacToeRouter.java │ │ │ │ └── TicTacToeView.java │ │ │ └── loggedout/ │ │ │ ├── LoggedOutBuilder.java │ │ │ ├── LoggedOutInteractor.java │ │ │ ├── LoggedOutRouter.java │ │ │ └── LoggedOutView.java │ │ └── res/ │ │ ├── layout/ │ │ │ ├── logged_out_rib.xml │ │ │ ├── off_game_rib.xml │ │ │ ├── root_rib.xml │ │ │ └── tic_tac_toe_rib.xml │ │ └── values/ │ │ └── ub__strings.xml │ └── test/ │ └── java/ │ └── com/ │ └── uber/ │ └── rib/ │ └── root/ │ ├── RootInteractorTest.java │ ├── RootRouterTest.java │ ├── loggedin/ │ │ ├── LoggedInInteractorTest.java │ │ ├── LoggedInRouterTest.java │ │ ├── offgame/ │ │ │ ├── OffGameInteractorTest.java │ │ │ └── OffGameRouterTest.java │ │ └── tictactoe/ │ │ ├── TicTacToeInteractorTest.java │ │ └── TicTacToeRouterTest.java │ └── loggedout/ │ ├── LoggedOutInteractorTest.java │ └── LoggedOutRouterTest.java └── tutorial4/ ├── README.md ├── build.gradle.kts └── src/ └── main/ ├── AndroidManifest.xml ├── java/ │ └── com/ │ └── uber/ │ └── rib/ │ ├── RootActivity.java │ ├── SampleApplication.java │ └── root/ │ ├── RootActionableItem.java │ ├── RootBuilder.java │ ├── RootInteractor.java │ ├── RootRouter.java │ ├── RootView.java │ ├── RootWorkflow.java │ ├── RootWorkflowModel.java │ ├── UserName.kt │ ├── WorkflowFactory.java │ ├── loggedin/ │ │ ├── GameKey.java │ │ ├── GameProvider.java │ │ ├── LoggedInActionableItem.java │ │ ├── LoggedInBuilder.java │ │ ├── LoggedInInteractor.java │ │ ├── LoggedInRouter.java │ │ ├── MutableScoreStream.java │ │ ├── ScoreStream.java │ │ ├── offgame/ │ │ │ ├── OffGameBuilder.java │ │ │ ├── OffGameInteractor.java │ │ │ ├── OffGameRouter.java │ │ │ └── OffGameView.java │ │ ├── randomWinner/ │ │ │ ├── RandomWinnerBuilder.java │ │ │ ├── RandomWinnerInteractor.java │ │ │ ├── RandomWinnerRouter.java │ │ │ └── RandomWinnerView.java │ │ └── tictactoe/ │ │ ├── Board.java │ │ ├── BoardCoordinate.java │ │ ├── TicTacToeBuilder.java │ │ ├── TicTacToeInteractor.java │ │ ├── TicTacToeRouter.java │ │ └── TicTacToeView.java │ └── loggedout/ │ ├── LoggedOutBuilder.java │ ├── LoggedOutInteractor.java │ ├── LoggedOutRouter.java │ └── LoggedOutView.java └── res/ ├── layout/ │ ├── game_button.xml │ ├── logged_out_rib.xml │ ├── off_game_rib.xml │ ├── root_rib.xml │ └── tic_tac_toe_rib.xml └── values/ └── ub__strings.xml