From 7613b465f30f543511742d3c508de2ada749409b Mon Sep 17 00:00:00 2001 From: Akash Yadav Date: Mon, 13 Nov 2023 18:54:35 +0530 Subject: [PATCH] fix: remove misleading stacktrace log when launching application (fixes #1392) --- .../androidide/actions/etc/LaunchAppAction.kt | 2 +- .../androidide/actions/internalActionUtils.kt | 4 +-- .../itsaky/androidide/utils/IntentUtils.kt | 31 ++++++++++++------- resources/src/main/res/values/strings.xml | 2 +- 4 files changed, 24 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/itsaky/androidide/actions/etc/LaunchAppAction.kt b/app/src/main/java/com/itsaky/androidide/actions/etc/LaunchAppAction.kt index befba6da2..f10af4287 100644 --- a/app/src/main/java/com/itsaky/androidide/actions/etc/LaunchAppAction.kt +++ b/app/src/main/java/com/itsaky/androidide/actions/etc/LaunchAppAction.kt @@ -68,7 +68,7 @@ class LaunchAppAction(context: Context, override val order: Int) : EditorActivit } val activity = data.requireActivity() - IntentUtils.launchApp(activity, packageName) + IntentUtils.launchApp(activity, packageName, logError = false) } } diff --git a/app/src/main/java/com/itsaky/androidide/actions/internalActionUtils.kt b/app/src/main/java/com/itsaky/androidide/actions/internalActionUtils.kt index f06dd4c75..61565cf1d 100644 --- a/app/src/main/java/com/itsaky/androidide/actions/internalActionUtils.kt +++ b/app/src/main/java/com/itsaky/androidide/actions/internalActionUtils.kt @@ -28,7 +28,7 @@ import com.itsaky.androidide.utils.flashError /** * @see openApplicationModuleChooser */ -fun openApplicationModuleChooser(data: ActionData, callback: (AndroidModule) -> Unit) = +inline fun openApplicationModuleChooser(data: ActionData, crossinline callback: (AndroidModule) -> Unit) = openApplicationModuleChooser(data.requireContext(), callback) /** @@ -38,7 +38,7 @@ fun openApplicationModuleChooser(data: ActionData, callback: (AndroidModule) -> * * @param */ -fun openApplicationModuleChooser(context: Context, callback: (AndroidModule) -> Unit) { +inline fun openApplicationModuleChooser(context: Context, crossinline callback: (AndroidModule) -> Unit) { val log = ILogger.newInstance("ActionUtils") val projectManager = IProjectManager.getInstance() val applications = projectManager.getAndroidAppModules() diff --git a/app/src/main/java/com/itsaky/androidide/utils/IntentUtils.kt b/app/src/main/java/com/itsaky/androidide/utils/IntentUtils.kt index 97612e52c..ce3b12bb7 100644 --- a/app/src/main/java/com/itsaky/androidide/utils/IntentUtils.kt +++ b/app/src/main/java/com/itsaky/androidide/utils/IntentUtils.kt @@ -95,32 +95,37 @@ object IntentUtils { * @param context The context that will be used to fetch the launch intent. * @param packageName The package name of the application. */ - fun launchApp(context: Context, packageName: String) { + @JvmOverloads + fun launchApp(context: Context, packageName: String, logError: Boolean = true) : Boolean { if (Build.VERSION.SDK_INT >= 33) { - launchAppApi33(context, packageName) - return + return launchAppApi33(context, packageName, logError) } - doLaunchApp(context, packageName) + return doLaunchApp(context, packageName, logError) } - private fun doLaunchApp(context: Context, packageName: String) { + private fun doLaunchApp(context: Context, packageName: String, logError: Boolean = true) : Boolean { try { val launchIntent = context.packageManager.getLaunchIntentForPackage(packageName) - requireNotNull(launchIntent) { - "Cannot get launch intent for package '$packageName'. Is the application installed?" + if (launchIntent == null) { + flashError(R.string.msg_app_launch_failed) + return false } context.startActivity(launchIntent) + return true } catch (e: Throwable) { flashError(R.string.msg_app_launch_failed) - ILogger.instance().error("Failed to launch application with package name '$packageName'", e) + if (logError) { + ILogger.instance().error("Failed to launch application with package name '$packageName'", e) + } + return false } } @RequiresApi(33) - private fun launchAppApi33(context: Context, packageName: String) { - try { + private fun launchAppApi33(context: Context, packageName: String, logError: Boolean = true) : Boolean { + return try { val sender = context.packageManager.getLaunchIntentSenderForPackage(packageName) sender.sendIntent( context, @@ -129,9 +134,13 @@ object IntentUtils { null, null ) + true } catch (e: Throwable) { flashError(R.string.msg_app_launch_failed) - ILogger.instance().error("Failed to launch application with package name '$packageName'", e) + if (logError) { + ILogger.instance().error("Failed to launch app", e) + } + false } } } diff --git a/resources/src/main/res/values/strings.xml b/resources/src/main/res/values/strings.xml index b83c25488..3166b37de 100644 --- a/resources/src/main/res/values/strings.xml +++ b/resources/src/main/res/values/strings.xml @@ -534,7 +534,7 @@ Theme Select a theme for AndroidIDE (requires restart). Project configuration - Failed to launch application. See IDE logs for more info. + Launch failed. Install the application first. Diagnostics enabled (EXPERIMENTAL) Whether the Java source files should be analyzed for errors or not. Reload color schemes