mirror of
https://github.com/fankes/termux-app.git
synced 2025-09-06 10:45:23 +08:00
Fixed: Fix TermuxFileReceiverActivity failing to open files with "#" and remove hardcoded "content" and "file" strings and fix indentation
am start -a android.intent.action.VIEW -n com.termux/.filepicker.TermuxFileReceiverActivity -d "file:///data/data/com.termux/files/home/te#st.sh"
This commit is contained in:
@@ -1,15 +1,19 @@
|
|||||||
package com.termux.filepicker;
|
package com.termux.filepicker;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
|
import android.content.ContentResolver;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.provider.OpenableColumns;
|
import android.provider.OpenableColumns;
|
||||||
import android.util.Patterns;
|
import android.util.Patterns;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
import com.termux.R;
|
import com.termux.R;
|
||||||
import com.termux.shared.data.DataUtils;
|
import com.termux.shared.data.DataUtils;
|
||||||
import com.termux.shared.data.IntentUtils;
|
import com.termux.shared.data.IntentUtils;
|
||||||
|
import com.termux.shared.data.UriUtils;
|
||||||
import com.termux.shared.interact.MessageDialogUtils;
|
import com.termux.shared.interact.MessageDialogUtils;
|
||||||
import com.termux.shared.termux.interact.TextInputDialogUtils;
|
import com.termux.shared.termux.interact.TextInputDialogUtils;
|
||||||
import com.termux.shared.termux.TermuxConstants;
|
import com.termux.shared.termux.TermuxConstants;
|
||||||
@@ -89,11 +93,13 @@ public class TermuxFileReceiverActivity extends Activity {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ("content".equals(scheme)) {
|
if (ContentResolver.SCHEME_CONTENT.equals(scheme)) {
|
||||||
handleContentUri(dataUri, sharedTitle);
|
handleContentUri(dataUri, sharedTitle);
|
||||||
} else if ("file".equals(scheme)) {
|
} else if (ContentResolver.SCHEME_FILE.equals(scheme)) {
|
||||||
// When e.g. clicking on a downloaded apk:
|
Logger.logVerbose(LOG_TAG, "uri: \"" + dataUri + "\", path: \"" + dataUri.getPath() + "\", fragment: \"" + dataUri.getFragment() + "\"");
|
||||||
String path = dataUri.getPath();
|
|
||||||
|
// Get full path including fragment (anything after last "#")
|
||||||
|
String path = UriUtils.getUriFilePath(dataUri);
|
||||||
if (DataUtils.isNullOrEmpty(path)) {
|
if (DataUtils.isNullOrEmpty(path)) {
|
||||||
showErrorDialogAndQuit("File path from data uri is null, empty or invalid.");
|
showErrorDialogAndQuit("File path from data uri is null, empty or invalid.");
|
||||||
return;
|
return;
|
||||||
@@ -121,8 +127,10 @@ public class TermuxFileReceiverActivity extends Activity {
|
|||||||
dialog -> finish());
|
dialog -> finish());
|
||||||
}
|
}
|
||||||
|
|
||||||
void handleContentUri(final Uri uri, String subjectFromIntent) {
|
void handleContentUri(@NonNull final Uri uri, String subjectFromIntent) {
|
||||||
try {
|
try {
|
||||||
|
Logger.logVerbose(LOG_TAG, "uri: \"" + uri + "\", path: \"" + uri.getPath() + "\", fragment: \"" + uri.getFragment() + "\"");
|
||||||
|
|
||||||
String attachmentFileName = null;
|
String attachmentFileName = null;
|
||||||
|
|
||||||
String[] projection = new String[]{OpenableColumns.DISPLAY_NAME};
|
String[] projection = new String[]{OpenableColumns.DISPLAY_NAME};
|
||||||
@@ -144,7 +152,8 @@ public class TermuxFileReceiverActivity extends Activity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void promptNameAndSave(final InputStream in, final String attachmentFileName) {
|
void promptNameAndSave(final InputStream in, final String attachmentFileName) {
|
||||||
TextInputDialogUtils.textInput(this, R.string.title_file_received, attachmentFileName, R.string.action_file_received_edit, text -> {
|
TextInputDialogUtils.textInput(this, R.string.title_file_received, attachmentFileName,
|
||||||
|
R.string.action_file_received_edit, text -> {
|
||||||
File outFile = saveStreamWithName(in, text);
|
File outFile = saveStreamWithName(in, text);
|
||||||
if (outFile == null) return;
|
if (outFile == null) return;
|
||||||
|
|
||||||
@@ -159,7 +168,7 @@ public class TermuxFileReceiverActivity extends Activity {
|
|||||||
//noinspection ResultOfMethodCallIgnored
|
//noinspection ResultOfMethodCallIgnored
|
||||||
editorProgramFile.setExecutable(true);
|
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);
|
Intent executeIntent = new Intent(TERMUX_SERVICE.ACTION_SERVICE_EXECUTE, scriptUri);
|
||||||
executeIntent.setClass(TermuxFileReceiverActivity.this, TermuxService.class);
|
executeIntent.setClass(TermuxFileReceiverActivity.this, TermuxService.class);
|
||||||
@@ -223,7 +232,7 @@ public class TermuxFileReceiverActivity extends Activity {
|
|||||||
//noinspection ResultOfMethodCallIgnored
|
//noinspection ResultOfMethodCallIgnored
|
||||||
urlOpenerProgramFile.setExecutable(true);
|
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);
|
Intent executeIntent = new Intent(TERMUX_SERVICE.ACTION_SERVICE_EXECUTE, urlOpenerProgramUri);
|
||||||
executeIntent.setClass(TermuxFileReceiverActivity.this, TermuxService.class);
|
executeIntent.setClass(TermuxFileReceiverActivity.this, TermuxService.class);
|
||||||
|
Reference in New Issue
Block a user