/*
* Copyright (C) 2007 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package jackpal.androidterm.util;
import jackpal.androidterm.R;
import jackpal.androidterm.compat.AndroidCompat;
import android.content.SharedPreferences;
import android.content.res.Resources;
import android.view.KeyEvent;
/**
* Terminal emulator settings
*/
public class TermSettings {
private SharedPreferences mPrefs;
private int mStatusBar;
private int mActionBarMode;
private int mOrientation;
private int mCursorStyle;
private int mCursorBlink;
private int mFontSize;
private int mColorId;
private boolean mUTF8ByDefault;
private int mBackKeyAction;
private int mControlKeyId;
private int mFnKeyId;
private int mUseCookedIME;
private String mShell;
private String mFailsafeShell;
private String mInitialCommand;
private String mTermType;
private boolean mCloseOnExit;
private boolean mVerifyPath;
private boolean mDoPathExtensions;
private boolean mAllowPathPrepend;
private String mHomePath;
private String mPrependPath = null;
private String mAppendPath = null;
private boolean mAltSendsEsc;
private boolean mMouseTracking;
private boolean mUseKeyboardShortcuts;
private static final String STATUSBAR_KEY = "statusbar";
private static final String ACTIONBAR_KEY = "actionbar";
private static final String ORIENTATION_KEY = "orientation";
private static final String FONTSIZE_KEY = "fontsize";
private static final String COLOR_KEY = "color";
private static final String UTF8_KEY = "utf8_by_default";
private static final String BACKACTION_KEY = "backaction";
private static final String CONTROLKEY_KEY = "controlkey";
private static final String FNKEY_KEY = "fnkey";
private static final String IME_KEY = "ime";
private static final String SHELL_KEY = "shell";
private static final String INITIALCOMMAND_KEY = "initialcommand";
private static final String TERMTYPE_KEY = "termtype";
private static final String CLOSEONEXIT_KEY = "close_window_on_process_exit";
private static final String VERIFYPATH_KEY = "verify_path";
private static final String PATHEXTENSIONS_KEY = "do_path_extensions";
private static final String PATHPREPEND_KEY = "allow_prepend_path";
private static final String HOMEPATH_KEY = "home_path";
private static final String ALT_SENDS_ESC = "alt_sends_esc";
private static final String MOUSE_TRACKING = "mouse_tracking";
private static final String USE_KEYBOARD_SHORTCUTS = "use_keyboard_shortcuts";
public static final int WHITE = 0xffffffff;
public static final int BLACK = 0xff000000;
public static final int BLUE = 0xff344ebd;
public static final int GREEN = 0xff00ff00;
public static final int AMBER = 0xffffb651;
public static final int RED = 0xffff0113;
public static final int HOLO_BLUE = 0xff33b5e5;
public static final int SOLARIZED_FG = 0xff657b83;
public static final int SOLARIZED_BG = 0xfffdf6e3;
public static final int SOLARIZED_DARK_FG = 0xff839496;
public static final int SOLARIZED_DARK_BG = 0xff002b36;
public static final int LINUX_CONSOLE_WHITE = 0xffaaaaaa;
// foreground color, background color
public static final int[][] COLOR_SCHEMES = {
{BLACK, WHITE},
{WHITE, BLACK},
{WHITE, BLUE},
{GREEN, BLACK},
{AMBER, BLACK},
{RED, BLACK},
{HOLO_BLUE, BLACK},
{SOLARIZED_FG, SOLARIZED_BG},
{SOLARIZED_DARK_FG, SOLARIZED_DARK_BG},
{LINUX_CONSOLE_WHITE, BLACK}
};
public static final int ACTION_BAR_MODE_NONE = 0;
public static final int ACTION_BAR_MODE_ALWAYS_VISIBLE = 1;
public static final int ACTION_BAR_MODE_HIDES = 2;
private static final int ACTION_BAR_MODE_MAX = 2;
public static final int ORIENTATION_UNSPECIFIED = 0;
public static final int ORIENTATION_LANDSCAPE = 1;
public static final int ORIENTATION_PORTRAIT = 2;
/** An integer not in the range of real key codes. */
public static final int KEYCODE_NONE = -1;
public static final int CONTROL_KEY_ID_NONE = 7;
public static final int[] CONTROL_KEY_SCHEMES = {
KeyEvent.KEYCODE_DPAD_CENTER,
KeyEvent.KEYCODE_AT,
KeyEvent.KEYCODE_ALT_LEFT,
KeyEvent.KEYCODE_ALT_RIGHT,
KeyEvent.KEYCODE_VOLUME_UP,
KeyEvent.KEYCODE_VOLUME_DOWN,
KeyEvent.KEYCODE_CAMERA,
KEYCODE_NONE
};
public static final int FN_KEY_ID_NONE = 7;
public static final int[] FN_KEY_SCHEMES = {
KeyEvent.KEYCODE_DPAD_CENTER,
KeyEvent.KEYCODE_AT,
KeyEvent.KEYCODE_ALT_LEFT,
KeyEvent.KEYCODE_ALT_RIGHT,
KeyEvent.KEYCODE_VOLUME_UP,
KeyEvent.KEYCODE_VOLUME_DOWN,
KeyEvent.KEYCODE_CAMERA,
KEYCODE_NONE
};
public static final int BACK_KEY_STOPS_SERVICE = 0;
public static final int BACK_KEY_CLOSES_WINDOW = 1;
public static final int BACK_KEY_CLOSES_ACTIVITY = 2;
public static final int BACK_KEY_SENDS_ESC = 3;
public static final int BACK_KEY_SENDS_TAB = 4;
private static final int BACK_KEY_MAX = 4;
public TermSettings(Resources res, SharedPreferences prefs) {
readDefaultPrefs(res);
readPrefs(prefs);
}
private void readDefaultPrefs(Resources res) {
mStatusBar = Integer.parseInt(res.getString(R.string.pref_statusbar_default));
mActionBarMode = res.getInteger(R.integer.pref_actionbar_default);
mOrientation = res.getInteger(R.integer.pref_orientation_default);
mCursorStyle = Integer.parseInt(res.getString(R.string.pref_cursorstyle_default));
mCursorBlink = Integer.parseInt(res.getString(R.string.pref_cursorblink_default));
mFontSize = Integer.parseInt(res.getString(R.string.pref_fontsize_default));
mColorId = Integer.parseInt(res.getString(R.string.pref_color_default));
mUTF8ByDefault = res.getBoolean(R.bool.pref_utf8_by_default_default);
mBackKeyAction = Integer.parseInt(res.getString(R.string.pref_backaction_default));
mControlKeyId = Integer.parseInt(res.getString(R.string.pref_controlkey_default));
mFnKeyId = Integer.parseInt(res.getString(R.string.pref_fnkey_default));
mUseCookedIME = Integer.parseInt(res.getString(R.string.pref_ime_default));
mFailsafeShell = res.getString(R.string.pref_shell_default);
mShell = mFailsafeShell;
mInitialCommand = res.getString(R.string.pref_initialcommand_default);
mTermType = res.getString(R.string.pref_termtype_default);
mCloseOnExit = res.getBoolean(R.bool.pref_close_window_on_process_exit_default);
mVerifyPath = res.getBoolean(R.bool.pref_verify_path_default);
mDoPathExtensions = res.getBoolean(R.bool.pref_do_path_extensions_default);
mAllowPathPrepend = res.getBoolean(R.bool.pref_allow_prepend_path_default);
// the mHomePath default is set dynamically in readPrefs()
mAltSendsEsc = res.getBoolean(R.bool.pref_alt_sends_esc_default);
mMouseTracking = res.getBoolean(R.bool.pref_mouse_tracking_default);
mUseKeyboardShortcuts = res.getBoolean(R.bool.pref_use_keyboard_shortcuts_default);
}
public void readPrefs(SharedPreferences prefs) {
mPrefs = prefs;
mStatusBar = readIntPref(STATUSBAR_KEY, mStatusBar, 1);
mActionBarMode = readIntPref(ACTIONBAR_KEY, mActionBarMode, ACTION_BAR_MODE_MAX);
mOrientation = readIntPref(ORIENTATION_KEY, mOrientation, 2);
// mCursorStyle = readIntPref(CURSORSTYLE_KEY, mCursorStyle, 2);
// mCursorBlink = readIntPref(CURSORBLINK_KEY, mCursorBlink, 1);
mFontSize = readIntPref(FONTSIZE_KEY, mFontSize, 288);
mColorId = readIntPref(COLOR_KEY, mColorId, COLOR_SCHEMES.length - 1);
mUTF8ByDefault = readBooleanPref(UTF8_KEY, mUTF8ByDefault);
mBackKeyAction = readIntPref(BACKACTION_KEY, mBackKeyAction, BACK_KEY_MAX);
mControlKeyId = readIntPref(CONTROLKEY_KEY, mControlKeyId,
CONTROL_KEY_SCHEMES.length - 1);
mFnKeyId = readIntPref(FNKEY_KEY, mFnKeyId,
FN_KEY_SCHEMES.length - 1);
mUseCookedIME = readIntPref(IME_KEY, mUseCookedIME, 1);
mShell = readStringPref(SHELL_KEY, mShell);
mInitialCommand = readStringPref(INITIALCOMMAND_KEY, mInitialCommand);
mTermType = readStringPref(TERMTYPE_KEY, mTermType);
mCloseOnExit = readBooleanPref(CLOSEONEXIT_KEY, mCloseOnExit);
mVerifyPath = readBooleanPref(VERIFYPATH_KEY, mVerifyPath);
mDoPathExtensions = readBooleanPref(PATHEXTENSIONS_KEY, mDoPathExtensions);
mAllowPathPrepend = readBooleanPref(PATHPREPEND_KEY, mAllowPathPrepend);
mHomePath = readStringPref(HOMEPATH_KEY, mHomePath);
mAltSendsEsc = readBooleanPref(ALT_SENDS_ESC, mAltSendsEsc);
mMouseTracking = readBooleanPref(MOUSE_TRACKING, mMouseTracking);
mUseKeyboardShortcuts = readBooleanPref(USE_KEYBOARD_SHORTCUTS,
mUseKeyboardShortcuts);
mPrefs = null; // we leak a Context if we hold on to this
}
private int readIntPref(String key, int defaultValue, int maxValue) {
int val;
try {
val = Integer.parseInt(
mPrefs.getString(key, Integer.toString(defaultValue)));
} catch (NumberFormatException e) {
val = defaultValue;
}
val = Math.max(0, Math.min(val, maxValue));
return val;
}
private String readStringPref(String key, String defaultValue) {
return mPrefs.getString(key, defaultValue);
}
private boolean readBooleanPref(String key, boolean defaultValue) {
return mPrefs.getBoolean(key, defaultValue);
}
public boolean showStatusBar() {
return (mStatusBar != 0);
}
public int actionBarMode() {
return mActionBarMode;
}
public int getScreenOrientation() {
return mOrientation;
}
public int getCursorStyle() {
return mCursorStyle;
}
public int getCursorBlink() {
return mCursorBlink;
}
public int getFontSize() {
return mFontSize;
}
public int[] getColorScheme() {
return COLOR_SCHEMES[mColorId];
}
public boolean defaultToUTF8Mode() {
return mUTF8ByDefault;
}
public int getBackKeyAction() {
return mBackKeyAction;
}
public boolean backKeySendsCharacter() {
return mBackKeyAction >= BACK_KEY_SENDS_ESC;
}
public boolean getAltSendsEscFlag() {
return mAltSendsEsc;
}
public boolean getMouseTrackingFlag() {
return mMouseTracking;
}
public boolean getUseKeyboardShortcutsFlag() {
return mUseKeyboardShortcuts;
}
public int getBackKeyCharacter() {
switch (mBackKeyAction) {
case BACK_KEY_SENDS_ESC: return 27;
case BACK_KEY_SENDS_TAB: return 9;
default: return 0;
}
}
public int getControlKeyId() {
return mControlKeyId;
}
public int getFnKeyId() {
return mFnKeyId;
}
public int getControlKeyCode() {
return CONTROL_KEY_SCHEMES[mControlKeyId];
}
public int getFnKeyCode() {
return FN_KEY_SCHEMES[mFnKeyId];
}
public boolean useCookedIME() {
return (mUseCookedIME != 0);
}
public String getShell() {
return mShell;
}
public String getFailsafeShell() {
return mFailsafeShell;
}
public String getInitialCommand() {
return mInitialCommand;
}
public String getTermType() {
return mTermType;
}
public boolean closeWindowOnProcessExit() {
return mCloseOnExit;
}
public boolean verifyPath() {
return mVerifyPath;
}
public boolean doPathExtensions() {
return mDoPathExtensions;
}
public boolean allowPathPrepend() {
return mAllowPathPrepend;
}
public void setPrependPath(String prependPath) {
mPrependPath = prependPath;
}
public String getPrependPath() {
return mPrependPath;
}
public void setAppendPath(String appendPath) {
mAppendPath = appendPath;
}
public String getAppendPath() {
return mAppendPath;
}
public void setHomePath(String homePath) {
mHomePath = homePath;
}
public String getHomePath() {
return mHomePath;
}
}