package tw.kenshinn.keyboardTerm;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.jar.Attributes.Name;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import com.adwhirl.AdWhirlLayout;
import tw.kenshinn.keyboardTerm.R;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.content.pm.PackageManager.NameNotFoundException;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceGroup;
import android.preference.PreferenceManager;
import android.preference.Preference.OnPreferenceChangeListener;
import android.util.Log;
import android.util.Xml;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MenuItem.OnMenuItemClickListener;
import android.widget.EditText;
import android.widget.Toast;
public class KeyboardsSettingsActivity extends PreferenceActivity {
private static final String TAG = "KeyboardsSettings";
private ArrayList<String> mKeyDefinesList = new ArrayList<String>();
private ArrayList<String> mKeyValuesList = new ArrayList<String>();
private final static int IMPORT_KEYBOARD = 1;
private int mCount;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuItem exportItem = menu.add(R.string.menu_export);
exportItem.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
Intent intent = new Intent();
intent.setClass(KeyboardsSettingsActivity.this, ExportKeyboardActivity.class);
startActivity(intent);
return true;
}
});
MenuItem importItem = menu.add(R.string.menu_import);
importItem.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
File sdCardFile = Environment.getExternalStorageDirectory();
final File importPath = new File(sdCardFile.getPath() + File.separator + "keyboardterm" + File.separator + "keyboard.xml");
if(importPath.exists()) {
Intent intent = new Intent();
intent.setClass(KeyboardsSettingsActivity.this, ImportKeyboardActivity.class);
intent.putExtra(ImportKeyboardActivity.KEY_INTENT_IMPORT, importPath.getPath());
startActivityForResult(intent, IMPORT_KEYBOARD);
// AlertDialog.Builder builder = new AlertDialog.Builder(KeyboardsSettingsActivity.this);
// builder.setTitle(R.string.menu_import);
// builder.setMessage(getResources().getString(R.string.message_import_confirm, importPath.getPath()));
// builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
// public void onClick(DialogInterface dialog, int whichButton) {
// runOnUiThread(new Runnable() {
//
// @Override
// public void run() {
// importSetting(importPath);
// }
// });
// }
// });
//
// builder.setNegativeButton("Cancel",
// new DialogInterface.OnClickListener() {
// public void onClick(DialogInterface dialog, int whichButton) {
// }
// });
//
// builder.show();
//
// } else {
// Toast.makeText(KeyboardsSettingsActivity.this, importPath + getResources().getString(R.string.message_not_found_cant_import), 1000).show();
// }
}
return true;
}
});
return super.onCreateOptionsMenu(menu);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
String[] definedArray = getResources().getStringArray(R.array.key_defined_name);
for(int i = 0; i < definedArray.length; i++)
mKeyDefinesList.add(definedArray[i]);
mKeyDefinesList.add(getResources().getStringArray(R.array.settings_send_key)[0]);
String[] valueArray = getResources().getStringArray(R.array.key_defined_value);
for(int i = 0; i < definedArray.length; i++)
mKeyValuesList.add(valueArray[i]);
mKeyValuesList.add(getResources().getStringArray(R.array.settings_send_key_values)[0]);
super.onCreate(savedInstanceState);
bindPreference();
String keyAdWhirl = "c7bce28b019a4e8dbcf33091bce6b542";
//this.getListView().addFooterView(new com.admob.android.ads.AdView(this));
this.getListView().addFooterView(new AdWhirlLayout(this, keyAdWhirl));
}
private void bindPreference() {
try {
addPreferencesFromResource(R.xml.keyboards);
} catch (ClassCastException e) {
Log.e(TAG, "reset default values");
PreferenceManager.getDefaultSharedPreferences(this).edit().clear().commit();
PreferenceManager.setDefaultValues(this, R.xml.keyboards, true);
addPreferencesFromResource(R.xml.keyboards);
}
mCount = Integer.parseInt(PreferenceManager.getDefaultSharedPreferences(this).getString("settings_arrow_key_group_count","1"));
turnOnKeyboards(mCount);
getPreferenceScreen().findPreference("settings_use_arrow_key")
.setOnPreferenceChangeListener(
new OnPreferenceChangeListener() {
public boolean onPreferenceChange(
Preference preference, Object newValue) {
boolean depend = (Boolean) newValue;
getPreferenceScreen().findPreference(
"settings_arrow_key_general").setEnabled(
depend);
getPreferenceScreen().findPreference(
"settings_arrow_key_keyboards").setEnabled(
depend);
turnOnKeyboards(mCount);
return true;
}
});
getPreferenceScreen().findPreference("settings_arrow_key_group_count")
.setOnPreferenceChangeListener(
new OnPreferenceChangeListener() {
public boolean onPreferenceChange(
Preference preference, Object newValue) {
int count = Integer.parseInt(newValue.toString());
turnOnKeyboards(count);
return true;
}
});
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
String send_key_in_list = pref.getString("settings_send_key_in_list", "ENTER");
String send_key_in_reading = pref.getString("settings_send_key_in_reading", "SPACE");
Preference pref_in_list = getPreferenceScreen().findPreference("settings_send_key_in_list");
Preference pref_in_reading = getPreferenceScreen().findPreference("settings_send_key_in_reading");
if(mKeyValuesList.contains(send_key_in_list)) {
int index = mKeyValuesList.indexOf(send_key_in_list);
pref_in_list.setSummary(mKeyDefinesList.get(index));
}
if(mKeyValuesList.contains(send_key_in_reading)) {
int index = mKeyValuesList.indexOf(send_key_in_reading);
pref_in_reading.setSummary(mKeyDefinesList.get(index));
}
pref_in_list.setOnPreferenceChangeListener(mButtonChangeListener);
pref_in_reading.setOnPreferenceChangeListener(mButtonChangeListener);
boolean scroll_switch = pref.getBoolean("settings_use_scrolling_switch", false);
getPreferenceScreen().findPreference("settings_keyboard_switch").setEnabled(!scroll_switch);
getPreferenceScreen().findPreference("settings_use_scrolling_switch")
.setOnPreferenceChangeListener(
new OnPreferenceChangeListener() {
public boolean onPreferenceChange(
Preference preference, Object newValue) {
boolean scroll_switch = Boolean.parseBoolean(newValue.toString());
getPreferenceScreen().findPreference("settings_keyboard_switch").setEnabled(!scroll_switch);
return true;
}
});
}
private void turnOnKeyboards(int count) {
//int count = mCount;
PreferenceGroup group = (PreferenceGroup)getPreferenceScreen().findPreference(
"settings_arrow_key_keyboards");
for (int i = 0; i < group.getPreferenceCount(); i++) {
group.getPreference(i).setEnabled(false);
}
for(int i = 0; i < count ; i++) {
//Log.v("KeyboardsSettingsActivity", "group.getPreference(i): " + group.getPreference(i).getClass().getName());
group.getPreference(i).setEnabled(true);
updateKeyboardButtons((PreferenceGroup)(group.getPreference(i)));
}
}
private void updateKeyboardButtons(final PreferenceGroup group) {
//Log.v("KeyboardsSettingsActivity", "updateKeyboardButtons, group: " + group);
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
String keyCountString = pref.getString(group.getPreference(0).getKey(), "8");
int keyCount = Integer.parseInt(keyCountString);
updateButtonState(group, keyCount);
}
private void updateButtonState(final PreferenceGroup group, int enableCount) {
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
group.getPreference(0).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference preference, Object newValue) {
updateButtonState(group, Integer.parseInt(newValue.toString()));
return true;
}
});
group.getPreference(0).setSummary(String.valueOf(enableCount));
for(int i = 1; i < group.getPreferenceCount(); i++) {
Preference item = group.getPreference(i);
String keyValue = pref.getString(item.getKey(), "NONE");
item.setTitle(getResources().getString(R.string.setting_button) + " " + i);
if(keyValue.startsWith("custom_")) {
item.setSummary(keyValue.replaceAll("^custom_", ""));
item.setOnPreferenceChangeListener(mButtonChangeListener);
continue;
}
if(mKeyValuesList.contains(keyValue)) {
int index = mKeyValuesList.indexOf(keyValue);
//Log.v("KeyboardsSettingsActivity", "set button " + i + " : " + mKeyDefinesList.get(index) + ", keyValue: " + keyValue + ", key: " + item.getKey());
item.setSummary(mKeyDefinesList.get(index));
} else {
item.setSummary(keyValue);
}
item.setOnPreferenceChangeListener(mButtonChangeListener);
if(i <= enableCount)
item.setEnabled(true);
else
item.setEnabled(false);
}
}
private OnPreferenceChangeListener mButtonChangeListener = new OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference preference, Object newValue) {
final Preference pref = preference;
if(newValue.toString().equals("custom")) {
AlertDialog.Builder alert = new AlertDialog.Builder(
KeyboardsSettingsActivity.this);
alert.setTitle(R.string.key_Desc_Custom);
// Set an EditText view to get user input
final EditText input = new EditText(KeyboardsSettingsActivity.this);
input.setSingleLine(true);
alert.setView(input);
alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
String value = input.getText().toString();
Editor editor = pref.getEditor();
editor.putString(pref.getKey(), "custom_"+ value);
editor.commit();
pref.setSummary(value);
}
});
alert.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
// Canceled.
}
});
alert.show();
return false;
}
if(mKeyValuesList.contains(newValue)) {
int index = mKeyValuesList.indexOf(newValue);
preference.setSummary(mKeyDefinesList.get(index));
}
return true;
}
};
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == IMPORT_KEYBOARD && resultCode == 1) {
getPreferenceScreen().removeAll();
bindPreference();
}
}}