package com.hellodev.lightme.activity;
import com.hellodev.lightme.FlashController;
import com.hellodev.lightme.R;
import com.hellodev.lightme.service.ServiceHelper;
import com.hellodev.lightme.util.CommonDataHelper;
import com.hellodev.lightme.util.LightmeConstants;
import com.hellodev.lightme.util.MConnectHelper;
import com.hellodev.lightme.util.MLisenseMangaer;
import com.hellodev.lightme.util.MLisenseMangaer.OnLisenseStateChangeListener;
import com.hellodev.lightme.util.MNotificationHelper;
import com.hellodev.lightme.util.MPreferenceManager;
import com.hellodev.lightme.util.SmartBarUtils;
import com.hellodev.lightme.view.SeekPreference;
import com.umeng.analytics.MobclickAgent;
import android.app.ActionBar;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.CheckBoxPreference;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceActivity;
import android.preference.PreferenceScreen;
import android.view.MenuItem;
import android.view.View;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.LinearLayout;
public class SettingActivity extends PreferenceActivity implements
OnPreferenceChangeListener, OnPreferenceClickListener, OnClickListener, OnLisenseStateChangeListener {
private CheckBoxPreference showLauncherPanel, showKeyguardPanel,
enableKeyguardShock, enableSwitchSound;
private PreferenceScreen about, market, version;
private SeekPreference autoCloseTime;
public final static String KEY_ABOUNT = "about";
public final static String KEY_MARKET = "market";
public final static String KEY_VERSION = "version";
private MConnectHelper connectHelper;
private MNotificationHelper mNotifyHelper;
private FlashController flashController;
private MPreferenceManager mPrefsMgr;
private boolean lisenseEnable = true;
private ImageButton btnLock;
private AlertDialog mLockDialog;
private MLisenseMangaer lisenseManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
flashController = FlashController.getInstance();
initActionBar();
initPreference();
initPreferenceWidget();
connectHelper = new MConnectHelper(this);
mNotifyHelper = new MNotificationHelper();
mPrefsMgr = MPreferenceManager.getInstance();
mPrefsMgr.setNeedRefreshSetting(false);
}
@Override
protected void onResume() {
MobclickAgent.onResume(this);
refreshWhenPanelSettingChange();
refreshWhenLisenseChange(flashController.islisenseEnable());
super.onResume();
}
@Override
protected void onPause() {
super.onPause();
MobclickAgent.onPause(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
flashController = null;
}
@SuppressWarnings("deprecation")
private void initPreference() {
addPreferencesFromResource(R.xml.setting);
}
@SuppressWarnings("deprecation")
private void initPreferenceWidget() {
showLauncherPanel = (CheckBoxPreference) findPreference(MPreferenceManager.KEY_SHOW_LAUNCHER_PANEL);
showLauncherPanel.setOnPreferenceChangeListener(this);
showKeyguardPanel = (CheckBoxPreference) findPreference(MPreferenceManager.KEY_SHOW_KEYGUARD_PANEL);
showKeyguardPanel.setOnPreferenceChangeListener(this);
enableKeyguardShock = (CheckBoxPreference) findPreference(MPreferenceManager.KEY_KEYGURAD_SHOCK_ENABLE);
enableKeyguardShock.setOnPreferenceChangeListener(this);
enableSwitchSound = (CheckBoxPreference) findPreference(MPreferenceManager.KEY_ENABLE_SWITCH_SOUND);
enableSwitchSound.setOnPreferenceChangeListener(this);
autoCloseTime = (SeekPreference) findPreference(MPreferenceManager.KEY_AUTO_CLOSE_TIME);
autoCloseTime.setOnPreferenceChangeListener(this);
about = (PreferenceScreen) findPreference(KEY_ABOUNT);
about.setOnPreferenceClickListener(this);
market = (PreferenceScreen) findPreference(KEY_MARKET);
market.setOnPreferenceClickListener(this);
version = (PreferenceScreen) findPreference(KEY_VERSION);
version.setOnPreferenceClickListener(this);
String versionStr = CommonDataHelper.getCurrentAppVersionInfo(this,
getResources().getString(R.string.format_version_banben));
version.setTitle(versionStr);
}
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
boolean hasHandled = true;
if (preference == showLauncherPanel) {
if (newValue.equals(true)) {
MobclickAgent.onEvent(this,
MPreferenceManager.KEY_SHOW_LAUNCHER_PANEL, "true");
ServiceHelper.startLauncherPanelService();
mNotifyHelper
.notifyPanelOpen(MNotificationHelper.NOTIFICATION_TYPE_LAUCHER_PANEL);
} else {
MobclickAgent.onEvent(this,
MPreferenceManager.KEY_SHOW_LAUNCHER_PANEL, "false");
ServiceHelper.stopLauncherPanelService();
mNotifyHelper
.cancelNotify(MNotificationHelper.NOTIFICATION_TYPE_LAUCHER_PANEL);
}
} else if (preference == showKeyguardPanel) {
if (newValue.equals(true)) {
MobclickAgent.onEvent(this,
MPreferenceManager.KEY_SHOW_KEYGUARD_PANEL, "true");
ServiceHelper.startKeyguardPanelService();
mNotifyHelper
.notifyPanelOpen(MNotificationHelper.NOTIFICATION_TYPE_KEYGUARD_PANEL);
} else {
MobclickAgent.onEvent(this,
MPreferenceManager.KEY_SHOW_KEYGUARD_PANEL, "false");
enableKeyguardShock.setChecked(false);
ServiceHelper.stopKeyguardPanelService();
mNotifyHelper
.cancelNotify(MNotificationHelper.NOTIFICATION_TYPE_KEYGUARD_PANEL);
mNotifyHelper
.cancelNotify(MNotificationHelper.NOTIFICATION_TYPE_KEYGUARD_SHOCK);
}
} else if (preference == enableKeyguardShock) {
if (newValue.equals(true)) {
MobclickAgent.onEvent(this,
MPreferenceManager.KEY_KEYGURAD_SHOCK_ENABLE, "true");
mNotifyHelper
.notifyPanelOpen(MNotificationHelper.NOTIFICATION_TYPE_KEYGUARD_SHOCK);
} else {
MobclickAgent.onEvent(this,
MPreferenceManager.KEY_KEYGURAD_SHOCK_ENABLE, "false");
mNotifyHelper
.cancelNotify(MNotificationHelper.NOTIFICATION_TYPE_KEYGUARD_SHOCK);
}
} else if (preference == enableSwitchSound) {
if (newValue.equals(true)) {
MobclickAgent.onEvent(this,
MPreferenceManager.KEY_ENABLE_SWITCH_SOUND, "true");
flashController.enableSound();
} else {
MobclickAgent.onEvent(this,
MPreferenceManager.KEY_ENABLE_SWITCH_SOUND, "false");
flashController.disabelSound();
}
} else if (preference == autoCloseTime) {
MobclickAgent.onEvent(this, MPreferenceManager.KEY_AUTO_CLOSE_TIME,
String.valueOf(newValue));
long autoCloseTimeMins = Long.parseLong(newValue
.toString());
flashController.requestAutoCloseTask(autoCloseTimeMins * 60000);
} else {
hasHandled = false;
}
return hasHandled;
}
@Override
public boolean onPreferenceClick(Preference preference) {
boolean hasHandled = true;
if (preference == about) {
Intent intent = new Intent(this, AboutActivity.class);
startActivity(intent);
} else if (preference == market) {
connectHelper.jumpToMarket(LightmeConstants.APP_IDENTIFY);
} else if (preference == version) {
Intent intent = new Intent(this, GuideActivity.class);
intent.putExtra(GuideActivity.KEY_FLAG_FROM, SettingActivity.class.getName());
startActivity(intent);
} else{
hasHandled = false;
}
return hasHandled;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
finish();
}
return super.onOptionsItemSelected(item);
}
private void initActionBar() {
ActionBar actionBar = getActionBar();
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME
| ActionBar.DISPLAY_SHOW_TITLE | ActionBar.DISPLAY_HOME_AS_UP
| ActionBar.DISPLAY_SHOW_CUSTOM);
/* 初始化时,认为侧边栏关闭,允许点击标题栏图标,同时返回主界面 */
actionBar.setDisplayHomeAsUpEnabled(true);
int icon = flashController.islisenseEnable()? R.drawable.ic_logo: R.drawable.ic_logo_locked;
actionBar.setIcon(icon);
SmartBarUtils.setBackIcon(actionBar,
getResources().getDrawable(R.drawable.ic_back));
actionBar.setCustomView(R.layout.action_view_setting);
LinearLayout customView = (LinearLayout) actionBar.getCustomView();
ImageButton ibFeedback = (ImageButton) customView.findViewById(R.id.action_feedback);
ibFeedback.setOnClickListener(this);
btnLock = (ImageButton) customView.findViewById(R.id.btn_lock);
btnLock.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.action_feedback:
if(lisenseEnable)
connectHelper.sendFeedbackWithMail();
else
connectHelper.sendLockMsgWithMail(flashController.getLisenseState());
break;
case R.id.btn_lock:
initLockAlert();
mLockDialog.show();
break;
default:
break;
}
}
private void refreshWhenLisenseChange(boolean lisenseEnable) {
if(this.lisenseEnable != lisenseEnable) {
this.lisenseEnable = lisenseEnable;
ActionBar actionBar = getActionBar();
int icon = flashController.islisenseEnable()? R.drawable.ic_logo: R.drawable.ic_logo_locked;
actionBar.setIcon(icon);
if(lisenseEnable) {
showLauncherPanel.setEnabled(true);
showKeyguardPanel.setEnabled(true);
enableKeyguardShock.setEnabled(true);
btnLock.setVisibility(View.GONE);
} else {
showLauncherPanel.setEnabled(false);
showKeyguardPanel.setEnabled(false);
enableKeyguardShock.setEnabled(false);
btnLock.setVisibility(View.VISIBLE);
}
}
}
private void refreshWhenPanelSettingChange() {
if (mPrefsMgr.needRefreshSetting()) {
// 为了防止在锁屏移除panel,然后再回到设置界面
// FIXME 会闪烁一下,能不能局部刷新
boolean dataShowLauncher = mPrefsMgr.isLauncherPanelShown();
boolean uiShowLauncher = showLauncherPanel.isChecked();
if(dataShowLauncher != uiShowLauncher) {
showLauncherPanel.setOnPreferenceChangeListener(null);
showLauncherPanel.setChecked(dataShowLauncher);
showLauncherPanel.setOnPreferenceChangeListener(this);
}
boolean dataShowKeyguard = mPrefsMgr.isKeyguardPanelShown();
boolean uiShowKeyguard = showKeyguardPanel.isChecked();
if(dataShowKeyguard != uiShowKeyguard) {
showKeyguardPanel.setOnPreferenceChangeListener(null);
showKeyguardPanel.setChecked(dataShowKeyguard);
showKeyguardPanel.setOnPreferenceChangeListener(this);
if(dataShowKeyguard == false && enableKeyguardShock.isChecked()) {
enableKeyguardShock.setOnPreferenceChangeListener(null);
enableKeyguardShock.setChecked(false);
enableKeyguardShock.setOnPreferenceChangeListener(this);
}
}
mPrefsMgr.setNeedRefreshSetting(false);
}
}
private void initLockAlert() {
if (mLockDialog == null) {
AlertDialog.Builder builder = new AlertDialog.Builder(
this,
android.R.style.Theme_Holo_Light_Panel);
builder.setIcon(R.drawable.ic_logo_locked);
builder.setTitle(R.string.alert_lock_title);
builder.setMessage(R.string.alert_lock_message);
builder.setPositiveButton(R.string.alert_lock_positive,
new android.content.DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//跳转到应用中心
connectHelper.jumpToMarket(LightmeConstants.APP_IDENTIFY);
}
});
builder.setNeutralButton(R.string.alert_lock_neutral,
new android.content.DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//联系开发者
connectHelper.sendLockMsgWithMail(flashController.getLisenseState());
}
});
builder.setNegativeButton(R.string.alert_lock_negetive,
new android.content.DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
initLisense();
}
});
mLockDialog = builder.create();
mLockDialog.getWindow().setType(
WindowManager.LayoutParams.TYPE_APPLICATION);
}
}
@Override
public void onRemoteServiceConnected() {
int lisenseState = lisenseManager.doRemoteCheck();
flashController.setLisenseState(lisenseState);
lisenseManager.unbindRemoteService();
refreshWhenLisenseChange(flashController.islisenseEnable());
}
@Override
public void onRemoteServiceDisconnected() {
lisenseManager = null;
}
private void initLisense() {
boolean purchased = flashController.isPurchased();
if(!purchased) {
lisenseManager = new MLisenseMangaer(this);
lisenseManager.bindRemoteService();
}
}
}