Latest Substratum Update Adds Full Android O Theming, Dynamic Refresh Mode and More

There have been a lot of changes happening with Substratum lately, but Android O support has been highly anticipated. An update pushed out last month showed the team was preparing to add support, but we didn’t know when the update would be rolled out to the public. Yesterday, it was announced that the latest version of Substratum, version 670, will now work on devices running API level 26 (aka the Android O Developer Preview).

There are some other big changes pushed in this update, but Android O support is definitely the biggest. We’re told that themers will need to test this release with their themes and that users may need to wait until an updated version of their favorite theme(s) before it works properly. This release of Substratum also prepares for all of the API 26 changes (including API deprecation changes) so Substratum should be good to go as soon as the final version of Android O is released.

Along with Android O support, this new update also includes a new Dynamic Refresh Mode feature. What this means is, when you install a new theme onto your device, the application will automatically refresh the list of themes (without you manually having to swipe down to refresh). Another new feature is something the team is calling full Binderfacer support. This is something the team is calling the Interfacer module with its Binder implementations.

Version 670 of Substratum also comes with some changes that themers can look out for. In particular, it includes a theme authorization fix and are recommending themers update to the latest version of Substratum as well as version 7.0.5 of their template in order to fix an issue that was causing the Substratum filter to error out. For those interested, you can find the full developer changelog listed below…


  • Full translation import
  • Public release 670
  • Clean up and reformat
  • DynamicRefresh: Do not invoke toast on uninstall theme
  • DynamicRefresh: Send refresh message on theme uninstall
  • DynamicRefresh: Add support for IA to detect uninstalls
  • ThemeFragment: Auto-dynamic Refresh of newly installed themes
  • AdvancedManagerFragment: After removing lingering overlay, update index
  • ThemeInterfacerService: Blame Ivan’s OCD
  • ThemeInterfacerService: SystemUI should be restarted on priority switch
  • InformationActivity: Properly locate parent/root node for fab shift
  • Internal testing release ALL HELL BREAKS LOOSE!
  • References: Fix certification check on notification
  • Internal testing release 665
  • Overlays: Adjust marginTop for text to select all overlays
  • Dynamic Gapps > Beans Gapps
  • Overlays: Add a bit of margin on top of toggle
  • Refactor and format after fast-forward
  • Arrays: Update Slovak Translation Title
  • ThemeFragment: Launch Showcase on No Theme Installed
  • Register receivers on app update too
  • Move profile related methods to separate class
  • Internal testing release 663
  • BootCompletedDetector: IntentFilters should be launched with app context
  • Internal testing release 662
  • Add app update receiver
  • BootCompletedDetector: Prepare for API26 changes to BroadcastReceivers
  • Internal testing release 661
  • AdvancedManagerFragment: Binderfacer should also be able to refresh!
  • PriorityListFragment: Fix broken animation when showing fab
  • Internal testing release 660
  • BinderService: Make the service sticky
  • Overlays: When mixAndMatch enabled, don’t check cached global variable
  • Internal testing build 659
  • AdvancedManagerFragment: Toast does not go here…
  • Internal testing release 658
  • SoundUtils: Optimize
  • Overlays: Fix connection loss to list of enabled overlays from IA
  • Overlays: When updating a framework overlay, restart SystemUI as well!
  • ThemeManager: Restart SystemUI on framework change
  • SoundUtils: Don’t wait when binderfacer on duty
  • Backend: Utilize OMS library’s OverlayInfo states instead of specifying
  • ScheduledProfileService: Optimize things a bit
  • ScheduledProfileService: It’s supposed to run with interfacer only
  • ScheduledProfileService: TODO done
  • Internal testing build 657
  • AdvancedManagerFragment: Change here and there
  • ScheduledProfile: Make it precise down to the seconds
  • Internal testing build 656
  • Overlays: InformationActivity.class > this.getClass()
  • References: Suppress a few warnings by generalizing the try/catch block
  • References: Null check for offensive check
  • FloatUiTile: Guard against NPEs on tile state
  • Overlays: Enforce adapter not being null before running actions
  • InformationActivity: If the position goes beyond or under, do not crash!
  • ProfileFragment: Guard against NPE when list() is null
  • LaunchTheme: Check if launch intent is null before adding extras
  • InformationActivity: Null checks for odd window refreshes
  • InformationActivity: Fix potential errors with Palette
  • ShowcaseTab: Do not call getContext() so many times
  • AdvancedManagerFragment: Effective NPE handling!!!
  • Overlays: Suppress warning when type1 default XML not found
  • ScheduledProfileService: Expose “Day” and “Night” strings
  • Binder: Add comments to the AIDL interface for each void
  • Binder internal testing release 655
  • Overlays: MixAndMatch mode should not be present for disable mode
  • Binder internal testing release 654
  • Update interface stub
  • BroadcastReceiver can’t register another receiver
  • Overlays: No need to wait if binderfacer on duty
  • Only start BinderService if binderfacer installed
  • ScheduledProfile: Make sure binder service is started
  • Merge remote-tracking branch ‘refs/remotes/origin/dev’
  • Binder internal testing release 653
  • ThemeUninstallDetector: Rewrite the SharedPref after theme uninstalled
  • ThemeUninstallDetector: Rewrite the SharedPref after theme uninstalled
  • References: Revive functionality of removing uninstalled theme resources
  • References: Revive functionality of removing uninstalled theme resources
  • Internal testing release 635
  • Overlays: Fix MixAndMatch mode not properly activating
  • Overlays: Fix MixAndMatch mode not properly activating
  • Binder internal testing release 652
  • Move screen off receiver methods to References
  • BinderService: Clean up
  • BinderService: Change some static objects
  • Binder internal testing release 651
  • References: Update Binder Interfacer version to start at 60
  • Binder internal testing release 650
  • BinderService: Migrate the old binder code from Application to Service
  • PackageModificationDetector: When there’s no metadata, reject intent
  • PackageModificationDetector: When there’s no metadata, reject intent
  • ScheduledProfile: IntentService > JobService
  • Initial commit for binderfacer implementation
  • References: Check if device is on O preview, if yes, disable soft reboot
  • Legacy: Fix up OMS check with a null check
  • CommitValidator: Disable on legacy devices
  • CommitValidator: Fix issues where all entries opened framework
  • Themers, let’s start getting on deck with Android O! Shall we?
  • PackageModificationDetector: Fix check for legacy
  • restartService > forceStopService
  • Internal testing release 633
  • SettingsFragment: Adjust delay of cache a bit longer
  • PackageModificationDetector: Completely revamp the detection module
  • SettingsFragment: Adjust tap times to 7 for caching mode
  • Merge remote-tracking branch ‘origin/dev’ into dev
  • References: Update hash passthrough
  • Merge pull request #92 from rbaumert/patch-1

Source: +NicholasChumCDT

Nav Bar Customization was Hidden in Stock Nougat All Along…and it never needed Root

Show of hands here: how many of you are actually running the first Android O Developer Preview? Not only is the Developer Preview only available to a handful of Google devices, but it’s really not suitable as a daily driver. Of course, it was never intended to be used by the average user, but rather as a test-bed for developers to ensure their applications will work when Android O officially does release. However, that doesn’t mean we can’t have some fun for ourselves and take a look at what’s inside. One of the most exciting features coming to Android O devices is the nav bar customization located in System UI Tuner. But what if we told you that this awesome nav bar customization isn’t only available to users on the Android O Developer Preview? That’s right, this feature actually already works on Android 7.X Nougat, and it doesn’t need root access either.

Facepalm. When I wrote my tutorials on contextually modifying the navigation bar on Android O, I had assumed that these shell commands that I was sending would only work on Android O. It turns out that that’s not true – these commands actually work just fine on Android Nougat. Now, we’ve known for nearly 9 months that navigation bar customization could be enabled in Android Nougat, however, the initial discovery required users to modify the SystemUI APK to expose the nav bar tuner preference. This was clearly a major hurdle to overcome for many users as it not only requires root access, but it also requires the SystemUI APK to be decompiled and patched for every single update. However, you don’t even need to modify SystemUI to expose this nav bar tuner activity, you can modify the nav bar manually through shell commands anyways!

We can confirm that this hidden nav bar customization in Android Nougat works on the following devices:

The nav bar customizer appears to work on any device or ROM that has not removed the AOSP implementation, so most devices that have stock, or close to stock, firmware based on Android 7.X Nougat should have it working.

Nav Bar Customization Hidden in Android Nougat

Manually modifying the navigation bar in Android Nougat works very similarly to how it works on Android O. You can either send an ADB shell command to modify the particular setting, or grant the WRITE_SECURE_SETTINGS permission to an application such as SecureTask or AutoTools so they can control the modify the Settings.Secure preference that controls the navigation bar buttons. With the use of Tasker, you can contextually modify the navigation bar as well.

Granting WRITE_SECURE_SETTINGS to either SecureTask or AutoTools is simple as all you need to do is enter either of the following ADB shell command, which doesn’t require you to be rooted.

For SecureTask:

adb shell pm grant com.balda.securetask android.permission.WRITE_SECURE_SETTINGS

For AutoTools:

adb shell pm grant com.joaomgcd.autotools android.permission.WRITE_SECURE_SETTINGS

Then the syntax to modify the navigation bar is as follows:

settings put secure sysui_nav_bar "key(KEYCODE_CONSTANT:file:///path/to/icon.png),back;home;recent,key(KEYCODE_CONSTANT:file:///path/to/icon.png)"

You can re-arrange the key layout, add spaces to the left or right to shift the buttons (typing space will add an empty slot to the nav bar) choose custom icons, change the keycodes, etc. as you please by following this syntax. For instance, here is the command I would use to add a KEYCODE_MENU button and a KEYCODE_FORWARD button to my navigation bar to enhance my Chrome browsing experience:

settings put secure sysui_nav_bar "key(82:file:///storage/emulated/0/NavIcons/menu.png),back;home;recent,key(125:file:///storage/emulated/0/NavIcons/forward.png)"

The icon paths that the command references are custom icons that I downloaded from IconsDB. I acquired the proper icon size by looking up my device’s display density on then correlating that density with the proper icon size using a reference chart.

If I want to revert my nav bar back to the default layout, I would enter this command:

settings put secure sysui_nav_bar "space,back;home;recent,space"

If you’ve been keeping up with my Android O tutorials, then this syntax will seem familiar to you. If not, then don’t worry. There’s an app for that.

Custom Navigation Bar

XDA Senior Member paphonb has developed an application called Custom Navigation Bar that does all of the legwork for you and changes the navigation bar buttons. The app is very easy to use as it’s based off of Android O’s navigation bar customizer. However, the app has been coded to allow you to use custom icons (much like in my tutorial), includes the ability to create Profiles that you can quickly switch between, and furthermore has Tasker support so you can contextually change the navigation bar based on whatever criteria you want.

All you have to do is install the app, then grant it WRITE_SECURE_SETTINGS permission by issuing the following command in ADB:

adb shell pm grant xyz.paphonb.systemuituner android.permission.WRITE_SECURE_SETTINGS

Then when you open the app, the app will determine whether or not your device supports modifying the navigation bar. It will attempt to present a “next” key centered in your nav bar. If it shows up, then you can modify your nav bar. If not, the app will tell you that you’re out of luck.

The application is free but does require you to purchase a pro version if you want to create more than 2 Profiles. This application certainly makes it easier to modify your navigation bar, so I personally think the price is worth it, but if have the know how, you can perform all of the features that this app offers through Tasker and SecureTask/AutoTools.

Customization Possibilities

There are a lot of things you can do with this app + Tasker. I’ve outlined many such cases in my tutorials, but here’s a quick list of some things you can try:

Those are what I came up with when I was playing around with the nav bar tuner in Android O, but they should work all the same with the hidden nav bar tuner in Android Nougat.

I’m absolutely astounded that it took this long for someone to figure out that this nav bar tuner works in Android Nougat without root. Thinking back on this, it makes total sense that it does work without root. After all, the SystemUI mod only exposes the preferences fragment to launch the nav bar tuner activity, it’s not like that mod actually adds the feature to SystemUI – it was always there. The shell commands just allow us to change the nav bar without exposing this SystemUI activity, and paphonb’s app just makes this all easier.

How would you like to customize your navigation bar? Let us know in the comments below!

4 Reasons to Install the Pixel Android O Update & 4 Reasons You Shouldn’t

4 Reasons to Install the Pixel Android O Update & 4 Reasons You Shouldn’t is a post by Cory Gunther from Gotta Be Mobile.

Google’s fourth Android O beta is here and it’s a tempting upgrade for Pixel and Pixel XL users. While there are certainly some new features and reasons to try it today, there are also reasons to avoid trying the Android 8.0 preview on the Google Pixel.

The latest official software for Pixel phones is Android 7.1.2 Nougat. However, in an effort to test and improve what’s coming next, the developer preview and Android O beta is another option. On July 24th Google released the fourth and final beta, its most stable version yet.

Read: How to Install Android O Right Now

Users with any of Google’s recent devices are eligible for the Android O beta. Here we’ll be sharing details on the Pixel update and if it’s worth installing. If you’re considering trying Android O read on for some of the benefits and downsides.

While Android 7.1.1 and even 7.1.2 were small maintenance releases for Nougat, Android O is a much bigger update. It’s the next big software release and Google confirmed the version is Android 8.0, with the name likely being Oreo.

With each new release, we learn more about what’s coming in Android O. The first beta was very bare-bones, a second preview was released on May 17th, and the third preview fixed over 100 bugs and problems. This week the fourth and final beta arrived, the release candidate to fix any outstanding bugs before releasing it to the public. Google states to expect its arrival around the end of summer. So late August or September.

Read: What’s New in Android O: Everything You Should Know

Today though, Android O is still pretty promising. Some new features include dynamic icons, bundled notifications, limiting background processes to improve battery life and other small tweaks. Google redesigned the settings menu, added picture-in-picture mode, and introduced auto-fill to apps. How Google Chrome remembers forms, login details and your address, something similar happens inside Android apps. There’s a lot to like, and this is just the beginning of a large update.

Pixel owners will also enjoy the new Notification Dots on icons, which ties into the app shortcuts. Long-press an app icon on for tons of new options, quick access to aspects inside of the app, or see notifications at a glance. Not to mention potential fixes for a wide array of Pixel problems, like Bluetooth drops.

Considering this is an early developer preview and new software, it is not the most stable version of Android available. In fact, Google themselves warned users about bugs and states it is not ready for daily use. The beta is for developers and to gather feedback, not to use on your primary device. Even if this is the last beta and considered fairly stable.

Installing the Android 8.0 O beta has its benefits but there are also downsides to using early software and we want to discuss those here. This list of reasons should help you decide if it is worth trying the Google Pixel Android O beta.

Install Android O If You Like Living on the Edge

 1 / 8
Install Android O If You Like Living on the Edge

Google's developer preview betas are exactly that, an early developer preview. They aren't intended for anyone and everyone. Even though anyone that wants to try it can.

Pixel owners will run into bugs, there's no question about that. Google themselves confirmed more than a few are present in the software. I have it on my Pixel XL and Pixel C tablet, and it seems pretty stable. The first beta had some crashes, but each release made things better. Now on the 4th, I'm not experiencing any issues on the Pixel XL.  

You should still only install it if you like living on the edge and can deal with these issues. Yes, it has some benefits, but also a few cons. So far the software runs pretty smooth, and battery life seems decent. Don't say we didn't warn you though. 

 1 / 8

4 Reasons to Install the Pixel Android O Update & 4 Reasons You Shouldn’t is a post by Cory Gunther from Gotta Be Mobile.