Google has been dabbling in the realm of Internet-based calling for years. First it was Gmail, then Hangouts got in on the action. While there were ways (and even third-party products) to use the Google Voice service for VoIP, it was probably the least enjoyable calling experience we've seen that didn't involve MacGyver-style shorting of exposed wires to dial a number. Now an update to the Google Voice app reveals that it's finally going to make its VoIP capabilities an official feature, and it'll be usable directly from your phone without any hacky workarounds.

What's New

Unofficial Changelog: (originally posted Jan 28, 2018 at 06:52AM) Missed call notifications Official Changelog: (posted Feb 2, 2018) Geographic location for phone numbers

Copy voicemail transcription

Save multiple images from a received message

Missed call notifications

There is one oddball thing already working in this release. If you don't use Google Voice, you might be a little surprised to learn that it never gave missed call notifications. To be fair, that responsibility usually fell on a phone's dialer app, and Google Voice does give notifications for things like new voicemail and SMS/MMS. However, if there was any reason your phone didn't receive the call (e.g. in a dead zone), you might not know somebody called unless a message was left. It looks like that changes with v5.7, because missed call notifications are now appearing if somebody calls your Google Voice number.

The reality is that these notifications probably have more to do with the VoIP discussion we're about to have in the teardown, so we can move straight to that part...

Note: As pointed out in the comments, there is a setting to have Google Voice generate an email when a call is missed. The addition discussed above is a system notification.

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. 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.

Voice over IP

We'll just let the promotional text speak for itself:

<string name="voip_title_text">New! Calling over Wi-Fi and mobile data</string>

<string name="voip_body_text">Make and receive calls over Wi-Fi and mobile data when you use the Google Voice app. Note: This will turn off call screening

%s</string> <string name="voip_info_text">This does not affect calls started from this device's phone app</string>



It doesn't get much simpler than that – you'll be able to make calls using Wi-Fi or mobile data. This will effectively give many people a phone with a second number, but one of them uses Google Voice app and its calls run over data as opposed to your carrier's calling features.

Implications

We'll get to the minor details shortly, but first let's discuss a couple of broader changes that may impact how you already use Google Voice. To begin with, making calls with your Google Voice number used to be done through your dialer app, but it looks like that won't work for much longer.

<string name="proxy_calling_disabled_because_account_doesnt_support_call_interception">You can no longer use this device's phone app to make Google Voice calls. Place your call to %1s using your carrier, or tap Cancel and use the Google Voice app instead.</string> <string name="proxy_preferences_call_interception_unsupported_title">Google Voice has changed</string>

<string name="proxy_preferences_call_interception_unsupported">Due to a change to your account, Google Voice calling from this device's phone app is no longer supported. Use the Google Voice app instead.</string>



Basically, calls through Google Voice will have to be done using its own app. My guess is that Google is doing away with the step that involved calling into Voice first, then routing through another call to the actual destination. This step will be replaced with the more straightforward VoIP call. It's possible the old method will remain operational, but it's hard to say with certainty.

The next change is a bit easier to absorb: Hangouts messages that were sent through the Google Voice system to telephone numbers (as opposed to a Google account) will be visible in the Google Voice app. It sounds like both apps will now have access to those same messages, so you can probably use whichever one you prefer.

<string name="hangouts_inapp_promo_string">You can now see Google Voice messages sent from Hangouts in Google Voice. %s</string>

Finally, you'll still be able to use the Google Voice app to initiate outgoing calls through your carrier. A setting will allow you to choose whether you want to use only your carrier for making calls or if you prefer Wi-Fi and cellular data. If a call fails, you'll be prompted to attempt the call using the other method.

strings Choose how you want to make and receive calls in the Google Voice app. This will affect all devices linked to your account.</string>

<string name="make_and_receive_calls_preference_calls_outside_app_explanation">This does not affect calls started from the device's phone app</string>

<string name="make_and_receive_calls_preference_title">Make and receive calls</string>

<string name="make_and_receive_calls_preference_window_title">Make and receive calls</string> <string name="prefer_carrier_preference_detail">Use carrier only</string>

<string name="prefer_carrier_radio_button_title">Use carrier only</string>

<string name="prefer_carrier_radio_button_detail">Carrier rates apply.</string> <string name="prefer_wifi_and_mobile_data_preference_detail">Prefer Wi-Fi and mobile data</string>

<string name="prefer_wifi_and_mobile_data_radio_button_detail">Make and receive calls over Wi-Fi and mobile data when available. Carrier rates may apply if Wi-Fi is unavailable.</string>

<string name="prefer_wifi_and_mobile_data_radio_button_title">Prefer Wi-Fi and mobile data</string> <string name="call_failure_alert_retry_using_proxy_button">Retry using carrier</string>

<string name="call_failure_alert_retry_using_voip_button">Retry using internet</string>

<string name="proxy_call_failed_network_body">Google Voice needs a data connection to place your call to %1s . You can retry the call through Voice once you have a data connection, or place the call through your carrier number.</string>

<string name="proxy_call_failed_unknown_body">Google Voice was unable to place your call to %1s for some reason. You can retry this call using Google Voice or place the call through your carrier number.</string>

<string name="call_failed_network_body_with_multiple_retry_options">Google Voice needs an internet connection to place your call to %1s . When you get a data connection, you can try again using internet or through your carrier with your Google Voice number.</string>

<string name="call_failed_network_with_one_retry_option">Google Voice needs an internet connection to place your call to %1s . When you get a data connection, you can try again.</string>

<string name="call_failed_unknown_reason">Google Voice couldn't place your call to %1s.</string>

<string name="call_failed_unknown_reason_multiple_retry_options">Google Voice couldn't place your call to %1s. You can try again using internet or through your carrier with your Google Voice number.</string>

<string name="call_failure_alert_retry_button">Retry</string>

<string name="call_failure_title">Can't connect your call</string> <string name="incoming_call_feature_disabled_explanation">To use incoming call options, change “Make and receive calls” to “Use carrier only”.</string>



The standard details

There are plenty of predictable additions related to giving true calling functions to Google Voice, including the text for in-call functions and notifications. None of them are particularly interesting, but we'll skim over them in this section. Feel free to skip to the next if you like.

Incoming and outgoing calls will be labeled as Google Voice calls when appropriate, otherwise they'll probably have your carrier's name.

strings Google Voice call</string>

<string name="call_in_progress">Google Voice Wi-Fi call</string>

<string name="calling_ringing">Calling via Google Voice…</string>

<string name="outgoing_call_with_destination">Call to %s</string>

<string name="voip_call_progress_dialog_title">Placing internet call to %1s</string>



There will be standard controls to answer and decline calls, hang up, put people on hold, mute the line, or toggle the speaker.

strings Answer</string>

<string name="call_incoming_decline">Decline</string>

<string name="call_on_hold">On hold</string>

<string name="hang_up_button_text">hang up</string>

<string name="call_ended">Call ended</string> <string name="incall_close_dialpad">Close dialpad</string> <string name="incall_ui_a11y_hold">Hold call</string>

<string name="incall_ui_a11y_resume">Resume call</string>

<string name="incall_ui_call_cost">Free</string>

<string name="incall_ui_hold">Hold</string>

<string name="incall_ui_keypad">Keypad</string>

<string name="incall_ui_mute">Mute</string>

<string name="incall_ui_muted">Muted</string>

<string name="incall_ui_speaker">Speaker</string>

<string name="incall_ui_speaker_off">Speaker Off</string>

<string name="incall_ui_speaker_on">Speaker On</string>

<string name="incall_ui_unmuted">Unmuted</string>

<string name="incoming_call">incoming call from</string>

<string name="incall_ui_bullet">•</string> <activity android:name="com.google.android.apps.voice.voip.ui.VoipCallActivity" android:excludeFromRecents="true" android:exported="false" android:launchMode="singleInstance" android:screenOrientation="portrait" android:taskAffinity="com.google.android.apps.voice.voip.ui" android:theme="@style/InCallTheme" /> <service android:name="com.google.android.apps.voice.voip.ui.callservice.CallForegroundService" android:exported="false" />

<receiver android:name="com.google.android.apps.voice.voip.ui.callservice.OngoingCallActionReceiver_Receiver" android:exported="false">

<intent-filter>

<action android:name="com.google.android.apps.voice.voip.ui.callservice.ANSWER_ACTION" />

<action android:name="com.google.android.apps.voice.voip.ui.callservice.AUDIO_DEVICE_TOGGLE_ACTION" />

<action android:name="com.google.android.apps.voice.voip.ui.callservice.DECLINE_ACTION" />

<action android:name="com.google.android.apps.voice.voip.ui.callservice.HANG_UP_ACTION" />

<action android:name="com.google.android.apps.voice.voip.ui.callservice.MEDIA_BUTTON_ACTION" />

</intent-filter>

</receiver>

<receiver android:name="com.google.android.apps.voice.voip.ui.callservice.RemoteControlReceiver" android:exported="true">

<intent-filter>

<action android:name="android.intent.action.MEDIA_BUTTON" />

</intent-filter>

</receiver>

Most of those same in-call functions will also be available through a persistent notification.

strings Answer</string>

<string name="voip_notification_decline_action">Decline</string>

<string name="voip_notification_dialing">Dialing</string>

<string name="voip_notification_dialing_with_destination">Dialing – %s</string>

<string name="voip_notification_hangup_action">Hang up</string>

<string name="voip_notification_incoming">Incoming call</string>

<string name="voip_notification_incoming_with_origin">Incoming call – %s</string>

<string name="voip_notification_ongoing">Ongoing call</string>

<string name="voip_notification_ongoing_destination">Ongoing call – %s</string>

<string name="voip_notification_turn_speaker_off_action">Turn speaker off</string>

<string name="voip_notification_turn_speaker_on_action">Turn speaker on</string>

<string name="voip_positive_button_text">Turn on</string>

<string name="voip_later_button_text">Later</string>



It may interest some people to know that the two-finger swipe up or down to accept or decline a call is going to be an option here.

strings Incoming call from %s</string>

<string name="a11y_two_button_method_hint">Swipe up with two fingers to answer or down to reject the call</string>

<string name="inbound_call_swipe_to_answer">Swipe up to answer</string>

<string name="inbound_call_swipe_to_decline">Swipe down to decline</string>

And since this is a Google app, of course it will prompt users to give feedback about the call quality.

strings How was the call quality?</string>

<string name="quality_survey_bad_reason_title">What went wrong?</string>

<string name="quality_survey_good">Good</string>

<string name="quality_survey_bad">Bad</string>

<string name="quality_survey_unclear_audio">Garbled or unclear audio</string>

<string name="quality_survey_call_dropped">Call dropped in the middle</string>

<string name="quality_survey_call_never_connected">Call never connected</string>

<string name="quality_survey_echo">Echo</string>

<string name="quality_survey_no_ringing">No ringing</string>

<string name="quality_survey_other_issues">Other issues</string>

<string name="quality_survey_send">Submit</string>

<activity android:name="com.google.android.apps.voice.voip.ui.callsurvey.CallSurveyActivity" android:excludeFromRecents="true" android:exported="false" android:launchMode="singleInstance" android:screenOrientation="portrait" android:taskAffinity="com.google.android.apps.voice.voip.ui" android:theme="@style/Theme.Transparent" />

Missed call notifications

While these were discussed earlier in the post, there's actually one more detail worth mentioning: You can have Google Voice watch your notifications and it won't produce one of its own if your dialer app already posted something for a missed call. This is vaguely reminiscent to the way Inbox offers to shut down Gmail notifications to prevent duplicates, though this one is necessarily more complicated internally. However, for users, all that's necessary is granting call history access to Google Voice.

strings Missed call notifications</string>

<string name="missed_call_notifications_summary">Google Voice will notify if the dialer does not</string> <string name="call_history_permissions_requested_title">Missed call notifications</string>

<string name="call_history_permissions_requested_body">To avoid duplicate notifications for missed calls, Google Voice needs permissions to read the device's call history.</string>

<plurals name="new_missed_call_notification_body">

<item quantity="other">%1$d missed calls from %2$s</item>

<item quantity="one">Missed call from %s</item>

</plurals>

Copying transcriptions

This one has nothing to do with VoIP, it's just one last interesting feature. Previously, you could copy a phone number or content of a text message, but not the transcription of voicemail. Well, that was either resolved in this update, or will be soon. Sorry, I couldn't test this yet, so you may want to check if it's live already.

<string name="voice_item_copy_transcription">Copy transcription</string>

<string name="transcription_copy_to_clipboard_description">Transcription copied</string>



Update: Reported to be live. Thanks, hp-fourtwenty!

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: 5.7.182806539