David Dee for inspiring me to mod my phone

grgsiocl for the actual mod

Diamondback for his critical and wonderful integrated developing environment, Virtuous Ten Studio (aka VTS)...thus NO APKTOOL COMMAND LINE REQUIRED. YES. BE HAPPY.

efrant for the helpful ADB clarifications

Chainfire for his wonderful and free adbd insecure app

David Dee, Phoneguy589, psenseny: the three people who liked my post when I said I would write a guide about this.

If you know how to decompile, save the signature, edit XMLs, and recompile, just follow the instructions in bold red.

Making a Nandroid, setting up adbd insecure for those on stock kernel, and preparing VTS for use!

READ THIS WHOLE TUTORIAL ONCE AND MAKE SURE YOU UNDERSTAND IT BEFORE ACTUALLY STARTING IT. Ask me before you do something you don't know! Root required. Why: we need to edit files in the /system partition of Android. Only root users will be able to do that. Make a Nandroid backup right now (either using the wonderful Orange Backup app or reboot to recovery and make it). I wasn't joking. Seriously, make a Nandroid backup right now. If you have the stock kernel (or any kernel that is "secure" [i.e. ro.secure=1 in your build.prop]), then install adbd insecure onto your phone. Why: expediency (i.e. fewer commands to type). VTS will be using ADB, the Android Debugging Bridge, to copy and paste files from our computer to our phone. If you are rooted + stock kernel, ADB runs in a "secure" mode that will make us jump through some hoops to copy files. Your phone has a build.prop file, located in /system. It has a line in there called ro.secure; if it is ro.secure=1, adb will run in this annoying secure mode (EVEN IF YOU ARE ROOTED). Adbd insecure will ignore that ro.secure=1 setting and force adbd to run insecure (get it? adbd insecure is the name of the app? Chainfire, you so clever!) Now, install Virtuous Ten Studios (VTS) Why: We'll be using VTS exclusively to decompile, edit the XML, and recompile. You will NOT be writing a single line of code into a command prompt or anything. Thank you, modern software. Read the tutorials gratefully written by Diamondback, et al. They're on the website linked in the link in the step above. You didn't read them, did you? Jerk. lol, jk. But, seriously, read them. It will make VTS seem not so foreign and scary! Enable Settings -> USB debugging on your phone. Run the adbd insecure app on your phone. Check "Enable insecure adbd." Plug your phone into your computer. Open VTS. Then "File" -> "Open VTS Settings". Go to "External Tools" -> "ApkTool". Click "Add single framework". Why: long answer here, haha. APKs are zip files, but if you simply unzipped them and opened an XML file, you'd get garbage. Unreadable junk! That's because the APK has been COMPILED. It was a collection of folders, then it was compiled (which, IMO, just means it was changed into Android-readable-code). We need Windows-readable-code. So, we must decompile the APK. Then we shall see Windows-readable-code organized into neat little folders. But, to change from Android-readable-code to Windows-readable-code, we need some extra files. Namely, your framework-res.apk. It contains some instructions or random junk (no idea what exactly) that will allow us to decompile SystemUI.apk. Give your framework a tag. It's just a name that you can remember. Framework-res.apks are specific to each phone and each ROM, so if you did LOTS of theming, the tag would be useful in recalling which framework-res.apk this is! Click OK. Then, click the down arrow next to Remote File. Open the Framework folder and highlight "framework-res.apk." Then click "Import." It'll take 15 or so seconds. Click OK after the framework installs (you'll see it appear in your window!).

Modifying SystemUI.apk to remove the brightness bar

Let's actually do the mod now, eh? Click File in VTS and click "New Project." Why: Solutions are like "folders" and Projects are like "files" in VTS. It's just to keep you organized. We're going to be editing ONE file, so we'll make ONE solution and inside that solution will be ONE project. Make sure Apk-Project is highlighted on the "Project" tab. Give the Project and Solution a name; doesn't matter what. Click Apk-Tool on the left. Inside the framework tag box, type in the name you gave your framework. Or select it from the drop-down menu; whatever works for you. Click Smali on the left. Choose API Level "4.1 Jelly Bean" Why: we aren't editing Smali (a different kind of code, besides XML), but it can't hurt, right? Go to Build on the left. Make sure "Sign output file via the following method" is checked and Select "Keep old signature (not recommended)". It's not recommended because sometimes it can cause problems; but, it is the best option for system APKs (not user apks, like Pandora.apk). Why: every app has a signature verifying that it is made by this developer (and not some hacker). Think of a signature as a trip-wire for zipping and compiling APKs. If we do either of those, the signature will go crazy; if you have a "crazy"/tripped signature, your phone will be stuck on the boot logo. So, APKs are basically zip files; the signature is inside both the META-INF folder and AndroidManifest.xml file. Again, these files are tripped/changed if you unzip or re-zip or decompile or re-compile your APK (very sensitive!); you don't even have to open them and they will get changed! Thus, VTS, after we recompile, will insert the original META-INF folder and AndroidManifest.xml file (that it backed up when it pulled the APK) back into the now-modified APK. Go to Import on the left. Click the "..." button on the right. Click the down arrow next to Remote file. Open the System folder. BEHOLD the wonderful list of all the system apps installed on your phone. Scrooooooollllll down to SystemUI. apk. Select it and click import. Click "OK" to begin decompiling SystemUI.apk Wait about 20 seconds. You should be greeted with a set of folders called assets, res, and smali, as well as AndroidManifest.XML, apktook.yml, and buildevents. Open res -> layout -> tw_status_bar_expanded.xml by DOUBLE-CLICKING it. WARNING: there are about 50 different folders that are called layout-blah and 50 different XML files that have "tw" and "status_bar" there. Make sure you open the right file. You should get some nice XML code at the bottom. Add exactly this : Code: android:visibility="gone" here (it's colored in red; scroll right to see it!):

Code: <?xml version="1.0" encoding="utf-8"?> <FrameLayout android:id="@id/notification_panel" android:background="@drawable/back" android:paddingTop="@dimen/notification_panel_padding_top" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_marginLeft="@dimen/notification_panel_margin_left" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui"> <FrameLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_marginBottom="@dimen/close_handle_underlap"> <include android:layout_width="fill_parent" android:layout_height="@dimen/tw_notification_panel_header_height" layout="@layout/tw_status_bar_expanded_header" /> <com.wanam.systemui.quickpanel.PowerWidget android:id="@id/exp_power_stat" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/notification_panel_header_height" /> <HorizontalScrollView android:id="@id/quicksetting_scroller" android:scrollbars="none" android:layout_width="wrap_content" android:layout_height="@dimen/quick_setting_button_height" android:layout_marginTop="@dimen/tw_notification_panel_header_height"> <com.android.systemui.statusbar.policy.quicksetting.QuickSettingPanel android:orientation="horizontal" android:id="@id/quicksetting_container" android:visibility="gone" android:layout_width="wrap_content" android:layout_height="wrap_content" android:divider="@drawable/tw_black_bg" android:showDividers="middle" /> </HorizontalScrollView> <ScrollView android:id="@id/scroll" android:fadingEdge="none" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_marginTop="@dimen/notification_panel_quicksettingbtn_height" android:overScrollMode="ifContentScrolls"> <LinearLayout android:orientation="vertical" android:id="@id/scrollCart" android:layout_width="fill_parent" android:layout_height="wrap_content"> <LinearLayout android:orientation="vertical" android:id="@id/brightness_controller" android:visibility="gone" android:background="#ff000000" android:layout_width="fill_parent" android:layout_height="56.0dip"> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="1.0dip"> <ImageView android:id="@id/brightness_icon" android:clickable="true" android:layout_width="25.0dip" android:layout_height="fill_parent" android:layout_marginLeft="13.0dip" android:src="@drawable/ic_sysbar_brightness" android:contentDescription="@string/accessibility_brightness_icon" /> <FrameLayout android:id="@id/brightness_group" android:layout_width="fill_parent" android:layout_height="fill_parent"> <com.android.systemui.statusbar.policy.ToggleSlider android:id="@id/brightness" android:layout_width="fill_parent" android:layout_height="fill_parent" systemui:text="@string/status_bar_settings_auto_brightness_label" /> <com.android.systemui.statusbar.policy.ToggleSlider android:id="@id/auto_brightness" android:layout_width="fill_parent" android:layout_height="fill_parent" systemui:text="@string/status_bar_settings_auto_brightness_label" /> </FrameLayout> </LinearLayout> <View android:background="#ff091a24" android:layout_width="fill_parent" android:layout_height="1.0dip" /> </LinearLayout> <LinearLayout android:orientation="vertical" android:id="@id/noNotificationsTitle" android:focusable="true" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:textSize="@dimen/status_bar_expanded_notification_category_text_size" android:textStyle="bold" android:textColor="@color/notification_category_color" android:gravity="left|center" android:id="@id/noNotificationsText" android:paddingLeft="11.0dip" android:layout_width="fill_parent" android:layout_height="@dimen/status_bar_expanded_notification_category_height" android:text="@string/status_bar_no_notifications_title" /> </LinearLayout> <LinearLayout android:orientation="vertical" android:id="@id/onGoingCart" android:background="#ff293945" android:focusable="true" android:visibility="gone" android:layout_width="fill_parent" android:layout_height="@dimen/status_bar_expanded_notification_category_height"> <TextView android:textSize="@dimen/status_bar_expanded_notification_category_text_size" android:textStyle="bold" android:textColor="@color/notification_category_color" android:gravity="left|center" android:id="@id/onGoingNotificationText" android:paddingLeft="11.0dip" android:layout_width="wrap_content" android:layout_height="fill_parent" android:text="@string/status_bar_ongoing_events_title" /> </LinearLayout> <com.android.systemui.statusbar.policy.NotificationRowLayout android:id="@id/onGoingItems" android:layout_width="fill_parent" android:layout_height="wrap_content" systemui:rowHeight="@dimen/tw_notification_row_min_height" /> <LinearLayout android:orientation="vertical" android:id="@id/notificationCart" android:background="#ff293945" android:visibility="gone" android:layout_width="fill_parent" android:layout_height="@dimen/status_bar_expanded_notification_category_height"> <RelativeLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:textSize="@dimen/status_bar_expanded_notification_category_text_size" android:textStyle="bold" android:textColor="@color/notification_category_color" android:gravity="left|center" android:id="@id/latestNotificationText" android:paddingLeft="11.0dip" android:layout_width="180.0dip" android:layout_height="fill_parent" android:text="@string/status_bar_latest_events_title" android:layout_alignParentLeft="true" /> <TextView android:textSize="@dimen/status_bar_expanded_notification_clear_button_text_size" android:textColor="@color/tw_status_bar_clear_btn_text" android:gravity="center" android:id="@id/clear_all_button" android:background="@drawable/tw_btn_default_small" android:padding="0.100000024dip" android:focusable="true" android:clickable="true" android:layout_width="@dimen/status_bar_expanded_clear_button_width" android:layout_height="fill_parent" android:layout_marginRight="4.0dip" android:text="@string/status_bar_clear_all_button" android:layout_alignParentRight="true" android:contentDescription="@string/accessibility_clear_all" /> </RelativeLayout> </LinearLayout> <com.android.systemui.statusbar.policy.NotificationRowLayout android:id="@id/notificationItems" android:layout_width="fill_parent" android:layout_height="wrap_content" systemui:rowHeight="@dimen/tw_notification_row_min_height" /> <com.android.systemui.statusbar.policy.NotificationRowLayout android:id="@id/latestItems" android:layout_width="fill_parent" android:layout_height="wrap_content" systemui:rowHeight="@dimen/tw_notification_row_min_height" /> </LinearLayout> </ScrollView> </FrameLayout> <com.android.systemui.statusbar.phone.CloseDragHandle android:layout_gravity="bottom" android:orientation="vertical" android:id="@id/close" android:layout_width="fill_parent" android:layout_height="@dimen/tw_close_handle_height"> <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent"> <ImageView android:layout_gravity="bottom" android:layout_width="fill_parent" android:layout_height="@dimen/tw_close_handle_height" android:src="@drawable/tw_status_bar_close" android:scaleType="fitXY" /> <TextView android:textAppearance="@style/TextAppearance.StatusBar.Expanded.Network" android:gravity="center" android:layout_gravity="bottom" android:id="@id/carrier_label" android:layout_width="fill_parent" android:layout_height="@dimen/tw_close_handle_height" android:layout_marginBottom="10.0dip" /> </RelativeLayout> </com.android.systemui.statusbar.phone.CloseDragHandle> </FrameLayout> Then, DO NOT TOUCH ANYTHING ELSE in the XML file. Unless you're feeling adventurous? Click "Push All" on the top. If you did it right, it shall ask you "Do you want to save changes?" Click yes. Wait 2 minutes while it re-compiles and pushes the APK to /system/app . If all went well, your screen will flicker and you'll get the original wallpaper back. No worries. REBOOT YOUR PHONE (this will reload SystemUI.apk, disable adbd insecure, and put /system back in a read-only state: all good things!) and ENJOY NO BRIGHTNESS BAR.

Hi. I'm pretty fresh to Android, but I've already fallen in love with it. After getting the courage to root, I've found my phone as customizable as I want. If you want to move past requesting developers to edit this or that for you or just want to learn more about editing neat system files, then this guide is for you.I will be providing arationale for each step; you don't need to read the rationale to make this work, but kittens will die if you don't. And, if you understandit all works, you'll be able to mod/edit any APK you ever find!Made possible with help from:So, want to make this,look like this:This mod is for US-based Galaxy S3's running 4.1.1. I'm concurrently running this with David Dee's 23 toggle mod, so no problems there. It might work in other phones, too, but I haven't tested them. Of course, everything you do is your own responsibility. I take no ownership of your issues, but I will help if I can!For the rest of us, we'll be using the user-friendly, fully GUI Virtuous Ten Studio . First, we'll SystemUI.apk. Decompile. Edit XML. Recompile. Push modded SystemUI.apk and finally restart.Questions?