Add setting to disable screenshot separately (1/2)

Bug: 22063668
Change-Id: Ief704004a8ab0a65d34753f9098003ba695726df
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 9b5fbfa..cc56969 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -5444,6 +5444,14 @@
         public static final String ASSIST_STRUCTURE_ENABLED = "assist_structure_enabled";
 
         /**
+         * Specifies whether a screenshot of the screen contents will be sent to the assist
+         * application (active voice interaction service).
+         *
+         * @hide
+         */
+        public static final String ASSIST_SCREENSHOT_ENABLED = "assist_screenshot_enabled";
+
+        /**
          * Names of the service components that the current user has explicitly allowed to
          * see all of the user's notifications, separated by ':'.
          *
diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionSessionConnection.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionSessionConnection.java
index 549a511..bd043ac 100644
--- a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionSessionConnection.java
+++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionSessionConnection.java
@@ -198,8 +198,11 @@
                 isScreenCaptureAllowed = mAm.isScreenCaptureAllowedOnCurrentActivity();
             } catch (RemoteException e) {
             }
-            boolean allDataEnabled = (Settings.Secure.getIntForUser(mContext.getContentResolver(),
-                    Settings.Secure.ASSIST_STRUCTURE_ENABLED, 1, mUser) != 0)
+            boolean structureEnabled = Settings.Secure.getIntForUser(mContext.getContentResolver(),
+                    Settings.Secure.ASSIST_STRUCTURE_ENABLED, 1, mUser) != 0
+                    && isScreenCaptureAllowed;
+            boolean screenshotEnabled = Settings.Secure.getIntForUser(mContext.getContentResolver(),
+                    Settings.Secure.ASSIST_SCREENSHOT_ENABLED, 1, mUser) != 0
                     && isScreenCaptureAllowed;
             mShowArgs = args;
             mShowFlags = flags;
@@ -208,7 +211,7 @@
             if ((flags& VoiceInteractionSession.SHOW_WITH_ASSIST) != 0) {
                 if (mAppOps.noteOpNoThrow(AppOpsManager.OP_ASSIST_STRUCTURE, mCallingUid,
                         mSessionComponentName.getPackageName()) == AppOpsManager.MODE_ALLOWED
-                        && allDataEnabled) {
+                        && structureEnabled) {
                     try {
                         needDisclosure = true;
                         mAm.requestAssistContextExtras(ActivityManager.ASSIST_CONTEXT_FULL,
@@ -226,7 +229,7 @@
             if ((flags& VoiceInteractionSession.SHOW_WITH_SCREENSHOT) != 0) {
                 if (mAppOps.noteOpNoThrow(AppOpsManager.OP_ASSIST_SCREENSHOT, mCallingUid,
                         mSessionComponentName.getPackageName()) == AppOpsManager.MODE_ALLOWED
-                        && allDataEnabled) {
+                        && screenshotEnabled) {
                     try {
                         needDisclosure = true;
                         mIWindowManager.requestAssistScreenshot(mScreenshotReceiver);