Merge "Check screen context permissions for NIU Actions" into sc-dev am: b9f8152aa1
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Launcher3/+/14343101 Change-Id: I1e4a19b0934bd89ea5e8356cb12c846d156e420d
This commit is contained in:
@@ -21,14 +21,18 @@ import static com.android.quickstep.views.OverviewActionsView.DISABLED_ROTATED;
|
|||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.app.assist.AssistContent;
|
import android.app.assist.AssistContent;
|
||||||
|
import android.content.ContentResolver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.graphics.Matrix;
|
import android.graphics.Matrix;
|
||||||
|
import android.net.Uri;
|
||||||
import android.os.SystemClock;
|
import android.os.SystemClock;
|
||||||
|
import android.provider.Settings;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
|
||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
|
|
||||||
|
import com.android.launcher3.BuildConfig;
|
||||||
import com.android.launcher3.R;
|
import com.android.launcher3.R;
|
||||||
import com.android.quickstep.util.AssistContentRequester;
|
import com.android.quickstep.util.AssistContentRequester;
|
||||||
import com.android.quickstep.views.OverviewActionsView;
|
import com.android.quickstep.views.OverviewActionsView;
|
||||||
@@ -45,7 +49,12 @@ public final class TaskOverlayFactoryGo extends TaskOverlayFactory {
|
|||||||
public static final String ACTION_SEARCH = "com.android.quickstep.ACTION_SEARCH";
|
public static final String ACTION_SEARCH = "com.android.quickstep.ACTION_SEARCH";
|
||||||
public static final String ELAPSED_NANOS = "niu_actions_elapsed_realtime_nanos";
|
public static final String ELAPSED_NANOS = "niu_actions_elapsed_realtime_nanos";
|
||||||
public static final String ACTIONS_URL = "niu_actions_app_url";
|
public static final String ACTIONS_URL = "niu_actions_app_url";
|
||||||
|
public static final String ACTIONS_ERROR_CODE = "niu_actions_app_error_code";
|
||||||
|
public static final int ERROR_PERMISSIONS = 1;
|
||||||
private static final String TAG = "TaskOverlayFactoryGo";
|
private static final String TAG = "TaskOverlayFactoryGo";
|
||||||
|
private static final String URI_AUTHORITY =
|
||||||
|
BuildConfig.APPLICATION_ID + ".overview.fileprovider";
|
||||||
|
private static final String FAKE_FILEPATH = "shared_images/null.png";
|
||||||
|
|
||||||
// Empty constructor required for ResourceBasedOverride
|
// Empty constructor required for ResourceBasedOverride
|
||||||
public TaskOverlayFactoryGo(Context context) {}
|
public TaskOverlayFactoryGo(Context context) {}
|
||||||
@@ -64,6 +73,7 @@ public final class TaskOverlayFactoryGo extends TaskOverlayFactory {
|
|||||||
public static final class TaskOverlayGo<T extends OverviewActionsView> extends TaskOverlay {
|
public static final class TaskOverlayGo<T extends OverviewActionsView> extends TaskOverlay {
|
||||||
private String mNIUPackageName;
|
private String mNIUPackageName;
|
||||||
private String mWebUrl;
|
private String mWebUrl;
|
||||||
|
private boolean mAssistPermissionsEnabled;
|
||||||
|
|
||||||
private TaskOverlayGo(TaskThumbnailView taskThumbnailView) {
|
private TaskOverlayGo(TaskThumbnailView taskThumbnailView) {
|
||||||
super(taskThumbnailView);
|
super(taskThumbnailView);
|
||||||
@@ -87,6 +97,11 @@ public final class TaskOverlayFactoryGo extends TaskOverlayFactory {
|
|||||||
boolean isAllowedByPolicy = mThumbnailView.isRealSnapshot();
|
boolean isAllowedByPolicy = mThumbnailView.isRealSnapshot();
|
||||||
getActionsView().setCallbacks(new OverlayUICallbacksGoImpl(isAllowedByPolicy, task));
|
getActionsView().setCallbacks(new OverlayUICallbacksGoImpl(isAllowedByPolicy, task));
|
||||||
|
|
||||||
|
checkPermissions();
|
||||||
|
if (!mAssistPermissionsEnabled) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
int taskId = task.key.id;
|
int taskId = task.key.id;
|
||||||
AssistContentRequester contentRequester =
|
AssistContentRequester contentRequester =
|
||||||
new AssistContentRequester(mApplicationContext);
|
new AssistContentRequester(mApplicationContext);
|
||||||
@@ -112,7 +127,22 @@ public final class TaskOverlayFactoryGo extends TaskOverlayFactory {
|
|||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
public void sendNIUIntent(String actionType) {
|
public void sendNIUIntent(String actionType) {
|
||||||
Intent intent = createNIUIntent(actionType);
|
Intent intent = createNIUIntent(actionType);
|
||||||
mImageApi.shareAsDataWithExplicitIntent(/* crop */ null, intent);
|
// Only add and send the image if the appropriate permissions are held
|
||||||
|
if (mAssistPermissionsEnabled) {
|
||||||
|
mImageApi.shareAsDataWithExplicitIntent(/* crop */ null, intent);
|
||||||
|
} else {
|
||||||
|
intent.putExtra(ACTIONS_ERROR_CODE, ERROR_PERMISSIONS);
|
||||||
|
// The Intent recipient expects an image URI, and omitting one or using a
|
||||||
|
// completely invalid URI will cause the Intent parsing to crash.
|
||||||
|
// So we construct a URI for a nonexistent image.
|
||||||
|
Uri uri = new Uri.Builder()
|
||||||
|
.scheme(ContentResolver.SCHEME_CONTENT)
|
||||||
|
.authority(URI_AUTHORITY)
|
||||||
|
.path(FAKE_FILEPATH)
|
||||||
|
.build();
|
||||||
|
intent.setData(uri);
|
||||||
|
mApplicationContext.startActivity(intent);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Intent createNIUIntent(String actionType) {
|
private Intent createNIUIntent(String actionType) {
|
||||||
@@ -129,6 +159,19 @@ public final class TaskOverlayFactoryGo extends TaskOverlayFactory {
|
|||||||
return intent;
|
return intent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks whether the Assistant has screen context permissions
|
||||||
|
*/
|
||||||
|
@VisibleForTesting
|
||||||
|
public void checkPermissions() {
|
||||||
|
ContentResolver contentResolver = mApplicationContext.getContentResolver();
|
||||||
|
boolean structureEnabled = Settings.Secure.getInt(contentResolver,
|
||||||
|
Settings.Secure.ASSIST_STRUCTURE_ENABLED, 0) != 0;
|
||||||
|
boolean screenshotEnabled = Settings.Secure.getInt(contentResolver,
|
||||||
|
Settings.Secure.ASSIST_SCREENSHOT_ENABLED, 0) != 0;
|
||||||
|
mAssistPermissionsEnabled = structureEnabled && screenshotEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
protected class OverlayUICallbacksGoImpl extends OverlayUICallbacksImpl
|
protected class OverlayUICallbacksGoImpl extends OverlayUICallbacksImpl
|
||||||
implements OverlayUICallbacksGo {
|
implements OverlayUICallbacksGo {
|
||||||
public OverlayUICallbacksGoImpl(boolean isAllowedByPolicy, Task task) {
|
public OverlayUICallbacksGoImpl(boolean isAllowedByPolicy, Task task) {
|
||||||
|
|||||||
Reference in New Issue
Block a user