/**
* 920 Text Editor is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 920 Text Editor is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with 920 Text Editor. If not, see <http://www.gnu.org/licenses/>.
*/
package com.jecelyin.editor;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager.NameNotFoundException;
import android.graphics.Color;
import android.graphics.Typeface;
import android.net.Uri;
import android.os.Bundle;
import android.preference.*;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.Preference.OnPreferenceClickListener;
import android.widget.Toast;
import com.jecelyin.colorschemes.ColorScheme;
import com.jecelyin.editor.preferences.CustomMenu;
import com.jecelyin.util.ColorPicker;
import com.jecelyin.util.TimeUtil;
import java.net.URLEncoder;
public class EditorPreference extends PreferenceActivity
{
private int category;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
JecApp.addActivity(this);
category = getIntent().getIntExtra("category", R.xml.options);
addPreferencesFromResource(category);
switch(category)
{
case R.xml.highlight:
initHighlight();
break;
case R.xml.help:
initHelp();
break;
case R.xml.options:
init();
break;
case R.xml.editors:
initEditors();
break;
case R.xml.date_format:
initDateFormat();
break;
case R.xml.other:
initOther();
break;
case R.xml.project:
initProject();
break;
}
}
protected void onDestroy()
{
super.onDestroy();
JecApp.removeActivity(this);
}
private void initOther()
{
ListPreference screen_ori = (ListPreference) findPreference("screen_orientation");
String[] ori = new String[]{getString(R.string.screen_orientation_auto), getString(R.string.screen_orientation_landscape), getString(R.string.screen_orientation_portrait)};
screen_ori.setEntries(ori);
screen_ori.setEntryValues(ori);
screen_ori.setDefaultValue(getString(R.string.screen_orientation_auto));
}
private void initHelp()
{
findPreference("about").setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference arg0)
{
Intent intent = new Intent(EditorPreference.this, About.class);
startActivity(intent);
return true;
}
});
findPreference("help").setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference arg0)
{
Help.showHelp(EditorPreference.this);
return true;
}
});
findPreference("feedback").setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference arg0)
{
Uri uri;
try
{
uri = Uri.parse("http://www.jecelyin.com/920report.php?ver=" + URLEncoder.encode(JecEditor.version+"/"+android.os.Build.MODEL+"/"+android.os.Build.VERSION.RELEASE, "utf-8"));
}catch (Exception e)
{
uri = Uri.parse("http://www.jecelyin.com/920report.php?var=badver");
}
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
// Intent intent = new Intent(Options.this, Donate.class);
startActivity(intent);
return true;
}
});
/*findPreference("project").setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference arg0)
{
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.getlocalization.com/920TextEditor/"));
startActivity(intent);
return true;
}
});*/
}
private void initHighlight()
{
setHighlightEvent("hlc_font", EditorSettings.HIGHLIGHT_FONT);
setHighlightEvent("hlc_backgroup", EditorSettings.HIGHLIGHT_BACKGROUP);
setHighlightEvent("hlc_string", EditorSettings.HIGHLIGHT_STRING);
setHighlightEvent("hlc_keyword", EditorSettings.HIGHLIGHT_KEYWORD);
setHighlightEvent("hlc_comment", EditorSettings.HIGHLIGHT_COMMENT);
setHighlightEvent("hlc_tag", EditorSettings.HIGHLIGHT_TAG);
setHighlightEvent("hlc_attr_name", EditorSettings.HIGHLIGHT_ATTR_NAME);
setHighlightEvent("hlc_function", EditorSettings.HIGHLIGHT_FUNCTION);
PreferenceCategory cate = (PreferenceCategory) findPreference("custom_highlight_color");
cate.setEnabled(EditorSettings.CUSTORM_HIGHLIGHT_COLOR);
CheckBoxPreference uchc = (CheckBoxPreference) findPreference("use_custom_hl_color");
uchc.setOnPreferenceChangeListener(mOnHighlightChange);
mOnHighlightChange.onPreferenceChange(null, EditorSettings.CUSTORM_HIGHLIGHT_COLOR);
ListPreference csPref = (ListPreference) findPreference("hl_colorscheme");
String[] csNames = ColorScheme.getSchemeNames();
if(csNames == null)
csNames = new String[]{ "Default" };
csPref.setEntries(csNames);
csPref.setEntryValues(csNames);
}
private void setHighlightEvent(final String key, final String val)
{
Preference pref = (Preference) findPreference(key);
pref.setSummary(val);
pref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference)
{
ColorPicker cp = new ColorPicker(
EditorPreference.this
, new ColorListener()
, preference.getKey()
, preference.getTitle().toString()
, Color.parseColor(val));
cp.show();
return true;
}
});
}
private class ColorListener implements ColorPicker.OnColorChangedListener
{
@Override
public void onColorChanged(String key, String color)
{
Preference pref = (Preference) findPreference(key);
pref.setSummary(color);
pref.getEditor().putString(key, color).commit();
}
}
private void initView()
{
ListPreference fontPf = (ListPreference) findPreference("font");
String[] fonts = new String[]{ "Normal", "Monospace", "Sans Serif", "Serif" };
fontPf.setEntries(fonts);
fontPf.setEntryValues(fonts);
fontPf.setDefaultValue(EditorSettings.FONT);
ListPreference fontSizePf = (ListPreference) findPreference("font_size");
String[] font_size = new String[]{ "10", "12", "13", "14", "16", "18", "20", "22", "24", "26", "28", "32" };
fontSizePf.setEntries(font_size);
fontSizePf.setEntryValues(font_size);
fontSizePf.setDefaultValue(String.valueOf(EditorSettings.FONT_SIZE));
ListPreference cursorWidthLP = (ListPreference) findPreference("cursor_width");
String[] cursor_width = new String[]{ "1", "2", "3", "4" };
cursorWidthLP.setEntries(cursor_width);
cursorWidthLP.setEntryValues(cursor_width);
cursorWidthLP.setDefaultValue(String.valueOf(EditorSettings.CURSOR_WIDTH));
}
private void initEditors()
{
initView();
setOptionsPreference("date_format", R.xml.date_format);
}
private void initProject()
{
ListPreference encoding = (ListPreference) findPreference("encoding");
String[] lists = EncodingList.list;
lists[0] = getString(R.string.auto_detection);
encoding.setEntries(lists);
encoding.setEntryValues(lists);
encoding.setDefaultValue(EditorSettings.DEFAULT_ENCODING);
}
private void initDateFormat()
{
ListPreference sys_format = (ListPreference) findPreference("sys_date_format");
String[] fmName = new String[]{
TimeUtil.getDateByFormat(0)
,TimeUtil.getDateByFormat(1)
,TimeUtil.getDateByFormat(2)
,TimeUtil.getDateByFormat(3)
,TimeUtil.getDateByFormat(4)
,TimeUtil.getDateByFormat(5)
,TimeUtil.getDateByFormat(6)
,TimeUtil.getDateByFormat(7)
,TimeUtil.getDateByFormat(8)
,TimeUtil.getDateByFormat(9)
};
String[] fmVal = new String[]{
"0","1","2","3","4","5","6","7","8","9"
};
sys_format.setEntries(fmName);
sys_format.setEntryValues(fmVal);
if("".equals(sys_format.getValue()))
sys_format.setValue(fmVal[0]);
EditTextPreference custom_format = (EditTextPreference) findPreference("custom_date_format");
custom_format.getEditText().setSingleLine();
}
private void setOptionsPreference(final String key, final int id)
{
Preference pref = (Preference) findPreference(key);
pref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference arg0)
{
Intent intent = new Intent(EditorPreference.this, EditorPreference.class);
intent.putExtra("category", id);
startActivity(intent);
return true;
}
});
}
private void init()
{
setOptionsPreference("opt_editors", R.xml.editors);
setOptionsPreference("opt_project", R.xml.project);
setOptionsPreference("opt_highlight", R.xml.highlight);
setOptionsPreference("opt_other", R.xml.other);
setOptionsPreference("opt_help", R.xml.help);
/*findPreference("donate").setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference arg0)
{
Uri uri = Uri.parse("http://www.jecelyin.com/donate.html");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
return true;
}
});*/
findPreference("clear_history").setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference arg0)
{
SharedPreferences sp = getSharedPreferences(JecEditor.PREF_HISTORY, MODE_PRIVATE);
sp.edit().clear().commit();
Toast.makeText(getApplicationContext(), R.string.clear_history_ok, Toast.LENGTH_LONG).show();
return true;
}
});
findPreference("opt_checkupdate").setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference arg0)
{
Intent intent;
try
{
intent = new Intent(Intent.ACTION_VIEW,
Uri.parse("http://www.jecelyin.com/920upgrade.php?code="
+ getPackageManager().getPackageInfo(getPackageName(), 0).versionCode));
startActivity(intent);
} catch (NameNotFoundException e)
{
e.printStackTrace();
}
return true;
}
});
/*
findPreference("opt_custom_toolbar").setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference arg0)
{
Intent intent;
try
{
intent = new Intent(EditorPreference.this, CustomMenu.class);
startActivity(intent);
} catch (Exception e)
{
e.printStackTrace();
}
return true;
}
});*/
}
public static Typeface getFont(String font)
{
if("Monospace".equals(font))
return Typeface.MONOSPACE;
else if("Sans Serif".equals(font))
return Typeface.SANS_SERIF;
else if("Serif".equals(font))
return Typeface.SERIF;
return Typeface.DEFAULT;
}
private OnPreferenceChangeListener mOnHighlightChange = new OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference pref, Object val)
{
PreferenceCategory cate = (PreferenceCategory) findPreference("custom_highlight_color");
ListPreference colorscheme = (ListPreference) findPreference("hl_colorscheme");
boolean isTrue = val.toString().equals("true");
cate.setEnabled(isTrue ? true : false);
colorscheme.setEnabled(isTrue ? false : true);
return true;
}
};
}