Hey everyone,

I remember when I joined Mozilla Michael asked me what's different working
here compared to working at other Android "companies". Back then my answer
was: The build system! Because this was so obviously different and maybe a
bit painful at the beginning. Since the build system gets better almost
every day (Thank you nalexander!) my answer today would be: The big effort
we are making to ship multiple variations of our UI to the different
Android versions.

Two examples of what I mean:

1) The overflow menu. In Firefox: On most modern devices it's in the top
right corner. On Gingerbread it's a simple, old Android menu triggered by
pressing a hardware menu button. Then there are some devices with Android
4+ and a menu button. These devices get a menu that shows up from the
bottom of the screen but has more features like the overflow menu. And I
wouldn't be surprised if there are even more variations. :) Touching this
code is not always easy. Writing UI tests can be frustrating because you
have to handle all these variations (even though we do a good job hiding
this behind components).

2) Themes: We have a default theme that derives from Android's default
theme (Back then this could be anything, including funky variations shipped
by the device manufacturers), a v11+ theme that inherits from the Holo
theme, a v14+ style that overrides some styles and a v21+ theme that
inherits from the Material theme. In addition to that we define styles in
default, v11, v13, v16 and v19. Some styles are inherited from previous
versions and some are overridden. I recently tried to change the v21 theme
and I couldn't follow all style paths because of the complexity.

On the one hand, I'm impressed that we have been able to maintain this and
are shipping a Look & Feel that matches the one of the particular platform
very closely, but on the other hand, I don't know of any other popular app
that does that. Instead they ship the same (modern, now: Material) UI to
all devices with the help of the support library and appcompat library (And
nowadays the Android design support library too).

Some examples:
* The Toolbar API allows us to have the same ActionBar behavior
independently of the Android version we are running on (vs. maintaining
different menus)
* The appcompat library comes with a theme that resembles the Material
theme on all Android versions (as good as it can). This allows us to use
and adapt just one theme.
* We are maintaining some custom components that we could replace with
feature richer and more tested support components, e.g our
TabMenuStripLayout

But of course there are some downsides:
* We already include the support library and the appcompat library (at
least for builds with MOZ_NATIVE_DEVICES set) but not the design library
(bug 1189306). We don't need it yet but it will grow the APK size. Even
though proguard might be able to reduce this a bit.
* Shipping the same thing to all devices with the help of support
components removes the advantage of possible APK size reductions by
splitting APKs by version.

Okay, this mail got longer than I thought. I wanted to write it for some
time to hear your opinions but now that I saw a new bug about inheriting
styles from AppCompat (bug 1201206) I wanted to get it out. :)

Best,
Sebastian
_______________________________________________
mobile-firefox-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/mobile-firefox-dev

Reply via email to