Loading services/core/java/com/android/server/pm/PreferredComponent.java +31 −0 Original line number Diff line number Diff line Loading @@ -254,6 +254,37 @@ public class PreferredComponent { return numMatch == NS; } public boolean sameSet(PreferredComponent pc) { if (mSetPackages == null || pc == null || pc.mSetPackages == null || !sameComponent(pc.mComponent)) { return false; } final int otherPackageCount = pc.mSetPackages.length; final int packageCount = mSetPackages.length; if (otherPackageCount != packageCount) { return false; } for (int i = 0; i < packageCount; i++) { if (!mSetPackages[i].equals(pc.mSetPackages[i]) || !mSetClasses[i].equals(pc.mSetClasses[i])) { return false; } } return true; } /** Returns true if the preferred component represents the provided ComponentName. */ private boolean sameComponent(ComponentName comp) { if (mComponent == null || comp == null) { return false; } if (mComponent.getPackageName().equals(comp.getPackageName()) && mComponent.getClassName().equals(comp.getClassName())) { return true; } return false; } public boolean isSuperset(List<ResolveInfo> query, boolean excludeSetupWizardPackage) { if (mSetPackages == null) { return query == null; Loading services/core/java/com/android/server/pm/PreferredIntentResolver.java +21 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.content.IntentFilter; import java.io.PrintWriter; import com.android.server.IntentResolver; import java.util.ArrayList; public class PreferredIntentResolver extends IntentResolver<PreferredActivity, PreferredActivity> { Loading @@ -45,4 +46,24 @@ public class PreferredIntentResolver protected IntentFilter getIntentFilter(@NonNull PreferredActivity input) { return input; } public boolean shouldAddPreferredActivity(PreferredActivity pa) { ArrayList<PreferredActivity> pal = findFilters(pa); if (pal == null || pal.isEmpty()) { return true; } if (!pa.mPref.mAlways) { return false; } final int activityCount = pal.size(); for (int i = 0; i < activityCount; i++) { PreferredActivity cur = pal.get(i); if (cur.mPref.mAlways && cur.mPref.mMatch == (pa.mPref.mMatch & IntentFilter.MATCH_CATEGORY_MASK) && cur.mPref.sameSet(pa.mPref)) { return false; } } return true; } } services/core/java/com/android/server/pm/Settings.java +1 −2 Original line number Diff line number Diff line Loading @@ -1410,8 +1410,7 @@ public final class Settings { PreferredActivity pa = new PreferredActivity(parser); if (pa.mPref.getParseError() == null) { final PreferredIntentResolver resolver = editPreferredActivitiesLPw(userId); ArrayList<PreferredActivity> pal = resolver.findFilters(pa); if (pal == null || pal.size() == 0 || pa.mPref.mAlways) { if (resolver.shouldAddPreferredActivity(pa)) { resolver.addFilter(pa); } } else { Loading Loading
services/core/java/com/android/server/pm/PreferredComponent.java +31 −0 Original line number Diff line number Diff line Loading @@ -254,6 +254,37 @@ public class PreferredComponent { return numMatch == NS; } public boolean sameSet(PreferredComponent pc) { if (mSetPackages == null || pc == null || pc.mSetPackages == null || !sameComponent(pc.mComponent)) { return false; } final int otherPackageCount = pc.mSetPackages.length; final int packageCount = mSetPackages.length; if (otherPackageCount != packageCount) { return false; } for (int i = 0; i < packageCount; i++) { if (!mSetPackages[i].equals(pc.mSetPackages[i]) || !mSetClasses[i].equals(pc.mSetClasses[i])) { return false; } } return true; } /** Returns true if the preferred component represents the provided ComponentName. */ private boolean sameComponent(ComponentName comp) { if (mComponent == null || comp == null) { return false; } if (mComponent.getPackageName().equals(comp.getPackageName()) && mComponent.getClassName().equals(comp.getClassName())) { return true; } return false; } public boolean isSuperset(List<ResolveInfo> query, boolean excludeSetupWizardPackage) { if (mSetPackages == null) { return query == null; Loading
services/core/java/com/android/server/pm/PreferredIntentResolver.java +21 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.content.IntentFilter; import java.io.PrintWriter; import com.android.server.IntentResolver; import java.util.ArrayList; public class PreferredIntentResolver extends IntentResolver<PreferredActivity, PreferredActivity> { Loading @@ -45,4 +46,24 @@ public class PreferredIntentResolver protected IntentFilter getIntentFilter(@NonNull PreferredActivity input) { return input; } public boolean shouldAddPreferredActivity(PreferredActivity pa) { ArrayList<PreferredActivity> pal = findFilters(pa); if (pal == null || pal.isEmpty()) { return true; } if (!pa.mPref.mAlways) { return false; } final int activityCount = pal.size(); for (int i = 0; i < activityCount; i++) { PreferredActivity cur = pal.get(i); if (cur.mPref.mAlways && cur.mPref.mMatch == (pa.mPref.mMatch & IntentFilter.MATCH_CATEGORY_MASK) && cur.mPref.sameSet(pa.mPref)) { return false; } } return true; } }
services/core/java/com/android/server/pm/Settings.java +1 −2 Original line number Diff line number Diff line Loading @@ -1410,8 +1410,7 @@ public final class Settings { PreferredActivity pa = new PreferredActivity(parser); if (pa.mPref.getParseError() == null) { final PreferredIntentResolver resolver = editPreferredActivitiesLPw(userId); ArrayList<PreferredActivity> pal = resolver.findFilters(pa); if (pal == null || pal.size() == 0 || pa.mPref.mAlways) { if (resolver.shouldAddPreferredActivity(pa)) { resolver.addFilter(pa); } } else { Loading