Merge "Fix issue #2538228: Intents targeting browsers constantly nagging" into froyo

This commit is contained in:
Dianne Hackborn
2010-03-26 18:06:52 -07:00
committed by Android (Google) Code Review
2 changed files with 79 additions and 24 deletions

View File

@@ -154,6 +154,42 @@ public class Am {
} else if (opt.equals("-f")) { } else if (opt.equals("-f")) {
String str = nextArgRequired(); String str = nextArgRequired();
intent.setFlags(Integer.decode(str).intValue()); intent.setFlags(Integer.decode(str).intValue());
} else if (opt.equals("--grant-read-uri-permission")) {
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
} else if (opt.equals("--grant-write-uri-permission")) {
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
} else if (opt.equals("--debug-log-resolution")) {
intent.addFlags(Intent.FLAG_DEBUG_LOG_RESOLUTION);
} else if (opt.equals("--activity-brought-to-front")) {
intent.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
} else if (opt.equals("--activity-clear-top")) {
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
} else if (opt.equals("--activity-clear-when-task-reset")) {
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
} else if (opt.equals("--activity-exclude-from-recents")) {
intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
} else if (opt.equals("--activity-launched-from-history")) {
intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY);
} else if (opt.equals("--activity-multiple-task")) {
intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
} else if (opt.equals("--activity-no-animation")) {
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
} else if (opt.equals("--activity-no-history")) {
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
} else if (opt.equals("--activity-no-user-action")) {
intent.addFlags(Intent.FLAG_ACTIVITY_NO_USER_ACTION);
} else if (opt.equals("--activity-previous-is-top")) {
intent.addFlags(Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP);
} else if (opt.equals("--activity-reorder-to-front")) {
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
} else if (opt.equals("--activity-reset-task-if-needed")) {
intent.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
} else if (opt.equals("--activity-single-top")) {
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
} else if (opt.equals("--receiver-registered-only")) {
intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
} else if (opt.equals("--receiver-replace-pending")) {
intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING);
} else if (opt.equals("-D")) { } else if (opt.equals("-D")) {
mDebugOption = true; mDebugOption = true;
} else if (opt.equals("-W")) { } else if (opt.equals("-W")) {
@@ -565,7 +601,18 @@ public class Am {
" [--esn <EXTRA_KEY> ...]\n" + " [--esn <EXTRA_KEY> ...]\n" +
" [--ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE> ...]\n" + " [--ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE> ...]\n" +
" [-e|--ei <EXTRA_KEY> <EXTRA_INT_VALUE> ...]\n" + " [-e|--ei <EXTRA_KEY> <EXTRA_INT_VALUE> ...]\n" +
" [-n <COMPONENT>] [-f <FLAGS>] [<URI>]\n" " [-n <COMPONENT>] [-f <FLAGS>]\n" +
" [--grant-read-uri-permission] [--grant-write-uri-permission]\n" +
" [--debug-log-resolution]\n" +
" [--activity-brought-to-front] [--activity-clear-top]\n" +
" [--activity-clear-when-task-reset] [--activity-exclude-from-recents]\n" +
" [--activity-launched-from-history] [--activity-multiple-task]\n" +
" [--activity-no-animation] [--activity-no-history]\n" +
" [--activity-no-user-action] [--activity-previous-is-top]\n" +
" [--activity-reorder-to-front] [--activity-reset-task-if-needed]\n" +
" [--activity-single-top]\n" +
" [--receiver-registered-only] [--receiver-replace-pending]\n" +
" [<URI>]\n"
); );
} }
} }

View File

@@ -133,31 +133,39 @@ public class ResolverActivity extends AlertActivity implements
filter = null; filter = null;
} }
} }
} else if (data != null && data.getScheme() != null) { }
filter.addDataScheme(data.getScheme()); if (data != null && data.getScheme() != null) {
// We need the data specification if there was no type,
// Look through the resolved filter to determine which part // OR if the scheme is not one of our magical "file:"
// of it matched the original Intent. // or "content:" schemes (see IntentFilter for the reason).
Iterator<IntentFilter.AuthorityEntry> aIt = ri.filter.authoritiesIterator(); if (cat != IntentFilter.MATCH_CATEGORY_TYPE
if (aIt != null) { || (!"file".equals(data.getScheme())
while (aIt.hasNext()) { && !"content".equals(data.getScheme()))) {
IntentFilter.AuthorityEntry a = aIt.next(); filter.addDataScheme(data.getScheme());
if (a.match(data) >= 0) {
int port = a.getPort(); // Look through the resolved filter to determine which part
filter.addDataAuthority(a.getHost(), // of it matched the original Intent.
port >= 0 ? Integer.toString(port) : null); Iterator<IntentFilter.AuthorityEntry> aIt = ri.filter.authoritiesIterator();
break; if (aIt != null) {
while (aIt.hasNext()) {
IntentFilter.AuthorityEntry a = aIt.next();
if (a.match(data) >= 0) {
int port = a.getPort();
filter.addDataAuthority(a.getHost(),
port >= 0 ? Integer.toString(port) : null);
break;
}
} }
} }
} Iterator<PatternMatcher> pIt = ri.filter.pathsIterator();
Iterator<PatternMatcher> pIt = ri.filter.pathsIterator(); if (pIt != null) {
if (pIt != null) { String path = data.getPath();
String path = data.getPath(); while (path != null && pIt.hasNext()) {
while (path != null && pIt.hasNext()) { PatternMatcher p = pIt.next();
PatternMatcher p = pIt.next(); if (p.match(path)) {
if (p.match(path)) { filter.addDataPath(p.getPath(), p.getType());
filter.addDataPath(p.getPath(), p.getType()); break;
break; }
} }
} }
} }