Smartspacer: At a Glance, but actually useful

Kieron Quinn
7 min readOct 24, 2023

--

Smartspacer is a new customisable widget, but with a difference: It can upgrade the built in At a Glance on Pixels — without root!

tl;dr give me the download? It’s here

One of the most common complaints I see about the Pixel’s software, on Reddit and elsewhere, is the “dead space” at the top of the launcher — At a Glance. Most of the time it’s people asking if they can remove it.

Google’s Pixels have had an implementation of At a Glance for a number of years now, on the lock screen, always on display and at the top of the launcher. It’s meant to display contextual, timely information, such as the weather, upcoming calendar events and flights. They also provide a regular widget for people on other devices, or who use a custom launcher, in fact it received a redesign just last month, but for most people, the vast majority of the time, At a Glance displays just today’s date and the weather. And it sits there, on the Pixel Launcher, taking up one row of space.

What is often overlooked however is that the At a Glance on the Pixel Launcher and on the lock screen is not a widget. It scrolls horizontally — widgets cannot do this; it can play short video clips from a Nest Doorbell — widgets cannot do this; it has long press actions unique to the content — widgets cannot do this. “At a Glance” on the Pixels is actually just one of the so-called “Smartspaces” introduced on Android 12, which can display snippets of information across the OS. In fact, “At a Glance” is just the data being fed to the home, lock and AoD Smartspaces — and it doesn’t have to be this way.

Way back in November 2021, when Google were launching the Pixel 6 with then new Android 12, it was dug up that Google were overhauling At a Glance — and everyone assumed it would be big. Not long before, the Android 12 launch video teased flight boarding passes, loyalty cards, and shopping lists*, but what we got instead was a largely unused space on the home screen showing the date and weather.

*It seems these now may finally launch, almost two years later, as the setting appeared earlier this week to enable them.

At the time, I noticed it was possible to “inject” my own Smartspace custom service, and show custom Smartspace content to demonstrate all the available “templates” — predefined layouts the pages can take — and detailed it in a Twitter thread. At the end of the thread, I teased that this could possibly become an app to allow true customisation, to finally make the space useful, and after nearly a year and a half as a side project, Smartspacer is that. And the best part? It doesn’t even require root, only Shizuku (ADB).

Templates

Unlike widgets, which are generally pretty customisable by app developers, Smartspace uses “Targets”, of which have “Templates”. Each page of data must conform to these templates (if you’re a developer, they’re closer to Slices). There’s a fair few available to use, and they can of course be abused — lists don’t have to be shopping lists, an image can display anything, etc. While this does somewhat impose limits on what can be displayed, it still allows more customisability in other ways that widgets cannot. For example, you cannot show custom image sequences in widgets. With the Doorbell template in Smartspace, you can (this is what Nest does).

A selection of the available templates — the doorbell one has several states, two are shown

Targets & Complications

As mentioned earlier, Smartspace uses the concept of a “Target” to represent a page of information. This is great, so long as you only want one piece of information at once, but Smartspacer takes this one step further — Complications. Much like their inspiration on watches, Complications sit alongside the primary information (where possible) and provide a small bit of data themselves; the weather, how many unread emails you have, your step count, the battery level of your headphones etc. You can glance at your phone and immediately see you’ve got a meeting after lunch, but also that it’s raining so you’ll need an umbrella.

Smartspacer also allows you to keep At a Glance’s data, and show it alongside its own, so you can keep the best of both worlds.

Requirements

At a Glance is marketed as being powered by Google Assistant, giving a sense of “AI”. While Smartspacer doesn’t have the backing of a company with access to all your data, it does provide some local requirements, which can get you part the way to making what it shows dynamic and tailored for you. With options for showing content only on specific Wi-Fi networks, at specific locations, at times of the day or week, or even when an app is open in the background, you can do anything from show your gym pass when arriving at the gym to display the weather forecast for the next four days before you head to bed.

Plugins

Smartspacer was always going to provide some customisability for Smartspace, but from the beginning I was aware that with something like this, everyone has their own use cases. If you remember DashClock, back in the days when Android allowed custom lock screen widgets, you could download plugins which could display anything from missed calls to a random quote. This is basically what I wanted Smartspacer’s plugin system to achieve.

Smartspacer has a plugin repository, initially launching with 20 plugins I’ve made to get it going, but that anyone can submit to. There’s an SDK for developers that is designed to be simple to use, and with the ability to pull data from other app’s widgets to display on the Smartspace — effectively making them dynamic, showing only when needed, I hope it can foster a small ecosystem to make Smartspacer meet as many use cases as possible.

One of these launch plugins is fully featured, bi-directional, Tasker integration. You can display content from Tasker in the Smartspace (as well as show/hide it as required), but also invoke Tasker actions from interacting with Smartspace. During the open beta, I’ve already seen this used for home automation, much like the flashlight reminder At a Glance provides, but for smart home tech like lights and heaters — a great use case.

The available plugins at launch

The Widget

Smartspacer also offers, for those without Pixels or who want to use third party launchers, a standard widget. This, unlike Google’s At a Glance widget, does actually support some limited extra functionality normally limited to Smartspace, including multiple pages (controlled by buttons) and low-FPS video clips (achieved using an Accessibility Service). While it may not provide an experience that feels fully native, it does at least allow the previously inaccessible At a Glance content normally exclusive to the Pixel Launcher to be used in launchers like Nova, as well as Smartspacer’s custom targets. The widget also does not require Shizuku (ADB) on its own, although it is required to show the normally exclusive At a Glance content.

Smartspace (top) vs the Smartspacer Widget (bottom) on the Pixel Launcher for comparison. There is also an option to hide the arrow buttons and progress through the pages by tapping the indicator dots.

Expanded Smartspace

Expanded Smartspace, as the name suggests, is like Smartspace but bigger. In fact, it fills the screen. This takes heavy inspiration from the At a Glance concept we never got, originally meant to be launched from the lock screen. It shows all the current pages of Targets, all the Complications, and you can also add static widgets below the dynamic content.

Expanded Smartspace showing a Loyalty Card Target (due to be being in a store), as well as a number of Complications and some custom widgets. The greeting, search box and Google doodle are optional.

Expanded Smartspace can also be used as a replacement for the Google Discover feed, either with Discover Killer or a launcher which allows custom home feeds, hence why a search box and doodle are available as options.

OEM Smartspace

Smartspacer also has the ability to send basic information to “OEM Smartspace”, which is the legacy At a Glance implementation still used by some OEMs including OnePlus. It doesn’t support any of the special templates above, but can still show a title, subtitle, icon and single Complication. This means for example on a OnePlus device, you can show Now Playing (from Ambient Music Mod) on the always on display. OEM implementations vary wildly, and some require extra setup and root. You can find out more about these requirements here.

Both of these are OEM implementations of “OEM Smartspace”, which can display very basic custom information.

Launcher Integration

Even after its recent revamp, the At a Glance widget provided by the Google app, which can be used in 3rd party launchers, is still lacking compared to Smartspace in the Pixel Launcher. Smartspacer aims to solve that too, by providing an SDK for launchers to integrate a fully native experience, almost identical to that in the Pixel Launcher. It can display all Smartspace content, including that from At a Glance. Much like the plugin SDK, it’s designed to be simple to implement for launcher developers, since it handles all the various layout requirements for them. Early access has been given to the Nova team, and during development I was easily able to add support to a local build of Lawnchair — which I’ll be submitting to their GitHub shortly.

Where can I get it?

The Smartspacer app and SDK are available today to download from GitHub. Plugins can be downloaded from the Plugin Repository in the app. Root is not required, though Shizuku (ADB) is needed to access all the features, including replacing At a Glance.

--

--