aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java')
-rw-r--r--app/src/main/java/org/pacien/tincapp/activities/configure/BrowseDirectoriesFragment.kt (renamed from app/src/main/java/org/pacien/tincapp/activities/configure/PathInfoFragment.kt)30
-rw-r--r--app/src/main/java/org/pacien/tincapp/storageprovider/BrowseFilesIntents.kt47
2 files changed, 68 insertions, 9 deletions
diff --git a/app/src/main/java/org/pacien/tincapp/activities/configure/PathInfoFragment.kt b/app/src/main/java/org/pacien/tincapp/activities/configure/BrowseDirectoriesFragment.kt
index 1c436a3..abc7ffc 100644
--- a/app/src/main/java/org/pacien/tincapp/activities/configure/PathInfoFragment.kt
+++ b/app/src/main/java/org/pacien/tincapp/activities/configure/BrowseDirectoriesFragment.kt
@@ -1,6 +1,6 @@
1/* 1/*
2 * Tinc Mesh VPN: Android client and user interface 2 * Tinc Mesh VPN: Android client and user interface
3 * Copyright (C) 2017-2018 Euxane P. TRAN-GIRARD 3 * Copyright (C) 2017-2024 Euxane P. TRAN-GIRARD
4 * 4 *
5 * This program is free software: you can redistribute it and/or modify 5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by 6 * it under the terms of the GNU General Public License as published by
@@ -22,19 +22,31 @@ import android.os.Bundle
22import android.view.LayoutInflater 22import android.view.LayoutInflater
23import android.view.View 23import android.view.View
24import android.view.ViewGroup 24import android.view.ViewGroup
25import org.pacien.tincapp.R
25import org.pacien.tincapp.activities.BaseFragment 26import org.pacien.tincapp.activities.BaseFragment
26import org.pacien.tincapp.context.AppPaths 27import org.pacien.tincapp.databinding.ConfigureBrowseDirectoriesFragmentBinding
27import org.pacien.tincapp.databinding.ConfigureToolsPathInfoFragmentBinding 28import org.pacien.tincapp.storageprovider.BrowseFilesIntents
28 29
29/** 30/**
30 * @author euxane 31 * @author euxane
31 */ 32 */
32class PathInfoFragment : BaseFragment() { 33class BrowseDirectoriesFragment : BaseFragment() {
33 private val appPaths = AppPaths
34
35 override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { 34 override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
36 val binding = ConfigureToolsPathInfoFragmentBinding.inflate(inflater, container, false) 35 val binding = ConfigureBrowseDirectoriesFragmentBinding.inflate(inflater, container, false)
37 binding.appPaths = appPaths 36 binding.openDirectoryTree = { openDocumentTree(it) }
38 return binding.root 37 return binding.root
39 } 38 }
40} 39
40 private fun openDocumentTree(documentId: String) {
41 try {
42 BrowseFilesIntents.openDocumentTree(requireContext(), documentId)
43 } catch (e: RuntimeException) {
44 parentActivity.runOnUiThread {
45 parentActivity.showErrorDialog(
46 R.string.configure_browse_directories_error_no_file_browser,
47 docTopic = "browse-files",
48 )
49 }
50 }
51 }
52} \ No newline at end of file
diff --git a/app/src/main/java/org/pacien/tincapp/storageprovider/BrowseFilesIntents.kt b/app/src/main/java/org/pacien/tincapp/storageprovider/BrowseFilesIntents.kt
new file mode 100644
index 0000000..3ebd501
--- /dev/null
+++ b/app/src/main/java/org/pacien/tincapp/storageprovider/BrowseFilesIntents.kt
@@ -0,0 +1,47 @@
1/*
2 * Tinc Mesh VPN: Android client and user interface
3 * Copyright (C) 2017-2024 Euxane P. TRAN-GIRARD
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <https://www.gnu.org/licenses/>.
17 */
18
19package org.pacien.tincapp.storageprovider
20
21import android.content.Context
22import android.content.Intent
23import android.net.Uri
24import android.provider.DocumentsContract
25import android.provider.DocumentsContract.Document
26import org.pacien.tincapp.BuildConfig
27
28object BrowseFilesIntents {
29 private const val URI_AUTHORITY = BuildConfig.APPLICATION_ID + ".files"
30
31 fun openDocumentTree(context: Context, documentId: String) {
32 val contentUri = DocumentsContract.buildDocumentUri(URI_AUTHORITY, documentId)
33 openDocumentTree(context, contentUri)
34 }
35
36 fun openDocumentTree(context: Context, contentUri: Uri) {
37 val intent = Intent(Intent.ACTION_VIEW).apply {
38 setDataAndType(contentUri, Document.MIME_TYPE_DIR)
39 addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
40 }
41
42 if (intent.resolveActivity(context.packageManager) == null)
43 throw RuntimeException("No opener found for " + Document.MIME_TYPE_DIR)
44
45 context.startActivity(intent)
46 }
47} \ No newline at end of file