diff --git a/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt b/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt index e3cf59048253..9b52e51c02e2 100644 --- a/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt +++ b/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt @@ -1320,6 +1320,7 @@ class BrowserTabFragment : // want to ensure that we aren't offering to inject credentials from an inactive tab hideDialogWithTag(CredentialAutofillPickerDialog.TAG) + sitePermissionsDialogLauncher.forceDismissDialog() } } }, diff --git a/site-permissions/site-permissions-api/src/main/java/com/duckduckgo/site/permissions/api/SitePermissionsDialogLauncher.kt b/site-permissions/site-permissions-api/src/main/java/com/duckduckgo/site/permissions/api/SitePermissionsDialogLauncher.kt index da2999f06c88..d1f8980a9f8e 100644 --- a/site-permissions/site-permissions-api/src/main/java/com/duckduckgo/site/permissions/api/SitePermissionsDialogLauncher.kt +++ b/site-permissions/site-permissions-api/src/main/java/com/duckduckgo/site/permissions/api/SitePermissionsDialogLauncher.kt @@ -35,4 +35,9 @@ interface SitePermissionsDialogLauncher { request: PermissionRequest, permissionsGrantedListener: SitePermissionsGrantedListener, ) + + /** + * This method could be called to force dismiss the site permission dialog that is currently showing, if any. + */ + fun forceDismissDialog() } diff --git a/site-permissions/site-permissions-impl/src/main/java/com/duckduckgo/site/permissions/impl/SitePermissionsDialogActivityLauncher.kt b/site-permissions/site-permissions-impl/src/main/java/com/duckduckgo/site/permissions/impl/SitePermissionsDialogActivityLauncher.kt index fa06340cd664..448f4c096bea 100644 --- a/site-permissions/site-permissions-impl/src/main/java/com/duckduckgo/site/permissions/impl/SitePermissionsDialogActivityLauncher.kt +++ b/site-permissions/site-permissions-impl/src/main/java/com/duckduckgo/site/permissions/impl/SitePermissionsDialogActivityLauncher.kt @@ -31,6 +31,7 @@ import com.duckduckgo.app.browser.favicon.FaviconManager import com.duckduckgo.app.di.AppCoroutineScope import com.duckduckgo.app.statistics.pixels.Pixel import com.duckduckgo.common.ui.view.button.ButtonType.GHOST +import com.duckduckgo.common.ui.view.dialog.DaxAlertDialog import com.duckduckgo.common.ui.view.dialog.TextAlertDialogBuilder import com.duckduckgo.common.ui.view.toPx import com.duckduckgo.common.utils.DispatcherProvider @@ -73,6 +74,7 @@ class SitePermissionsDialogActivityLauncher @Inject constructor( private lateinit var permissionsHandledAutomatically: List private var siteURL: String = "" private var tabId: String = "" + private var currentDialog: DaxAlertDialog? = null override fun registerPermissionLauncher(caller: ActivityResultCaller) { systemPermissionsHelper.registerPermissionLaunchers( @@ -165,7 +167,7 @@ class SitePermissionsDialogActivityLauncher @Inject constructor( R.string.preciseLocationSiteDialogSubtitle } - TextAlertDialogBuilder(activity) + this.currentDialog = TextAlertDialogBuilder(activity) .setTitle( String.format(activity.getString(R.string.sitePermissionsLocationDialogTitle), domain), ) @@ -196,8 +198,16 @@ class SitePermissionsDialogActivityLauncher @Inject constructor( rememberChoice = checked } }, - ) - .show() + ).build() + this.currentDialog?.show() + } + + override fun forceDismissDialog() { + this.currentDialog?.let { + if (it.isShowing()) { + this.currentDialog?.dismiss() + } + } } private fun showSitePermissionsRationaleDialog( @@ -208,7 +218,7 @@ class SitePermissionsDialogActivityLauncher @Inject constructor( onPermissionAllowed: (Boolean) -> Unit, ) { sendDialogImpressionPixel(pixelType) - TextAlertDialogBuilder(activity) + this.currentDialog = TextAlertDialogBuilder(activity) .setTitle(String.format(activity.getString(titleRes), url.websiteFromGeoLocationsApiOrigin())) .setMessage(messageRes) .setPositiveButton(R.string.sitePermissionsDialogAllowButton, GHOST) @@ -233,8 +243,8 @@ class SitePermissionsDialogActivityLauncher @Inject constructor( super.onCheckedChanged(checked) } }, - ) - .show() + ).build() + this.currentDialog?.show() } private fun showSiteDrmPermissionsDialog( @@ -263,7 +273,7 @@ class SitePermissionsDialogActivityLauncher @Inject constructor( // No session-based setting and no config --> proceed to show dialog val title = url.websiteFromGeoLocationsApiOrigin() - TextAlertDialogBuilder(activity) + this.currentDialog = TextAlertDialogBuilder(activity) .setTitle( String.format( activity.getString(R.string.drmSiteDialogTitle), @@ -312,8 +322,8 @@ class SitePermissionsDialogActivityLauncher @Inject constructor( rememberChoice = checked } }, - ) - .show() + ).build() + this.currentDialog?.show() } private fun onSiteDrmPermissionSave( @@ -588,7 +598,7 @@ class SitePermissionsDialogActivityLauncher @Inject constructor( SitePermissionsRequestedType.CAMERA_AND_AUDIO -> R.string.systemPermissionDialogCameraAndAudioDeniedContent SitePermissionsRequestedType.LOCATION -> R.string.systemPermissionDialogLocationDeniedContent } - TextAlertDialogBuilder(activity) + this.currentDialog = TextAlertDialogBuilder(activity) .setTitle(titleRes) .setMessage(contentRes) .setPositiveButton(R.string.systemPermissionsDeniedDialogPositiveButton) @@ -603,8 +613,8 @@ class SitePermissionsDialogActivityLauncher @Inject constructor( activity.startActivity(intent) } }, - ) - .show() + ).build() + this.currentDialog?.show() } private fun storeFavicon(url: String) {