@@ -9,7 +9,9 @@ package com.nextcloud.android.common.core.utils.ecosystem
99
1010import android.app.Activity
1111import android.content.ActivityNotFoundException
12+ import android.content.Context
1213import android.content.Intent
14+ import android.content.pm.PackageManager
1315import android.util.Log
1416import android.view.View
1517import androidx.core.net.toUri
@@ -40,7 +42,7 @@ class EcosystemManager(private val activity: Activity) {
4042 )
4143
4244 fun openApp (app : EcosystemApp , accountName : String? ) {
43- Log .d(tag, " open app, package name: ${app.packageName } , account name: $accountName " )
45+ Log .d(tag, " open app, package name: ${app.packageNames } , account name: $accountName " )
4446
4547 // check account name emptiness
4648 if (accountName.isNullOrBlank()) {
@@ -57,7 +59,7 @@ class EcosystemManager(private val activity: Activity) {
5759 }
5860
5961 // validate package name
60- val intent = activity.packageManager.getLaunchIntentForPackage (app.packageName )
62+ val intent = activity.getLaunchIntentForPackages (app.packageNames )
6163 if (intent == null ) {
6264 Log .w(tag, " given package name cannot be found" )
6365 showSnackbar(R .string.ecosystem_app_not_found)
@@ -71,28 +73,43 @@ class EcosystemManager(private val activity: Activity) {
7173 activity.startActivity(intent)
7274 } catch (e: Exception ) {
7375 showSnackbar(R .string.ecosystem_store_open_failed)
74- Log .e(tag, " exception launching app ${app.packageName} : $e " )
76+ Log .e(tag, " exception launching app ${app.packageNames} : $e " )
77+ }
78+ }
79+
80+
81+ /* *
82+ * Finds the first launchable intent from a list of package names.
83+ *
84+ * @return launch Intent or null if none of the apps are installed
85+ */
86+ private fun Context.getLaunchIntentForPackages (
87+ packageNames : List <String >
88+ ): Intent ? {
89+ val pm: PackageManager = packageManager
90+ return packageNames.firstNotNullOfOrNull { packageName ->
91+ pm.getLaunchIntentForPackage(packageName)
7592 }
7693 }
7794
7895 private fun openAppInStore (app : EcosystemApp ) {
7996 Log .d(tag, " open app in store: $app " )
8097
81- val intent = Intent (Intent .ACTION_VIEW , " market://details?id=${app.packageName } " .toUri())
98+ val intent = Intent (Intent .ACTION_VIEW , " market://details?id=${app.packageNames } " .toUri())
8299
83100 try {
84101 activity.startActivity(intent)
85102 } catch (_: ActivityNotFoundException ) {
86103 val webIntent = Intent (
87104 Intent .ACTION_VIEW ,
88- " https://play.google.com/store/apps/details?id=${app.packageName } " .toUri()
105+ " https://play.google.com/store/apps/details?id=${app.packageNames } " .toUri()
89106 )
90107
91108 try {
92109 activity.startActivity(webIntent)
93110 } catch (e: Exception ) {
94111 showSnackbar(R .string.ecosystem_store_open_failed)
95- Log .e(tag, " No browser available to open store for ${app.packageName } , exception: " , e)
112+ Log .e(tag, " No browser available to open store for ${app.packageNames } , exception: " , e)
96113 }
97114 }
98115 }
0 commit comments