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