NTP-61120 || Excluded Navi upi app from RPD Intent (#16033)
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user