Merge "Relax auto-launch checks for GET_CONTENT." into mnc-dr-dev

This commit is contained in:
Jeff Sharkey
2015-09-30 16:22:17 +00:00
committed by Android (Google) Code Review
3 changed files with 31 additions and 11 deletions

View File

@@ -130,6 +130,9 @@ public final class DocumentsContract {
*/
private static final int THUMBNAIL_BUFFER_SIZE = (int) (128 * KB_IN_BYTES);
/** {@hide} */
public static final String PACKAGE_DOCUMENTS_UI = "com.android.documentsui";
/**
* Constants related to a document, including {@link Cursor} column names
* and flags.

View File

@@ -40,6 +40,7 @@ import android.os.RemoteException;
import android.os.ResultReceiver;
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.DocumentsContract;
import android.service.chooser.ChooserTarget;
import android.service.chooser.ChooserTargetService;
import android.service.chooser.IChooserTargetResult;
@@ -269,7 +270,20 @@ public class ChooserActivity extends ResolverActivity {
}
@Override
boolean shouldAutoLaunchSingleChoice() {
boolean shouldAutoLaunchSingleChoice(TargetInfo target) {
final Intent intent = target.getResolvedIntent();
final ResolveInfo resolve = target.getResolveInfo();
// When GET_CONTENT is handled by the DocumentsUI system component,
// we're okay automatically launching it, since it offers it's own
// intent disambiguation UI.
if (intent != null && Intent.ACTION_GET_CONTENT.equals(intent.getAction())
&& resolve != null && resolve.priority > 0
&& resolve.activityInfo != null && DocumentsContract.PACKAGE_DOCUMENTS_UI
.equals(resolve.activityInfo.packageName)) {
return true;
}
return false;
}

View File

@@ -796,7 +796,7 @@ public class ResolverActivity extends Activity {
return false;
}
boolean shouldAutoLaunchSingleChoice() {
boolean shouldAutoLaunchSingleChoice(TargetInfo target) {
return true;
}
@@ -837,18 +837,21 @@ public class ResolverActivity extends Activity {
mAlwaysUseOption = alwaysUseOption;
int count = mAdapter.getUnfilteredCount();
if ((!shouldAutoLaunchSingleChoice() && count > 0)
|| count > 1
|| (count == 1 && mAdapter.getOtherProfile() != null)) {
if (count == 1 && mAdapter.getOtherProfile() == null) {
// Only one target, so we're a candidate to auto-launch!
final TargetInfo target = mAdapter.targetInfoForPosition(0, false);
if (shouldAutoLaunchSingleChoice(target)) {
safelyStartActivity(target);
mPackageMonitor.unregister();
mRegistered = false;
finish();
return true;
}
}
if (count > 0) {
setContentView(layoutId);
mAdapterView = (AbsListView) findViewById(R.id.resolver_list);
onPrepareAdapterView(mAdapterView, mAdapter, alwaysUseOption);
} else if (count == 1) {
safelyStartActivity(mAdapter.targetInfoForPosition(0, false));
mPackageMonitor.unregister();
mRegistered = false;
finish();
return true;
} else {
setContentView(R.layout.resolver_list);