Android

Guard Dog and Sentry: watching doggies with Reolink on Android TV and Mac

The house I’m in has an extensive Reolink camera system, inside and outside. We’re keeping an eye on three doggies as they move between those spaces. Reolink’s desktop app didn’t automatically switch to the cameras with activity, and I found it a bit crashy in my use. I wanted the views to follow wherever the dogs were hanging out without having to keep switching cameras myself.

So I built two sister apps with the assistance of Codex:

  • Guard Dog, a Kotlin app for the living-room Android TV, gives everyone in the room a view of what’s happening.
  • Sentry, a native Swift app for my Mac, lets me watch the doggies while I’m working, including in Picture in Picture.

I supplied the goals and directed the work; Codex did the investigation and implementation described here. Codex also drafted this post.

Choosing the views

Both apps use local Home Assistant activity events to choose which cameras to show, with a direct event connection for one standalone camera. Video goes straight from the cameras or NVR to the viewing app. Home Assistant supplies the activity information without carrying the video.

Up to four cameras appear at once. Already-visible cameras keep their positions when another view arrives, and a cleared detection gets twenty seconds of grace. When everything goes quiet, the last active camera stays on screen. A dog briefly falling out of the camera’s detection zone shouldn’t make the whole layout collapse and reform.

[... 859 words]

12:00 am / Android , Macos , Swift , Reolink , Home assistant , Video , Codex , Ai assisted

Building an Android app for spoken radar alerts on my scooter

The Garmin Varia RVR315 is designed as a bike radar, but I like using it on my scooter to help keep track of vehicles approaching from behind. The radar clips onto the back of my CamelBak with an EFEALL strap mount, and my phone stays in my pocket. I’m not a fan of mounting the phone on the scooter, so I wanted spoken information about vehicles approaching from behind without having to look at a screen.

The radar sends its detections over Bluetooth. I also have the recurring problem of Garmin’s Android app stopping in the background and me forgetting to open it again. I wanted clearer connection behavior as well as the spoken alerts.

The clip is sold as a saddle-bag strap mount with a Garmin quarter-turn fitting, including support for the RVR315. It can rotate and tilt and comes with a safety tether. I’m using it on my CamelBak instead of a bike’s saddle bag.

That turned into RideWatch, a standalone Android app I built with Codex doing the research and implementation under my direction. The source is now public. It’s still a prototype, but I’ve been using it on scooter rides.

It’s neat how much I can follow by listening. I can tell when a car behind me is slowing down to pull over or park, or when one is approaching very quickly. Those changing alerts give me a sense of what’s happening behind me while my phone stays in my pocket.

[... 916 words]

12:00 am / Android , Scooter , Bluetooth , Codex

An Android Accessibility Service for Eventbrite Organizers: PassShout

The Scene:

  • It’s Saturday. And it’s like so many people have free time on that date.
  • You’re manning a convention center ticket check-in booth.
  • Your eyesight just isn’t the best. After looking at hundreds, if not thousands of them, it can be a blur.
  • You’re using Android.
  • There’s a long line and people have different pass or ticket types, sometimes even if they are in the same group.
  • You’re processing thousands of people.
  • You might not even have a table.
  • You’re using Eventbrite Organizer.

I have a tool for you! It’s called PassShout.

In addition to a chime, it’ll read out loud the pass/ticket type.

This greatly reduces operational mistakes. PassShout is part of an implementation of a method in occupational safety called Pointing and Calling. PAC has been adopted widely thoughout Asia and the NYC Metro to reduce incidents on trains systems. By calling out the type, things move faster and mistakes are reduced.

Implementation

This is the first Android app I’ve written in Kotlin. It’s amazing what the Android Accessibility API offers for third party programs to make things more accessible. Unfortunately, there does not seem to be an equivalent for iOS.

Kotlin is really easy to read and write. I can see how it’s not Scala and is closer to a usable modern Java. It’s basically the Swift of Android.

7:15 pm / Kotlin , Android , Eventbrite