代码路径:frameworks/base/core/java/com/android/internal/app/ResolverActivity.java
protected boolean rebuildList() {
List<ResolvedComponentInfo> currentResolveList = null;
// Clear the value of mOtherProfile from previous call.
mOtherProfile = null;
mLastChosen = null;
mLastChosenPosition = -1;
mDisplayList.clear();
if (mBaseResolveList != null) {
currentResolveList = mUnfilteredResolveList = new ArrayList<>();
mResolverListController.addResolveListDedupe(currentResolveList,
getTargetIntent(),
mBaseResolveList);
} else {
currentResolveList = mUnfilteredResolveList =
mResolverListController.getResolversForIntent(shouldGetResolvedFilter(),
shouldGetActivityMetadata(),
mIntents);
if (currentResolveList == null) {
processSortedList(currentResolveList);
return true;
}
List<ResolvedComponentInfo> originalList =
mResolverListController.filterIneligibleActivities(currentResolveList,
true);
if (originalList != null) {
mUnfilteredResolveList = originalList;
}
}
// So far we only support a single other profile at a time.
// The first one we see gets special treatment.
for (ResolvedComponentInfo info : currentResolveList) {
//add
//android.util.Log.d("mh.mmi", "info.getResolveInfoAt(0):"+info.getResolveInfoAt(0).toString()+" intent:"+info.getIntentAt(0).getAction());
if (info.getResolveInfoAt(0).activityInfo.packageName.equals("com.android.music")) {
currentResolveList.remove(info);
break;
}
//add
if (info.getResolveInfoAt(0).targetUserId != UserHandle.USER_CURRENT) {
mOtherProfile = new DisplayResolveInfo(info.getIntentAt(0),
info.getResolveInfoAt(0),
info.getResolveInfoAt(0).loadLabel(mPm),
info.getResolveInfoAt(0).loadLabel(mPm),
getReplacementIntent(info.getResolveInfoAt(0).activityInfo,
info.getIntentAt(0)));
currentResolveList.remove(info);
break;
}
}