content: package com.termux.shared.shell.command.environment;
  
  import android.content.Context;
  
  import androidx.annotation.NonNull;
  
  import com.termux.shared.shell.command.ExecutionCommand;
  
  import java.util.HashMap;
  
  /**
   * Environment for {@link ExecutionCommand}.
   */
  public class ShellCommandShellEnvironment {
  
      /** Environment variable prefix for the {@link ExecutionCommand}. */
      public static final String SHELL_CMD_ENV_PREFIX = "SHELL_CMD__";
  
      /** Environment variable for the {@link ExecutionCommand.Runner} name. */
      public static final String ENV_SHELL_CMD__RUNNER_NAME = SHELL_CMD_ENV_PREFIX + "RUNNER_NAME";
  
      /** Environment variable for the package name running the {@link ExecutionCommand}. */
      public static final String ENV_SHELL_CMD__PACKAGE_NAME = SHELL_CMD_ENV_PREFIX + "PACKAGE_NAME";
  
      /** Environment variable for the {@link ExecutionCommand#id}/TermuxShellManager.SHELL_ID name.
       * This will be common for all runners. */
      public static final String ENV_SHELL_CMD__SHELL_ID = SHELL_CMD_ENV_PREFIX + "SHELL_ID";
  
      /** Environment variable for the {@link ExecutionCommand#shellName} name. */
      public static final String ENV_SHELL_CMD__SHELL_NAME = SHELL_CMD_ENV_PREFIX + "SHELL_NAME";
      
      /** Environment variable for the {@link ExecutionCommand.Runner#APP_SHELL} number since boot. */
      public static final String ENV_SHELL_CMD__APP_SHELL_NUMBER_SINCE_BOOT = SHELL_CMD_ENV_PREFIX + "APP_SHELL_NUMBER_SINCE_BOOT";
  
      /** Environment variable for the {{@link ExecutionCommand.Runner#TERMINAL_SESSION} number since boot. */
      public static final String ENV_SHELL_CMD__TERMINAL_SESSION_NUMBER_SINCE_BOOT = SHELL_CMD_ENV_PREFIX + "TERMINAL_SESSION_NUMBER_SINCE_BOOT";
  
      /** Environment variable for the {@link ExecutionCommand.Runner#APP_SHELL} number since app start. */
      public static final String ENV_SHELL_CMD__APP_SHELL_NUMBER_SINCE_APP_START = SHELL_CMD_ENV_PREFIX + "APP_SHELL_NUMBER_SINCE_APP_START";
  
      /** Environment variable for the {@link ExecutionCommand.Runner#TERMINAL_SESSION} number since app start. */
      public static final String ENV_SHELL_CMD__TERMINAL_SESSION_NUMBER_SINCE_APP_START = SHELL_CMD_ENV_PREFIX + "TERMINAL_SESSION_NUMBER_SINCE_APP_START";
  
  
      /** Get shell environment containing info for {@link ExecutionCommand}. */
      @NonNull
      public HashMap<String, String> getEnvironment(@NonNull Context currentPackageContext,
                                                    @NonNull ExecutionCommand executionCommand) {
          HashMap<String, String> environment = new HashMap<>();
  
          ExecutionCommand.Runner runner = ExecutionCommand.Runner.runnerOf(executionCommand.runner);
          if (runner == null) return environment;
  
          ShellEnvironmentUtils.putToEnvIfSet(environment, ENV_SHELL_CMD__RUNNER_NAME, runner.getName());
          ShellEnvironmentUtils.putToEnvIfSet(environment, ENV_SHELL_CMD__PACKAGE_NAME, currentPackageContext.getPackageName());
          ShellEnvironmentUtils.putToEnvIfSet(environment, ENV_SHELL_CMD__SHELL_ID, String.valueOf(executionCommand.id));
          ShellEnvironmentUtils.putToEnvIfSet(environment, ENV_SHELL_CMD__SHELL_NAME, executionCommand.shellName);
  
          return environment;
      }
  
  }
  