Merge 24Q3 (ab/11976889) to aosp-main-future

Bug: 347831320
Merged-In: If0eb75bff237c6bab1dba21724abefc395ec2f02
Change-Id: I708ebcb4a56773b6e567a6af3def257a240bf84f
diff --git a/Android.bp b/Android.bp
index ab0fa8f..083244a 100644
--- a/Android.bp
+++ b/Android.bp
@@ -25,6 +25,7 @@
     optimize: {
         proguard_flags_files: ["proguard.flags"],
     },
+    static_libs: ["contactskeysprovider_flags_java_lib"],
 }
 
 filegroup {
@@ -33,3 +34,17 @@
         "src/**/*.java",
     ],
 }
+
+aconfig_declarations {
+    name: "contactskeysprovider_flags",
+    package: "com.android.providers.contactkeys.flags",
+    container: "system",
+    srcs: [
+        "contactskeysprovider_flags.aconfig",
+    ],
+}
+
+java_aconfig_library {
+    name: "contactskeysprovider_flags_java_lib",
+    aconfig_declarations: "contactskeysprovider_flags",
+}
diff --git a/contactskeysprovider_flags.aconfig b/contactskeysprovider_flags.aconfig
new file mode 100644
index 0000000..35b6d56
--- /dev/null
+++ b/contactskeysprovider_flags.aconfig
@@ -0,0 +1,14 @@
+package: "com.android.providers.contactkeys.flags"
+container: "system"
+
+flag {
+    name: "contactkeys_strip_fix"
+    is_exported: true
+    namespace: "privacy_infra_policy"
+    description: "This flag controls whether E2EE contact key values are returned for apps with "
+        "WRITE_VERIFICATION_STATE_E2EE_CONTACT_KEYS"
+    bug: "344666512"
+    metadata {
+        purpose: PURPOSE_BUGFIX
+    }
+}
diff --git a/src/com/android/providers/contactkeys/E2eeContactKeysProvider.java b/src/com/android/providers/contactkeys/E2eeContactKeysProvider.java
index a9bb85e..a702177 100644
--- a/src/com/android/providers/contactkeys/E2eeContactKeysProvider.java
+++ b/src/com/android/providers/contactkeys/E2eeContactKeysProvider.java
@@ -183,6 +183,16 @@
                 mDbHelper.getAllContactKeys(lookupKey);
 
         contactKeys = filterVisibleContactKeys(contactKeys);
+
+        if (com.android.providers.contactkeys.flags.Flags.contactkeysStripFix()) {
+            if (E2eeContactKeysPermissions.hasCallerOrSelfPermission(getContext(),
+                    UPDATE_VERIFICATION_STATE_PERMISSION)) {
+                response.putParcelableList(E2eeContactKeys.KEY_CONTACT_KEYS, contactKeys);
+
+                return response;
+            }
+        }
+
         contactKeys = getStrippedContactKeys(contactKeys);
 
         response.putParcelableList(E2eeContactKeys.KEY_CONTACT_KEYS, contactKeys);
@@ -410,6 +420,16 @@
         List<E2eeContactKeysManager.E2eeSelfKey> selfKeys = mDbHelper.getAllSelfKeys();
 
         selfKeys = filterVisibleSelfKeys(selfKeys);
+
+        if (com.android.providers.contactkeys.flags.Flags.contactkeysStripFix()) {
+            if (E2eeContactKeysPermissions.hasCallerOrSelfPermission(getContext(),
+                    UPDATE_VERIFICATION_STATE_PERMISSION)) {
+                response.putParcelableList(E2eeContactKeys.KEY_CONTACT_KEYS, selfKeys);
+
+                return response;
+            }
+        }
+
         selfKeys = getStrippedSelfKeys(selfKeys);
 
         response.putParcelableList(E2eeContactKeys.KEY_CONTACT_KEYS, selfKeys);