diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index fd81b42a..3e997ac7 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,8 @@ + + + address.isSiteLocalAddress || + address.isLinkLocalAddress + } + } catch (_: Exception) { + false + } + } + } +} diff --git a/app/src/main/java/io/github/wiiznokes/gitnote/ui/screen/setup/remote/EnterUrlScreen.kt b/app/src/main/java/io/github/wiiznokes/gitnote/ui/screen/setup/remote/EnterUrlScreen.kt index 1c5b002a..e471b59a 100644 --- a/app/src/main/java/io/github/wiiznokes/gitnote/ui/screen/setup/remote/EnterUrlScreen.kt +++ b/app/src/main/java/io/github/wiiznokes/gitnote/ui/screen/setup/remote/EnterUrlScreen.kt @@ -1,5 +1,7 @@ package io.github.wiiznokes.gitnote.ui.screen.setup.remote +import androidx.activity.compose.rememberLauncherForActivityResult +import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.text.KeyboardOptions @@ -8,15 +10,21 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalUriHandler import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.input.TextFieldValue import androidx.compose.ui.tooling.preview.Preview +import io.github.wiiznokes.gitnote.MyApp import io.github.wiiznokes.gitnote.R +import io.github.wiiznokes.gitnote.helper.NetworkPermissionHelper +import kotlinx.coroutines.launch import io.github.wiiznokes.gitnote.manager.getUrlInfoLib import io.github.wiiznokes.gitnote.provider.GithubProvider import io.github.wiiznokes.gitnote.provider.Provider @@ -87,6 +95,22 @@ fun EnterUrlScreen( onBackClick: () -> Unit, onUrl: (String) -> Unit ) { + val context = LocalContext.current + val scope = rememberCoroutineScope() + val pendingUrl = remember { mutableStateOf(null) } + val nearbyPermissionLauncher = rememberLauncherForActivityResult( + ActivityResultContracts.RequestPermission() + ) { granted -> + if (granted) { + pendingUrl.value?.let(onUrl) + } else { + MyApp.appModule.uiHelper.makeToast( + MyApp.appModule.context.getString(R.string.error_need_network_permission) + ) + } + pendingUrl.value = null + } + AppPage( title = "URL", horizontalAlignment = Alignment.CenterHorizontally, @@ -108,7 +132,15 @@ fun EnterUrlScreen( SetupButton( text = stringResource(R.string.next), onClick = { - onUrl(url.value.text) + val urlText = url.value.text + scope.launch { + if (NetworkPermissionHelper.requiresLocalNetworkPermission(urlText) && !NetworkPermissionHelper.isPermissionGranted(context)) { + pendingUrl.value = urlText + nearbyPermissionLauncher.launch(android.Manifest.permission.ACCESS_LOCAL_NETWORK) + } else { + onUrl(urlText) + } + } }, enabled = isUrlCorrect(url.value.text) ) diff --git a/app/src/main/java/io/github/wiiznokes/gitnote/ui/screen/setup/remote/GenerateNewSshKeysScreen.kt b/app/src/main/java/io/github/wiiznokes/gitnote/ui/screen/setup/remote/GenerateNewSshKeysScreen.kt index 89f3a8f3..876726bb 100644 --- a/app/src/main/java/io/github/wiiznokes/gitnote/ui/screen/setup/remote/GenerateNewSshKeysScreen.kt +++ b/app/src/main/java/io/github/wiiznokes/gitnote/ui/screen/setup/remote/GenerateNewSshKeysScreen.kt @@ -198,4 +198,4 @@ private fun GenerateNewSshKeysScreenPreview() { onClone = {} ) -} \ No newline at end of file +} diff --git a/app/src/main/java/io/github/wiiznokes/gitnote/ui/screen/setup/remote/LoadKeysFromDeviceScreen.kt b/app/src/main/java/io/github/wiiznokes/gitnote/ui/screen/setup/remote/LoadKeysFromDeviceScreen.kt index 46bedc61..95a3bf9a 100644 --- a/app/src/main/java/io/github/wiiznokes/gitnote/ui/screen/setup/remote/LoadKeysFromDeviceScreen.kt +++ b/app/src/main/java/io/github/wiiznokes/gitnote/ui/screen/setup/remote/LoadKeysFromDeviceScreen.kt @@ -193,4 +193,4 @@ private fun LoadKeysFromDeviceScreenPreview() { onClone = {}, url = "url", ) -} \ No newline at end of file +} diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 94bde659..18b96b19 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -65,6 +65,7 @@ Klonovat vzdálený repozitář Použít úložiště aplikace Aplikace potřebuje toto oprávnění pro přístup k úložišti + Aplikace potřebuje toto oprávnění pro přístup k repozitářům v místní síti Použít úložiště zařízení Vyžaduje oprávnění pro přístup k úplnému úložišti zařízení. Poté budete mít přístup k úložišti ve svém zařízení. Vytvořit repozitář v této složce diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 2ecc2f0d..a3ff67c2 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -81,6 +81,7 @@ Cloner un dépôt distant Utiliser la mémoire de l\'app L\'application a besoin de cette permission pour accéder au stockage + L\'application a besoin de cette autorisation pour accéder aux dépôts sur votre réseau local Utiliser la mémoire de l\'appareil Requiert une autorisation d\'accès au stockage complet de l\'appareil. Vous aurez la possibilité d\'accéder au dépôt sur votre ordinateur par la suite. Créer un dépôt dans ce dossier diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 8ff28d78..22f6e366 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -76,6 +76,7 @@ Clonar repositório local Usar armazenamento do aplicativo O aplicativo precisa desta permissão para acessar o armazenamento + O aplicativo precisa desta permissão para acessar repositórios em sua rede local Usar armazenamento do dispositivo Requer permissão para acessar todo o armazenamento do dispositivo. Você poderá acessar o repositório pelo computador após esse passo. Criar repositório nessa pasta diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 622da787..dbfc1586 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -64,6 +64,7 @@ Клонировать удалённый репозиторий Использовать хранилище приложения Приложению необходимо это разрешение для доступа к хранилищу + Приложению необходимо это разрешение для доступа к репозиториям в вашей локальной сети Использовать хранилище устройства Требуется разрешение на доступ ко всему хранилищу устройства. После этого вы сможете получить доступ к репозиторию с компьютера. Создать репозиторий в этой папке diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index acaa6fcb..e1bba85b 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -64,6 +64,7 @@ Клонувати віддалений репозиторій Використати сховище застосунку Застосунку потрібен цей дозвіл для доступу до сховища + Застосунку потрібен цей дозвіл для доступу до репозиторіїв у вашій локальній мережі Використати сховище пристрою Потрібен дозвіл на доступ до всього сховища пристрою. Після цього ви зможете отримати доступ до репозиторію з комп’ютера. Створити репозиторій у цій папці diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4f53474e..9c1113c9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -79,6 +79,7 @@ Clone remote repository Use app storage The application needs this permission to access the storage + The application needs this permission to access repositories on your local network Use device storage Requires permission to access the full device storage. You will be able to access the repository on your computer afterwards. Create repository in this folder