From 52ce6cc94bbe59dc8d95cae00e83a2c663963ee3 Mon Sep 17 00:00:00 2001 From: agnostic-apollo Date: Fri, 18 Sep 2020 22:21:31 +0500 Subject: [PATCH] Add support for "$PREFIX/" and "~/" prefix in "RUN_COMMAND" intent extras for paths. --- .../java/com/termux/app/RunCommandService.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/termux/app/RunCommandService.java b/app/src/main/java/com/termux/app/RunCommandService.java index d4af178b..e0e9b55d 100644 --- a/app/src/main/java/com/termux/app/RunCommandService.java +++ b/app/src/main/java/com/termux/app/RunCommandService.java @@ -80,12 +80,12 @@ public class RunCommandService extends Service { runStartForeground(); if (allowExternalApps() && RUN_COMMAND_ACTION.equals(intent.getAction())) { - Uri programUri = new Uri.Builder().scheme("com.termux.file").path(intent.getStringExtra(RUN_COMMAND_PATH)).build(); + Uri programUri = new Uri.Builder().scheme("com.termux.file").path(parsePath(intent.getStringExtra(RUN_COMMAND_PATH))).build(); Intent execIntent = new Intent(TermuxService.ACTION_EXECUTE, programUri); execIntent.setClass(this, TermuxService.class); execIntent.putExtra(TermuxService.EXTRA_ARGUMENTS, intent.getStringArrayExtra(RUN_COMMAND_ARGUMENTS)); - execIntent.putExtra(TermuxService.EXTRA_CURRENT_WORKING_DIRECTORY, intent.getStringExtra(RUN_COMMAND_WORKDIR)); + execIntent.putExtra(TermuxService.EXTRA_CURRENT_WORKING_DIRECTORY, parsePath(intent.getStringExtra(RUN_COMMAND_WORKDIR))); execIntent.putExtra(TermuxService.EXTRA_EXECUTE_IN_BACKGROUND, intent.getBooleanExtra(RUN_COMMAND_BACKGROUND, false)); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { @@ -163,4 +163,14 @@ public class RunCommandService extends Service { return props.getProperty("allow-external-apps", "false").equals("true"); } + + /** Replace "$PREFIX/" or "~/" prefix with termux absolute paths */ + private String parsePath(String path) { + if(path != null && !path.isEmpty()) { + path = path.replaceAll("^\\$PREFIX\\/", TermuxService.PREFIX_PATH + "/"); + path = path.replaceAll("^~\\/", TermuxService.HOME_PATH + "/"); + } + + return path; + } }