So, I started off thinking that this would be a very straight forward and easy thing to do. Boy was I wrong. hah.. Basically, on the HTC EVO line, it went something like this
Decompile Phone.apk, change a few things in smali and add the appropriate values in arrays.xml and hope for the best. I quickly discovered that on the GS3, things didn't work out quite in the same way.
First, you decompile SecPhone.apk
Navigate to /res/values-en-rUS/arrays.xml
To get our Roam Only option to show up, this is the file we're going to edit. You can either do a quick search for "Sprint Only" or just look a little bit below, it's pretty much right there at:
Go ahead and add your Roam Only line[s]:
I chose to add multiple lines for testing purposes but you can choose to do only one if you're confident this won't be much trouble :P
Next we'll have to add the values that our options will point to, which is directly below the roaming_mode_entries section:
Go ahead and add your value[s] after 1:
I added as many as I did for the first one, so it went all the way up to 5 in my case. Hey, you never know! I was hoping at least one of them would work.
This was the easy part, now the part I'm actually stuck on.
Navigate to /com/android/phone/ Now my original theory was to look for files that were similar in structure to the EVO which I found under CdmaSystemSelectListPreference$MyHandler and CdmaSystemSelectListPreference and go from there. I was either wrong in this assumption or not doing something right because no amount of changes I made to them had any effect on roaming. The EVO used slightly different files, which were named CdmaRoamingSelectListPreference and CdmaRoamingSelectListPreference$MyHandler respectively. The first two files were similar enough that the changes made on the evo could also be made here, which are:
In CdmaSystemSelectListPreference Search for:
const/4 v2, 0x3
Now, yours may say something slightly different, like pswitch_1, but it is around a group of switches, like this:
const/4 v2, 0x2
const/4 v2, 0x3
const/4 v2, 0x4
The middle one is what we're focused on, so I changed it from 0x3 to 0x1 like on the EVO. Easy enough right? Save and close that then navigate to the second file labeled CdmaSystemSelectListPreference$MyHandler.
Search for that same block of switches:
if-eqz v2, :cond_34
const/4 v3, 0x2
if-eq v2, v3, :cond_34
const/4 v3, 0x3
if-eq v2, v3, :cond_34
const/4 v3, 0x4
if-ne v2, v3, :cond_54
Yours may look slightly different with cond_ and such, but the same block should be present. The middle one again is what we're focused on. Change it from 0x3 to 0x1 like on the EVO then save and close. These two edits along with the arrays.xml enabled Roam Only on the EVO. Fairly simple right? Well, on this phone they do absolutely nothing. So after hours of playing around with different values, I decided to look elsewhere, namely the files labeled "Roaming" in the /com/android/phone/ folder. There are a lot of them, but we can safely ignore most of the ones that don't look like they have anything to do with selecting Roaming preferences. For example: RoamingAutoDialOption and so forth. Now, these files seem like they are not cdma specific so that's why I never bothered to look at them before, but upon further inspection, there are some cdma elements in them.
These files are what I have narrowed it down to and have been working on. Problem is there are a ton of things to change in here and while I have tried to change some, it has resulted in phone force closes. Bad right? Not necessarily. It's given me more than the first two files did with all the changes I made to those! So I'm guessing that with the right edits to one or more of these files, we can get Roam Only to work.
So there you have it XDA.