From 77edb686d7de170fb492342148eaecd2de2d3144 Mon Sep 17 00:00:00 2001 From: Jon Spivack Date: Thu, 10 Jun 2021 18:12:58 -0700 Subject: [PATCH] Send NIU Actions Intents to default Assistant This changes the recipient for NIU Actions from a package hard-coded in a config file to the currently selected default Assistant. The user can change this under Settings -> Default apps. ImageActionUtils has also been updated to handle the case where its Intents cannot be resolved, preventing a crash if the user sets the default Assistant to something that cannot receive NIU Actions. Bug: 186655099 Test: Manual (Pixel 3A, set default Assistant to Google Go and None) Test: m -j RunLauncherGoGoogleRoboTests Change-Id: I03b93597092575902d507615f32b63f4050c4c69 --- go/quickstep/res/values/config.xml | 2 -- .../quickstep/TaskOverlayFactoryGo.java | 20 ++++++++++++------- .../quickstep/util/ImageActionUtils.java | 16 ++++++++++----- 3 files changed, 24 insertions(+), 14 deletions(-) diff --git a/go/quickstep/res/values/config.xml b/go/quickstep/res/values/config.xml index 402bf9ad13..796d14db16 100644 --- a/go/quickstep/res/values/config.xml +++ b/go/quickstep/res/values/config.xml @@ -16,8 +16,6 @@ - - true diff --git a/go/quickstep/src/com/android/quickstep/TaskOverlayFactoryGo.java b/go/quickstep/src/com/android/quickstep/TaskOverlayFactoryGo.java index 65cdcf06ba..3a6e9b57cc 100644 --- a/go/quickstep/src/com/android/quickstep/TaskOverlayFactoryGo.java +++ b/go/quickstep/src/com/android/quickstep/TaskOverlayFactoryGo.java @@ -21,6 +21,7 @@ import static com.android.quickstep.views.OverviewActionsView.DISABLED_ROTATED; import android.annotation.SuppressLint; import android.app.assist.AssistContent; +import android.content.ActivityNotFoundException; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; @@ -29,10 +30,10 @@ import android.os.SystemClock; import android.os.UserManager; import android.provider.Settings; import android.text.TextUtils; +import android.util.Log; import androidx.annotation.VisibleForTesting; -import com.android.launcher3.R; import com.android.quickstep.util.AssistContentRequester; import com.android.quickstep.views.OverviewActionsView; import com.android.quickstep.views.TaskThumbnailView; @@ -90,9 +91,7 @@ public final class TaskOverlayFactoryGo extends TaskOverlayFactory { public void initOverlay(Task task, ThumbnailData thumbnail, Matrix matrix, boolean rotated) { getActionsView().updateDisabledFlags(DISABLED_NO_THUMBNAIL, thumbnail == null); - mNIUPackageName = - mApplicationContext.getString(R.string.niu_actions_package); - + checkSettings(); if (thumbnail == null || TextUtils.isEmpty(mNIUPackageName)) { return; } @@ -105,7 +104,6 @@ public final class TaskOverlayFactoryGo extends TaskOverlayFactory { getActionsView().setCallbacks(new OverlayUICallbacksGoImpl(isAllowedByPolicy, task)); mTaskPackageName = task.key.getPackageName(); - checkPermissions(); if (!mAssistPermissionsEnabled) { return; } @@ -137,7 +135,11 @@ public final class TaskOverlayFactoryGo extends TaskOverlayFactory { mImageApi.shareAsDataWithExplicitIntent(/* crop */ null, intent); } else { intent.putExtra(ACTIONS_ERROR_CODE, ERROR_PERMISSIONS); - mApplicationContext.startActivity(intent); + try { + mApplicationContext.startActivity(intent); + } catch (ActivityNotFoundException e) { + Log.e(TAG, "No activity found to receive permission error intent"); + } } } @@ -160,13 +162,17 @@ public final class TaskOverlayFactoryGo extends TaskOverlayFactory { * Checks whether the Assistant has screen context permissions */ @VisibleForTesting - public void checkPermissions() { + public void checkSettings() { ContentResolver contentResolver = mApplicationContext.getContentResolver(); boolean structureEnabled = Settings.Secure.getInt(contentResolver, Settings.Secure.ASSIST_STRUCTURE_ENABLED, 1) != 0; boolean screenshotEnabled = Settings.Secure.getInt(contentResolver, Settings.Secure.ASSIST_SCREENSHOT_ENABLED, 1) != 0; mAssistPermissionsEnabled = structureEnabled && screenshotEnabled; + + String assistantPackage = + Settings.Secure.getString(contentResolver, Settings.Secure.ASSISTANT); + mNIUPackageName = assistantPackage.split("/", 2)[0]; } protected class OverlayUICallbacksGoImpl extends OverlayUICallbacksImpl diff --git a/quickstep/src/com/android/quickstep/util/ImageActionUtils.java b/quickstep/src/com/android/quickstep/util/ImageActionUtils.java index 2285d74d73..de7dbd64f5 100644 --- a/quickstep/src/com/android/quickstep/util/ImageActionUtils.java +++ b/quickstep/src/com/android/quickstep/util/ImageActionUtils.java @@ -26,6 +26,7 @@ import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR; import android.app.Activity; import android.app.ActivityOptions; import android.app.prediction.AppTarget; +import android.content.ActivityNotFoundException; import android.content.ClipData; import android.content.ClipDescription; import android.content.ComponentName; @@ -68,6 +69,7 @@ public class ImageActionUtils { private static final long FILE_LIFE = 1000L /*ms*/ * 60L /*s*/ * 60L /*m*/ * 24L /*h*/; private static final String SUB_FOLDER = "Overview"; private static final String BASE_NAME = "overview_image_"; + private static final String TAG = "ImageActionUtils"; /** * Saves screenshot to location determine by SystemUiProxy @@ -154,11 +156,15 @@ public class ImageActionUtils { Intent intent, BiFunction uriToIntentMap, String tag) { Intent[] intents = uriToIntentMap.apply(getImageUri(bitmap, crop, context, tag), intent); - // Work around b/159412574 - if (intents.length == 1) { - context.startActivity(intents[0]); - } else { - context.startActivities(intents); + try { + // Work around b/159412574 + if (intents.length == 1) { + context.startActivity(intents[0]); + } else { + context.startActivities(intents); + } + } catch (ActivityNotFoundException e) { + Log.e(TAG, "No activity found to receive image intent"); } }