package nliveroid.nlr.main;
import java.util.HashMap;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.PowerManager;
import android.preference.CheckBoxPreference;
import android.preference.EditTextPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceScreen;
import android.util.Log;
import android.webkit.CookieManager;
public class PrimitiveSetting extends PreferenceActivity implements
Preference.OnPreferenceChangeListener {
private static PrimitiveSetting ACT;
private HashMap<String, String> defaultMap;
private HashMap<String,String> detailsMap;
private CheckBoxPreference always1;
private CheckBoxPreference always2;
private CheckBoxPreference ac_confirm;
private EditTextPreference user1;
private EditTextPreference pass1;
private EditTextPreference user2;
private EditTextPreference pass2;
private CheckBoxPreference alert_enable;
private CheckBoxPreference alert_sound_notif;
private CheckBoxPreference alert_vibration_enable;
private boolean isCookieChange;
private boolean ListenerFlug = true;
private NLiveRoid app;
private ErrorCode error;
private PreferenceScreen twitter_screen;
private CheckBoxPreference alert_led;
/**
* ファイル保存でテキストとBooleanがあるのでsettingMapはString統一
*/
@Override
public void onCreate(Bundle paramBundle) {
super.onCreate(paramBundle);
setContentView(R.layout.config);
ACT = this;
addPreferencesFromResource(R.xml.preference);// preferenceをリソースから読み込む
always1 = (CheckBoxPreference) findPreference("always_use1");
always1.setOnPreferenceChangeListener(this);
always2 = (CheckBoxPreference)findPreference("always_use2");
always2.setOnPreferenceChangeListener(this);
ac_confirm = (CheckBoxPreference)findPreference("ac_confirm");
ac_confirm.setOnPreferenceChangeListener(this);
user1 = (EditTextPreference)findPreference("user_id1");
user1.setOnPreferenceChangeListener(this);
pass1 = (EditTextPreference)findPreference("password1");
pass1.setOnPreferenceChangeListener(this);
user2 = (EditTextPreference)findPreference("user_id2");
user2.setOnPreferenceChangeListener(this);
pass2 = (EditTextPreference)findPreference("password2");
pass2.setOnPreferenceChangeListener(this);
alert_enable = (CheckBoxPreference)findPreference("alert_enable");
alert_enable.setOnPreferenceChangeListener(this);
alert_sound_notif = (CheckBoxPreference)findPreference("alert_sound_notif");
alert_sound_notif.setOnPreferenceChangeListener(this);
alert_vibration_enable = (CheckBoxPreference)findPreference("alert_vibration_enable");
alert_vibration_enable.setOnPreferenceChangeListener(this);
alert_led = (CheckBoxPreference)findPreference("alert_led");
alert_led.setOnPreferenceChangeListener(this);
//ここではsettingMapの値をデフォルト値に使い、SharedPreferenceは利用しない
twitter_screen = (PreferenceScreen)findPreference("twitter_screen");
CheckBoxPreference log = (CheckBoxPreference) findPreference("nlr_log");
log.setOnPreferenceChangeListener(this);
loadSettings();
}
public void loadSettings(){
app = (NLiveRoid)getApplicationContext();
if(app == null)return;
defaultMap = app.getDefaultMap();
if(defaultMap == null)return;
detailsMap = app.getDetailsMap();
if(detailsMap == null)return;
error = app.getError();
if (defaultMap != null) {
if (defaultMap.get("user_id1") != null&&!defaultMap.get("user_id1").equals("null")) {
user1.setText(defaultMap.get("user_id1"));
}else{
user1.setText("");
}
if (defaultMap.get("password1") != null&&!defaultMap.get("password1").equals("null")) {
pass1.setText(defaultMap.get("password1"));
}else{
pass1.setText("");
}
if (defaultMap.get("user_id2") != null&&!defaultMap.get("user_id2").equals("null")) {
user2.setText(defaultMap.get("user_id2"));
}else{
user2.setText("");
}
if (defaultMap.get("password2") != null&&!defaultMap.get("password2").equals("null")) {
pass2.setText(defaultMap.get("password2"));
}else{
pass2.setText("");
}
if (defaultMap.get("twitter_token") != null&&!defaultMap.get("twitter_token").equals("null")
&&defaultMap.get("twitter_token").replaceAll("<<T_SPLIT>>", "").length()>2) {
twitter_screen.setSummary("設定済");
}else{
twitter_screen.setSummary("未設定");
}
}
if(detailsMap != null){
if (detailsMap.get("always_use1") != null) {
boolean always_use1 = Boolean.parseBoolean(detailsMap.get("always_use1"));
always1.setChecked(always_use1);
}
if (detailsMap.get("always_use2") != null) {
boolean always_use2 = Boolean.parseBoolean(detailsMap.get("always_use2"));
always2.setChecked(always_use2);
}
if (detailsMap.get("ac_confirm") != null) {
boolean confirm = Boolean.parseBoolean(detailsMap.get("ac_confirm"));
ac_confirm.setChecked(confirm);
}
if (detailsMap.get("alert_enable") != null) {
boolean enable = Boolean.parseBoolean(detailsMap.get("alert_enable"));
alert_enable.setChecked(enable);
}
if (detailsMap.get("alert_sound_enable") != null) {
boolean notif = Boolean.parseBoolean(detailsMap.get("alert_sound_notif"));
alert_sound_notif.setChecked(notif);
}
if (detailsMap.get("alert_vibration_enable") != null) {
boolean vibration = Boolean.parseBoolean(detailsMap.get("alert_vibration_enable"));
alert_vibration_enable.setChecked(vibration);
}
if (detailsMap.get("alert_led") != null) {
boolean led = Boolean.parseBoolean(detailsMap.get("alert_led"));
alert_led.setChecked(led);
}
if (detailsMap.get("nlr_log") != null) {
CheckBoxPreference nlr_log = (CheckBoxPreference)findPreference("nlr_log");
nlr_log.setChecked(Boolean.parseBoolean(detailsMap.get("nlr_log")));
}
}
if(Details.getPref() != null){
Details.getPref().loadSettings(detailsMap);//何故か参照をapplicationのフィールド経由で渡せない為、引数に取る
}
}
@Override
public void onResume(){
// alertenable.setChecked(isBinded());
super.onResume();
}
/*設定値保存と、アカウント変更時クッキーを消す
* @see android.app.Activity#onPause()
*/
@Override
public void onPause(){
ListenerFlug = false;
//全ての設定値をファイルに保存する
((NLiveRoid)getApplicationContext()).updateAccountFile();
if(isCookieChange){
CookieManager.getInstance().removeAllCookie();
app.setSessionid("");
((NLiveRoid)getApplicationContext()).removeTopTabsAdapter();
}
super.onPause();
}
public void deleteAllPreference(){
((NLiveRoid)getApplicationContext()).deleteAllPreference();//設定ファイル全消し
always1.setChecked(false);
always2.setChecked(false);
//フォームの値が何故か消されない
EditTextPreference ep = (EditTextPreference)findPreference("user_id1");
ep.setText("");
ep = (EditTextPreference)findPreference("password1");
ep.setText("");
ep = (EditTextPreference)findPreference("user_id2");
ep.setText("");
ep = (EditTextPreference)findPreference("password2");
ep.setText("");
}
/**
* 裏再生中はTopTabsがSingleInstanceな為、裏再生中のACTに戻っちゃうので
* それを防ぐ
*/
@Override
public void finish()
{
Intent topTab = new Intent(this,TopTabs.class);
startActivity(topTab);
super.finish();
}
/**
*
* サウンド、インターバル用のコミットメソッドを定義
*/
public String getAlertParams(String key){
return detailsMap.get(key);
}
public void preferenceChangedExt(String key,String uriStr){
// Log.d("NLiveRoid","CHANGEP ----- " + key + " " + uriStr);
onPreferenceChange(findPreference(key), uriStr);
}
/**
* プレファランスが変更された時に呼ばれる ここに設定値保存時の処理を書く
*/
@Override
public boolean onPreferenceChange(Preference preferences, Object value) {// 変わってからの値が入ってくる ダイアログキャンセル時呼ばれない
//なぜかレポートがでているので追加0.8.73
if(defaultMap == null){
app = (NLiveRoid)getApplicationContext();
if(app == null)return false;
defaultMap = app.getDefaultMap();
if(defaultMap == null)return false;
error = app.getError();
}
if(detailsMap == null){
app = (NLiveRoid)getApplicationContext();
if(app == null)return false;
detailsMap = app.getDetailsMap();
if(detailsMap == null)return false;
error = app.getError();
}
if(value == null){
value = false;
}
if(preferences.getKey().equals("alert_enable")){
if((Boolean)value){
//アラートスタートは、ここと起動時2箇所
BackGroundService.prepareAlert();
BackGroundService.registerNextAlert();
}else{//ストップ
BackGroundService.unRegisterAlert();
}
detailsMap.put(preferences.getKey(), String.valueOf(value));
}else if(preferences.getKey().equals("fexit")){
detailsMap.put(preferences.getKey(), String.valueOf(value));
} else if (preferences.getKey().equals("always_use1")) {
if(always2.isChecked()&&(Boolean)value){//2が有効だった場合、2をはずす
detailsMap.put("always_use2", "false");
always2.setChecked(false);
}else if(!(Boolean)value&&!always2.isChecked()){//どちらもチェックされてなくなる場合、無効にする
return false;
}
detailsMap.put("always_use1", String.valueOf(value));
isCookieChange = true;
} else if (preferences.getKey().equals("always_use2")) {
if(always1.isChecked()&&(Boolean)value){//1が有効だった場合、1をはずす
detailsMap.put("always_use1", "false");
always1.setChecked(false);
}else if(!(Boolean)value&&!always1.isChecked()){//どちらもチェックされなくなる場合、無効にする
return false;
}
detailsMap.put("always_use2", String.valueOf(value));
isCookieChange = true;
} else if (preferences.getKey().equals("user_id1")) {
defaultMap.put("user_id1", String.valueOf(value));
//IDとパスが揃ったらそのアカウントを常に利用する
String pass1 = defaultMap.get("password1");
if(pass1!=null&&!pass1.equals("")){
detailsMap.put("always_use1","true");
detailsMap.put("always_use2","false");
always1.setChecked(true);
always2.setChecked(false);
}
isCookieChange = true;
} else if (preferences.getKey().equals("password1")) {
defaultMap.put("password1", String.valueOf(value));
//IDとパスが揃ったらそのアカウントを常に利用する
String userid1 = defaultMap.get("user_id1");
if(userid1!=null&&!userid1.equals("")){
detailsMap.put("always_use1", "true");
detailsMap.put("always_use2", "false");
always1.setChecked(true);
always2.setChecked(false);
}
isCookieChange = true;
}else if (preferences.getKey().equals("user_id2")) {
defaultMap.put("user_id2", String.valueOf(value));
//IDとパスが揃ったらそのアカウントを常に利用する
String pass2 = defaultMap.get("password2");
if(pass2!=null&&!pass2.equals("")){
detailsMap.put("always_use2", "true");
detailsMap.put("always_use1", "false");
always2.setChecked(true);
always1.setChecked(false);
}
isCookieChange = true;
} else if (preferences.getKey().equals("password2")) {
defaultMap.put("password2", String.valueOf(value));
//IDとパスが揃ったらそのアカウントを常に利用する
String userid2 = defaultMap.get("user_id2");
if(userid2!=null&&!userid2.equals("")){
detailsMap.put("always_use2", "true");
detailsMap.put("always_use1", "false");
always2.setChecked(true);
always1.setChecked(false);
}
isCookieChange = true;
}
else{
detailsMap.put(preferences.getKey(), String.valueOf(value));
}
return true;
}
/**
* ACTを取得します。
* @return ACT
*/
public static PrimitiveSetting getACT() {
return ACT;
}
public void updateAlways(){
if(detailsMap != null){
if (detailsMap.get("always_use1") != null) {
boolean always_use1 = Boolean.parseBoolean(detailsMap.get("always_use1"));
always1.setChecked(always_use1);
}
if (detailsMap.get("always_use2") != null) {
boolean always_use2 = Boolean.parseBoolean(detailsMap.get("always_use2"));
always2.setChecked(always_use2);
}
}
}
public String getSessionTutorial() {
Log.d("Log","PRIM - " + getIntent().getStringExtra("session"));
return this.getIntent().getStringExtra("session");
}
public void setTwitterSummary(boolean b) {
if(twitter_screen != null){
if(b){
twitter_screen.setSummary("設定済");
}else{
twitter_screen.setSummary("未設定");
}
}
}
}