Skip to content

Commit

Permalink
Fix broadcast receiver on Android 14
Browse files Browse the repository at this point in the history
  • Loading branch information
louischan-oursky committed Jul 10, 2024
1 parent be4a9e0 commit 3778c6b
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 2 deletions.
1 change: 1 addition & 0 deletions sdk/src/main/java/com/oursky/authgear/latte/Latte.kt
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,7 @@ class Latte(
val listener = object : LatteFragmentListener<Uri> {
override fun onResetPasswordCompleted(resumeWith: (Result<Uri>) -> Unit) {
val broadcastIntent = Intent(BroadcastType.RESET_PASSWORD_COMPLETED.action)
broadcastIntent.setPackage(authgear.core.application.applicationContext.packageName)
authgear.core.application.sendOrderedBroadcast(broadcastIntent, null)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import android.content.Intent
import android.content.IntentFilter
import android.graphics.Color
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
Expand Down Expand Up @@ -194,34 +195,39 @@ internal class LatteFragment() : Fragment() {
private fun broadcastOnOpenEmailClientIntent() {
val ctx = context ?: return
val broadcastIntent = Intent(latteID)
broadcastIntent.setPackage(ctx.applicationContext.packageName)
broadcastIntent.putExtra(INTENT_KEY_TYPE, BroadcastType.OPEN_EMAIL_CLIENT.toString())
ctx.sendOrderedBroadcast(broadcastIntent, null)
}

private fun broadcastOnOpenSMSClientIntent() {
val ctx = context ?: return
val broadcastIntent = Intent(latteID)
broadcastIntent.setPackage(ctx.applicationContext.packageName)
broadcastIntent.putExtra(INTENT_KEY_TYPE, BroadcastType.OPEN_SMS_CLIENT.toString())
ctx.sendOrderedBroadcast(broadcastIntent, null)
}

private fun broadcastOnReauthWithBiometricIntent() {
val ctx = context ?: return
val broadcastIntent = Intent(latteID)
broadcastIntent.setPackage(ctx.applicationContext.packageName)
broadcastIntent.putExtra(INTENT_KEY_TYPE, BroadcastType.REAUTH_WITH_BIOMETRIC.toString())
ctx.sendOrderedBroadcast(broadcastIntent, null)
}

private fun broadcastOnResetPasswordCompletedIntent() {
val ctx = context ?: return
val broadcastIntent = Intent(latteID)
broadcastIntent.setPackage(ctx.applicationContext.packageName)
broadcastIntent.putExtra(INTENT_KEY_TYPE, BroadcastType.RESET_PASSWORD_COMPLETED.toString())
ctx.sendOrderedBroadcast(broadcastIntent, null)
}

private fun broadcastTrackingIntent(event: LatteTrackingEvent) {
val ctx = context ?: return
val broadcastIntent = Intent(latteID)
broadcastIntent.setPackage(ctx.applicationContext.packageName)
broadcastIntent.putExtra(INTENT_KEY_TYPE, BroadcastType.TRACKING.toString())
broadcastIntent.putExtra(INTENT_KEY_EVENT, Json.encodeToString(event))
ctx.sendOrderedBroadcast(broadcastIntent, null)
Expand All @@ -230,6 +236,7 @@ internal class LatteFragment() : Fragment() {
private fun broadcastCompleteIntent(result: Result<WebViewResult>) {
val ctx = context ?: return
val broadcastIntent = Intent(latteID)
broadcastIntent.setPackage(ctx.applicationContext.packageName)
broadcastIntent.putExtra(INTENT_KEY_TYPE, BroadcastType.COMPLETE.toString())
val latteResult: LatteResult = try {
val webViewResult = result.getOrThrow()
Expand Down Expand Up @@ -306,7 +313,11 @@ internal class LatteFragment() : Fragment() {
constructWebViewIfNeeded(ctx, webViewStateBundle)
removeWebViewFromParent(webView)
val intentFilter = IntentFilter(Latte.BroadcastType.RESET_PASSWORD_COMPLETED.action)
ctx.registerReceiver(broadcastReceiver, intentFilter)
if (Build.VERSION.SDK_INT >= 33) {
ctx.registerReceiver(broadcastReceiver, intentFilter, Context.RECEIVER_NOT_EXPORTED)
} else {
ctx.registerReceiver(broadcastReceiver, intentFilter)
}

return FrameLayout(requireContext(), null, 0, R.style.LatteFragmentTheme).apply {
addView(webView)
Expand Down Expand Up @@ -375,7 +386,11 @@ internal class LatteFragment() : Fragment() {
}
}
handle = ListenHandle(ctx, br)
ctx.registerReceiver(br, intentFilter)
if (Build.VERSION.SDK_INT >= 33) {
ctx.registerReceiver(br, intentFilter, Context.RECEIVER_NOT_EXPORTED)
} else {
ctx.registerReceiver(br, intentFilter)
}
return handle
}

Expand Down

0 comments on commit 3778c6b

Please sign in to comment.