mirror of
https://github.com/Novaloop-AG/element-x-android.git
synced 2026-11-02 12:07:28 +00:00
Address PR review comments
This commit is contained in:
+1
-1
@@ -5,7 +5,7 @@
|
||||
* Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
package io.element.android.libraries.permissions.api
|
||||
package io.element.android.libraries.permissions.api.localnetwork
|
||||
|
||||
interface LocalNetworkPermissionAdvisor {
|
||||
/**
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
* Copyright (c) 2026 Element Creations Ltd.
|
||||
*
|
||||
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
|
||||
* Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
package io.element.android.libraries.permissions.api.localnetwork
|
||||
|
||||
/**
|
||||
* Which rationale dialog (if any) should be rendered on top of the caller's UI.
|
||||
*
|
||||
* [Rationale] is shown before the runtime prompt so the user knows why the permission is needed.
|
||||
* [Settings] is shown when the OS says a rationale can no longer be shown (permanently denied).
|
||||
*/
|
||||
enum class LocalNetworkPermissionDialog {
|
||||
None,
|
||||
Rationale,
|
||||
Settings,
|
||||
}
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* Copyright (c) 2026 Element Creations Ltd.
|
||||
*
|
||||
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
|
||||
* Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
package io.element.android.libraries.permissions.api.localnetwork
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import io.element.android.libraries.designsystem.components.dialogs.ConfirmationDialog
|
||||
import io.element.android.libraries.ui.strings.CommonStrings
|
||||
|
||||
@Composable
|
||||
fun LocalNetworkPermissionDialogView(
|
||||
dialog: LocalNetworkPermissionDialog,
|
||||
onSubmit: () -> Unit,
|
||||
onDismiss: () -> Unit,
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
val submitTextRes = when (dialog) {
|
||||
LocalNetworkPermissionDialog.None -> return
|
||||
LocalNetworkPermissionDialog.Rationale -> CommonStrings.dialog_allow_access
|
||||
LocalNetworkPermissionDialog.Settings -> CommonStrings.action_open_settings
|
||||
}
|
||||
ConfirmationDialog(
|
||||
title = stringResource(CommonStrings.screen_local_network_opt_in_title),
|
||||
content = stringResource(CommonStrings.screen_local_network_opt_in_subtitle),
|
||||
submitText = stringResource(submitTextRes),
|
||||
cancelText = stringResource(CommonStrings.action_not_now),
|
||||
onSubmitClick = onSubmit,
|
||||
onDismiss = onDismiss,
|
||||
modifier = modifier,
|
||||
)
|
||||
}
|
||||
+4
-4
@@ -5,16 +5,16 @@
|
||||
* Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
package io.element.android.libraries.permissions.impl
|
||||
package io.element.android.libraries.permissions.impl.localnetwork
|
||||
|
||||
import android.Manifest.permission.ACCESS_LOCAL_NETWORK
|
||||
import android.Manifest
|
||||
import android.os.Build
|
||||
import dev.zacsweers.metro.AppScope
|
||||
import dev.zacsweers.metro.ContributesBinding
|
||||
import io.element.android.libraries.androidutils.network.LocalNetworkAddressClassifier
|
||||
import io.element.android.libraries.androidutils.network.LocalNetworkClassification
|
||||
import io.element.android.libraries.permissions.api.LocalNetworkPermissionAdvisor
|
||||
import io.element.android.libraries.permissions.api.PermissionStateProvider
|
||||
import io.element.android.libraries.permissions.api.localnetwork.LocalNetworkPermissionAdvisor
|
||||
import io.element.android.services.toolbox.api.sdk.BuildVersionSdkIntProvider
|
||||
|
||||
@ContributesBinding(AppScope::class)
|
||||
@@ -25,7 +25,7 @@ class DefaultLocalNetworkPermissionAdvisor(
|
||||
) : LocalNetworkPermissionAdvisor {
|
||||
override suspend fun shouldRequestPermissionFor(homeserverUrl: String): Boolean {
|
||||
if (!buildVersionSdkIntProvider.isAtLeast(Build.VERSION_CODES.CINNAMON_BUN)) return false
|
||||
if (permissionStateProvider.isPermissionGranted(ACCESS_LOCAL_NETWORK)) return false
|
||||
if (permissionStateProvider.isPermissionGranted(Manifest.permission.ACCESS_LOCAL_NETWORK)) return false
|
||||
return when (classifier.classify(homeserverUrl)) {
|
||||
LocalNetworkClassification.LocalIp -> true
|
||||
LocalNetworkClassification.PublicIp,
|
||||
+1
-1
@@ -5,7 +5,7 @@
|
||||
* Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
package io.element.android.libraries.permissions.impl
|
||||
package io.element.android.libraries.permissions.impl.localnetwork
|
||||
|
||||
import com.google.common.truth.Truth.assertThat
|
||||
import io.element.android.libraries.androidutils.network.LocalNetworkAddressClassifier
|
||||
+1
-1
@@ -7,7 +7,7 @@
|
||||
|
||||
package io.element.android.libraries.permissions.test
|
||||
|
||||
import io.element.android.libraries.permissions.api.LocalNetworkPermissionAdvisor
|
||||
import io.element.android.libraries.permissions.api.localnetwork.LocalNetworkPermissionAdvisor
|
||||
|
||||
class FakeLocalNetworkPermissionAdvisor(
|
||||
private val shouldPrompt: Boolean = false,
|
||||
|
||||
Reference in New Issue
Block a user