BeatKeeper Version 1.0

Reposted from the CU Winds Google Glass blog available here.

Cindi and I spent a few hours two weeks ago getting BeatKeeper up and running on Glass. After cloning the repository on my local machine, I imported the app into Eclipse and pushed it to the device. We were immediately presented with something that looks like this:

It was quite exciting for us to see a metronome! I swiped forward and back to navigate through the controls; I hit play and a consistent pulse started in my ear. Perfect.

Next thing was making it landscape and more easy to read. I headed into the AndroidManifest.xml file and changed android:screenOrientation="portrait" to android:screenOrientation="landscape". Now we were presented with something a bit more usable, but the Start button was cut off:

This was a great time for me to introduce layout files to Cindi, so I went over the XML and explained how the placement worked. We messed around with the layout and sizing and ended up here:

After our NYC media lunch, I put in a lot of thought about usability. Buttons are appropriate for mobile devices, but not really for Glass. Using the slider and tap gestures are considerably more intuitive and simple. In their usability guidelines, Google writes, “Glass users expect the technology to be there when they want it and out of the way when they don’t. Your Glassware should never take precedence over users’ lives.” Especially in a rehearsal setting, I wanted to design something simple and intuitive.

Here is the first real version of BeatKeeper for Glass:

It’s simple and easy to read. To adjust the tempo, simply slide your finger on the side of Glass. To start and start the metronome, tap once. All of the gestures are recognized via a GestureDetector. I’ve stripped all unnecessary controls from the app. The resulting experience is sleek and straight forward to use.

Here is the source for the GestureDetector.

public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
					   float distanceY) {
    Log.d("Gesture Example", "onScroll: distanceX:" + distanceX +
    " distanceY:" + distanceY);
    if (distanceX < -1) { //determine scrolling direction
    	bpm++;
    	TextView bpmText = (TextView) findViewById(R.id.bps);
        bpmText.setText(""+bpm);
        metroTask.setBpm(bpm);
    } else if (distanceX > 1) { 
    	bpm--;
    	TextView bpmText = (TextView) findViewById(R.id.bps);
        bpmText.setText(""+bpm);
        metroTask.setBpm(bpm);
    } return true;

So what’s next for BeatKeeper for Glass?

A reverse metronome is a tool for finding a tempo via tapping. Over the next few days, I hope to create another simple tool that averages taps on the device. I’m not sure if it will be a standalone application or integrated with BeatKeeper. Although the two go hand-in-hand, it would be difficult to switch functions between a metronome and a reverse metronome. A long press on the side could change the mode of the application, but if you press and hold for around two seconds, you are presented with a Google Search. There is an intermediary gesture of around one second, onShowPress, but if you hold it down for too long, you’re presented with the search window. The only way to override this, as far as I know, would be to root the device and edit the Glass interface itself. The other idea is to utilize swiping up and down to change the functionality.

The (somewhat hastily written) source is viewable on Github here:

https://github.com/tehrlich/BeatKeeper

Categories:

Updated: