package com.jecelyin.editor; import java.util.ArrayList; import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.content.pm.PackageManager; import android.preference.PreferenceManager; import android.widget.Toast; import com.jecelyin.util.JecLog; import com.jecelyin.util.LinuxShell; import com.jecelyin.util.MathUtils; public class EditorSettings { private static Context mContext; private static SharedPreferences mPrefs; // 非设置部分 start------- public final static int LAST_EDIT_DISTANCE_LIMIT = 20; // 最后编辑位置距离限制,不做同行判断 public static boolean MULTI_TOUCH = true; /** 缩小时最小字体 */ public static final float MIN_TEXT_SIZE = 10f; /** 放大时最大字体 */ public static final float MAX_TEXT_SIZE = 32.0f; // end public static boolean USE_DEFAULT_TOOLBAR = true; public static boolean USE_SPACE_FOR_TAB = false; public static boolean CUSTORM_HIGHLIGHT_COLOR = false; public static int INDENT_SIZE = 4; public static String INDENT_STRING = "\t"; public static boolean OPEN_LAST_FILES = false; public static boolean TRY_ROOT = false; public static boolean ENABLE_TOUCH_ZOOM = true; public static boolean READONLY_MODE = false; public static boolean AUTO_SAVE = false; public static boolean BACK_BUTTON_EXIT = true; public static boolean USE_CUSTOM_FORMAT = false; public static boolean ENABLE_HIGHLIGHT = true; public static boolean WORD_WRAP = true; public static boolean SHOW_LINENUM = true; public static boolean SHOW_WHITESPACE = false; public static boolean AUTO_INDENT = false; public static boolean KEEP_SCREEN_ON = false; public static boolean SPELLCHECK = false; public static boolean AUTO_CAPITALIZE = false; public static String HIGHLIGHT_FONT = "#000000";; public static String HIGHLIGHT_BACKGROUP = "#ffffff"; public static String HIGHLIGHT_STRING = "#008800"; public static String HIGHLIGHT_KEYWORD = "#000088"; public static String HIGHLIGHT_COMMENT = "#3F7F5F"; public static String HIGHLIGHT_TAG = "#800080"; public static String HIGHLIGHT_ATTR_NAME = "#FF0000"; public static String HIGHLIGHT_FUNCTION = "#000080"; public static String HIGHLIGHT_LAST_PATH = ""; public static String HIGHLIGHT_COLOR_SCHEME = ""; public static String FONT = "Monospace"; public static String DATE_FORMAT = "0"; public static String SYS_DATE_FORMAT = "0"; public static String CUSTOM_DATE_FORMAT = "0"; public static String SCREEN_ORIENTATION = "auto"; public static int FONT_SIZE = 12; public static int LIMIT_HIGHLIGHT_LENGTH = 400 * 1024; // unit: kb public static int CURSOR_WIDTH = 2; public static String DEFAULT_ENCODING = ""; private static ArrayList<OnSharedPreferenceChangeListener> mListeners = new ArrayList<SharedPreferences.OnSharedPreferenceChangeListener>(); public static void initialize(final Context context) { mContext = context.getApplicationContext(); mPrefs = PreferenceManager.getDefaultSharedPreferences(mContext); mPrefs.registerOnSharedPreferenceChangeListener(mOnSharedPreferenceChangeListener); onPreferenceChanged(mPrefs, null); // 判断设备是否支持多点触摸 PackageManager pm = context.getPackageManager(); MULTI_TOUCH = pm.hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH_DISTINCT); } public static SharedPreferences getInstance(String name) { return mContext.getSharedPreferences(name, Context.MODE_PRIVATE); } public static void addOnSharedPreferenceChanged(OnSharedPreferenceChangeListener l) { mListeners.add(l); } static OnSharedPreferenceChangeListener mOnSharedPreferenceChangeListener = new OnSharedPreferenceChangeListener() { @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { onPreferenceChanged(sharedPreferences, key); //先要保证本类是最新的,才能让其它类用 int size = mListeners.size(); for (int i=0; i<size; i++) {JecLog.d("CC "+mListeners.get(i)); mListeners.get(i).onSharedPreferenceChanged(sharedPreferences, key); } } }; private static void onPreferenceChanged(SharedPreferences sharedPreferences, String key) { if (key == null || "use_default_toolbar_settings".equals(key)) USE_DEFAULT_TOOLBAR = mPrefs.getBoolean("use_default_toolbar_settings", USE_DEFAULT_TOOLBAR); if (key == null || "use_space_for_tab".equals(key)) { USE_SPACE_FOR_TAB = mPrefs.getBoolean("use_space_for_tab", USE_SPACE_FOR_TAB); INDENT_STRING = null; } if (key == null || "use_custom_hl_color".equals(key)) CUSTORM_HIGHLIGHT_COLOR = mPrefs.getBoolean("use_custom_hl_color", CUSTORM_HIGHLIGHT_COLOR); if (key == null || INDENT_STRING == null || "indent_size".equals(key)) { int size = MathUtils.toInt(mPrefs.getString("indent_size", "4"),4); INDENT_SIZE = size > 0 && size < 12 ? size : 4; INDENT_STRING = USE_SPACE_FOR_TAB ? new String(new char[INDENT_SIZE]).replace("\0", " ") : "\t"; } if (key == null || "open_last_file".equals(key)) OPEN_LAST_FILES = mPrefs.getBoolean("open_last_file", OPEN_LAST_FILES); if (key == null || "get_root".equals(key)) { TRY_ROOT = mPrefs.getBoolean("get_root", TRY_ROOT); if(TRY_ROOT) { if(!LinuxShell.canRoot()) { EditorSettings.TRY_ROOT = false; Toast.makeText(mContext, "ROOT failed!", Toast.LENGTH_LONG).show(); } } } if (key == null || "touch_zoom".equals(key)) ENABLE_TOUCH_ZOOM = mPrefs.getBoolean("touch_zoom", ENABLE_TOUCH_ZOOM); if (key == null || "readonly_mode".equals(key)) READONLY_MODE = mPrefs.getBoolean("readonly_mode", READONLY_MODE); if (key == null || "autosave".equals(key)) AUTO_SAVE = mPrefs.getBoolean("autosave", AUTO_SAVE); if (key == null || "back_button_exit".equals(key)) BACK_BUTTON_EXIT = mPrefs.getBoolean("back_button_exit", BACK_BUTTON_EXIT); if (key == null || "enable_highlight".equals(key)) ENABLE_HIGHLIGHT = mPrefs.getBoolean("enable_highlight", ENABLE_HIGHLIGHT); if (key == null || "wordwrap".equals(key)) WORD_WRAP = mPrefs.getBoolean("wordwrap", WORD_WRAP); if (key == null || "show_line_num".equals(key)) SHOW_LINENUM = mPrefs.getBoolean("show_line_num", SHOW_LINENUM); if (key == null || "show_tab".equals(key)) SHOW_WHITESPACE = mPrefs.getBoolean("show_tab", SHOW_WHITESPACE); if (key == null || "auto_indent".equals(key)) AUTO_INDENT = mPrefs.getBoolean("auto_indent", AUTO_INDENT); if (key == null || "keep_screen_on".equals(key)) KEEP_SCREEN_ON = mPrefs.getBoolean("keep_screen_on", KEEP_SCREEN_ON); if (key == null || "spellcheck".equals(key)) SPELLCHECK = mPrefs.getBoolean("spellcheck", SPELLCHECK); if (key == null || "auto_capitalize".equals(key)) AUTO_CAPITALIZE = mPrefs.getBoolean("auto_capitalize", AUTO_CAPITALIZE); if (key == null || "hlc_font".equals(key)) HIGHLIGHT_FONT = mPrefs.getString("hlc_font", HIGHLIGHT_FONT); if (key == null || "hlc_backgroup".equals(key)) HIGHLIGHT_BACKGROUP = mPrefs.getString("hlc_backgroup", HIGHLIGHT_BACKGROUP); if (key == null || "hlc_string".equals(key)) HIGHLIGHT_STRING = mPrefs.getString("hlc_string", HIGHLIGHT_STRING); if (key == null || "hlc_keyword".equals(key)) HIGHLIGHT_KEYWORD = mPrefs.getString("hlc_keyword", HIGHLIGHT_KEYWORD); if (key == null || "hlc_comment".equals(key)) HIGHLIGHT_COMMENT = mPrefs.getString("hlc_comment", HIGHLIGHT_COMMENT); if (key == null || "hlc_tag".equals(key)) HIGHLIGHT_TAG = mPrefs.getString("hlc_tag", HIGHLIGHT_TAG); if (key == null || "hlc_attr_name".equals(key)) HIGHLIGHT_ATTR_NAME = mPrefs.getString("hlc_attr_name", HIGHLIGHT_ATTR_NAME); if (key == null || "hlc_function".equals(key)) HIGHLIGHT_FUNCTION = mPrefs.getString("hlc_function", HIGHLIGHT_FUNCTION); if (key == null || "last_path".equals(key)) HIGHLIGHT_LAST_PATH = mPrefs.getString("last_path", HIGHLIGHT_LAST_PATH); if (key == null || "hl_colorscheme".equals(key)) HIGHLIGHT_COLOR_SCHEME = mPrefs.getString("hl_colorscheme", HIGHLIGHT_COLOR_SCHEME); if (key == null || "font".equals(key)) FONT = mPrefs.getString("font", FONT); if (key == null || "custom_format".equals(key)) USE_CUSTOM_FORMAT = mPrefs.getBoolean("custom_format", USE_CUSTOM_FORMAT); if (key == null || "sys_date_format".equals(key)) SYS_DATE_FORMAT = mPrefs.getString("sys_date_format", SYS_DATE_FORMAT); if (key == null || "custom_date_format".equals(key)) CUSTOM_DATE_FORMAT = mPrefs.getString("custom_date_format", CUSTOM_DATE_FORMAT); DATE_FORMAT = USE_CUSTOM_FORMAT ? CUSTOM_DATE_FORMAT : SYS_DATE_FORMAT; if (key == null || "screen_orientation".equals(key)) SCREEN_ORIENTATION = mPrefs.getString("screen_orientation", SCREEN_ORIENTATION); if (key == null || "font_size".equals(key)) FONT_SIZE = MathUtils.toInt(mPrefs.getString("font_size", String.valueOf(FONT_SIZE)),FONT_SIZE); if (key == null || "highlight_limit".equals(key)) LIMIT_HIGHLIGHT_LENGTH = MathUtils.toInt(mPrefs.getString("highlight_limit", String.valueOf(LIMIT_HIGHLIGHT_LENGTH)),LIMIT_HIGHLIGHT_LENGTH); // 1M if (key == null || "cursor_width".equals(key)) { CURSOR_WIDTH = MathUtils.toInt(mPrefs.getString("cursor_width", String.valueOf(CURSOR_WIDTH)), CURSOR_WIDTH); if (CURSOR_WIDTH < 1) CURSOR_WIDTH = 2; } if (key == null || "encoding".equals(key)) DEFAULT_ENCODING = mPrefs.getString("encoding", String.valueOf(DEFAULT_ENCODING)); } public static String getVersion() { return mPrefs.getString("version", "-1"); } public static boolean setString(String key, String value) { boolean result = mPrefs.edit().putString(key, value).commit(); if(result) onPreferenceChanged(mPrefs, key); return result; } public static boolean setBoolean(String key, boolean value) { boolean result = mPrefs.edit().putBoolean(key, value).commit(); if(result) onPreferenceChanged(mPrefs, key); return result; } }