Added ExportSettingsActivity

This commit is contained in:
Benjamin Halko
2023-09-26 16:21:46 -07:00
parent f1ea306291
commit d9d5b746c3
7 changed files with 181 additions and 100 deletions

View File

@@ -8,6 +8,7 @@ import 'package:revanced_manager/services/github_api.dart';
import 'package:revanced_manager/services/manager_api.dart';
import 'package:revanced_manager/services/revanced_api.dart';
import 'package:revanced_manager/ui/theme/dynamic_theme_builder.dart';
import 'package:revanced_manager/ui/views/export_settings/export_settings_view.dart';
import 'package:revanced_manager/ui/views/navigation/navigation_view.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:stacked_themes/stacked_themes.dart';
@@ -15,6 +16,14 @@ import 'package:timezone/data/latest.dart' as tz;
late SharedPreferences prefs;
Future main() async {
initialize(const NavigationView());
}
Future mainExportSettings() async {
initialize(const ExportSettingsView());
}
Future initialize(Widget homeView) async {
await ThemeManager.initialise();
await setupLocator();
WidgetsFlutterBinding.ensureInitialized();
@@ -26,11 +35,12 @@ Future main() async {
tz.initializeTimeZones();
prefs = await SharedPreferences.getInstance();
runApp(const MyApp());
runApp(MyApp(homeView: homeView));
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
const MyApp({Key? key, required this.homeView}) : super(key: key);
final Widget homeView;
@override
Widget build(BuildContext context) {
@@ -42,7 +52,7 @@ class MyApp extends StatelessWidget {
return DynamicThemeBuilder(
title: 'ReVanced Manager',
home: const NavigationView(),
home: homeView,
localizationsDelegates: [
FlutterI18nDelegate(
translationLoader: FileTranslationLoader(

View File

@@ -0,0 +1,35 @@
import 'package:flutter/material.dart';
import 'package:flutter_i18n/flutter_i18n.dart';
import 'package:revanced_manager/ui/views/export_settings/export_settings_viewmodel.dart';
import 'package:revanced_manager/ui/widgets/shared/custom_material_button.dart';
final _exportSettingsViewModel = ExportSettingsViewModel();
class ExportSettingsView extends StatelessWidget {
const ExportSettingsView({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
_exportSettingsViewModel.init(context);
return Material(
child: AlertDialog(
title: I18nText('exportSettingsView.widgetTitle'),
content: I18nText('exportSettingsView.description'),
icon: const Icon(Icons.update),
actions: <Widget> [
CustomMaterialButton(
isFilled: false,
label: I18nText('exportSettingsView.dismissButton'),
onPressed: _exportSettingsViewModel.deny,
),
CustomMaterialButton(
label: I18nText('exportSettingsView.exportButton'),
onPressed: () async {
await _exportSettingsViewModel.accept();
},
),
],
),
);
}
}

View File

@@ -0,0 +1,71 @@
import 'dart:convert';
import 'dart:io';
import 'package:dynamic_themes/dynamic_themes.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:injectable/injectable.dart';
import 'package:path_provider/path_provider.dart';
import 'package:revanced_manager/app/app.locator.dart';
import 'package:revanced_manager/services/manager_api.dart';
import 'package:stacked/stacked.dart';
@lazySingleton
class ExportSettingsViewModel extends BaseViewModel {
final _channel = const MethodChannel('app.revanced.manager.flutter/settings');
final ManagerAPI _managerAPI = locator<ManagerAPI>();
void init(BuildContext context) {
SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge);
SystemChrome.setSystemUIOverlayStyle(
SystemUiOverlayStyle(
systemNavigationBarColor: Colors.transparent,
systemNavigationBarIconBrightness:
DynamicTheme.of(context)!.theme.brightness == Brightness.light
? Brightness.dark
: Brightness.light,
),
);
}
Future<void> accept() async {
final externalDir = await getExternalStorageDirectory();
final Map<String, dynamic> data = {};
data['themeMode'] = _managerAPI.getThemeMode();
data['useDynamicTheme'] = _managerAPI.getUseDynamicTheme();
data['apiUrl'] = _managerAPI.getApiUrl();
data['patchesRepo'] = _managerAPI.getPatchesRepo();
data['integrationsRepo'] = _managerAPI.getIntegrationsRepo();
data['patchesAutoUpdate'] = _managerAPI.isPatchesAutoUpdate();
data['patchesChangeEnabled'] = _managerAPI.isPatchesChangeEnabled();
data['universalPatchesEnabled'] = _managerAPI.areUniversalPatchesEnabled();
data['experimentalPatchesEnabled'] = _managerAPI.areExperimentalPatchesEnabled();
data['keystorePassword'] = _managerAPI.getKeystorePassword();
// Load keystore
if (externalDir != null) {
final keystoreFile = File('${externalDir.path}/revanced-manager.keystore');
if (keystoreFile.existsSync()) {
final keystoreBytes = keystoreFile.readAsBytesSync();
data['keystore'] = base64Encode(keystoreBytes);
}
}
// Load patches
final patchFile = File(_managerAPI.storedPatchesFile);
if (patchFile.existsSync()) {
data['patches'] = patchFile.readAsStringSync();
}
_channel.invokeMethod('accept', {'data': jsonEncode(data)});
}
void deny() {
_channel.invokeMethod('deny');
}
}