Hangouts was one of many Google apps that received pretty significant updates last week. Version 1.2 finally brought availability statuses for people on your contact list, better organization of contacts, and several other improvements. Under-the-hood, however, I spotted a few more additions that don't seem to be live just yet, which is exactly what we have APK teardowns around here for.

Hey, you. Yes, you. Don't forget to check out the Gmail teardown I did on Saturday and voice your opinion on ads that are coming to the Android app.

Some history

Back in the wonderful days of Google Talk, you could set an online status (Available, Busy, Invisible) along with a custom status message. After "upgrading" Google Talk to Hangouts, we lost all ability to set a status. Hell, we didn't even have online status indicators for people in the contact list for over 4 months until the last update.

Remember these? They were nice, weren't they?

image

Good old Google Talk

While using Google Talk, you used to be able to hover on a contact and see the status (on the left). Now, with Hangouts, no status for you (on the right).

image image

Left: Google Talk; right: Hangouts

Google knows that Hangouts lacks pretty basic features, and it looks like the team has been working on bringing them back, with a vengeance. Say hello to rich statuses.

To support the rich status claim, we have a number of new files:

  • rich_status_settings_menu.xml
  • rich_status_settings_toggle.xml
  • rich_status_settings.xml

From what I can tell, the functionality isn't fully baked yet, but it has at least two distinct components besides the usual status message. They are moods and activities.

Activity Statuses

It looks like you will be able to set various activities as part of your rich status. They are: biking, call, car, laptop, mobile, tablet, video, and walking. I'm not sure if these will be fully automated or manual, but it's definitely possible for Hangouts to figure them all out without ever asking you.

Call, laptop, mobile, tablet, and video are obvious - they're part of the app's environment on your phone, tablet, or laptop.

Biking, car, and walking can be easily and efficiently discovered using the relatively new Activity recognition API.

Here are all the new icons I found in the APK:

  • ic_active_status_biking.png
  • ic_active_status_call.png
  • ic_active_status_car.png
  • ic_active_status_laptop.png
  • ic_active_status_mobile.png
  • ic_active_status_tablet.png
  • ic_active_status_video.png
  • ic_active_status_walking.png

ic_active_status_biking ic_active_status_call ic_active_status_car ic_active_status_laptop ic_active_status_mobile ic_active_status_tablet ic_active_status_video ic_active_status_walking

There's also an image called ic_settings_share_status_avatar.png, which will probably be present in the settings somewhere:

ic_settings_share_status_avatar

Moods

In addition to activities and text statuses, you will be able to set your mood. Right now, from what I can tell, there is not yet a way to set a mood in Hangouts. At first, we thought maybe it would at least inherit it from Google+, which has had moods for over 9 months now, but nope - no sign of them in Hangouts yet. Looks like it's not ready yet either and will roll out together will the rich statuses and activities.

As you can see from the strings below, we'll be able to set, change, or reset moods:

<string name="menu_mood_item">Set mood…</string>
<string name="menu_change_mood_item">Change mood</string>
<string name="mood_setting_activity_label">Set your mood</string>
<string name="clear_mood_menu_item_text">Reset mood</string>

These files contain the menu and settings for moods, further confirming their existence:

mood_setting_menu.xml
mood_setting_activity.xml

I also dug up a piece of code for setting a mood. If I'm correct, we'll be able to specify a mood message (moodMessage), and the mood will automatically expire after some time (expirationTimestamp).

ClientMoodState localClientMoodState = new ClientMoodState();
UB = localClientMoodState;
localClientMoodState.mood_ = "";
localClientMoodState.moodMessage_ = "";
localClientMoodState.expirationTimestamp_ = 0L;

The final interesting (OK, maybe not that interesting) piece of info is the internal API endpoint for setting statuses ends in presence/setpresence. Getting the existing mode is accomplished by querying presence/getpresence.

public String getUrlSuffix() {return "presence/setpresence";}

Moods, activities, and status messages are going to be very welcomed features, and I hope Google rolls them out soon.

P.S. Today's 1.2.018 update was very small and didn't bring any new features. Thanks to everyone who let me know about it.