chore: merge dev branch to main branch (#1011)

ReVanced Manager v1.4.1
This commit is contained in:
Pun 2023-07-15 20:33:30 +07:00 committed by GitHub
commit 768ad0c9bc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 132 additions and 85 deletions

View File

@ -1,12 +1,12 @@
import 'dart:io'; import 'dart:io';
import 'package:app_installer/app_installer.dart';
import 'package:collection/collection.dart'; import 'package:collection/collection.dart';
import 'package:cr_file_saver/file_saver.dart'; import 'package:cr_file_saver/file_saver.dart';
import 'package:device_apps/device_apps.dart'; import 'package:device_apps/device_apps.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:injectable/injectable.dart'; import 'package:injectable/injectable.dart';
import 'package:install_plugin/install_plugin.dart';
import 'package:path_provider/path_provider.dart'; import 'package:path_provider/path_provider.dart';
import 'package:revanced_manager/app/app.locator.dart'; import 'package:revanced_manager/app/app.locator.dart';
import 'package:revanced_manager/models/patch.dart'; import 'package:revanced_manager/models/patch.dart';
@ -232,10 +232,8 @@ class PatcherAPI {
); );
} }
} else { } else {
await AppInstaller.installApk(_outFile!.path); final install = await InstallPlugin.installApk(_outFile!.path);
return await DeviceApps.isAppInstalled( return install['isSuccess'];
patchedApp.packageName,
);
} }
} on Exception catch (e) { } on Exception catch (e) {
if (kDebugMode) { if (kDebugMode) {

View File

@ -73,7 +73,7 @@ class RootAPI {
} }
Future<List<String>> getInstalledApps() async { Future<List<String>> getInstalledApps() async {
final List<String> apps = List.empty(); final List<String> apps = List.empty(growable: true);
try { try {
String? res = await Root.exec( String? res = await Root.exec(
cmd: 'ls "$_revancedDirPath"', cmd: 'ls "$_revancedDirPath"',

View File

@ -88,7 +88,7 @@ class _AppSelectorViewState extends State<AppSelectorView> {
), ),
), ),
) )
: model.apps.isEmpty : model.allApps.isEmpty
? const AppSkeletonLoader() ? const AppSkeletonLoader()
: Padding( : Padding(
padding: const EdgeInsets.symmetric(horizontal: 12.0) padding: const EdgeInsets.symmetric(horizontal: 12.0)

View File

@ -45,9 +45,7 @@ class AppSelectorViewModel extends BaseViewModel {
.length .length
.compareTo(_patcherAPI.getFilteredPatches(a.packageName).length), .compareTo(_patcherAPI.getFilteredPatches(a.packageName).length),
); );
noApps = apps.isEmpty;
getAllApps(); getAllApps();
notifyListeners(); notifyListeners();
} }
@ -57,7 +55,7 @@ class AppSelectorViewModel extends BaseViewModel {
.toSet() .toSet()
.where((name) => !apps.any((app) => app.packageName == name)) .where((name) => !apps.any((app) => app.packageName == name))
.toList(); .toList();
noApps = allApps.isEmpty;
return allApps; return allApps;
} }

View File

@ -128,7 +128,7 @@ class HomeView extends StatelessWidget {
}, },
child: model.showUpdatableApps child: model.showUpdatableApps
? AvailableUpdatesCard() ? AvailableUpdatesCard()
: InstalledAppsCard(), : const InstalledAppsCard(),
), ),
], ],
), ),

View File

@ -1,13 +1,13 @@
// ignore_for_file: use_build_context_synchronously // ignore_for_file: use_build_context_synchronously
import 'dart:async'; import 'dart:async';
import 'dart:io'; import 'dart:io';
import 'package:app_installer/app_installer.dart';
import 'package:cross_connectivity/cross_connectivity.dart'; import 'package:cross_connectivity/cross_connectivity.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_i18n/flutter_i18n.dart'; import 'package:flutter_i18n/flutter_i18n.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:injectable/injectable.dart'; import 'package:injectable/injectable.dart';
import 'package:install_plugin/install_plugin.dart';
import 'package:path_provider/path_provider.dart'; import 'package:path_provider/path_provider.dart';
import 'package:revanced_manager/app/app.locator.dart'; import 'package:revanced_manager/app/app.locator.dart';
import 'package:revanced_manager/app/app.router.dart'; import 'package:revanced_manager/app/app.router.dart';
@ -51,7 +51,7 @@ class HomeViewModel extends BaseViewModel {
_toast.showBottom('homeView.installingMessage'); _toast.showBottom('homeView.installingMessage');
final File? managerApk = await _managerAPI.downloadManager(); final File? managerApk = await _managerAPI.downloadManager();
if (managerApk != null) { if (managerApk != null) {
await AppInstaller.installApk(managerApk.path); await InstallPlugin.installApk(managerApk.path);
} else { } else {
_toast.showBottom('homeView.errorDownloadMessage'); _toast.showBottom('homeView.errorDownloadMessage');
} }
@ -72,7 +72,7 @@ class HomeViewModel extends BaseViewModel {
_toast.showBottom('homeView.installingMessage'); _toast.showBottom('homeView.installingMessage');
final File? managerApk = await _managerAPI.downloadManager(); final File? managerApk = await _managerAPI.downloadManager();
if (managerApk != null) { if (managerApk != null) {
await AppInstaller.installApk(managerApk.path); await InstallPlugin.installApk(managerApk.path);
} else { } else {
_toast.showBottom('homeView.errorDownloadMessage'); _toast.showBottom('homeView.errorDownloadMessage');
} }
@ -272,7 +272,7 @@ class HomeViewModel extends BaseViewModel {
child: CustomMaterialButton( child: CustomMaterialButton(
label: I18nText('updateButton'), label: I18nText('updateButton'),
onPressed: () async { onPressed: () async {
await AppInstaller.installApk( await InstallPlugin.installApk(
downloadedApk!.path, downloadedApk!.path,
); );
}, },
@ -318,7 +318,7 @@ class HomeViewModel extends BaseViewModel {
// UILocalNotificationDateInterpretation.absoluteTime, // UILocalNotificationDateInterpretation.absoluteTime,
// ); // );
_toast.showBottom('homeView.installingMessage'); _toast.showBottom('homeView.installingMessage');
await AppInstaller.installApk(managerApk.path); await InstallPlugin.installApk(managerApk.path);
} else { } else {
_toast.showBottom('homeView.errorDownloadMessage'); _toast.showBottom('homeView.errorDownloadMessage');
} }

View File

@ -13,7 +13,16 @@ class NavigationView extends StatelessWidget {
return ViewModelBuilder<NavigationViewModel>.reactive( return ViewModelBuilder<NavigationViewModel>.reactive(
onViewModelReady: (model) => model.initialize(context), onViewModelReady: (model) => model.initialize(context),
viewModelBuilder: () => locator<NavigationViewModel>(), viewModelBuilder: () => locator<NavigationViewModel>(),
builder: (context, model, child) => Scaffold( builder: (context, model, child) => WillPopScope(
onWillPop: () async {
if (model.currentIndex == 0) {
return true;
} else {
model.setIndex(0);
return false;
}
},
child: Scaffold(
body: PageTransitionSwitcher( body: PageTransitionSwitcher(
duration: const Duration(milliseconds: 400), duration: const Duration(milliseconds: 400),
transitionBuilder: ( transitionBuilder: (
@ -67,6 +76,7 @@ class NavigationView extends StatelessWidget {
], ],
), ),
), ),
),
); );
} }
} }

View File

@ -84,14 +84,18 @@ class _InstalledAppItemState extends State<InstalledAppItem> {
}, },
), ),
const SizedBox(width: 4), const SizedBox(width: 4),
Text( Flexible(
child: Text(
widget.patchesCount == 1 widget.patchesCount == 1
? '${widget.patchesCount} patch' ? '${widget.patchesCount} patch'
: '${widget.patchesCount} patches', : '${widget.patchesCount} patches',
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle( style: TextStyle(
color: Theme.of(context).colorScheme.secondary, color: Theme.of(context).colorScheme.secondary,
), ),
), ),
),
], ],
), ),
], ],

View File

@ -78,14 +78,18 @@ class _NotInstalledAppItem extends State<NotInstalledAppItem> {
}, },
), ),
const SizedBox(width: 4), const SizedBox(width: 4),
Text( Flexible(
child: Text(
widget.patchesCount == 1 widget.patchesCount == 1
? '${widget.patchesCount} patch' ? '${widget.patchesCount} patch'
: '${widget.patchesCount} patches', : '${widget.patchesCount} patches',
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle( style: TextStyle(
color: Theme.of(context).colorScheme.secondary, color: Theme.of(context).colorScheme.secondary,
), ),
), ),
),
], ],
), ),
], ],

View File

@ -1,16 +1,49 @@
import 'package:device_apps/device_apps.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_i18n/flutter_i18n.dart'; import 'package:flutter_i18n/flutter_i18n.dart';
import 'package:revanced_manager/app/app.locator.dart'; import 'package:revanced_manager/app/app.locator.dart';
import 'package:revanced_manager/models/patched_application.dart'; import 'package:revanced_manager/models/patched_application.dart';
import 'package:revanced_manager/services/manager_api.dart';
import 'package:revanced_manager/ui/views/home/home_viewmodel.dart'; import 'package:revanced_manager/ui/views/home/home_viewmodel.dart';
import 'package:revanced_manager/ui/widgets/shared/application_item.dart'; import 'package:revanced_manager/ui/widgets/shared/application_item.dart';
import 'package:revanced_manager/ui/widgets/shared/custom_card.dart'; import 'package:revanced_manager/ui/widgets/shared/custom_card.dart';
class InstalledAppsCard extends StatelessWidget { class InstalledAppsCard extends StatefulWidget {
InstalledAppsCard({Key? key}) : super(key: key); const InstalledAppsCard({Key? key}) : super(key: key);
final List<PatchedApplication> apps = @override
locator<HomeViewModel>().patchedInstalledApps; State<InstalledAppsCard> createState() => _InstalledAppsCardState();
}
class _InstalledAppsCardState extends State<InstalledAppsCard> {
List<PatchedApplication> apps = locator<HomeViewModel>().patchedInstalledApps;
final ManagerAPI _managerAPI = locator<ManagerAPI>();
List<PatchedApplication> patchedApps = [];
@override
void initState() {
super.initState();
_getApps();
}
Future _getApps() async {
if (apps.isNotEmpty) {
patchedApps = [...apps];
for (final element in apps) {
await DeviceApps.getApp(element.packageName).then((value) {
if (element.version != value?.versionName) {
patchedApps.remove(element);
}
});
}
if (apps.length != patchedApps.length) {
await _managerAPI.setPatchedApps(patchedApps);
apps.clear();
apps = [...patchedApps];
}
setState(() {});
}
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {

View File

@ -4,14 +4,13 @@ homepage: https://github.com/revanced/revanced-manager
publish_to: 'none' publish_to: 'none'
version: 1.4.0+100400000 version: 1.4.1+100400001
environment: environment:
sdk: '>=3.0.0 <4.0.0' sdk: '>=3.0.0 <4.0.0'
dependencies: dependencies:
animations: ^2.0.7 animations: ^2.0.7
app_installer: ^1.1.0
collection: ^1.17.0 collection: ^1.17.0
cross_connectivity: ^3.0.5 cross_connectivity: ^3.0.5
cr_file_saver: cr_file_saver:
@ -59,8 +58,8 @@ dependencies:
pull_to_refresh: ^2.0.0 pull_to_refresh: ^2.0.0
root: root:
git: git:
url: https://github.com/gokul1630/root url: https://github.com/EvadeMaster/root
ref: main ref: 9bcf0dc06b8e2e3ccd5fbd16bc849938e817b36b
share_extend: ^2.0.0 share_extend: ^2.0.0
shared_preferences: ^2.1.0 shared_preferences: ^2.1.0
skeletons: ^0.0.3 skeletons: ^0.0.3
@ -75,6 +74,7 @@ dependencies:
flutter_dotenv: ^5.0.2 flutter_dotenv: ^5.0.2
flutter_markdown: ^0.6.14 flutter_markdown: ^0.6.14
dio_cache_interceptor: ^3.4.0 dio_cache_interceptor: ^3.4.0
install_plugin: ^2.1.0
dev_dependencies: dev_dependencies:
json_serializable: ^6.6.1 json_serializable: ^6.6.1