[MOD] status bar bluetooth/silent toggles improved - update 10/23/2010

Search This thread

untermensch

Senior Member
Apr 4, 2009
480
622
Portland
s0niqu3 brought it to my attention how much the status bar bluetooth toggle
sucked so I changed the onClick method to toggle the bluetooth state instead
of opening settings to the bluetooth page

this is the replacement method for com/android/server/status/StatusBarService$31
which is in the services file in framework.

Code:
.method public onClick(Landroid/view/View;)V
    .registers 7
    .parameter "v"

    .prologue
    const-string v1, "StatusBar"

    iget-object v3, p0, Lcom/android/server/status/StatusBarService$31;->this$0:Lcom/android/server/status/StatusBarService;

    iget-object v3, v3, Lcom/android/server/status/StatusBarService;->mContentResolver:Landroid/content/ContentResolver;

    const-string v4, "airplane_mode_on"

    const/4 v5, 0x0

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

    move-result v2

    if-nez v2, :exit

    invoke-static {}, Landroid/bluetooth/BluetoothAdapter;->getDefaultAdapter()Landroid/bluetooth/BluetoothAdapter;

    move-result-object v0

    if-eqz v0, :exit
	
    const/4 v5, 0x1
	
    const-string v3, "bluetooth"

    invoke-static {v3}, Landroid/os/ServiceManager;->checkService(Ljava/lang/String;)Landroid/os/IBinder;

    move-result-object v3

    invoke-static {v3}, Landroid/bluetooth/IBluetooth$Stub;->asInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetooth;

    move-result-object v2
	
    invoke-interface {v2}, Landroid/bluetooth/IBluetooth;->getBluetoothState()I

    move-result v3

    const/16 v4, 0xc

    if-ne v3, v4, :toggleOn
	
    :toggleOff
	
    const-string v4, "Disabling Bluetooth"

    invoke-static {v1, v4}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I
	
    invoke-interface {v2, v5}, Landroid/bluetooth/IBluetooth;->disable(Z)Z

    goto :exit

    :toggleOn
	
    const/16 v4, 0xa

    if-ne v3, v4, :exit
	
    const-string v4, "Enabling Bluetooth"

    invoke-static {v1, v4}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I

    invoke-interface {v2, v5}, Landroid/bluetooth/IBluetooth;->enable(Z)Z
	
    :exit
	
    return-void
	
.end method

I added flashables to this post use the stock updater to install, these should
be compatible with any JI6 based ROM because I don't think there are a lot
of mods for /system/framework/services.*. I also killed the battery full notification.

EDIT:

added 3 state toggle to the silent button so now you can toggle from Ringer on --> Vibrate --> Silent

below is the replacement onClick method com/android/server/status/StatusBarService$33
which is in the services file in framework.

Code:
.method public onClick(Landroid/view/View;)V
    .registers 7
    .parameter "v"

    .prologue
    const/4 v2, 0x0
	
    const/4 v3, 0x1
	
    const/4 v4, 0x2

    .line 3641
    iget-object v0, p0, Lcom/android/server/status/StatusBarService$33;->this$0:Lcom/android/server/status/StatusBarService;

    iget-boolean v0, v0, Lcom/android/server/status/StatusBarService;->mSilentStatus:Z

    if-nez v0, :cond_10

    .line 3642
    iget-object v0, p0, Lcom/android/server/status/StatusBarService$33;->this$0:Lcom/android/server/status/StatusBarService;

    iget-object v0, v0, Lcom/android/server/status/StatusBarService;->mContentResolver:Landroid/content/ContentResolver;

    const-string v1, "driving_mode_on"

    invoke-static {v0, v1, v2}, Landroid/provider/Settings$System;->putInt(Landroid/content/ContentResolver;Ljava/lang/String;I)Z

    .line 3646
    :cond_10
    iget-object v0, p0, Lcom/android/server/status/StatusBarService$33;->this$0:Lcom/android/server/status/StatusBarService;

    iget-object v0, v0, Lcom/android/server/status/StatusBarService;->mContext:Landroid/content/Context;

    const-string v1, "audio"

    invoke-virtual {v0, v1}, Landroid/content/Context;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Landroid/media/AudioManager;

    iget-object v1, p0, Lcom/android/server/status/StatusBarService$33;->this$0:Lcom/android/server/status/StatusBarService;

    iget v1, v1, Lcom/android/server/status/StatusBarService;->mSoundProfile:I

    if-eqz v1, :ringerOn
	
    if-eq v1, v4, :vibrate

    if-eq v1, v3, :ringerOff

    :ringerOn

    move v1, v4
	
    :goto_23
    invoke-virtual {v0, v1}, Landroid/media/AudioManager;->setRingerMode(I)V

    .line 3648
    return-void

    :ringerOff
	
    move v1, v2
	
    goto :goto_23

    :vibrate
	
    	iget-object v1, p0, Lcom/android/server/status/StatusBarService$33;->this$0:Lcom/android/server/status/StatusBarService;

	iget-object v1, v1, Lcom/android/server/status/StatusBarService;->mContext:Landroid/content/Context;

    const-string v2, "vibrator"

    invoke-virtual {v1, v2}, Landroid/content/Context;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;

    move-result-object v1

    check-cast v1, Landroid/os/Vibrator;

    const-wide/16 v2, 0x32

    invoke-virtual {v1, v2, p3}, Landroid/os/Vibrator;->vibrate(J)V	

    const/4 v1, 0x1
	
    goto :goto_23

.end method

replacement method for StatusBarService.smali, this enables the 3 icons for the silent button.

you also have to add the image resource to twframework-res.apk and a line in public.xml

Code:
<public type="drawable" name="quick_panel_icon_vibrate" id="0x020200d8" />

Code:
.method private prepareQuickPanelSettingIcon(I)V
    .registers 7
    .parameter "mask"

    .prologue
    .line 1344
    const/4 v2, 0x0

    .line 1345
    .local v2, textColor:I
    const/4 v0, 0x0

    .line 1346
    .local v0, btnTextView:Landroid/widget/TextView;
    const/4 v1, 0x0

    .line 1348
    .local v1, settingIcon:Landroid/graphics/drawable/Drawable;
    packed-switch p1, :pswitch_data_c6

    .line 1400
    :goto_6
    :pswitch_6
    invoke-direct {p0, v0, v1, v2}, Lcom/android/server/status/StatusBarService;->updateQuickPanelSettingIcon(Landroid/widget/TextView;Landroid/graphics/drawable/Drawable;I)V

    .line 1401
    return-void

    .line 1350
    :pswitch_a
    iget-object v0, p0, Lcom/android/server/status/StatusBarService;->mWiFiBtn:Landroid/widget/TextView;

    .line 1352
    iget-boolean v3, p0, Lcom/android/server/status/StatusBarService;->mWiFiStatus:Z

    if-eqz v3, :cond_2a

    .line 1353
    iget-object v3, p0, Lcom/android/server/status/StatusBarService;->mContext:Landroid/content/Context;

    invoke-virtual {v3}, Landroid/content/Context;->getResources()Landroid/content/res/Resources;

    move-result-object v3

    const v4, 0x2020062

    invoke-virtual {v3, v4}, Landroid/content/res/Resources;->getDrawable(I)Landroid/graphics/drawable/Drawable;

    move-result-object v1

    .line 1354
    const v2, -0xff8b34

    .line 1355
    iget-object v3, p0, Lcom/android/server/status/StatusBarService;->mWiFiBtn:Landroid/widget/TextView;

    const-string v4, "WI-FI(ON)"

    invoke-virtual {v3, v4}, Landroid/widget/TextView;->setText(Ljava/lang/CharSequence;)V

    .line 1360
    :goto_27
    iget-object v0, p0, Lcom/android/server/status/StatusBarService;->mWiFiBtn:Landroid/widget/TextView;

    .line 1361
    goto :goto_6

    .line 1357
    :cond_2a
    iget-object v3, p0, Lcom/android/server/status/StatusBarService;->mContext:Landroid/content/Context;

    invoke-virtual {v3}, Landroid/content/Context;->getResources()Landroid/content/res/Resources;

    move-result-object v3

    const v4, 0x202005f

    invoke-virtual {v3, v4}, Landroid/content/res/Resources;->getDrawable(I)Landroid/graphics/drawable/Drawable;

    move-result-object v1

    .line 1358
    const/4 v2, -0x1

    goto :goto_27

    .line 1364
    :pswitch_39
    iget-object v0, p0, Lcom/android/server/status/StatusBarService;->mBTBtn:Landroid/widget/TextView;

    .line 1366
    iget-boolean v3, p0, Lcom/android/server/status/StatusBarService;->mBTStatus:Z

    if-eqz v3, :cond_50

    .line 1367
    iget-object v3, p0, Lcom/android/server/status/StatusBarService;->mContext:Landroid/content/Context;

    invoke-virtual {v3}, Landroid/content/Context;->getResources()Landroid/content/res/Resources;

    move-result-object v3

    const v4, 0x202005d

    invoke-virtual {v3, v4}, Landroid/content/res/Resources;->getDrawable(I)Landroid/graphics/drawable/Drawable;

    move-result-object v1

    .line 1368
    const v2, -0xff8b34

    goto :goto_6

    .line 1370
    :cond_50
    iget-object v3, p0, Lcom/android/server/status/StatusBarService;->mContext:Landroid/content/Context;

    invoke-virtual {v3}, Landroid/content/Context;->getResources()Landroid/content/res/Resources;

    move-result-object v3

    const v4, 0x202005c

    invoke-virtual {v3, v4}, Landroid/content/res/Resources;->getDrawable(I)Landroid/graphics/drawable/Drawable;

    move-result-object v1

    .line 1371
    const/4 v2, -0x1

    .line 1373
    goto :goto_6

    .line 1376
    :pswitch_5f
    iget-object v0, p0, Lcom/android/server/status/StatusBarService;->mSoundBtn:Landroid/widget/TextView;

    .line 1378
    iget v3, p0, Lcom/android/server/status/StatusBarService;->mSoundProfile:I

    const/4 v2, 0x2

    if-eq v3, v2, :cond_8c

    const/4 v2, 0x1

    if-eq v3, v2, :cond_7a

    .line 1379
    iget-object v3, p0, Lcom/android/server/status/StatusBarService;->mContext:Landroid/content/Context;

    invoke-virtual {v3}, Landroid/content/Context;->getResources()Landroid/content/res/Resources;

    move-result-object v3

    const v4, 0x20200b3

    invoke-virtual {v3, v4}, Landroid/content/res/Resources;->getDrawable(I)Landroid/graphics/drawable/Drawable;

    move-result-object v1

    .line 1380
    const v2, -0xff8b34

    goto :goto_6

    :cond_7a
    iget-object v3, p0, Lcom/android/server/status/StatusBarService;->mContext:Landroid/content/Context;

    invoke-virtual {v3}, Landroid/content/Context;->getResources()Landroid/content/res/Resources;

    move-result-object v3

    const v4, 0x20200d8

    invoke-virtual {v3, v4}, Landroid/content/res/Resources;->getDrawable(I)Landroid/graphics/drawable/Drawable;

    move-result-object v1

    .line 1380
    const v2, -0xff8b34

    goto/16 :goto_6

    .line 1382
    :cond_8c
    iget-object v3, p0, Lcom/android/server/status/StatusBarService;->mContext:Landroid/content/Context;

    invoke-virtual {v3}, Landroid/content/Context;->getResources()Landroid/content/res/Resources;

    move-result-object v3

    const v4, 0x20200b2

    invoke-virtual {v3, v4}, Landroid/content/res/Resources;->getDrawable(I)Landroid/graphics/drawable/Drawable;

    move-result-object v1

    .line 1383
    const/4 v2, -0x1

    .line 1385
    goto/16 :goto_6

    .line 1388
    :pswitch_9c
    iget-object v0, p0, Lcom/android/server/status/StatusBarService;->mGpsBtn:Landroid/widget/TextView;

    .line 1390
    iget-boolean v3, p0, Lcom/android/server/status/StatusBarService;->mGpsStatus:Z

    if-eqz v3, :cond_b4

    .line 1391
    iget-object v3, p0, Lcom/android/server/status/StatusBarService;->mContext:Landroid/content/Context;

    invoke-virtual {v3}, Landroid/content/Context;->getResources()Landroid/content/res/Resources;

    move-result-object v3

    const v4, 0x202005e

    invoke-virtual {v3, v4}, Landroid/content/res/Resources;->getDrawable(I)Landroid/graphics/drawable/Drawable;

    move-result-object v1

    .line 1392
    const v2, -0xff8b34

    goto/16 :goto_6

    .line 1394
    :cond_b4
    iget-object v3, p0, Lcom/android/server/status/StatusBarService;->mContext:Landroid/content/Context;

    invoke-virtual {v3}, Landroid/content/Context;->getResources()Landroid/content/res/Resources;

    move-result-object v3

    const v4, 0x20200b4

    invoke-virtual {v3, v4}, Landroid/content/res/Resources;->getDrawable(I)Landroid/graphics/drawable/Drawable;

    move-result-object v1

    .line 1395
    const/4 v2, -0x1

    goto/16 :goto_6

    .line 1348
    nop

    nop

    :pswitch_data_c6
    .packed-switch 0x1
        :pswitch_a
        :pswitch_39
        :pswitch_6
        :pswitch_5f
        :pswitch_6
        :pswitch_6
        :pswitch_6
        :pswitch_9c
    .end packed-switch
.end method
 

Attachments

  • quick_panel_icon_vibrate.png
    quick_panel_icon_vibrate.png
    626 bytes · Views: 966
  • JI6_deodex.zip
    971.6 KB · Views: 49
  • JI6_stock.zip
    967.9 KB · Views: 43
Last edited:

mikey98277

Senior Member
May 3, 2009
265
6
Jamestown
Sounds great, one less widget I will have to use, any way someone could make it a flashable zip so us none coders can use it?
 

untermensch

Senior Member
Apr 4, 2009
480
622
Portland
I added flashables to this thread use the stock updater to install, these should
be compatible with any JI6 based ROM because I don't think there are a lot
of mods for /system/framework/services.*. I also killed the battery full notification.
which I don't think any one will miss.
 

s0niqu3

Senior Member
Feb 23, 2005
718
391
s0niqu3 brought it to my attention how much the status bar bluetooth toggle
sucked so I changed the onClick method to toggle the bluetooth state instead
of opening settings to the bluetooth page

this is the replacement method for com/android/server/status/StatusBarService$31
which is in the services file in framework.

Code:
.method public onClick(Landroid/view/View;)V
    .registers 7
    .parameter "v"

    .prologue
    const-string v1, "StatusBar"

    iget-object v3, p0, Lcom/android/server/status/StatusBarService$31;->this$0:Lcom/android/server/status/StatusBarService;

    iget-object v3, v3, Lcom/android/server/status/StatusBarService;->mContentResolver:Landroid/content/ContentResolver;

    const-string v4, "airplane_mode_on"

    const/4 v5, 0x0

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

    move-result v2

    if-nez v2, :exit

    invoke-static {}, Landroid/bluetooth/BluetoothAdapter;->getDefaultAdapter()Landroid/bluetooth/BluetoothAdapter;

    move-result-object v0

    if-eqz v0, :exit
	
    const/4 v5, 0x1
	
    const-string v3, "bluetooth"

    invoke-static {v3}, Landroid/os/ServiceManager;->checkService(Ljava/lang/String;)Landroid/os/IBinder;

    move-result-object v3

    invoke-static {v3}, Landroid/bluetooth/IBluetooth$Stub;->asInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetooth;

    move-result-object v2
	
    invoke-interface {v2}, Landroid/bluetooth/IBluetooth;->getBluetoothState()I

    move-result v3

    const/16 v4, 0xc

    if-ne v3, v4, :toggleOn
	
    :toggleOff
	
    const-string v4, "Disabling Bluetooth"

    invoke-static {v1, v4}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I
	
    invoke-interface {v2, v5}, Landroid/bluetooth/IBluetooth;->disable(Z)Z

    goto :exit

    :toggleOn
	
    const/16 v4, 0xa

    if-ne v3, v4, :exit
	
    const-string v4, "Enabling Bluetooth"

    invoke-static {v1, v4}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I

    invoke-interface {v2, v5}, Landroid/bluetooth/IBluetooth;->enable(Z)Z
	
    :exit
	
    return-void
	
.end method

I added flashables to this post use the stock updater to install, these should
be compatible with any JI6 based ROM because I don't think there are a lot
of mods for /system/framework/services.*. I also killed the battery full notification.

Thanks again for everything you've done, glad to have so many annoying samsung bugs fixed by such awesome people in the community.

Cheers, =)
 

murse

Senior Member
Dec 20, 2008
278
28
Thanks for a fix to a very annoying issue. Noob question: which of these would I use with the Bionix. ROMs?


Sent from my SGH-T959 using XDA App
 

s0niqu3

Senior Member
Feb 23, 2005
718
391
Thanks for a fix to a very annoying issue. Noob question: which of these would I use with the Bionix. ROMs?


Sent from my SGH-T959 using XDA App

Hi,

I can't guarantee anything, but always try the JI6 deodexed version on the bionix roms first.

Cheers, =)
 

mikey98277

Senior Member
May 3, 2009
265
6
Jamestown
Not sure why but JI6 deodexed would not install in clockwork, just got stuck saying installing update, So i just had to just pull the services.jar and use root explorer and pasted it in system/framework. It hung when restarting, but then I rebooted into recovery wiped both caches and that fixed the hang issue. Works great thanks for this. One of these days I will learn some coding stuff so i can do it myself.

For those interested, that is what i had to do to get it to work on fusion1.1 with the King Klicks Kernel.
 
Last edited:

a400meter

Senior Member
Aug 22, 2009
93
23
Not sure why but it would not install in clockwork, just got stuck saying installing update, So i just had to just pull the services.jar and use root explorer and pasted it in system/framework. It hung when restarting, but then I rebooted into recovery wiped both caches and that fixed the hang issue. Works great thanks for this. One of these days I will learn some coding stuff so i can do it myself.

For those interested, that is what i had to do to get it to work on fusion1.1 with the King Klicks Kernel.


FYI, the flashable update.zip is in the download file.


EDIT: Just installed on Bionix FINAL and the bluetooth status update works great. Nice addition. Haven't tried to charge 100%, but I certainly won't miss that notification. Thanks untermensch for all of your mods!!!
 
Last edited:

gbzbar

Senior Member
Jun 18, 2010
700
384
FYI, the flashable update.zip is in the download file.


Not sure what you meant by that, As I said I tried the update.zip file and it did not work on Fusion 1.1 with KK Kernel. So I pulled the file from it and pushed it manually.

What that means is that the update.zip file that is located inside the zip you downloaded is not meant to be installed through clockwork, but instead through the stock phone recovery menu. Replace the clockwork update.zip on your internal memory with the downloaded one, and then go to the phone recovery and hit "Reinstall Packages".

I know you already installed the file manually, the clarification is more for others who may need help.
 

gbzbar

Senior Member
Jun 18, 2010
700
384
s0niqu3 brought it to my attention how much the status bar bluetooth toggle
sucked so I changed the onClick method to toggle the bluetooth state instead
of opening settings to the bluetooth page

this is the replacement method for com/android/server/status/StatusBarService$31
which is in the services file in framework.

Code:
.method public onClick(Landroid/view/View;)V
    .registers 7
    .parameter "v"

    .prologue
    const-string v1, "StatusBar"

    iget-object v3, p0, Lcom/android/server/status/StatusBarService$31;->this$0:Lcom/android/server/status/StatusBarService;

    iget-object v3, v3, Lcom/android/server/status/StatusBarService;->mContentResolver:Landroid/content/ContentResolver;

    const-string v4, "airplane_mode_on"

    const/4 v5, 0x0

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

    move-result v2

    if-nez v2, :exit

    invoke-static {}, Landroid/bluetooth/BluetoothAdapter;->getDefaultAdapter()Landroid/bluetooth/BluetoothAdapter;

    move-result-object v0

    if-eqz v0, :exit
	
    const/4 v5, 0x1
	
    const-string v3, "bluetooth"

    invoke-static {v3}, Landroid/os/ServiceManager;->checkService(Ljava/lang/String;)Landroid/os/IBinder;

    move-result-object v3

    invoke-static {v3}, Landroid/bluetooth/IBluetooth$Stub;->asInterface(Landroid/os/IBinder;)Landroid/bluetooth/IBluetooth;

    move-result-object v2
	
    invoke-interface {v2}, Landroid/bluetooth/IBluetooth;->getBluetoothState()I

    move-result v3

    const/16 v4, 0xc

    if-ne v3, v4, :toggleOn
	
    :toggleOff
	
    const-string v4, "Disabling Bluetooth"

    invoke-static {v1, v4}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I
	
    invoke-interface {v2, v5}, Landroid/bluetooth/IBluetooth;->disable(Z)Z

    goto :exit

    :toggleOn
	
    const/16 v4, 0xa

    if-ne v3, v4, :exit
	
    const-string v4, "Enabling Bluetooth"

    invoke-static {v1, v4}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I

    invoke-interface {v2, v5}, Landroid/bluetooth/IBluetooth;->enable(Z)Z
	
    :exit
	
    return-void
	
.end method

I added flashables to this post use the stock updater to install, these should
be compatible with any JI6 based ROM because I don't think there are a lot
of mods for /system/framework/services.*. I also killed the battery full notification.

First of all, great work with this fix.
Is there any way that this method could be used to change the Silent shortcut to a Vibrate shortcut? I'm not sure about others, but I personally never use Silent mode, and it bugs the hell out of me that it's so easily accessible yet useless for me.
 

mikey98277

Senior Member
May 3, 2009
265
6
Jamestown
What that means is that the update.zip file that is located inside the zip you downloaded is not meant to be installed through clockwork, but instead through the stock phone recovery menu. Replace the clockwork update.zip on your internal memory with the downloaded one, and then go to the phone recovery and hit "Reinstall Packages".

I know you already installed the file manually, the clarification is more for others who may need help.

ahh... i get it now, maybe thats why it didnt work, well I got it going anyways thanks.
 

Colt1911

Member
Oct 16, 2010
28
1
Thanks, this makes life easier.

I used RootExplorer to copy your services.odex into android's /system/framework folder. Painless and it works perfectly.

I wish the notification bar had the option to enable/disable TV out. :D
 

s0niqu3

Senior Member
Feb 23, 2005
718
391
Turns on or off in less than 2 or 3 seconds here.

Wow, that's instant compared to my phone.

My phone takes usually 10-11 seconds to turn on bluetooth, and that's totally independent of how I go about turning it on. If I use the notification toggle, or turn on directly from the settings menu, or use the default android power control widget, they all take 10-11 seconds to turn on bluetooth.

So, my guess is that maybe bluetooth on/off speed is affected by custom kernels or custom roms, or a combination of both and still unknown factors.

Honestly, I don't really mind how long it takes, I don't use bluetooth all that often, but the few times I do, the toggle has always annoyed me that it just opened bluetooth settings, so this mod is perfect for me.

Thanks again, cheers everyone, =)
 

gbzbar

Senior Member
Jun 18, 2010
700
384
Wow, that's instant compared to my phone.

My phone takes usually 10-11 seconds to turn on bluetooth, and that's totally independent of how I go about turning it on. If I use the notification toggle, or turn on directly from the settings menu, or use the default android power control widget, they all take 10-11 seconds to turn on bluetooth.

So, my guess is that maybe bluetooth on/off speed is affected by custom kernels or custom roms, or a combination of both and still unknown factors.

Honestly, I don't really mind how long it takes, I don't use bluetooth all that often, but the few times I do, the toggle has always annoyed me that it just opened bluetooth settings, so this mod is perfect for me.

Thanks again, cheers everyone, =)

I have the same issue, and it started exactly when i started installing Bionix ROMs on both my phone and my wife's. I figured it was something about how he built his ROM, and just deided to live with it. It could either be Bionix orJAC. I havent tried Bionix with stock kernel to try and troubleshoot.
 

untermensch

Senior Member
Apr 4, 2009
480
622
Portland
I updated the OP files, you can now toggle from Ringer On --> Vibrate --> Silent

seems like the button icon should be changed to 3 state also for a more finished
look.
 

s0niqu3

Senior Member
Feb 23, 2005
718
391
I updated the OP files, you can now toggle from Ringer On --> Vibrate --> Silent

seems like the button icon should be changed to 3 state also for a more finished
look.

Sounds great, thanks!

Would you mind posting the code to make the silent/vibrate change manually?

Thanks again, cheers, =)