Merge "Not fetching MediaProvider from Clone Profile" into tm-qpr-dev am: 00773c6a8e

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20419514

Change-Id: I65be7b97d2c15ee1d688c82333746a821edc720f
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Sarup Dalwani
2022-11-09 18:21:25 +00:00
committed by Automerger Merge Worker

View File

@@ -80,6 +80,7 @@ import com.android.internal.util.FrameworkStatsLog;
import com.android.server.LocalServices; import com.android.server.LocalServices;
import com.android.server.RescueParty; import com.android.server.RescueParty;
import com.android.server.pm.UserManagerInternal; import com.android.server.pm.UserManagerInternal;
import com.android.server.pm.UserManagerService;
import com.android.server.pm.parsing.pkg.AndroidPackage; import com.android.server.pm.parsing.pkg.AndroidPackage;
import java.io.FileDescriptor; import java.io.FileDescriptor;
@@ -162,7 +163,7 @@ public class ContentProviderHelper {
private ContentProviderHolder getContentProviderImpl(IApplicationThread caller, private ContentProviderHolder getContentProviderImpl(IApplicationThread caller,
String name, IBinder token, int callingUid, String callingPackage, String callingTag, String name, IBinder token, int callingUid, String callingPackage, String callingTag,
boolean stable, int userId) { boolean stable, int userId) {
ContentProviderRecord cpr; ContentProviderRecord cpr = null;
ContentProviderConnection conn = null; ContentProviderConnection conn = null;
ProviderInfo cpi = null; ProviderInfo cpi = null;
boolean providerRunning = false; boolean providerRunning = false;
@@ -184,8 +185,21 @@ public class ContentProviderHelper {
checkTime(startTime, "getContentProviderImpl: getProviderByName"); checkTime(startTime, "getContentProviderImpl: getProviderByName");
UserManagerService userManagerService = UserManagerService.getInstance();
/*
For clone user profile and allowed authority, skipping finding provider and redirecting
it to owner profile. Ideally clone profile should not have MediaProvider instance
installed and mProviderMap would not have entry for clone user. This is just fallback
check to ensure even if MediaProvider is installed in Clone Profile, it should not be
used and redirect to owner user's MediaProvider.
*/
//todo(b/236121588) MediaProvider should not be installed in clone profile.
if (!isAuthorityRedirectedForCloneProfile(name)
|| !userManagerService.isMediaSharedWithParent(userId)) {
// First check if this content provider has been published... // First check if this content provider has been published...
cpr = mProviderMap.getProviderByName(name, userId); cpr = mProviderMap.getProviderByName(name, userId);
}
// If that didn't work, check if it exists for user 0 and then // If that didn't work, check if it exists for user 0 and then
// verify that it's a singleton provider before using it. // verify that it's a singleton provider before using it.
if (cpr == null && userId != UserHandle.USER_SYSTEM) { if (cpr == null && userId != UserHandle.USER_SYSTEM) {
@@ -200,11 +214,9 @@ public class ContentProviderHelper {
userId = UserHandle.USER_SYSTEM; userId = UserHandle.USER_SYSTEM;
checkCrossUser = false; checkCrossUser = false;
} else if (isAuthorityRedirectedForCloneProfile(name)) { } else if (isAuthorityRedirectedForCloneProfile(name)) {
if (userManagerService.isMediaSharedWithParent(userId)) {
UserManagerInternal umInternal = LocalServices.getService( UserManagerInternal umInternal = LocalServices.getService(
UserManagerInternal.class); UserManagerInternal.class);
UserInfo userInfo = umInternal.getUserInfo(userId);
if (userInfo != null && userInfo.isCloneProfile()) {
userId = umInternal.getProfileParentId(userId); userId = umInternal.getProfileParentId(userId);
checkCrossUser = false; checkCrossUser = false;
} }