Make TermuxTask and TermuxSession agnostic to termux environment

Those classes shouldn't be tied to termux environment like variables, interpreters and working directory since commands may need to be executed with a different environment like android's or with a different logic. Now both classes use the ShellEnvironmentClient interface to dynamically get the environment to be used which currently for Termux's case is implemented by TermuxShellEnvironmentClient which is just a wrapper for TermuxShellUtils since later implements static functions.
This commit is contained in:
agnostic-apollo
2021-06-28 05:57:45 +05:00
parent 2aafcf8435
commit 53c1a49b5b
8 changed files with 265 additions and 153 deletions

View File

@@ -0,0 +1,47 @@
package com.termux.shared.shell;
import android.content.Context;
import androidx.annotation.NonNull;
public interface ShellEnvironmentClient {
/**
* Get the default working directory path for the environment in case the path that was passed
* was {@code null} or empty.
*
* @return Should return the default working directory path.
*/
@NonNull
String getDefaultWorkingDirectoryPath();
/**
* Get the default "/bin" path, likely $PREFIX/bin.
*
* @return Should return the "/bin" path.
*/
@NonNull
String getDefaultBinPath();
/**
* Build the shell environment to be used for commands.
*
* @param currentPackageContext The {@link Context} for the current package.
* @param isFailSafe If running a failsafe session.
* @param workingDirectory The working directory for the environment.
* @return Should return the build environment.
*/
@NonNull
String[] buildEnvironment(Context currentPackageContext, boolean isFailSafe, String workingDirectory);
/**
* Setup process arguments for the file to execute, like interpreter, etc.
*
* @param fileToExecute The file to execute.
* @param arguments The arguments to pass to the executable.
* @return Should return the final process arguments.
*/
@NonNull
String[] setupProcessArgs(@NonNull String fileToExecute, String[] arguments);
}