NTP-61120 || Excluded Navi upi app from RPD Intent (#16033)

This commit is contained in:
Aman S
2025-05-02 21:24:04 +05:30
committed by GitHub
parent b1bed219d9
commit 254ce3f6d5
4 changed files with 58 additions and 6 deletions

View File

@@ -14,8 +14,17 @@
android:name="android.hardware.camera"
android:required="false" />
<queries>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="upi" />
</intent>
</queries>
<application>
<activity
android:name="com.navi.ap.common.ui.ApplicationPlatformActivity"
android:exported="true"

View File

@@ -22,7 +22,7 @@ fun InitActionsHandler(viewModel: ApplicationPlatformVM, activity: ApplicationPl
HandleUploadDataAction(context = LocalContext.current, viewModel = viewModel)
HandleSdkAction(viewModel = viewModel, activity = activity)
HandleApiAction(viewModel = viewModel, activity = activity)
HandleLaunchIntentAction(viewModel = viewModel)
HandleLaunchIntentAction(viewModel = viewModel, context = LocalContext.current)
DownloadActionHandler(viewModel = viewModel, activity = activity)
SystemUiActionHandler(viewModel = viewModel)
HandlePostLocationAction(viewModel = viewModel, activity = activity)

View File

@@ -10,6 +10,7 @@ package com.navi.ap.common.handler
import android.accounts.AccountManager
import android.app.Activity
import android.content.ActivityNotFoundException
import android.content.Context
import android.content.Intent
import android.net.Uri
import androidx.activity.compose.ManagedActivityResultLauncher
@@ -25,6 +26,7 @@ import com.google.android.gms.common.AccountPicker
import com.navi.ap.common.viewmodel.ApplicationPlatformVM
import com.navi.ap.utils.getResolvedFieldValue
import com.navi.ap.utils.injector.FieldInjector
import com.navi.base.utils.isNotNullAndNotEmpty
import com.navi.base.utils.orTrue
import com.navi.common.uitron.model.action.LaunchDefaultIntentAction
import com.navi.common.uitron.model.action.LaunchIntentAction
@@ -37,7 +39,7 @@ import com.navi.uitron.model.data.UiTronActionData
import kotlinx.coroutines.launch
@Composable
fun HandleLaunchIntentAction(viewModel: ApplicationPlatformVM) {
fun HandleLaunchIntentAction(viewModel: ApplicationPlatformVM, context: Context) {
val action = remember { mutableStateOf(LaunchIntentAction()) }
val intentResult = getDefaultResultLauncher(viewModel = viewModel, action = action.value)
LaunchedEffect(Unit) {
@@ -49,6 +51,7 @@ fun HandleLaunchIntentAction(viewModel: ApplicationPlatformVM) {
launchIntentAction = action,
intentResult = intentResult,
viewModel = viewModel,
context = context,
)
}
else -> Unit
@@ -61,24 +64,63 @@ private fun handleLaunchIntentAction(
launchIntentAction: MutableState<LaunchIntentAction>,
intentResult: ManagedActivityResultLauncher<Intent, ActivityResult>,
viewModel: ApplicationPlatformVM,
context: Context,
) {
when (launchIntentAction.value.intentType) {
LaunchIntentType.DEFAULT.name -> {
(launchIntentAction.value as? LaunchDefaultIntentAction)?.let {
launchDefaultIntentAction ->
var uri = launchIntentAction.value.intentUriString?.value
launchIntentAction.value.intentUriString?.let {
launchIntentAction.value.intentUriString?.let { intentUriString ->
val resolvedValues =
getResolvedFieldValue(fields = listOf(it), handle = viewModel.handle)
uri = resolvedValues[it.name]?.toString()
getResolvedFieldValue(
fields = listOf(intentUriString),
handle = viewModel.handle,
)
uri = resolvedValues[intentUriString.name]?.toString()
}
val intent =
Intent().apply {
action = launchIntentAction.value.intentAction
data = Uri.parse(uri)
}
intentResult.launch(intent)
if (launchDefaultIntentAction.excludePackageList.isNotNullAndNotEmpty()) {
val packageManager = context.packageManager
val resolveInfos = packageManager.queryIntentActivities(intent, 0)
val filteredIntents =
resolveInfos
.filterNot {
launchDefaultIntentAction.excludePackageList?.contains(
it.activityInfo.packageName
) == true
}
.map { resolveInfo ->
Intent(intent).apply {
setPackage(resolveInfo.activityInfo.packageName)
setClassName(
resolveInfo.activityInfo.packageName,
resolveInfo.activityInfo.name,
)
}
}
if (filteredIntents.isNotEmpty()) {
val chooserIntent =
Intent.createChooser(filteredIntents[0], "Open with").apply {
putExtra(
Intent.EXTRA_INITIAL_INTENTS,
filteredIntents.drop(1).toTypedArray(),
)
}
intentResult.launch(chooserIntent)
}
} else {
intentResult.launch(intent)
}
}
}
LaunchIntentType.OPEN_TARGET_APP.name -> {
(launchIntentAction.value as? LaunchTargetAppIntentAction)?.let { it ->
var uri = it.intentUriString?.value

View File

@@ -19,6 +19,7 @@ open class LaunchIntentAction(
@SerializedName("intentType") val intentType: String? = null,
@SerializedName("intentAction") val intentAction: String? = null,
@SerializedName("intentUriString") val intentUriString: FillApiData? = null,
@SerializedName("excludePackageList") val excludePackageList: List<String>? = null,
@SerializedName("onSuccess") var onSuccess: UiTronActionData? = null,
@SerializedName("onFailure") val onFailure: UiTronActionData? = null,
@SerializedName("onExit") val onExit: UiTronActionData? = null,