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);