mirror of
https://github.com/ReVanced/revanced-manager.git
synced 2024-11-10 01:01:56 +01:00
feat: add support for shared patches (#577)
* fix: avoid npe if a patch has empty compatible package. * feat: support for shared patches * fix: incorrect bool check and cleanup Co-authored-by: Aunali321 <aunvakil.aa@gmail.com>
This commit is contained in:
parent
4f8aec6a05
commit
ff90dae695
3 changed files with 40 additions and 16 deletions
|
@ -174,7 +174,7 @@ class MainActivity : FlutterActivity() {
|
|||
javaClass.classLoader
|
||||
)
|
||||
).loadPatches().filter { patch ->
|
||||
patch.compatiblePackages!!.any { it.name == patcher.context.packageMetadata.packageName } &&
|
||||
(patch.compatiblePackages?.any { it.name == patcher.context.packageMetadata.packageName } == true || patch.compatiblePackages.isNullOrEmpty()) &&
|
||||
selectedPatches.any { it == patch.patchName }
|
||||
}
|
||||
} else {
|
||||
|
|
|
@ -54,6 +54,25 @@ class PatcherAPI {
|
|||
|
||||
Future<List<ApplicationWithIcon>> getFilteredInstalledApps() async {
|
||||
List<ApplicationWithIcon> filteredApps = [];
|
||||
bool? allAppsIncluded =
|
||||
_patches.any((patch) => patch.compatiblePackages.isEmpty);
|
||||
if (allAppsIncluded) {
|
||||
var allPackages = await DeviceApps.getInstalledApplications(
|
||||
includeAppIcons: true,
|
||||
onlyAppsWithLaunchIntent: true,
|
||||
);
|
||||
allPackages.forEach((pkg) async {
|
||||
if (!filteredApps.any((app) => app.packageName == pkg.packageName)) {
|
||||
var appInfo = await DeviceApps.getApp(
|
||||
pkg.packageName,
|
||||
true,
|
||||
) as ApplicationWithIcon?;
|
||||
if (appInfo != null) {
|
||||
filteredApps.add(appInfo);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
for (Patch patch in _patches) {
|
||||
for (Package package in patch.compatiblePackages) {
|
||||
try {
|
||||
|
@ -76,11 +95,19 @@ class PatcherAPI {
|
|||
}
|
||||
|
||||
Future<List<Patch>> getFilteredPatches(String packageName) async {
|
||||
return _patches
|
||||
.where((patch) =>
|
||||
!patch.name.contains('settings') &&
|
||||
patch.compatiblePackages.any((pack) => pack.name == packageName))
|
||||
.toList();
|
||||
List<Patch> filteredPatches = [];
|
||||
_patches.forEach((patch) {
|
||||
if (patch.compatiblePackages.isEmpty) {
|
||||
filteredPatches.add(patch);
|
||||
} else {
|
||||
if (!patch.name.contains('settings') &&
|
||||
patch.compatiblePackages.any((pack) => pack.name == packageName)
|
||||
) {
|
||||
filteredPatches.add(patch);
|
||||
}
|
||||
}
|
||||
});
|
||||
return filteredPatches;
|
||||
}
|
||||
|
||||
Future<List<Patch>> getAppliedPatches(List<String> appliedPatches) async {
|
||||
|
@ -229,7 +256,6 @@ class PatcherAPI {
|
|||
return false;
|
||||
}
|
||||
|
||||
|
||||
void exportPatchedFile(String appName, String version) {
|
||||
try {
|
||||
if (_outFile != null) {
|
||||
|
@ -238,13 +264,12 @@ class PatcherAPI {
|
|||
// This is temporary workaround to populate initial file name
|
||||
// ref: https://github.com/Cleveroad/cr_file_saver/issues/7
|
||||
int lastSeparator = _outFile!.path.lastIndexOf('/');
|
||||
String newSourcePath = _outFile!.path.substring(0, lastSeparator + 1) + newName;
|
||||
String newSourcePath =
|
||||
_outFile!.path.substring(0, lastSeparator + 1) + newName;
|
||||
_outFile!.copySync(newSourcePath);
|
||||
|
||||
CRFileSaver.saveFileWithDialog(SaveFileDialogParams(
|
||||
sourceFilePath: newSourcePath,
|
||||
destinationFileName: newName
|
||||
));
|
||||
sourceFilePath: newSourcePath, destinationFileName: newName));
|
||||
}
|
||||
} on Exception catch (e, s) {
|
||||
Sentry.captureException(e, stackTrace: s);
|
||||
|
@ -267,10 +292,9 @@ class PatcherAPI {
|
|||
}
|
||||
|
||||
String _getFileName(String appName, String version) {
|
||||
String prefix = appName.toLowerCase().replaceAll(' ', '-');
|
||||
String newName = '$prefix-revanced_v$version.apk';
|
||||
return newName;
|
||||
|
||||
String prefix = appName.toLowerCase().replaceAll(' ', '-');
|
||||
String newName = '$prefix-revanced_v$version.apk';
|
||||
return newName;
|
||||
}
|
||||
|
||||
Future<void> sharePatcherLog(String logs) async {
|
||||
|
|
|
@ -147,7 +147,7 @@ class PatchesSelectorViewModel extends BaseViewModel {
|
|||
|
||||
bool isPatchSupported(Patch patch) {
|
||||
PatchedApplication app = locator<PatcherViewModel>().selectedApp!;
|
||||
return patch.compatiblePackages.any((pack) =>
|
||||
return patch.compatiblePackages.isEmpty || patch.compatiblePackages.any((pack) =>
|
||||
pack.name == app.packageName &&
|
||||
(pack.versions.isEmpty || pack.versions.contains(app.version)));
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue