Given up on ICS, for now

I have been running ICS on my Sony Xperia S for 2 weeks now.  Yesterday I decided that it wasn’t for me and have gone back to Gingerbread.

Why?  I hear you ask.  Well, Sony did a fantastic job withthe Gingerbread ROM.  Everything just works.  Lots of little touches that make the phone a delight to use.  The ICS upgrade must have been done by a different team.  Ignoring the core changes, these are the things that annoyed me with the upgrade

1) They broke NFC.  This is unforgivable.  One of the unique selling points for the Xperia S, and the specific reason that I chose it, was that it has NFC.  I was finding that tags would only be read with a 30% success rate.  Sometimes a tag would take up to 10 minutes (no exaggeration) to be detected.  Looking at the phone log I was seeing the NFC service log an LLC length error every 2 seconds.

2) They damaged Bluetooth.  I use bluetooth audio streaming a lot.  My car, my headphones, the radio in the kitchen and the dining room.  The phone would now only automatically connect to them about 60% of the time.  In addition to this, the audio stream would give a 2 second stutter every 4 minutes or so.  My old HTC Desire did this, and it was one of the reasons I upgraded.  It gets very distracting in audiobooks and podcasts.  The GB ROM never did this.

3) They dumbed down the keyboard.  The stock GB keyboard was is a lovely mashup of functional keyboard and “swipe”.  For ICS they removed the “swipe” capability, leaving just a functional keyboard.  This was replaced almost immediately.

4) They have damaged the Timer.  For no apparent reason, the seconds indicator on the countdown timer is nowhere near where it shoudl be.  I dont even klnow why they modded this app, and have even less idea how this got through user testing.

5) They have slowed it down.  While you couldn’t describe it as slow, it feels about 10% slower than the gingerbread rom, lagging on the launcher.

6) They have damaged 3D graphics.  I can’t say one way or another if this is a Sony or Google thing, but some 3D games, notably Dead Trigger, glitch like mad.  The enemies leave trails behind them.  Played it today on the GB rom and it felt a lot smoother.  I am not sure if this is psychological as it no longer leaves trails.


So, will I miss ICS?  Some parts.  They seem trivial compared to the faults though.

1) I love Chrome.  I started to miss this really bad until I discovered BoatBrowser.  I dont think it has hardware acceleration, but it is still damn quick and has a lovely interface (and the icon is not as stupid as the Dolphin HD icon).

2) I miss the Xperia desk clock.  I was hoping it would still be in the GB rom, but the one in there is pretty basic.

3) I miss the fact that I can disable the lock screen.  This made using NFC tags a lot easier (no need to unlock the phone first, just turn it on)


And thats it.  I hope Sony will release an ICS ROM that is comparable to the GB one, but I wont hold my breath.  Looking at the extensive 2012 lineup I can see them focusing on updating the software on phones they want to sell, not phones they have sold.



Xperia Desk Clock

Back from holiday and finally managed to pull myself away from MW3.  To celebrate, a new app.

My phone got the ICS update yesterday.  Hidden in it is a desktop clock, but there is no way to launch it directly.  A quick hunt through the logs and 3 lines of code later, and I have an app that can.

Xperia Desk Clock




Go big or go home!

Wow, just broke the 10K mark!  10853 in total, officially 100 times more that I hoped.

With this encouragement, and the decision to finally give up on home screen rotation, I can get on with some of my  other ideas.  Watch this space!

Charger Timer 2.5

Looking at the stats fo this app I noticed over 50% of the installs are for the Samsung Galaxy Y.  This device has a QVGA display.  It turns out Charger Timer looks rubbish on a QVGA display.  I have reduced the size of the timer and it now looks a lot better, at least in the simulator.

If you are running Charge Timer 2.5, and you have a Galaxy Y, let me know how it now looks.



New Toy

Just picked an Ainol Nova 7 Advanced 2 for a bargain £70! Nice little tablet. Not a scratch on the Sony Xperia S or iPad, or even the Playbook, but for the money is amazing.

Came with ICS 4.03. Google Play and Skype video worked out of the box, as did BBC iPlayer. To my surprise, plugging in a pen drive filled with movies using the supplied USB OTG cable works brilliantly.

I did need to hack it a little to get FaceBook and Google Maps on, but this is a 5 minute job using the forums.

Only problem so far is the charge time. Thanks to Charge Timer I an confirm that the 2000ma charger is only kicking out 350ma, giving a charge time of almost 8 hours.  There has to be a problem here somewhere.  I will see what other chargers I have knocking around and see if I can up this number a bit.  Given the alleged 4000mah battery, charge time should be about 2 hours.

Screen Rotation – Too messy to continue

So, I have decompiled the home.apk and had a good look at the source code for the launcher. If a USB Deviec is detected that has a vendor id of 4046 and the 17th digit in the serial number is a 3, screen rotation will work!

So, its just a case of creating an Intent with a parcelable extra that matches the UsbDevice object. Easy yeah? Well, no. When I fire the intent is is (correctly) picked up by the USBEX service, which fails to unparcel the extra data and falls over, requiring me to reboot the phone.

This project is taking too much of my time, and I have a backlog of weird and wonderful apps I want to create so I am going to park it. Hopefully ICS will have screen rotation permanently enabled. Fingers crossed.

If anyone wants access to the source for how to fail at simulating a USB device, or how to fail at simulating a HDMI connection, leave me a comment.

Oh, total app downloads are now > 7800! I was expecting about 50 when I initially published them.

Source Control

Finally decided to use some sort of source control that is more sophisticated than zip files.  I am running a local GIT repo, pushing to a free account at  Working well so far.

The Quest Continues

My next idea was to acquire the manifest for the Launcher to see what Intents it was listening for.  I got the APK from a forum, decompiled it and noticed something a bit weird in the manifest.xml file.  References to something called ra3al.  A quick Google showed that ra3al was a senior forum member on the xda-developers forum.  I sent him a quick message and he came back with some excellent information.

Firstly, screen rotation can be enabled “easily” but there is a catch.  You must decompile the launcher, modify a specific byte, compile it again and install it as a system app (requiring root).  Unfortunately this is not a route I want to go down.

.line 580
    const/4 v7, 0x5

Change to

.line 580
    const/4 v7, -0x1

He also suggested that the USB_OTG event may be helpful. This is my next avenue of investigation. A quick check with a pen drive has so far proved unsuccessful, but I am not writing the idea off just yet.

The Quest for Screen Rotation

One of the projects I have ticking away is a method for enabling home screen rotation on the Xperia S.  I know I could install an alternative launcher, but I have jet to find one I like as much as Xperia Home.

I have observed screen rotation on a number of occasions.  Through trial and error I have narrowed these down to

  • When car mode is activated
  • When a HDMI cable is inserted,
  • For the second between scanning a Sony SmartTag and the activities starting.

The Car Mode option is the the easiest solution.  I have already written Car Mode On and Car Mode Off, but it has some side effects that force me to abandon this route.  Firstly it would mean I would have to uininstall any app that is listening for Car Made to be enabled, and I dont think I could give up Car Mode v3.  Secondly, while in car mode, the phone doesn’t sleep.

I have been trying really hard to simulate a HDMI insertion.  I am close.  I can trick LiveWare into thinking that HDMI is available.  THis in turn launches TV Launcher.  Unfortunately neither TV launcher nor the Launcher are fooled by this.  TV launcher fails to start, but the notification bar entry is present.  The launcher fails to rotate.

For those interested, the code is

public void start_hdmi(){
     Intent swapMode = new Intent();
     swapMode.putExtra("com.sonyericsson.intent.extra.HDMI_STATE", "HDMI_IN_USE");
     int i = 0;
     // undocumented Extra that is required.
     swapMode.putExtra("com.sonyericsson.intent.extra.EXTRA_TV_AUTO_ADJUST", i);

 public void stop_hdmi(){
     Intent swapMode = new Intent();
     swapMode.putExtra("com.sonyericsson.intent.extra.HDMI_STATE", "HDMI_OFF");

I cant see a way to pursue the second of rotation during NFC operations.

The hunt continues



Charge Timer v2.0 is live

Main features are that is is now configurable, it supports rotation and it doesn’t quit at the first sign of anything going wrong.

It is meant to be able to activate Airplane Mode during a run, but this is a bit flaky at the moment.

Lots of plans for v3