Skip to content

Commit 71ea056

Browse files
committed
support multiple package name
Signed-off-by: alperozturk96 <alper_ozturk@proton.me>
1 parent c2577ac commit 71ea056

File tree

2 files changed

+44
-10
lines changed

2 files changed

+44
-10
lines changed

core/src/main/java/com/nextcloud/android/common/core/utils/ecosystem/EcosystemApp.kt

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,25 @@
77

88
package com.nextcloud.android.common.core.utils.ecosystem
99

10-
enum class EcosystemApp(val packageName: String) {
11-
FILES("com.nextcloud.client"),
12-
NOTES("it.niedermann.owncloud.notes"),
13-
TALK("com.nextcloud.talk2")
10+
enum class EcosystemApp(val packageNames: List<String>) {
11+
FILES(
12+
listOf(
13+
"com.nextcloud.client", // generic, gplay, huawei
14+
"com.nextcloud.android.beta", // versionDev
15+
"com.nextcloud.android.qa" // qa
16+
)
17+
),
18+
NOTES(
19+
listOf(
20+
"it.niedermann.owncloud.notes", // play, fdroid
21+
"it.niedermann.owncloud.notes.dev", // dev
22+
"it.niedermann.owncloud.notes.qa" // qa
23+
)
24+
),
25+
TALK(
26+
listOf(
27+
"com.nextcloud.talk2", // generic, gplay
28+
"com.nextcloud.talk2.qa" // qa
29+
)
30+
)
1431
}

core/src/main/java/com/nextcloud/android/common/core/utils/ecosystem/EcosystemManager.kt

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ package com.nextcloud.android.common.core.utils.ecosystem
99

1010
import android.app.Activity
1111
import android.content.ActivityNotFoundException
12+
import android.content.Context
1213
import android.content.Intent
14+
import android.content.pm.PackageManager
1315
import android.util.Log
1416
import android.view.View
1517
import 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

Comments
 (0)