From f280d3666706eba296e52dfbd1269b3cf2eb1503 Mon Sep 17 00:00:00 2001 From: Josia Pietsch Date: Tue, 28 Jan 2025 02:15:04 +0100 Subject: [PATCH] add handler for ActivityNotFoundException --- .../java/de/jrpie/android/launcher/Functions.kt | 10 ++++++++-- .../de/jrpie/android/launcher/actions/AppAction.kt | 7 ++++++- .../launcher/ui/list/apps/ListFragmentApps.kt | 13 ++++++++++++- app/src/main/res/values/strings.xml | 2 ++ 4 files changed, 28 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/de/jrpie/android/launcher/Functions.kt b/app/src/main/java/de/jrpie/android/launcher/Functions.kt index ebfc070..721caa2 100644 --- a/app/src/main/java/de/jrpie/android/launcher/Functions.kt +++ b/app/src/main/java/de/jrpie/android/launcher/Functions.kt @@ -3,6 +3,7 @@ package de.jrpie.android.launcher import android.app.Activity import android.app.Service import android.app.role.RoleManager +import android.content.ActivityNotFoundException import android.content.ClipData import android.content.ClipboardManager import android.content.Context @@ -16,6 +17,7 @@ import android.os.UserHandle import android.os.UserManager import android.provider.Settings import android.util.Log +import android.widget.Toast import de.jrpie.android.launcher.actions.Action import de.jrpie.android.launcher.actions.Gesture import de.jrpie.android.launcher.apps.AppInfo @@ -83,14 +85,18 @@ fun getPrivateSpaceUser(context: Context): UserHandle? { val userManager = context.getSystemService(Context.USER_SERVICE) as UserManager val launcherApps = context.getSystemService(Context.LAUNCHER_APPS_SERVICE) as LauncherApps return userManager.userProfiles.firstOrNull { u -> - launcherApps.getLauncherUserInfo(u)?.userType == UserManager.USER_TYPE_PROFILE_PRIVATE + launcherApps.getLauncherUserInfo(u)?.userType == UserManager.USER_TYPE_PROFILE_PRIVATE } } fun openInBrowser(url: String, context: Context) { val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url)) intent.putExtras(Bundle().apply { putBoolean("new_window", true) }) - context.startActivity(intent) + try { + context.startActivity(intent) + } catch (_: ActivityNotFoundException) { + Toast.makeText(context, R.string.toast_activity_not_found_browser, Toast.LENGTH_LONG).show() + } } fun openTutorial(context: Context) { diff --git a/app/src/main/java/de/jrpie/android/launcher/actions/AppAction.kt b/app/src/main/java/de/jrpie/android/launcher/actions/AppAction.kt index 2bb3780..4b71a90 100644 --- a/app/src/main/java/de/jrpie/android/launcher/actions/AppAction.kt +++ b/app/src/main/java/de/jrpie/android/launcher/actions/AppAction.kt @@ -2,6 +2,7 @@ package de.jrpie.android.launcher.actions import android.app.AlertDialog import android.app.Service +import android.content.ActivityNotFoundException import android.content.Context import android.content.Intent import android.content.pm.LauncherApps @@ -34,7 +35,11 @@ class AppAction(val app: AppInfo) : Action { context.packageManager.getLaunchIntentForPackage(packageName)?.let { it.addCategory(Intent.CATEGORY_LAUNCHER) - context.startActivity(it) + try { + context.startActivity(it) + } catch (_: ActivityNotFoundException) { + return false + } return true } diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/list/apps/ListFragmentApps.kt b/app/src/main/java/de/jrpie/android/launcher/ui/list/apps/ListFragmentApps.kt index 55f07a5..c52f951 100644 --- a/app/src/main/java/de/jrpie/android/launcher/ui/list/apps/ListFragmentApps.kt +++ b/app/src/main/java/de/jrpie/android/launcher/ui/list/apps/ListFragmentApps.kt @@ -1,11 +1,13 @@ package de.jrpie.android.launcher.ui.list.apps +import android.content.ActivityNotFoundException import android.content.Intent import android.content.SharedPreferences import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Toast import androidx.fragment.app.Fragment import de.jrpie.android.launcher.R import de.jrpie.android.launcher.apps.AppFilter @@ -91,7 +93,16 @@ class ListFragmentApps : Fragment(), UIObject { if (LauncherPreferences.functionality().searchWeb()) { val i = Intent(Intent.ACTION_WEB_SEARCH).putExtra("query", query) - activity?.startActivity(i) + try { + activity?.startActivity(i) + } catch (_: ActivityNotFoundException) { + Toast.makeText( + requireContext(), + R.string.toast_activity_not_found_search_web, + Toast.LENGTH_LONG + ).show() + } + } else { appsRecyclerAdapter.selectItem(0) } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0910170..a2e0c37 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -328,5 +328,7 @@ Cancel Open Source Licenses Open Source Licenses + No app found to handle search. + Can\'t open URL: no browser found.