[prjkt.io] nicholaschum:
Substratum Release 912

It's been a while, eh? We've noted down a ton of bug reports from the many prior builds as well as gotten help from a bunch of new and old contributors!

This is a MAJOR upgrade, and has been tested by many people in our feedback channel, but with the sporadic nature of RRO and OMS, there can never be 100% no bugs, but we are trying our hardest! :)

Andromeda users: We have added specific commits to ensure smooth delivery on 8.1 devices with this new update. We will soon have some new features to Andromeda from +Surge Raval​, hopefully something called "untethered mode".

Custom ROM users and devs: This new upgrade adds support for Android Oreo custom ROMs and our new "Substratum Service" by our very own +Ivan Iskandar​ and huge thanks to +Harsh Shandilya​, which fully deprecates Interfacer (never finished and will not be updated to Oreo as-is).

To those who build ROMs, and are interested in WIP beta commits, please check our gerrit at https://substratum.review/#/q/topic:sysserv

We're now working on platform side features and have enabled something called "Shutdown animations", of which is still a WIP. Look forward for the many commits after to add more support for custom Oreo ROMs!

Themers: Thanks to [MENTION=4880721]iskandar1023[/MENTION], we have added something called "type3-common" to the template, which allows for a dynamic base to build off the type3's when there exists no default res folder. If a 'type3-common' dir is detected inside an app overlay directory, it will be used as the base instead, and the user-chosen type3_[variant name] will be copied over the base.

Brand new app intro: A huge thanks to [MENTION=4367200]pierx[/MENTION]​, we now have an AMAZING app intro which also slims down the app by shifting over to vectors!

Completely rebasing the source code: With the latest update, we have changed the layout of our source code so that we added a bunch of Javadocs and explanations to code, making contributions easier, which has proven much better seeing many new and old contributors are hitting us up in private with optimizations and feature additions!

Speed, speed, SPEED!: We've been seeing a bunch of issues on the matter of loading overlays and such, and we have optimized the code and cleaned up sorting so that we would not have to reload as often and cause a more drastic issue.

Optimizations +/- Samsung: We have optimized our app to better suit the rootless overlays. If you're running a legacy Samsung device, aka. anything below an S8, then we have added a ton of performance improvements and optimizations! NOTE: If you are experiencing EXTREME app lag or it showing legacy mode, ENSURE your system time is correct, and you have the latest v36 Samsung addon!

We have focused a lot on legacy Samsung improvements lately, which overall improved the coding style of the app. I can't stress this enough, but a huge thank you goes to a contributor named +Tetsuo Osaka​, even though all he does is nag us and all we do is yell at each other in our chats, where every single hour he bugs us to fix something, at the end he proved to be a priceless tester and an amazing new contributor to the team! Thank you!

Samsung and Legacy users: We have added a maximum priority of 9999 if you need to try for non-sticking overlays!

Custom ROM forced AOPT: We know security is of utmost care for many developers, so with this release, we have added a flag to check in the system, if there is a "ro.substratum.aopt" build.prop entry, Substratum will be forced into using AOPT rather than AAPT, which significantly increases speed and security! HOWEVER, we would like to extend our explanation of this by saying that having a secure system is great, AAPT has also been used in CM for years, and the only "dangerous" thing would be if someone yanked out the AAPT from /data/data (private userspace partition) and used those to compile apps with Java code inside, whereas CM had it in a global, system callable location while ours is privatized.

We do not do any of that and ensure that both implementations of AAPT and AOPT are safe to be used in the current location. The downside of the AOPT implementation is that many devices such as Sony, Motorola and several non 64bit devices may result in some compilation issues, of which if AOPT is enforced, the supplier will have to take charge of it (which is why we named AOPT as experimental in Settings since we added the option to switch between them).

Bug Fixes: We have indeed fixed many force closes and hiccups of the app recently since the previous build - but they are never 100% when dealing with a native theme system on stock, especially if you are rooted (that's the reason we deprecated masquerade rooted!), so if you have any bugs, and they are not theme compilation bugs (wrong/failed configuration errors go to themers, unless it's an issue with AAPT/AOPT(it tells you)) send them our way!

Full changelog (chronological - newest first):

Public release 912

Full translation import

Clean up and reformat

Overlays: Don't reload list during compilation

Overlays: Fix excruciating lag on certain devices

Systems: Deprecate Interfacer on Oreo

Public release 911

MainActivity: Do it for both of these blocks

Public release 910

MainActivity: Also add in a check for System Service for the dialog

Public release 909

MainActivity: Rooted Oreo OMS now has a warning at the start of the app

ManagerFragment: Also do the same with uninstalling overlays

Public release 908

ManagerFragment: Fix Substratum being too fast for Andromeda

MainActivity: Restart AndromedaBinderService when first loaded

Public release 907

SplashScreenActivity: Enforce null check on Andromeda's installation dir

OverlaysManager: BottomSheetDialog should dynamically set height

InformationActivity: If the hero image does not work, then catch error

Public release 906

ManagerFragment: Fix possible FC during dialog invoke

Upgrade gradle

losslessly recompress all png and jpg images

fix repository order missed aee2126e1d9fe16fe8d245efc37b70ba2a56394d

Update gradle to 4.3 stable

Public release 905

ManageSpaceActivity: Enforce null check on filer.list()

Public release 904

ManagerFragment: Fix possible FC on legacy devices

Public release 902

Full translation import

PackageModificationDetector: Strictly enforce themes not for Samsung

OverlaysManager: Fix overlay compilation on legacy

Substratum: Enforce locale choices in Showcase and ManageSpace activities

References: Make sure all settings are reset

Add a new uninstall icon for fab menu

Public release 901

Overlays: Stability check, do not refresh while compiling

OverlaysManager: Fix type2 application

Public release 900

MainActivity: On Oreo, priorities are still beta

ManagerFragment: Overlay list -> Manager

InformationActivity: Overlay Manager -> Overlays

TroubleshootingFragment: Deprecate the fragment

Refactor and optimize imports of all Java files

Clean up and remove unused resources in res/

Remove all translated library strings

MainActivity: Set BootAnim, ShutdownAnim and Fonts as beta for SS

PackageModificationDetector: If SST was installed/updated, kill activity

BinaryInstaller: Allow ROMs to force AOPT using "ro.substratum.aopt"

OverlaysManager: Properly fire the success notification

Overlays: Fix sorting logic

Optimize images

AndroidManifest: Only allow single tasks of MainActivity and IA

SettingsFragment: Hide Interfacer if not available

Overlays: Optimize and speed up

Substratum: Fix splashscreen layout for subsequent launches

Substratum: Use svg animation instead of animation list.

Overlays: Re-sort the untraceable functions, singleton initiation

Overlays: Do not rely on firstBoot to refresh list

SubstratumUI: Stabilize the app and do not use DiffUtils for RVs

Add exception handling to getInstallerId

SettingsFragment: Legacy does not have the notification channel preference

Merge pull request #153 from tetsuo55/hejeggw

Remove unused notification channel from legacy

Packages: Fix formatting and try a different logic

Packages: Change structure of checker

Packages: Enforce isSamsungTheme check

SettingsFragment: Remove unused auto disable target option for legacy

SamsungIntegration: If on rooted device, uninstall silently

Substratum: Reorganize what is supported on SS

SamsungPackageService: Do != rather than <

MainActivity: Properly pop the stack when going back home

ManagerFragment: Terminate early if a call of layoutReloader was pushed

MainActivity: Modernize and document onKeyDown

MainActivity: Some devices don't register back button presses well

ThemeFragment: Avoid the OOB issue as well just in case

Overlays/ManagerFragment: Enforce null check on notifyDataSetChanged

SubstratumCrash: Fix incorrectly named system service log

Packages: Heavily enforce getOverlayMetadata

ThemeAdapter: Don't silently uninstall themes on long click, alert user

Overlays: Don't crash when configurationChange causes a fuss

Packages: You can't check for a bool if you enforced it to strings

Change order of the toolbar menu icons

SubstratumService: Iron our some quirks for Android Oreo custom ROMs

ManagerFragment: Also do the same for Overlay Manager

Overlays: Fix issue where configurationChange will cause an invisible RV

Internal release 858

Resources: Revive SystemUI Statusbars

Packages: Use substratum service for uninstalling package

SubstratumService: Add supporting codes and update lib

SubstratumService: Add service check method and update binary

Add initial version substratum service lib

Packages: Extend getOverlayMetadata for boolean metadata

SettingsFragment: Go back to getContext() for now

SubstratumRebase: Fix a typo thanks to [MENTION=4971851]YechiamTK[/MENTION]

SubstratumRebase: Full cleanup, ButterKnife, JavaDocs

Clean up and reformat all files

ManagerFragment: Restore non-crashing workspace by fixing RV assignment

MainActivity: Clean up formatting

Substratum: Fixes for OverlayList

Update travis.yml for API 27 SDK

Update to SDK27

update gradle to 4.3

Fix compatibility with gradle 4.3+

ProfileFragment: Fix #141

ManagerFragment: Add notifyDataSetChange to fix scroll to position in RecycleView.

PackageModificationDetector: Restore to the original state

InformationActivity: Add missing import

Internal release 856

Revert "SamsungPackageService: On repeated IA start, prevent DeadSystemException"

Revert "SamsungPackageService: Deprecate this ongoing service"

ManagerFragment: Do not uninstall all packages

Partially revert "OverlayFunctions: Slim down a bunch of functions"

ThemeFragment: Optimize RecyclerView loading using DiffUtils

ManagerFragment: Optimize RecyclerView loading using DiffUtils

Overlays: Optimize RecyclerView loading using DiffUtils

OverlayFunctions: Slim down a bunch of functions

Just updating some comments

Substratum: Update fab_menu_enable_disable icon to match other sheet fab icons

Packages: Restore InputStream cloning in getOverlayResource

Systems: Do not discriminate against Android 8.1.0

MainActivity: Fix blank activity on overlay operations

Add Tetsuo Osaka to contributors list

SubstratumRebase: More clean up

SubstratumRebase: Clean up lint warnings as of AS 3.0 RC 1

Remove unused logging

fix lint warning condition result=0 is always true

fix lint warning string equals empty

fix lint warning single character string concatenation

fix lint warning single character argument in string.indexof

fix lint warning method may be static

fix lint warning iteration over keyset may be replaced with entryset iteration

fix lint warning field may be static

fix lint warning concatenation with empty string

fix lint warning Collection.addAll can be replaced with parametrized constructor

fix lint warning call to simple getter from within class

fix lint warning non reproducible call to java.lang.math

fix lint warning implicit numeric conversion

fix lint warning double literal cast to float could be float literal

fix lint warning inner class may be static

fix lint warning multiply or device by power of two

fix lint warning redundant suppresion

fix lint warning doverly broad throws clause

fix lint warning decleration can have final modifier

fix lint warning decleration access can be weaker

fix lint warning scope of variable is too broad

fix lint warning redunant local variable

fix lint warning boolean expression could be replaced by conditional expression

fix lint warning unclear expression

fix lint warning size == 0 replacable with isEmpty

fix lint warning redundant field intialization

fix lint warning redundant new expression in constant array creation

fix lint warning missorted modifiers

flip some constants to the right to match code style

suppress false positive can be final on builder and dialogueClickListener

fix lint warning local variable or parameter can be final

fix lint warning instant method call not qualified with this

fix lint warning instant field access not qualified with this

silence lint by marking these as implictly used

fix lint warning implicit call to super

fix lint warning field may be final

Clean up and refactor after cherry pick

fix lint error by flipping equals Reports calls to .equals() whose arguments are String literals. Some coding standards specify that String literals should be the target of .equals(), rather than argument, thus minimizing NullPointerExceptions.

fix utility class can be enum

fix lint warning class should only be marked final if all variables are final too

fix lint warning field can be local

fix lint warning classes with only private should be declared final

fix lint warning assignment operations which can be replaced by operator-assignment

fix lint warning Ellipsis string can be replaced with ellipsis character

fix lint warning Type can be weakened

Fix lint warning weaken arraylist to list

ManagerFragment: Fix 3dot menu showing up, search not working properly.

PackageModificationDetector: Clean up

PackageModificationDetector: Samsung trips the refresher on install only

PackageModificationDetector: If Samsung, just refresh

Overlays: We should just keep this list refresher onResume

Revert "Revert "Overlays: Don't refresh the list of overlays on resume""

AndroidManifest: Allow all activities to be resizable

Overlays: Introduce a brand new UI for compiling overlays

PackageModificationDetector: Always refresh after package uninstall

MainActivity: Add the corresponding onActivityResult

Clean up and reformat

InformationActivity: Properly assign end boolean

Revert "Overlays: Don't refresh the list of overlays on resume"

SubstratumUX: If a theme was upgraded in the background, relaunch IA

ManagerFragment: Move the uninstaller to the activity

Overlays: Don't refresh the list of overlays on resume

ManagerFragment: Change the request code value

Update translator array

ManagerFragment: Try a queuing method for uninstalling on Samsung

InformationActivity: Small code cleanup

InformationActivity: Migrate boolean array to a HashMap

Substratum: Destroy LeakCanary

Substratum: Disable LeakCanary

PackageModificationDetector: Use existing method to launch themes

Samsung/LGIntegration: Allow "fwk" and "common" to be seperate packages

SamsungIntegration: Set maximum priority to 9999

Prevent text from overlapping with the checkbox

Fix various lint warnings in gradle files

SamsungPackageService: Deprecate this ongoing service

Remove non contributors from arrays.xml

Instead of hiding context leak, let's fix it

Overlays: Fix detection of enabled overlays

Substratum: Address miscellaneous lint warnings

ThemeManager: When running automatic disable, adapt to current system

Don't unnecessarily perform the same check in settings fragment

Allow optionally disabling all other overlays for a selected target on enable * Basically, when enabling an overlay for a package, this option will disable all other overlays for that package

Update Gradle version

Remove useless parent layouts as reported by android studio

NotificationButtonReceiver: Deprecate the Dismiss button

OverlayFunctions: Cancel the notifications earlier

Revert "ManagerItem: Try to use AAPT to grab problematic labels and packages"

Substratum: Enhance check for interfacer

InformationActivity: On app kill, kill compiling notification too

SamsungPackageService: On repeated IA start, prevent DeadSystemException

ManagerItem: Try to use AAPT to grab problematic labels and packages

ManagerItem: If label name is null, return the generic text

ManagerItem: If theme name is null, return the generic text

Update http://README.md banner image

InformationActivity: Null check for appbar layout

ManagerFragment: Unify the search designs with ThemeFragment

ManagerFragment: Set icon to be consistent with the rest of the app

ManagerFragment: Do the same to retain scrolled position

Overlays: Don't reset position as we already reset it

Overlays: Retain recyclerView position when OMS configuration changed

Full translation import

Overlays: Remove unnecessary refreshList() as we can sniff PACKAGE_ADDED

OverlaysItem: Update the check for Samsung users

OverlaysItem: Also check if Samsung overlays are installed too

OverlaysAdapter: Remove Packages duplicate and clean state checks

Overlays: Properly remove the errorLog by creating a deep copy of errors

OverlaysFunction: Dereference never-assigned all_installed_overlays

LOGCHAR_DIR: LogChar is used enough to be reference constant worthy

ManagerFragment: On invalid entry, do not keep progress bar moving

Center text in no overlays message

Overlays: Remove redundant handling for icon pack overlays

Overlays: Additional check before invoking logchar lunchbar

ManagerFragment: Reload layout when Overlay handling tasks exit

ManagerFragment: Refresh adapter when RunEnableDisable finishes executing

SubstratumCrash: Use our own report template

Overlays: Retain instances instead of saving them

Substratum: Remove all the orphan handling and just run DoCleanUp

ThemeUninstallDetector: Add handling for orphanedOverlays

RescueActivity: Remove runOnUiThread, thanks to [MENTION=5083850]Thecrazyskull[/MENTION]!

Overlays: Don't forget LogChar on configuration change

Update Travis CI SDK

Clean up!

RescueActivity: When Samsung users click Rescue Me, open Settings

App Shortcuts: Do not force App Shortcuts only on Android 7.1.1+

OverlayManagerActivity: Move the Settings option to an app shortcut

MainActivity: Fix what Harsh started

Strings: substratum samsung -> sungstratum

Substratum: Add ability to launch Overlay List directly

SettingsFragment: Sungstratum addon is not part of Theme Killer anymore

Fix weird behavior on overlay install with root

OverlayFunctions: Install special overlays no matter what

build: update build tools and dependencies

SubstratumBuilder: Switch the error bool on APK compilation failure

Adjust things and fix some bugs on RootRequester

Add type3 common dir support for themes

ManagerFragment: Remove those overlays from overlaysList

ManagerFragment: Try fixing [MENTION=3300472]jereksel[/MENTION] commit by uninstalling instead of just removing said overlays

Make comparition same as in compareTo methods

(Hopefully) Fix ManagerItem sorting once and for all

Overlays: Twice as strong vibrations if overlays fail to compile

Internal release 855

Revert "Remove unnecessary WeakReference"

Overlays: Fix incorrect base_spinner check

ProfileFragment: Remove redudant duplicate font checker

ThemeFragment: Cut it close, make the first load faster

Overlays: Prevent spinner load event to count as an item click event

Overlays: Enforce a few null checks and list refresh locations

References: Clear base variant on data clear

Overlays: Retain type3 spinner position when leaving themes

Overlays: Add a fastscroller to the RecyclerView

InformationActivity: Update the FAB icon to apply, no more Layers icon

ThemeFragment: Initialize the recyclerview with an empty adapter at boot

ThemeFragment: Do not hang UI thread as well

Clean up after pull request

Merge pull request #139 from jereksel/cleaning_wr

Update translator array

ManagerFragment/Overlays: Improve UX for swipe refresh layout

OverlayUpdater: Remove redundant code

ManagerFragment: Fixed where I left off

ManagerFragment: Disable the switch instead on layout reloading

ManagerFragment: Reset state of switch when swiping down

ManagerFragment: Shift the system to the swipeRefreshLayout UI

Overlays: Swipe down to refresh should not hang UI thread

Lunchbar: Clean up class

OverlayUpdater: Upgrade to support Type4s

ManagerFragment: quickSort -> use switch instead

ManagerFragment: Camel case

InformationActivity: Fix logic for showing certain tabs

ManagerFragment: Fix wrong logic for detecting disable mode capability

Build.gradle: No need a preview flavor, we are targeting 26 already

OVERLAY AWAITING REBOOT -> ERROR READING OVERLAY

SplashScreenActivity: Invisiblize the launch for the addon verification

OverlayUpdater: Clean up

ManagerFragment: Do not have Samsung specific refreshList() code anymore

ThemeManager: Improve the uninstall process

Revert "Substratum: Lower our support libraries footprint"

Support Samsung Galaxy S8 and LG G6's 18:9 screen ratio by default

ManagerFragment: Log the refreshList to see if this is really Samsung issue

OverlayUpdater: I really don't like intents

OverlayUpdater: Continue fixing this ****, me nub and need to sleep

InformationActivity: Traverse all views and set drawable only where we should

Substratum: Lower our support libraries footprint