Android has a number of developer guides that are helpful for getting ramped up on general Android development. We recommend reading the following as primers for developing UI:
Dynamic Color doc should be followed when working on UI. For colors that cannot/should not be made dynamic (as mentioned in the doc), Chrome for Android has a color palette defined in //ui/android/java/res/values/color_palette.xml and a set of reusable semantic colors defined in //ui/android/java/res/values/semantic_colors_adaptive.xml. The semantic colors from semantic_colors_adaptive.xml should be used to ensure colors adapt properly for dark mode and can be consistently and easily updated during product-wide visual refreshes.
For more information on selecting the right color, see Night Mode on Chrome Android.
Text should be styled with a pre-defined text appearance from //components/browser_ui/styles/android/java/res/values/styles.xml. If the text color cannot/should not be dynamic, pre-defined text styles from //ui/android/java/res/values-v17/styles.xml can be used. If leading (aka line height) is needed, use org.chromium.ui.widget.TextViewWithLeading with app:leading set to one of the pre-defined *_leading dimensions in //ui/android/java/res/values/dimens.xml.
The Chromium code base contains a number of wrappers around Android classes (to smooth over bugs or save on binary size) and many UI widgets that provide Chrome-specific behavior and/or styling.
These can be found in //components/browser_ui/widget/android/, //ui/android/, and //chrome/android/java/src/org/chromium/chrome/browser/widget/. There is an ongoing effort to consolidate all widgets in //components/browser_ui/widget/android.
UI development should follow a modified Model-View-Controller pattern. MVC base classes live in //ui/android/java/src/org/chromium/ui/modelutil.
The following guides introduce MVC in Chrome for Android:
Styles and widgets in //ui/android/ may be used by WebView. UI shown in WebView is inflated using the host Activity as the Context, so Chrome‘s custom theme attributes won’t be set and android theme attributes may or may not be set. When creating new styles/widgets or modifying styles/widgets used by WebView, either avoid theme attributes or define a fallback if the theme attribute cannot be resolved.
Currently, there are 2 custom tools to catch activity results in Chrome: IntentRequestTracker can be called from a WindowAndroid to start an activity. The provided callback will be called when the started activity returns a result. One known limitation is that the callback is lost if the base activity is recreated. The result will be lost if it‘s received after the base activity is recreated. ActivityResultTracker using the Android ActivityResultRegistry API is introduced to ensure that the in-flight activities’ result is caught even after base activity's recreation.