[EVO 4G Themes and Apps] nivron:
Update: Since I have moved on to the Epic 4G Touch, I created a thread over there that describes how to do it for that phone.

The E4GT is a Gingerbread ROM, so if you want a detailed set of instructions for Gingerbread ROMs, you can try that thread out. You will still need to search for and replace the data mentioned in this thread, but the instructions for extracting the classes.dex out of SystemUI.apk and putting them back are the same.

Disclaimer: I have only (successfully) tested this with Koni's ELITE Series II ROM. I believe this to be a fairly easy fix for most Sense ROMs, and is likely portable to any CDMA ROM initially provided by HTC. I also searched the forums and didn't see a walkthrough like this, so I'm putting on my flame-resistant suit.

I take no responsibility for what dissatisfaction or damages to your phone this causes. It may, in fact, set your house on fire or cause you to always lose at Yahtzee!

Credits:

Calk for pointing me in the right direction!!!

The brave XDA members who try these instructions and report their success or failure!!!

XDA for being a great source of information!!!

XDA members for thinking outside of the box!!!

Background: One of the main things I like about CyanogenMod is the fact that it shows when your signal is on 3G/1X. Calkulin's EViO ROM also has the ability to show 3G/1X. In a thread discussing the signal indicator in the status bar, Calk mentioned that the secret lies in HtcCdmaStatusBar.smali in the services.jar file. I've never really done any modifications before, besides trying to hack the framework-res.apk file (aimlessly) in this pursuit before I saw Calk's post.

This mod relies on the assumption that your ROM developer has not deleted any of the 1x files in the ROM. The developer CAN theme or otherwise change the images as long as the file names remain the same.

WARNING!! If you have already performed mods to your ROM (new status bar stuff, transparancies, etc), it's likely you already have a modified services.jar file. In this case, you NEED to use step 1b to pull the services.jar file from your phone. If you do not, it is quite likely that your pre-existing mods will either break, or your phone may bootloop, etc.

Now to the good stuff.

What you need to perform this mod:

1. A HTC Sense ROM ZIP file, or a phone running a Sense ROM -- AOSP already has the correct indicators.

2. The Java SDK -- So you can run Smali.

3. Smali/Baksmali -- So you can decompile/compile the classes.dex file.

4. Android SDK -- To push/pull files from your phone (adb only).

Ease Of Use Tip: Install Java SDK first, then Android SDK (if you need adb). Download the smali files (smali-1.2.6.jar and baksmali-1.2.6.jar at the time of this writing) to a new "working" folder where we can do our magic.

Instructions:

1a. [If you are using a base Sense ROM ZIP File]: Use 7zip/WinRAR/WinZip to open the ROM ZIP file. Navigate to system\framework and extract services.jar to your "working" folder.

1b. [If you want to grab your services.jar from your running phone]: Use adb to pull services.jar to your working folder. Example: adb pull /system/framework/services.jar C:\Working\services.jar To avoid problems, ONLY USE adb to pull/push services.jar. Phone apps may cause unknown issues.

2. Open services.jar in 7zip/WinRAR/WinZip (it's really a ZIP file) and extract classes.dex to your "working" folder.

3. Go to a command prompt in your "working" folder and run the following command: java -jar baksmali-1.2.6.jar -o output/ classes.dex

4. Browse to your "working" folder and see that there is now an "output" folder inside, with other subfolders. Browse to "output"\com\android\server\status.

5. Edit the file named HtcCdmaStatusBar.smali and look for the following text. The key is to search for "getDataNetworkIconList_1x" to make sure you don't change the wrong icons. The line in bold is the problem:

.method public static final getDataNetworkIconList_1x()[I
.registers 1

.prologue
.line 308
[B] sget-object v0, Lcom/android/server/status/HtcCdmaStatusBar;->sDataNetType_3g_cdma:[I[/B]

return-object v0
.end method

6. Change that line to say sget-object v0, Lcom/android/server/status/HtcCdmaStatusBar;->sDataNetType_1x:[I

7. Save HtcCdmaStatusBar.smali.

8. Go back to your command prompt and change to your "working" folder and issue the following command: java -jar smali-1.2.6.jar output/ -o newclasses.dex

9. If there weren't any errors, go ahead and rename the original classes.dex to classes.old and rename newclasses.dex to classes.dex.

10. Use 7zip/WinRAR/WinZip and drag your new classes.dex file into services.jar (replacing the old one).

11. Push the new file to your phone. Run the following commands from a command prompt in your "working" folder. NOTE: The last command will reboot your phone. To avoid problems, ONLY USE adb to pull/push services.jar. Phone apps may cause unknown issues.

a. adb remount

b. adb push services.jar /system/framework

c. adb shell reboot

The first boot after following step 11 may take a really long time. The phone likely needs to reprocess the dalvik cache because of the services.jar change. Please be patient while this occurs. Thanks snovvman for that tip.

For those of you on ELITE Series II ***BASE ONLY, NO MODS***, I am attaching an already updated services.jar file. It is currently named elite-services.zip. You must rename it to services.jar before you push the file, or rename it in your "adb push" command.

Please let me know whether or not this worked for you. I'd like to make a list of ROMs (with applicable mods) this works for or doesn't work for.

I will do whatever I can to help if you are struggling. :) If there's something you don't understand, please let me know. I can update the instructions if I accidentally wrote something wrong.