diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 6102c540..3a2c4f8c 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -44,19 +44,7 @@
-
-
-
-
-
+ android:exported="true">
- when (call.method) {
- "accept" -> {
- val data = call.argument("data")
- val resultIntent = Intent()
- resultIntent.putExtra("data", data as Serializable)
- setResult(Activity.RESULT_OK, resultIntent)
- finish()
- }
- "deny" -> {
- setResult(Activity.RESULT_CANCELED)
- finish()
- }
- else -> result.notImplemented()
- }
+ // Default Data
+ json.put("keystorePassword", "s3cur3p@ssw0rd")
+
+ // Load Shared Preferences
+ val sharedPreferences = getSharedPreferences("FlutterSharedPreferences", Context.MODE_PRIVATE)
+ val allEntries: Map = sharedPreferences.getAll()
+ for ((key, value) in allEntries.entries) {
+ json.put(
+ key.replace("flutter.", ""),
+ if (value is Boolean) if (value) 1 else 0 else value
+ )
}
- }
- override fun getDartEntrypointFunctionName(): String {
- return "mainExportSettings"
- }
+ // Load keystore
+ val keystoreFile = File(getExternalFilesDir(null), "/revanced-manager.keystore")
+ if (keystoreFile.exists()) {
+ val keystoreBytes = keystoreFile.readBytes()
+ val keystoreBase64 =
+ Base64.encodeToString(keystoreBytes, Base64.DEFAULT).replace("\n", "")
+ json.put("keystore", keystoreBase64)
+ }
- override fun getTransparencyMode(): TransparencyMode {
- return TransparencyMode.transparent
+ // Load saved patches
+ val storedPatchesFile = File(filesDir.parentFile.absolutePath, "/app_flutter/selected-patches.json")
+ if (storedPatchesFile.exists()) {
+ val patchesBytes = storedPatchesFile.readBytes()
+ val patches = String(patchesBytes, Charsets.UTF_8)
+ json.put("patches", patches)
+ }
+
+ // Send data back
+ Log.e("ExportSettingsActivity", json.toString())
+ val resultIntent = Intent()
+ resultIntent.putExtra("data", json.toString())
+ setResult(Activity.RESULT_OK, resultIntent)
+ finish()
}
}
diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml
index ae451e0a..cb1ef880 100644
--- a/android/app/src/main/res/values/styles.xml
+++ b/android/app/src/main/res/values/styles.xml
@@ -15,10 +15,4 @@
-
-
diff --git a/assets/i18n/en_US.json b/assets/i18n/en_US.json
index e1c1f848..05694ced 100644
--- a/assets/i18n/en_US.json
+++ b/assets/i18n/en_US.json
@@ -304,11 +304,5 @@
"integrationsContributors": "Integrations contributors",
"cliContributors": "CLI contributors",
"managerContributors": "Manager contributors"
- },
- "exportSettingsView": {
- "widgetTitle": "Import settings",
- "description": "Would you like to import your settings to the previous version of ReVanced Manager?",
- "exportButton": "Import",
- "dismissButton": "No thanks"
}
}
diff --git a/lib/main.dart b/lib/main.dart
index df883453..29b715b9 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -8,7 +8,6 @@ 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';
@@ -16,14 +15,6 @@ 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();
@@ -35,12 +26,11 @@ Future initialize(Widget homeView) async {
tz.initializeTimeZones();
prefs = await SharedPreferences.getInstance();
- runApp(MyApp(homeView: homeView));
+ runApp(const MyApp());
}
class MyApp extends StatelessWidget {
- const MyApp({Key? key, required this.homeView}) : super(key: key);
- final Widget homeView;
+ const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
@@ -52,7 +42,7 @@ class MyApp extends StatelessWidget {
return DynamicThemeBuilder(
title: 'ReVanced Manager',
- home: homeView,
+ home: const NavigationView(),
localizationsDelegates: [
FlutterI18nDelegate(
translationLoader: FileTranslationLoader(
diff --git a/lib/ui/views/export_settings/export_settings_view.dart b/lib/ui/views/export_settings/export_settings_view.dart
deleted file mode 100644
index c7e797b5..00000000
--- a/lib/ui/views/export_settings/export_settings_view.dart
+++ /dev/null
@@ -1,41 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:flutter/services.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) {
- SystemChrome.setSystemUIOverlayStyle(
- SystemUiOverlayStyle(
- systemNavigationBarColor: Colors.black.withOpacity(0.002),
- statusBarColor: Colors.black.withOpacity(0.002),
- ),
- );
- SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge);
-
- return AlertDialog(
- title: I18nText('exportSettingsView.widgetTitle'),
- content: I18nText('exportSettingsView.description'),
- icon: const Icon(Icons.update),
- actions: [
- CustomMaterialButton(
- isFilled: false,
- label: I18nText('exportSettingsView.dismissButton'),
- onPressed: _exportSettingsViewModel.deny,
- ),
- CustomMaterialButton(
- label: I18nText('exportSettingsView.exportButton'),
- onPressed: () async {
- await _exportSettingsViewModel.accept();
- },
- ),
- ],
- );
- }
-}
diff --git a/lib/ui/views/export_settings/export_settings_viewmodel.dart b/lib/ui/views/export_settings/export_settings_viewmodel.dart
deleted file mode 100644
index 0aee70fd..00000000
--- a/lib/ui/views/export_settings/export_settings_viewmodel.dart
+++ /dev/null
@@ -1,58 +0,0 @@
-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();
-
- Future accept() async {
- final externalDir = await getExternalStorageDirectory();
-
- final Map data = {};
-
- data['themeMode'] = _managerAPI.getThemeMode();
- data['useDynamicTheme'] = _managerAPI.getUseDynamicTheme() ? 1 : 0;
-
- data['apiUrl'] = _managerAPI.getApiUrl();
- data['patchesRepo'] = _managerAPI.getPatchesRepo();
- data['integrationsRepo'] = _managerAPI.getIntegrationsRepo();
-
- data['patchesAutoUpdate'] = _managerAPI.isPatchesAutoUpdate() ? 1 : 0;
- data['patchesChangeEnabled'] = _managerAPI.isPatchesChangeEnabled() ? 1 : 0;
- data['universalPatchesEnabled'] = _managerAPI.areUniversalPatchesEnabled() ? 1 : 0;
- data['experimentalPatchesEnabled'] = _managerAPI.areExperimentalPatchesEnabled() ? 1 : 0;
-
- 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');
- }
-}