Attend XDA's Second Annual Developer Conference, XDA:DevCon 2014!
5,732,206 Members 43,561 Now Online
XDA Developers Android and Mobile Development Forum

Transparent Status Bar--Instructions for DIY

Tip us?
 
pendo
Old
(Last edited by pendo; 15th January 2012 at 05:42 PM.)
#1  
pendo's Avatar
Recognized Themer / Contributor - OP
Thanks Meter 762
Posts: 1,970
Join Date: Jun 2010
Location: Tulsa, OK

 
DONATE TO ME
Default Transparent Status Bar--Instructions for DIY

Disclaimer: I do not have any formal training with anything I'm covering here and it's entirely possible….dare I say probable…that I may state something incorrectly either partially or wholly (hopefully I’m not that far off). So this is just how I've come to understand things from my own self study as well as staring smali for countless hours (although I have to say the more I learn, the more I learn I don't know ). Hopefully there’s another beginning android hobbyist that finds this useful and/or inspires him to try some new things.

**These instructions apply to Mac and Linux only, due to the fact we're working with aosp source and building in windows is not supported at this time**

Enabling Translucency
I approached this a little different than I’m used to seeing in terms of a mod. Normally we start off by decompiling an apk and go from there. Since this is for an aosp rom, we have easy access to the source code and can make changes there. Now, I don’t proclaim to know java. I have very, very little programming experience, and even that is limited to an introductory C++ class I just took. But even without knowing java, you’ll have a much easier time reading java source code than you will smali. So, yes, you need to sync with aosp to use this guide. It's not hard, and there's good instructions HERE.
As an aside, my personal opinion is that anyone that a true-blue xda'er should have aosp syned...even if you have no intention of building roms. It's like an android encyclopedia. I've learned A TON just from poking around/reading though some parts. I probably comprehend < 10%, but it's easily been one of the most beneficial things I've done to further my understanding.
So now you have the source code. What we need to change is the PixelFormat for the statusbar. In froyo and gingerbread this was done in StatusBarService. It’s been changed a little in ics, although the edits remain in SystemUI. The two files I changed were StatusBar and PhoneStatusBar.

Starting in the root of your aosp working directory, the absolute path of the first file I edited is
Code:
frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/StatusBar.java
Open this in a good text editor. The PixelFormat parameter is specified in the getStatusBarHeight function. In the version I edited it is easily found on lne 124. Just search for “PixelFormat” and you’ll find it. (ignore the search return that’s part of the import statement at the beginning of the file) As soon as you get there you’ll see the problem. PixelFormat.OPAQUE. Replace OPAQUE with TRANSLUCENT. Save

Next you make similar edit in PhoneStatusBar.java. From the same directory that StatusBar.java is in, go to the phone directory and open PhoneStatusBar.java in your text editor. Now this file is much, much longer to read through. Rather than doing that (of course you can if you want) just performa search for that same text again “PixelFormat” You’ll get several returns, some of them will already have TRANSLUCENT set.

BUT...Don’t get carried away and change all the OPAQUE values. One of the search returns will be part of the function getRecentsLayoutParams (starts on line 378). The portion of code that you might be temted to change checks the PixelFormat by way of a boolean test
Code:
(opaque ? PixelFormat.OPAQUE : PixelFormat.TRANSLUCENT)
I left this alone.
Edit: After reading the entire code a little bit more, I think we could change it to
Code:
PixelFormat.TRANSLUCENT
without any ill effects, although I'm not sure what, if any, additional benefit we'd see. I have not tried.
The exact places I did change OPAQUE to TRANSLUCENT were in lines 311, and 481. That’s it for the code portion. Make sure to save your changes. Now go back to the res directory and we need to edit some xml files.

From the root of the SystemUI directory, open res/values/colors.xml. Find the entry for “status_bar_background” and change it’s value to whatever you want. In mine I’ve set it to “a6000000” which black but 35% translucent. The first 2 characters control the opacity on a scale from 0-255 where 0 is completely transparent and 255 is fully opaque. That value is then stated in hexadecimal format; e.g. 0=00, 255=ff.

*if you also want a translucent bottom menu bar, it is set in res/layout/navigation_bar.xml. Change the hex value of android:background=”ff000000” to your desired value for opacity.*

Now you should have all the edits in place for a translucent statusbar. All that’s left is to compile the apk. Before you compile SystemUI, you need to have ran the extract-files script. Only needs to be done once. Connect your phone to the computer(making sure that usb debugging is turned on) then in terminal, starting from the root of your aosp working directory:
Code:
cd device/samsung/maguro/
./extract-files.sh
Let the script finish. It will create a new vendor directory in the root of your working directory and copy several files from your phone.

Now cd back to the root of your working directory and run
Code:
. build/envsetup.sh
Note the period and space before build. This is an important step which initialized the build environment. Several new commands will be available now such as "mm" "mmm" "croot" amongst others. Type "help" (without the quotes) for a full list of the new commands available.

Next step to build your SystemUI is to run lunch. Just type "lunch" and press enter:
Code:
pendo:master pendo$ lunch

You're building on Darwin

Lunch menu... pick a combo:
     1. full-eng
     2. full_x86-eng
     3. vbox_x86-eng
     4. full_stingray-userdebug
     5. full_wingray-userdebug
     6. full_crespo-userdebug
     7. full_crespo4g-userdebug
     8. full_maguro-userdebug
     9. full_toro-userdebug
     10. full_panda-eng

Which would you like? [full-eng]
It will list the available builds. Number 8 should be for maguro-user debug. Select it and press enter. And lastly, type
Code:
make SystemUI
It will take several minutes to build, especially the first time. But once it’s done, your new SystemUI will be in out/target/product/maguro/system/app/SystemUI.apk.
The Following 14 Users Say Thank You to pendo For This Useful Post: [ Click to Expand ]
 
pendo
Old
(Last edited by pendo; 24th December 2011 at 09:38 PM.)
#2  
pendo's Avatar
Recognized Themer / Contributor - OP
Thanks Meter 762
Posts: 1,970
Join Date: Jun 2010
Location: Tulsa, OK

 
DONATE TO ME
Here is a SystemUI that I built that has a translucent statusbar. It also has a circle battery mod I recently made in ics blue. This was built on 4.0.3 sources.

Here's a flashable zip:

TransStatusbar-SmoothCircleMod_4.0.3.maguro-signed.zip
The Following 6 Users Say Thank You to pendo For This Useful Post: [ Click to Expand ]
 
pendo
Old
(Last edited by pendo; 9th January 2012 at 09:52 AM.)
#3  
pendo's Avatar
Recognized Themer / Contributor - OP
Thanks Meter 762
Posts: 1,970
Join Date: Jun 2010
Location: Tulsa, OK

 
DONATE TO ME
Default Smali edits

OK...here's some instructions as a smali edit. Things to keep in mind here....smali is, for me at least, challenging to follow and fully comprehend what you are looking at. Also, this set of instructions is based off of working on a SystemUI for 4.0.3. My goal here is to give precise enough steps so that the right edits are made, while also trying to be "universal" in that this will hopefully work on other SystemUI's going forward. If we discover that tweaks need to be made, I'll edit this list.

Pixel format is stored as a integer constant. To review, here are some values of interest for this thread. (blue text is value)
  • OPAQUE(no alpha bit): -0x1
  • RGB_565(also no alpha): 0x4
  • TRANSLUCENT(many alpha bits) -0x3
First file to edit is StatusBar.smali. Open in your preferred text editor and search for this text:
Code:
Landroid/view/WindowManager$LayoutParams;-><init>(IIIII)V
Go to the line above it and change the last value from -0x1 to -0x3.


Next open PhoneStatusBar.smali. Search for this text:
Code:
const v4, 0x4800068
replace the 2 lines underneath with this:
Code:
const/4 v5, -0x3

move v2, v1

Next search for this text:
Code:
Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mPixelFormat:I
Once again we're going to edit the line above and change the last value to -0x3.


You can see the pattern of changing -0x1 to -0x3. However, you may notice that it's a 0x4 that your're replacing. You won't ever be replacing anything vastly different. So when following these instructions if you find that you're replacing something other than -0x1 or a 0x4, that should raise a red flag that it might not be the right thing to edit. *The first edit in PhoneStatusBar is a little different than the others and I think there is more than one way to do that, but this is how I did.

You may notice that I haven't listed the entire line for the search criteria ....this is because there may be differences with the local variables associated. Your file may be assigning the pixel format to local variable v8 and the next guys v9. *The first search in PhoneStatusBar I did give the whole line.

That's it for smali edits. Now you still have the res directory edits. With an aosp based rom, you need to change the hex value for status_bar_background in drawables.xml. Also, you now have translucency available for the softkey area.....it's background is set via hex color in res/layout/navigation_bar.xml.
The Following 6 Users Say Thank You to pendo For This Useful Post: [ Click to Expand ]
 
joshnichols189
Old
#4  
joshnichols189's Avatar
Senior Member
Thanks Meter 1385
Posts: 6,920
Join Date: Jun 2010
Location: Chicago
I've been wanting a smooth circle battery mod! Only problem is, on Roman's AOKP rom flashing it makes the statusbar and virtual buttons disappear Happens with the other circle battery mod as well :/
Iphone 4S Nokia N9
LG Voyager OG Sidekick
Blackberry Tour 9630 Blackberry Storm 9530
Motorola Droid Droid Bionic; Droid X
HTC Droid Incredible HTC Thunderbolt
HTC Droid Incredible 2 HTC Trophy
HTC Rezound; HTC One S HTC One X HTC G2
Asus Transformer Nook Tablet
Samsung Fascinate Galaxy Nexus Galaxy Note
Galaxy SII i9100 White Galaxy Nexus
Galaxy SIII i9300 Galaxy Tab 2 7.0
 
gn00my
Old
#5  
Senior Member
Thanks Meter 36
Posts: 307
Join Date: Aug 2007
Location: Zutphen
Same here, soft buttons and status bar dissapear

Sent from my Galaxy Nexus using xda premium
 
P-bot
Old
#6  
Member
Thanks Meter 1
Posts: 43
Join Date: Oct 2010
This may just be me, but I got the battery only circle mod going on Romano's rom with the apex 4 kernel. Didn't work with the other kernel I was on.
 
JamieD81
Old
#7  
JamieD81's Avatar
Senior Member
Thanks Meter 8142
Posts: 3,996
Join Date: Nov 2009
Location: Duncan

 
DONATE TO ME
awesome instructions im going to download asop on my linux pc tonight and have at the systemui on boxing day or something. ive got the softkeys themed but thats as far as i can get without a ton of fc's when decompiling and editing xml's and some pngs, so hopefully this will help me learn a bit more.

thanks for the awesome write up!

edit: i get the same problem as the above people when flashing this on the rom in my sig
**Itís not a bug Ė itís an undocumented feature.**

My inbox is NOT a help desk.
G+: JamieD81
Donate: JamieD81
*appreciated and cherished*
 
allofusjw
Old
#8  
allofusjw's Avatar
Senior Member
Thanks Meter 22
Posts: 103
Join Date: Jan 2010
Location: S. Jersey
pendo, thanks so much for this. its very educational and I appreciate the time you took to help all of us.
my question is...
in the cyanogenmod source instead of stating "opaque" or "translucent" it shows PixelFormat.RGB_565 which (I think) means it's 16bit and opaque. do you think it would have to then be changed to ARGB_8888, or something different? here's the link to the info I found: http://developer.android.com/referen...ap.Config.html
I'm just unsure how to apply this info.
thanks man, love your work, glad to see you here!

Sent from my Galaxy Nexus using xda premium
Phone: Nexus One(my audiobook player), Nexus 4(current)
Carrier: T-Mo/US
Rom(s)
Primary: AOKP JB
Secondary: my own mostly hideaous creations
Kernel: IntersectRaven, Trinity, Franco
Recovery: 4ext, TWRP
My one piece of advice: take the time to learn the use of Auto-Patcher.

To those who dedicate so much time and effort to contribute to this awesome community... your efforts are priceless...Thank you all!
 
fatsix
Old
#9  
Senior Member
Thanks Meter 36
Posts: 127
Join Date: Oct 2010
I used apktool to decompile the systemui.apk. I found the status bar files. But they are smali. When I edit them with notepad+ I cannot find the PixelFormat line. Sucks.

Sent from my Galaxy Nexus using XDA App
Galaxy Nexus CDMA
RootzBoat V4
Faux123 1.35Ghz OC/UV
 
pendo
Old
#10  
pendo's Avatar
Recognized Themer / Contributor - OP
Thanks Meter 762
Posts: 1,970
Join Date: Jun 2010
Location: Tulsa, OK

 
DONATE TO ME
Quote:
Originally Posted by joshnichols189 View Post
I've been wanting a smooth circle battery mod! Only problem is, on Roman's AOKP rom flashing it makes the statusbar and virtual buttons disappear Happens with the other circle battery mod as well :/
My bad, I left out one VERY IMPORTANT detail. Whether or not you build your own or use the one I compiled it is a deodexed SystemUI.apk. If you previously had an odexed SystemUI then you MUST delete SystemUI.odex

I have been told that my apk works with this 4.0.3 IML74K rom.
Quote:
Originally Posted by gn00my View Post
Same here, soft buttons and status bar dissapear

Sent from my Galaxy Nexus using xda premium
Please see above note.

Also, these instructions as well as the provided apk DO NOT have Paul's softkey mod. I'm hesitant to say this, but I am tinkering a bit trying to replicate the edits in source form. I know I posted a SystemUI that had those edits for 4.0.2 but I did them as smali edits. I wish to add them to the source code which would make it much easier for updates. But I have no progress report on that. The *main* purpose of this thread was informational. I wanted to offer some help for someone to either do it themselves, or help someone who has the capacity/desire to update the apk as needed.
Quote:
Originally Posted by EkostonS View Post
awesome instructions im going to download asop on my linux pc tonight and have at the systemui on boxing day or something. ive got the softkeys themed but thats as far as i can get without a ton of fc's when decompiling and editing xml's and some pngs, so hopefully this will help me learn a bit more.

thanks for the awesome write up!

edit: i get the same problem as the above people when flashing this on the rom in my sig
This is built purely from aosp sources, not CM. I would not expect what I compiled to work on anything other than aosp 4.0.3. However, the information in the first post should help you make a translucent statusbar if the CM9 source code is available somewhere.


Quote:
Originally Posted by allofusjw View Post
pendo, thanks so much for this. its very educational and I appreciate the time you took to help all of us.
my question is...
in the cyanogenmod source instead of stating "opaque" or "translucent" it shows PixelFormat.RGB_565 which (I think) means it's 16bit and opaque. do you think it would have to then be changed to ARGB_8888, or something different? here's the link to the info I found: http://developer.android.com/referen...ap.Config.html
I'm just unsure how to apply this info.
thanks man, love your work, glad to see you here!

Sent from my Galaxy Nexus using xda premium
Yes, I actually had some information regarding that in the first draft I had made, however I was getting concerned with the length as it was so I trimmed it down a bit.

Yes, RGB_565 is 16bit opaque. You should just change it to TRANSLUCENT. I've done this before, but in smali. One thing that I haven't figured out is why it's called RGBA vs ARGB. The hex values are done in ARGB. Go figure.

Also, here's some info that will help when trying to do this edit backwards, aka decompiling with apktool Obviously when aapt compiles it doesn't store the code as TRANSLUCENT....but here's some of the values that it does store of what you'll most commonly see:

TRANSLUCENT = -0x3
OPAQUE = 0x1
RGBA_8888 = 0x1
RGBX_8888 = 0x2
RGB_565 = 0x4

The Following 2 Users Say Thank You to pendo For This Useful Post: [ Click to Expand ]
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes