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