diff --git a/app/src/main/java/com/termux/filepicker/TermuxFileReceiverActivity.java b/app/src/main/java/com/termux/filepicker/TermuxFileReceiverActivity.java index 17244e41..d9af2c31 100644 --- a/app/src/main/java/com/termux/filepicker/TermuxFileReceiverActivity.java +++ b/app/src/main/java/com/termux/filepicker/TermuxFileReceiverActivity.java @@ -1,15 +1,19 @@ package com.termux.filepicker; import android.app.Activity; +import android.content.ContentResolver; import android.content.Intent; import android.database.Cursor; import android.net.Uri; import android.provider.OpenableColumns; import android.util.Patterns; +import androidx.annotation.NonNull; + import com.termux.R; import com.termux.shared.data.DataUtils; import com.termux.shared.data.IntentUtils; +import com.termux.shared.data.UriUtils; import com.termux.shared.interact.MessageDialogUtils; import com.termux.shared.termux.interact.TextInputDialogUtils; import com.termux.shared.termux.TermuxConstants; @@ -89,11 +93,13 @@ public class TermuxFileReceiverActivity extends Activity { return; } - if ("content".equals(scheme)) { + if (ContentResolver.SCHEME_CONTENT.equals(scheme)) { handleContentUri(dataUri, sharedTitle); - } else if ("file".equals(scheme)) { - // When e.g. clicking on a downloaded apk: - String path = dataUri.getPath(); + } else if (ContentResolver.SCHEME_FILE.equals(scheme)) { + Logger.logVerbose(LOG_TAG, "uri: \"" + dataUri + "\", path: \"" + dataUri.getPath() + "\", fragment: \"" + dataUri.getFragment() + "\""); + + // Get full path including fragment (anything after last "#") + String path = UriUtils.getUriFilePath(dataUri); if (DataUtils.isNullOrEmpty(path)) { showErrorDialogAndQuit("File path from data uri is null, empty or invalid."); return; @@ -121,8 +127,10 @@ public class TermuxFileReceiverActivity extends Activity { dialog -> finish()); } - void handleContentUri(final Uri uri, String subjectFromIntent) { + void handleContentUri(@NonNull final Uri uri, String subjectFromIntent) { try { + Logger.logVerbose(LOG_TAG, "uri: \"" + uri + "\", path: \"" + uri.getPath() + "\", fragment: \"" + uri.getFragment() + "\""); + String attachmentFileName = null; String[] projection = new String[]{OpenableColumns.DISPLAY_NAME}; @@ -144,29 +152,30 @@ public class TermuxFileReceiverActivity extends Activity { } void promptNameAndSave(final InputStream in, final String attachmentFileName) { - TextInputDialogUtils.textInput(this, R.string.title_file_received, attachmentFileName, R.string.action_file_received_edit, text -> { - File outFile = saveStreamWithName(in, text); - if (outFile == null) return; + TextInputDialogUtils.textInput(this, R.string.title_file_received, attachmentFileName, + R.string.action_file_received_edit, text -> { + File outFile = saveStreamWithName(in, text); + if (outFile == null) return; - final File editorProgramFile = new File(EDITOR_PROGRAM); - if (!editorProgramFile.isFile()) { - showErrorDialogAndQuit("The following file does not exist:\n$HOME/bin/termux-file-editor\n\n" - + "Create this file as a script or a symlink - it will be called with the received file as only argument."); - return; - } + final File editorProgramFile = new File(EDITOR_PROGRAM); + if (!editorProgramFile.isFile()) { + showErrorDialogAndQuit("The following file does not exist:\n$HOME/bin/termux-file-editor\n\n" + + "Create this file as a script or a symlink - it will be called with the received file as only argument."); + return; + } - // Do this for the user if necessary: - //noinspection ResultOfMethodCallIgnored - editorProgramFile.setExecutable(true); + // Do this for the user if necessary: + //noinspection ResultOfMethodCallIgnored + editorProgramFile.setExecutable(true); - final Uri scriptUri = new Uri.Builder().scheme("file").path(EDITOR_PROGRAM).build(); + final Uri scriptUri = UriUtils.getFileUri(EDITOR_PROGRAM); - Intent executeIntent = new Intent(TERMUX_SERVICE.ACTION_SERVICE_EXECUTE, scriptUri); - executeIntent.setClass(TermuxFileReceiverActivity.this, TermuxService.class); - executeIntent.putExtra(TERMUX_SERVICE.EXTRA_ARGUMENTS, new String[]{outFile.getAbsolutePath()}); - startService(executeIntent); - finish(); - }, + Intent executeIntent = new Intent(TERMUX_SERVICE.ACTION_SERVICE_EXECUTE, scriptUri); + executeIntent.setClass(TermuxFileReceiverActivity.this, TermuxService.class); + executeIntent.putExtra(TERMUX_SERVICE.EXTRA_ARGUMENTS, new String[]{outFile.getAbsolutePath()}); + startService(executeIntent); + finish(); + }, R.string.action_file_received_open_directory, text -> { if (saveStreamWithName(in, text) == null) return; @@ -223,7 +232,7 @@ public class TermuxFileReceiverActivity extends Activity { //noinspection ResultOfMethodCallIgnored urlOpenerProgramFile.setExecutable(true); - final Uri urlOpenerProgramUri = new Uri.Builder().scheme("file").path(URL_OPENER_PROGRAM).build(); + final Uri urlOpenerProgramUri = UriUtils.getFileUri(URL_OPENER_PROGRAM); Intent executeIntent = new Intent(TERMUX_SERVICE.ACTION_SERVICE_EXECUTE, urlOpenerProgramUri); executeIntent.setClass(TermuxFileReceiverActivity.this, TermuxService.class);