A couple of weeks ago I ended up going down the rabbit hole of Android smart displays when I spotted this article about Google killing them (yet again, it seems) and decided to investigate alternatives to my now playing display.
I realize there is a much bigger market for tablets, but the lack of a decent desktop music player/dashboard that isn’t encumbered by completely closed technology and that doesn’t try to lock you in to subscription services or a single ecosystem (ahem Apple) feels a little weird, so I have been looking for a decent iPad mini-sized tablet that is actually designed to sit on a desktop for quite some time, and that article rekindled my interest in this.
After some research, I ended up finding a set of used Lenovo ThinkSmart View devices on sale on eBay, and decided to buy two since they were a literal bargain–only around EUR 50 each including shipping!
I ended up receiving two different SKUs: one with Zoom firmware and another with Teams firmware – and both devices work fine, although one has an odd screen burn-in pattern that is noticeable with dark content.
These are indeed Android Things (Android 8.1) devices, so I needed to reflash them to make them usable.
Liberating The Hardware
The first step was to flash an ADB-enabled firmware image, and this XDA thread has everything you need. I also did a little research and confirmed Lenovo has removed all official support resources, so apparently there aren’t any other usable images out there right now.
I had a first try at using Windows for this, but the Qualcomm tools are unbearably fiddly, and reflashing with Linux turned out to be much simpler:
# Install https://github.com/bkerler/edl
unzip firmware.zip
cd firmware/image
# plug in device and run edl (lazy mode to skip permissions on device)
sudo edl qfil rawprogram_unsparse.xml patch0.xml .
# Power on device with Vol+/Vol- pressed, and edl should start uploading
I then cleaned up most of the stock APKs, notably all the Lenovo agents (which I was able to see calling home to some weird URLs):
xargs -i adb shell pm uninstall --user 0 {} << EOF
com.cootek.smartinputv5.language.oem.arabic
com.cootek.smartinputv5.language.oem.cht
com.cootek.smartinputv5.language.oem.hindi
com.cootek.smartinputv5.language.oem.indonesian
com.cootek.smartinputv5.language.oem.russian
com.cootek.smartinputv5.language.oem.spanishlatin
com.cootek.smartinputv5.language.oem.thai
com.cootek.smartinputv5.language.oem.vietnam
com.kingston.devicesettings
com.kingston.kioskmodeapp
com.lenovo.mdm.admin.agent
com.lenovo.mdm.partner.agent
com.lenovo.oobe
com.microsoft.emmx
com.microsoft.skype.teams.ipphone
com.microsoft.teams.ipphone.admin.agent
com.microsoft.teams.ipphone.partner.agent
com.microsoft.windowsintune.companyportal
jp.co.fsi.fskaren.lenovo
org.codeaurora.snapcam
EOF
This was necessary because these are designed to be set up with service-specific MDM, and they don’t have a “normal” Android environment (there is an AOSP-style launcher, Settings and core contact/calendaring services, but those are all hidden away).
I then installed F-Droid (plus the Micro-G framework stubs), Aurora Store, PlexAmp, a button remapper (because the devices only have volume buttons, and the home/back navigation bar doesn’t exist in Android Things) and Notification Logger (because Android Things apparently requires you bring your own notification handling, and I can’t actually see notification popups).
Re-Commissioning
The first thing I did was to try to get it to behave like a normal Android device without weird buttons, so I installed Edge and the Microsoft launcher (both of which provide a degree of gesture navigation).
The second was to try to run a “normal” version of Teams and hook it up via InTune/Company Portal to my corporate account, just to see if it might be useful.
But since this is Android Things and lacks many stock Android frameworks, I could not get Defender to work. Since that is required for full policy compliance in my case, using these for work was a no-go, and I had to use a personal account for testing video calls:
Call quality was good on both Teams and Zoom1, and despite it not holding a candle to my 4K camera/shotgun XLR mike setup, I could see myself using this as a desk “phone” and take a significant amount of CPU load off my work laptop.
I may try that again if I can find a suitable official image.
Beyond Collaboration
However, since the most likely use of these is as home control/music appliances, I do not want them syncing with my personal account.
So I ended up removing Teams and the Microsoft launcher–I rather liked its Day view, but if I decide I want these to display a calendar, I can just export a read-only feed2.
For a simple, friendly and uncluttered experience, I settled on Lawnchair and a tiny little app to fetch the daily Bing wallpaper. I also replaced Edge with Firefox (and uBlock), and it has already proven good enough to, for instance, chech an address on Google Maps, so I think it’s a keeper.
Finally, I found a little app (Fluid) that provides almost complete gesture navigation, and set both units up with PlexAmp.
Shortcomings
Somewhat like the HomePod, the ThinkViews have little to no external connections. There is only a power jack and an USB-C port (set opposite to the volume buttons and covered by a little rubber cap), so I can’t really plug anything into them like my external speakers (which is the one thing that has prevented me from getting a HomePod Mini–that and it still not being on sale in Portugal).
The odd USB-C placement means fully replacing my desktop Raspberry Pi display is harder because it does quadruple duty as a dashboard, Node-RED server, audio player/endpoint (for both AirPlay and PlexAmp) and ambilight controller. I can move most of those functions to a headless box3, though.
Also, surprisingly, for some browser-related tasks these things are not that fast when compared to a Pi running Chromium–they’re certainly faster, but just not as much as I expected, especially when opening Node-RED dashboards (I 100% blame React for this).
In that regard, Safari on iOS devices has definitely spoiled me.
Straight-Out Wins
But using PlexAmp on them is vastly better than the experience I had until now–I can easily navigate my entire music collection and stream it to other PlexAmp devices (like my office display), so one is now set up on my living room, where it can talk to our audio setup via Bluetooth and double as a Zoom device for the kids.
Next Steps
Besides figuring out how to replace my office display with one of these, I also plan to work out how to integrate them with HomeKit, even though that sort of works already if I put in the time to tidy up Homebridge:
Doing a simple web dashboard is certainly an option, but I am weary of the brittleness of web technology and have been wanting an excuse to use Godot to build user interfaces, so that is an appealing direction to take this (and I can always fall back into Kotlin, which I love but have completely neglected).
I also plan to (carefully) open up the one with the screen burn-in and see if I can move the USB-C port nearer to the power jack, or, even better, stuff in one of the USB hub chips I have lying around and wire in an USB audio dongle to plug in speakers directly.
In the meantime, it’s great to have a smart music player in my living room again. These things may not beat a HomePod Mini in sleekness, but they more than make up for it in openness and flexibility–which is kind of ironic given their original intended purpose.
-
I also installed WhatsApp and Jitsi Meet, but have yet to test them. ↩︎
-
It’s pretty trivial to get a web-based read-only view out of Outlook these days, so I’m trying that first. ↩︎
-
Besides taking the headless box approach, there is also the option of upgrading the Pi 3 to a Pi 4 and use the current touchscreen until it dies–but it’s too soon to call it. ↩︎