From c16cda1962312ff4e8a33cf107c156828c8a3712 Mon Sep 17 00:00:00 2001 From: Gregory Velichko Date: Fri, 19 Apr 2024 17:57:22 +0300 Subject: [PATCH] =?UTF-8?q?Make=20pretending=20to=20be=20a=20Google=20Play?= =?UTF-8?q?=20setting=20per=20app=20based=E2=9A=99=EF=B8=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/translations/en.json | 2 +- assets/translations/ru.json | 2 +- lib/pages/settings.dart | 26 ++++---------------------- lib/providers/apps_provider.dart | 13 +++++++------ lib/providers/settings_provider.dart | 9 --------- lib/providers/source_provider.dart | 5 +++++ 6 files changed, 18 insertions(+), 39 deletions(-) diff --git a/assets/translations/en.json b/assets/translations/en.json index 16e2bb9..7e2ce54 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -288,7 +288,7 @@ "shizukuBinderNotFound": "Shizuku service not found, probably it's not launched", "shizukuOld": "Old Shizuku version (<11), update it", "shizukuOldAndroidWithADB": "Shizuku running on Android < 8.1 with ADB, update Android or use Sui instead", - "shizukuPretendToBeGooglePlay": "Set Google Play as the installation source", + "shizukuPretendToBeGooglePlay": "Set Google Play as the installation source (if Shizuku is used)", "useSystemFont": "Use the system font", "useVersionCodeAsOSVersion": "Use app versionCode as OS-detected version", "requestHeader": "Request header", diff --git a/assets/translations/ru.json b/assets/translations/ru.json index 964eb85..8f79902 100644 --- a/assets/translations/ru.json +++ b/assets/translations/ru.json @@ -288,7 +288,7 @@ "shizukuBinderNotFound": "Совместимый сервис Shizuku не найден, возможно он не запущен", "shizukuOld": "Устаревшая версия Shizuku (<11), обновите", "shizukuOldAndroidWithADB": "Shizuku работает на Android < 8.1 с ADB, обновите Android или используйте Sui", - "shizukuPretendToBeGooglePlay": "Указать Google Play как источник установки", + "shizukuPretendToBeGooglePlay": "Указать Google Play как источник установки (если используется Shizuku)", "useSystemFont": "Использовать системный шрифт", "useVersionCodeAsOSVersion": "Использовать код версии приложения как версию, обнаруженную ОС", "requestHeader": "Заголовок запроса", diff --git a/lib/pages/settings.dart b/lib/pages/settings.dart index 51a5029..f874b76 100644 --- a/lib/pages/settings.dart +++ b/lib/pages/settings.dart @@ -55,21 +55,21 @@ class _SettingsPageState extends State { updateInterval = valInterpolated; updateIntervalLabel = plural('minute', valInterpolated); } else if (valInterpolated < 8 * 60) { - int valRounded = (valInterpolated / 15).ceil() * 15; + int valRounded = (valInterpolated / 15).floor() * 15; updateInterval = valRounded; updateIntervalLabel = plural('hour', valRounded ~/ 60); int mins = valRounded % 60; if (mins != 0) updateIntervalLabel += " ${plural('minute', mins)}"; } else if (valInterpolated < 24 * 60) { - int valRounded = (valInterpolated / 30).ceil() * 30; + int valRounded = (valInterpolated / 30).floor() * 30; updateInterval = valRounded; updateIntervalLabel = plural('hour', valRounded / 60); } else if (valInterpolated < 7 * 24 * 60){ - int valRounded = (valInterpolated / (12 * 60)).ceil() * 12 * 60; + int valRounded = (valInterpolated / (12 * 60)).floor() * 12 * 60; updateInterval = valRounded; updateIntervalLabel = plural('day', valRounded / (24 * 60)); } else { - int valRounded = (valInterpolated / (24 * 60)).ceil() * 24 * 60; + int valRounded = (valInterpolated / (24 * 60)).floor() * 24 * 60; updateInterval = valRounded; updateIntervalLabel = plural('day', valRounded ~/ (24 * 60)); } @@ -501,24 +501,6 @@ class _SettingsPageState extends State { }) ], ), - if (settingsProvider.useShizuku) - Column( - children: [ - height16, - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Flexible( - child: Text(tr('shizukuPretendToBeGooglePlay'))), - Switch( - value: settingsProvider.pretendToBeGooglePlay, - onChanged: (value) { - settingsProvider.pretendToBeGooglePlay = value; - }) - ], - ) - ], - ), height32, Text( tr('sourceSpecific'), diff --git a/lib/providers/apps_provider.dart b/lib/providers/apps_provider.dart index fc674b0..7d224ee 100644 --- a/lib/providers/apps_provider.dart +++ b/lib/providers/apps_provider.dart @@ -573,7 +573,7 @@ class AppsProvider with ChangeNotifier { Future installXApkDir( DownloadedXApkDir dir, BuildContext? firstTimeWithContext, - {bool needsBGWorkaround = false}) async { + {bool needsBGWorkaround = false, bool shizukuPretendToBeGooglePlay = false}) async { // We don't know which APKs in an XAPK are supported by the user's device // So we try installing all of them and assume success if at least one installed // If 0 APKs installed, throw the first install error encountered @@ -588,7 +588,8 @@ class AppsProvider with ChangeNotifier { somethingInstalled = somethingInstalled || await installApk( DownloadedApk(dir.appId, file), firstTimeWithContext, - needsBGWorkaround: needsBGWorkaround); + needsBGWorkaround: needsBGWorkaround, + shizukuPretendToBeGooglePlay: shizukuPretendToBeGooglePlay); } catch (e) { logs.add( 'Could not install APK from XAPK \'${file.path}\': ${e.toString()}'); @@ -611,7 +612,7 @@ class AppsProvider with ChangeNotifier { Future installApk( DownloadedApk file, BuildContext? firstTimeWithContext, - {bool needsBGWorkaround = false}) async { + {bool needsBGWorkaround = false, bool shizukuPretendToBeGooglePlay = false}) async { if (firstTimeWithContext != null && settingsProvider.beforeNewInstallsShareToAppVerifier && (await getInstalledInfo('dev.soupslurpr.appverifier')) != null) { @@ -655,7 +656,7 @@ class AppsProvider with ChangeNotifier { code = await AndroidPackageInstaller.installApk(apkFilePath: file.file.path); } else { code = await ShizukuApkInstaller.installAPK(file.file.uri.toString(), - settingsProvider.pretendToBeGooglePlay ? "com.android.vending" : ""); + shizukuPretendToBeGooglePlay ? "com.android.vending" : ""); } bool installed = false; if (code != null && code != 0 && code != 3) { @@ -858,7 +859,7 @@ class AppsProvider with ChangeNotifier { installApk(downloadedFile, contextIfNewInstall, needsBGWorkaround: true); } else { // ignore: use_build_context_synchronously - sayInstalled = await installApk(downloadedFile, contextIfNewInstall); + sayInstalled = await installApk(downloadedFile, contextIfNewInstall, shizukuPretendToBeGooglePlay: apps[id]!.app.additionalSettings['shizukuPretendToBeGooglePlay'] == true); } } else { if (needBGWorkaround) { @@ -866,7 +867,7 @@ class AppsProvider with ChangeNotifier { installXApkDir(downloadedDir!, contextIfNewInstall, needsBGWorkaround: true); } else { // ignore: use_build_context_synchronously - sayInstalled = await installXApkDir(downloadedDir!, contextIfNewInstall); + sayInstalled = await installXApkDir(downloadedDir!, contextIfNewInstall, shizukuPretendToBeGooglePlay: apps[id]!.app.additionalSettings['shizukuPretendToBeGooglePlay'] == true); } } if (willBeSilent && context == null) { diff --git a/lib/providers/settings_provider.dart b/lib/providers/settings_provider.dart index 25c69f0..fc3e78e 100644 --- a/lib/providers/settings_provider.dart +++ b/lib/providers/settings_provider.dart @@ -61,15 +61,6 @@ class SettingsProvider with ChangeNotifier { notifyListeners(); } - bool get pretendToBeGooglePlay{ - return prefs?.getBool('pretendToBeGooglePlay') ?? false; - } - - set pretendToBeGooglePlay(bool pretendToBeGooglePlay) { - prefs?.setBool('pretendToBeGooglePlay', pretendToBeGooglePlay); - notifyListeners(); - } - ThemeSettings get theme { return ThemeSettings .values[prefs?.getInt('theme') ?? ThemeSettings.system.index]; diff --git a/lib/providers/source_provider.dart b/lib/providers/source_provider.dart index d69b33e..20de673 100644 --- a/lib/providers/source_provider.dart +++ b/lib/providers/source_provider.dart @@ -521,6 +521,11 @@ abstract class AppSource { label: tr('autoApkFilterByArch'), defaultValue: true) ], [GeneratedFormTextField('appName', label: tr('appName'), required: false)], + [ + GeneratedFormSwitch('shizukuPretendToBeGooglePlay', + label: tr('shizukuPretendToBeGooglePlay'), + defaultValue: false) + ], [ GeneratedFormSwitch('exemptFromBackgroundUpdates', label: tr('exemptFromBackgroundUpdates'))