Enable Google Pixel 2’s Always on Display on the Nexus 6P, Pixel, & Pixel XL without Root

The Google Pixel 2 and Pixel 2 XL are the newest smartphones in Google’s Pixel smartphone series and while the hardware is mostly an incremental improvement over the previous generation Pixel phones, the software has a couple of really nifty new features. There’s the new camera technology used in the phone’s Portrait Mode feature, the always listening music recognition feature called Now Playing, and an Always on Display feature. Unfortunately, none of these features will make their way to Google’s previous smartphones, at least officially. We previously showed that it’s possible to enable the Pixel 2’s Always on Display via custom ROM, but we recently discovered that it’s possible to enable Always on Display on the Nexus 6P, Pixel, and Pixel XL without root.

Enable Google Pixel 2 Always on Display Function on the Nexus 6P, Pixel, and Pixel XL Enable Google Pixel 2 Always on Display Function on the Nexus 6P, Pixel, and Pixel XL

Picture credits: XDA Junior Member InFlames03


Always on Display can now be Enabled thanks to Android 8.1 and Substratum

Previously, we reported that it would be impossible to enable the Always on Display feature on any older Google phone. That’s because Google hardcoded the function that enables Always on Display to always return false. This was the case in the source code drop for Android 8.0 Oreo, but is no longer true with the release of Android 8.1 Oreo Developer Preview 1.

Enable Google Pixel 2 Always on Display Function on the Nexus 6P, Pixel, and Pixel XL

As shown in the screenshots above, the function responsible for determining whether or not to enable Always on Display previously returned only “false.” In the latest AmbientDisplayConfiguration code, however, it now checks for a boolean configuration value called “config_dozeAlwaysOnDisplayAvailable” which is set by Google to be true on the Pixel 2 and Pixel 2 XL, but false on every other phone they make.

To be more specific, Google uses a framework overlay installed in /vendor/overlay called framework-res_auto_generated_rro to specify the value of this configuration. Since this framework overlay is based on the OverlayManagerService (OMS), we can create our own framework overlay to force config_dozeAlwaysOnDisplayAvailable to return “true” on the Nexus 6P, Pixel, and Pixel XL.

This is possible because OMS, the theme framework built by Sony, is integrated natively starting in Android Oreo. Thanks to this, we can use the built-in commands to manage and install our own themes—all without requiring root. In doing so, developers discovered how to get the popular Substratum theme manager working on Android Oreo devices. Thus, in order to get Always on Display working, we will be using the Substratum theme manager with its Andromeda plugin in order to install our special framework overlay on the Nexus 6P, Pixel, and Pixel XL.

Lastly, there’s one more point of confusion I want to address—namely, the fact that we are using what’s popularly called a “theme engine” in order to enable a hidden feature. Although Substratum is commonly used to install themes, it’s more accurate to call these themes “resource overlays.” That’s because these “themes” specify values that replace the original resources of their target app. Usually resource overlays just replace color values in the original app, but they can also target the integers, strings, or boolean values in the app’s resources. Some existing Substratum overlays use this to customize the lock screen, recent apps screen, and quick settings for example.

In any case, hopefully you have a better understanding of what it is we’re about to do. Follow the tutorial below to enable Always on Display from the Pixel 2 onto the first generation Google Pixel phones as well as the Nexus 6P.


How to Enable Google Pixel 2’s Always on Display Feature on the Nexus 6P, Pixel, and Pixel XL

Requirements:

  • Nexus 6P, Google Pixel, or Google Pixel XL. Nexus 5X will work but is not recommended due to its lack of an OLED screen.
  • Android 8.1 Oreo Developer Preview 1. You can find the firmware files here.
  • License for Substratum’s Andromeda plugin ($1.99). Without this, you won’t be able to install the framework overlay we made. At least, not easily.

Tutorial

Special thanks to XDA Junior Member InFlames03 for assisting in the discovery of this feature, testing it, and finally offering a framework overlay for download. Check out his new Oreo and Fresh themes.

  1. Set up Substratum and its Andromeda plugin. You can follow this tutorial all the way until you finish part 1.
  2. Install the alwaysOn-enabler APK from AndroidFileHost or the Pixel Enabler app from the Google Play Store. The former is just a basic overlay that enables this feature while the latter will include more features in the future.
  3. Open Substratum and look for “Always On Enabler” by Sai in the theme list. Tap on it.
  4. Tap on “select to toggle all overlays.”
  5. Tap on the floating paint roller button.
  6. Select “Build & Enable.”
  7. Reboot.
  8. Open Settings –> Display. Expand the “Advanced” category and tap on “Ambient display.”
  9. You should see an “Always on” toggle. Disable and re-enable it. Enjoy Always on Display!

Alternatively, you can watch the following video that goes through the basic steps necessary to enable Always on Display. The video was captured by XDA Senior Member eqbirvin on his Google Pixel XL running Android 8.1 Oreo. Note that we still recommend you reboot even though the video does not show any rebooting.

Caveats

The Nexus 6P, Pixel, and Pixel XL do not offer an Always on Display feature by default because their screens aren’t properly tuned to enter the low power doze state that the Pixel 2’s screens are. Thus, using this overlay to enable Always on Display can be considered a hack since it’s not without its caveats. We haven’t used this for an extended period of time to measure power drain or other potential issues, but so far here are the issues we encountered:

  • Pressing the power button to wake directly into the lock screen from the Always on Display doesn’t work. You have to press the power button twice.
  • Double-tapping to wake directly into the lock screen from the Always on Display doesn’t work. You have to double-tap twice (4 taps).
  • Sometimes, a grey screen may pop-up during an unlock phase.

You won’t have any of the issues above if you unlock your phone from the Always on Display screen using the fingerprint scanner. If you do encounter any of the issues listed above, a simple re-lock and unlock with your fingerprint can fix the issue too.

Conclusion

We suspect that the issues listed above are related to the display not properly transitioning from the Always on Display state to the screen on state and are looking into potential fixes. It’s possible these issues may never be fixed, or they may be coincidentally fixed in a future Developer Preview. Our biggest fear is that Google sees what we’re doing and again hardcodes Always on Display. We hope that won’t happen, but it’s certainly a possibility. For now, enjoy the Google Pixel 2’s Always on Display feature while you can!

Swift Dark and Swift for Samsung Suspended from the Google Play Store

Google has suspended the “Swift Dark” and “Swift for Samsung” Substratum themes from the Google Play Store. Users on Android Oreo could, without root, install Swift Dark via the Andromeda Plugin, as it is one of the few Substratum themes available which natively supports Android Oreo.

Google has seemingly removed the applications as they linked to paid applications in their descriptions, the developers speculate. What is surprising is that Swift Dark has to link to Swift for Samsung as it’s a required application to use it on Samsung devices, and all the links within the descriptions were Google Play Store links.

The developers have appealed the removal, but for now, this means that users who have installed these themes will no longer update and as a result, other app updates may break the theme. Other themes from the same developers, such as Swift Black, have not been affected yet.

As the theme was removed from the Play Store, the developers have decided to release an installable APK on XDA so that users of the theme can manually update and be on the latest version. The dispute is between Google and the developers behind Swift Themes, so having an alternate for valid users ensures that they are not caught up in the crossfire as well. This apk is available for users who paid for the app, although it also opens up the potential for non-paying users to benefit from the work. Do note that this alternate release is likely to only be temporary. Once the problem is rectified and the suspension is lifted, the thread will no longer be updated with the latest APK.

If you’re affected by the removal of Swift Dark from the Play Store, you can check out the XDA thread to install the latest version available. If you want to be up to date on further news regarding its return to the Play Store, check out the developer’s Google+ page.

Source: Google+ Get Swift Dark for Substratum through our Themes subforum!

Substratum Release v900 Adds Support for Android 8.1, Oreo Custom ROMs and More

Late last night, Nicholas Chum announced a big update to Substratum that had begun rolling out via the Play Store. This update brings its release version up to 900, and comes with a ton of bug fixes, changes and new features. The most notable changes includes support for Google’s first developer preview of Android 8.1, support for Android Oreo custom ROMs, their new “Substratum Service,” a brand new application intro and a lot more.

If you had Substratum installed and accepted the OTA update to Android 8.1 Oreo developer preview 1 then you likely noticed that the application wasn’t working quite right. This is no longer the case, as release version 900 is now compatible with the latest version of Android. Not only that, but we’re told that they are now working on a new feature for Andromeda with plans to add what they’re calling “untethered mode.” Given that you need to tether to a PC in order to being using Andromeda, you can probably infer what this means; however, there weren’t any additional details about its release in this announcement.

Another big change here is the addition of support for Android Oreo custom ROMs, along with the new “Substratum Service.” This change fully deprecates Interfacer, which was never finished and will not be updated to Android Oreo as-is. If you build ROMs and are interested in this then you can find the WIP beta commits on their gerrit. The team is still working on platform-side features, and they’ve enabled what they’re calling “Shutdown animations” (which is also a work in progress).

As mentioned, this update adds a brand new application intro that even slims down the application since they’ve shifted over to vector resources. Themers should also know that they’ve added something called “type3-common” to the template. This allows for a dynamic base to build off the type3’s when there exists no default res folder. They’ve completely re-based the source code in this update, worked on improving the speed of the application when loading overlays and made some improvements to the UX for those using it on a Samsung device.


Source: +NicholasChumCDT

Theme OxygenOS/Android Oreo on OnePlus 3/3T Without Root Using Substratum

OnePlus just recently started publicly beta testing Android Oreo on the OnePlus 3 and the OnePlus 3T. While the Android 8.0 update to last year’s flagship OnePlus phones doesn’t bring Project Treble support, it does include support for Substratum themes. This is possible because the theme framework behind Substratum, Overlay Manager Service, is built into Android Oreo so that means it’s possible to theme the OnePlus 3 and OnePlus 3T without root. To help you with that, XDA Senior Member ungeeked has updated their Ozone Substratum theme to work with the new version of OxygenOS based on Android 8.0 Oreo.

We’ve covered other mods for the OnePlus 3 and the OnePlus 3T such as one that enables aptX and aptX HD Bluetooth audio codecs, but this mod only requires that you get the Andromeda plugin to start installing custom themes. We’ve written extensively on how to set up this from start to finish, so we recommend you check out that tutorial now.

OxygenOS already has a barebones theme system whichs let you choose between a light and dark theme. Along with this, you can also choose an accent color from 8 pre-defined choices, but apart from that your options are limited. Still, what you have here in terms of theming is better than what Google offers on its latest Pixel 2 and Pixel 2 XL.

But many of us want more than what is offered by default and this is where Substratum comes into play. For the OnePlus 3 and the OnePlus 3T, we previously needed root access to apply Substratum themes like Ozone to the device. That’s no longer the case, though.

For those of you who are familiar with ungeeked’s Ozone Substratum theme, then you’ll feel right at home here on Android Oreo. For those of you who have never heard of the Ozone theme, here are the following features that can be applied to the OnePlus 3 and the OnePlus 3T running the new Open Beta of OxygenOS:

  •  40+ accent colors
  • Modified OOS accent palette with material colors
  • Center or Left statusbar clock
  • Toggle LTE/4G in statusbar
  • Enable/Disable network traffic activity indicators
  • Configurable rounded recents.
  • Configurable QS icon count with option to hide labels
Theme OxygenOS on Android Oreo for the OnePlus 3 and OnePlus 3T Theme OxygenOS on Android Oreo for the OnePlus 3 and OnePlus 3T Theme OxygenOS on Android Oreo for the OnePlus 3 and OnePlus 3T Theme OxygenOS on Android Oreo for the OnePlus 3 and OnePlus 3T Theme OxygenOS on Android Oreo for the OnePlus 3 and OnePlus 3T
Theme the OnePlus 3/3T Running Android Oreo Beta Without Root

Why App Updates Sometimes Break Substratum Themes

It’s a common occurrence: users apply Substratum themes to their phones then later update Slack, WhatsApp, Instagram, or any number of other apps from the Play Store. Suddenly they can’t even open those apps until their theme overlays are disabled. Plenty of newer Substratum users have voiced their experiences with this issue ever since the release of rootless Substratum theming for Android Oreo.

Sometimes rebuilding the overlays in Substratum fixes the problem, but sometimes it won’t work until the theme developer updates the theme again. In the latter case, users are stuck having to use the affected apps in their unthemed, stock states. Needless to say, this can be a frustrating experience for many.

The problem is usually the result of a combination of factors: a poorly-coded third-party app, frequent updates to said apps that actually cause more problems than they fix, and limitations in the Overlay Manager Service (OMS) framework. I spoke with a couple of well-known themers who provided some valuable insights into the issue: Jeremy Beck, who makes the Spectrum Substratum theme, and David Wilson of Domination fame.

According to these Substratum stalwarts, some of the worst offenders in the realm of poorly-coded apps are among the most popular. WhatsApp, Instagram, Slack, Facebook and Telegram are examples that these Substratum themers cited to us when recounting this problem. In fact, David said they’re examples of “horribly, disgustingly, despicably coded” apps, which colorfully illustrates the frustration Substratum theme developers face when keeping their users happy as they try to unify their Android experiences around a common theme.

For example, a “despicably coded” app might tie the text color to the background color in its colors.xml file. If a themer changes the background color to no longer be white in this example, the text will also be changed and could be made harder (or even impossible) to read. Consequently, the themer will have to add their own layout xml files to their theme overlays to specify separate colors for text and background.

The caveat is that the new xml files have to also include every single character of code from the original app’s files of the same name so no functionality is lost. This is because OMS reads from the substitute, themer’s file while the app itself tries to do everything the original file allowed for. When the app is updated and even the slightest unrelated change is made to the original xml files, the overlays will fail to work.

Here’s how David explains it:

What these ridiculous “developers” (I use that term loosely when describing these clowns) do is they use items in layout xmls which make it hard for us to theme the app properly without adding those layout xmls into our overlay.

To give you an example, let’s take WhatsApp and look at an item in their /res/values/colors.xml which is <color name=”white”>#ffffffff</color>

They use @color/white for both text colours and background colours all throughout their app. This means that if a themer wants to change the colour of “white” to something dark to make their backgrounds dark, then it will make lots of text dark too which is very bad.

To work around that shortcoming, themers will add the layout xmls into their overlay and change either the text colour or the background colour or both from being something like android:background=”@color/white” to something like android:background=”@*android:color/background_dark” to make the background dark.

Now this is great and makes the background dark, but the layout xml needs to include everything in it that the original layout xml has which can vary from a few lines to over 100 lines. Within those lines of the layout xml can be lots of different resources which reside inside the app’s original code that get called on such as ids, dimens, strings, styles, etc etc.

Now herein lies the problem…. if a themer makes an overlay to suit WhatsApp 2.17.323 and WhatsApp updates to 2.17.351 (for example) then if WhatsApp in their infinite wisdom decide to change the name of say a string which was in the overlay made for 2.17.323 and that string doesn’t exist anymore in 2.17.351 then the overlay will not successfully build.

The same goes for anything within the overlay that is in any code that is calling on a resource that is within the app, if that particular resource was in the app that the overlay was designed for and then the app updates and the resource is no longer in the app’s code then the overlay will not compile.

This is just one example of the cat-and-mouse game of alternating app and theme updates that Substratum themers are faced with. When themers support a large number of third-party apps, they have to multiply this game several times over with each theme update. It’s a never-ending cycle of keeping up with multiple supported apps and hoping that frustrated users don’t rate their themes poorly between updates because Slack (for another example) pushed three updates to their app in the two weeks since the last update of their favorite Slack-supporting theme.

What can you do about it?

Personally, I usually wait for an update to my favorite themes before I update any apps I use that are themed. That said, not every themer has the time to constantly push updates to keep up with these app updates, so your mileage may vary. If you really can’t stand using an app in its unthemed state, then maybe waiting a few hours or days isn’t that big of a deal for you. If this is a deal breaker though, then perhaps you might wish to only theme system applications that are unlikely to change anytime soon (such as SystemUI or the Android Framework).

Just recognize that the problem isn’t because of Substratum itself or Substratum themes, and please don’t blame the theme developer when something goes wrong. This is the why theme engines on OEM flavors of Android such as EMUI, Samsung Experience, or LG UX don’t allow you to theme more than system apps and the system UI itself. To enjoy the level of customization that Substratum offers, the trade-off is that you might have to wait a short while to enjoy that latest app update.