diff --git a/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/ApkSizeOption.java b/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/ApkSizeOption.java index b81c1f02eac..890708f9dca 100644 --- a/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/ApkSizeOption.java +++ b/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/ApkSizeOption.java @@ -11,7 +11,7 @@ public class ApkSizeOption extends FilterOption { private final Map mKeysWithType = new LinkedHashMap() {{ - put("all", TYPE_NONE); + put(KEY_ALL, TYPE_NONE); put("eq", TYPE_SIZE_BYTES); put("le", TYPE_SIZE_BYTES); put("ge", TYPE_SIZE_BYTES); diff --git a/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/AppLabelOption.java b/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/AppLabelOption.java index 2bf4a4736e2..4549f45b747 100644 --- a/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/AppLabelOption.java +++ b/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/AppLabelOption.java @@ -12,7 +12,7 @@ public class AppLabelOption extends FilterOption { private final Map mKeysWithType = new LinkedHashMap() {{ - put("all", TYPE_NONE); + put(KEY_ALL, TYPE_NONE); put("eq", TYPE_STR_SINGLE); put("contains", TYPE_STR_SINGLE); put("starts_with", TYPE_STR_SINGLE); diff --git a/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/BackupOption.java b/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/BackupOption.java index 3ca132565be..f1e6ec8b00a 100644 --- a/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/BackupOption.java +++ b/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/BackupOption.java @@ -32,6 +32,7 @@ public class BackupOption extends FilterOption { put("made_before", TYPE_TIME_MILLIS); put("made_after", TYPE_TIME_MILLIS); put("with_flags", TYPE_INT_FLAGS); + put("without_flags", TYPE_INT_FLAGS); }}; private final Map mBackupFlags = new LinkedHashMap() {{ @@ -56,7 +57,7 @@ public Map getKeysWithType() { @Override public Map getFlags(@NonNull String key) { - if (key.equals("with_flags")) { + if (key.equals("with_flags") || key.equals("without_flags")) { return mBackupFlags; } return super.getFlags(key); @@ -141,6 +142,16 @@ public TestResult test(@NonNull FilterableAppInfo info, @NonNull TestResult resu return result.setMatched(!matchedBackups.isEmpty()) .setMatchedBackups(matchedBackups); } + case "without_flags": { + List matchedBackups = new ArrayList<>(); + for (Backup backup : backups) { + if ((backup.flags & intValue) != intValue) { + matchedBackups.add(backup); + } + } + return result.setMatched(!matchedBackups.isEmpty()) + .setMatchedBackups(matchedBackups); + } } } } diff --git a/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/BloatwareOption.java b/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/BloatwareOption.java index fa58bb7b3dc..ac632bc1c07 100644 --- a/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/BloatwareOption.java +++ b/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/BloatwareOption.java @@ -67,7 +67,7 @@ public Map getFlags(@NonNull String key) { public TestResult test(@NonNull FilterableAppInfo info, @NonNull TestResult result) { DebloatObject object = info.getBloatwareInfo(); if (object == null) { - return result.setMatched(key.equals("all")); + return result.setMatched(key.equals(KEY_ALL)); } switch (key) { default: diff --git a/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/CacheSizeOption.java b/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/CacheSizeOption.java index e8f6c05de56..8265a394139 100644 --- a/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/CacheSizeOption.java +++ b/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/CacheSizeOption.java @@ -11,7 +11,7 @@ public class CacheSizeOption extends FilterOption { private final Map mKeysWithType = new LinkedHashMap() {{ - put("all", TYPE_NONE); + put(KEY_ALL, TYPE_NONE); put("eq", TYPE_SIZE_BYTES); put("le", TYPE_SIZE_BYTES); put("ge", TYPE_SIZE_BYTES); diff --git a/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/ComponentsOption.java b/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/ComponentsOption.java index d2fdebc0010..fe3a12434ea 100644 --- a/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/ComponentsOption.java +++ b/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/ComponentsOption.java @@ -21,6 +21,7 @@ public class ComponentsOption extends FilterOption { private final Map mKeysWithType = new LinkedHashMap() {{ put(KEY_ALL, TYPE_NONE); put("with_type", TYPE_INT_FLAGS); + put("without_type", TYPE_INT_FLAGS); put("eq", TYPE_STR_SINGLE); put("contains", TYPE_STR_SINGLE); put("starts_with", TYPE_STR_SINGLE); @@ -50,7 +51,7 @@ public Map getKeysWithType() { @Override public Map getFlags(@NonNull String key) { - if (key.equals("with_type")) { + if (key.equals("with_type") || key.equals("without_type")) { return mComponentTypeFlags; } return super.getFlags(key); @@ -76,6 +77,17 @@ public TestResult test(@NonNull FilterableAppInfo info, @NonNull TestResult resu return result.setMatched(!filteredComponents.isEmpty()) .setMatchedComponents(filteredComponents); } + case "without_type": { + Map filteredComponents = new LinkedHashMap<>(); + for (ComponentInfo component : components.keySet()) { + int type = Objects.requireNonNull(components.get(component)); + if ((intValue & type) == 0) { + filteredComponents.put(component, type); + } + } + return result.setMatched(filteredComponents.size() == components.size()) + .setMatchedComponents(filteredComponents); + } case "eq": { Map filteredComponents = new LinkedHashMap<>(); for (ComponentInfo component : components.keySet()) { diff --git a/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/DataSizeOption.java b/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/DataSizeOption.java index 9c980cfd367..3b8ea69f65f 100644 --- a/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/DataSizeOption.java +++ b/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/DataSizeOption.java @@ -11,7 +11,7 @@ public class DataSizeOption extends FilterOption { private final Map mKeysWithType = new LinkedHashMap() {{ - put("all", TYPE_NONE); + put(KEY_ALL, TYPE_NONE); put("eq", TYPE_SIZE_BYTES); put("le", TYPE_SIZE_BYTES); put("ge", TYPE_SIZE_BYTES); diff --git a/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/DataUsageOption.java b/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/DataUsageOption.java index 42c4fac894b..a4125e4c1bf 100644 --- a/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/DataUsageOption.java +++ b/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/DataUsageOption.java @@ -11,7 +11,7 @@ public class DataUsageOption extends FilterOption { private final Map mKeysWithType = new LinkedHashMap() {{ - put("all", TYPE_NONE); + put(KEY_ALL, TYPE_NONE); put("eq", TYPE_SIZE_BYTES); put("le", TYPE_SIZE_BYTES); put("ge", TYPE_SIZE_BYTES); diff --git a/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/FreezeOption.java b/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/FreezeOption.java index b8b5ca7651a..2795ec73f2e 100644 --- a/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/FreezeOption.java +++ b/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/FreezeOption.java @@ -21,6 +21,7 @@ public class FreezeOption extends FilterOption { put("frozen", TYPE_NONE); put("unfrozen", TYPE_NONE); put("with_flags", TYPE_INT_FLAGS); + put("without_flags", TYPE_INT_FLAGS); }}; private final Map mFrozenFlags = new LinkedHashMap() {{ @@ -43,7 +44,7 @@ public Map getKeysWithType() { @Override public Map getFlags(@NonNull String key) { - if (key.equals("with_flags")) { + if (key.equals("with_flags") || key.equals("without_flags")) { return mFrozenFlags; } return super.getFlags(key); @@ -65,6 +66,9 @@ public TestResult test(@NonNull FilterableAppInfo info, @NonNull TestResult resu case "with_flags": { return result.setMatched((freezeFlags & intValue) == intValue); } + case "without_flags": { + return result.setMatched((freezeFlags & intValue) != intValue); + } } } } diff --git a/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/InstalledOption.java b/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/InstalledOption.java index 0ddfc3a6581..d7518c07eda 100644 --- a/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/InstalledOption.java +++ b/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/InstalledOption.java @@ -11,7 +11,7 @@ public class InstalledOption extends FilterOption { private final Map mKeysWithType = new LinkedHashMap() {{ - put("all", TYPE_NONE); + put(KEY_ALL, TYPE_NONE); put("installed", TYPE_NONE); put("uninstalled", TYPE_NONE); put("installed_before", TYPE_TIME_MILLIS); diff --git a/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/InstallerOption.java b/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/InstallerOption.java index 2d60b50614b..4500a8563a5 100644 --- a/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/InstallerOption.java +++ b/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/InstallerOption.java @@ -14,7 +14,7 @@ public class InstallerOption extends FilterOption { private final Map mKeysWithType = new LinkedHashMap() {{ - put("all", TYPE_NONE); + put(KEY_ALL, TYPE_NONE); put("installer", TYPE_STR_SINGLE); put("installers", TYPE_STR_MULTIPLE); put("regex", TYPE_REGEX); @@ -62,7 +62,7 @@ public TestResult test(@NonNull FilterableAppInfo info, @NonNull TestResult resu } @NonNull - private static Set getInstallers(InstallSourceInfoCompat installSourceInfo) { + private static Set getInstallers(@NonNull InstallSourceInfoCompat installSourceInfo) { Set installers = new LinkedHashSet<>(); if (installSourceInfo.getInstallingPackageName() != null) { installers.add(installSourceInfo.getInstallingPackageName()); diff --git a/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/LastUpdateOption.java b/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/LastUpdateOption.java index 65852617eac..b51b9d35512 100644 --- a/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/LastUpdateOption.java +++ b/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/LastUpdateOption.java @@ -11,7 +11,7 @@ public class LastUpdateOption extends FilterOption { private final Map mKeysWithType = new LinkedHashMap() {{ - put("all", TYPE_NONE); + put(KEY_ALL, TYPE_NONE); put("before", TYPE_TIME_MILLIS); put("after", TYPE_TIME_MILLIS); }}; diff --git a/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/MinSdkOption.java b/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/MinSdkOption.java index 63d487dcb93..4d814f05c11 100644 --- a/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/MinSdkOption.java +++ b/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/MinSdkOption.java @@ -13,7 +13,7 @@ public class MinSdkOption extends FilterOption { private final Map mKeysWithType = new LinkedHashMap() {{ - put("all", TYPE_NONE); + put(KEY_ALL, TYPE_NONE); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { put("eq", TYPE_INT); put("le", TYPE_INT); diff --git a/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/PackageNameOption.java b/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/PackageNameOption.java index 95949f57dd6..7754edd5661 100644 --- a/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/PackageNameOption.java +++ b/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/PackageNameOption.java @@ -12,7 +12,7 @@ public class PackageNameOption extends FilterOption { private final Map mKeysWithType = new LinkedHashMap() {{ - put("all", TYPE_NONE); + put(KEY_ALL, TYPE_NONE); put("eq", TYPE_STR_SINGLE); put("contains", TYPE_STR_SINGLE); put("starts_with", TYPE_STR_SINGLE); diff --git a/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/RunningAppsOption.java b/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/RunningAppsOption.java index 46cf454d699..cdd0b965071 100644 --- a/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/RunningAppsOption.java +++ b/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/RunningAppsOption.java @@ -11,7 +11,7 @@ public class RunningAppsOption extends FilterOption { private final Map mKeysWithType = new LinkedHashMap() {{ - put("all", TYPE_NONE); + put(KEY_ALL, TYPE_NONE); put("running", TYPE_NONE); put("not_running", TYPE_NONE); }}; diff --git a/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/ScreenTimeOption.java b/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/ScreenTimeOption.java index 5d325361932..4a50770a55a 100644 --- a/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/ScreenTimeOption.java +++ b/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/ScreenTimeOption.java @@ -11,7 +11,7 @@ public class ScreenTimeOption extends FilterOption { private final Map mKeysWithType = new LinkedHashMap() {{ - put("all", TYPE_NONE); + put(KEY_ALL, TYPE_NONE); put("eq", TYPE_DURATION_MILLIS); put("le", TYPE_DURATION_MILLIS); put("ge", TYPE_DURATION_MILLIS); diff --git a/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/SignatureOption.java b/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/SignatureOption.java index 09d20c8b0c5..ce770ae447d 100644 --- a/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/SignatureOption.java +++ b/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/SignatureOption.java @@ -17,10 +17,12 @@ public class SignatureOption extends FilterOption { private final Map mKeysWithType = new LinkedHashMap() {{ - put("all", TYPE_NONE); + put(KEY_ALL, TYPE_NONE); put("no_signer", TYPE_NONE); - put("with_source_stamp", TYPE_NONE); put("with_lineage", TYPE_NONE); + put("with_source_stamp", TYPE_NONE); + put("without_lineage", TYPE_NONE); + put("without_source_stamp", TYPE_NONE); put("sub_eq", TYPE_STR_SINGLE); put("sub_contains", TYPE_STR_SINGLE); put("sub_starts_with", TYPE_STR_SINGLE); @@ -59,6 +61,10 @@ public TestResult test(@NonNull FilterableAppInfo info, @NonNull TestResult resu return result.setMatched(signerInfo.getSourceStampCert() != null).setMatchedSubjectLines(subjectLines); case "with_lineage": return result.setMatched(signerInfo.getSignerCertsInLineage() != null).setMatchedSubjectLines(subjectLines); + case "without_source_stamp": + return result.setMatched(signerInfo.getSourceStampCert() == null).setMatchedSubjectLines(subjectLines); + case "without_lineage": + return result.setMatched(signerInfo.getSignerCertsInLineage() == null).setMatchedSubjectLines(subjectLines); case "sub_eq": { List matchedSubjectLines = new ArrayList<>(); for (String subject : subjectLines) { diff --git a/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/TargetSdkOption.java b/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/TargetSdkOption.java index cec7b792dde..cf0e32f41e4 100644 --- a/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/TargetSdkOption.java +++ b/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/TargetSdkOption.java @@ -11,7 +11,7 @@ public class TargetSdkOption extends FilterOption { private final Map mKeysWithType = new LinkedHashMap() {{ - put("all", TYPE_NONE); + put(KEY_ALL, TYPE_NONE); put("eq", TYPE_INT); put("le", TYPE_INT); put("ge", TYPE_INT); diff --git a/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/TimesOpenedOption.java b/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/TimesOpenedOption.java index ecd700a2a54..334f0892af1 100644 --- a/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/TimesOpenedOption.java +++ b/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/TimesOpenedOption.java @@ -11,7 +11,7 @@ public class TimesOpenedOption extends FilterOption { private final Map mKeysWithType = new LinkedHashMap() {{ - put("all", TYPE_NONE); + put(KEY_ALL, TYPE_NONE); put("eq", TYPE_INT); put("le", TYPE_INT); put("ge", TYPE_INT); diff --git a/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/TotalSizeOption.java b/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/TotalSizeOption.java index c1392bdadab..d1c0625bb93 100644 --- a/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/TotalSizeOption.java +++ b/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/TotalSizeOption.java @@ -11,7 +11,7 @@ public class TotalSizeOption extends FilterOption { private final Map mKeysWithType = new LinkedHashMap() {{ - put("all", TYPE_NONE); + put(KEY_ALL, TYPE_NONE); put("eq", TYPE_SIZE_BYTES); put("le", TYPE_SIZE_BYTES); put("ge", TYPE_SIZE_BYTES); diff --git a/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/TrackersOption.java b/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/TrackersOption.java index 8644e8aa3b7..adc3638f07a 100644 --- a/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/TrackersOption.java +++ b/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/TrackersOption.java @@ -11,7 +11,7 @@ public class TrackersOption extends FilterOption { private final Map mKeysWithType = new LinkedHashMap() {{ - put("all", TYPE_NONE); + put(KEY_ALL, TYPE_NONE); put("eq", TYPE_INT); put("le", TYPE_INT); put("ge", TYPE_INT); diff --git a/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/VersionNameOption.java b/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/VersionNameOption.java index 118f42fde0d..5c20df872e9 100644 --- a/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/VersionNameOption.java +++ b/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/VersionNameOption.java @@ -12,7 +12,7 @@ public class VersionNameOption extends FilterOption { private final Map mKeysWithType = new LinkedHashMap() {{ - put("all", TYPE_NONE); + put(KEY_ALL, TYPE_NONE); put("eq", TYPE_STR_SINGLE); put("contains", TYPE_STR_SINGLE); put("starts_with", TYPE_STR_SINGLE);