Enforce READ_DROPBOX_DATA permission for ecall diagnostics.

Following privacy review done for the recent mainline changes to resolve
TelephonyManager#persistEmergencyCallDiagnosticData, ensure that
READ_DROPBOX_DATA is explicitly required. Since the new changes have
been gated by a flag, this permission check needs to be conditionally
checked on the same premise.

Bug: 328132903
Test: Manual
Test: atest TelephonyManagerTest
Change-Id: Ibd75727aaa7a40f23b44ed20dceaeb18c1146100
diff --git a/Android.bp b/Android.bp
index c717d86..3bbafc0 100644
--- a/Android.bp
+++ b/Android.bp
@@ -49,6 +49,7 @@
         "android.permission.flags-aconfig-java",
         "satellite-s2storage-ro",
         "s2-geometry-library-java",
+        "dropbox_flags_lib",
     ],
 
     srcs: [
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index e18818c..c006d70 100644
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -257,6 +257,7 @@
 import com.android.phone.vvm.RemoteVvmTaskManager;
 import com.android.phone.vvm.VisualVoicemailSettingsUtil;
 import com.android.phone.vvm.VisualVoicemailSmsFilterConfig;
+import com.android.server.feature.flags.Flags;
 import com.android.services.telephony.TelecomAccountRegistry;
 import com.android.services.telephony.TelephonyConnectionService;
 import com.android.telephony.Rlog;
@@ -422,6 +423,7 @@
 
     private final PhoneGlobals mApp;
     private FeatureFlags mFeatureFlags;
+    private com.android.server.telecom.flags.FeatureFlags mTelecomFeatureFlags;
     private final CallManager mCM;
     private final ImsResolver mImsResolver;
 
@@ -2462,6 +2464,7 @@
     private PhoneInterfaceManager(PhoneGlobals app, FeatureFlags featureFlags) {
         mApp = app;
         mFeatureFlags = featureFlags;
+        mTelecomFeatureFlags = new com.android.server.telecom.flags.FeatureFlagsImpl();
         mCM = PhoneGlobals.getInstance().mCM;
         mImsResolver = ImsResolver.getInstance();
         mSatelliteController = SatelliteController.getInstance();
@@ -12894,8 +12897,16 @@
     public void persistEmergencyCallDiagnosticData(@NonNull String dropboxTag, boolean enableLogcat,
             long logcatStartTimestampMillis, boolean enableTelecomDump,
             boolean enableTelephonyDump) {
-        mApp.enforceCallingPermission(android.Manifest.permission.DUMP,
-                "persistEmergencyCallDiagnosticData");
+        // Verify that the caller has READ_DROPBOX_DATA permission.
+        if (mTelecomFeatureFlags.telecomResolveHiddenDependencies()
+                && Flags.enableReadDropboxPermission()) {
+            mApp.enforceCallingPermission(permission.READ_DROPBOX_DATA,
+                    "persistEmergencyCallDiagnosticData");
+        } else {
+            // Otherwise, enforce legacy permission.
+            mApp.enforceCallingPermission(android.Manifest.permission.DUMP,
+                    "persistEmergencyCallDiagnosticData");
+        }
         final long identity = Binder.clearCallingIdentity();
         try {
             persistEmergencyCallDiagnosticDataInternal(dropboxTag, enableLogcat,