From e6b540d32bb67e49b3959c0db6c0073c3dd1226d Mon Sep 17 00:00:00 2001 From: Aunali321 Date: Tue, 23 Aug 2022 23:43:06 +0530 Subject: [PATCH] feat: improve installer screen. --- lib/ui/views/installer/installer_view.dart | 132 +++++++++++++----- .../views/installer/installer_viewmodel.dart | 6 + lib/ui/views/settings/settings_view.dart | 17 ++- 3 files changed, 114 insertions(+), 41 deletions(-) diff --git a/lib/ui/views/installer/installer_view.dart b/lib/ui/views/installer/installer_view.dart index b4851448..1b0a9d2c 100644 --- a/lib/ui/views/installer/installer_view.dart +++ b/lib/ui/views/installer/installer_view.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_i18n/flutter_i18n.dart'; import 'package:google_fonts/google_fonts.dart'; +import 'package:revanced_manager/theme.dart'; import 'package:revanced_manager/ui/views/installer/installer_viewmodel.dart'; import 'package:stacked/stacked.dart'; @@ -14,50 +15,23 @@ class InstallerView extends StatelessWidget { viewModelBuilder: () => InstallerViewModel(), builder: (context, model, child) => WillPopScope( child: Scaffold( - floatingActionButton: Visibility( - visible: !model.isPatching, - child: FloatingActionButton.extended( - onPressed: () { - if (model.isInstalled) { - model.openApp(); - Navigator.of(context).pop(); - } else { - model.installResult(); - } - }, - label: I18nText(model.isInstalled - ? 'installerView.fabOpenButton' - : 'installerView.fabInstallButton'), - icon: model.isInstalled - ? const Icon(Icons.open_in_new) - : const Icon(Icons.install_mobile), - backgroundColor: Theme.of(context).colorScheme.secondary, - foregroundColor: Colors.white, - ), - ), body: SafeArea( child: SingleChildScrollView( - padding: const EdgeInsets.symmetric(horizontal: 12), + padding: const EdgeInsets.symmetric(horizontal: 20), controller: model.scrollController, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ + const SizedBox(height: 60), Row( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - I18nText( - 'installerView.widgetTitle', - child: Text( - '', - style: Theme.of(context).textTheme.headline5, - ), - ), - Visibility( - visible: !model.isPatching, - child: IconButton( - icon: const Icon(Icons.share), - onPressed: () => model.shareResult(), + Text( + model.headerLogs, + style: GoogleFonts.inter( + fontSize: 28, + fontWeight: FontWeight.w500, ), ), ], @@ -88,6 +62,96 @@ class InstallerView extends StatelessWidget { ), ), ), + Padding( + padding: + const EdgeInsets.symmetric(vertical: 16, horizontal: 0), + child: Visibility( + visible: !model.isPatching, + child: Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + //TODO: Move to separate file + TextButton( + style: ButtonStyle( + padding: MaterialStateProperty.all( + const EdgeInsets.symmetric( + horizontal: 20, + vertical: 12, + ), + ), + shape: MaterialStateProperty.all( + RoundedRectangleBorder( + borderRadius: BorderRadius.circular(100), + side: BorderSide( + width: 1, + color: + Theme.of(context).colorScheme.secondary, + ), + ), + ), + side: MaterialStateProperty.all( + BorderSide( + color: Theme.of(context) + .iconTheme + .color! + .withOpacity(0.4), + width: 1, + ), + ), + backgroundColor: MaterialStateProperty.all( + isDark + ? Theme.of(context).colorScheme.background + : Colors.white, + ), + foregroundColor: MaterialStateProperty.all( + Theme.of(context).colorScheme.secondary, + ), + ), + onPressed: () => model.shareResult(), + child: I18nText("Share file"), + ), + const SizedBox(width: 16), + TextButton( + onPressed: () { + if (model.isInstalled) { + model.openApp(); + Navigator.of(context).pop(); + } else { + model.installResult(); + } + }, + style: ButtonStyle( + padding: MaterialStateProperty.all( + const EdgeInsets.symmetric( + horizontal: 24, + vertical: 8, + ), + ), + shape: MaterialStateProperty.all( + RoundedRectangleBorder( + borderRadius: BorderRadius.circular(100), + side: BorderSide( + width: 1, + color: + Theme.of(context).colorScheme.secondary, + ), + ), + ), + backgroundColor: MaterialStateProperty.all( + Theme.of(context).colorScheme.secondary, + ), + foregroundColor: MaterialStateProperty.all( + Theme.of(context).colorScheme.background, + ), + ), + child: I18nText(model.isInstalled + ? 'installerView.fabOpenButton' + : 'installerView.fabInstallButton'), + ), + ], + ), + ), + ), ], ), ), diff --git a/lib/ui/views/installer/installer_viewmodel.dart b/lib/ui/views/installer/installer_viewmodel.dart index d4d10112..6d4b0e22 100644 --- a/lib/ui/views/installer/installer_viewmodel.dart +++ b/lib/ui/views/installer/installer_viewmodel.dart @@ -22,6 +22,7 @@ class InstallerViewModel extends BaseViewModel { ); double? progress = 0.0; String logs = ''; + String headerLogs = ''; bool isPatching = false; bool isInstalled = false; @@ -101,6 +102,7 @@ class InstallerViewModel extends BaseViewModel { String apkFilePath = _app!.apkFilePath; try { updateLog('Initializing installer'); + headerLogs = 'Initializing'; if (_app!.isRooted && !_app!.isFromStorage) { updateLog('Checking if an old patched version exists'); bool oldExists = await _patcherAPI.checkOldPatch(_app!); @@ -120,6 +122,7 @@ class InstallerViewModel extends BaseViewModel { resourcePatching = true; } await _patcherAPI.mergeIntegrations(mergeIntegrations); + headerLogs = "Merging integrations"; await _patcherAPI.runPatcher( apkFilePath, _patches, @@ -128,6 +131,7 @@ class InstallerViewModel extends BaseViewModel { ); } on Exception { updateLog('An error occurred! Aborting'); + headerLogs = 'Aborting...'; } } else { updateLog('No app or patches selected! Aborting'); @@ -144,6 +148,7 @@ class InstallerViewModel extends BaseViewModel { updateLog(_app!.isRooted ? 'Installing patched file using root method' : 'Installing patched file using nonroot method'); + headerLogs = 'Installing...'; isInstalled = await _patcherAPI.installPatchedFile(_app!); if (isInstalled) { updateLog('Done'); @@ -152,6 +157,7 @@ class InstallerViewModel extends BaseViewModel { await saveApp(); } else { updateLog('An error occurred! Aborting'); + headerLogs = 'Aborting...'; } } } diff --git a/lib/ui/views/settings/settings_view.dart b/lib/ui/views/settings/settings_view.dart index dc5dbc7e..695537ec 100644 --- a/lib/ui/views/settings/settings_view.dart +++ b/lib/ui/views/settings/settings_view.dart @@ -34,13 +34,16 @@ class SettingsView extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ const SizedBox(height: 60), - I18nText( - 'settingsView.widgetTitle', - child: Text( - '', - style: GoogleFonts.inter( - fontSize: 28, - fontWeight: FontWeight.w500, + Padding( + padding: const EdgeInsets.symmetric(horizontal: 8.0), + child: I18nText( + 'settingsView.widgetTitle', + child: Text( + '', + style: GoogleFonts.inter( + fontSize: 28, + fontWeight: FontWeight.w500, + ), ), ), ),