Despite not (yet) having Google Glass, I've managed to get a hold of a system dump, so it's time to have some fun for the day and see if Glass has any (more) hidden goodies for us. It'll also be fun to see just what makes Glass tick, and how the OS is laid out.
APK Teardown is usually at its best when I have a previous version to diff against and, you know, when I've actually used or at least seen the software in question. I don't have any of those benefits for this teardown, so things could get interesting.
Glass Vs. Android
According to build.prop, this version of the Glass software is "XE4," so that's what I'm going to call it. "XE" no doubt stands for "eXplorer Edition." I wonder what XE 1 through 3 looked like? The device name is a very simple "Glass 1." Compared to the ridiculous code names we're used to with phones, this is a nice change of pace.
Here's the /system/app folder, and boy is this familiar. The Glass "OS," if you can call it that, is pretty much Android 4.0.4 (give or take a few 100,000 build counts) with a few special APKs that make up the Glass interface. It reminds me a lot of Facebook Home or Windows 3.1. There's this underlying OS (Android) that powers everything and, most of the time, you aren't supposed to see it. All of the typical user-facing Android apps (Calculator, Contacts, Clock, Gmail, etc.) have been ripped out, but the core is just plain Android.
Anything labeled "Android stuff" just seems to be the same 4.0.4 that we're familiar with, with all the non-English stuff stripped out, and maybe one or two extra permissions. The two exceptions to this are "GoogleTTS.apk," which is the Android 4.2 version of Google's Text To Speech engine, and "GoogleLoginService.apk," which, despite being labeled as "4.0.4," has some artwork I've never seen before:
The top left one is called "android_make_it_google.png," the top right is "setups_bg_account.png," (a honeycomb setup screen?) and the bottom one is "android_gplus.png." Has anyone ever spotted these before?
It's interesting that Glass is running on a version of Android that's over a year old. I wonder if they plan on eventually upgrading or if they're going the GTV route, and seemingly not caring about the base Android version. (GTV still runs Android 3.0!)
The framework has been tweaked to make Glass look like Glass and not like Android, which means Glass APKs aren't going to easily run on your phone. I was really excited for a bit, though.
Glass Could Use a Cleanup
It's hard to be critical of a 0.0000001 version of a piece of software, but I will try my best anyway: Glass code currently seems like a bit of a disorganized mess. Normally I wouldn't dare question my Googley cyborg overlords when it comes to programming, but there are just a few things in here that bother me.
This set of images (and all the supporting XML for them), is included in nearly every Glass app. That means there are twelve copies of this stuff floating around. Anything labeled "bar candy" is the Glass scrollbar, and probably belongs in a system-level location that everything has access to, like the framework. The same goes for things that would have a universal use, like the share button, "X" button, and the check marks. And this is just an example - there's duplicate stuff all over the place.
I get the feeling they made one Glass app, and just duplicated the base stuff for that app over and over again for everything else. There's no other explanation for why the Bluetooth app contains things like camera libraries. I guess wasting space doesn't matter when you have 16GB of storage and almost no apps, but it just seems unnecessary.
The "Glass Home" app is another thing that bothers me. This one app is responsible for the "Ok Glass" home screen, sure, but it's also handles the camera, settings, timeline, voice actions, email, and messaging. Shouldn't all this stuff be separate apps? The only Glass apps important enough to actually have separate APKs are Maps, Phone, and Handouts.
This reminds me of Android in the pre-Froyo days when every app (Maps, Gmail, etc.) was bundled with the system, and the only way to update anything was to push out a full system update. Google spent a lot of the Froyo/Gingerbread era working on "decoupling" apps from the Android system and offloading them to the Android Market so that they could be easily updated, and to this day Google still occasionally runs into problems from this early decision. Hopefully Glass doesn't have similar issues.
Maybe Glass is fine with one monolithic APK because everything is so simple, or because they are just getting started, or because there is no app store to speak of right now, but it just doesn't seem like the right way to do things.
Wink To Take A Picture
If you've been following Glass news, you might have already heard of this. Currently, Glass allows you to take a picture by pressing the physical camera button, or with a verbal command, but Reddit user fodawim discovered that Glass had a few references to taking a picture by just winking.
While "wink to take a picture" is not the world-exclusive information APK Teardown is used to dealing with; I'll cover it anyway while I'm here, because there's some stuff that hasn't seen the light of day yet.
Like this! These two are called "ic_wink_for_photo_off_big" and "ic_wink_for_photo_on_big." They're located in "GlassHome.apk" which, remember, is also the camera app. While I don't agree with the privacy nut's take on Google Glass; Google might want to show a little a more concern for how their product is presented. A camera silhouette with the Eye of Sauron in the middle in not the most comforting thing in the world.
If you somehow don't understand the concept of winking, Google has helpfully included not one, but two instructional animations. The first is a "first-person wink," which I assembled into a gif based on 14 incremental images and some animation XML. Example number 2 is a .MOV file of a winking Glass user.
Two videos about how to wink. I believe that such a clear lack of familiarly with a common human gesture proves that Glass is, in fact, alien technology.
Both of these animations are from "GlassGesture.apk" which seems to exclusively deal with the currently-unused wink gesture. GlassGesture is also packing some explanation text:
<item>Look straight ahead - not at Glass - and wink.</item>
<item>Use only your right eye.</item>
<item>Can you see all four corners of the screen?</item>
<item>Make sure your hair is not in the way.</item>
<string name="wink_calibration_success_hint">Now you can wink anytime to take a photo</string>
<string name="wink_calibration_failure">Failed to calibrate</string>
<string name="wink_calibration_save_failure">Failed to save calibration data</string>
<string name="wink_calibration_timeout_failure">Calibration timeout</string>
<string name="wink_calibration_need_help">Need help?</string>
The real question with all of this is, is winking an upcoming feature, or a canceled feature? Google has always been careful to design social cues into Glass. Looking up to see the screen, or using a verbal command, or raising your arm to use the touchpad or camera button are all obvious indicators to the people around you that you are using Glass. This non-subtle design was on purpose. I could see Google deeming winking a little too unnoticeable by those around you and axing the feature.
Glass can view (but not create) Photospheres, which is handled by this APK. There are a few crazy things in here that jumped out at me.
Lightcycle Is Back!
The package name for GlassPhotosphere.apk is actually "com.google.android.apps.lightcycle.glass!" If you were paying attention during APK Teardown's Mysterious Leftovers Special then you know all about Lightcycle. For the rest of you, Lightcycle is the code name for Photosphere. While Photosphere was in development, it had an entirely different UI that had this crazy neon Tron theme - all of that stuff made it to Glass as extra crap. It's not the first time the Glass Team has include some "bonus" material. I hope you've got a pair of sunglasses handy:
Glass is also packing the full suite of beta Lightcycle text and the "How to take Photospheres with your Galaxy Nexus" comic series:
I am showing you all this to make a point: The Glass photosphere APK contains a lot of stuff that it probably shouldn't contain. Most of the stuff in here is from the Android Gallery/Camera app. That means anything else in this section, while it is in the APK, should not be taken as concrete confirmation of something coming to Glass.
Like, for instance, this. There's lots of pictures and text in here about Photosphere creation, but there's also phone rotation icons, and the Android photosphere UI. It's a mess.
Since it is a mishmash of the beta-photosphere, released photosphere, and the Glass app, figuring out what is new is a bit of a challenge. What we can do is diff it against the Android 4.2 Gallery, which teased out the following (again, highly suspect) details:
We'll start with the most plausible. High Dynamic Range pictures!
<string name="experimental_settings">Experimental settings</string>
<string name="enable_hdr_mode">Enable HDR Mode</string>
<string name="enable_hdr_mode_description">If supported by the device, uses HDR mode to take pictures. You need to stay over the target for a while until the HDR picture is fully taken. Will crash on non-HDR capable devices.</string>
I could easily see this coming to Glass - HDR pictures would be nice. I'm not sure how you would deal with the camera settings, though. When you say "Ok Glass, take a picture." does that take an HDR picture or a regular one? Would they add "Take an HDR picture" as a voice command?
<string name="photo_sphere_calibration">Photo Sphere Calibration</string>
<string name="tap_to_take_photo">Tap to calibrate</string>
<string name="marker_distance">Marker distance (in cm)</string>
<string name="marker_distance_description">The distance in centimeters between the solid lines on the target pattern.</string>
<string name="target_distance">Target distance (in cm)</string>
<string name="target_distance_description">The distance in centimeters from the device to the target pattern.</string>
<string name="displayed_fov_label">Displayed FOV :</string>
<string name="reported_fov_label">Reported FOV :</string>
Photosphere Calibration? This sounds far too technical to ever see the light of day outside of Google, so I'm going to flag this as "testing software." It's really weird that this deals with things like Field of View, which I guess would relate to the default zoom level of a Photosphere. Strange. Anyone have any theories? (Theories that don't involve the phrase "Augmented reality"?)
Photosphere Live Wallpaper
<string name="panorama_wallpaper_title">Photo Sphere Live Wallpaper</string>
<string name="panorama_wallpaper_description">This live wallapper displays photo spheres.</string>
Glass doesn't even have regular wallpaper, let alone live wallpaper. Glass is transparent - it could never use a live wallpaper.
Actually, this brings up and interesting point: the Glass Photosphere app is based on the Android Photosphere app (aka the Camera/Gallery) but we really don't know what version of the Android Gallery/Camera app they based it on - the version in the manifest only says "glass-1." This couldn't be based on Android 4.0.4 like everything else, because Photosphere was only introduced in 4.2. My completely crazy theory is that they based GlassPhotosphere on the latest internal version of the Android Gallery/Photosphere app that they could find, which is a little newer than the public Android 4.2 version.
This would explain where the never-before-seen and completely Glass-irrelevant Photosphere live wallpaper feature came from, and it would explain the new HDR text. So I'm going to tentatively flag this one as a possible Android 4.3 feature. How's that for a stretch?
Also, Google: "This live wallapper?" Really? Get a spell checker.
I guess the big question would be, is "Photosphere creation coming to Google Glass?" Well, probably, but there's no proof of that in this APK, just a bunch of legacy Android stuff. I'd like to see some Glass-specific photosphere creation stuff, and there isn't any.
For what it's worth, the application name (which I guess you would never see in Glass) is "Glass Photo Sphere Viewer."
The Glass Team <3s Typography
Glass has this really awesome minimalist aesthetic going for it. It so minimalist that usually the only thing they have to communicate with the user is the typography, and it is beautiful. The Glass team is apparently quite passionate about it, as they've chosen to name Glass's primary TextView "com.google.glass.widget.TypophileTextView ." I just thought I'd point that out.
Glass also shipped a new weight of Roboto: Roboto-Black. Any typophiles out there will probably be interested in this download link. Roboto-Black will look great in your collection next to Google Keep's Roboto Slab and the original Roboto pack.
That's it for Glass XE4. Now that we've got a good base layer down, the next Glass update should be a lot easier. They're supposedly doing monthly updates, which I intend to keep an eye on. Here's hoping for some cleanup work between now and then.
Also, Google, If you could hurry up with that Glass shipment, that would be swell. I'll see you next update!