Transparent Status Bar--Instructions for DIY

Search This thread

fatsix

Senior Member
Oct 25, 2010
155
36
@Fatsix.

Aokp 21_a is up. New lock screen icons. Still more to do.

4c7434e1-2ce4-e14f.jpg


Sent from my Galaxy Nexus using XDA App
 

pgibbons

Senior Member
Jul 20, 2010
146
28
If you're referring to my earlier reference to the SystemUI I made previously it is here's the link. That one also has Paul's softkey mod that I did as a smali edit.
Pendo, I used your mod for 4.0.2 and I liked the way you made the navigation bar the same darkness as the bottom of the launcher. I know you said you made the status bar 35% translucent in the first post, but I was wondering what you set the navigation bar to?

Also, once transparency is set via some other peoples mods is there an easy way to adjust the translucent settings for the status and navigation bar or do you have to make a whole new SystemUI.apk?
 

09989

Member
Dec 2, 2011
13
1
I have a huawei honor(8860), rom 4.0.3.

but I can't Transparent Status bar with your method. could u help me?
 

RogerPodacter

Senior Member
Apr 12, 2010
5,654
425
Los Angeles, CA
Well the question is how much has changed within sysyemUI from 4.0.3 to 4.0.4 ota. I just updated and would like to get transparent back. I was using pendo's version with circle battery and percent text. I'd take a 4.0.4 version of that. Unfortunately I don't have ubuntu setup to do any compiling.

Wonder if the 4.0.3 version will work. I'm gonna nand backup and give it a try.
 

bill12690

Senior Member
Mar 9, 2010
309
35
is there a transparent status bar , that will work on GN toro with CM9 RC1 ????

I've tried with no luck. Seems the smali code has changed in the past couple weeks, and looks a bit different than it did, which leaves me lost. Perhaps someone more knowledgeable could shed some light on it.

Sent from my Galaxy Nexus using XDA
 

Mooem7

Senior Member
Jul 17, 2010
122
43
And now CM10 is here!
Same tutorial?

I believe there are significant enough differences that the tutorial won't work anymore (at least with the smali edits), I tried messing around with it myself but I'm not getting any results. I'm probably not changing the right values and/or looking at the wrong smali files. I'm definitely inept at this stuff. :eek:
 

Top Liked Posts

  • There are no posts matching your filters.
  • 14
    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 :eek:). 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.
    6
    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
    6
    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.
    2
    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.
    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.
    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.


    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/reference/android/graphics/Bitmap.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.:confused:

    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
    1
    Here you go ;) mind of small but not a problem at all.

    Sent from my Galaxy Nexus using xda premium