The Google Messenger app officially hit version 2.0 yesterday. There are plenty of changes, largely related to visual tweaks like a new launcher icon, color changes, and some revised layouts. While a mostly visual release, there are some functional improvements, as well. A teardown also brings a good look at some interesting things in the future of messaging.

What's New

Unofficial Changelog:

  • New launcher icon
  • Unread counts on the launcher icon
  • Improved contact list and group messaging interface
  • Settings and Advanced Settings screens have been re-arranged
  • Other visual adjustments

New launcher icon

Messengerlogo_messenger_round_launcher_color_48dpic_launcher

Left: from v1.9 and earlier. Center: 1.9.518 from Pixel. Right: new version in 2.0

The first thing you'll probably notice with this update is a new icon; and it's round. Everybody knows Google is gently nudging people in the direction of circular icons, starting with the Pixel Launcher and built-in support with Android 7.1 Nougat. The thing about this initiative is that it's still largely optional for both device makers and app developers.

However, the Messenger app is taking this a bit further by completely abandoning its freeform shape for a single message box on a round background. What's interesting is that the version of Messenger that originally shipped with the Pixel handsets actually includes both the original icon and a round version closely resembling the new version, but with a lighter shade of blue and the message box has slightly sharper rounded corners.

The notification icon has also been adjusted to match the new launcher icon.

Unread message badges

We often joke that iOS has nothing to hold over Android, but there actually are a few little niceties Apple users normally have to give up when they jump ship to Android. A simple, albeit widely recognized example is the Calendar app icon that changes to reflect the current date. Google delivered that functionality with the Pixel Launcher, and now it's doing the same with unread counts on launcher icons.

2016-10-25 13.10.30

Unread count showing up on a Galaxy S7 Edge.

The v2.0 update to Messenger adds the ability to post an unread count badge on itself for a half-dozen OEM and third-party launchers. Based on a list of permissions found during a teardown, it appears reasonably recent phones from Samsung, HTC, Sony, and Huawei should be supported. It should also work with two third-party launchers: Apex Launcher and Solid Launcher.

permissions

<uses-permission android:name="com.sec.android.provider.badge.permission.READ" />
<uses-permission android:name="com.sec.android.provider.badge.permission.WRITE" />
<uses-permission android:name="com.htc.launcher.permission.READ_SETTINGS" />
<uses-permission android:name="com.htc.launcher.permission.UPDATE_SHORTCUT" />
<uses-permission android:name="com.sonyericsson.home.permission.BROADCAST_BADGE" />
<uses-permission android:name="com.sonymobile.home.permission.PROVIDER_INSERT_BADGE" />
<uses-permission android:name="com.anddoes.launcher.permission.UPDATE_COUNT" />
<uses-permission android:name="com.majeur.launcher.permission.UPDATE_BADGE" />
<uses-permission android:name="com.huawei.android.launcher.permission.CHANGE_BADGE" />
<uses-permission android:name="com.huawei.android.launcher.permission.READ_SETTINGS" />
<uses-permission android:name="com.huawei.android.launcher.permission.WRITE_SETTINGS" />

The list of supported launchers could obviously grow over time, but this appears to be the list for now. Somewhat surprisingly, Messenger doesn't offer unread counts on the just-released Pixel Launcher or Google Now Launcher, though it's possible these two simply don't support badges. (Note: some launchers like Nova Launcher already display unread counts with other methods, thus Messenger doesn't need to support them explicitly.)

Merged contact list

2016-10-25 04.06.12Screenshot_20161024-210616

Left: previous version. Right: latest version.

Stepping into the app brings some welcome improvements. The new version merges the top contacts with your full contact list into a single page rather than splitting them up. The top eight are distinguished by a round avatar with a name below while the regular contact list remains the same.

Contacts with more than one number will now be listed as having 'multiple' methods for contact instead of stacking numbers like the old version did. This might add a tap, but it seems a bit easier to parse without the gaps between contact photos.

Improvements to group messaging

Screenshot_20161024-211419Screenshot_20161024-232131

The contacts screen leads into a more fluid experience for group messaging. In previous versions, tapping on a contact immediately opened up a chat window. If you wanted to add more recipients, it meant hitting a button at the top left and picking another person.

The new interface is designed with the assumption that group chats are going to be more common. Tapping a contact will now switch their photo to a checkmark and add their name to the list at the top of the screen. Hit the arrow button at the top right when you're done picking recipients and the group is ready to go. The group chat window also includes small avatar photos of the participants, mostly so you're not staring at a blank window right away.

Send button reflects message type

Screenshot_20161024-205222Screenshot_20161024-205149Screenshot_20161024-211712Screenshot_20161024-211824

Left x2: previous versions. Right x2: latest version.

Another little visual change with a purpose was made to the messaging interface. The 'Send' button will now always show what type of message you're about to send. In the past, if the outgoing message could be sent as an SMS, the button simply looked like an arrow on a blue background. The icon switched to show "MMS" at the bottom if the message included an image, audio file, or video, or if the message got too long, or if group messaging was enabled. The latest version throws out the discrepancy and always shows SMS or MMS, depending on the situation.

If you already know how SMS and MMS work and why each is chosen for a given purpose, this probably won't make much of a difference, but it's probably a helpful clue for anybody confused by these distinctions. On the other hand, maybe the occasionally appearing MMS label was raising more questions, so Google opted to always show text so the changes wouldn't be as obvious.

Miscellaneous visual adjustments

2016-10-25 04.04.55Screenshot_20161024-2104582016-10-25 03.54.40Screenshot_20161024-205957

As mentioned above, there are also a number of visual tweaks. The main color for the app has been changed to a different shade of blue. There are some new icons for various tasks like selection marks, sending messages (pictured earlier), and a few other things.

There has also been a reshuffling of the Settings and Advanced Settings screens. The options remain mostly identical, but they may be named slightly differently, have different descriptions, or appear in a different spot on the lists.

Teardown

Disclaimer: Teardowns are based on evidence found inside of apks (Android's application package) and are necessarily speculative and usually based on incomplete information. It's possible that the guesses made here are totally and completely wrong. Even when predictions are correct, there is always a chance that plans could change or may be canceled entirely. Much like rumors, nothing is certain until it's officially announced and released.

The features discussed below are probably not live yet, or may only be live for a small percentage of users. Unless stated otherwise, don't expect to see these features if you install the apk.

RCS (Rich Communication Service) Support

Google acquired a company named Jibe Mobile last year in an effort to get a jumpstart on bringing RCS to Android. Rich Communication Service (RCS) is a messaging protocol intended to replace the decrepit SMS and MMS protocols, adding support for things like emoji, location sharing, file transmission, and more. This probably sounds quite a bit like Allo; but just because one messaging app can do these things, it doesn't mean others shouldn't. Google has been promising Jibe and RCS for a while, and now it's getting ready to add support to the Messenger app.

As far as the evidence goes, this one is about as obvious as it can get. There are about 100 lines of text and quite a few entries from the Android manifest. Jibe is mentioned in a number of names, as are features known to be a part of the RCS spec, including group chat, typing indicators, and messaging over both WiFi and cellular data connections. These will be collectively referred to as "enhanced features" and will be advertised to users as a way to "do more with Messenger." However, there is a requirement that battery optimizations must be disabled for RCS to work properly (which is a must if messages are going to appear quickly after they are sent). Turning on RCS will require a short setup process involving an activation code sent via SMS, just like Allo.

code

<string name="attachment_limit_reached_dialog_message_when_composing_rcs">Attached file size is exceeding the limit.</string>
<string name="cant_send_rcs_group_message_when_rcs_disabled">Can't send message while RCS is disabled in Settings.</string>
<string name="message_title_rcs_ft_downloading">New Rcs File Transfer</string>
<string name="enable_rcs_pref_key">buglesub_enable_rcs</string>
<string name="enable_rcs_summary_off">Use data for messaging when available</string>
<string name="enable_rcs_summary_on">Using data for messaging when available</string>
<string name="enable_rcs_title">Enable enhanced features</string>
<string name="picker_conversation_title_required">RCS conversations must have a name</string>
<string name="rcs">RCS</string>
<string name="rcs_acs_url_override_key">buglesub_acs_url_override</string>
<string name="rcs_acs_url_override_summary">Manually override the ACS URL</string>
<string name="rcs_acs_url_override_title">Set ACS URL</string>
<string name="rcs_group_conversation_created">You created a group with %s</string>
<string name="rcs_message">Rich Communication Service message</string>
<string name="rcs_overrides_category_pref_title">Overrides (permission required)</string>
<string name="rcs_overrides_disabled">RCS override settings disabled.</string>
<string name="rcs_overrides_enabled">RCS override settings enabled.</string>
<string name="rcs_overrides_pref_key">rcs_overrides_category</string>
<string name="rcs_pref_key">rcs_prefs</string>
<string name="rcs_provisioning_sms_port_binary">Binary</string>
<string name="rcs_provisioning_sms_port_key">buglesub_provisioning_sms_port</string>
<string name="rcs_provisioning_sms_port_summary">%1$d (%2$s)</string>
<string name="rcs_provisioning_sms_port_text">Text</string>
<string name="rcs_provisioning_sms_port_title">Provisioning SMS port</string>
<string name="rcs_settings">Enhanced features</string>
<string name="rcs_settings_activity_title">Enhanced features</string>
<string name="rcs_setup_accept">Accept</string>
<string name="rcs_setup_cancel">Cancel</string>
<string name="rcs_setup_country_hint">Country</string>
<string name="rcs_setup_invalid_number_error">Enter valid number</string>
<string name="rcs_setup_invalid_otp_error">Enter valid code</string>
<string name="rcs_setup_network_error">Network error. Check your connection.</string>
<string name="rcs_setup_number_blocked">RCS is not currently available for your plan or wireless carrier.</string>
<string name="rcs_setup_otp_content_description">Type the code you received</string>
<string name="rcs_setup_otp_description">This is the %1$d-digit number sent to your phone.</string>
<string name="rcs_setup_otp_request_error">Error requesting verification code, try again later</string>
<string name="rcs_setup_otp_title">Enter code</string>
<string name="rcs_setup_otp_trouble">Didn't receive a message?</string>
<string name="rcs_setup_phone_number_hint">Phone number</string>
<string name="rcs_setup_reject">Reject</string>
<string name="rcs_setup_resend_otp">Resend code</string>
<string name="rcs_setup_unknown_error">Unknown error. Try again.</string>
<string name="rcs_setup_verification_description">Messenger will send you a one-time SMS message. Carrier rates may apply.</string>
<string name="rcs_setup_verification_title">Verify your number</string>
<string name="rcs_setup_verify">Verify</string>
<string name="rcs_setup_verifying">Verifying…</string>
<string name="rcs_tutorial_snippet">Enable enhanced messaging features</string>
<string name="rcs_tutorial_title">Rich Messaging</string>
<string name="send_seen_report_rcs_pref_key">buglesub_send_seen_report_rcs</string>
<string name="send_seen_report_rcs_summary">Let others know you've read their message</string>
<string name="send_seen_report_rcs_title">Send read receipts</string>
<string name="share_typing_status_rcs_pref_key">buglesub_share_typing_status_rcs</string>
<string name="share_typing_status_rcs_summary">Let others know when you're typing</string>
<string name="share_typing_status_rcs_title">Show typing indicators</string>
<string name="typing_indicator_one">%s is typing</string>
<string name="typing_indicator_one_on_one">...</string>

<bool name="enable_rcs_pref_default">true</bool>
<bool name="send_seen_report_rcs_pref_default">true</bool>
<bool name="share_typing_status_rcs_pref_default">true</bool>

<string name="boew_promo_double_check_dialog_negative_button_text">GET FEATURES</string>
<string name="boew_promo_double_check_dialog_positive_button_text">SKIP</string>
<string name="boew_promo_double_check_dialog_text">By skipping, you'll keep battery optimizations on and you won't get enhanced features.</string>
<string name="boew_promo_double_check_dialog_title">Skip enhanced features?</string>
<string name="boew_promo_learn_more_button_text">LEARN MORE</string>
<string name="boew_promo_legal">Messenger will share device hardware and SIM information with your carrier.</string>
<string name="boew_promo_negative_button_text">NOT NOW</string>
<string name="boew_promo_positive_button_text">NEXT</string>
<string name="boew_promo_text">To get enhanced features, like messaging over WiFi and data, let Messenger stay connected in the background.</string>
<string name="boew_promo_title">Do more with Messenger</string>
<string name="conversation_list_boew_promo_button_negative">NO THANKS</string>
<string name="conversation_list_boew_promo_button_positive">GET STARTED</string>
<string name="conversation_list_boew_promo_subtitle">Turn on enhanced messaging features</string>
<string name="conversation_list_boew_promo_title">Do more with Messenger</string>

<string name="conversation_name_edit_hint">Enter a group name</string>
<string name="conversation_name_edit_label">Group name (optional)</string>
<string name="create_group_text">Create a group</string>
<string name="create_new_group_message">Messenger will create a new group conversation using MMS because you added a new SMS recipient. Your original group will not be affected.</string>
<string name="create_new_group_title">Create new group?</string>
<string name="dialog_group_chat_name_prompt">Name the group chat</string>
<string name="dialog_group_chat_name_title">Group chat name</string>
<string name="leave_confirmation_text">Are you sure you want to stop receiving messages from this group?</string>
<string name="leave_confirmation_title">Permanently Leave Group</string>
<string name="leave_confirmation_update">Leaving Group</string>
<string name="participant_list_add">Add people</string>
<string name="participant_list_leave">Leave Group</string>
<string name="someone_joined_chat">someone has joined the group</string>
<string name="someone_left_chat">someone has left the group</string>
<string name="user_inviting">Sending invitation to %s</string>
<string name="user_inviting_plural">Sending invitations</string>
<plurals name="someone_added_person">
<item quantity="other">%1$s added %2$s to the group</item>
<item quantity="one">%1$s added %2$s to the group</item>
</plurals>
<plurals name="typing_indicator_many">
<item quantity="other">%1$s and %2$s others are typing</item>
<item quantity="one">%1$s and %2$s other is typing</item>
</plurals>
<plurals name="user_joined_chat">
<item quantity="other">%s have joined the group</item>
<item quantity="one">%s has joined the group</item>
</plurals>
<plurals name="user_left_chat">
<item quantity="other">%s have left the group</item>
<item quantity="one">%s has left the group</item>
</plurals>
<plurals name="you_added_person">
<item quantity="other">You added %s to the group</item>
<item quantity="one">You added %s to the group</item>
</plurals>

<activity android:name="com.google.android.apps.messaging.ui.appsettings.RcsSettingsActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:exported="false" android:label="@string/rcs_settings_activity_title" android:parentActivityName="com.google.android.apps.messaging.ui.appsettings.PerSubscriptionSettingsActivity" android:screenOrientation="user" android:theme="@style/BugleTheme.SettingsActivity">
<meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.google.android.apps.messaging.ui.appsettings.PerSubscriptionSettingsActivity" />
</activity>
<activity android:name="com.google.android.apps.messaging.ui.rcs.setup.RcsSetupAlertActivity" android:excludeFromRecents="true" android:exported="false" android:launchMode="singleTop" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<activity android:name="com.google.android.apps.messaging.ui.rcs.setup.RcsSetupActivity" android:configChanges="keyboardHidden|screenSize" android:exported="false" android:screenOrientation="userPortrait" android:windowSoftInputMode="stateAlwaysHidden" />
<activity android:name="com.google.android.apps.messaging.ui.BoewPromoActivity" android:configChanges="keyboardHidden|screenSize" android:exported="false" android:windowSoftInputMode="stateAlwaysHidden" />
<receiver android:name="com.google.android.apps.messaging.shared.receiver.IncomingRcsEventReceiver">
<intent-filter>
<action android:name="rcs.intent.action.incomingChatMessage" />
<action android:name="rcs.intent.action.incomingGroupChat" />
<action android:name="rcs.intent.action.incomingFileTransfer" />
<action android:name="rcs.intent.action.newEvent" />
<action android:name="rcs.intent.action.locationReceived" />
</intent-filter>
</receiver>
<receiver android:name="com.google.android.rcs.service.receiver.AutoStartReceiver" android:process=":rcs">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
</intent-filter>
</receiver>
<receiver android:name="com.google.android.rcs.service.receiver.DebugOptionsReceiver" android:process=":rcs">
<intent-filter>
<action android:name="rcs.intent.action.debugOptionIncreaseSessionId" />
<action android:name="rcs.intent.action.debugOptionChangeAcsUrl" />
<action android:name="rcs.intent.action.debugOptionChangeSmsPort" />
</intent-filter>
</receiver>
<receiver android:name="com.google.android.rcs.service.receiver.SharedPreferencesIntentChangeReceiver" android:exported="false" android:process=":rcs">
<intent-filter>
<action android:name="rcs.intent.action.enableRcs" />
<action android:name="rcs.intent.action.disableRcs" />
</intent-filter>
</receiver>
<receiver android:name="com.google.android.rcs.service.receiver.EndUserConfirmationResponseReceiver" android:exported="false" android:process=":rcs">
<intent-filter>
<action android:name="rcs.intent.action.endUserConfirmationRequest.accept" />
<action android:name="rcs.intent.action.endUserConfirmationRequest.decline" />
<action android:name="rcs.intent.action.endUserConfirmationRequest.timeout" />
</intent-filter>
<intent-filter>
<action android:name="rcs.intent.action.endUserConfirmationRequestAccept" />
<action android:name="rcs.intent.action.endUserConfirmationRequestDecline" />
<action android:name="rcs.intent.action.endUserConfirmationRequestTimeout" />
</intent-filter>
</receiver>
<receiver android:name="com.google.android.rcs.service.receiver.ProvisioningAlertResponseReceiver">
<intent-filter>
<action android:name="rcs.intent.action.provisioningAlert.response" />
</intent-filter>
</receiver>
<service android:name="com.google.android.rcs.service.service.JibeService" android:exported="false" android:process=":rcs" />

Group chats appear to be fairly mundane, largely matching Hangouts in their implementation. Any user in a group chat can send an invite to another person. Once somebody is in a group, all of the members are notified. Anybody can leave a group if they choose to, but nobody can be kicked out.

It makes plenty of sense to support RCS in Messenger given that it has a considerable head start on Allo and will likely remain in the lead for the foreseeable future.

There's no way to enable RCS in Messenger quite yet, but the fairly extensive text and supporting code suggests it might be ready to launch with this version. Additionally, the RCS service is actually already showing up in the memory usage screen, suggesting Google may be planning to turn it on at any time.

Screenshot_20161024-213135

Download

The APK is signed by Google and upgrades your existing app. The cryptographic signature guarantees that the file is safe to install and was not tampered with in any way. Rather than wait for Google to push this download to your devices, which can take days, download and install it just like any other APK.

Version: 2.0.068

Android Messages
Android Messages
Developer: Google Inc.
Price: Free