summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Nate Myren <ntmyren@google.com> 2023-01-03 16:59:30 -0800
committer Nate Myren <ntmyren@google.com> 2024-05-22 22:23:07 +0000
commit36041be02ddb10e087dd299863c962bf30cbcc84 (patch)
tree6e6cd9796669afb785da0f024b7825ac58771170
parent37c71c2eb0af3eff47034346f8951c8ab2a6a6cc (diff)
Use APIs for clipboard in PrivacyControlsViewModel
Replace old, hardcoded strings with API calls Bug: 263305143 Test: Manual Change-Id: I9e3a19a75708696634d4930e21b7c165bf15ba01
-rw-r--r--PermissionController/AndroidManifest.xml1
-rw-r--r--PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/PrivacyControlsViewModel.kt18
-rw-r--r--flags/flags.aconfig11
3 files changed, 30 insertions, 0 deletions
diff --git a/PermissionController/AndroidManifest.xml b/PermissionController/AndroidManifest.xml
index f1e84500e..c0d6c2907 100644
--- a/PermissionController/AndroidManifest.xml
+++ b/PermissionController/AndroidManifest.xml
@@ -68,6 +68,7 @@
<uses-permission android:name="android.permission.NFC_PREFERRED_PAYMENT_INFO" />
<uses-permission android:name="android.permission.MANAGE_ENHANCED_CONFIRMATION_STATES" />
<uses-permission android:name="android.permission.READ_SYSTEM_GRAMMATICAL_GENDER" />
+ <uses-permission android:name="android.permission.MANAGE_CLIPBOARD_ACCESS_NOTIFICATION" />
<application android:name="com.android.permissioncontroller.PermissionControllerApplication"
android:label="@string/app_name"
diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/PrivacyControlsViewModel.kt b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/PrivacyControlsViewModel.kt
index 2f5702321..41b16e8be 100644
--- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/PrivacyControlsViewModel.kt
+++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/PrivacyControlsViewModel.kt
@@ -16,7 +16,9 @@
package com.android.permissioncontroller.safetycenter.ui.model
+import android.annotation.SuppressLint
import android.app.Application
+import android.content.ClipboardManager
import android.content.Intent
import android.hardware.SensorPrivacyManager
import android.hardware.SensorPrivacyManager.Sensors
@@ -32,6 +34,8 @@ import androidx.fragment.app.Fragment
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import com.android.modules.utils.build.SdkLevel
+import com.android.permission.flags.Flags
import com.android.permissioncontroller.R
import com.android.permissioncontroller.permission.data.SmartUpdateMediatorLiveData
import com.android.settingslib.RestrictedLockUtils
@@ -39,10 +43,15 @@ import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin
/** Viewmodel for the privacy controls page. */
@RequiresApi(Build.VERSION_CODES.TIRAMISU)
+// Suppress warnings related to the camera/mic privacy and clipboard privacy APIs. The PC has the
+// permissions.
+@SuppressLint("MissingPermission")
class PrivacyControlsViewModel(private val app: Application) : AndroidViewModel(app) {
private val sensorPrivacyManager: SensorPrivacyManager =
app.getSystemService(SensorPrivacyManager::class.java)!!
+ private val clipboardManager: ClipboardManager =
+ app.getSystemService(ClipboardManager::class.java)!!
private val userManager: UserManager = app.getSystemService(UserManager::class.java)!!
private val CONFIG_CLIPBOARD_SHOW_ACCESS_NOTIFICATIONS =
@@ -161,6 +170,10 @@ class PrivacyControlsViewModel(private val app: Application) : AndroidViewModel(
}
private fun isClipboardEnabled(): Boolean {
+ if (SdkLevel.isAtLeastU() && Flags.useApiForClipboardPrivacyToggle()) {
+ return clipboardManager.areClipboardAccessNotificationsEnabled()
+ }
+
val clipboardDefaultEnabled =
DeviceConfig.getBoolean(
DeviceConfig.NAMESPACE_CLIPBOARD,
@@ -176,6 +189,11 @@ class PrivacyControlsViewModel(private val app: Application) : AndroidViewModel(
}
private fun toggleClipboard() {
+ if (SdkLevel.isAtLeastU() && Flags.useApiForClipboardPrivacyToggle()) {
+ clipboardManager.setClipboardAccessNotificationsEnabled(!isClipboardEnabled())
+ return
+ }
+
val newState = if (isClipboardEnabled()) 0 else 1
Settings.Secure.putInt(
app.contentResolver,
diff --git a/flags/flags.aconfig b/flags/flags.aconfig
index 839acb963..2e357ec3a 100644
--- a/flags/flags.aconfig
+++ b/flags/flags.aconfig
@@ -27,6 +27,17 @@ flag {
}
flag {
+ name: "use_api_for_clipboard_privacy_toggle"
+ namespace: "permissions"
+ description: "This flag guards whether the Privacy Controls page uses a hardcoded string or an API to control clipboard privacy"
+ bug: "263305143"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+ is_fixed_read_only: true
+}
+
+flag {
name: "archiving_read_only"
namespace: "permissions"
description: "Feature flag to enable the archiving feature."