Android's K-9 Mail battery life and Dovecot's Push-IMAP

What is Push-IMAP, and why is it useful?

In the world of mobile phones, battery life is a concern. You want to be able maximize the battery life on your mobile phone, while still getting instant notifications of new e-mail. This is where Push-IMAP (aka. IMAP PUSH, P-IMAP) comes into play, an extension based on an RFC which combines with IMAP IDLE. You no longer need to poll the IMAP server if you are using this feature, as you always have an open connection.

What's the problem?

I am using K-9 Mail on my Android phone, and would like to make use of the IMAP PUSH feature but I found it consumes far too much battery. In Dovecot 1.2 when you initiate IMAP IDLE via your IMAP client (eg. K-9 Mail) Dovecot sends a message every 2 minutes stating "OK Still here", this causes the mobile data connection to have to wake up and consumes excessive amounts of battery. There is no way to configure this behavior in Dovecot 1.2 except by a source edit.

The solution

You will need to upgrade your Dovecot installation to 2.0 (if you aren't running 2.0 already,) which is slightly out of the scope of this blog entry. I found the upgrade rather painless by following the Upgrading Dovecot v1.2 to v2.0 guide on the Dovecot Wiki.

Dovecot 2.0 supports a configuration option called imap_idle_notify_interval which enables you to specify the interval between "OK Still here" messages. K-9 mail by default refreshes IDLE connections every 24 minutes, but of course Dovecot wakes up the client much more frequently than that. We are going to fix this behavoir.

The configuration of Dovecot 2.0 is slightly different than Dovecot 1.2, composing of multiple files. If you are using Linux your Dovecot configuration is most likely contained under /etc/dovecot, and on FreeBSD it is contained under /usr/local/etc. You will want to edit the conf.d/20-imap.conf file under the respective directory based on your host operating system.

You will see a stanza similar to the one outlined below, and you will want to uncomment the imap_idle_notify_interval line and replace 2 mins with 29 mins.

protocol imap {
 # How long to wait between "OK Still here" notifications when client is
 # IDLEing.
 #imap_idle_notify_interval = 2 mins
}

When you have completed this step, you will want to restart Dovecot. This can be accomplished on Linux with /etc/init.d/dovecot restart, or /usr/local/etc/rc.d/dovecot restart on FreeBSD.

My results

By switching the Dovecot server to send the "OK Still here" notification to every 24 minutes instead of 2 minutes the mobile client is woken up much more infrequently, either when you receive a new e-mail or every 29 minutes respectively. This has greatly improved the battery life on my HTC Desire Z with K-9 Mail, and hopefully it will help out with your device issues and being able to instantly receive new e-mail notifications!

An update, RFC style

Clint Pachl e-mailed me to inform me that IMAP4 IDLE RFC (rfc2177) specifics that the client should issue a IDLE command every 29 minutes. I have updated the guide to reflect this change.

Because the K-9 default "Refresh IDLE connection" is 24 minutes, that gives a buffer of 5 minutes if the IMAP server timeout is set to 29 minutes. The RFC and K-9 default times, 29 and 24 respectively, don't seem like a coincidence. I think the RFC may have been an influence on the K-9 devs when choosing a default IDLE refresh.

Consequently, setting Dovecot's imap_idle_notify_interval to 29 minutes seems most appropriate considering K-9's default. This gives K-9 ample time to respond in case of short outages or passing between cell towers (<5min window). However, beyond that window, the server can then shut down the connection.

Setting both the server and the client to the same timeout/refresh may cause some cross-talk.

Signed boot & recovery? HTC out of the running for phone purchases

An update to my The state of Android phones in relation to hackability post the other day. I guess I have to take back my views on HTC!

HTC has decided to start locking down their boot loaders with signed images with the release of the HTC Incredible S. This is garbage, and goes against the very spirit of Android. What happens when HTC decides to stop releasing updates for the phone, does this mean I am out of luck and have to be stuck with an old version of Android only 6 months after buying the phone? (As was the case with my HTC Legend if CyanogenMod hadn't released an updated Android.)

I don't know what Android phone I should be buying next time I get a phone? Looks like I'll be stuck buying the stock Google experience phones like the Nexus One and the Nexus S.

Disabling menu bar, navigation transparency in Firefox 4 on Windows 7, Vista

Why?

Firefox 4 which was released on March 22nd, 2011 is a very fast and featured browser with tons of improvements over previous versions. But like always, Mozilla has changed something in the browser that I don't like, and this time it is the transparency of the new title bar. It is quite distracting, and infact it was so distracting that I needed to figure out how to disable the transparency.

I heard some suggestions to disable Windows Aero, but this isn't really an option since it's disabled on a system basis and what if I only don't like the transparency in Firefox? I found a simple fix by using the features available in userChrome.css to modify the layout of the Firefox.

userChrome.css

@namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul);
#TabsToolbar, #PersonalToolbar, window, page, dialog, wizard, prefwindow {
 background-color: -moz-dialog !important;
}

How do I edit userChrome.css?

This tutorial assumes that you have Hide Extensions for known file types unchecked in Windows Explorer Folder Options.

  1. Open Windows Explorer and enter %APPDATA%\Mozilla\Firefox\Profiles into the Address Bar,
  2. On screen you will see a folder with a random name (eg. 7q4fse53.default,) select the folder,
  3. Select the chrome folder in your profile for Mozilla Firefox,
  4. If a file named userChrome.css does not exist: create it by right clicking and selecting "New Text Document" under the New context menu, and rename the newly created file to userChrome.css,
  5. Open the file userChrome.css in Notepad or a text editor of your choice, and paste the content from the userChrome.css section (from above) into the file,
  6. Save the changes you have made to userChrome.css in your text editor,
  7. Restart Mozilla Firefox to see the changes you have made to your userChrome.css file.

It would be helpful if Mozilla made some of these layout changes configurable, this reminds me of the AwesomeBar (TM) feature which not everyone thinks is so awesome. But at least we have userChrome.css, and addons for layout changes.

The state of Android phones in relation to hackability

What happens when the manufacturer of your newly purchased Android phone decides to stop providing updates? If you're a Motorola customer, you will probably be out of luck (except with the newly released Xoom.) Motorola locks the boot loaders on their phones preventing 3rd parties from providing updates (eg. CyanogenMod) for devices that they have released.

Which got me thinking, what are the really "friendly" device manufactures out there? Not Motorola for sure, which leaves some other players in the market:

  • HTC which doesn't try all that hard to lock their phones down (except if say, T-Mobile requests it)
  • Samsung isn't exactly friendly to hackers, makes it relatively easy to brick your phone if you aren't super careful
  • Acer, and LG clunky and poor quality hardware and I find it hard to see the appeal, not a very large userbase of "hackers" for the hardware
  • Huawei, poor build quality and a new player in the market
  • Google, which sources their phones from various manufacturers (to date: HTC and Samsung)

There are some other smaller manufactures, but none that really make a "dent" in the market at present. Now, based on quality what do you select? You could go with Samsung, but you might have to deal with a faulty boot loader which will cause your phone to become bricked if you mess up while doing a firmware flash.

Seems like HTC is one of the only decent Android smartphone manufactures out there! I know that many people are going to disagree with me, but they are consistently cranking out new hardware that is well supported by CyanogenMod and isn't totally-locked-down.

TELUS VDSL2 modems deployed in the field

Actiontec V1000H

Specifications

Hardware

Board ID Broadcom 96368VVW
Memory 64MB
Flash 32MB (AM29LV320MT)
Ethernet 5 Ports (1 WAN)
Wireless 802.11 (b, g, n)
HPNA Yes
USB Yes

Software

Release 31.30L.48
Kernel Linux 2.6.21.5
Build Date Wed Sep 1 23:33:32 PDT 2010

Alcatel Cellpipe 7130 (TELUS 3Ve.A2010TEL)

Specifications

Hardware

Board ID Broadcom 96368MVWGV11
Memory 64MB
Flash 4MB (MX29LV320AB)
Ethernet 1 Port
Wireless No
HPNA No
USB No

Software

Release TJ3-65-014E
Kernel Linux 2.6.21.5
Build Date Wed Dec 30 09:12:42 CST 2009