costom tabs setting

This commit is contained in:
Fabian Freund
2026-07-07 17:17:07 +02:00
parent 9cdaa9735c
commit 1b4a74865a
13 changed files with 184 additions and 18 deletions
@@ -23,6 +23,7 @@ class IntentGatekeeperHostApiImpl(private val context: Context) : IntentGatekeep
companion object {
private const val PREFS_NAME = "weblibre_intent_gatekeeper"
private const val KEY_ENABLED = "enabled"
private const val KEY_CUSTOM_TABS_ENABLED = "custom_tabs_enabled"
private const val KEY_BLOCKED_PACKAGES = "blocked_packages"
private const val KEY_PENDING_ALWAYS_ALLOW = "pending_always_allow"
}
@@ -35,6 +36,13 @@ class IntentGatekeeperHostApiImpl(private val context: Context) : IntentGatekeep
.apply()
}
override fun setCustomTabsEnabled(enabled: Boolean) {
val prefs = context.applicationContext.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
prefs.edit()
.putBoolean(KEY_CUSTOM_TABS_ENABLED, enabled)
.apply()
}
override fun resolvePackageLabel(packageName: String): String? {
return try {
val pm = context.applicationContext.packageManager
@@ -340,6 +340,13 @@ interface IntentGatekeeperHostApi {
* [IntentReceiverActivity] can reject intents without launching Flutter.
*/
fun setConfig(enabled: Boolean, blockedPackages: List<String>)
/**
* Replicates whether the Custom Tabs feature is enabled to the native side.
* When disabled, [IntentReceiverActivity] routes external Custom Tab and
* share-with-URL intents to the main browser instead of launching the
* stripped-down custom-tab activity. Defaults to enabled on the native side.
*/
fun setCustomTabsEnabled(enabled: Boolean)
/**
* Resolves a package name to its user-visible application label via
* [PackageManager]. Returns `null` if the package is not installed or the
@@ -388,6 +395,24 @@ interface IntentGatekeeperHostApi {
channel.setMessageHandler(null)
}
}
run {
val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.simple_intent_receiver.IntentGatekeeperHostApi.setCustomTabsEnabled$separatedMessageChannelSuffix", codec)
if (api != null) {
channel.setMessageHandler { message, reply ->
val args = message as List<Any?>
val enabledArg = args[0] as Boolean
val wrapped: List<Any?> = try {
api.setCustomTabsEnabled(enabledArg)
listOf(null)
} catch (exception: Throwable) {
IntentPigeonUtils.wrapError(exception)
}
reply.reply(wrapped)
}
} else {
channel.setMessageHandler(null)
}
}
run {
val channel = BasicMessageChannel<Any?>(binaryMessenger, "dev.flutter.pigeon.simple_intent_receiver.IntentGatekeeperHostApi.resolvePackageLabel$separatedMessageChannelSuffix", codec)
if (api != null) {
@@ -301,6 +301,28 @@ class IntentGatekeeperHostApi {
;
}
/// Replicates whether the Custom Tabs feature is enabled to the native side.
/// When disabled, [IntentReceiverActivity] routes external Custom Tab and
/// share-with-URL intents to the main browser instead of launching the
/// stripped-down custom-tab activity. Defaults to enabled on the native side.
Future<void> setCustomTabsEnabled(bool enabled) async {
final pigeonVar_channelName = 'dev.flutter.pigeon.simple_intent_receiver.IntentGatekeeperHostApi.setCustomTabsEnabled$pigeonVar_messageChannelSuffix';
final pigeonVar_channel = BasicMessageChannel<Object?>(
pigeonVar_channelName,
pigeonChannelCodec,
binaryMessenger: pigeonVar_binaryMessenger,
);
final Future<Object?> pigeonVar_sendFuture = pigeonVar_channel.send(<Object?>[enabled]);
final pigeonVar_replyList = await pigeonVar_sendFuture as List<Object?>?;
_extractReplyValueOrThrow(
pigeonVar_replyList,
pigeonVar_channelName,
isNullValid: true,
)
;
}
/// Resolves a package name to its user-visible application label via
/// [PackageManager]. Returns `null` if the package is not installed or the
/// label cannot be resolved.
@@ -69,6 +69,12 @@ abstract class IntentGatekeeperHostApi {
/// [IntentReceiverActivity] can reject intents without launching Flutter.
void setConfig(bool enabled, List<String> blockedPackages);
/// Replicates whether the Custom Tabs feature is enabled to the native side.
/// When disabled, [IntentReceiverActivity] routes external Custom Tab and
/// share-with-URL intents to the main browser instead of launching the
/// stripped-down custom-tab activity. Defaults to enabled on the native side.
void setCustomTabsEnabled(bool enabled);
/// Resolves a package name to its user-visible application label via
/// [PackageManager]. Returns `null` if the package is not installed or the
/// label cannot be resolved.