different components ◦ 10-20 fonts ◦ 10-20 colors ◦ Few hundred icons • Living, constantly changing Design System • Long lifetime of the solution ◦ Design System = Investment
developers) • Each of the developers: ◦ can use components on a daily basis ◦ can prepare new components ◦ can introduce changes to existing components • No/low entry barrier for new developers • Keeping the implementation consistent
components ◦ Introducing changes to existing components ◦ Using components • Clean API and clean implementation as a whole • Implementation always up-to-date • Testability ◦ Components can be prepared long before they are used in the application
Separate module • Separating the implementation: ◦ from the rest of the application ◦ from the old UI implementation (beware of conflicts!) • The dependency: ◦ clear ◦ optional • One repository, no need to version the design system
◦ Too simple solution • Custom View ◦ Maybe... • Frameworks, e.g. Litho: A declarative UI framework for Android ◦ Too complex solution • Jetpack Compose ◦ Not ready yet
in layouts • Easily customizable via declared attributes • One-class implementation... ◦ ...plus layout file, plus style, plus attributes declaration...
screens in a RecyclerView” • Can be used to: ◦ Get rid of ViewHolders and their layouts ◦ Get rid of Adapters • Based on Models provided by Controller attached to RecyclerView • Built-in diffing and much more • Plays well with Paris!
Presenting components in a master-detail view ◦ Dynamically changing components data (e.g. short text vs long text) ◦ Can be shared with designers to allow an early look at the components • Other ideas (didn’t check them yet): ◦ Espresso - testing the component in an empty, test Activity ◦ Lint check prohibiting to use other views than ViewGroups and components
with clean API and readable class structure • Easy to use: both in layouts and within RecyclerView • Can be tested in a demo app All requirements satisfied! :-)