diff --git a/lib/ui/views/app_selector/app_selector_viewmodel.dart b/lib/ui/views/app_selector/app_selector_viewmodel.dart index 46c3eabf..7961ceb9 100644 --- a/lib/ui/views/app_selector/app_selector_viewmodel.dart +++ b/lib/ui/views/app_selector/app_selector_viewmodel.dart @@ -197,7 +197,7 @@ class AppSelectorViewModel extends BaseViewModel { Future showSelectFromStorageDialog(BuildContext context) async { return showDialog( context: context, - builder: (context) => SimpleDialog( + builder: (innerContext) => SimpleDialog( alignment: Alignment.center, contentPadding: const EdgeInsets.symmetric(horizontal: 20, vertical: 20), @@ -206,7 +206,7 @@ class AppSelectorViewModel extends BaseViewModel { Icon( Icons.block, size: 28, - color: Theme.of(context).colorScheme.primary, + color: Theme.of(innerContext).colorScheme.primary, ), const SizedBox(height: 20), I18nText( @@ -234,7 +234,7 @@ class AppSelectorViewModel extends BaseViewModel { const SizedBox(height: 30), CustomMaterialButton( onPressed: () async { - Navigator.pop(context); + Navigator.pop(innerContext); await selectAppFromStorage(context); }, label: Row( @@ -250,7 +250,7 @@ class AppSelectorViewModel extends BaseViewModel { CustomMaterialButton( isFilled: false, onPressed: () { - Navigator.pop(context); + Navigator.pop(innerContext); }, label: Row( mainAxisAlignment: MainAxisAlignment.center, diff --git a/lib/ui/views/installer/installer_viewmodel.dart b/lib/ui/views/installer/installer_viewmodel.dart index c8f7e8cd..53a03040 100644 --- a/lib/ui/views/installer/installer_viewmodel.dart +++ b/lib/ui/views/installer/installer_viewmodel.dart @@ -179,18 +179,48 @@ class InstallerViewModel extends BaseViewModel { } } + void _trimLogs(List logLines, String keyword, String? newString) { + final lineCount = logLines.where((line) => line.endsWith(keyword)).length; + final index = logLines.indexWhere((line) => line.endsWith(keyword)); + if (newString != null && lineCount > 0) { + logLines.insert(index, newString.replaceAll('{lineCount}', lineCount.toString())); + } + logLines.removeWhere((lines) => lines.endsWith(keyword)); + } + + dynamic _getPatchOptionValue(String patchName, Option option) { + final Option? savedOption = _managerAPI.getPatchOption(_app.packageName, patchName, option.key); + if (savedOption != null) { + return savedOption.value; + } else { + return option.value; + } + } + + String _formatPatches(List patches) { + if (patches.isEmpty) { + return 'None'; + } + return patches.map((p) => p.name + (p.options.isEmpty ? '' : ' [${p.options.map((o) => '${o.title}: ${_getPatchOptionValue(p.name, o)}').join(", ")}]')).toList().join(', '); + } + Future copyLogs() async { final info = await AboutInfo.getInfo(); - dynamic getValue(String patchName, Option option) { - final Option? savedOption = - _managerAPI.getPatchOption(_app.packageName, patchName, option.key); - if (savedOption != null) { - return savedOption.value; - } else { - return option.value; - } - } + // Trim out extra lines + final logsTrimmed = logs.split('\n'); + _trimLogs(logsTrimmed, 'succeeded', 'Applied {lineCount} patches'); + _trimLogs(logsTrimmed, '.dex', 'Compiled {lineCount} dex files'); + + // Get patches added / removed + final defaultPatches = _patcherAPI.getFilteredPatches(_app.packageName).where((p) => !p.excluded).toList(); + final patchesAdded = _patches.where((p) => !defaultPatches.contains(p)).toList(); + final patchesRemoved = defaultPatches.where((p) => !_patches.contains(p)).toList(); + + // Options changed + final patchesChanged = defaultPatches.where((p) => _patches.contains(p) && p.options.any((o) => _getPatchOptionValue(p.name, o) != o.value)).toList(); + + // Add Info final formattedLogs = [ '- Device Info', 'ReVanced Manager: ${info['version']}', @@ -203,7 +233,10 @@ class InstallerViewModel extends BaseViewModel { '\n- Patch Info', 'App: ${_app.packageName} v${_app.version}', 'Patches version: ${_managerAPI.patchesVersion}', - 'Patches: ${_patches.map((p) => p.name + (p.options.isEmpty ? '' : ' [${p.options.map((o) => '${o.title}: ${getValue(p.name, o)}').join(", ")}]')).toList().join(", ")}', + 'Patches added: ${_formatPatches(patchesAdded)}', + 'Patches removed: ${_formatPatches(patchesRemoved)}', + 'Options changed: ${_formatPatches(patchesChanged)}', + '\n- Settings', 'Allow changing patch selection: ${_managerAPI.isPatchesChangeEnabled()}', 'Version compatibility check: ${_managerAPI.isVersionCompatibilityCheckEnabled()}', @@ -212,7 +245,7 @@ class InstallerViewModel extends BaseViewModel { 'Integration source: ${_managerAPI.getIntegrationsRepo()}', '\n- Logs', - logs, + logsTrimmed.join('\n'), ]; Clipboard.setData(ClipboardData(text: formattedLogs.join('\n'))); @@ -343,6 +376,7 @@ class InstallerViewModel extends BaseViewModel { isCanceled = true; update(0.5, 'Canceling...', 'Canceling patching process'); await _patcherAPI.stopPatcher(); + await WakelockPlus.disable(); update(-100.0, 'Canceled...', 'Press back to exit'); } on Exception catch (e) { if (kDebugMode) { diff --git a/pubspec.yaml b/pubspec.yaml index 0f9ea933..b10e3400 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -4,7 +4,7 @@ homepage: https://github.com/revanced/revanced-manager publish_to: 'none' -version: 1.16.0+101600000 +version: 1.17.0+101700000 environment: sdk: '>=3.0.0 <4.0.0'