diff --git a/assets/translations/de.json b/assets/translations/de.json index c89f6db..f1d1f68 100644 --- a/assets/translations/de.json +++ b/assets/translations/de.json @@ -224,6 +224,10 @@ "standardVersionDetection": "Standardversionserkennung", "groupByCategory": "Nach Kategorie gruppieren", "autoApkFilterByArch": "Nach Möglichkeit versuchen, APKs nach CPU-Architektur zu filtern", + "overrideSource": "Override Source", + "dontShowAgain": "Don't show this again", + "dontShowTrackOnlyWarnings": "Don't Show the 'Track-Only' Warning", + "dontShowAPKOriginWarnings": "Don't Show APK Origin Warnings", "removeAppQuestion": { "one": "App entfernen?", "other": "Apps entfernen?" diff --git a/assets/translations/en.json b/assets/translations/en.json index 8654d1d..58878ff 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -225,6 +225,9 @@ "groupByCategory": "Group by Category", "autoApkFilterByArch": "Attempt to filter APKs by CPU architecture if possible", "overrideSource": "Override Source", + "dontShowAgain": "Don't show this again", + "dontShowTrackOnlyWarnings": "Don't Show 'Track-Only' Warnings", + "dontShowAPKOriginWarnings": "Don't Show APK Origin Warnings", "removeAppQuestion": { "one": "Remove App?", "other": "Remove Apps?" diff --git a/assets/translations/fa.json b/assets/translations/fa.json index 6aeee69..7b48c7d 100644 --- a/assets/translations/fa.json +++ b/assets/translations/fa.json @@ -224,6 +224,10 @@ "standardVersionDetection": "تشخیص نسخه استاندارد", "groupByCategory": "گروه بر اساس دسته", "autoApkFilterByArch": "در صورت امکان سعی کنید APKها را بر اساس معماری CPU فیلتر کنید", + "overrideSource": "Override Source", + "dontShowAgain": "Don't show this again", + "dontShowTrackOnlyWarnings": "Don't Show the 'Track-Only' Warning", + "dontShowAPKOriginWarnings": "Don't Show APK Origin Warnings", "removeAppQuestion": { "one": "برنامه حذف شود؟", "other": "برنامه ها حذف شوند؟" diff --git a/assets/translations/fr.json b/assets/translations/fr.json index 95a73ee..27dbd45 100644 --- a/assets/translations/fr.json +++ b/assets/translations/fr.json @@ -224,6 +224,10 @@ "standardVersionDetection": "Détection de version standard", "groupByCategory": "Group by Category", "autoApkFilterByArch": "Attempt to filter APKs by CPU architecture if possible", + "overrideSource": "Override Source", + "dontShowAgain": "Don't show this again", + "dontShowTrackOnlyWarnings": "Don't Show the 'Track-Only' Warning", + "dontShowAPKOriginWarnings": "Don't Show APK Origin Warnings", "removeAppQuestion": { "one": "Supprimer l'application ?", "other": "Supprimer les applications ?" diff --git a/assets/translations/hu.json b/assets/translations/hu.json index 30b3418..0355e37 100644 --- a/assets/translations/hu.json +++ b/assets/translations/hu.json @@ -223,6 +223,10 @@ "standardVersionDetection": "Alapért. verzió érzékelés", "groupByCategory": "Csoportosítás Kategória alapján", "autoApkFilterByArch": "Ha lehetséges, próbálja CPU architektúra szerint szűrni az APK-kat", + "overrideSource": "Override Source", + "dontShowAgain": "Don't show this again", + "dontShowTrackOnlyWarnings": "Don't Show the 'Track-Only' Warning", + "dontShowAPKOriginWarnings": "Don't Show APK Origin Warnings", "removeAppQuestion": { "one": "Eltávolítja az alkalmazást?", "other": "Eltávolítja az alkalmazást?" diff --git a/assets/translations/it.json b/assets/translations/it.json index e212184..1b122d5 100644 --- a/assets/translations/it.json +++ b/assets/translations/it.json @@ -224,6 +224,10 @@ "standardVersionDetection": "Rilevamento di versione standard", "groupByCategory": "Raggruppa per categoria", "autoApkFilterByArch": "Tenta di filtrare gli APK in base all'architettura della CPU, se possibile", + "overrideSource": "Override Source", + "dontShowAgain": "Don't show this again", + "dontShowTrackOnlyWarnings": "Don't Show the 'Track-Only' Warning", + "dontShowAPKOriginWarnings": "Don't Show APK Origin Warnings", "removeAppQuestion": { "one": "Rimuovere l'App?", "other": "Rimuovere le App?" diff --git a/assets/translations/ja.json b/assets/translations/ja.json index 2de9a3c..262fffe 100644 --- a/assets/translations/ja.json +++ b/assets/translations/ja.json @@ -224,6 +224,10 @@ "standardVersionDetection": "標準のバージョン検出", "groupByCategory": "カテゴリ別にグループ化する", "autoApkFilterByArch": "可能であれば,CPUアーキテクチャによるAPKのフィルタリングを試みる", + "overrideSource": "Override Source", + "dontShowAgain": "Don't show this again", + "dontShowTrackOnlyWarnings": "Don't Show the 'Track-Only' Warning", + "dontShowAPKOriginWarnings": "Don't Show APK Origin Warnings", "removeAppQuestion": { "one": "アプリを削除しますか?", "other": "アプリを削除しますか?" diff --git a/assets/translations/zh.json b/assets/translations/zh.json index 4a555a9..a430229 100644 --- a/assets/translations/zh.json +++ b/assets/translations/zh.json @@ -224,6 +224,10 @@ "standardVersionDetection": "常规版本检测", "groupByCategory": "按类别分组显示", "autoApkFilterByArch": "如果可能,尝试按 CPU 架构筛选 APK 文件", + "overrideSource": "Override Source", + "dontShowAgain": "Don't show this again", + "dontShowTrackOnlyWarnings": "Don't Show the 'Track-Only' Warning", + "dontShowAPKOriginWarnings": "Don't Show APK Origin Warnings", "removeAppQuestion": { "one": "是否删除应用?", "other": "是否删除应用?" diff --git a/lib/pages/add_app.dart b/lib/pages/add_app.dart index 5f5400c..768f7e7 100644 --- a/lib/pages/add_app.dart +++ b/lib/pages/add_app.dart @@ -52,6 +52,18 @@ class _AddAppPageState extends State { searchnum++; } var prevHost = pickedSource?.host; + try { + var naturalSource = + valid ? sourceProvider.getSource(userInput) : null; + if (naturalSource != null && + naturalSource.runtimeType.toString() != + HTML().runtimeType.toString()) { + // If input has changed to match a regular source, reset the override + pickedSourceOverride = null; + } + } catch (e) { + // ignore + } var source = valid ? sourceProvider.getSource(userInput, overrideSource: pickedSourceOverride) @@ -71,24 +83,35 @@ class _AddAppPageState extends State { } } - getTrackOnlyConfirmationIfNeeded(bool userPickedTrackOnly) async { - return (!((userPickedTrackOnly || pickedSource!.enforceTrackOnly) && - // ignore: use_build_context_synchronously - await showDialog( - context: context, - builder: (BuildContext ctx) { - return GeneratedFormModal( - title: tr('xIsTrackOnly', args: [ - pickedSource!.enforceTrackOnly - ? tr('source') - : tr('app') - ]), - items: const [], - message: - '${pickedSource!.enforceTrackOnly ? tr('appsFromSourceAreTrackOnly') : tr('youPickedTrackOnly')}\n\n${tr('trackOnlyAppDescription')}', - ); - }) == - null)); + Future getTrackOnlyConfirmationIfNeeded( + bool userPickedTrackOnly, SettingsProvider settingsProvider, + {bool ignoreHideSetting = false}) async { + var useTrackOnly = userPickedTrackOnly || pickedSource!.enforceTrackOnly; + if (useTrackOnly && + (!settingsProvider.hideTrackOnlyWarning || ignoreHideSetting)) { + // ignore: use_build_context_synchronously + var values = await showDialog( + context: context, + builder: (BuildContext ctx) { + return GeneratedFormModal( + initValid: true, + title: tr('xIsTrackOnly', args: [ + pickedSource!.enforceTrackOnly ? tr('source') : tr('app') + ]), + items: [ + [GeneratedFormSwitch('hide', label: tr('dontShowAgain'))] + ], + message: + '${pickedSource!.enforceTrackOnly ? tr('appsFromSourceAreTrackOnly') : tr('youPickedTrackOnly')}\n\n${tr('trackOnlyAppDescription')}', + ); + }); + if (values != null) { + settingsProvider.hideTrackOnlyWarning = values['hide'] == true; + } + return useTrackOnly && values != null; + } else { + return true; + } } getReleaseDateAsVersionConfirmationIfNeeded( @@ -116,7 +139,8 @@ class _AddAppPageState extends State { var settingsProvider = context.read(); var userPickedTrackOnly = additionalSettings['trackOnly'] == true; App? app; - if ((await getTrackOnlyConfirmationIfNeeded(userPickedTrackOnly)) && + if ((await getTrackOnlyConfirmationIfNeeded( + userPickedTrackOnly, settingsProvider)) && (await getReleaseDateAsVersionConfirmationIfNeeded( userPickedTrackOnly))) { var trackOnly = pickedSource!.enforceTrackOnly || userPickedTrackOnly; diff --git a/lib/pages/settings.dart b/lib/pages/settings.dart index 2c4aeb0..a3808e8 100644 --- a/lib/pages/settings.dart +++ b/lib/pages/settings.dart @@ -286,6 +286,34 @@ class _SettingsPageState extends State { }) ], ), + height16, + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text(tr('dontShowTrackOnlyWarnings')), + Switch( + value: + settingsProvider.hideTrackOnlyWarning, + onChanged: (value) { + settingsProvider.hideTrackOnlyWarning = + value; + }) + ], + ), + height16, + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text(tr('dontShowAPKOriginWarnings')), + Switch( + value: + settingsProvider.hideAPKOriginWarning, + onChanged: (value) { + settingsProvider.hideAPKOriginWarning = + value; + }) + ], + ), const Divider( height: 16, ), diff --git a/lib/providers/apps_provider.dart b/lib/providers/apps_provider.dart index 6af3f10..aff7412 100644 --- a/lib/providers/apps_provider.dart +++ b/lib/providers/apps_provider.dart @@ -332,13 +332,16 @@ class AppsProvider with ChangeNotifier { getHost(apkUrl.value) != getHost(app.url) && context != null) { // ignore: use_build_context_synchronously - if (await showDialog( - context: context, - builder: (BuildContext ctx) { - return APKOriginWarningDialog( - sourceUrl: app.url, apkUrl: apkUrl!.value); - }) != - true) { + var settingsProvider = context.read(); + if (!(settingsProvider.hideAPKOriginWarning) && + // ignore: use_build_context_synchronously + await showDialog( + context: context, + builder: (BuildContext ctx) { + return APKOriginWarningDialog( + sourceUrl: app.url, apkUrl: apkUrl!.value); + }) != + true) { apkUrl = null; } } diff --git a/lib/providers/settings_provider.dart b/lib/providers/settings_provider.dart index 2bc3005..6c08d5f 100644 --- a/lib/providers/settings_provider.dart +++ b/lib/providers/settings_provider.dart @@ -163,6 +163,24 @@ class SettingsProvider with ChangeNotifier { notifyListeners(); } + bool get hideTrackOnlyWarning { + return prefs?.getBool('hideTrackOnlyWarning') ?? false; + } + + set hideTrackOnlyWarning(bool show) { + prefs?.setBool('hideTrackOnlyWarning', show); + notifyListeners(); + } + + bool get hideAPKOriginWarning { + return prefs?.getBool('hideAPKOriginWarning') ?? false; + } + + set hideAPKOriginWarning(bool show) { + prefs?.setBool('hideAPKOriginWarning', show); + notifyListeners(); + } + String? getSettingString(String settingId) { return prefs?.getString(settingId); } diff --git a/lib/providers/source_provider.dart b/lib/providers/source_provider.dart index 367e559..2606a37 100644 --- a/lib/providers/source_provider.dart +++ b/lib/providers/source_provider.dart @@ -470,7 +470,7 @@ class SourceProvider { } AppSource? source; for (var s in sources.where((element) => element.host != null)) { - if (RegExp('://${s.host}').hasMatch(url)) { + if (RegExp('://${s.host}(/|\\z)?').hasMatch(url)) { source = s; break; } diff --git a/pubspec.yaml b/pubspec.yaml index e62f283..e817d41 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -17,7 +17,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # In Windows, build-name is used as the major, minor, and patch parts # of the product and file versions while build-number is used as the build suffix. -version: 0.12.0+159 # When changing this, update the tag in main() accordingly +version: 0.12.0+160 # When changing this, update the tag in main() accordingly environment: sdk: '>=2.18.2 <3.0.0'