[XPERIA X10 Themes and Apps] MrRusch:
Ok, can't let it go yet. ;)

According to the source code, ASU values range from 0 to 31 (except 99 meaning unknown), which translated to dBm would mean -133 to -71. So, we could change the current if-statement to something like this, leaving iconLevel = 0 as unkown, and then increasing iconLevels with signal strength in dBm..

dBm = asu * 2 -133;

if (dBm == -133) iconLevel = 1;
else if (dBm == -132) iconLevel = 2;
else if (dBm == -131) iconLevel = 3;
else if (dBm == -130) iconLevel = 4;
else if (dBm == -129) iconLevel = 5;
else if (dBm == -128) iconLevel = 6;
else if (dBm == -127) iconLevel = 7;
else if (dBm == -126) iconLevel = 8;
else if (dBm == -125) iconLevel = 9;
else if (dBm == -124) iconLevel = 10;
else if (dBm == -123) iconLevel = 11;
else if (dBm == -122) iconLevel = 12;
else if (dBm == -121) iconLevel = 13;
else if (dBm == -120) iconLevel = 14;
else if (dBm == -119) iconLevel = 15;
else if (dBm == -118) iconLevel = 16;
else if (dBm == -117) iconLevel = 17;
else if (dBm == -116) iconLevel = 18;
else if (dBm == -115) iconLevel = 19;
else if (dBm == -114) iconLevel = 20;
else if (dBm == -113) iconLevel = 21;
else if (dBm == -112) iconLevel = 22;
else if (dBm == -111) iconLevel = 23;
else if (dBm == -110) iconLevel = 24;
else if (dBm == -109) iconLevel = 25;
else if (dBm == -108) iconLevel = 26;
else if (dBm == -107) iconLevel = 27;
else if (dBm == -106) iconLevel = 28;
else if (dBm == -105) iconLevel = 29;
else if (dBm == -104) iconLevel = 30;
else if (dBm == -103) iconLevel = 31;
else if (dBm == -102) iconLevel = 32;
else if (dBm == -101) iconLevel = 33;
else if (dBm == -100) iconLevel = 34;
else if (dBm == -99) iconLevel = 35;
else if (dBm == -98) iconLevel = 36;
else if (dBm == -97) iconLevel = 37;
else if (dBm == -96) iconLevel = 38;
else if (dBm == -95) iconLevel = 39;
else if (dBm == -94) iconLevel = 40;
else if (dBm == -93) iconLevel = 41;
else if (dBm == -92) iconLevel = 42;
else if (dBm == -91) iconLevel = 43;
else if (dBm == -90) iconLevel = 44;
else if (dBm == -89) iconLevel = 45;
else if (dBm == -88) iconLevel = 46;
else if (dBm == -87) iconLevel = 47;
else if (dBm == -86) iconLevel = 48;
else if (dBm == -85) iconLevel = 49;
else if (dBm == -84) iconLevel = 50;
else if (dBm == -83) iconLevel = 51;
else if (dBm == -82) iconLevel = 52;
else if (dBm == -81) iconLevel = 53;
else if (dBm == -80) iconLevel = 54;
else if (dBm == -79) iconLevel = 55;
else if (dBm == -78) iconLevel = 56;
else if (dBm == -77) iconLevel = 57;
else if (dBm == -76) iconLevel = 58;
else if (dBm == -75) iconLevel = 59;
else if (dBm == -74) iconLevel = 60;
else if (dBm == -73) iconLevel = 61;
else if (dBm == -72) iconLevel = 62;
else if (dBm == -71) iconLevel = 63;

if (asu == 99) iconLevel = 0;

This would mean 64 images (including unkown), which in itself isn't too bad considering the percentage battery mod has a bunch more. But obviously we would need to express this better, for example:

dBm = asu * 2 - 133;
if (asu == 99) iconLevel = 0;
else iconLevel = dBm + 134;

This would make the lookup quick. Question then is how often the signal strength is calculated. Might not be that bad, but it's hard to know before trying it. And as I have no idea how to swap this image space for a textfield, I'll leave that to someone who knows that he/she is doing.

But following my approach, replacing this if-statement, only two more things need to be done as far as I can see:

1. add the extra resources to the framework-res.apk (which isn't a problem), but also to

2. extend the array which the iconLevel variable refers to - sSignalImages.

The Java source code here says,

private static final int[] sSignalImages = new int[] {
com.android.internal.R.drawable.stat_sys_signal_0,
com.android.internal.R.drawable.stat_sys_signal_1,
com.android.internal.R.drawable.stat_sys_signal_2,
com.android.internal.R.drawable.stat_sys_signal_3,
com.android.internal.R.drawable.stat_sys_signal_4
};

which in smali code is,

:array_44
.array-data 0x4
0x2at 0x4t 0x8t 0x1t
0x2ct 0x4t 0x8t 0x1t
0x2et 0x4t 0x8t 0x1t
0x30t 0x4t 0x8t 0x1t
0x32t 0x4t 0x8t 0x1t
0x34t 0x4t 0x8t 0x1t
.end array-data

I'm wondering if simply extending this array in increments of 2s would suffice if we use the same filenames? I.e. adding 0x36t 0x4t 0x8t 0x1t, 0x38t 0x4t 0x8t 0x1t, 0x3at 0x4t 0x8t 0x1t, etc. against stat_sys_signal_5, stat_sys_signal_6, stat_sys_signal_7, etc..