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

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

About author

Doug Lynch
Doug Lynch

When I am passionate about something, I go all in and thrive on having my finger on the pulse of what is happening in that industry. This has transitioned over the years from PCs and video games, but for close to a decade now all of my attention has gone toward smartphones and Android.