Fixes type resolving in ActivityManagerShellCommand
- There are 2 reasons for this change
1. make it non-async, because the type may still be null while it's being used in the below codes
2. Ams.mimeTypeFilterAsync is now used only when the caller does not hold the permission. So replacing it with ContentResolver.getType
- Also granting shell special permission to access all provider mime types.
Bug: b/284407686
Test: The intended behavior was reproduced on local testing.
Change-Id: I9add06ffe8c0e7c185f0947f0695be259513bd13
This commit is contained in:
@@ -839,6 +839,8 @@
|
||||
<uses-permission android:name="android.permission.LAUNCH_CREDENTIAL_SELECTOR" />
|
||||
<!-- Permission required for CTS test IntentRedirectionTest -->
|
||||
<uses-permission android:name="android.permission.QUERY_CLONED_APPS" />
|
||||
<!-- Permission required for accessing all content provider mime types -->
|
||||
<uses-permission android:name="android.permission.GET_ANY_PROVIDER_TYPE" />
|
||||
|
||||
<application
|
||||
android:label="@string/app_label"
|
||||
|
||||
@@ -149,7 +149,6 @@ import java.util.Locale;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
|
||||
import javax.microedition.khronos.egl.EGL10;
|
||||
import javax.microedition.khronos.egl.EGLConfig;
|
||||
@@ -607,15 +606,7 @@ final class ActivityManagerShellCommand extends ShellCommand {
|
||||
return 1;
|
||||
}
|
||||
|
||||
AtomicReference<String> mimeType = new AtomicReference<>(intent.getType());
|
||||
|
||||
if (mimeType.get() == null && intent.getData() != null
|
||||
&& "content".equals(intent.getData().getScheme())) {
|
||||
mInterface.getMimeTypeFilterAsync(intent.getData(), mUserId,
|
||||
new RemoteCallback(result -> {
|
||||
mimeType.set(result.getPairValue());
|
||||
}));
|
||||
}
|
||||
final String mimeType = intent.resolveType(mInternal.mContext);
|
||||
|
||||
do {
|
||||
if (mStopOption) {
|
||||
@@ -627,7 +618,7 @@ final class ActivityManagerShellCommand extends ShellCommand {
|
||||
int userIdForQuery = mInternal.mUserController.handleIncomingUser(
|
||||
Binder.getCallingPid(), Binder.getCallingUid(), mUserId, false,
|
||||
ALLOW_NON_FULL, "ActivityManagerShellCommand", null);
|
||||
List<ResolveInfo> activities = mPm.queryIntentActivities(intent, mimeType.get(),
|
||||
List<ResolveInfo> activities = mPm.queryIntentActivities(intent, mimeType,
|
||||
0, userIdForQuery).getList();
|
||||
if (activities == null || activities.size() <= 0) {
|
||||
getErrPrintWriter().println("Error: Intent does not match any activities: "
|
||||
@@ -724,12 +715,12 @@ final class ActivityManagerShellCommand extends ShellCommand {
|
||||
}
|
||||
if (mWaitOption) {
|
||||
result = mInternal.startActivityAndWait(null, SHELL_PACKAGE_NAME, null, intent,
|
||||
mimeType.get(), null, null, 0, mStartFlags, profilerInfo,
|
||||
mimeType, null, null, 0, mStartFlags, profilerInfo,
|
||||
options != null ? options.toBundle() : null, mUserId);
|
||||
res = result.result;
|
||||
} else {
|
||||
res = mInternal.startActivityAsUserWithFeature(null, SHELL_PACKAGE_NAME, null,
|
||||
intent, mimeType.get(), null, null, 0, mStartFlags, profilerInfo,
|
||||
intent, mimeType, null, null, 0, mStartFlags, profilerInfo,
|
||||
options != null ? options.toBundle() : null, mUserId);
|
||||
}
|
||||
final long endTime = SystemClock.uptimeMillis();
|
||||
|
||||
Reference in New Issue
Block a user