Sunday, April 01, 2012

Unleash Your Galaxy Nexus Screen: Tweak Auto Brightness

When I was shopping for my next phone, one of the main selling points of the Galaxy Nexus was its beautiful SuperAMOLED screen.  Because the screen pixels are actually light sources (as opposed to a more traditional LCD in which a backlight is filtered by an LCD screen), the contrast ratio and color vibrance are theoretically unmatched.  So why is it that, weeks after getting my long awaited gem, my assessment of the screen is that it is more lackluster than my 3 year old Moto Droid?

The answer lies in the combination of two factors:
  1. Different colored LEDs respond differently to various power levels, in terms of their brightness.
  2. The default screen-brightness-to-ambient-light mapping offered by Ice Cream Sandwich on the Galaxy Nexus (in auto brightness mode), is inadequate.
Here's the proof:  Turn your display brightness all the way up instead of using auto mode.  The screen looks beautiful, the colors are vibrant, and the promise of the SuperAMOLED screen is realized (not to mention that you can actually see the screen reasonably well in sunlight).  Ok, so it's probably not appropriate to leave your brightness cranked all the time, for a lot of reasons, but it's clear enough that there is a different world. 

So what's going on here?  Let's look at item #1 first.  Different colored LEDs respond differently to various power levels.  The reason for this is that different materials are used to create each color, and each respective material has a fairly unique, non-linear brightness curve.  So lowering the power going into the screen means that the colors will not be dimmed uniformly, causing color distortion.

#2, the auto brightness mapping just doesn't seem to cut it.  This is a complaint I have had with all of my Android phones, but this one is especially pronounced, perhaps because of the LED display.  The screen is very often too dim for a given situation.  The ambient light sensor is extremely directional, and if you are standing outside on a bright day, the display will very often switch down to around 50%!  This is unacceptable.  The other symptom this creates specifically on the Galaxy Nexus, is a dull and unremarkable screen color (greenish or yellowish tint, with reds and blues being very subdued).  In practice, it very rarely, if ever, actually gets to full screen brightness, which I found quite annoying.

My theory is that Google errs on the side of conservation in order to protect battery life.  However, in the face of some of the other battery drainers, and the rate at which they can consume energy, this seems like a drop in the bucket.  For me at least, I will take this small hit so that I can appreciate my phone when I am using it.  Let's talk about options.

Option 1: Leave your screen on full brightness all the time.  While this is certainly an option, this will have an unnecessary impact on battery life. Furthermore, this would be obnoxious when it is actually dark out. 

Option 2: Remap the brightness the way it should be.  This is possible with a custom ROM, such as Codename Android.  Codename Android's MO is to start out with all of its customizations the way they would be in stock ICS.  After that, the ROM allows you tweak lots of things, including the auto brightness mapping.  This does mean you will need to backup your phone, unlock it, root it, and install a custom ROM.  That's more than I want to get into on this blog post, but there are plenty of resources out there to get you started.

What I will offer is a brightness mapping that I have created, tested, and found to be very reasonable.   It's much simpler than the stock mapping, which has something like 20 discreet levels (which just seems like nonsense to me). 

First, you need to turn on the features of Codename Android to better manage the brightness.  Go to Settings->Interface (under CODENAME)->Automatic Backlight.  Enable the first checkbox, under "LIGHT SENSOR FILTER".  This will provide a moving average of the light level, which will help with the highly directional nature of the ambient light sensor (ideally, an actual ambient light sensor would be omnidirectional, but that's difficult to design into a device that is flat.  A better design would have a small semi-spherical protrusion, but I digress).   Change window length to 30 s.  This means that it will take 30 s before the light level perceived by the device is what the senor reports, assuming it stays the same for that long.  Until then, it will ramp up or down slowly to meet it.  Change the sample interval to 2 s, since it really doesn't need to be faster.

Next, let's edit the mapping.  Go to "Edit Other Levels..." and you will see a map of lower, upper, screen, and brightness.  This may look a little intimidating, but it's really simple.  At the very top, you can see what the sensor is actually reporting (raw), what the current average is (filtered), and what the resulting screen brightness is.  I believe "buttons" is reserved for devices that have separate backlit hardware buttons, as opposed to the onscreen ones that the Galaxy Nexus has.  We'll leave those alone. 

Push "set number of levels" and change to 7.  Now push each button for "lower" on the left side, and enter the numbers as shown above.  Then select the screen levels for each range and, again, enter the numbers as shown above.

Don't forget to push "Save and apply".  You may wish to make tweaks to the suggested levels, which you can do at anytime by coming back to this screen.  My advice is to note the sensor reading under "raw" when the screen brightness is something other than what you would prefer, and then you can modify the brightness for that range, or adjust the ranges themselves as necessary.

Now enjoy your Galaxy Nexus screen, the way everyone should have been able to from the factory!
Post a Comment