package com.roiding.rterm; import java.util.HashMap; import java.util.Map; import tw.kenshinn.keyboardTerm.R; import tw.kenshinn.keyboardTerm.R.string; import tw.kenshinn.keyboardTerm.R.xml; import android.os.Bundle; import android.preference.CheckBoxPreference; import android.preference.EditTextPreference; import android.preference.ListPreference; import android.preference.Preference; import android.preference.PreferenceActivity; import android.preference.PreferenceCategory; import android.preference.Preference.OnPreferenceChangeListener; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.MenuItem.OnMenuItemClickListener; import com.roiding.rterm.bean.FunctionButton; import com.roiding.rterm.util.DBUtils; public class EditFunctionButtonActivity extends PreferenceActivity { private FunctionButton btn; private Map<String, String> valuesMap = new HashMap<String, String>(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.addPreferencesFromResource(R.xml.functionbtn); valuesMap.put("name", ""); valuesMap.put("keys", ""); valuesMap.put("sortnumber", "0"); valuesMap.put("openkeyboard", "1"); btn = (FunctionButton) getIntent().getSerializableExtra("button"); if (btn != null) extractValues(btn); updatePreferenceDisplay(); System.out.println(getPreferenceScreen().getPreferenceCount()); OnPreferenceChangeListener listener = new OnPreferenceChangeListener() { public boolean onPreferenceChange(Preference preference, Object newValue) { String key = preference.getKey(); if(newValue instanceof String) { String value = newValue.toString(); Log.i("TT", "onPreferenceChange," + key + ":" + value); valuesMap.put(key, value); } else if (newValue instanceof Boolean) { Boolean b = Boolean.parseBoolean(newValue.toString()); Log.i("TT", "onPreferenceChange," + key + ":" + b); valuesMap.put(key, b ? "1" : "0"); } updatePreferenceDisplay(); return false; }; }; for (int i = 0; i < getPreferenceScreen().getPreferenceCount(); i++) { Preference p = getPreferenceScreen().getPreference(i); if (p instanceof PreferenceCategory) { PreferenceCategory p2 = (PreferenceCategory) p; for (int j = 0; j < p2.getPreferenceCount(); j++) { p2.getPreference(j).setOnPreferenceChangeListener(listener); } } else { getPreferenceScreen().getPreference(i) .setOnPreferenceChangeListener(listener); } } } private void extractValues(FunctionButton btn) { Map<String, String> m = valuesMap; m.put("name", btn.getName()); m.put("keys", btn.getKeys()); m.put("sortnumber", String.valueOf(btn.getSortNumber())); m.put("openkeyboard", btn.getOpenKeyboard() ? "1" : "0"); } private void updatePreferenceDisplay() { // if h is null, then create a new Host, otherwise, update a exist Host for (String key : valuesMap.keySet()) { Preference pref = this.findPreference(key); if (pref != null) { String value = valuesMap.get(key); if (pref instanceof EditTextPreference) { EditTextPreference textPref = (EditTextPreference) pref; if (value != null && value.length() > 0) textPref.setTitle(value); textPref.setText(value); } else if (pref instanceof ListPreference) { ListPreference listPref = (ListPreference) pref; if (value != null && value.length() > 0) listPref.setTitle(value); listPref.setValue(value); } else if (pref instanceof CheckBoxPreference) { CheckBoxPreference checkPref = (CheckBoxPreference) pref; if (value != null && value.length() > 0) checkPref.setChecked(value.toString().equals("1")); } } } } @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); MenuItem save = menu.add(R.string.editfunctionbtn_done).setIcon( android.R.drawable.ic_menu_save); save.setOnMenuItemClickListener(new OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem item) { autoSave = true; finish(); return true; } }); MenuItem cancel = menu.add(R.string.editfunctionbtn_revert).setIcon( android.R.drawable.ic_menu_close_clear_cancel); cancel.setOnMenuItemClickListener(new OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem item) { autoSave = false; finish(); return true; } }); MenuItem delete = menu.add(R.string.editfunctionbtn_delete).setIcon( android.R.drawable.ic_menu_delete); delete.setOnMenuItemClickListener(new OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem item) { autoSave = false; delete(); finish(); return true; } }); return true; } private boolean autoSave = true; @Override public void onResume() { super.onResume(); autoSave = true; } @Override public void onPause() { super.onPause(); if (autoSave) save(); } private void delete() { if (btn != null) { DBUtils dbUtils = new DBUtils(this); dbUtils.functionsButtonsDelegate.delete(btn); dbUtils.close(); } } private void save() { DBUtils dbUtils = new DBUtils(this); String name = valuesMap.get("name"); String keys = valuesMap.get("keys"); String sortnumber = valuesMap.get("sortnumber"); boolean openKeyboard = valuesMap.get("openkeyboard").equals("1"); if (name == null || name.length() <= 0) return; if (keys == null || keys.length() <= 0) return; if (btn != null) { btn.setName(name); btn.setKeys(keys); btn.setOpenKeyboard(openKeyboard); try { btn.setSortNumber(Integer.parseInt(sortnumber)); } catch (Exception e) { btn.setSortNumber(0); } dbUtils.functionsButtonsDelegate.update(btn); } else { btn = new FunctionButton(); btn.setName(name); btn.setKeys(keys); btn.setOpenKeyboard(openKeyboard); try { btn.setSortNumber(Integer.parseInt(sortnumber)); } catch (Exception e) { btn.setSortNumber(0); } dbUtils.functionsButtonsDelegate.insert(btn); } dbUtils.close(); } }