The hidden features revealed by Android 13 QPR1’s source code
Earlier this week, Google released another Feature Drop for its Pixel phones. The Feature Drop brought a smorgasbord of new features primarily to the latest phones in Google’s Pixel lineup, but older Pixels also got a taste of something new. Though the Pixel’s latest Feature Drop is its biggest yet, there’s even more to the update than meets the eye. That’s because the update didn’t just bring new features exclusive to Pixel phones, it also marked the first public release of Android 13 QPR1.
What is Android 13 QPR1? It’s Android 13’s first Quarterly Platform Release. A QPR is a maintenance release that includes lots of bug fixes, system optimizations, and a couple of minor quality-of-life features. QPRs typically don’t include major new features, because major features usually require some kind of modification to the way the system behaves or a change in Android’s available APIs, neither of which are allowed without bumping the API level (and Google doesn’t do that often so developers have time to keep up with the pace of changes).
None of the changes in Android 13 QPR1 are exclusive to Pixel phones, though, because Google released its source code shortly after rolling out the update to Pixels. So what’s actually new? I’ll have a breakdown of everything new in my Android 13 changelog article once that’s updated (soon, I promise), but in the meantime, I wanted to highlight a bunch of code changes that suggest new features are in the pipeline. Most of the code changes I’m about to highlight are for features that aren’t live yet, as they’re likely intended to launch with a future product or software update. Still, they offer a glimpse of what’s to come in a future QPR or in Android 14.
The revival of Android’s Desktop Mode
There have been a lot of attempts at turning an Android phone into an all-in-one computing device. Most of these attempts failed or only managed to garner a niche fanbase. Part of the problem with these desktop-ification attempts is that they weren’t backed by Google, which meant that OEMs had to do a lot of their own leg work to make a proper desktop-like UI and make apps run properly on their desktop-like environment. This resulted in fragmentation, making it harder for app developers to support them (so many didn’t).
That was the past, though. Android has made great strides in supporting large screen devices, with features like the taskbar and a revamped split screen experience. It now appears that Google is revisiting Android’s desktop mode experience, a feature whose development has been stagnant since it was quietly added in Android 10.
“Desktop mode” in Android was basically added so developers can test how their apps behave in multi-display scenarios. It was not intended for users at all, which is why the experience is so barebones. But new code added in Android 13 QPR1 reveals that a lot of work is being done to make desktop mode more usable for users.
All of these changes are hidden behind a pair of flags that, when enabled, surface a “desktop mode” Quick Setting tile in developer options. It’s not clear if a Quick Setting access point is only for prototyping or if it’s going to be how users will eventually toggle desktop mode. Toggling this tile enables desktop mode, though to actually access the desktop environment right now, you’ll need to launch the launcher’s secondary display activity (com.android.launcher3.secondarydisplay.SecondaryDisplayLauncher for AOSP Launcher3/Pixel Launcher). For easier prototyping, Google added a shortcut to launch this activity in the launcher’s developer options menu (which is only accessible on userdebug builds).
Once desktop mode is enabled, the system will hide the freeform multiwindow button from the app menu in recents as well as the maximize button from window captions (ie. the title bar). This is because Google intends for freeform apps to only run in the desktop experience and not the regular UI. Android will even track active freeform apps and filter them from appearing in recents unless you click on the desktop mode tile while in recents.
The decision to hide the maximize button is strange to me, as I know I’ll want to temporarily maximize a couple of windows (like Chrome) from time to time while in desktop mode. It’s clear though that the Android team is still debating what buttons to show in window captions, as evidenced by the fact that a minimize button exists but is currently hidden by default. Even if there isn’t a maximize button, I think you’ll still be able to maximize tasks, perhaps through the standard double click approach (ie. double tap the window caption to maximize); I think this is the case because Android will support maximizing freeform tasks while still having window captions showing. In fact, it sounds like, when desktop mode is enabled, all standard activities will show window captions, except for the launcher or recents activities.
Apart from windowing improvements, Android 13 QPR1 also contains improvements to the taskbar and app drawer experience in the desktop environment. For instance, the taskbar can show running app icons when desktop mode is enabled. Meanwhile, the app drawer adds an app predictions row and also a search bar.
One way to exit desktop mode will be to drag a freeform task to the status bar area at the top of the screen; the code change implementing this is “part of the effort to implement desktop mode changes based on drag gestures.” I’m not aware of any other drag gestures that have been implemented, but seeing as desktop mode is clearly a work in progress, we might see more improvements added in Android 13 QPR2.
 fe2a168189 : Developer tile for toggling desktop mode
 e03065a00c72 : Core changes to support desktop mode option
 93c710b9ac : Added debug menu option for testing secondary display.
 10f2250f1273 : Hide some options when desktop mode is available
 6b31ed99d9 : Hide freeform button from app menu in recents
 b092c78a7a0e : Track active freeform tasks
 d849498a69d0 : Add support to show apps on desktop in sysui proxy
 6d80b7d676b9 : Adding A Minimize Button
 f15e311af5cf : Add WM shell caption to fullscreen tasks
 e4a9f826067b : Show captions on tablets even when display windowing mode is fullscreen.
 4958d4f5f0ee : Show window captions only on standard activities
 a729c5a26bc1 : Add running apps icons to taskbar for desktop environment.
 1b4869fcbc : Add app predictions to secondary display app drawer & fix tab UI.
 ba89ef953144 : Exit desktop mode on dragging a task to the top of the screen.
Use Android’s taskbar on a phone
When Google introduced the taskbar in Android 12L, they coded it so it would only appear on large screen devices. Android defines a “large screen device” as one where the screen width in dp is ≥600. Since it’s possible to adjust Android’s screen width using the “smallest width” developer option, it’s possible to enable the taskbar on phones. However, increasing the screen width value to ≥600 results in a UI that’s uncomfortably small to read and interact with on a phone (at least for me), so ideally, it’d be nice to be able to turn on the taskbar without adjusting the display size.
Fortunately, that’s exactly what Google appears to be working on. In Android 13 QPR1, there’s a new flag explicitly for phones that hides the standard nav bar window in favor of the taskbar. Since there’s a lot less visual space on phones, the dimensions of the taskbar when present and stashed have been lowered accordingly. It’s surprising, then, that Google is supporting the 3-button nav with the phone taskbar given the lack of space.
When I tried to enable this feature, it didn’t work for me. However, you can see what it might look like thanks to developer Danny Lin, who modded Android 12L to force the taskbar to show even with a lower screen width value.
March 10, 2022
 a23db5c4c7c3 : Add flag to hide nav bar window in favor of taskbar.
 7db37b3d94 : Use Taskbar window for phones (only works on gesture nav) with flag
 8a3d05587e : Show 3 button nav on phone in Taskbar (1/2)
Android’s screen saver will turn your tablet into a Nest Hub
In preparation for the Pixel Tablet launch, Google has been working on revamping Android’s years-old screen saver feature to add complications. Complications are basically data elements that are overlaid on top of the screen saver. The complications that were added in the initial Android 13 release include a complication to show air quality info (AQI), one to show the weather, another to show the date/time, and finally one to show information from a cast session.
Android 13 QPR1 adds several new complications. First, there’s a new “smartspace” complication type. “Smartspace” is the code-name for the “At a Glance” widget that’s integrated in the launcher and lock screen on Pixel devices. This will likely be a pretty versatile complication considering how many things “At a Glance” is capable of showing. Below the smartspace complication will be the “media entry” complication, which is basically a chip that, when tapped, launches a view for controlling media. Finally there’s the “home controls” complication, which adds a home controls chip (located to the left of the cast complication) when the user has devices added to Android’s Quick Access Device Controls. This complication will make it easy to control smart home devices like lights and thermostats right from the screen saver.
Google also cleaned up some of the previous work they did related to screen savers and complications in Android 13 QPR1. They removed the date/time complication because that data will be shown by the new smartspace complication. They unpublished the weather and AQI complications because “there is no expected 3p [3rd party] usage of these.” These two complications have been removed from AOSP as they will seemingly be Pixel-exclusive. To ensure that text from complications is visible on screen savers with a light background, Google implemented a double shadow text view. Lastly, Google reimplemented Android 13’s low light ambient clock as a screen saver instead of as a SystemUI component. The system will change the active screen saver to the low light ambient clock and hide the status bar whenever there’s low ambient lighting. The ambient lighting thresholds were set to match the thresholds on the Nest Hub.
SystemUI’s new screen saver for when you dock your tablet and there’s low ambient light. pic.twitter.com/QjtbR6mo4k— Mishaal Rahman (@MishaalRahman) October 5, 2022
To make it possible to launch the screen saver from any screen, Google added a “screen saver” tile in Android 13 QPR1. This tile was added to Android’s list of default Quick Settings tiles, so it’s likely this tile is intended for users as well as developers.
 b6c84b2b99db : Add smartspace complication type.
 ea8cd10083ac : Add media entry Dream complication.
 49eed100b49e : Tapping dream media chip opens media instead of UMO if flag is set.
 0f7ec4e86736 : Add home controls dream complication.
 5d44b8feda06 : Update complications layout.
 2d9d8fc6c50d : Remove clock date complication.
 4a2501278c17 : Move Weather and AQI complications to vendor/unbundled_google.
 ef70e618c70f : Implement double shadow text view for dream complications
 54e3ae5836e0 : Implement low light dream library.
 ac3a50e01581 : Remove doze low light clock.
 0bfb405bd386 : Hide the status bar dream overlay when low light is active.
 7581623bc821 : Update low light mode trigger thresholds.
 336d8fd21c34 : Creates Dream Tile.
Custom clocks for the lock screen
Back in Android 10, Google experimented with lock screen clock customization. Though the feature never shipped, it would have allowed users to pick from a few different clock presets. It appeared as if the feature might launch with Android 12 when I spotted a reference to a seemingly Pixel-exclusive app that would provide different clock presets. That also never ended up happening. However, Android 13 QPR1 hints that lock screen clock customization is in the works once again.
One code change implements a new section of the ThemePicker app (AKA Styles & Wallpapers on Pixel phones) called “Custom Clock.” This section, as its name suggests, lets you pick a custom clock face for the lock screen. A separate flag in SystemUI controls whether or not to allow custom clocks to be shown on the lock screen.
 391aa68 : Create clock customization section
 1110e66232a1 : Add Flag for Custom Clocks
Partial screen sharing
Android 13 QPR1 adds support for taking a “partial” screen share, which is a recording of a single app’s view instead of the whole screen. A partial screen share is initiated by selecting an app in the app selection flow that’s launched through a button in the current “screen recorder” dialog. This button is currently hidden behind a feature flag. Eventually, the button will be replaced by a dropdown, and the app selection flow will show a list of recent tasks with thumbnails. A new, private Activity API has been added to facilitate partial screen sharing, one which allows SystemUI to immediately be notified of certain changes in the lifecycle of the activity being recorded.
Android 13 QPR1 Beta 1 is testing a new “App” button in the system screen recorder that lets you quickly select an app to launch and start recording. pic.twitter.com/dHr10K4vmi— Mishaal Rahman (@MishaalRahman) September 8, 2022
 2bcb37a7ab14 : [Partial screen sharing] App selector initial version
 f9ea202f4246 : [Partial Screensharing] Add a temporary entrypoint in SysUI screen recorder
 333c007f0854 : [Partial Screensharing] Add initial recents selector UI
 f45946c742d6 : [Partial Screensharing] Implement loading of recent tasks, thumbnails and icons
 12f5992e4df6 : [Partial Screenshare] introduce a hidden, permission-protected Activity API
Launch Google Keep and make a drawing from anywhere
Google created a special floating task window in Android 13 QPR1 that’s distinct from existing floating views (like freeform app windows, picture-in-picture, and bubbles). Like picture-in-picture windows, a floating task window can be stashed to the side, and there can only be one on screen at a time. Similar to bubbles, the floating task window can be dismissed by dragging it to a dismiss target near the bottom of the screen. Like other features in this piece, this one is also hidden behind a flag.
When the flag is enabled and a package with the activity specified in the launcher’s config is available, then a button will be added to the taskbar to launch the specified activity in a floating task window.Alternatively, if a separate flag is enabled, then that activity will be launched as a bubble.
There’s a new button that can appear on the taskbar in Android 13 QPR1 Beta 3 on Pixel devices. When you tap the pencil icon, Google Keep’s drawing mode is opened (Google’s experimenting with launching it as a bubble and floating window).— Mishaal Rahman (@MishaalRahman) October 21, 2022
This is likely for the Pixel Tablet. pic.twitter.com/1qLeNvZGGd
 38edb219c0cd : Support for a floating task window (behind a sysui flag)
 78c899314e : Add a button for floating tasks to taskbar (behind a flag)
 3b9ef3fee145 : Allow floating tasks to be shown as bubbles (behind a sysui flag)
A more “advanced” VPN
The Android 13 QPR1 codebase hints at a new “advanced VPN” feature. This is gated by a framework flag and exists in a separate section of Android’s VPN settings (Settings > Network & Internet > VPN) called “built-in”. Unlike regular VPN apps, an “advanced VPN” will always appear in Android’s VPN settings, even if the user hasn’t consented to enable the VPN. That doesn’t mean it’s always enabled, it just means it doesn’t need to have been enabled by the user at least once before it can appear in settings, which is the case for regular VPN apps.
There isn’t a lot of other information about this feature in the Android 13 QPR1 source code. However, on Pixel, the Pixel’s Settings app recognizes an app with the package name “com.google.android.apps.privacy.wildlife” as a valid “advanced VPN” provider. This app is named “AdaptiveVPNPrebuilt” in the system image of the Pixel 7, but unfortunately, it is a stub APK, meaning it doesn’t have any code.
It is unclear what additional features this “advanced VPN” will provide once it’s updated. One of the key features of the Pixel 7 is its access to a free VPN through Google One, so it’s possible this “advanced VPN” app will enhance this functionality in some way.
Beta 3 adds support for “built-in” VPNs in preparation for the launch of the Pixel 7’s free Google One VPN service.https://t.co/3589Uj0zRc.apps.privacy.wildlife = AdaptiveVPNPrebuilt, a stub APK in the Pixel 7’s system image. pic.twitter.com/rxGLKHwggm— Mishaal Rahman (@MishaalRahman) October 21, 2022
 858e6ff3d5 : RESTRICT AUTOMERGE Implement advanced vpn ui in vpn settings
 1311019b9a : RESTRICT AUTOMERGE Let advanced VPN profile visible immediately before the user consent to use VPN feature
Split-screen support for Android TV
There are relatively few changes in Android 13 for TVs compared to for phones and tablets, but one of the more significant changes is the introduction of an expanded picture-in-picture mode. An expanded PiP window can be placed side-by-side with another activity, which sounds similar to split screen multitasking in regular Android land. Sure enough, the QPR1 release backs this up and adds a new “TV splitscreen menu” that allows the user to “change the focused task, swap the stages and exit the splitscreen mode by closing one of the stages.”
The TV split screen menu is currently accessed by manually sending the com.android.wm.shell.splitscreen.SHOW_MENU broadcast. However, since there isn’t an emulator build for Android TV 13 QPR1, I haven’t been able to test this yet.
 e6bf1d16cb10 : Add TV splitscreen menu
Immersive mode support for Android Automotive
Careful consideration is given to the design of Android Automotive to maximize road safety. It previously wasn’t possible for apps in Android Automotive to enter immersive mode (except for the SetupWizard app). Android Automotive 13 QPR1, however, adds system-wide immersive mode support. When an app requests immersive mode, “an affordance will be shown in the title bar that allows users to expand the foreground display area to take up the entire screen.”
 1ee9de76d : Fix immersive mode support for SUW
 690bc432a : Immersive Mode Support for RickyBobby
Pixel’s Quick Tap is moving to Android’s Private Compute Core
“Quick Tap” is a gesture available on select Pixel phones that allows you to double tap the back of the phone to do a certain (configurable) action. This feature is Pixel-exclusive, although variations of it exist on many OEM devices (who have implemented their own versions of the feature). According to developer Kieron Quinn, “Quick Tap” uses a nanoapp written to Android’s Context Hub Runtime Environment (CHRE) API for gesture detection. This nanoapp runs on the low power context hub to minimize power consumption of continuous accelerometer and gyroscope readings when the screen is on.
Currently, the bulk of the code related to “Quick Tap” can be found in the Pixel’s SystemUI app. However, Google appears to be changing how “Quick Tap” is implemented. Code changes in Android 13 QPR1 suggest that “Quick Tap” gesture detection will be handled by the Android System Intelligence (ASI) app, which is part of Android’s Private Compute Core.
ASI will still, of course, offload raw sensor data processing to a nanoapp on the context hub, but there will now be a separation between the app that’s responsible for determining if a “Quick Tap” event happened (ASI) and the app that handles what happens in response to the event (SystemUI). The mechanism that these two apps will use to interact with one another will be through Android 13’s AmbientContext API, the same API used for implementing the Pixel’s cough and snore detection feature in a privacy-preserving manner.
I’m not entirely sure why this change is being implemented, but one reason could be for added privacy: SystemUI on Pixel requests the Internet permission, unlike AOSP SystemUI. Another, less likely reason, is that Google wants to share its “Quick Tap” feature with OEMs, who would need to be given a build of ASI and a signed nanoapp.
(A nanoapp running on the context hub also powers the Pixel’s car crash detection feature in case you’re interested in learning more about how this kind of feature works.)
 e07874ceacab : Add flag QUICK_TAP_IN_PCC in SystemUI to enable the quicktap detection in PCC.
 c7eeaf2df0ed : Change SystemUI manifest to use permission ACCESS_AMBIENT_CONTEXT_EVENT
 81f52b053da6 : AmbientContextManager API changes to support quick-tap detection
Here’s stuff that I think is interesting but which didn’t make the cut for a dedicated section:
- The Media Tap To Transfer feature was enabled then disabled for Android 13 QPR1. Based on what I know of this feature, it likely won’t land until the Pixel Tablet launch.
- There’s a new flag for a “screen contents translation” feature. There’s little to go off of, but just based on the name, it sounds like this feature will translate the contents of the screen. Obviously. How exactly it’ll do that is what I don’t know (and admittedly haven’t looked too deeply into yet).
- A “remote selection toolbar” feature is planned for Android 13 QPR2. What exactly this does is unclear considering all the code for it is missing from AOSP. It sounds like it’ll be related to the text selection toolbar that appears when you long-press a text or image, but on a remote view of some kind?
- Android’s new predictive back gesture won’t be enabled by default until Android 14, but when it is, it may come with a new back indicator arrow.
- Google is experimenting with a system property that makes it less likely for users to accidentally dismiss picture-in-picture windows or bubbles. Right now, a quick fling towards the bottom will dismiss a PiP window or bubble. With this flag enabled, only an intentional flag over the dismiss target will dismiss it.
 cd0a17074849 : [Media TTT] Turn the TTT flag off for Android T-QPR1.
 d4070d0848ac : Add a feature flag for screen contents translation
 8be177396404 : [DO NOT MERGE] Revert “Revert “[DO NOT MERGE] Remove selection toolbar code from build time””
 6acb1cfda8d2 : Introduce a flag for new back affordance
 d030be309aa1 : Turn off the new back arrow in Teamfood.
 7aa4937284e8 : Add system property to enable/disable fling to dismiss for PiP and Bubbles.
Thanks for reading another edition of Android Dessert Bites! This article most focuses on the hidden features introduced in Android 13 QPR1, many of which are still in development. If you want to know what new features are available right now, then read my Android 13 changelog piece which covers everything new.
If you want to learn more about what goes on under-the-hood in the Android platform, check out the other posts in the Android Dessert Bites column by clicking the image below: