mirror of
https://github.com/ImranR98/Obtainium.git
synced 2025-08-01 21:30:16 +02:00
Add warning popup toggles + fix breaking bug in add app
This commit is contained in:
@@ -224,6 +224,10 @@
|
|||||||
"standardVersionDetection": "Standardversionserkennung",
|
"standardVersionDetection": "Standardversionserkennung",
|
||||||
"groupByCategory": "Nach Kategorie gruppieren",
|
"groupByCategory": "Nach Kategorie gruppieren",
|
||||||
"autoApkFilterByArch": "Nach Möglichkeit versuchen, APKs nach CPU-Architektur zu filtern",
|
"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": {
|
"removeAppQuestion": {
|
||||||
"one": "App entfernen?",
|
"one": "App entfernen?",
|
||||||
"other": "Apps entfernen?"
|
"other": "Apps entfernen?"
|
||||||
|
@@ -225,6 +225,9 @@
|
|||||||
"groupByCategory": "Group by Category",
|
"groupByCategory": "Group by Category",
|
||||||
"autoApkFilterByArch": "Attempt to filter APKs by CPU architecture if possible",
|
"autoApkFilterByArch": "Attempt to filter APKs by CPU architecture if possible",
|
||||||
"overrideSource": "Override Source",
|
"overrideSource": "Override Source",
|
||||||
|
"dontShowAgain": "Don't show this again",
|
||||||
|
"dontShowTrackOnlyWarnings": "Don't Show 'Track-Only' Warnings",
|
||||||
|
"dontShowAPKOriginWarnings": "Don't Show APK Origin Warnings",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Remove App?",
|
"one": "Remove App?",
|
||||||
"other": "Remove Apps?"
|
"other": "Remove Apps?"
|
||||||
|
@@ -224,6 +224,10 @@
|
|||||||
"standardVersionDetection": "تشخیص نسخه استاندارد",
|
"standardVersionDetection": "تشخیص نسخه استاندارد",
|
||||||
"groupByCategory": "گروه بر اساس دسته",
|
"groupByCategory": "گروه بر اساس دسته",
|
||||||
"autoApkFilterByArch": "در صورت امکان سعی کنید APKها را بر اساس معماری CPU فیلتر کنید",
|
"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": {
|
"removeAppQuestion": {
|
||||||
"one": "برنامه حذف شود؟",
|
"one": "برنامه حذف شود؟",
|
||||||
"other": "برنامه ها حذف شوند؟"
|
"other": "برنامه ها حذف شوند؟"
|
||||||
|
@@ -224,6 +224,10 @@
|
|||||||
"standardVersionDetection": "Détection de version standard",
|
"standardVersionDetection": "Détection de version standard",
|
||||||
"groupByCategory": "Group by Category",
|
"groupByCategory": "Group by Category",
|
||||||
"autoApkFilterByArch": "Attempt to filter APKs by CPU architecture if possible",
|
"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": {
|
"removeAppQuestion": {
|
||||||
"one": "Supprimer l'application ?",
|
"one": "Supprimer l'application ?",
|
||||||
"other": "Supprimer les applications ?"
|
"other": "Supprimer les applications ?"
|
||||||
|
@@ -223,6 +223,10 @@
|
|||||||
"standardVersionDetection": "Alapért. verzió érzékelés",
|
"standardVersionDetection": "Alapért. verzió érzékelés",
|
||||||
"groupByCategory": "Csoportosítás Kategória alapján",
|
"groupByCategory": "Csoportosítás Kategória alapján",
|
||||||
"autoApkFilterByArch": "Ha lehetséges, próbálja CPU architektúra szerint szűrni az APK-kat",
|
"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": {
|
"removeAppQuestion": {
|
||||||
"one": "Eltávolítja az alkalmazást?",
|
"one": "Eltávolítja az alkalmazást?",
|
||||||
"other": "Eltávolítja az alkalmazást?"
|
"other": "Eltávolítja az alkalmazást?"
|
||||||
|
@@ -224,6 +224,10 @@
|
|||||||
"standardVersionDetection": "Rilevamento di versione standard",
|
"standardVersionDetection": "Rilevamento di versione standard",
|
||||||
"groupByCategory": "Raggruppa per categoria",
|
"groupByCategory": "Raggruppa per categoria",
|
||||||
"autoApkFilterByArch": "Tenta di filtrare gli APK in base all'architettura della CPU, se possibile",
|
"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": {
|
"removeAppQuestion": {
|
||||||
"one": "Rimuovere l'App?",
|
"one": "Rimuovere l'App?",
|
||||||
"other": "Rimuovere le App?"
|
"other": "Rimuovere le App?"
|
||||||
|
@@ -224,6 +224,10 @@
|
|||||||
"standardVersionDetection": "標準のバージョン検出",
|
"standardVersionDetection": "標準のバージョン検出",
|
||||||
"groupByCategory": "カテゴリ別にグループ化する",
|
"groupByCategory": "カテゴリ別にグループ化する",
|
||||||
"autoApkFilterByArch": "可能であれば,CPUアーキテクチャによるAPKのフィルタリングを試みる",
|
"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": {
|
"removeAppQuestion": {
|
||||||
"one": "アプリを削除しますか?",
|
"one": "アプリを削除しますか?",
|
||||||
"other": "アプリを削除しますか?"
|
"other": "アプリを削除しますか?"
|
||||||
|
@@ -224,6 +224,10 @@
|
|||||||
"standardVersionDetection": "常规版本检测",
|
"standardVersionDetection": "常规版本检测",
|
||||||
"groupByCategory": "按类别分组显示",
|
"groupByCategory": "按类别分组显示",
|
||||||
"autoApkFilterByArch": "如果可能,尝试按 CPU 架构筛选 APK 文件",
|
"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": {
|
"removeAppQuestion": {
|
||||||
"one": "是否删除应用?",
|
"one": "是否删除应用?",
|
||||||
"other": "是否删除应用?"
|
"other": "是否删除应用?"
|
||||||
|
@@ -52,6 +52,18 @@ class _AddAppPageState extends State<AddAppPage> {
|
|||||||
searchnum++;
|
searchnum++;
|
||||||
}
|
}
|
||||||
var prevHost = pickedSource?.host;
|
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
|
var source = valid
|
||||||
? sourceProvider.getSource(userInput,
|
? sourceProvider.getSource(userInput,
|
||||||
overrideSource: pickedSourceOverride)
|
overrideSource: pickedSourceOverride)
|
||||||
@@ -71,24 +83,35 @@ class _AddAppPageState extends State<AddAppPage> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
getTrackOnlyConfirmationIfNeeded(bool userPickedTrackOnly) async {
|
Future<bool> getTrackOnlyConfirmationIfNeeded(
|
||||||
return (!((userPickedTrackOnly || pickedSource!.enforceTrackOnly) &&
|
bool userPickedTrackOnly, SettingsProvider settingsProvider,
|
||||||
// ignore: use_build_context_synchronously
|
{bool ignoreHideSetting = false}) async {
|
||||||
await showDialog(
|
var useTrackOnly = userPickedTrackOnly || pickedSource!.enforceTrackOnly;
|
||||||
context: context,
|
if (useTrackOnly &&
|
||||||
builder: (BuildContext ctx) {
|
(!settingsProvider.hideTrackOnlyWarning || ignoreHideSetting)) {
|
||||||
return GeneratedFormModal(
|
// ignore: use_build_context_synchronously
|
||||||
title: tr('xIsTrackOnly', args: [
|
var values = await showDialog(
|
||||||
pickedSource!.enforceTrackOnly
|
context: context,
|
||||||
? tr('source')
|
builder: (BuildContext ctx) {
|
||||||
: tr('app')
|
return GeneratedFormModal(
|
||||||
]),
|
initValid: true,
|
||||||
items: const [],
|
title: tr('xIsTrackOnly', args: [
|
||||||
message:
|
pickedSource!.enforceTrackOnly ? tr('source') : tr('app')
|
||||||
'${pickedSource!.enforceTrackOnly ? tr('appsFromSourceAreTrackOnly') : tr('youPickedTrackOnly')}\n\n${tr('trackOnlyAppDescription')}',
|
]),
|
||||||
);
|
items: [
|
||||||
}) ==
|
[GeneratedFormSwitch('hide', label: tr('dontShowAgain'))]
|
||||||
null));
|
],
|
||||||
|
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(
|
getReleaseDateAsVersionConfirmationIfNeeded(
|
||||||
@@ -116,7 +139,8 @@ class _AddAppPageState extends State<AddAppPage> {
|
|||||||
var settingsProvider = context.read<SettingsProvider>();
|
var settingsProvider = context.read<SettingsProvider>();
|
||||||
var userPickedTrackOnly = additionalSettings['trackOnly'] == true;
|
var userPickedTrackOnly = additionalSettings['trackOnly'] == true;
|
||||||
App? app;
|
App? app;
|
||||||
if ((await getTrackOnlyConfirmationIfNeeded(userPickedTrackOnly)) &&
|
if ((await getTrackOnlyConfirmationIfNeeded(
|
||||||
|
userPickedTrackOnly, settingsProvider)) &&
|
||||||
(await getReleaseDateAsVersionConfirmationIfNeeded(
|
(await getReleaseDateAsVersionConfirmationIfNeeded(
|
||||||
userPickedTrackOnly))) {
|
userPickedTrackOnly))) {
|
||||||
var trackOnly = pickedSource!.enforceTrackOnly || userPickedTrackOnly;
|
var trackOnly = pickedSource!.enforceTrackOnly || userPickedTrackOnly;
|
||||||
|
@@ -286,6 +286,34 @@ class _SettingsPageState extends State<SettingsPage> {
|
|||||||
})
|
})
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
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(
|
const Divider(
|
||||||
height: 16,
|
height: 16,
|
||||||
),
|
),
|
||||||
|
@@ -332,13 +332,16 @@ class AppsProvider with ChangeNotifier {
|
|||||||
getHost(apkUrl.value) != getHost(app.url) &&
|
getHost(apkUrl.value) != getHost(app.url) &&
|
||||||
context != null) {
|
context != null) {
|
||||||
// ignore: use_build_context_synchronously
|
// ignore: use_build_context_synchronously
|
||||||
if (await showDialog(
|
var settingsProvider = context.read<SettingsProvider>();
|
||||||
context: context,
|
if (!(settingsProvider.hideAPKOriginWarning) &&
|
||||||
builder: (BuildContext ctx) {
|
// ignore: use_build_context_synchronously
|
||||||
return APKOriginWarningDialog(
|
await showDialog(
|
||||||
sourceUrl: app.url, apkUrl: apkUrl!.value);
|
context: context,
|
||||||
}) !=
|
builder: (BuildContext ctx) {
|
||||||
true) {
|
return APKOriginWarningDialog(
|
||||||
|
sourceUrl: app.url, apkUrl: apkUrl!.value);
|
||||||
|
}) !=
|
||||||
|
true) {
|
||||||
apkUrl = null;
|
apkUrl = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -163,6 +163,24 @@ class SettingsProvider with ChangeNotifier {
|
|||||||
notifyListeners();
|
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) {
|
String? getSettingString(String settingId) {
|
||||||
return prefs?.getString(settingId);
|
return prefs?.getString(settingId);
|
||||||
}
|
}
|
||||||
|
@@ -470,7 +470,7 @@ class SourceProvider {
|
|||||||
}
|
}
|
||||||
AppSource? source;
|
AppSource? source;
|
||||||
for (var s in sources.where((element) => element.host != null)) {
|
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;
|
source = s;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@@ -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
|
# 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
|
# 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.
|
# 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:
|
environment:
|
||||||
sdk: '>=2.18.2 <3.0.0'
|
sdk: '>=2.18.2 <3.0.0'
|
||||||
|
Reference in New Issue
Block a user