Use Device Config flag for GET_CONTENT takeover feature

Enable activity alias via device config flag for GET_CONTENT, this helps
us to tune the experimentation for Android S+ devices from server-side.

Bug: 231413552
Test: atest PhotoPickerGetContentTest
Change-Id: Ia4e7965858308e77b53411f5384dd668ba58180e
diff --git a/src/com/android/providers/media/MediaProvider.java b/src/com/android/providers/media/MediaProvider.java
index 62f0a5a..70b4fea 100644
--- a/src/com/android/providers/media/MediaProvider.java
+++ b/src/com/android/providers/media/MediaProvider.java
@@ -121,6 +121,7 @@
 import android.content.BroadcastReceiver;
 import android.content.ClipData;
 import android.content.ClipDescription;
+import android.content.ComponentName;
 import android.content.ContentProvider;
 import android.content.ContentProviderClient;
 import android.content.ContentProviderOperation;
@@ -225,6 +226,7 @@
 import com.android.providers.media.fuse.ExternalStorageServiceImpl;
 import com.android.providers.media.fuse.FuseDaemon;
 import com.android.providers.media.metrics.PulledMetrics;
+import com.android.providers.media.photopicker.PhotoPickerActivity;
 import com.android.providers.media.photopicker.PickerDataLayer;
 import com.android.providers.media.photopicker.PickerSyncController;
 import com.android.providers.media.photopicker.data.ExternalDbFacade;
@@ -342,6 +344,8 @@
     private static final String DIRECTORY_MEDIA = "media";
     private static final String DIRECTORY_THUMBNAILS = ".thumbnails";
 
+    private static final String TAKE_OVER_GET_CONTENT = "take_over_get_content";
+
     /**
      * Hard-coded filename where the current value of
      * {@link DatabaseHelper#getOrCreateUuid} is persisted on a physical SD card
@@ -1180,10 +1184,29 @@
             mExternalStorageAuthorityAppId = UserHandle.getAppId(provider.applicationInfo.uid);
         }
 
+        checkDeviceConfigAndUpdateGetContentAlias();
+
         PulledMetrics.initialize(context);
         return true;
     }
 
+    @VisibleForTesting
+    protected void checkDeviceConfigAndUpdateGetContentAlias() {
+        final String photoPickerGetContentActivity =
+                PhotoPickerActivity.class.getPackage().getName() + ".PhotoPickerGetContentActivity";
+        final ComponentName componentName = new ComponentName(getContext().getPackageName(),
+                photoPickerGetContentActivity);
+
+        final int expectedState = getBooleanDeviceConfig(TAKE_OVER_GET_CONTENT, false)
+                ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
+                : PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
+
+        Log.i(TAG, "Change component enabled state to " + expectedState
+                + " for PhotoPickerGetContentActivity. ");
+        getContext().getPackageManager().setComponentEnabledSetting(componentName, expectedState,
+                PackageManager.DONT_KILL_APP);
+    }
+
     Optional<DatabaseHelper> getDatabaseHelper(String dbName) {
         if (dbName.equalsIgnoreCase(INTERNAL_DATABASE_NAME)) {
             return Optional.of(mInternalDatabase);
diff --git a/tests/src/com/android/providers/media/MediaProviderTest.java b/tests/src/com/android/providers/media/MediaProviderTest.java
index 6df8ab3..4b6fe50 100644
--- a/tests/src/com/android/providers/media/MediaProviderTest.java
+++ b/tests/src/com/android/providers/media/MediaProviderTest.java
@@ -642,6 +642,11 @@
             public int getCallingPackageTargetSdkVersion() {
                 return Build.VERSION_CODES.Q;
             }
+
+            @Override
+            protected void checkDeviceConfigAndUpdateGetContentAlias() {
+                // Ignore this as test app cannot read device config
+            }
         };
 
         final ProviderInfo info = sIsolatedContext.getPackageManager()
@@ -1069,6 +1074,11 @@
             public int getCallingPackageTargetSdkVersion() {
                 return Build.VERSION_CODES.CUR_DEVELOPMENT;
             }
+
+            @Override
+            protected void checkDeviceConfigAndUpdateGetContentAlias() {
+                // Ignore this as test app cannot read device config
+            }
         };
         final ProviderInfo info = sIsolatedContext.getPackageManager()
                 .resolveContentProvider(MediaStore.AUTHORITY, PackageManager.GET_META_DATA);
diff --git a/tests/src/com/android/providers/media/scan/MediaScannerTest.java b/tests/src/com/android/providers/media/scan/MediaScannerTest.java
index f8c27e6..4e0e265 100644
--- a/tests/src/com/android/providers/media/scan/MediaScannerTest.java
+++ b/tests/src/com/android/providers/media/scan/MediaScannerTest.java
@@ -130,6 +130,11 @@
                 protected void updateNextRowIdXattr(DatabaseHelper helper, long id) {
                     // Ignoring this as test app would not have access to update xattr.
                 }
+
+                @Override
+                protected void checkDeviceConfigAndUpdateGetContentAlias() {
+                    // Ignore this as test app cannot read device config
+                }
             };
             mProvider.attachInfo(this, info);
             mResolver.addProvider(MediaStore.AUTHORITY, mProvider);