From 72e37d2dac501faa300ca895c56c53eea43ae4ae Mon Sep 17 00:00:00 2001 From: Lena Date: Mon, 1 Jun 2026 00:00:00 +0000 Subject: app: add a folder picker for local paths Typing absolute paths is error-prone; let the user browse real filesystem folders and pick one. Stays on real paths (no SAF) so rsync keeps operating on POSIX paths. --- .../java/invalid/lena/rsend/FolderEditActivity.kt | 21 +++++ .../invalid/lena/rsend/FolderPickerActivity.kt | 89 ++++++++++++++++++++++ 2 files changed, 110 insertions(+) create mode 100644 app/src/main/java/invalid/lena/rsend/FolderPickerActivity.kt (limited to 'app/src/main/java/invalid/lena') diff --git a/app/src/main/java/invalid/lena/rsend/FolderEditActivity.kt b/app/src/main/java/invalid/lena/rsend/FolderEditActivity.kt index 2fe2b1b..c61276c 100644 --- a/app/src/main/java/invalid/lena/rsend/FolderEditActivity.kt +++ b/app/src/main/java/invalid/lena/rsend/FolderEditActivity.kt @@ -1,11 +1,14 @@ package invalid.lena.rsend +import android.app.Activity +import android.content.Intent import android.os.Bundle import android.view.View import android.widget.Button import android.widget.EditText import android.widget.Switch import android.widget.Toast +import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AppCompatActivity import java.io.File @@ -20,6 +23,17 @@ class FolderEditActivity : AppCompatActivity() { private lateinit var excludes: EditText private lateinit var delete: Switch + // The picker returns a real filesystem path; drop it into the local field and + // name the folder after its basename if the name is still blank. + private val pickFolder = + registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> + if (result.resultCode == Activity.RESULT_OK) { + val path = result.data?.getStringExtra("path") ?: return@registerForActivityResult + local.setText(path) + if (name.text.isNullOrBlank()) name.setText(File(path).name) + } + } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_folder) @@ -43,6 +57,13 @@ class FolderEditActivity : AppCompatActivity() { delete.isChecked = f.delete } + findViewById