/componentizationArch

Primary LanguageKotlinApache License 2.0Apache-2.0

Netflix’s Android Componentization Architecture

Lifecycle aware, testable and reusable UI components for Android.

Droidcon NYC 2018 Talk

Droidcon SF 2018 Talk

Sample code

Fragment / Activity

...
LoadingComponent(container, EventBusFactory.get(this))
...

Component (Presenter/Controller/ViewModel)

...
bus.getSafeManagedObservable(ScreenStateEvent::class.java)
            .subscribe {
                when (it) {
                    ScreenStateEvent.Loading -> {
                        uiView.show()
                    }
                    ScreenStateEvent.Loaded -> {
                        uiView.hide()
                    }
                    ScreenStateEvent.Error -> {
                        uiView.hide()
                    }
                }
            }
...   

UIView

class LoadingView(container: ViewGroup) : UIView<UserInteractionEvent>(container) {
    private val view: View =
        LayoutInflater.from(container.context).inflate(R.layout.loading, container, true)
            .findViewById(R.id.loadingSpinner)
...            

Complete Samples

Basic Loading/Error/Success Screen

Basic Player UI Component

Unit Tests

Unit tests for Components