Monday, March 27, 2017

Google App v6.16 Prepares for Phone Authentication for Assistant Payments, Creating IFTTT Actions, and Screenshot Crop/Edit

The Google App is one of the most frequently updated applications, especially thanks to its beta channel, and it's one of the more interesting apps to pay attention to because of how many functions it supports. Google App is necessary for the Google Assistant to work on your device, and with the beta release of version 6.16.25 of the Google App, it appears that the Google Assistant will be receiving a few new features in the near future (that's a mouthful!)

A teardown of the APK file reveals that there are several new functions coming to the Google App. First, payments made through the Google Assistant will soon have an option to enable authentication via phone in an effort to prevent unauthorized purchases. Next, support creating IFTTT commands straight from Google Assistant appears to be coming. Third, the Google App will also show a new setting to toggle video preview autoplay on/off. And finally, we may be getting a feature to edit and/or crop a screenshot before sharing.

Although a teardown can provide valuable information regarding upcoming features, it is entirely possible that these features may not make their way into the final product. Do not take these teardowns as proof that a feature will be added, but rather as a hint of what could be coming.


Phone Authentication

Google recently introduced the ability to make payments through the Google Assistant. While it isn't available for every service, and is only really useful for small purchases on the Google Home, it's still an added convenience made to keep Assistant competitive with Amazon's Alexa. However, with the added convenience of voice-based purchasing also comes the potential for risk. Unauthorized purchases can be made via voice if the user has this feature enabled, so for now I've kept this feature turned off, as I suspect many others have. Within the APK file for Google App v6.16, though, there is evidence that payments made through Assistant can be required to be authenticated on the phone before being authorized.

Assistant Payment Settings

  <string name="assistant_settings_payments_phone_authentication_dialog_message">Confirm with password.</string>  <string name="assistant_settings_payments_phone_authentication_frequency_always">Confirmation required</string>  <string name="assistant_settings_payments_phone_authentication_frequency_always_required">Required for every purchase</string>  <string name="assistant_settings_payments_phone_authentication_frequency_never">Confirmation not required</string>  <string name="assistant_settings_payments_phone_authentication_frequency_never_description">We may ask if suspicious behavior is detected</string>  <string name="assistant_settings_payments_phone_authentication_frequency_not_required">Not required</string>  <string name="assistant_settings_payments_phone_authentication_frequency_not_required_detail">We may ask if suspicious behavior is detected</string>  <string name="assistant_settings_payments_phone_authentication_frequency_title">Purchase authentication</string>  <string name="assistant_settings_payments_phone_authentication_mechanism_description">Allow your fingerprint to be used as authentication for Google Assistant purchases on this device.</string>  <string name="assistant_settings_payments_phone_authentication_mechanism_title">Fingerprint authentication</string>  <string name="assistant_settings_payments_phone_authentication_page_header">Adjust settings for authentication when making purchases using Google Assistant on this device.</string>  <string name="assistant_settings_payments_phone_authentication_section_title">Purchases on this device</string>  <string name="assistant_settings_payments_phone_authentication_title">Authentication</string>  

We can see further evidence for this feature in two new layout files added to the APK: assistant_payments_phone_authentication_entry.xml and assistant_payments_phone_authentication_item.xml.

    <?xml version="1.0" encoding="utf-8"?>  <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content"  xmlns:android="http://ift.tt/nIICcg">  <LinearLayout android:orientation="horizontal" android:id="@id/assistant_settings_phone_authentication" android:background="@android:color/white" android:paddingLeft="@dimen/assistant_setting_payments_list_container_padding" android:paddingTop="@dimen/assistant_setting_payments_list_container_padding" android:paddingRight="@dimen/assistant_setting_payments_list_container_padding" android:paddingBottom="@dimen/assistant_setting_payments_list_container_padding" android:layout_width="fill_parent" android:layout_height="wrap_content" android:elevation="@dimen/assistant_setting_payments_elevation">  <LinearLayout android:layout_width="@dimen/assistant_setting_payments_icon_size" android:layout_height="fill_parent">  <ImageView android:layout_gravity="start|center" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/quantum_ic_fingerprint_grey600_24" />  </LinearLayout>  <LinearLayout android:orientation="vertical" android:layout_width="0.0dip" android:layout_height="wrap_content" android:layout_weight="1.0">  <TextView android:textSize="@dimen/assistant_setting_payments_text_size_small" android:layout_gravity="start|center" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/assistant_settings_payments_phone_authentication_section_title" />  <TextView android:textSize="@dimen/assistant_setting_payments_text_size_medium" android:textColor="@color/quantum_black_text" android:id="@id/assistant_settings_payments_authentication_subtitle" android:layout_width="wrap_content" android:layout_height="wrap_content" />  </LinearLayout>  <ImageView android:layout_gravity="end|center" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/quantum_ic_navigate_next_grey600_24" />  </LinearLayout>  <View android:layout_width="fill_parent" android:layout_height="@dimen/assistant_setting_payments_list_separator_size" />  </LinearLayout>  
    <?xml version="1.0" encoding="utf-8"?>  <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content"  xmlns:android="http://ift.tt/nIICcg">  <LinearLayout android:orientation="vertical" android:id="@id/assistant_settings_payments_item_content" android:paddingTop="@dimen/assistant_setting_payments_list_container_padding" android:paddingBottom="@dimen/assistant_setting_payments_list_container_padding" android:layout_width="fill_parent" android:layout_height="wrap_content">  <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content">  <LinearLayout android:gravity="start|center" android:orientation="vertical" android:layout_width="40.0dip" android:layout_height="fill_parent">  <RadioButton android:layout_gravity="start|center" android:id="@id/assistant_settings_payments_phone_authentication_item_radio_button" android:focusable="false" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="@dimen/assistant_setting_payments_list_item_radio_diff" />  </LinearLayout>  <TextView android:textSize="@dimen/assistant_setting_payments_text_size_medium" android:textColor="@color/quantum_black_text" android:id="@id/assistant_settings_payments_phone_authentication_item_title_text" android:layout_width="wrap_content" android:layout_height="wrap_content" />  </LinearLayout>  <TextView android:textColor="@color/quantum_grey" android:id="@id/assistant_settings_payments_phone_authentication_item_status_text" android:visibility="gone" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="40.0dip" android:lineSpacingExtra="@dimen/assistant_settings_payments_setup_description_line_spacing" />  </LinearLayout>  <View android:id="@id/assistant_settings_payments_item_divider" android:background="@color/assistant_setting_payments_divider" android:layout_width="fill_parent" android:layout_height="@dimen/assistant_setting_payments_divider" />  </LinearLayout>    

Judging by the name of the drawable in the first layout file, quantum_ic_fingerprint_grey600_24, it's probable that phone authentication can be given through the use of a fingerprint, which is to be expected.

User Defined IFTTT Actions

Users can currently create custom voice commands through IFTTT, however, that requires you to manually go to IFTTT and set up an action there. For an average user, this may seem too difficult or annoying, so it appears that Google will be making the process a bit easier by allowing you to teach your Assistant custom actions powered by IFTTT, though it's unclear how powerful this will be.

User Defined Actions

    <string name="user_defined_action_action_editor_title">Teach me to do</string>  <string name="user_defined_action_action_editor_title_do">Do something</string>  <string name="user_defined_action_action_editor_title_say">Say something</string>  <string name="user_defined_action_action_list_section_title">Learned actions</string>  <string name="user_defined_action_add_another_response">Another response</string>  <string name="user_defined_action_add_another_trigger">Another way to say it</string>  <string name="user_defined_action_create_action_section_title">Teach your assistant to…</string>  <string name="user_defined_action_create_do_action_title">Do something</string>  <string name="user_defined_action_create_ifttt_action_title">Create IFTTT action</string>  <string name="user_defined_action_create_say_action_title">Say something</string>  <string name="user_defined_action_delete_confirmation_cancel_text">CANCEL</string>  <string name="user_defined_action_delete_confirmation_delete_text">DELETE</string>  <string name="user_defined_action_delete_confirmation_text">Are you sure you want to delete this action?</string>  <string name="user_defined_action_hint_text_add_a_response">E.g. You got this!</string>  <string name="user_defined_action_hint_text_add_a_trigger">E.g. Workout time</string>  <string name="user_defined_action_hint_text_add_a_voice_action">E.g. Play Eye of the Tiger by Survivor</string>  <string name="user_defined_action_ifttt_action_section_title">IFTTT actions</string>  <string name="user_defined_action_menu_save_button">Save</string>  <string name="user_defined_action_original_action_title">Google Assistant should do</string>  <string name="user_defined_action_paused_action_section_title">Paused actions</string>  <string name="user_defined_action_prompt_title">Google Assistant should say</string>  <string name="user_defined_action_speech_recognition_prompt_text">When I say Okay Google…</string>  <string name="user_defined_action_target_command_hint">Google Assistant should do</string>  <string name="user_defined_action_test_action">Test Action</string>  <string name="user_defined_action_trigger_phrase_title">When I say Ok Google…</string>    

A new user defined preference screen specifically for IFTTT actions is also defined in the APK file:

user_defined_action_preference_screen.xml

    <?xml version="1.0" encoding="utf-8"?>  <PreferenceScreen  xmlns:android="http://ift.tt/nIICcg">  <com.google.android.apps.gsa.assistant.settings.shared.CustomPreferenceCategory android:key="@string/assistant_settings_create_action_header_key" android:order="0" />  <com.google.android.apps.gsa.assistant.settings.shared.CustomPreferenceCategory android:key="@string/assistant_settings_active_action_category_key" android:order="1" />  <com.google.android.apps.gsa.assistant.settings.shared.CustomPreferenceCategory android:key="@string/assistant_settings_paused_action_category_key" android:order="2" />  <com.google.android.apps.gsa.assistant.settings.shared.CustomPreferenceCategory android:key="@string/assistant_settings_ifttt_action_category_key" android:order="3" />  </PreferenceScreen>    

The strings for user defined actions has been visible for a few iterations of the Google App, but the ability to directly create IFTTT actions is new. We hope that this means we can create and edit powerful IFTTT actions straight from the Google Home app, but I fear it may just be limited to simple voice responses. We'll have to wait and see for this feature to go live.

Video Autoplay Settings

Finally, the Google App also appears to be bringing support for video preview autoplay settings. When you play a video through the Google App, you may now be able to toggle whether or not the video automatically plays.

  <string name="enable_video_preview_autoplay">Autoplay</string>  <string name="enable_video_preview_autoplay_on_mobile_data">Allow on mobile networks</string>  <string name="enable_video_preview_autoplay_on_mobile_data_preference">enableVideoPreviewAutoplayOnMobileDataPreference</string>  <string name="enable_video_preview_autoplay_preference">enableVideoPreviewAutoplayPreference</string>  <string name="enable_video_preview_network_preference_category">enableVideoPreviewNetworkPreferenceCategory</string>  

Certainly a minor feature, but the toggle may be useful for those of you on limited data connections who need to conserve as much data as possible to prevent overages.

Edit and Crop before Sharing Screenshot

There's one last thing I wanted to share. This one, however, didn't first pop up in this version of the Google App. It's the ability to edit and crop before sharing a screenshot. The following strings showcase this possibility, but credits go to @EvoWizz for discovering this first.

Screenshot Crop, Edit, and Share

    <string name="sharebear_color_black">Black color</string>  <string name="sharebear_color_blue">Blue color</string>  <string name="sharebear_color_green">Green color</string>  <string name="sharebear_color_purple">Purple color</string>  <string name="sharebear_color_red">Red color</string>  <string name="sharebear_color_white">White color</string>  <string name="sharebear_color_yellow">Yellow color</string>  <string name="sharebear_crop">Crop</string>  <string name="sharebear_crop_screenshot_activity_label">Crop Screenshot</string>  <string name="sharebear_done_button_description">Done</string>  <string name="sharebear_edit">Draw</string>  <string name="sharebear_edit_screenshot_activity_label">Edit Screenshot</string>  <string name="sharebear_edit_undo_no_effect">Nothing to undo</string>  <string name="sharebear_link">Screenshot from %s</string>  <string name="sharebear_save_failed_no_permission">Did not receive permission to write to device storage. Please try again.</string>  <string name="sharebear_screenshotter_activity_label">Share Screenshot</string>  <string name="sharebear_share_saved_screenshot_chooser_title">Edit and share screenshot</string>  <string name="sharebear_share_subject">Screenshot shared from Google</string>  <string name="sharebear_storage_permission_request_info">The Google app needs permission to access device storage to improve the way we handle screenshots you take in the app</string>  <string name="sharebear_storage_permission_request_info_not_now">Not now</string>  <string name="sharebear_storage_permission_request_info_yes">Yes</string>    

As before, there are numerous layout files, icons, and this time even smali files dedicated to the "sharebear" function. This means that the feature is fairly close to being implemented, but since we haven't yet seen this feature pop up in the latest version, we're assuming that it's pending a server side switch (like most other Google feature tests).

sharebear_screenshot_crop_activity.xml

    <?xml version="1.0" encoding="utf-8"?>  <FrameLayout android:tag="ve=33713" android:layout_width="fill_parent" android:layout_height="fill_parent"  xmlns:android="http://ift.tt/nIICcg">  <com.google.android.apps.gsa.staticplugins.sharebear.CropScreenshotView android:id="@id/sharebear_crop_screenshot" android:background="@android:color/black" android:layout_width="fill_parent" android:layout_height="fill_parent" />  <LinearLayout android:layout_gravity="bottom|center" android:background="@drawable/sharebear_edit_toolbar_box" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="8.0dip">  <ImageButton android:id="@id/sharebear_crop_cancel_button" android:tag="ve=33630;track:click" android:src="@drawable/quantum_ic_close_white_24" android:layout_weight="1.0" android:contentDescription="@string/cancel" style="@style/SharebearEditButton" />  <Button android:textColor="@android:color/white" android:id="@id/sharebear_crop_done_button" android:tag="ve=33631;track:click" android:background="@android:color/transparent" android:layout_width="wrap_content" android:layout_height="@dimen/sharebear_edit_toolbar_button_size" android:text="@string/sharebear_done_button_description" android:layout_weight="1.0" android:contentDescription="@string/sharebear_done_button_description" android:textAllCaps="true" />  </LinearLayout>  </FrameLayout>    

sharebear_screenshot_edit_activity.xml

    <?xml version="1.0" encoding="utf-8"?>  <FrameLayout android:tag="ve=33714" android:layout_width="fill_parent" android:layout_height="fill_parent"  xmlns:android="http://ift.tt/nIICcg">  <RelativeLayout android:id="@id/sharebear_edit_surface" android:background="@android:color/black" android:layout_width="fill_parent" android:layout_height="fill_parent" android:animateLayoutChanges="true">  <com.google.android.apps.gsa.staticplugins.sharebear.DrawingView android:id="@id/sharebear_drawing" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" />  </RelativeLayout>  <FrameLayout android:layout_gravity="top" android:background="@color/sharebear_toolbar_background" android:layout_width="fill_parent" android:layout_height="wrap_content">  <ImageButton android:layout_gravity="start" android:id="@id/sharebear_edit_cancel_button" android:tag="ve=33632;track:click" android:background="@android:color/transparent" android:paddingTop="5.0dip" android:layout_width="@dimen/sharebear_edit_screenshot_action_buttons_size" android:layout_height="@dimen/sharebear_edit_screenshot_action_buttons_size" android:src="@drawable/quantum_ic_close_white_24" android:contentDescription="@string/cancel" />  <ImageButton android:layout_gravity="end" android:id="@id/sharebear_edit_done_button" android:tag="ve=33633;track:click" android:background="@android:color/transparent" android:paddingTop="5.0dip" android:layout_width="@dimen/sharebear_edit_screenshot_action_buttons_size" android:layout_height="@dimen/sharebear_edit_screenshot_action_buttons_size" android:src="@drawable/quantum_ic_done_white_24" android:contentDescription="@string/sharebear_done_button_description" />  </FrameLayout>  <LinearLayout android:layout_gravity="bottom|center" android:background="@drawable/sharebear_edit_toolbar_box" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="8.0dip">  <fragment android:id="@id/sharebear_edit_toolbar" android:layout_width="wrap_content" android:layout_height="wrap_content" class="com.google.android.apps.gsa.staticplugins.sharebear.EditToolbar" />  </LinearLayout>  </FrameLayout>    

We'll keep on the lookout for hints at upcoming features in Google app updates as they roll out, so keep an eye out on our portal or subscribe to our APK teardown feed for more content like this.



from xda-developers http://ift.tt/2os9fK2
via IFTTT

No comments:

Post a Comment