Half a year of regular HOX usage formed my opinion based on observations. Best part is that after series of hacks, tests and experiments I settled down with best setup I use for months now. If you are a geek replacing kernel or flashing ROM for a breakfast you may find it boring. Those of you however looking for one time customization for best results, read ahead.
Early users complained on limitations of HTC user interface. HTC One X (HOX) equipped with 1GB RAM should not have problems with multiple apps running at the same time, yet current apps pushed to background was frequently stopped breaking multitasking possibilities of modern Android operating system. HTC explained it was due to huge memory consumption of the UI layer itself leaving not much room for multiple apps. Even though with Sense 4.1 things got much better and most of riots on forums were no longer valid, offered HTC overlay was far beyond capabilities of skinny clones of pure Android like CyanogenMod. I got HTC however do to nice balance between usability and sense of aesthetics I decided to find customized ROM with Sense UI plumbing problems that HTC engineers did not fix.
Amongst many extra features on UI level, like finegrained tuning of UI options (replacing icons, fonts, color themes etc), custom ROMs offer higher efficiency by repackaging content of android or even deeper on linux kernel level, introducing hardware UI acceleration in GPU instead of CPU, overclocking and undervolting of CPU for better scalability and power saving (in cost of lesser stability though).
The HOX ergonomy is questionable when single handed operations are considered, even for palm large enough like mine. I can grasp it and operate with thumb on screen. Reaching out to power button on top of case though is virtually impossible or unsafe. I am right handed person and the button is located closer to left corner so it is much harder to press with thumb even after sliding phone deeper in the palm. Using front buttons, capacitive (touchable) in HOX, to wake device and put to sleep is not available for stock phone. Such extra feature requires kernel-level modification as sleeping android does not “see” these buttons. This feature is available under the name sweep2wake and linked in some kernels like faux or bricked: you sweep finger left to right to wake up and in reverse to put asleep (see the video). This is handy as I can do this one hand. Unfortunatelly replacing kernel is not for regular users, root access to device is required as system file are to be replaced.
In Sense 3.5 popular addition was “Quick settings“, extra tab in expanded status bar, tab offering shortcuts to most frequenly used system settings. Stock Sense 4.0/4.1 does not have it (more precisely it is disabled as developers have found it while working on custom ROM based on Sense 4.x). To get this handy extension custom ROM is required again.
When system tuning is considered kernel replacement combined with nice UI application allow power user to heavily interfere with CPU – changing range of available processor clocks. Just to remember, embedded devices can change clock speed ranging from hundred MHz used when device is sleeping to maximum offered for device (like 1-1.5GHz) when it needs full speed, all available in multiple steps (multiple speeds in between) to fine tune speed to power consumption. Custom software allows to overclock speed to give even more power as well as underclock lowering down minimum speed to make sleeping system super-saving on battery. The latter is less relevant on HOX Tegra3 based as this quad-core system has extra 5th low speed process that runs when Android sleeps along with all 4 super power cores. Superuser willing to save on every single miliwatt of battery power can also undervolt the system, reducing voltage of CPU core to lower current and dissipaded power in turn; this is two-sided sword though, if undervolted too much semiconductor elements works out of designed range and errors in processing pops up, leading to kernel panic and crashes like reboots or black screens. In my case undervolting by 50mV is maximum stable value, moving further to -75mV was giving kernel panic every second day.
Before jumping into HOX hacking it is good to know limitations. On HTC platform access elevation is two-tiered: first level is regular rooting which is giving the access to system files (partitions etc). This is enough to play linux level (kernels, recovery software etc) and android virtual machine (applications, user interface etc). Second level non-existent in Samsung for instance is called S-OFF (security off). Stock devices have security turned on (S-ON) that even on rooted devices does not allow to touch special areas of system (repartitioning, flashing hardware modules firmware etc), bootloader included. Bootloader version is matched with OS level so that usually upgrading Android version requires flashing bootloader. In older devices there are hacks to take off security (make S-OFF) and freely load different custom ROMs with different Androids. On HOX over one year of hacking did not bring the solution, S-OFF crack does not exist. The only way to upgrade bootloader is when HTC gives you such option with over-the-air upgrades.
The consequence of S-ON is that stock bootloader works with ICS Androids only and you can flash custom ROM based on it only (custom ROM on JB will not boot up). Upgrading bootloader to newer version for JB is possible, this way is allowed by HTC. Beware however, this is one way with HTC supplied bootloaders: the upgrade software will let you install newer bootloader for JB, if you decide go back there is no way to reflash bootloader for ICS (S-ON remeber?). This is very cleaver way HTC keeps control over marketing, even though you have hardware capable of running next generation of software with S-ON approach it is under producer control!
Limited bootloader manipulation convinced me to stay with ICS on HOX. Mostly becuase at the time there was much more custom ROMs for ICS comparing to JB. I was also lucky not to follow latest-greatest this time: it is well known problem of JB that voice synthesis (TTS) is not working correctly in some applications. And one of key applications that has this issue is iGO I am using for navigation when traveling.
Equipped with this knowledge I started with unlocking bootloader. Stock HTC device has bootloader in locked state, means works only with stock software and can be upgraded only from signed source (HTC or subsidiary). To replace software (flash custom ROM) bootloader must allow this, so that it must be in unlocked state. On recent devices bootloader unlocking process is controlled by HTC (unique token consumed by bootloader is generated based on you device serial number). Once unlocked bootloader can be ordered to disable flashing feature again. After this step bootloader will be marked relocked and behave like locked. As there is no known way to get back to factory state of locked service or next user will know if device was tampered with.
Unlocking bootloader is related to warranty. Most people think they loose warranty completely by unlocking bootloader but it is not true. I have contacted HTC and they assured me that it may impact warranty if there is correlation between possible damage caused by unauthorized software (e.g. burnt CPU by over-clocking). If the hardware failure is not related (like failing GPS or display malfunction) warranty still holds.
First ROM I flashed was ARHD, a stock ROM with tuning and minor customizations. As I wanted to have “Quick settings” (called EQS here) I used 9.7.2 version instead latest. I also replaced ARHD kernel with bricked kernel that has sweep2wake compiled in. I learnt another side effect of being S-ON as I could not flash everything from recovery mode as on HTC Desire (CWM cannot flash boot, fastboot SDK command from PC must be used).
I was not completely satisfied untill I flashed ViperX ROM, most advanced, stable and feature-rich distribution. Next to all demanded features I already described ViperX offers “Venome tweaks” to change completely UI behavior (skinning, status bar and lock screen customizations), through buttons reprogramming, memory management strategies (multitasking), to CPU tuning. I was delighted with ability to change brightness for each detected level separately, starting from making screen dimmer yet reacting to ambient light, ultimately to create profile freely.
On the process of reviewing custom ROMs I was catched by boot loops (phone displaying start screen instantly while internally android tries and fails to start in loop). Some problems I could solve using SDK’s “adb shell” (like bootloop cause by wiping out dalvik cache, creating by hand cache directory breaks out of bootloop). The others were harder not giving even access from PC. I was affraid at the beginning that non-removable battery will make phone useless as removing battery is a way to reboot phone in recovery mode. To my surprise keeping power button for several seconds leads to flashing backlit of buttons and then hardware power-off.
Over the time I had to solve some minor while pesky problems:
- 30 frames per second, on the paper only – the camera is excellent, night pictures prove it. Combining this with Full HD camera capable of 30fps sounds ideal for frequent traveler. While Samsung Galaxy S3 holds this promise, on HTC whether it is stock or custom, camera gives at best 23fps and drops down even more in low light conditions. While night shots are always tricky and frames drop is natura I was angry to find camera choppy in dynamic scenes. The only solution I have found and I use so far is “HOX Camera Mod”, modified system application that is capable of 27-28fps but not as stable as stock (occasional freezes on video recording producing garbage file or freezing while shooting pictures during video recording).
- iGO Primo force closes – GPS is life-support for me. I was bothered when one day iGO was FC-ing each time opened, even after reboot. Long googling gave me the answer: iGO is scanning DCIM directory with pictures to read locations written in them. Nice feature to integrate map with other phone resources but if picture is misread iGO just dies (–> http://forum.xda-developers.com/showpost.php?p=29726939&postcount=19 ). As a lesson learned I do not keep old pictures taken by other deviced in DCIM. I also move out pictures that are edited (cropped etc) as they mess up with iGO either.
- Low brightness display pulsing – I low ligh I use lowest level of brightness as I prefer dark screen over default blinding screen. It is easily noticeable that heavy processing causes slight voltage drops in rhythm of turning on and off cores of processor leading to distinguishible backlit brightness changes. The only way to get rid of it is to use one step brighter screen.
- Spontaneous screenshots with sweep2wake – sliding quickly finger there and back, when device is loaded leads to missinterpretation of gesture and screenshot is taken (built in combination for screenshot is power+home). I can live with it, it is annoying though when in silent mode cause screenshot always replays sound like camera shutter and flashes the screen.
At the end a little bit on efficiency of charging and dischargin measured and observer to better “plan” device usage in the distance from power source (outlet or power bank):
- 500mA USB – 20% per hour
- 1000mA adapter – 40% per hour (more powerful chargers (e.g. 2A for tablets) make no difference)
Discharging (faux 11u kernel, -50mV undervolting, 1300MHz max):
- sleeping – 6% over night (wifi on) down to less than 1% (wifi off)
- video recording – 1.2% per minute (2h on battery)
- music listening (vol 9/10, beats audio, stock headphones) – 7% per hour (14h on battery)
- video watching (vol 15/15, brighness 7/15 dice-player) – 15% per hour (6.5h on battery)