4.2.2 Style Stausbar for Samsung 4.1.2 ROM
(This tutorial is originally made for SGSA but it should work with all samsung 4.1.2 ROMs)
Before we begin let me give credit to original author of this mod @SpaceCaker i'm just gonna tell you how to port it to Samsung JB 4.1.2 ROM.
(SpaceCaker's original Thread here)
Note: Throughout the tutorial we'll travel sequentially, i mean when i ask you to search for something and you find more than two matches, then choose the immediate one which comes after previous modification.
So let's begin
- Decompile SystemUI.apk
- Navigate to res/layout
- tw_status_bar.xml
search for
Add this below itCode:<com.android.systemui.statusbar.phone.PhoneStatusBarView android:orientation="vertical" android:id="@id/status_bar" android:background="@drawable/status_bar_background" android:focusable="true" android:fitsSystemWindows="true" android:descendantFocusability="afterDescendants" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui">
- Now search forCode:<com.android.systemui.statusbar.StatusBarServiceLRPull android:layout_width="fill_parent" android:layout_height="wrap_content">
Add this above itCode:<LinearLayout android:orientation="horizontal" android:id="@id/ticker" android:paddingLeft="6.0dip" android:animationCache="false" android:layout_width="fill_parent" android:layout_height="fill_parent">
- Save fileCode:</com.android.systemui.statusbar.StatusBarServiceLRPull>
- tw_status_bar_expanded.xml
replace
withCode:<FrameLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_marginBottom="@dimen/tw_close_handle_underlap">
below it there will be <include /> clause add this line below itCode:<LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_marginBottom="@dimen/close_handle_underlap">
below it there'll be <TextView /> add these lines below itCode:</LinearLayout>
- Now search forCode:<com.spacecaker.SpaceLayOut android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content"> <include layout="@layout/quickpanel_quick_settings_space" /> </LinearLayout> <FrameLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_marginBottom="@dimen/tw_close_handle_underlap">
and add this code above itCode:<com.android.systemui.statusbar.phone.CloseDragHandle
- Save fileCode:</com.spacecaker.SpaceLayOut>
- tw_status_bar_expanded_header.xml
search for
replace it with below codeCode:<RelativeLayout android:id="@id/settings_button" android:background="@drawable/tw_quick_panel_setting_button_bg" android:focusable="true" android:visibility="visible" android:layout_width="@dimen/status_bar_expanded_setting_width" android:layout_height="39.0dip">
- Search below forCode:<RelativeLayout android:id="@id/settings_button" android:background="@drawable/tw_quick_panel_setting_button_bg" android:focusable="true" android:visibility="invisible" android:layout_width="0.100000024dip" android:layout_height="0.100000024dip"> <ImageView android:id="@id/settings_button_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/tw_quickpanel_icon_settings" android:scaleType="center" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:contentDescription="@string/accessibility_settings_button" /> </RelativeLayout> <RelativeLayout android:background="@drawable/tw_quick_panel_setting_button_bg" android:focusable="true" android:visibility="visible" android:layout_width="@dimen/status_bar_expanded_setting_width" android:layout_height="39.0dip">
and add this above itCode:android:contentDescription="@string/accessibility_settings_button"
- Below after </RelativeLayout> add this codeCode:android:onClick="mOpenSettings"
- Save file.Code:<com.spacecaker.ButtonBurst android:id="@id/spacebuttonburst" android:layout_width="31.0dip" android:layout_height="34.0dip" android:scaleType="center" />
- Navigate to /res/values and add these lines to ids.xml
Code:<item type="id" name="spaceybeaneyheader">false</item> <item type="id" name="jbclock">false</item> <item type="id" name="spacebuttonburst">false</item> <item type="id" name="recent_app_button">false</item>
- Add these lines to end of the file Styles.xml
- Save filesCode:<style name="S3.Clear" parent="@*android:style/Widget.Button"> <item name="android:textAppearance">?android:textAppearanceSmallInverse</item> <item name="android:textColor">#ffffffff</item> <item name="android:gravity">center</item> <item name="android:background">@drawable/tw_btn_default_small</item> <item name="android:focusable">true</item> <item name="android:clickable">true</item> </style>
- Download attached files and extract them in the directory where apk is decompiled.Now compile and again decompile APK.
- Go to /res/values/public.xml and search these
- Open smali/com/spacecaker/ButtonBurst.smali and search thisCode:<public type="drawable" name="btn_tg" <public type="drawable" name="btn_toggles_normal"
replace red part with id you got fromCode:const v3, 0x7f020180
Code:<public type="drawable" name="btn_toggles_normal"
- Now find this
replace red part with id you got fromCode:const v3, 0x7f02017f
Code:<public type="drawable" name="btn_tg"
- Open smali/com/android/systemui/SystemUIService.smali and add this to end of file
Code:.method public mOpenSettings(Landroid/view/View;)V .locals 3 .parameter "v" .prologue .line 2431 new-instance v0, Landroid/content/Intent; invoke-direct {v0}, Landroid/content/Intent;-><init>()V .line 2432 const-string v1, "com.android.settings" const-string v2, "com.android.settings.Settings" invoke-virtual {v0, v1, v2}, Landroid/content/Intent;->setClassName(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent; const/high16 v2, 0x1000 invoke-virtual {v0, v2}, Landroid/content/Intent;->setFlags(I)Landroid/content/Intent; move-result-object v0 .line 2433 invoke-virtual {p0, v0}, Landroid/content/Context;->startActivity(Landroid/content/Intent;)V const-string v1, "statusbar" invoke-virtual {p0, v1}, Landroid/content/Context;->getSystemService(Ljava/lang/String;)Ljava/lang/Object; move-result-object v0 check-cast v0, Landroid/app/StatusBarManager; invoke-virtual {v0}, Landroid/app/StatusBarManager;->collapse()V .line 1720 return-void .end method .method public ProfileButton(Landroid/view/View;)V .locals 3 .parameter "v" .prologue .line 2431 new-instance v0, Landroid/content/Intent; invoke-direct {v0}, Landroid/content/Intent;-><init>()V .line 2432 const-string v1, "com.android.contacts" const-string v2, "com.android.contacts.activities.PeopleActivity" invoke-virtual {v0, v1, v2}, Landroid/content/Intent;->setClassName(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent; const/high16 v2, 0x1000 invoke-virtual {v0, v2}, Landroid/content/Intent;->setFlags(I)Landroid/content/Intent; move-result-object v0 .line 2433 invoke-virtual {p0, v0}, Landroid/content/Context;->startActivity(Landroid/content/Intent;)V const-string v1, "statusbar" invoke-virtual {p0, v1}, Landroid/content/Context;->getSystemService(Ljava/lang/String;)Ljava/lang/Object; move-result-object v0 check-cast v0, Landroid/app/StatusBarManager; invoke-virtual {v0}, Landroid/app/StatusBarManager;->collapse()V .line 1720 return-void .end method .method public camera_tile(Landroid/view/View;)V .locals 3 .parameter "v" .prologue .line 2431 new-instance v0, Landroid/content/Intent; invoke-direct {v0}, Landroid/content/Intent;-><init>()V .line 2432 const-string v1, "com.sec.android.app.camera" const-string v2, "com.sec.android.app.camera.Camera" invoke-virtual {v0, v1, v2}, Landroid/content/Intent;->setClassName(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent; const/high16 v2, 0x1000 invoke-virtual {v0, v2}, Landroid/content/Intent;->setFlags(I)Landroid/content/Intent; move-result-object v0 .line 2433 invoke-virtual {p0, v0}, Landroid/content/Context;->startActivity(Landroid/content/Intent;)V const-string v1, "statusbar" invoke-virtual {p0, v1}, Landroid/content/Context;->getSystemService(Ljava/lang/String;)Ljava/lang/Object; move-result-object v0 check-cast v0, Landroid/app/StatusBarManager; invoke-virtual {v0}, Landroid/app/StatusBarManager;->collapse()V .line 1720 return-void .end method .method public turn_off_light(Landroid/view/View;)V .locals 3 .parameter "v" .prologue .line 2431 new-instance v0, Landroid/content/Intent; invoke-direct {v0}, Landroid/content/Intent;-><init>()V .line 2432 const-string v1, "turn.off.the.lights" const-string v2, "turn.off.the.lights.LockerActivity" invoke-virtual {v0, v1, v2}, Landroid/content/Intent;->setClassName(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent; const/high16 v2, 0x1000 invoke-virtual {v0, v2}, Landroid/content/Intent;->setFlags(I)Landroid/content/Intent; move-result-object v0 .line 2433 invoke-virtual {p0, v0}, Landroid/content/Context;->startActivity(Landroid/content/Intent;)V const-string v1, "statusbar" invoke-virtual {p0, v1}, Landroid/content/Context;->getSystemService(Ljava/lang/String;)Ljava/lang/Object; move-result-object v0 check-cast v0, Landroid/app/StatusBarManager; invoke-virtual {v0}, Landroid/app/StatusBarManager;->collapse()V .line 1720 return-void .end method .method public torch_toggle(Landroid/view/View;)V .locals 3 .parameter "v" .prologue .line 2431 new-instance v0, Landroid/content/Intent; invoke-direct {v0}, Landroid/content/Intent;-><init>()V .line 2432 const-string v1, "com.teslacoilsw.flashlight" const-string v2, "com.teslacoilsw.flashlight.TeslaLEDToggle" invoke-virtual {v0, v1, v2}, Landroid/content/Intent;->setClassName(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent; const/high16 v2, 0x1000 invoke-virtual {v0, v2}, Landroid/content/Intent;->setFlags(I)Landroid/content/Intent; move-result-object v0 .line 2433 invoke-virtual {p0, v0}, Landroid/content/Context;->startActivity(Landroid/content/Intent;)V const-string v1, "statusbar" invoke-virtual {p0, v1}, Landroid/content/Context;->getSystemService(Ljava/lang/String;)Ljava/lang/Object; move-result-object v0 check-cast v0, Landroid/app/StatusBarManager; invoke-virtual {v0}, Landroid/app/StatusBarManager;->collapse()V .line 1720 return-void .end method .method public dormant_toggle(Landroid/view/View;)V .locals 3 .parameter "v" .prologue .line 2431 new-instance v0, Landroid/content/Intent; invoke-direct {v0}, Landroid/content/Intent;-><init>()V .line 2432 const-string v1, "com.android.settings" const-string v2, "com.android.settings.dormantmode.DormantmodeSettings" invoke-virtual {v0, v1, v2}, Landroid/content/Intent;->setClassName(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent; const/high16 v2, 0x1000 invoke-virtual {v0, v2}, Landroid/content/Intent;->setFlags(I)Landroid/content/Intent; move-result-object v0 .line 2433 invoke-virtual {p0, v0}, Landroid/content/Context;->startActivity(Landroid/content/Intent;)V const-string v1, "statusbar" invoke-virtual {p0, v1}, Landroid/content/Context;->getSystemService(Ljava/lang/String;)Ljava/lang/Object; move-result-object v0 check-cast v0, Landroid/app/StatusBarManager; invoke-virtual {v0}, Landroid/app/StatusBarManager;->collapse()V .line 1720 return-void .end method .method public tether_toggle(Landroid/view/View;)V .locals 3 .parameter "v" .prologue .line 2431 new-instance v0, Landroid/content/Intent; invoke-direct {v0}, Landroid/content/Intent;-><init>()V .line 2432 const-string v1, "com.android.settings" const-string v2, "com.android.settings.TetherSettings" invoke-virtual {v0, v1, v2}, Landroid/content/Intent;->setClassName(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent; const/high16 v2, 0x1000 invoke-virtual {v0, v2}, Landroid/content/Intent;->setFlags(I)Landroid/content/Intent; move-result-object v0 .line 2433 invoke-virtual {p0, v0}, Landroid/content/Context;->startActivity(Landroid/content/Intent;)V const-string v1, "statusbar" invoke-virtual {p0, v1}, Landroid/content/Context;->getSystemService(Ljava/lang/String;)Ljava/lang/Object; move-result-object v0 check-cast v0, Landroid/app/StatusBarManager; invoke-virtual {v0}, Landroid/app/StatusBarManager;->collapse()V .line 1720 return-void .end method .method public app_toggle(Landroid/view/View;)V .locals 3 .parameter "v" .prologue .line 2431 new-instance v0, Landroid/content/Intent; invoke-direct {v0}, Landroid/content/Intent;-><init>()V .line 2432 const-string v1, "com.android.settings" const-string v2, "com.android.settings.RunningServices" invoke-virtual {v0, v1, v2}, Landroid/content/Intent;->setClassName(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent; const/high16 v2, 0x1000 invoke-virtual {v0, v2}, Landroid/content/Intent;->setFlags(I)Landroid/content/Intent; move-result-object v0 .line 2433 invoke-virtual {p0, v0}, Landroid/content/Context;->startActivity(Landroid/content/Intent;)V const-string v1, "statusbar" invoke-virtual {p0, v1}, Landroid/content/Context;->getSystemService(Ljava/lang/String;)Ljava/lang/Object; move-result-object v0 check-cast v0, Landroid/app/StatusBarManager; invoke-virtual {v0}, Landroid/app/StatusBarManager;->collapse()V .line 1720 return-void .end method .method public bat_toggle(Landroid/view/View;)V .locals 3 .parameter "v" .prologue .line 2431 new-instance v0, Landroid/content/Intent; invoke-direct {v0}, Landroid/content/Intent;-><init>()V .line 2432 const-string v1, "com.android.settings" const-string v2, "com.android.settings.fuelgauge.PowerUsageSummary" invoke-virtual {v0, v1, v2}, Landroid/content/Intent;->setClassName(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent; const/high16 v2, 0x1000 invoke-virtual {v0, v2}, Landroid/content/Intent;->setFlags(I)Landroid/content/Intent; move-result-object v0 .line 2433 invoke-virtual {p0, v0}, Landroid/content/Context;->startActivity(Landroid/content/Intent;)V const-string v1, "statusbar" invoke-virtual {p0, v1}, Landroid/content/Context;->getSystemService(Ljava/lang/String;)Ljava/lang/Object; move-result-object v0 check-cast v0, Landroid/app/StatusBarManager; invoke-virtual {v0}, Landroid/app/StatusBarManager;->collapse()V .line 1720 return-void .end method .method public SpaceCakerButton(Landroid/view/View;)V .locals 3 .parameter "v" .prologue .line 2431 new-instance v0, Landroid/content/Intent; invoke-direct {v0}, Landroid/content/Intent;-><init>()V .line 2432 const-string v1, "com.android.settings" const-string v2, "com.android.settings.Settings" invoke-virtual {v0, v1, v2}, Landroid/content/Intent;->setClassName(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent; const/high16 v2, 0x1000 invoke-virtual {v0, v2}, Landroid/content/Intent;->setFlags(I)Landroid/content/Intent; move-result-object v0 .line 2433 invoke-virtual {p0, v0}, Landroid/content/Context;->startActivity(Landroid/content/Intent;)V const-string v1, "statusbar" invoke-virtual {p0, v1}, Landroid/content/Context;->getSystemService(Ljava/lang/String;)Ljava/lang/Object; move-result-object v0 check-cast v0, Landroid/app/StatusBarManager; invoke-virtual {v0}, Landroid/app/StatusBarManager;->collapse()V .line 1720 return-void .end method
That's all compile apk and push it to device.
(Torch and Sleep tiles won't work unless you install TeslaLED and Turn Off the Lights app from market)
You can refer to SpaceCaker's thread for more info and tutorial for how to add new tiles.
If you get any errors/FCs report here along with full log.
(i won't quote posts without logcat and ask for logcat, i'll simply ignore them)
Attachments
Last edited: