package tw.kenshinn.keyboardTerm;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.security.Identity;
import java.util.HashMap;
import java.util.Iterator;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import android.app.Activity;
import android.content.SharedPreferences.Editor;
import android.content.res.AssetManager;
import android.content.res.Resources;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.util.TypedValue;
import android.util.Xml;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.LinearLayout;
import android.widget.Toast;
public class ImportKeyboardActivity extends Activity {
private HashMap<String, String> mSettingMap;
private LinearLayout mKeyboardBoxLayout;
private View mOkButton;
private View mPrevButton;
private View mNextButton;
final static String TAG = "ImportKeyboardActivity";
private boolean mScrollSwitch;
private int mKeyboard_width;
private int mKeyboardCount;
private String[] mKeyboardList;
private AssetManager mAssetManager;
private int mCurrentIndex;
public final static String KEY_INTENT_IMPORT = "IMPORT_PATH";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mAssetManager = getResources().getAssets();
setContentView(R.layout.act_export_keyboard);
mKeyboardBoxLayout = (LinearLayout)findViewById(R.id.KeyboardBox);
mOkButton = findViewById(R.id.OkButton);
mOkButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
importSetting();
setResult(1);
finish();
}
});
View cancelButton = findViewById(R.id.CancelButton);
cancelButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
setResult(-1);
finish();
}
});
mSettingMap = new HashMap<String, String>();
InputStream inputStream = null;
String fileName = "";
if(getIntent().hasExtra(KEY_INTENT_IMPORT)) {
String filePath = getIntent().getStringExtra(KEY_INTENT_IMPORT);
fileName = new File(filePath).getName();
try {
inputStream = new FileInputStream(filePath);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
try {
mKeyboardList = mAssetManager.list("keyboards");
if(mKeyboardList != null && mKeyboardList.length > 0) {
mCurrentIndex = 0;
}
fileName = mKeyboardList[mCurrentIndex];
inputStream = mAssetManager.open("keyboards/" + fileName);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mPrevButton = findViewById(R.id.PrevButton);
mPrevButton.setOnClickListener(mNavButtonOnClickListener);
mNextButton = findViewById(R.id.NextButton);
mNextButton.setOnClickListener(mNavButtonOnClickListener);
}
loadInputStream(inputStream, fileName);
}
private OnClickListener mNavButtonOnClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
Log.v(TAG, "mNavButtonOnClickListener, v.getId(): " + v.getId());
if(v.getId() == R.id.NextButton)
mCurrentIndex++;
else if(v.getId() == R.id.PrevButton)
mCurrentIndex--;
String fileName = mKeyboardList[mCurrentIndex];
InputStream inputStream = null;
try {
inputStream = mAssetManager.open("keyboards/" + fileName);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
loadInputStream(inputStream, fileName);
}
};
private void loadInputStream(InputStream inputStream, String fileName) {
if(inputStream != null) {
loadXmlToHashMap(inputStream);
generateKeyboardBox();
try {
inputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
setTitle(getResources().getString(R.string.menu_import) + " - " + fileName);
updateButtonStatus();
}
private void updateButtonStatus() {
if(mKeyboardList != null) {
mPrevButton.setVisibility(mCurrentIndex != 0 ? View.VISIBLE : View.GONE);
mNextButton.setVisibility(mCurrentIndex != (mKeyboardList.length - 1) ? View.VISIBLE : View.GONE);
}
}
private void importSetting() {
Iterator it = mSettingMap.keySet().iterator();//这是取得键对象
Editor editor = PreferenceManager.getDefaultSharedPreferences(this).edit();
while(it.hasNext())
{
String key = it.next().toString();
String value = mSettingMap.get(key);
Log.v(TAG, "key: " + key + ", value:" + value);
if(key.equals("settings_use_scrolling_switch"))
editor.putBoolean(key, Boolean.parseBoolean(value));
// else if(key.equals("settings_arrow_key_width") || key.equals("settings_arrow_key_group_count"))
// editor.putInt(key, Integer.parseInt(value));
else
editor.putString(key, value);
}
editor.commit();
Toast.makeText(this, getResources().getString(R.string.message_import_success), 500).show();
}
private void generateKeyboardBox() {
mKeyboardBoxLayout.removeAllViews();
mScrollSwitch = Boolean.parseBoolean(mSettingMap.get("settings_use_scrolling_switch"));
mKeyboardCount = Integer.parseInt(mSettingMap.get("settings_arrow_key_group_count"));
boolean showSwitchButton = !mScrollSwitch && mKeyboardCount > 1;
mKeyboard_width = Integer.parseInt(mSettingMap.get("settings_arrow_key_width"));
Resources r = getResources();
float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, mKeyboard_width, r.getDisplayMetrics());
int keyboard_height = this.getWindow().getWindowManager().getDefaultDisplay().getWidth();
for(int i = 1; i <= mKeyboardCount; i++) {
LinearLayout keyboardLayout = ArrowKeyView.generateKeyboardLayout(this, mSettingMap,showSwitchButton, i);
ViewGroup.LayoutParams lParams = new ViewGroup.LayoutParams((int)px, keyboard_height);
mKeyboardBoxLayout.addView(keyboardLayout, lParams);
}
}
private void loadXmlToHashMap(InputStream inputStream) {
mSettingMap.clear();
try {
XmlPullParser parser = Xml.newPullParser();
parser.setInput(inputStream, "UTF-8");
int eventType = parser.getEventType();
while(eventType != XmlPullParser.END_DOCUMENT) {
if(eventType == XmlPullParser.START_TAG) {
String tagName = parser.getName();
if(tagName.equals("setting")) {
String key = parser.getAttributeValue(null, "key");
String value = parser.getAttributeValue(null, "value");
Log.v(TAG, "key: " + key + ", value:" + value);
mSettingMap.put(key, value);
} else if(tagName.equals("Keyboards")) {
// int versionCode = Integer.parseInt(parser.getAttributeValue(null, "versionCode"));
// String versionName = parser.getAttributeValue(null, "versionName");
}
}
eventType = parser.next();
}
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}