Compare commits

...

4 Commits

Author SHA1 Message Date
Alberto Ponces
6bd218277d build: Bump version to v0.0.9 2022-09-17 19:40:44 +01:00
Alberto Ponces
83ad7605c4 fix: Minor improvements on App Info view 2022-09-17 19:30:04 +01:00
Alberto Ponces
5fbc8ff7a0 feat: Retrieve unsaved apps from manager's root folder and known packages from user's apps list 2022-09-17 19:29:46 +01:00
Alberto Ponces
bb4b59eee6 Disable permission_handler package for now 2022-09-17 17:42:29 +01:00
6 changed files with 110 additions and 44 deletions

View File

@@ -165,33 +165,96 @@ class ManagerAPI {
return packageInfo.version; return packageInfo.version;
} }
Future<void> reAssessSavedApps() async { Future<List<PatchedApplication>> getAppsToRemove(
List<PatchedApplication> patchedApps = getPatchedApps(); List<PatchedApplication> patchedApps,
) async {
List<PatchedApplication> toRemove = []; List<PatchedApplication> toRemove = [];
for (PatchedApplication app in patchedApps) { for (PatchedApplication app in patchedApps) {
bool isRemove = await isAppUninstalled(app); bool isRemove = await isAppUninstalled(app);
if (isRemove) { if (isRemove) {
toRemove.add(app); toRemove.add(app);
} else { }
app.hasUpdates = await hasAppUpdates(app.packageName, app.patchDate); }
app.changelog = await getAppChangelog(app.packageName, app.patchDate); return toRemove;
if (!app.hasUpdates) { }
String? currentInstalledVersion =
(await DeviceApps.getApp(app.packageName))?.versionName; Future<List<PatchedApplication>> getUnsavedApps(
if (currentInstalledVersion != null) { List<PatchedApplication> patchedApps,
String currentSavedVersion = app.version; ) async {
int currentInstalledVersionInt = int.parse( List<PatchedApplication> unsavedApps = [];
currentInstalledVersion.replaceAll(RegExp('[^0-9]'), '')); List<String> installedApps = await _rootAPI.getInstalledApps();
int currentSavedVersionInt = for (String packageName in installedApps) {
int.parse(currentSavedVersion.replaceAll(RegExp('[^0-9]'), '')); if (!patchedApps.any((app) => app.packageName == packageName)) {
if (currentInstalledVersionInt > currentSavedVersionInt) { ApplicationWithIcon? application =
app.hasUpdates = true; await DeviceApps.getApp(packageName, true) as ApplicationWithIcon?;
} if (application != null) {
unsavedApps.add(
PatchedApplication(
name: application.appName,
packageName: application.packageName,
version: application.versionName!,
apkFilePath: application.apkFilePath,
icon: application.icon,
patchDate: DateTime.now(),
isRooted: true,
),
);
}
}
}
List<Application> userApps = await DeviceApps.getInstalledApplications(
includeSystemApps: false,
includeAppIcons: false,
);
for (Application app in userApps) {
if (app.packageName.startsWith('app.revanced') &&
!app.packageName.startsWith('app.revanced.manager.')) {
ApplicationWithIcon? application =
await DeviceApps.getApp(app.packageName, true)
as ApplicationWithIcon?;
if (application != null) {
unsavedApps.add(
PatchedApplication(
name: application.appName,
packageName: application.packageName,
version: application.versionName!,
apkFilePath: application.apkFilePath,
icon: application.icon,
patchDate: DateTime.now(),
isRooted: false,
),
);
}
}
}
return unsavedApps;
}
Future<void> reAssessSavedApps() async {
List<PatchedApplication> patchedApps = getPatchedApps();
List<PatchedApplication> unsavedApps = await getUnsavedApps(patchedApps);
patchedApps.addAll(unsavedApps);
List<PatchedApplication> toRemove = await getAppsToRemove(patchedApps);
patchedApps.removeWhere((a) => toRemove.contains(a));
for (PatchedApplication app in patchedApps) {
app.hasUpdates = await hasAppUpdates(app.packageName, app.patchDate);
app.changelog = await getAppChangelog(app.packageName, app.patchDate);
if (!app.hasUpdates) {
String? currentInstalledVersion =
(await DeviceApps.getApp(app.packageName))?.versionName;
if (currentInstalledVersion != null) {
String currentSavedVersion = app.version;
int currentInstalledVersionInt = int.parse(
currentInstalledVersion.replaceAll(RegExp('[^0-9]'), ''));
int currentSavedVersionInt =
int.parse(currentSavedVersion.replaceAll(RegExp('[^0-9]'), ''));
if (currentInstalledVersionInt > currentSavedVersionInt) {
app.hasUpdates = true;
} }
} }
} }
} }
patchedApps.removeWhere((a) => toRemove.contains(a));
await setPatchedApps(patchedApps); await setPatchedApps(patchedApps);
} }

View File

@@ -3,7 +3,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_background/flutter_background.dart'; import 'package:flutter_background/flutter_background.dart';
import 'package:flutter_i18n/flutter_i18n.dart'; import 'package:flutter_i18n/flutter_i18n.dart';
import 'package:permission_handler/permission_handler.dart'; //import 'package:permission_handler/permission_handler.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';
import 'package:revanced_manager/models/patched_application.dart'; import 'package:revanced_manager/models/patched_application.dart';
@@ -30,7 +30,7 @@ class InstallerViewModel extends BaseViewModel {
bool hasErrors = false; bool hasErrors = false;
Future<void> initialize(BuildContext context) async { Future<void> initialize(BuildContext context) async {
if (await Permission.ignoreBatteryOptimizations.isGranted) { if (true /*await Permission.ignoreBatteryOptimizations.isGranted*/) {
try { try {
await FlutterBackground.initialize( await FlutterBackground.initialize(
androidConfig: FlutterBackgroundAndroidConfig( androidConfig: FlutterBackgroundAndroidConfig(
@@ -122,7 +122,7 @@ class InstallerViewModel extends BaseViewModel {
hasErrors = true; hasErrors = true;
update(-1.0, 'Aborting...', 'No app or patches selected! Aborting'); update(-1.0, 'Aborting...', 'No app or patches selected! Aborting');
} }
if (await Permission.ignoreBatteryOptimizations.isGranted) { if (true /*await Permission.ignoreBatteryOptimizations.isGranted*/) {
try { try {
await FlutterBackground.disableBackgroundExecution(); await FlutterBackground.disableBackgroundExecution();
} on Exception { } on Exception {

View File

@@ -3,7 +3,7 @@ import 'package:dynamic_themes/dynamic_themes.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:injectable/injectable.dart'; import 'package:injectable/injectable.dart';
import 'package:permission_handler/permission_handler.dart'; //import 'package:permission_handler/permission_handler.dart';
import 'package:revanced_manager/services/root_api.dart'; import 'package:revanced_manager/services/root_api.dart';
import 'package:revanced_manager/ui/views/home/home_view.dart'; import 'package:revanced_manager/ui/views/home/home_view.dart';
import 'package:revanced_manager/ui/views/patcher/patcher_view.dart'; import 'package:revanced_manager/ui/views/patcher/patcher_view.dart';
@@ -31,12 +31,12 @@ class NavigationViewModel extends IndexTrackingViewModel {
: Brightness.light, : Brightness.light,
), ),
); );
if (prefs.getBool('permissionsRequested') == null) { //if (prefs.getBool('permissionsRequested') == null) {
await prefs.setBool('permissionsRequested', true); //await prefs.setBool('permissionsRequested', true);
RootAPI().hasRootPermissions(); RootAPI().hasRootPermissions();
Permission.requestInstallPackages.request(); //Permission.requestInstallPackages.request();
Permission.ignoreBatteryOptimizations.request(); //Permission.ignoreBatteryOptimizations.request();
} //}
} }
Widget getViewForIndex(int index) { Widget getViewForIndex(int index) {

View File

@@ -64,7 +64,7 @@ class AppInfoView extends StatelessWidget {
CustomCard( CustomCard(
child: IntrinsicHeight( child: IntrinsicHeight(
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[ children: <Widget>[
InkWell( InkWell(
onTap: () => model.openApp(app), onTap: () => model.openApp(app),

View File

@@ -70,25 +70,28 @@ class _ApplicationItemState extends State<ApplicationItem>
const SizedBox(width: 4), const SizedBox(width: 4),
Padding( Padding(
padding: const EdgeInsets.only(left: 15.0), padding: const EdgeInsets.only(left: 15.0),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[ children: <Widget>[
Text( Text(
widget.name, widget.name.length > 10
style: const TextStyle( ? '${widget.name.substring(0, 10)}...'
fontSize: 16, : widget.name,
fontWeight: FontWeight.w500, style: const TextStyle(
), fontSize: 16,
fontWeight: FontWeight.w500,
), ),
Text(format(widget.patchDate)), ),
], Text(format(widget.patchDate)),
), ],
),
), ),
const Spacer(), const Spacer(),
Padding( Padding(
padding: const EdgeInsets.only(right: 5.0), padding: const EdgeInsets.only(right: 5.0),
child: RotationTransition( child: RotationTransition(
turns: Tween(begin: 0.0, end: 0.50).animate(_animationController), turns:
Tween(begin: 0.0, end: 0.50).animate(_animationController),
child: IconButton( child: IconButton(
onPressed: () { onPressed: () {
expController.toggle(); expController.toggle();

View File

@@ -4,7 +4,7 @@ homepage: https://github.com/revanced/revanced-manager
publish_to: 'none' publish_to: 'none'
version: 0.0.8+8 version: 0.0.9+9
environment: environment:
sdk: ">=2.17.5 <3.0.0" sdk: ">=2.17.5 <3.0.0"
@@ -52,7 +52,7 @@ dependencies:
ref: feature/nullSafe ref: feature/nullSafe
package_info_plus: ^1.4.3+1 package_info_plus: ^1.4.3+1
path_provider: ^2.0.11 path_provider: ^2.0.11
permission_handler: ^10.0.0 #permission_handler: ^10.0.0
pull_to_refresh: ^2.0.0 pull_to_refresh: ^2.0.0
root: ^2.0.2 root: ^2.0.2
share_extend: ^2.0.0 share_extend: ^2.0.0