diff --git a/assets/translations/bs.json b/assets/translations/bs.json index eadd9b6..0cafa91 100644 --- a/assets/translations/bs.json +++ b/assets/translations/bs.json @@ -256,6 +256,7 @@ "highlightTouchTargets": "Highlight less obvious touch targets", "pickExportDir": "Pick Export Directory", "autoExportOnChanges": "Auto-export on changes", + "includeSettings": "Include settings", "filterVersionsByRegEx": "Filter Versions by Regular Expression", "trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK", "dontSortReleasesList": "Retain release order from API", diff --git a/assets/translations/cs.json b/assets/translations/cs.json index 0af18b7..d029e18 100644 --- a/assets/translations/cs.json +++ b/assets/translations/cs.json @@ -256,6 +256,7 @@ "highlightTouchTargets": "Zvýraznit méně zjevné cíle dotyku", "pickExportDir": "Vybrat adresář pro export", "autoExportOnChanges": "Automatický export při změnách", + "includeSettings": "Include settings", "filterVersionsByRegEx": "Filtrovat verze podle regulárního výrazu", "trySelectingSuggestedVersionCode": "Zkusit vybrat navrhovaný kód verze APK", "dontSortReleasesList": "Retain release order from API", diff --git a/assets/translations/de.json b/assets/translations/de.json index 85376bc..289e192 100644 --- a/assets/translations/de.json +++ b/assets/translations/de.json @@ -256,6 +256,7 @@ "highlightTouchTargets": "Weniger offensichtliche Touch-Ziele hervorheben", "pickExportDir": "Export-Verzeichnis wählen", "autoExportOnChanges": "Automatischer Export bei Änderung(en)", + "includeSettings": "Include settings", "filterVersionsByRegEx": "Versionen nach regulären Ausdrücken filtern", "trySelectingSuggestedVersionCode": "Versuchen, den vorgeschlagenen APK-Versionscode auszuwählen", "dontSortReleasesList": "Freigaberelease von der API ordern", diff --git a/assets/translations/en.json b/assets/translations/en.json index d81785a..cb061cf 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -256,6 +256,7 @@ "highlightTouchTargets": "Highlight less obvious touch targets", "pickExportDir": "Pick Export Directory", "autoExportOnChanges": "Auto-export on changes", + "includeSettings": "Include settings", "filterVersionsByRegEx": "Filter Versions by Regular Expression", "trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK", "dontSortReleasesList": "Retain release order from API", diff --git a/assets/translations/es.json b/assets/translations/es.json index fff2e8b..6acef19 100644 --- a/assets/translations/es.json +++ b/assets/translations/es.json @@ -256,6 +256,7 @@ "highlightTouchTargets": "Highlight less obvious touch targets", "pickExportDir": "Pick Export Directory", "autoExportOnChanges": "Auto-export on changes", + "includeSettings": "Include settings", "filterVersionsByRegEx": "Filter Versions by Regular Expression", "trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK", "dontSortReleasesList": "Retain release order from API", diff --git a/assets/translations/fa.json b/assets/translations/fa.json index 2631131..f9a31fe 100644 --- a/assets/translations/fa.json +++ b/assets/translations/fa.json @@ -256,6 +256,7 @@ "highlightTouchTargets": "اهداف لمسی کمتر واضح را برجسته کنید", "pickExportDir": "فهرست صادرات را انتخاب کنید", "autoExportOnChanges": "صادرات خودکار تغییرات", + "includeSettings": "Include settings", "filterVersionsByRegEx": "فیلتر کردن نسخه ها با RegEx", "trySelectingSuggestedVersionCode": "نسخه پیشنهادی APK نسخه کد را انتخاب کنید", "dontSortReleasesList": "حفظ سفارش انتشار از API", diff --git a/assets/translations/fr.json b/assets/translations/fr.json index 1940b2d..a7000c1 100644 --- a/assets/translations/fr.json +++ b/assets/translations/fr.json @@ -256,6 +256,7 @@ "highlightTouchTargets": "Highlight less obvious touch targets", "pickExportDir": "Pick Export Directory", "autoExportOnChanges": "Auto-export on changes", + "includeSettings": "Include settings", "filterVersionsByRegEx": "Filter Versions by Regular Expression", "trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK", "dontSortReleasesList": "Retain release order from API", diff --git a/assets/translations/hu.json b/assets/translations/hu.json index de1402e..17cd3ff 100644 --- a/assets/translations/hu.json +++ b/assets/translations/hu.json @@ -255,6 +255,7 @@ "highlightTouchTargets": "Emelje ki a kevésbé nyilvánvaló érintési célokat", "pickExportDir": "Válassza az Exportálási könyvtárat", "autoExportOnChanges": "Auto-exportálás a változások után", + "includeSettings": "Include settings", "filterVersionsByRegEx": "Verziók szűrése reguláris kifejezéssel", "trySelectingSuggestedVersionCode": "Próbálja ki a javasolt verziókódú APK-t", "dontSortReleasesList": "Az API-ból származó kiadási sorrend megőrzése", diff --git a/assets/translations/it.json b/assets/translations/it.json index 25d1788..3afdec3 100644 --- a/assets/translations/it.json +++ b/assets/translations/it.json @@ -256,6 +256,7 @@ "highlightTouchTargets": "Evidenzia elementi toccabili meno ovvi", "pickExportDir": "Scegli cartella esp.", "autoExportOnChanges": "Auto-esporta dopo modifiche", + "includeSettings": "Include settings", "filterVersionsByRegEx": "Filtra versioni con espressione regolare", "trySelectingSuggestedVersionCode": "Prova a selezionare APK con versionCode suggerito", "dontSortReleasesList": "Conserva l'ordine di release da API", diff --git a/assets/translations/ja.json b/assets/translations/ja.json index b81d093..88cbcea 100644 --- a/assets/translations/ja.json +++ b/assets/translations/ja.json @@ -256,6 +256,7 @@ "highlightTouchTargets": "目立たないタップ可能な対象をハイライトする", "pickExportDir": "エクスポートディレクトリを選択", "autoExportOnChanges": "変更があった際に自動でエクスポートする", + "includeSettings": "Include settings", "filterVersionsByRegEx": "正規表現でバージョンをフィルタリングする", "trySelectingSuggestedVersionCode": "提案されたバージョンコードのAPKを選択する", "dontSortReleasesList": "APIからのリリース順を保持する", diff --git a/assets/translations/nl.json b/assets/translations/nl.json index aa33f61..a365bfa 100644 --- a/assets/translations/nl.json +++ b/assets/translations/nl.json @@ -256,6 +256,7 @@ "highlightTouchTargets": "Markeer minder voor de hand liggende aanraakdoelen.", "pickExportDir": "Kies de exportmap", "autoExportOnChanges": "Automatisch exporteren bij wijzigingen", + "includeSettings": "Include settings", "filterVersionsByRegEx": "Filter versies met een reguliere expressie", "trySelectingSuggestedVersionCode": "Probeer de voorgestelde versiecode APK te selecteren", "dontSortReleasesList": "Volgorde van releases behouden vanuit de API", diff --git a/assets/translations/pl.json b/assets/translations/pl.json index c70c494..7c43fee 100644 --- a/assets/translations/pl.json +++ b/assets/translations/pl.json @@ -256,6 +256,7 @@ "highlightTouchTargets": "Wyróżnij mniej oczywiste elementy dotykowe", "pickExportDir": "Wybierz katalog eksportu", "autoExportOnChanges": "Automatyczny eksport po wprowadzeniu zmian", + "includeSettings": "Include settings", "filterVersionsByRegEx": "Filtruj wersje według wyrażenia regularnego", "trySelectingSuggestedVersionCode": "Spróbuj wybierać sugerowany kod wersji APK", "dontSortReleasesList": "Utrzymaj kolejność wydań z interfejsu API", diff --git a/assets/translations/pt.json b/assets/translations/pt.json index 878d9f5..fa89746 100644 --- a/assets/translations/pt.json +++ b/assets/translations/pt.json @@ -256,6 +256,7 @@ "highlightTouchTargets": "Destaque areas de toque menos óbvias", "pickExportDir": "Escolher Diretorio de Exportação", "autoExportOnChanges": "Auto-exportar em mudanças", + "includeSettings": "Include settings", "filterVersionsByRegEx": "Filtrar Versões por Expressão Regular", "trySelectingSuggestedVersionCode": "Tente selecionar a versão sugerida", "dontSortReleasesList": "Reter a ordem de lançamento da API", diff --git a/assets/translations/ru.json b/assets/translations/ru.json index b5682ea..b0dfae8 100644 --- a/assets/translations/ru.json +++ b/assets/translations/ru.json @@ -256,6 +256,7 @@ "highlightTouchTargets": "Выделить менее очевидные элементы управления касанием", "pickExportDir": "Выбрать каталог для экспорта", "autoExportOnChanges": "Автоэкспорт при изменениях", + "includeSettings": "Include settings", "filterVersionsByRegEx": "Фильтровать версии по регулярному выражению", "trySelectingSuggestedVersionCode": "Попробуйте выбрать предложенный код версии APK", "dontSortReleasesList": "Сохранить порядок релизов от API", diff --git a/assets/translations/sv.json b/assets/translations/sv.json index 6df5314..c4b0304 100644 --- a/assets/translations/sv.json +++ b/assets/translations/sv.json @@ -256,6 +256,7 @@ "highlightTouchTargets": "Highlight less obvious touch targets", "pickExportDir": "Välj Exportsökväg", "autoExportOnChanges": "Automatisk export vid ändringar", + "includeSettings": "Include settings", "filterVersionsByRegEx": "Filter Versions by Regular Expression", "trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK", "dontSortReleasesList": "Retain release order from API", diff --git a/assets/translations/tr.json b/assets/translations/tr.json index a463ae6..d2c15f3 100644 --- a/assets/translations/tr.json +++ b/assets/translations/tr.json @@ -256,6 +256,7 @@ "highlightTouchTargets": "Daha az belirgin dokunma hedeflerini vurgula", "pickExportDir": "Dışa Aktarılacak Klasörü Seç", "autoExportOnChanges": "Değişikliklerde otomatik olarak dışa aktar", + "includeSettings": "Include settings", "filterVersionsByRegEx": "Sürümleri Düzenli İfade ile Filtrele", "trySelectingSuggestedVersionCode": "Önerilen sürüm kodunu seçmeyi dene", "dontSortReleasesList": "API'den sıralama düzenini koru", diff --git a/assets/translations/vi.json b/assets/translations/vi.json index 5f649f5..e5cd308 100644 --- a/assets/translations/vi.json +++ b/assets/translations/vi.json @@ -256,6 +256,7 @@ "highlightTouchTargets": "Đánh dấu các mục tiêu cảm ứng ít rõ ràng hơn", "pickExportDir": "Chọn thư mục xuất", "autoExportOnChanges": "Tự động xuất khi thay đổi", + "includeSettings": "Include settings", "filterVersionsByRegEx": "Lọc phiên bản theo biểu thức chính quy", "trySelectingSuggestedVersionCode": "Thử chọn APK Mã phiên bản được đề xuất", "dontSortReleasesList": "Giữ lại thứ tự phát hành từ API", diff --git a/assets/translations/zh.json b/assets/translations/zh.json index 0de58fc..46682d3 100644 --- a/assets/translations/zh.json +++ b/assets/translations/zh.json @@ -256,6 +256,7 @@ "highlightTouchTargets": "突出展示不明显的触摸区域", "pickExportDir": "选择导出文件夹", "autoExportOnChanges": "数据变更时自动导出", + "includeSettings": "Include settings", "filterVersionsByRegEx": "筛选版本号(正则表达式)", "trySelectingSuggestedVersionCode": "尝试选择推荐版本的 APK 文件", "dontSortReleasesList": "保持来自 API 的发行顺序", diff --git a/lib/pages/import_export.dart b/lib/pages/import_export.dart index e523792..0083512 100644 --- a/lib/pages/import_export.dart +++ b/lib/pages/import_export.dart @@ -388,6 +388,14 @@ class _ImportExportPageState extends State { defaultValue: settingsProvider .autoExportOnChanges, ) + ], + [ + GeneratedFormSwitch( + 'exportSettings', + label: tr('includeSettings'), + defaultValue: settingsProvider + .exportSettings, + ) ] ], onValueChanges: @@ -400,6 +408,12 @@ class _ImportExportPageState extends State { 'autoExportOnChanges'] == true; } + if (value['exportSettings'] != + null) { + settingsProvider.exportSettings = + value['exportSettings'] == + true; + } } }), ], diff --git a/lib/providers/apps_provider.dart b/lib/providers/apps_provider.dart index dae50c4..9130684 100644 --- a/lib/providers/apps_provider.dart +++ b/lib/providers/apps_provider.dart @@ -1174,7 +1174,10 @@ class AppsProvider with ChangeNotifier { } Future exportApps( - {bool pickOnly = false, isAuto = false, SettingsProvider? sp}) async { + {bool pickOnly = false, + isAuto = false, + SettingsProvider? sp, + bool includeSettings = false}) async { SettingsProvider settingsProvider = sp ?? this.settingsProvider; var exportDir = await settingsProvider.getExportDir(); if (isAuto) { @@ -1203,12 +1206,22 @@ class AppsProvider with ChangeNotifier { } String? returnPath; if (!pickOnly) { + Map finalExport = {}; + finalExport['apps'] = apps.values.map((e) => e.app.toJson()).toList(); + if (settingsProvider.exportSettings) { + finalExport['settings'] = Map.fromEntries( + (settingsProvider.prefs + ?.getKeys() + .map((key) => + MapEntry(key, settingsProvider.prefs?.get(key))) + .toList()) ?? + []); + } var result = await saf.createFile(exportDir, displayName: '${tr('obtainiumExportHyphenatedLowercase')}-${DateTime.now().toIso8601String().replaceAll(':', '-')}${isAuto ? '-auto' : ''}.json', mimeType: 'application/json', - bytes: Uint8List.fromList(utf8.encode( - jsonEncode(apps.values.map((e) => e.app.toJson()).toList())))); + bytes: Uint8List.fromList(utf8.encode(jsonEncode(finalExport)))); if (result == null) { throw ObtainiumError(tr('unexpectedError')); } @@ -1219,9 +1232,11 @@ class AppsProvider with ChangeNotifier { } Future importApps(String appsJSON) async { - List importedApps = (jsonDecode(appsJSON) as List) - .map((e) => App.fromJson(e)) - .toList(); + var decodedJSON = jsonDecode(appsJSON); + List importedApps = + ((decodedJSON['apps'] ?? decodedJSON) as List) + .map((e) => App.fromJson(e)) + .toList(); while (loadingApps) { await Future.delayed(const Duration(microseconds: 1)); } @@ -1232,6 +1247,18 @@ class AppsProvider with ChangeNotifier { } await saveApps(importedApps, onlyIfExists: false); notifyListeners(); + if (decodedJSON['settings'] != null) { + var settingsMap = decodedJSON['settings'] as Map; + settingsMap.forEach((key, value) { + if (value is int) { + settingsProvider.prefs?.setInt(key, value); + } else if (value is bool) { + settingsProvider.prefs?.setBool(key, value); + } else { + settingsProvider.prefs?.setString(key, value as String); + } + }); + } return importedApps.length; } diff --git a/lib/providers/settings_provider.dart b/lib/providers/settings_provider.dart index cf3c7c6..25e9a3b 100644 --- a/lib/providers/settings_provider.dart +++ b/lib/providers/settings_provider.dart @@ -416,4 +416,13 @@ class SettingsProvider with ChangeNotifier { prefs?.setBool('onlyCheckInstalledOrTrackOnlyApps', val); notifyListeners(); } + + bool get exportSettings { + return prefs?.getBool('exportSettings') ?? false; + } + + set exportSettings(bool val) { + prefs?.setBool('exportSettings', val); + notifyListeners(); + } }