Loading services/java/com/android/server/IntentResolver.java +11 −8 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.server; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.HashSet; Loading Loading @@ -248,26 +249,28 @@ public abstract class IntentResolver<F extends IntentFilter, R extends Object> { // Not a wild card, so we can just look for all filters that // completely match or wildcards whose base type matches. firstTypeCut = mTypeToFilter.get(resolvedType); if (debug) Slog.v(TAG, "First type cut: " + firstTypeCut); if (debug) Slog.v(TAG, "First type cut: " + Arrays.toString(firstTypeCut)); secondTypeCut = mWildTypeToFilter.get(baseType); if (debug) Slog.v(TAG, "Second type cut: " + secondTypeCut); if (debug) Slog.v(TAG, "Second type cut: " + Arrays.toString(secondTypeCut)); } else { // We can match anything with our base type. firstTypeCut = mBaseTypeToFilter.get(baseType); if (debug) Slog.v(TAG, "First type cut: " + firstTypeCut); if (debug) Slog.v(TAG, "First type cut: " + Arrays.toString(firstTypeCut)); secondTypeCut = mWildTypeToFilter.get(baseType); if (debug) Slog.v(TAG, "Second type cut: " + secondTypeCut); if (debug) Slog.v(TAG, "Second type cut: " + Arrays.toString(secondTypeCut)); } // Any */* types always apply, but we only need to do this // if the intent type was not already */*. thirdTypeCut = mWildTypeToFilter.get("*"); if (debug) Slog.v(TAG, "Third type cut: " + thirdTypeCut); if (debug) Slog.v(TAG, "Third type cut: " + Arrays.toString(thirdTypeCut)); } else if (intent.getAction() != null) { // The intent specified any type ({@literal *}/*). This // can be a whole heck of a lot of things, so as a first // cut let's use the action instead. firstTypeCut = mTypedActionToFilter.get(intent.getAction()); if (debug) Slog.v(TAG, "Typed Action list: " + firstTypeCut); if (debug) Slog.v(TAG, "Typed Action list: " + Arrays.toString(firstTypeCut)); } } } Loading @@ -277,7 +280,7 @@ public abstract class IntentResolver<F extends IntentFilter, R extends Object> { // on the authority and path by directly matching each resulting filter). if (scheme != null) { schemeCut = mSchemeToFilter.get(scheme); if (debug) Slog.v(TAG, "Scheme list: " + schemeCut); if (debug) Slog.v(TAG, "Scheme list: " + Arrays.toString(schemeCut)); } // If the intent does not specify any data -- either a MIME type or Loading @@ -285,7 +288,7 @@ public abstract class IntentResolver<F extends IntentFilter, R extends Object> { // data. if (resolvedType == null && scheme == null && intent.getAction() != null) { firstTypeCut = mActionToFilter.get(intent.getAction()); if (debug) Slog.v(TAG, "Action list: " + firstTypeCut); if (debug) Slog.v(TAG, "Action list: " + Arrays.toString(firstTypeCut)); } FastImmutableArraySet<String> categories = getFastIntentCategories(intent); Loading services/java/com/android/server/am/ActivityManagerService.java +9 −0 Original line number Diff line number Diff line Loading @@ -3028,6 +3028,8 @@ public final class ActivityManagerService extends ActivityManagerNative // And we are resetting to find the next component... intent.setComponent(null); final boolean debug = ((intent.getFlags() & Intent.FLAG_DEBUG_LOG_RESOLUTION) != 0); ActivityInfo aInfo = null; try { List<ResolveInfo> resolves = Loading @@ -3048,6 +3050,12 @@ public final class ActivityManagerService extends ActivityManagerNative if (i<N) { aInfo = resolves.get(i).activityInfo; } if (debug) { Slog.v(TAG, "Next matching activity: found current " + r.packageName + "/" + r.info.name); Slog.v(TAG, "Next matching activity: next is " + aInfo.packageName + "/" + aInfo.name); } break; } } Loading @@ -3057,6 +3065,7 @@ public final class ActivityManagerService extends ActivityManagerNative if (aInfo == null) { // Nobody who is next! ActivityOptions.abort(options); if (debug) Slog.d(TAG, "Next matching activity: nothing found"); return false; } Loading services/java/com/android/server/pm/PackageManagerService.java +29 −33 Original line number Diff line number Diff line Loading @@ -2616,7 +2616,7 @@ public class PackageManagerService extends IPackageManager.Stub { List<ResolveInfo> query = queryIntentActivities(intent, resolvedType, flags, userId); // Find any earlier preferred or last chosen entries and nuke them findPreferredActivity(intent, resolvedType, flags, query, 0, false, true, userId); flags, query, 0, false, true, false, userId); // Add the new activity as the last chosen for this filter addPreferredActivityInternal(filter, match, null, activity, false, userId); } Loading @@ -2627,7 +2627,7 @@ public class PackageManagerService extends IPackageManager.Stub { if (DEBUG_PREFERRED) Log.v(TAG, "Querying last chosen activity for " + intent); List<ResolveInfo> query = queryIntentActivities(intent, resolvedType, flags, userId); return findPreferredActivity(intent, resolvedType, flags, query, 0, false, false, userId); false, false, false, userId); } private ResolveInfo chooseBestActivity(Intent intent, String resolvedType, Loading @@ -2637,12 +2637,13 @@ public class PackageManagerService extends IPackageManager.Stub { if (N == 1) { return query.get(0); } else if (N > 1) { final boolean debug = ((intent.getFlags() & Intent.FLAG_DEBUG_LOG_RESOLUTION) != 0); // If there is more than one activity with the same priority, // then let the user decide between them. ResolveInfo r0 = query.get(0); ResolveInfo r1 = query.get(1); if (DEBUG_INTENT_MATCHING) { Log.d(TAG, r0.activityInfo.name + "=" + r0.priority + " vs " if (DEBUG_INTENT_MATCHING || debug) { Slog.v(TAG, r0.activityInfo.name + "=" + r0.priority + " vs " + r1.activityInfo.name + "=" + r1.priority); } // If the first activity has a higher priority, or a different Loading @@ -2655,7 +2656,7 @@ public class PackageManagerService extends IPackageManager.Stub { // If we have saved a preference for a preferred activity for // this Intent, use that. ResolveInfo ri = findPreferredActivity(intent, resolvedType, flags, query, r0.priority, true, false, userId); flags, query, r0.priority, true, false, debug, userId); if (ri != null) { return ri; } Loading @@ -2676,7 +2677,7 @@ public class PackageManagerService extends IPackageManager.Stub { ResolveInfo findPreferredActivity(Intent intent, String resolvedType, int flags, List<ResolveInfo> query, int priority, boolean always, boolean removeMatches, int userId) { boolean removeMatches, boolean debug, int userId) { if (!sUserManager.exists(userId)) return null; // writer synchronized (mPackages) { Loading @@ -2686,6 +2687,7 @@ public class PackageManagerService extends IPackageManager.Stub { if (DEBUG_PREFERRED) intent.addFlags(Intent.FLAG_DEBUG_LOG_RESOLUTION); PreferredIntentResolver pir = mSettings.mPreferredActivities.get(userId); // Get the list of preferred activities that handle the intent if (DEBUG_PREFERRED || debug) Slog.v(TAG, "Looking for preferred activities..."); List<PreferredActivity> prefs = pir != null ? pir.queryIntent(intent, resolvedType, (flags & PackageManager.MATCH_DEFAULT_ONLY) != 0, userId) Loading @@ -2696,59 +2698,50 @@ public class PackageManagerService extends IPackageManager.Stub { // from the same match quality. int match = 0; if (DEBUG_PREFERRED) { Log.v(TAG, "Figuring out best match..."); } if (DEBUG_PREFERRED || debug) Slog.v(TAG, "Figuring out best match..."); final int N = query.size(); for (int j=0; j<N; j++) { final ResolveInfo ri = query.get(j); if (DEBUG_PREFERRED) { Log.v(TAG, "Match for " + ri.activityInfo + ": 0x" + Integer.toHexString(match)); } if (DEBUG_PREFERRED || debug) Slog.v(TAG, "Match for " + ri.activityInfo + ": 0x" + Integer.toHexString(match)); if (ri.match > match) { match = ri.match; } } if (DEBUG_PREFERRED) { Log.v(TAG, "Best match: 0x" + Integer.toHexString(match)); } if (DEBUG_PREFERRED || debug) Slog.v(TAG, "Best match: 0x" + Integer.toHexString(match)); match &= IntentFilter.MATCH_CATEGORY_MASK; final int M = prefs.size(); for (int i=0; i<M; i++) { final PreferredActivity pa = prefs.get(i); if (DEBUG_PREFERRED) { Log.v(TAG, "Checking PreferredActivity ds=" if (DEBUG_PREFERRED || debug) { Slog.v(TAG, "Checking PreferredActivity ds=" + (pa.countDataSchemes() > 0 ? pa.getDataScheme(0) : "<none>") + "\n component=" + pa.mPref.mComponent); pa.dump(new PrintStreamPrinter(System.out), " "); pa.dump(new LogPrinter(Log.VERBOSE, TAG, Log.LOG_ID_SYSTEM), " "); } if (pa.mPref.mMatch != match) { if (DEBUG_PREFERRED) { Log.v(TAG, "Skipping bad match " if (DEBUG_PREFERRED || debug) Slog.v(TAG, "Skipping bad match " + Integer.toHexString(pa.mPref.mMatch)); } continue; } // If it's not an "always" type preferred activity and that's what we're // looking for, skip it. if (always && !pa.mPref.mAlways) { if (DEBUG_PREFERRED) { Log.v(TAG, "Skipping lastChosen entry"); } if (DEBUG_PREFERRED || debug) Slog.v(TAG, "Skipping mAlways=false entry"); continue; } final ActivityInfo ai = getActivityInfo(pa.mPref.mComponent, flags | PackageManager.GET_DISABLED_COMPONENTS, userId); if (DEBUG_PREFERRED) { Log.v(TAG, "Got preferred activity:"); if (DEBUG_PREFERRED || debug) { Slog.v(TAG, "Found preferred activity:"); if (ai != null) { ai.dump(new LogPrinter(Log.VERBOSE, TAG), " "); ai.dump(new LogPrinter(Log.VERBOSE, TAG, Log.LOG_ID_SYSTEM), " "); } else { Log.v(TAG, " null"); Slog.v(TAG, " null"); } } if (ai == null) { Loading @@ -2775,7 +2768,7 @@ public class PackageManagerService extends IPackageManager.Stub { if (removeMatches) { pir.removeFilter(pa); if (DEBUG_PREFERRED) { Log.v(TAG, "Removing match " + pa.mPref.mComponent); Slog.v(TAG, "Removing match " + pa.mPref.mComponent); } break; } Loading @@ -2788,7 +2781,7 @@ public class PackageManagerService extends IPackageManager.Stub { Slog.i(TAG, "Result set changed, dropping preferred activity for " + intent + " type " + resolvedType); if (DEBUG_PREFERRED) { Log.v(TAG, "Removing preferred activity since set changed " Slog.v(TAG, "Removing preferred activity since set changed " + pa.mPref.mComponent); } pir.removeFilter(pa); Loading @@ -2801,6 +2794,8 @@ public class PackageManagerService extends IPackageManager.Stub { } // Yay! Either the set matched or we're looking for the last chosen if (DEBUG_PREFERRED || debug) Slog.v(TAG, "Returning preferred activity: " + ri.activityInfo.packageName + "/" + ri.activityInfo.name); mSettings.writePackageRestrictionsLPr(userId); return ri; } Loading @@ -2808,6 +2803,7 @@ public class PackageManagerService extends IPackageManager.Stub { } mSettings.writePackageRestrictionsLPr(userId); } if (DEBUG_PREFERRED || debug) Slog.v(TAG, "No preferred activity to return"); return null; } Loading Loading @@ -9886,7 +9882,7 @@ public class PackageManagerService extends IPackageManager.Stub { List<ResolveInfo> list = queryIntentActivities(intent, null, PackageManager.GET_META_DATA, callingUserId); ResolveInfo preferred = findPreferredActivity(intent, null, 0, list, 0, true, false, callingUserId); true, false, false, callingUserId); allHomeCandidates.clear(); if (list != null) { Loading services/java/com/android/server/pm/PreferredActivity.java +6 −0 Original line number Diff line number Diff line Loading @@ -71,4 +71,10 @@ class PreferredActivity extends IntentFilter implements PreferredComponent.Callb } return true; } @Override public String toString() { return "PreferredActivity{0x" + Integer.toHexString(System.identityHashCode(this)) + " " + mPref.mComponent.flattenToShortString() + "}"; } } Loading
services/java/com/android/server/IntentResolver.java +11 −8 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.server; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.HashSet; Loading Loading @@ -248,26 +249,28 @@ public abstract class IntentResolver<F extends IntentFilter, R extends Object> { // Not a wild card, so we can just look for all filters that // completely match or wildcards whose base type matches. firstTypeCut = mTypeToFilter.get(resolvedType); if (debug) Slog.v(TAG, "First type cut: " + firstTypeCut); if (debug) Slog.v(TAG, "First type cut: " + Arrays.toString(firstTypeCut)); secondTypeCut = mWildTypeToFilter.get(baseType); if (debug) Slog.v(TAG, "Second type cut: " + secondTypeCut); if (debug) Slog.v(TAG, "Second type cut: " + Arrays.toString(secondTypeCut)); } else { // We can match anything with our base type. firstTypeCut = mBaseTypeToFilter.get(baseType); if (debug) Slog.v(TAG, "First type cut: " + firstTypeCut); if (debug) Slog.v(TAG, "First type cut: " + Arrays.toString(firstTypeCut)); secondTypeCut = mWildTypeToFilter.get(baseType); if (debug) Slog.v(TAG, "Second type cut: " + secondTypeCut); if (debug) Slog.v(TAG, "Second type cut: " + Arrays.toString(secondTypeCut)); } // Any */* types always apply, but we only need to do this // if the intent type was not already */*. thirdTypeCut = mWildTypeToFilter.get("*"); if (debug) Slog.v(TAG, "Third type cut: " + thirdTypeCut); if (debug) Slog.v(TAG, "Third type cut: " + Arrays.toString(thirdTypeCut)); } else if (intent.getAction() != null) { // The intent specified any type ({@literal *}/*). This // can be a whole heck of a lot of things, so as a first // cut let's use the action instead. firstTypeCut = mTypedActionToFilter.get(intent.getAction()); if (debug) Slog.v(TAG, "Typed Action list: " + firstTypeCut); if (debug) Slog.v(TAG, "Typed Action list: " + Arrays.toString(firstTypeCut)); } } } Loading @@ -277,7 +280,7 @@ public abstract class IntentResolver<F extends IntentFilter, R extends Object> { // on the authority and path by directly matching each resulting filter). if (scheme != null) { schemeCut = mSchemeToFilter.get(scheme); if (debug) Slog.v(TAG, "Scheme list: " + schemeCut); if (debug) Slog.v(TAG, "Scheme list: " + Arrays.toString(schemeCut)); } // If the intent does not specify any data -- either a MIME type or Loading @@ -285,7 +288,7 @@ public abstract class IntentResolver<F extends IntentFilter, R extends Object> { // data. if (resolvedType == null && scheme == null && intent.getAction() != null) { firstTypeCut = mActionToFilter.get(intent.getAction()); if (debug) Slog.v(TAG, "Action list: " + firstTypeCut); if (debug) Slog.v(TAG, "Action list: " + Arrays.toString(firstTypeCut)); } FastImmutableArraySet<String> categories = getFastIntentCategories(intent); Loading
services/java/com/android/server/am/ActivityManagerService.java +9 −0 Original line number Diff line number Diff line Loading @@ -3028,6 +3028,8 @@ public final class ActivityManagerService extends ActivityManagerNative // And we are resetting to find the next component... intent.setComponent(null); final boolean debug = ((intent.getFlags() & Intent.FLAG_DEBUG_LOG_RESOLUTION) != 0); ActivityInfo aInfo = null; try { List<ResolveInfo> resolves = Loading @@ -3048,6 +3050,12 @@ public final class ActivityManagerService extends ActivityManagerNative if (i<N) { aInfo = resolves.get(i).activityInfo; } if (debug) { Slog.v(TAG, "Next matching activity: found current " + r.packageName + "/" + r.info.name); Slog.v(TAG, "Next matching activity: next is " + aInfo.packageName + "/" + aInfo.name); } break; } } Loading @@ -3057,6 +3065,7 @@ public final class ActivityManagerService extends ActivityManagerNative if (aInfo == null) { // Nobody who is next! ActivityOptions.abort(options); if (debug) Slog.d(TAG, "Next matching activity: nothing found"); return false; } Loading
services/java/com/android/server/pm/PackageManagerService.java +29 −33 Original line number Diff line number Diff line Loading @@ -2616,7 +2616,7 @@ public class PackageManagerService extends IPackageManager.Stub { List<ResolveInfo> query = queryIntentActivities(intent, resolvedType, flags, userId); // Find any earlier preferred or last chosen entries and nuke them findPreferredActivity(intent, resolvedType, flags, query, 0, false, true, userId); flags, query, 0, false, true, false, userId); // Add the new activity as the last chosen for this filter addPreferredActivityInternal(filter, match, null, activity, false, userId); } Loading @@ -2627,7 +2627,7 @@ public class PackageManagerService extends IPackageManager.Stub { if (DEBUG_PREFERRED) Log.v(TAG, "Querying last chosen activity for " + intent); List<ResolveInfo> query = queryIntentActivities(intent, resolvedType, flags, userId); return findPreferredActivity(intent, resolvedType, flags, query, 0, false, false, userId); false, false, false, userId); } private ResolveInfo chooseBestActivity(Intent intent, String resolvedType, Loading @@ -2637,12 +2637,13 @@ public class PackageManagerService extends IPackageManager.Stub { if (N == 1) { return query.get(0); } else if (N > 1) { final boolean debug = ((intent.getFlags() & Intent.FLAG_DEBUG_LOG_RESOLUTION) != 0); // If there is more than one activity with the same priority, // then let the user decide between them. ResolveInfo r0 = query.get(0); ResolveInfo r1 = query.get(1); if (DEBUG_INTENT_MATCHING) { Log.d(TAG, r0.activityInfo.name + "=" + r0.priority + " vs " if (DEBUG_INTENT_MATCHING || debug) { Slog.v(TAG, r0.activityInfo.name + "=" + r0.priority + " vs " + r1.activityInfo.name + "=" + r1.priority); } // If the first activity has a higher priority, or a different Loading @@ -2655,7 +2656,7 @@ public class PackageManagerService extends IPackageManager.Stub { // If we have saved a preference for a preferred activity for // this Intent, use that. ResolveInfo ri = findPreferredActivity(intent, resolvedType, flags, query, r0.priority, true, false, userId); flags, query, r0.priority, true, false, debug, userId); if (ri != null) { return ri; } Loading @@ -2676,7 +2677,7 @@ public class PackageManagerService extends IPackageManager.Stub { ResolveInfo findPreferredActivity(Intent intent, String resolvedType, int flags, List<ResolveInfo> query, int priority, boolean always, boolean removeMatches, int userId) { boolean removeMatches, boolean debug, int userId) { if (!sUserManager.exists(userId)) return null; // writer synchronized (mPackages) { Loading @@ -2686,6 +2687,7 @@ public class PackageManagerService extends IPackageManager.Stub { if (DEBUG_PREFERRED) intent.addFlags(Intent.FLAG_DEBUG_LOG_RESOLUTION); PreferredIntentResolver pir = mSettings.mPreferredActivities.get(userId); // Get the list of preferred activities that handle the intent if (DEBUG_PREFERRED || debug) Slog.v(TAG, "Looking for preferred activities..."); List<PreferredActivity> prefs = pir != null ? pir.queryIntent(intent, resolvedType, (flags & PackageManager.MATCH_DEFAULT_ONLY) != 0, userId) Loading @@ -2696,59 +2698,50 @@ public class PackageManagerService extends IPackageManager.Stub { // from the same match quality. int match = 0; if (DEBUG_PREFERRED) { Log.v(TAG, "Figuring out best match..."); } if (DEBUG_PREFERRED || debug) Slog.v(TAG, "Figuring out best match..."); final int N = query.size(); for (int j=0; j<N; j++) { final ResolveInfo ri = query.get(j); if (DEBUG_PREFERRED) { Log.v(TAG, "Match for " + ri.activityInfo + ": 0x" + Integer.toHexString(match)); } if (DEBUG_PREFERRED || debug) Slog.v(TAG, "Match for " + ri.activityInfo + ": 0x" + Integer.toHexString(match)); if (ri.match > match) { match = ri.match; } } if (DEBUG_PREFERRED) { Log.v(TAG, "Best match: 0x" + Integer.toHexString(match)); } if (DEBUG_PREFERRED || debug) Slog.v(TAG, "Best match: 0x" + Integer.toHexString(match)); match &= IntentFilter.MATCH_CATEGORY_MASK; final int M = prefs.size(); for (int i=0; i<M; i++) { final PreferredActivity pa = prefs.get(i); if (DEBUG_PREFERRED) { Log.v(TAG, "Checking PreferredActivity ds=" if (DEBUG_PREFERRED || debug) { Slog.v(TAG, "Checking PreferredActivity ds=" + (pa.countDataSchemes() > 0 ? pa.getDataScheme(0) : "<none>") + "\n component=" + pa.mPref.mComponent); pa.dump(new PrintStreamPrinter(System.out), " "); pa.dump(new LogPrinter(Log.VERBOSE, TAG, Log.LOG_ID_SYSTEM), " "); } if (pa.mPref.mMatch != match) { if (DEBUG_PREFERRED) { Log.v(TAG, "Skipping bad match " if (DEBUG_PREFERRED || debug) Slog.v(TAG, "Skipping bad match " + Integer.toHexString(pa.mPref.mMatch)); } continue; } // If it's not an "always" type preferred activity and that's what we're // looking for, skip it. if (always && !pa.mPref.mAlways) { if (DEBUG_PREFERRED) { Log.v(TAG, "Skipping lastChosen entry"); } if (DEBUG_PREFERRED || debug) Slog.v(TAG, "Skipping mAlways=false entry"); continue; } final ActivityInfo ai = getActivityInfo(pa.mPref.mComponent, flags | PackageManager.GET_DISABLED_COMPONENTS, userId); if (DEBUG_PREFERRED) { Log.v(TAG, "Got preferred activity:"); if (DEBUG_PREFERRED || debug) { Slog.v(TAG, "Found preferred activity:"); if (ai != null) { ai.dump(new LogPrinter(Log.VERBOSE, TAG), " "); ai.dump(new LogPrinter(Log.VERBOSE, TAG, Log.LOG_ID_SYSTEM), " "); } else { Log.v(TAG, " null"); Slog.v(TAG, " null"); } } if (ai == null) { Loading @@ -2775,7 +2768,7 @@ public class PackageManagerService extends IPackageManager.Stub { if (removeMatches) { pir.removeFilter(pa); if (DEBUG_PREFERRED) { Log.v(TAG, "Removing match " + pa.mPref.mComponent); Slog.v(TAG, "Removing match " + pa.mPref.mComponent); } break; } Loading @@ -2788,7 +2781,7 @@ public class PackageManagerService extends IPackageManager.Stub { Slog.i(TAG, "Result set changed, dropping preferred activity for " + intent + " type " + resolvedType); if (DEBUG_PREFERRED) { Log.v(TAG, "Removing preferred activity since set changed " Slog.v(TAG, "Removing preferred activity since set changed " + pa.mPref.mComponent); } pir.removeFilter(pa); Loading @@ -2801,6 +2794,8 @@ public class PackageManagerService extends IPackageManager.Stub { } // Yay! Either the set matched or we're looking for the last chosen if (DEBUG_PREFERRED || debug) Slog.v(TAG, "Returning preferred activity: " + ri.activityInfo.packageName + "/" + ri.activityInfo.name); mSettings.writePackageRestrictionsLPr(userId); return ri; } Loading @@ -2808,6 +2803,7 @@ public class PackageManagerService extends IPackageManager.Stub { } mSettings.writePackageRestrictionsLPr(userId); } if (DEBUG_PREFERRED || debug) Slog.v(TAG, "No preferred activity to return"); return null; } Loading Loading @@ -9886,7 +9882,7 @@ public class PackageManagerService extends IPackageManager.Stub { List<ResolveInfo> list = queryIntentActivities(intent, null, PackageManager.GET_META_DATA, callingUserId); ResolveInfo preferred = findPreferredActivity(intent, null, 0, list, 0, true, false, callingUserId); true, false, false, callingUserId); allHomeCandidates.clear(); if (list != null) { Loading
services/java/com/android/server/pm/PreferredActivity.java +6 −0 Original line number Diff line number Diff line Loading @@ -71,4 +71,10 @@ class PreferredActivity extends IntentFilter implements PreferredComponent.Callb } return true; } @Override public String toString() { return "PreferredActivity{0x" + Integer.toHexString(System.identityHashCode(this)) + " " + mPref.mComponent.flattenToShortString() + "}"; } }