Skip to content

Commit

Permalink
Update and fix location + DRM dialogs (duckduckgo#3937)
Browse files Browse the repository at this point in the history
Task/Issue URL:
https://app.asana.com/0/488551667048375/1206052137816789/f

### Description
* Remove icon from location + DRM dialogs
* Deny permission if user clicks outside the dialog

### Steps to test this PR
- [ ] Go to https://permission.site/ (HTTPS) and click on Location
- [ ] Verify the dialog has no icon. Select "Enable" and then select
"while using the app" when the system dialog appears
- [ ] Verify that the 3rd (and final) location dialog also has no icon
- [ ] Click outside the dialog - Location should turn red (indicating
permission was denied)
- [ ] Click on Location again - verify the dialog shows up again
- [ ] Click on "Encrypted Media (EME)" --> DRM consent prompt should
appear
- [ ] Verify the dialog has no icon
- [ ] Click outside the dialog - EME should turn red
- [ ] Click on EME again and verify the dialog shows up again
  • Loading branch information
nshuba authored Dec 5, 2023
1 parent 46cbde4 commit b730cc2
Show file tree
Hide file tree
Showing 6 changed files with 17 additions and 69 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ import com.duckduckgo.app.browser.BrowserTabViewModel.FindInPageViewState
import com.duckduckgo.app.browser.BrowserTabViewModel.GlobalLayoutViewState
import com.duckduckgo.app.browser.BrowserTabViewModel.HighlightableButton
import com.duckduckgo.app.browser.BrowserTabViewModel.LoadingViewState
import com.duckduckgo.app.browser.BrowserTabViewModel.LocationPermission
import com.duckduckgo.app.browser.BrowserTabViewModel.NavigationCommand
import com.duckduckgo.app.browser.BrowserTabViewModel.OmnibarViewState
import com.duckduckgo.app.browser.BrowserTabViewModel.PrivacyShieldViewState
Expand Down Expand Up @@ -1238,7 +1239,7 @@ class BrowserTabFragment :
is Command.ShowWebContent -> webView?.show()
is Command.CheckSystemLocationPermission -> checkSystemLocationPermission(it.domain, it.deniedForever)
is Command.RequestSystemLocationPermission -> requestLocationPermissions()
is Command.AskDomainPermission -> askSiteLocationPermission(it.domain)
is Command.AskDomainPermission -> askSiteLocationPermission(it.locationPermission)
is Command.RefreshUserAgent -> refreshUserAgent(it.url, it.isDesktop)
is Command.AskToFireproofWebsite -> askToFireproofWebsite(requireContext(), it.fireproofWebsite)
is Command.AskToAutomateFireproofWebsite -> askToAutomateFireproofWebsite(requireContext(), it.fireproofWebsite)
Expand Down Expand Up @@ -1418,27 +1419,29 @@ class BrowserTabFragment :
)
}

private fun askSiteLocationPermission(domain: String) {
private fun askSiteLocationPermission(locationPermission: LocationPermission) {
if (!isActiveTab) {
Timber.v("Will not launch a dialog for an inactive tab")
return
}

val binding = ContentSiteLocationPermissionDialogBinding.inflate(layoutInflater)

val domain = locationPermission.origin
val title = domain.websiteFromGeoLocationsApiOrigin()
binding.sitePermissionDialogTitle.text = getString(R.string.preciseLocationSiteDialogTitle, title)
binding.sitePermissionDialogSubtitle.text = if (title == DDG_DOMAIN) {
getString(R.string.preciseLocationDDGDialogSubtitle)
} else {
getString(R.string.preciseLocationSiteDialogSubtitle)
}
lifecycleScope.launch {
faviconManager.loadToViewFromLocalWithPlaceholder(tabId, domain, binding.sitePermissionDialogFavicon)
}

val dialog = MaterialAlertDialogBuilder(requireActivity())
.setView(binding.root)
.setOnCancelListener {
// Called when user clicks outside the dialog - deny to be safe
locationPermission.callback.invoke(locationPermission.origin, false, false)
}
.create()

binding.siteAllowAlwaysLocationPermission.setOnClickListener {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -431,7 +431,7 @@ class BrowserTabViewModel @Inject constructor(
val deniedForever: Boolean,
) : Command()

class AskDomainPermission(val domain: String) : Command()
class AskDomainPermission(val locationPermission: LocationPermission) : Command()
object RequestSystemLocationPermission : Command()
class RefreshUserAgent(
val url: String?,
Expand Down Expand Up @@ -1670,15 +1670,15 @@ class BrowserTabViewModel @Inject constructor(
}

LocationPermissionType.ALLOW_ONCE -> {
command.postValue(AskDomainPermission(locationPermission.origin))
command.postValue(AskDomainPermission(locationPermission))
}

LocationPermissionType.DENY_ALWAYS -> {
onSiteLocationPermissionAlwaysDenied()
}

LocationPermissionType.DENY_ONCE -> {
command.postValue(AskDomainPermission(locationPermission.origin))
command.postValue(AskDomainPermission(locationPermission))
}
}
}
Expand Down Expand Up @@ -1719,7 +1719,7 @@ class BrowserTabViewModel @Inject constructor(
viewModelScope.launch {
val permissionEntity = locationPermissionsRepository.getDomainPermission(locationPermission.origin)
if (permissionEntity == null) {
command.postValue(AskDomainPermission(locationPermission.origin))
command.postValue(AskDomainPermission(locationPermission))
} else {
reactToSitePermission(permissionEntity.permission)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,25 +29,6 @@
android:gravity="center"
android:orientation="vertical">

<FrameLayout
android:id="@+id/sitePermissionDialogFaviconContainer"
android:layout_width="@dimen/dialogImageSize"
android:layout_height="@dimen/dialogImageSize"
android:layout_marginBottom="@dimen/keyline_4"
android:background="@drawable/list_item_image_circular_background"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">

<ImageView
android:id="@+id/sitePermissionDialogFavicon"
android:layout_width="22dp"
android:layout_height="22dp"
android:layout_gravity="center"
android:importantForAccessibility="no"
android:src="@drawable/ic_globe_gray_16dp"/>
</FrameLayout>

<com.duckduckgo.common.ui.view.text.DaxTextView
android:id="@+id/sitePermissionDialogTitle"
app:typography="h2"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,18 +27,6 @@
android:gravity="center"
android:orientation="vertical">

<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/faviconImage"
android:layout_width="@dimen/dialogImageSize"
android:layout_height="@dimen/dialogImageSize"
android:layout_gravity="center"
android:importantForAccessibility="no"
android:layout_marginBottom="@dimen/keyline_4"
app:srcCompat="@drawable/ic_dax_icon"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>

<com.duckduckgo.common.ui.view.text.DaxTextView
android:id="@+id/systemPermissionDialogTitle"
app:typography="h2"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ import android.webkit.PermissionRequest
import androidx.activity.result.ActivityResultCaller
import androidx.annotation.StringRes
import androidx.core.net.toUri
import com.duckduckgo.app.browser.favicon.FaviconManager
import com.duckduckgo.app.di.AppCoroutineScope
import com.duckduckgo.common.ui.view.addClickableLink
import com.duckduckgo.common.ui.view.dialog.TextAlertDialogBuilder
Expand Down Expand Up @@ -67,9 +66,6 @@ class SitePermissionsDialogActivityLauncher @Inject constructor(
private var siteURL: String = ""
private var tabId: String = ""

@Inject
lateinit var faviconManager: FaviconManager

override fun registerPermissionLauncher(caller: ActivityResultCaller) {
systemPermissionsHelper.registerPermissionLaunchers(
caller,
Expand Down Expand Up @@ -107,7 +103,7 @@ class SitePermissionsDialogActivityLauncher @Inject constructor(
showSitePermissionsRationaleDialog(R.string.sitePermissionsCameraDialogTitle, url, this::askForCameraPermissions)
}
permissionsHandledByUser.contains(PermissionRequest.RESOURCE_PROTECTED_MEDIA_ID) -> {
showSiteDrmPermissionsDialog(activity, url, tabId)
showSiteDrmPermissionsDialog(activity, url)
}
}
}
Expand Down Expand Up @@ -138,7 +134,6 @@ class SitePermissionsDialogActivityLauncher @Inject constructor(
private fun showSiteDrmPermissionsDialog(
activity: Activity,
url: String,
tabId: String,
) {
val domain = url.extractDomain() ?: url

Expand All @@ -163,6 +158,10 @@ class SitePermissionsDialogActivityLauncher @Inject constructor(
val binding = ContentSiteDrmPermissionDialogBinding.inflate(activity.layoutInflater)
val dialog = MaterialAlertDialogBuilder(activity)
.setView(binding.root)
.setOnCancelListener {
// Called when user clicks outside the dialog - deny to be safe
denyPermissions()
}
.create()

val title = url.websiteFromGeoLocationsApiOrigin()
Expand All @@ -176,10 +175,6 @@ class SitePermissionsDialogActivityLauncher @Inject constructor(
activity.startActivity(Intent(Intent.ACTION_VIEW, DRM_LEARN_MORE_URL))
}

appCoroutineScope.launch(dispatcher.main()) {
faviconManager.loadToViewFromLocalWithPlaceholder(tabId, url, binding.sitePermissionDialogFavicon)
}

binding.siteAllowAlwaysDrmPermission.setOnClickListener {
systemPermissionGranted()
onSiteDrmPermissionSave(domain, SitePermissionAskSettingType.ALLOW_ALWAYS)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,25 +29,6 @@
android:gravity="center"
android:orientation="vertical">

<FrameLayout
android:id="@+id/sitePermissionDialogFaviconContainer"
android:layout_width="@dimen/dialogImageSize"
android:layout_height="@dimen/dialogImageSize"
android:layout_marginBottom="@dimen/keyline_4"
android:background="@drawable/list_item_image_circular_background"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">

<ImageView
android:id="@+id/sitePermissionDialogFavicon"
android:layout_width="22dp"
android:layout_height="22dp"
android:layout_gravity="center"
android:importantForAccessibility="no"
android:src="@drawable/ic_globe_gray_16dp"/>
</FrameLayout>

<com.duckduckgo.common.ui.view.text.DaxTextView
android:id="@+id/sitePermissionDialogTitle"
app:typography="h2"
Expand Down

0 comments on commit b730cc2

Please sign in to comment.