Friday, September 19, 2014

[APK Teardown] Google Play Services 6.1 Contains Proximity Unlock, Device-2-Device Account Transfer, New Authorization Techniques, And So Much More

GMSTeardown

A couple of days ago, Google began rolling out the latest version of its Play services apk to the massive audience of Android users around the world. This is a particularly special release for developers because it finally expands coverage of the Google Fit Preview SDK to those who either don't have a Nexus 5 or 2013 Nexus 7, or simply aren't willing to flash the last L Preview firmware onto them. Unfortunately, the public list of changes is practically devoid of anything for regular users beyond some minor visual updates to the Drive file picker. Don't feel down, Google may not have opened the door on any big features for the public, but the framework is up for a lot of great features we can look forward to. Let's get started!

Disclaimer: No matter the confidence level, there's always a chance product updates, features, and some or all details will be changed or cancelled altogether. As with all rumors, even those with physical evidence, nothing is 100% until it's officially announced.

Teardown

Security

The keynote presentation at I/O 2014 told us that security was going to be a top priority in the L release, and it's clear Google intends to make security both stronger and more convenient. To that end, several of the features we've heard about -and some we haven't- are starting to show up in the GMS package.

Authorization / AuthZen

Some of you may remember a Teardown all the way back in February that called attention to a few strings related to authentication. At the time, there just wasn't very much for a prediction; but several strings have been added over the last 7 months that give a much clearer picture of what's coming. For quite some time we've seen little signs that Google is trying to simplify account sign-in on devices, particularly where two-factor authentication is in use. It appears Google may be planning to turn your devices into the gatekeepers that protect your account, and simplify setting up a new phone or tablet.

<string name="auth_authzen_2f_challenge_confirmation_allow_button_text">Allow login</string>
<string name="auth_authzen_action_approved_toast_text">Action approved</string>
<string name="auth_authzen_action_canceled_toast_text">Action canceled</string>
<string name="auth_authzen_allow_reset_button_text">Allow password reset</string>
<string name="auth_authzen_cancel_button_label">Cancel</string>
<string name="auth_authzen_close_button_text">Close</string>
<string name="auth_authzen_confirmation_allow_button_text">Allow</string>
<string name="auth_authzen_confirmation_cancel_button_text">Cancel</string>
<string name="auth_authzen_default_confirmation_description">" Allow the sign-in to your account from "<g id="location">%s</g>?</string>
<string name="auth_authzen_default_confirmation_title">We need your confirmation</string>
<string name="auth_authzen_default_incorrect_pin_text">Incorrect number selected. Your request has been canceled.</string>
<string name="auth_authzen_default_request_description">request details not known</string>
<string name="auth_authzen_generic_error_text">An error occurred. Please try again.</string>
<string name="auth_authzen_google_logo_label">Google logo</string>
<string name="auth_authzen_login_challenge_approved_text">Sign-in approved</string>
<string name="auth_authzen_login_challenge_canceled_text">Sign-in canceled</string>
<string name="auth_authzen_login_challenge_confirmation_allow_button_text">Allow sign-in</string>
<string name="auth_authzen_login_challenge_desc_text">" Are you trying to sign in from "<g id="location">%s</g>?</string>
<string name="auth_authzen_login_challenge_incorrect_pin_desc_text">Google stopped the sign-in attempt.</string>
<string name="auth_authzen_login_challenge_incorrect_pin_title_text">Incorrect number</string>
<string name="auth_authzen_login_challenge_pin_confirm_desc_text">Touch the number shown on the other screen. This will sign you in on your computer.</string>
<string name="auth_authzen_login_challenge_reject_desc_text">Someone just tried to sign in to your Google Account using your password. Google stopped the sign-in attempt.</string>
<string name="auth_authzen_login_challenge_reject_title_text">Sign-in prevented</string>
<string name="auth_authzen_login_challenge_title_text">Trying to sign-in?</string>
<string name="auth_authzen_minutemaid_challenge_desc_text">"To approve sign-in on your computer, you'll need to verify your identity"</string>
<string name="auth_authzen_minutemaid_challenge_location_text">" sign-in request from a computer in "<g id="first_name">%s</g></string>
<string name="auth_authzen_minutemaid_no_button_text">"I didn't request this"</string>
<string name="auth_authzen_minutemaid_notify_desc_text">" Thanks for letting us know, "<g id="first_name">%s</g></string>
<string name="auth_authzen_minutemaid_notify_sub_desc_text">"We've made a note of this activity, so we can continue to keep your account secure."</string>
<string name="auth_authzen_minutemaid_pin_entry_allow_button_text">Sign in</string>
<string name="auth_authzen_minutemaid_pin_entry_cancel_button_text">Cancel</string>
<string name="auth_authzen_minutemaid_pin_entry_description_text">Enter your Google Account PIN</string>
<string name="auth_authzen_minutemaid_yes_button_text">OK, continue</string>
<string name="auth_authzen_no_button_text">No</string>
<string name="auth_authzen_notify_google_default_text">Google will be notified that someone attempted to access your account.</string>
<string name="auth_authzen_notify_google_recovery_workflow_text">Google received a request to change your password. Since the request wasn’t from you, it’s been canceled. No changes have been made to your account.</string>
<string name="auth_authzen_ok_button_text">OK</string>
<string name="auth_authzen_pin_validation_default_desc_text">Touch the number shown on the other screen. This will sign you in on your computer.</string>
<string name="auth_authzen_pin_validation_default_title_text">Allow sign-in</string>
<string name="auth_authzen_profile_picture_label">Profile picture</string>
<string name="auth_authzen_recovery_2f_challenge_desc_text">Did you just try to login to Google?</string>
<string name="auth_authzen_recovery_approved_text">Password reset approved</string>
<string name="auth_authzen_recovery_canceled_text">Password reset canceled</string>
<string name="auth_authzen_recovery_double_confirm_desc_text">" Allow the password reset from "<g id="location">%s</g>?</string>
<string name="auth_authzen_recovery_double_confirm_title_text">We need your confirmation</string>
<string name="auth_authzen_recovery_incorrect_pin_desc_text">Google stopped the password reset attempt.</string>
<string name="auth_authzen_recovery_incorrect_pin_title_text">Incorrect number</string>
<string name="auth_authzen_recovery_pin_confirm_desc_text">Touch the number shown on the other screen. This will reset your password.</string>
<string name="auth_authzen_recovery_pin_confirm_title_text">Allow password reset</string>
<string name="auth_authzen_recovery_reject_desc_text">Someone requested to reset your Google Account password. Google stopped the password reset attempt.</string>
<string name="auth_authzen_recovery_reject_title_text">Password reset prevented</string>
<string name="auth_authzen_recovery_verification_desc_text">" Did you request to reset your password from "<g id="location">%s</g>?</string>
<string name="auth_authzen_recovery_verification_title_text">Tried to reset your password?</string>
<string name="auth_authzen_secure_account_button_text">Secure your account</string>
<string name="auth_authzen_sending_reply_failed_text">Could not send reply to the server.</string>
<string name="auth_authzen_sending_reply_text">Sending reply to the server</string>
<string name="auth_authzen_time_display_text">" less than "<g id="request_age">%s</g> minutes ago</string>
<string name="auth_authzen_time_just_now_text">Just Now</string>
<string name="auth_authzen_wait_text">Please wait…</string>
<string name="auth_authzen_workflow_title">Google Authorization Prompt</string>
<string name="auth_authzen_yes_button_text">Yes</string>

As you can see from the strings, events like a device being signed-in or an attempt to change the password would lead Google to prompt the account owner through one of their existing devices, giving them a chance to reject or permit the action as appropriate. It's not clear how this will fit in with two-factor authentication, as it could either be an additional step or an optional replacement, but it certainly seems like an effective method to block hackers.

2014-09-19_11h04_33

Easy Unlock / Personal Unlock

One of the great convenience features detailed during Google I/O was automatic unlocking of Chrome OS computers as an Android phone comes into proximity, and the same can be done with the phone when an Android Wear wristwatch is nearby. The groundwork for this feature already appeared in Chrome OS, and now it's showing up in the Play services framework on Android.

<string name="auth_google_trust_agent_title">Personal unlocking</string>
<string name="auth_personal_unlocking_name">Personal unlocking</string>
<string name="auth_personal_unlocking_service_name">Personal unlocking (Google)</string>

<string name="auth_proximity_auth_device_locked_content">Chrome device locked.</string>
<string name="auth_proximity_auth_device_locked_title">Easy unlock</string>
<string name="auth_proximity_auth_device_unlocked_content">Chrome device unlocked.</string>
<string name="auth_proximity_auth_device_unlocked_title">Easy unlock</string>
<string name="auth_proximity_auth_setup_completed_content">This phone can unlock your Chrome devices.</string>
<string name="auth_proximity_auth_setup_completed_title">Easy unlock is on</string>
<string name="auth_proximity_auth_setup_failed_content">Please try again on your Chrome device.</string>
<string name="auth_proximity_auth_setup_failed_title">Error when setting up Easy unlock</string>
<string name="auth_proximity_auth_setup_inprogress_content">Phone found. Proceed on the Chrome device.</string>
<string name="auth_proximity_auth_setup_inprogress_title">Easy unlock setup</string>

<string name="auth_bluetooth_lure_button">Add as a trusted device</string>
<string name="auth_bluetooth_lure_credential_confirmation_title">Confirm your lock-screen</string>
<string name="auth_bluetooth_lure_multi_line_message">" New bluetooth device paired.
Add "<g id="device_name" example="My Pebble watch">%s</g> as a trusted device to skip your screen lock when connected.
</string>
<string name="auth_bluetooth_lure_one_line_message">New bluetooth device paired.</string>
<string name="auth_bluetooth_lure_title">Personal unlocking</string>

The one thing that remained a bit of a mystery after the presentation is which types of devices could be used to toggle the lockscreen state of a phone. Fortunately, there are quite a few strings that spell it out pretty clearly. We'll be able to create "Trusted Devices" out of NFC tags and Bluetooth devices (e.g. smartwatches or car stereos), and we can also set certain locations to be considered safe, like our home or workplace. The examples even suggest using an NFC tag located in a car dock.

<string name="auth_nfc_caution">Protect this tag. An attacker may be able to copy it.</string>
<string name="auth_nfc_tag_exists">%1$s already added</string>
<string name="auth_nfc_tag_not_supported">The provided NFC device is not supported</string>

<string name="auth_trust_agent_add_nfc_prompt">To set up, tap this device to an NFC tag or device.</string>
<string name="auth_trust_agent_add_nfc_title">Add NFC</string>
<string name="auth_trust_agent_add_trusted_device_prompt">Add trusted device</string>
<string name="auth_trust_agent_add_trusted_place_prompt">Add trusted place</string>
<string name="auth_trust_agent_button_nfc_settings">NFC Settings</string>
<string name="auth_trust_agent_connected_to_bt_device">Securely connected to Bluetooth device %s</string>
<string name="auth_trust_agent_dpm_disabled">Disabled by administrator</string>
<string name="auth_trust_agent_enable_nfc">Enable NFC to add an NFC device</string>
<string name="auth_trust_agent_first_use_notification_button">GOT IT</string>
<string name="auth_trust_agent_first_use_notification_message_device">while connected to <g id="device_name">%s</g>, which you set as a trusted device.</string>
<string name="auth_trust_agent_first_use_notification_message_part2">To force your device to lock, turn the screen off, then turn it on and touch the lock icon.</string>
<string name="auth_trust_agent_first_use_notification_message_place">while at <g id="place_name">%s</g>, which you set as a trusted place.</string>
<string name="auth_trust_agent_first_use_notification_title">Your device is unlocked</string>
<string name="auth_trust_agent_nfc_device_name_hint">Name</string>
<string name="auth_trust_agent_nfc_found_prompt">"NFC found
Enter a name for it."
</string>
<string name="auth_trust_agent_pref_trusted_devices_connected">Connected</string>
<string name="auth_trust_agent_pref_trusted_devices_default_summary">None</string>
<string name="auth_trust_agent_pref_trusted_devices_not_connected">Not connected</string>
<string name="auth_trust_agent_pref_trusted_devices_title">Trusted devices</string>
<string name="auth_trust_agent_pref_trusted_places_default_summary">None</string>
<string name="auth_trust_agent_pref_trusted_places_home_title">Home</string>
<string name="auth_trust_agent_pref_trusted_places_home_work_default_summary">Unknown</string>
<string name="auth_trust_agent_pref_trusted_places_title">Trusted places</string>
<string name="auth_trust_agent_pref_trusted_places_work_title">Work</string>
<string name="auth_trust_agent_status_error_pairing_failed">Pairing failed. Try again.</string>
<string name="auth_trust_agent_status_nfc_unavailable">Unable to set up NFC device</string>
<string name="auth_trust_agent_trusted_bluetooth_prompt">"Add a trusted Bluetooth device to keep this device unlocked when connected.

Examples:

- Your Bluetooth watch
- Your car's Bluetooth system"
</string>
<string name="auth_trust_agent_trusted_devices_add_device_bluetooth_disable_option">"Bluetooth
(Bluetooth is turned off)"
</string>
<string name="auth_trust_agent_trusted_devices_add_device_bluetooth_option">Bluetooth</string>
<string name="auth_trust_agent_trusted_devices_add_device_nfc_option">NFC</string>
<string name="auth_trust_agent_trusted_devices_add_device_title">Add trusted device</string>
<string name="auth_trust_agent_trusted_devices_bluetooth_turn_off_summary">Bluetooth is turned off.</string>
<string name="auth_trust_agent_trusted_devices_cancel">Cancel</string>
<string name="auth_trust_agent_trusted_devices_choose_device_title">Choose device</string>
<string name="auth_trust_agent_trusted_devices_ok">OK</string>
<string name="auth_trust_agent_trusted_devices_prompt">"Add a trusted device to keep this device unlocked when connected.

Examples:

- Your Bluetooth watch
- Your car's Bluetooth system
- An NFC sticker on the phone dock in you car."
</string>
<string name="auth_trust_agent_trusted_devices_remove_message">Remove this device from trusted devices?</string>
<string name="auth_trust_agent_trusted_devices_unknown_bluetooth_default">Unknown device.</string>
<string name="auth_trust_agent_trusted_nfc_prompt">"Add a trusted NFC device to unlock this device with a tap.

Examples:

- An NFC sticker on the phone dock in you car."</string>
<string name="auth_trust_agent_trusted_places_add_account">Please add account to retrieve home and work address.</string>
<string name="auth_trust_agent_trusted_places_cancel">Cancel</string>
<string name="auth_trust_agent_trusted_places_ok">OK</string>
<string name="auth_trust_agent_trusted_places_prompt">"Add a trusted place to keep this device unlocked when entered.

Examples:

- Your home
- Your office"
</string>
<string name="auth_trust_agent_trusted_places_remove">Remove</string>
<string name="auth_trust_agent_trusted_places_rename">Rename</string>
<string name="auth_trust_agent_trusted_places_select_account_title">Select Account</string>
<string name="auth_trust_agent_trusted_places_unknown">Unknown</string>
<string name="auth_trust_devices_not_available">Trusted devices feature is not available to use.</string>
<string name="auth_trust_places_not_available">Trusted places feature is not available to use.</string>

Device Backup To Google Drive

It looks like Google is finally making a move to solve the backup problem. Several different methods exist for making a copy of your data, but most of them have problems in usability, reliability, or both. Some advanced users are aware of the really buggy adb backup command, or they opt to blow away their warranty by rooting and then install a tool like Titanium Backup. There are also ways for developers to offer backup and syncing features, but they rely on custom implementations for each and every app, which is very time consuming. If the strings below are any indication, Google is preparing its Drive cloud storage service to be the new home for your backups.

<string name="auth_setup_wizard_services_backup"><b>Back up your device to Google</b> so you can easily restore apps, app data, system settings and Wi‑Fi passwords.</string>
<string name="auth_setup_wizard_services_backup_restore"><b>Backup your apps and data</b>" to Google Drive so you can easily restore a device. Data includes apps, app data, system settings and Wi‑Fi passwords. Backups won't affect your storage limit."</string>
<string name="auth_setup_wizard_services_backup_restore_footnote">Data includes apps, app settings, system settings, and Wi‑Fi passwords.</string>
<string name="auth_setup_wizard_services_backup_restore_heading">Backup &amp; restore</string>

There's not enough to make any firm prediction about how this feature will be implemented. It sounds like whole apks and their associated data will be stored on Drive, but it's not clear if this will be limited to non-system apps, or if some apps will be able to opt-in (or out) of the procedure. There's also nothing to indicate if restoring from a backup is an all-or-nothing deal, similar to what you get with the adb backup command. In fact, there are a lot of questions about cross-device restoration, if multiple backups can be made, paid vs. free apps, size limits, and a few others. We'll just have to wait and see.

Device-2-Device Account Transfer

If you are a regular reader of Android Police, the odds are pretty good that you've set up more than a couple of phones or tablets in your lifetime. The last time you switched to a brand new phone probably took a few hours as each app was signed in and configured to your personal preferences. What if you could skip over this long, tedious process with a gentle tap between your old phone and your new phone? Well, you probably have to enter some credentials and wait for quite a while; but this appears to be something Google is designing into the setup experience.

The strings below suggest that the process will be as simple as unlocking both phones, tapping them together, and starting the transfer. Bluetooth is mentioned, but it's not clear if that's an alternative to NFC or if it's used for sending larger quantities of data after the initial handshake. In either case, it seems that this will transfer the accounts, apps, and app data from one device to another.

<string name="auth_confirm_creds_authority">com.google.android.gms.auth.confirm</string>
<string name="auth_confirm_creds_sync_title">Credentials State</string>
<string name="auth_d2d_source_bt_notice">Bluetooth will be used.</string>
<string name="auth_d2d_source_lock_notice">Your device will lock itself and must be unlocked again to continue.</string>
<string name="auth_d2d_source_no_accounts_toast">Cannot Tap and Restore because there are no accounts on this device.</string>
<string name="auth_d2d_source_no_bluetooth_toast">Cannot Tap and Restore because Bluetooth is not available on your device.</string>
<string name="auth_d2d_source_notification_text">" A new "<g id="device">^1</g> was set up on <g id="date">^2</g>" using this device, including an attempt to transfer the following Google accounts:

"<g id="accounts">^3</g></string>
<string name="auth_d2d_source_notification_title">New device setup completed</string>
<string name="auth_d2d_source_progress_message">Copying data to your new device...</string>
<string name="auth_d2d_source_question">Copy accounts and data from this device?</string>
<string name="auth_d2d_source_restricted_user_toast">Cannot Tap and Restore from a restricted user profile.</string>
<string name="auth_d2d_source_title">Restore Accounts</string>
<string name="auth_d2d_source_unknown_device_name">Unknown Device</string>
<string name="auth_d2d_target_adding_accounts_message">Adding accounts...</string>
<string name="auth_d2d_target_connecting_progress_message">Connecting to your other device...</string>
<string name="auth_d2d_target_connection_lost_alert">Connection lost</string>
<string name="auth_d2d_target_description">"Quickly copy any Google accounts, backed up apps and data from your existing Android device. To copy:

1. Make sure your other device is on and unlocked.

2. Briefly place the two devices back-to-back, then set aside."</string>
<string name="auth_d2d_target_more_info">"This feature uses NFC to transfer account data. If your other device supports NFC, make sure it's turned on under Settings > Wireless &amp; networks > More."</string>
<string name="auth_d2d_target_more_info_close">Got it</string>
<string name="auth_d2d_target_more_info_link">Learn more</string>
<string name="auth_d2d_target_prompt_skip">"Not working? Let's just skip instead."</string>
<string name="auth_d2d_target_skip_button">Skip</string>
<string name="auth_d2d_target_sorry_alert">Sorry, something went wrong</string>
<string name="auth_d2d_target_tap_progress_message">To continue, touch OK on your other device</string>
<string name="auth_d2d_target_title">Tap &amp; Go</string>
<string name="auth_d2d_target_try_again_button">Try Again</string>
<string name="auth_d2d_target_unlock_progress_message">Unlock your other device</string>
<string name="auth_d2d_target_wait_progress_message">Copying accounts and data...</string>

I think this may be one of the coolest features on the list, even if it's probably not going to see as much use. This will be particularly useful in cellular stores where a representative can simply initiate the transfer for a customer. In fact, I wouldn't be surprised if this was originally conceived as a feature to go with Android Silver.

Ads With Calendar and Gallery Access

Alright, don't hate, this one actually could be kind of cool. Advertisements will have the ability to insert calendar events and images onto your phone or tablet, but only after prompting you.

<string name="create_calendar_message">Allow Ad to create a calendar event?</string>
<string name="create_calendar_title">Create calendar event</string>

<string name="store_picture_message">Allow Ad to store image in Picture gallery?</string>
<string name="store_picture_title">Save image</string>

In the right context, this could be pretty handy. You might get an ad for an upcoming concert or a coupon with a QR code, and these types of things can be worth keeping around. This is primarily just another way for Google to extend the efficacy of its advertising reach, but it actually has some decent implications for consumers, assuming it's used in moderation.

Nearby (Redux)

We've talked about Nearby in the past, but there was never anything beyond leaked information to back it up. Well, it's finally real. At least, some of it is. It's referred to as "copresence" internally. In addition to the strings below, there is also a lot of new code that appears to handle data collection and server communication. I didn't see any signs that Nearby is ready to show anything directly to users, but most of the magic happens server-side, so the cards may be generated remotely, as well.

<string name="copresence_acl_title">Visibility</string>
<string name="copresence_notification_sensors_on">Nearby is working</string>
<string name="copresence_ok_notification">OK</string>
<string name="copresence_setting_account_restricted">Disabled</string>
<string name="copresence_setting_label">Nearby</string>
<string name="copresence_setting_location_disabled">Unavailable because Location is turned off</string>
<string name="copresence_setting_no_accounts">No accounts</string>
<string name="location_copresence_sync_label">Google Nearby</string>

Liam was able to get Nearby to appear in the list of services syncing with Google's servers.

GoogleNearby

Nearby For Games

While the version of Nearby we're familiar with is still in hiding, a closely related feature is also making its way in. Google is preparing to introduce a geocentric matchmaking feature for Google Play Games that involves introducing two players to each other when they are in close proximity. This will make it easier to set up pairings for games that are spatially aware, especially those that rely on GPS or augmented reality. Call me crazy, but I picture Ingress making use of this in the future.

It's pretty obvious from the confirmation dialog text below that this feature uses the same tricks to determine when two people are in the same area: listening to surroundings, detecting nearby wireless signals, etc. Since this is obviously built on top of Nearby, we can probably expect this feature to go live at the same time.

<string name="games_menu_nearby">Nearby</string>
<string name="games_inbox_nearby_players_subtitle_disabled">Allow players nearby to find you</string>
<string name="games_inbox_nearby_players_subtitle_enabled_searching">Searching for players nearby …</string>
<string name="games_inbox_nearby_players_title_disabled">Nearby Players is off</string>
<string name="games_inbox_nearby_players_title_enabled">Nearby Players is on</string>
<string name="games_nearby_players_confirm_dialog_message">Whenever you search for players nearby, Google Play Games will temporarily turn on and use the following technologies to find players: Your location, microphone, speaker, Wi-Fi and Bluetooth. <u>Learn more</u>".

When Nearby Players is turned on, other players of this game who are nearby can search for and see your name and picture while you are searching."</string>
<string name="games_nearby_players_confirm_dialog_title">Nearby Players</string>
<string name="games_nearby_players_label_off">Nearby players: Off</string>
<string name="games_nearby_players_label_on">Nearby players: On</string>
<string name="games_nearby_players_null_state">Searching for players nearby...</string>
<string name="games_select_players_nearby_header">Players near you</string>
<string name="games_select_players_nearby_search">Find nearby players</string>
<string name="games_settings_debug_copresence">Launch Copresence Debug</string>

Google Help / Feedback Improvements

I know most of us probably don't pay much attention to the "Support" features offered by Google, but that doesn't mean there aren't some interesting things happening there.

Hangouts Integration

As some of you may notice, Google recently added Hangouts integration to business listings (available through Maps) to allow for customers to reach out to a business through a Hangouts chat session. It looks like Google decided to turn itself into a model for how this could be done by offering the same feature to its customers.

<string name="gh_chat_join_action">Tap to open chat in Hangouts.</string>
<string name="gh_chat_path">/tools/feedback/mobile/__chat</string>
<string name="gh_chat_unavailable">Chat is unavailable. Please try again later.</string>
<string name="gh_contact_issue_class_optional_hint">Issue category (optional)</string>
<string name="gh_contact_issue_class_required_hint">Issue category (required)</string>
<string name="gh_hangout_product_specific_subtext"><g id="product_name">%1$s</g> Help</string>
<string name="gh_hangout_ready">Specialist ready to help!</string>
<string name="gh_hangout_waiting_for_response">Please hold…</string>

To make things cooler, representatives will also be available for video chats.

<string name="gh_video_call_path">/tools/feedback/mobile/__video-call</string>
<string name="gh_video_join_action">Tap to open video in Hangouts.</string>
<string name="gh_video_unavailable">Video is unavailable. Please try again later.</string>

Suggested Articles

As part of the process to initiate contact with support, you'll be presented with some suggested articles that may solve your issue without having to speak with Google's representatives. This is pretty normal for every company, since it reduces the number of people that actually need one-on-one help, but it's worth mentioning.

<string name="gf_read_more">READ MORE</string>
<string name="gf_related_article_found">Related article found</string>
<string name="gf_related_article_found_subtitle">Google found a helpful article that matches your feedback.</string>
<string name="gf_searching_for_suggestions">Loading...</string>
<string name="gf_suggestions_url">/tools/feedback/mobile/__suggestions</string>

Miscellaneous

There are a few other things that aren't particularly exciting or complete, but deserved at least a quick glance.

Android Auto

Don't get your hopes up on this one, there's really nothing special to look at. We all know Android Auto is coming, eventually, and it was a safe bet that it would be integrated with Google Play services in some form or another. While there are only two strings here, it proves there is something happening on this front.

<string name="common_car_permission_desc">Access to the car service.</string>
<string name="common_car_permission_label">Car Service</string>

Moving on...

Temporary Location Sharing

Google keeps running circles around location sharing, but continues to change up little details. Now it looks like there will be a more direct list of exactly who is currently allowed to see your location.

<string name="temporary_sharing_description">People that you are sharing your precise location with across Google products for a limited amount of time.</string>
<string name="temporary_sharing_title">Temporary Sharing</string>

Sign-in Correctness

I know this is totally irrelevant to almost everybody, but I just wanted to give a note of praise to the engineer responsible for doing a find-and-replace to change all of the instances of "signin" to "sign-in." This is a little pet peeve of mine, so thank you for making the world a little better.

Programmer Humor

Anybody that has worked around programmers for a while could tell you that we always try to stuff in little things that make us laugh. One of the best places to do that is when we've got to fill in little bits of sample data and placeholders. I'm sure Swan Ronson could tell you all about it when he's not working P&R.

<string name="games_tile_profile_content_description">" Player: "<g id="player_name" example="Swan Ronson">%1$s</g>. <g id="player_level" example="Level: 42">%2$s</g>. <g id="player_title" example="No XP earned yet">%3$s</g>. <g id="next_level_up" example="Level up in 125 XP">%4$s</g>. <g id="next_level_up_xp" example="3 of 1500 XP">%5$s</g>. <g id="last_game" example="Last played: Angry Pigs">%6$s</g>. <g id="level_up_congrats" example="Congrats You've Leveled Up!">%7$s</g></string>
<string name="games_tile_request_content_description">" Player "<g id="player_name" example="Ron Swanson">%1$s</g> <g id="action" example="Would like to send you gifts">%2$s</g></string>
<string name="games_tile_snapshot_content_description">" Game: "<g id="game_name" example="Nostalgic Racer">%1$s</g>. <g id="achievements_progress" example="2 of 3 achievements unlocked">%2$s</g>. <g id="card_title" example="Continue Playing">%3$s</g>. Last Saved: <g id="save_time" example="2 weeks ago">%4$s</g>. Duration: <g id="duration" example="19 seconds">%5$s</g>. <g id="snapshot_description" example="Level 4">%6$s</g></string>

Wrap-Up

I want to write more, but this one took forever, and I'm out of words. Cheers to the Google crew for putting together so much stuff for us to look at on this teardown. We'll be looking forward to all of these great features!

Cody Toombs
Cody is a Software Engineer and Writer with a mildly overwhelming obsession with smartphones and the mobile world. If he’s been pulled away from the computer for any length of time, you might find him talking about cocktails and movies, sometimes resulting in the consumption of both.


source: androidpolice

0 comments :