[Thunderbolt Android Development] jmz:
So first off big thanks to dsb9938 for the help. We worked on this together till we finally narrowed it down. This is a real 6 signal. The math is done and instead of calculating for 4 it does it for 6.

There are plenty of tutorials for decompiling apk's so that will not be covered here...

1. Decompile SystemUI.apk

2. Open \smali\com\android\systemui\statusbar\policy\HtcCd maStatusBar.smali

3. Change ".field protected static final htcCdma6LevelSignalStrength:Z = null" to ".field protected static final htcCdma6LevelSignalStrength:Z = true"

4. Change "sget-object v0, Lcom/android/systemui/statusbar/policy/HtcCdmaStatusBar;->htcCdma4SignalImages:[[I" to "sget-object v0, Lcom/android/systemui/statusbar/policy/HtcCdmaStatusBar;->htcCdma6SignalImages:[[I"

5. Change "sget-object v0, Lcom/android/systemui/statusbar/policy/HtcCdmaStatusBar;->htcCdma4SignalImages_flash:[[I" to "sget-object v0, Lcom/android/systemui/statusbar/policy/HtcCdmaStatusBar;->htcCdma6SignalImages_flash:[[I"

6. Change "sget-object v0, Lcom/android/systemui/statusbar/policy/HtcCdmaStatusBar;->htcCdma4SignalImages_r:[[I" to "sget-object v0, Lcom/android/systemui/statusbar/policy/HtcCdmaStatusBar;->htcCdma6SignalImages_r:[[I"

7. Open \smali\com\android\systemui\statusbar\policy\StatusBarPolicy.smali

8. Change "const/4 v1, 0x4" to "const/4 v1, 0x6" ***thanks to aamikam for this step.

Now, I wasn't sure how to write up the next part. It is a lot of changes. But you can choose how you do it. If you are using a stock rom you should be able to just copy and replace the entire method without and issue. On other roms you might end up with screwed up icons. So to me the easiest would be to diff the your smali and the 3 methods below and change only whats necessary ignoring line numbers.

9. Open \smali\com\android\systemui\statusbar\policy\StatusBarPolicy.smali

10. find and replace or merge.

.method private getEvdoLevel()I
.locals 7

.prologue
.line 2542
iget-object v6, p0, Lcom/android/systemui/statusbar/policy/StatusBarPolicy;->mSignalStrength:Landroid/telephony/SignalStrength;
invoke-virtual {v6}, Landroid/telephony/SignalStrength;->getEvdoDbm()I

move-result v0
.line 2543
.local v0, evdoDbm:I
iget-object v6, p0, Lcom/android/systemui/statusbar/policy/StatusBarPolicy;->mSignalStrength:Landroid/telephony/SignalStrength;

invoke-virtual {v6}, Landroid/telephony/SignalStrength;->getEvdoSnr()I
move-result v2

.line 2544
.local v2, evdoSnr:I
iget-object v6, p0, Lcom/android/systemui/statusbar/policy/StatusBarPolicy;->mSignalStrength:Landroid/telephony/SignalStrength;
invoke-virtual {v6}, Landroid/telephony/SignalStrength;->getEvdoEcio()I

move-result v1
.line 2545
.local v1, evdoEcio:I
const/4 v3, 0x0

.line 2546
.local v3, levelEvdoDbm:I
const/4 v5, 0x0
.line 2547
.local v5, levelEvdoSnr:I
const/4 v4, 0x0

.line 2572
.local v4, levelEvdoEcio:I
const/16 v6, -0x41
if-lt v0, v6, :cond_0

const/4 v3, 0x4
.line 2578
:goto_0
const/4 v6, 0x7

if-lt v2, v6, :cond_4
const/4 v5, 0x4

.line 2584
:goto_1
if-ge v3, v5, :cond_8
move v6, v3

:goto_2
return v6
.line 2573
:cond_0
const/16 v6, -0x4b

if-lt v0, v6, :cond_1
const/4 v3, 0x3

goto :goto_0
.line 2574
:cond_1
const/16 v6, -0x5a

if-lt v0, v6, :cond_2
const/4 v3, 0x2

goto :goto_0
.line 2575
:cond_2
const/16 v6, -0x69

if-lt v0, v6, :cond_3
const/4 v3, 0x1

goto :goto_0
.line 2576
:cond_3
const/4 v3, 0x0

goto :goto_0
.line 2579
:cond_4
const/4 v6, 0x5

if-lt v2, v6, :cond_5
const/4 v5, 0x3

goto :goto_1
.line 2580
:cond_5
const/4 v6, 0x3

if-lt v2, v6, :cond_6
const/4 v5, 0x2

goto :goto_1
.line 2581
:cond_6
const/4 v6, 0x1

if-lt v2, v6, :cond_7
const/4 v5, 0x1

goto :goto_1
.line 2582
:cond_7
const/4 v5, 0x0

goto :goto_1
:cond_8
move v6, v5

.line 2584
goto :goto_2
.end method

10. find and replace or merge

.method private final updateSignalStrength()V
.locals 12

.prologue
const/4 v10, 0x2

const/4 v9, 0x1

const/4 v8, 0x0

const-string v11, "phone_signal"

const-string v7, "StatusBarPolicy"

.line 2215
const/4 v2, -0x1

.line 2224
.local v2, iconLevel:I
const/4 v5, 0x0

new-instance v6, Ljava/lang/Integer;

invoke-direct {v6, v8}, Ljava/lang/Integer;-><init>(I)V

invoke-direct {p0, v5, v6}, Lcom/android/systemui/statusbar/policy/StatusBarPolicy;->getHtcServiceState(Ljava/lang/Boolean;Ljava/lang/Integer;)Landroid/telephony/ServiceState;

move-result-object v4

.line 2228
.local v4, ss:Landroid/telephony/ServiceState;
if-eqz v4, :cond_1

invoke-direct {p0, v4}, Lcom/android/systemui/statusbar/policy/StatusBarPolicy;->hasService(Landroid/telephony/ServiceState;)Z

move-result v5

if-nez v5, :cond_1

.line 2232
iget-object v5, p0, Lcom/android/systemui/statusbar/policy/StatusBarPolicy;->mContext:Landroid/content/Context;

invoke-virtual {v5}, Landroid/content/Context;->getContentResolver()Landroid/content/ContentResolver;

move-result-object v5

const-string v6, "airplane_mode_on"

invoke-static {v5, v6, v8}, Landroid/provider/Settings$System;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I

move-result v5

if-ne v5, v9, :cond_0

.line 2234
const v5, 0x7f02012d

iput v5, p0, Lcom/android/systemui/statusbar/policy/StatusBarPolicy;->mPhoneSignalIconId:I

.line 2248
:goto_0
iget-object v5, p0, Lcom/android/systemui/statusbar/policy/StatusBarPolicy;->mService:Landroid/app/StatusBarManager;

const-string v6, "phone_signal"

iget v7, p0, Lcom/android/systemui/statusbar/policy/StatusBarPolicy;->mPhoneSignalIconId:I

invoke-virtual {v5, v6, v7, v8}, Landroid/app/StatusBarManager;->setIcon(Ljava/lang/String;II)V

.line 2449
:goto_1
return-void

.line 2244
:cond_0
const v5, 0x7f02012e

iput v5, p0, Lcom/android/systemui/statusbar/policy/StatusBarPolicy;->mPhoneSignalIconId:I

goto :goto_0

.line 2252
:cond_1
sget-object v5, Ljava/lang/Boolean;->TRUE:Ljava/lang/Boolean;

new-instance v6, Ljava/lang/Integer;

invoke-direct {v6, v8}, Ljava/lang/Integer;-><init>(I)V

invoke-direct {p0, v5, v6}, Lcom/android/systemui/statusbar/policy/StatusBarPolicy;->getHtcServiceState(Ljava/lang/Boolean;Ljava/lang/Integer;)Landroid/telephony/ServiceState;

move-result-object v4

.line 2255
invoke-direct {p0}, Lcom/android/systemui/statusbar/policy/StatusBarPolicy;->isCdma()Z

move-result v5

if-nez v5, :cond_d

.line 2257
iget-object v5, p0, Lcom/android/systemui/statusbar/policy/StatusBarPolicy;->mPhone:Landroid/telephony/TelephonyManager;

invoke-virtual {v5}, Landroid/telephony/TelephonyManager;->getPhoneType()I

move-result v5

if-eq v5, v9, :cond_2

.line 2262
:cond_2
iget-object v5, p0, Lcom/android/systemui/statusbar/policy/StatusBarPolicy;->mSignalStrength:Landroid/telephony/SignalStrength;

invoke-virtual {v5}, Landroid/telephony/SignalStrength;->getGsmSignalStrength()I

move-result v0

.line 2310
.local v0, asu:I
const-string v5, "StatusBarPolicy"

new-instance v5, Ljava/lang/StringBuilder;

invoke-direct {v5}, Ljava/lang/StringBuilder;-><init>()V

const-string v6, "GSM asu:"

invoke-virtual {v5, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

move-result-object v5

invoke-virtual {v5, v0}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;

move-result-object v5

invoke-virtual {v5}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

move-result-object v5

invoke-static {v7, v5}, Landroid/util/Slog;->d(Ljava/lang/String;Ljava/lang/String;)I

if-le v0, v9, :cond_3

const/16 v5, 0x63

if-ne v0, v5, :cond_7

:cond_3
const/4 v2, 0x0

.line 2319
:goto_2
iget-object v5, p0, Lcom/android/systemui/statusbar/policy/StatusBarPolicy;->mPhone:Landroid/telephony/TelephonyManager;

invoke-virtual {v5}, Landroid/telephony/TelephonyManager;->isNetworkRoaming()Z

move-result v5

if-eqz v5, :cond_c

.line 2320
sget-object v5, Lcom/android/systemui/statusbar/policy/StatusBarPolicy;->sSignalImages_r:[[I

iget v6, p0, Lcom/android/systemui/statusbar/policy/StatusBarPolicy;->mInetCondition:I

aget-object v3, v5, v6

.line 2441
.end local v0 #asu:I
.local v3, iconList:[I
:cond_4
:goto_3
array-length v5, v3

if-gt v2, v5, :cond_5

if-gez v2, :cond_6

.line 2442
:cond_5
const/4 v2, 0x0

.line 2444
const-string v5, "StatusBarPolicy"

const-string v5, "OoO fix iconLevel index range !"

invoke-static {v7, v5}, Landroid/util/Slog;->d(Ljava/lang/String;Ljava/lang/String;)I

.line 2447
:cond_6
aget v5, v3, v2

iput v5, p0, Lcom/android/systemui/statusbar/policy/StatusBarPolicy;->mPhoneSignalIconId:I

.line 2448
iget-object v5, p0, Lcom/android/systemui/statusbar/policy/StatusBarPolicy;->mService:Landroid/app/StatusBarManager;

const-string v6, "phone_signal"

iget v7, p0, Lcom/android/systemui/statusbar/policy/StatusBarPolicy;->mPhoneSignalIconId:I

invoke-virtual {v5, v6, v7, v8}, Landroid/app/StatusBarManager;->setIcon(Ljava/lang/String;II)V

goto :goto_1

.line 2311
.end local v3 #iconList:[I
.restart local v0 #asu:I
:cond_7
const/16 v5, 0xc

if-lt v0, v5, :cond_8

const/4 v2, 0x4

goto :goto_2

.line 2312
:cond_8
const/16 v5, 0x8

if-lt v0, v5, :cond_9

const/4 v2, 0x3

goto :goto_2

.line 2313
:cond_9
const/4 v5, 0x4

if-lt v0, v5, :cond_a

const/4 v2, 0x2

goto :goto_2

.line 2314
:cond_a
if-lt v0, v10, :cond_b

const/4 v2, 0x1

goto :goto_2

.line 2315
:cond_b
const/4 v2, 0x1

goto :goto_2

.line 2322
:cond_c
sget-object v5, Lcom/android/systemui/statusbar/policy/StatusBarPolicy;->sSignalImages:[[I

iget v6, p0, Lcom/android/systemui/statusbar/policy/StatusBarPolicy;->mInetCondition:I

aget-object v3, v5, v6

.restart local v3 #iconList:[I
goto :goto_3

.line 2331
.end local v0 #asu:I
.end local v3 #iconList:[I
:cond_d
iget-object v5, p0, Lcom/android/systemui/statusbar/policy/StatusBarPolicy;->mPhone:Landroid/telephony/TelephonyManager;

invoke-virtual {v5}, Landroid/telephony/TelephonyManager;->getPhoneType()I

move-result v5

if-eq v5, v10, :cond_e

.line 2351
:cond_e
invoke-static {}, Lcom/android/systemui/statusbar/policy/HtcCdmaStatusBar;->getSignalStrengthIconList()[[I

move-result-object v5

iget v6, p0, Lcom/android/systemui/statusbar/policy/StatusBarPolicy;->mInetCondition:I

aget-object v3, v5, v6

.line 2352
.restart local v3 #iconList:[I
const/4 v1, 0x0

.line 2353
.local v1, iconIndex:I
if-eqz v4, :cond_f

.line 2354
invoke-virtual {v4}, Landroid/telephony/ServiceState;->getCdmaEriIconIndex()I

move-result v1

.line 2355
const-string v5, "StatusBarPolicy"

new-instance v5, Ljava/lang/StringBuilder;

invoke-direct {v5}, Ljava/lang/StringBuilder;-><init>()V

const-string v6, "iconIndex="

invoke-virtual {v5, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

move-result-object v5

invoke-virtual {v5, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;

move-result-object v5

invoke-virtual {v5}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

move-result-object v5

invoke-static {v7, v5}, Landroid/util/Slog;->d(Ljava/lang/String;Ljava/lang/String;)I

.line 2358
:cond_f
packed-switch v1, :pswitch_data_0

.line 2369
iget-object v5, p0, Lcom/android/systemui/statusbar/policy/StatusBarPolicy;->mPhone:Landroid/telephony/TelephonyManager;

invoke-virtual {v5}, Landroid/telephony/TelephonyManager;->isNetworkRoaming()Z

move-result v5

if-eqz v5, :cond_10

.line 2371
invoke-static {}, Lcom/android/systemui/statusbar/policy/HtcCdmaStatusBar;->getSignalStrengthIconList_r()[[I

move-result-object v5

iget v6, p0, Lcom/android/systemui/statusbar/policy/StatusBarPolicy;->mInetCondition:I

aget-object v3, v5, v6

.line 2386
:goto_4
invoke-direct {p0}, Lcom/android/systemui/statusbar/policy/StatusBarPolicy;->getCdmaLevelDirectly()I

move-result v2

.line 2387
const-string v5, "StatusBarPolicy"

new-instance v5, Ljava/lang/StringBuilder;

invoke-direct {v5}, Ljava/lang/StringBuilder;-><init>()V

const-string v6, "iconLevel:"

invoke-virtual {v5, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

move-result-object v5

invoke-virtual {v5, v2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;

move-result-object v5

invoke-virtual {v5}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

move-result-object v5

invoke-static {v7, v5}, Landroid/util/Slog;->d(Ljava/lang/String;Ljava/lang/String;)I

.line 2389
const/4 v5, -0x1

if-ne v2, v5, :cond_4

.line 2394
sget-object v5, Ljava/lang/Boolean;->FALSE:Ljava/lang/Boolean;

invoke-direct {p0, v5}, Lcom/android/systemui/statusbar/policy/StatusBarPolicy;->isLte(Ljava/lang/Boolean;)Z

move-result v5

if-eqz v5, :cond_11

.line 2395
invoke-direct {p0}, Lcom/android/systemui/statusbar/policy/StatusBarPolicy;->getLteLevel()I

move-result v2

.line 2396
const-string v5, "StatusBarPolicy"

new-instance v5, Ljava/lang/StringBuilder;

invoke-direct {v5}, Ljava/lang/StringBuilder;-><init>()V

const-string v6, "Use LTE level="

invoke-virtual {v5, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

move-result-object v5

invoke-virtual {v5, v2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;

move-result-object v5

const-string v6, " to replace Cdma Level="

invoke-virtual {v5, v11}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

move-result-object v5

invoke-direct {p0}, Lcom/android/systemui/statusbar/policy/StatusBarPolicy;->getCdmaLevel()I

move-result v6

invoke-virtual {v5, v6}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;

move-result-object v5

invoke-virtual {v5}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

move-result-object v5

invoke-static {v7, v5}, Landroid/util/Slog;->d(Ljava/lang/String;Ljava/lang/String;)I

goto/16 :goto_3

.line 2360
:pswitch_0
invoke-static {}, Lcom/android/systemui/statusbar/policy/HtcCdmaStatusBar;->getSignalStrengthIconList_r()[[I

move-result-object v5

iget v6, p0, Lcom/android/systemui/statusbar/policy/StatusBarPolicy;->mInetCondition:I

aget-object v3, v5, v6

.line 2361
goto :goto_4

.line 2363
:pswitch_1
invoke-static {}, Lcom/android/systemui/statusbar/policy/HtcCdmaStatusBar;->getSignalStrengthIconList()[[I

move-result-object v5

iget v6, p0, Lcom/android/systemui/statusbar/policy/StatusBarPolicy;->mInetCondition:I

aget-object v3, v5, v6

.line 2364
goto :goto_4

.line 2366
:pswitch_2
invoke-static {}, Lcom/android/systemui/statusbar/policy/HtcCdmaStatusBar;->getSignalStrengthIconList_flash()[[I

move-result-object v5

iget v6, p0, Lcom/android/systemui/statusbar/policy/StatusBarPolicy;->mInetCondition:I

aget-object v3, v5, v6

.line 2367
goto :goto_4

.line 2375
:cond_10
invoke-static {}, Lcom/android/systemui/statusbar/policy/HtcCdmaStatusBar;->getSignalStrengthIconList()[[I

move-result-object v5

iget v6, p0, Lcom/android/systemui/statusbar/policy/StatusBarPolicy;->mInetCondition:I

aget-object v3, v5, v6

goto :goto_4

.line 2400
:cond_11
sget-object v5, Ljava/lang/Boolean;->FALSE:Ljava/lang/Boolean;

invoke-direct {p0, v5}, Lcom/android/systemui/statusbar/policy/StatusBarPolicy;->isEvdo(Ljava/lang/Boolean;)Z

move-result v5

if-eqz v5, :cond_12

.line 2401
invoke-direct {p0}, Lcom/android/systemui/statusbar/policy/StatusBarPolicy;->getEvdoLevel()I

move-result v2

.line 2402
const-string v5, "StatusBarPolicy"

new-instance v5, Ljava/lang/StringBuilder;

invoke-direct {v5}, Ljava/lang/StringBuilder;-><init>()V

const-string v6, "Use Evdo level="

invoke-virtual {v5, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

move-result-object v5

invoke-virtual {v5, v2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;

move-result-object v5

const-string v6, " to replace Cdma Level="

invoke-virtual {v5, v11}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

move-result-object v5

invoke-direct {p0}, Lcom/android/systemui/statusbar/policy/StatusBarPolicy;->getCdmaLevel()I

move-result v6

invoke-virtual {v5, v6}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;

move-result-object v5

invoke-virtual {v5}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

move-result-object v5

invoke-static {v7, v5}, Landroid/util/Slog;->d(Ljava/lang/String;Ljava/lang/String;)I

goto/16 :goto_3

.line 2407
:cond_12
invoke-direct {p0}, Lcom/android/systemui/statusbar/policy/StatusBarPolicy;->getCdmaLevel()I

move-result v2

goto/16 :goto_3

.line 2358
nop

:pswitch_data_0
.packed-switch 0x0
:pswitch_0
:pswitch_1
:pswitch_2
.end packed-switch
.end method

11. Find and replace or merge

.method private getCdmaLevelDirectly()I
.locals 5
.prologue
const-string v4, "StatusBarPolicy"
const/4 v0, -0x1
.line 2453
.local v0, cdmaLevel:I
const/4 v1, 0x4
.line 2454
.local v1, maxCdmaLevel:I
const-string v2, "StatusBarPolicy"
new-instance v2, Ljava/lang/StringBuilder;
invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
const-string v3, "cdmaLevel:"
invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v2
invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v2
const-string v3, ";max:"
invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v2
invoke-virtual {v2, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v2
invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v2
invoke-static {v4, v2}, Landroid/util/Slog;->v(Ljava/lang/String;Ljava/lang/String;)I
.line 2457
if-le v0, v1, :cond_0
.line 2459
move v0, v1
.line 2460
const-string v2, "StatusBarPolicy"
new-instance v2, Ljava/lang/StringBuilder;
invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
const-string v3, "cdmaLevel > maxCdmaLevel, assign cdmaLevel= "
invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v2
invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v2
invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v2
invoke-static {v4, v2}, Landroid/util/Slog;->d(Ljava/lang/String;Ljava/lang/String;)I
.line 2462
:cond_0
if-gez v0, :cond_1
.line 2464
const/4 v0, -0x1
.line 2465
const-string v2, "StatusBarPolicy"
new-instance v2, Ljava/lang/StringBuilder;
invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
const-string v3, "cdmaLevel < 0, cdmaLevel= "
invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v2
invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v2
invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v2
invoke-static {v4, v2}, Landroid/util/Slog;->d(Ljava/lang/String;Ljava/lang/String;)I
.line 2469
:cond_1
return v0
.end method