Developing for Oppo Watch

When the Oppo Watch was released, I had some reports about problems. There are a few things about this watch that make it unique to other Wear OS devices so here are some things you should keep in mind.

Rectangular Screen

The oppo watch not only have a square screen, it’s height is larger than it’s width. This isn’t something that has had to be accounted for before this, so some changes need to be made if you are assuming the width is going to be the same as the height as I did on many of my watch faces. If you are cropping your images to a square, you should consider doing a center inside or center crop for the view if it is designed to fill the screen.

One thing I ran into when trying to adjust my watch faces was that the canvas returned by the onDraw function was still a square that I couldn’t draw outside of. I later found I needed to add this meta-data to the service in my app’s manifest to get it to fill the entire screen. Using this won’t affect your watches with square screens and you don’t have to use it if you just want your watch face centered on the rectange, but you won’t be taking advantage of all the real-estate it has to offer if you don’t.

<meta-data android:name="android.service.wallpaper.square_mode" android:value="false"/>

App Launcher Without Text

The default launcher for the Oppo Watch displays apps in a grid rather than the usual list. This isn’t a huge deal, but I quickly realized some apps used icons that weren’t very clear and one had several different launchers with the exact same icon so I had to guess which did which. Make sure your icons are distinguishable from each other as you can’t rely on text on this watch.

3100 Watch Faces Don’t Work

This was a big one for me as moving second hands in ambient mode is a big feature of some of my apps like Essential 3100 and Classic 3100. While the Oppo Watch has a 3100 chip, trying to use these features always resulted in a black screen when switching to ambient mode. A workaround is to check the manufacturer before any decomposition updates like this:

if(Build.MANUFACTURER != "oppo")

Older watches automatically skip this code so you don’t need to worry about other cases.


Notice anything else? Let me know in the comments.

Leave a Reply

Your email address will not be published. Required fields are marked *