From 8fc86dbe021b9497fa336b937b3200a41b3057a3 Mon Sep 17 00:00:00 2001 From: Ushie Date: Sat, 13 May 2023 04:54:35 +0300 Subject: [PATCH] feat: allow selecting installed if app is full apk --- assets/i18n/en_US.json | 2 +- .../views/app_selector/app_selector_view.dart | 11 +-------- .../app_selector/app_selector_viewmodel.dart | 24 +++++++++++++++++++ 3 files changed, 26 insertions(+), 11 deletions(-) diff --git a/assets/i18n/en_US.json b/assets/i18n/en_US.json index 8274a347..03b28c54 100644 --- a/assets/i18n/en_US.json +++ b/assets/i18n/en_US.json @@ -78,7 +78,7 @@ "errorMessage": "Unable to use selected application", "downloadToast": "Download function is not available yet", "featureNotAvailable": "Feature not implemented", - "featureNotAvailableText": "This feature has not been added yet for non-root. You'll need to select APK files from storage for now." + "featureNotAvailableText": "This application is a split APK and cannot be selected. Unfortunately, this feature is only available for rooted users at the moment. However, you can still install the application by selecting its APK files from your device's storage instead" }, "patchesSelectorView": { "viewTitle": "Select patches", diff --git a/lib/ui/views/app_selector/app_selector_view.dart b/lib/ui/views/app_selector/app_selector_view.dart index 620c7b68..840e6619 100644 --- a/lib/ui/views/app_selector/app_selector_view.dart +++ b/lib/ui/views/app_selector/app_selector_view.dart @@ -111,16 +111,7 @@ class _AppSelectorViewState extends State { model.getSuggestedVersion( app.packageName, ), - onTap: () { - model.isRooted - ? model.selectApp(app).then( - (_) => Navigator.of(context) - .pop(), - ) - : model.showSelectFromStorageDialog( - context, - ); - }, + onTap: () => model.canSelectInstalled(context, app.packageName), ), ) .toList(), diff --git a/lib/ui/views/app_selector/app_selector_viewmodel.dart b/lib/ui/views/app_selector/app_selector_viewmodel.dart index d747e1b8..9eacb93c 100644 --- a/lib/ui/views/app_selector/app_selector_viewmodel.dart +++ b/lib/ui/views/app_selector/app_selector_viewmodel.dart @@ -65,6 +65,14 @@ class AppSelectorViewModel extends BaseViewModel { return _patcherAPI.getSuggestedVersion(packageName); } + Future checkSplitApk(String packageName) async { + final app = await DeviceApps.getApp(packageName); + if (app != null) { + return app.isSplit; + } + return true; + } + Future selectApp(ApplicationWithIcon application) async { locator().selectedApp = PatchedApplication( name: application.appName, @@ -78,6 +86,22 @@ class AppSelectorViewModel extends BaseViewModel { locator().loadLastSelectedPatches(); } + Future canSelectInstalled( + BuildContext context, + String packageName, + ) async { + final app = + await DeviceApps.getApp(packageName, true) as ApplicationWithIcon?; + if (app != null) { + if (await checkSplitApk(packageName) && !isRooted) { + return showSelectFromStorageDialog(context); + } else if (!await checkSplitApk(packageName) || isRooted) { + selectApp(app); + Navigator.pop(context); + } + } + } + Future showSelectFromStorageDialog(BuildContext context) async { return showDialog( context: context,