/*
* 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 net.momodalo.app.vimtouch;
import android.content.res.Resources;
import android.content.SharedPreferences;
import android.view.KeyEvent;
import net.momodalo.app.vimtouch.R;
public class VimSettings {
private SharedPreferences mPrefs;
private int mActionBarMode;
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 boolean mTouchGesture;
private boolean mSingleTapESC;
private boolean mZoomBottom;
private int mQuickbarPos;
private long mLastVersionCode;
private boolean mQuickbarShow;
private boolean mFullscreen;
private boolean mSuRoot;
private boolean mDarkTheme;
private String mPrependPath = null;
private String mAppendPath = null;
private static final String STATUSBAR_KEY = "statusbar";
private static final String ACTIONBAR_KEY = "actionbar";
private static final String CURSORSTYLE_KEY = "cursorstyle";
private static final String CURSORBLINK_KEY = "cursorblink";
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 TOUCHGESTURE_KEY = "touch_gesture";
private static final String SINGLETAPESC_KEY = "single_tap_esc";
private static final String ZOOMBOTTOM_KEY = "zoombottom";
private static final String QUICKBARPOS_KEY = "quickbar_pos";
public static final String LASTVERSION_KEY = "last_version";
public static final String QUICKBARSHOW_KEY = "quickbar_show";
public static final String FULLSCREEN_KEY = "fullscreen";
public static final String SUROOT_KEY = "su_root";
public static final String DARKTHEME_KEY = "dark_theme";
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;
// foreground index, foreground color, background index, background color
public static final int[][] COLOR_SCHEMES = {
{BLACK, WHITE},
{WHITE, BLACK},
{WHITE, BLUE},
{GREEN, BLACK},
{AMBER, BLACK},
{RED, BLACK},
{HOLO_BLUE, 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;
/** 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 VimSettings(Resources res, SharedPreferences prefs) {
readDefaultPrefs(res);
readPrefs(prefs);
}
private void readDefaultPrefs(Resources res) {
mActionBarMode = res.getInteger(R.integer.pref_actionbar_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);
mTouchGesture = res.getBoolean(R.bool.pref_touch_gesture_default);
mSingleTapESC = res.getBoolean(R.bool.pref_single_tap_esc_default);
mZoomBottom = res.getBoolean(R.bool.pref_zoombottom_default);
mQuickbarPos = res.getInteger(R.integer.pref_quickbar_pos_default);
mQuickbarShow = res.getBoolean(R.bool.pref_quickbar_show_default);
mFullscreen = res.getBoolean(R.bool.pref_fullscreen_default);
mLastVersionCode = 0;
}
public void readPrefs(SharedPreferences prefs) {
mPrefs = prefs;
mActionBarMode = readIntPref(ACTIONBAR_KEY, mActionBarMode, ACTION_BAR_MODE_MAX);
// 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);
mTouchGesture = readBooleanPref(TOUCHGESTURE_KEY, mTouchGesture);
mSingleTapESC = readBooleanPref(SINGLETAPESC_KEY, mSingleTapESC);
mZoomBottom = readBooleanPref(ZOOMBOTTOM_KEY, mZoomBottom);
mQuickbarPos = readIntPref(QUICKBARPOS_KEY, mQuickbarPos,4);
mQuickbarShow = readBooleanPref(QUICKBARSHOW_KEY, mQuickbarShow);
mFullscreen = readBooleanPref(FULLSCREEN_KEY, mFullscreen);
mSuRoot = readBooleanPref(SUROOT_KEY, mSuRoot);
mDarkTheme = readBooleanPref(DARKTHEME_KEY, mDarkTheme);
mLastVersionCode = mPrefs.getLong(LASTVERSION_KEY, 0);
mPrefs = null; // we leak a Context if we hold on to this
}
public void writePrefs(SharedPreferences prefs){
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean(QUICKBARSHOW_KEY, mQuickbarShow);
editor.putBoolean(FULLSCREEN_KEY, mFullscreen);
editor.commit();
}
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 long getLastVersionCode(){
return mLastVersionCode;
}
public int actionBarMode() {
return mActionBarMode;
}
public int getCursorStyle() {
return mCursorStyle;
}
public int getCursorBlink() {
return mCursorBlink;
}
public void setFontSize(int s) {
mFontSize = s;
}
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 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 boolean getTouchGesture() {
return mTouchGesture;
}
public boolean getSingleTapESC() {
return mSingleTapESC;
}
public boolean getZoomBottom() {
return mZoomBottom;
}
public int getQuickbarPosition() {
return mQuickbarPos;
}
public boolean getQuickbarShow() {
return mQuickbarShow;
}
public void setQuickbarShow( boolean b) {
mQuickbarShow = b;
}
public boolean getFullscreen() {
return mFullscreen;
}
public void setFullscreen( boolean b) {
mFullscreen = b;
}
public boolean getSuRoot() {
return mSuRoot;
}
public void setSuRoot( boolean b) {
mSuRoot = b;
}
public boolean getDarkTheme() {
return mDarkTheme;
}
public void setDarkTheme( boolean b) {
mDarkTheme = b;
}
}