package net.dev123.yibo; import java.io.File; import java.util.Locale; import net.dev123.commons.util.StringUtil; import net.dev123.yibo.common.Constants; import net.dev123.yibo.common.GlobalResource; import net.dev123.yibo.common.GlobalVars; import net.dev123.yibo.common.ImageQuality; import net.dev123.yibo.common.NetUtil; import net.dev123.yibo.service.task.CacheCleanTask; import net.dev123.yibo.service.task.ImageCacheCleanTask; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.CheckBoxPreference; import android.preference.ListPreference; import android.preference.Preference; import android.preference.PreferenceActivity; import android.preference.PreferenceCategory; import android.widget.EditText; import com.mobclick.android.MobclickAgent; public class SettingActivity extends PreferenceActivity { private PreferenceCategory updateCatalog; private PreferenceCategory ringtoneCatalog; private CheckBoxPreference showHead; private CheckBoxPreference detectImageInfo; private ListPreference autoLoadComments; private ListPreference showThumbnail; private CheckBoxPreference enableUpdates; private ListPreference updateInterval; private CheckBoxPreference autoScreenOrientation; private Preference clearCache; private Preference clearImageCache; private Preference checkFor; private Preference notifications; private Preference imageFolder; private Preference about; private SharedPreferences prefs; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); prefs = getSharedPreferences(Constants.PREFS_NAME_APP_SETTING, MODE_PRIVATE); getPreferenceManager().setSharedPreferencesName(Constants.PREFS_NAME_APP_SETTING); getPreferenceManager().setSharedPreferencesMode(MODE_PRIVATE); addPreferencesFromResource(R.xml.preferences); updateCatalog = (PreferenceCategory)findPreference("UPDATE_SETTING"); ringtoneCatalog = (PreferenceCategory)findPreference("RINGTONE_SETTING"); ListPreference locale = (ListPreference)findPreference("LOCALE"); locale.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { String value = newValue.toString(); Locale locale = Locale.getDefault(); if (StringUtil.isNotEmpty(value) && !value.equals("auto")) { String[] values = value.split("_"); if (values.length == 2) { locale = new Locale(values[0], values[1]); } else { locale = new Locale(values[0]); } } GlobalVars.LOCALE = locale; SettingActivity.this.setResult(Constants.RESULT_CODE_SUCCESS); return true; } }); ListPreference fontSize = (ListPreference)findPreference("FONT_SIZE"); fontSize.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { GlobalVars.FONT_SIZE_HOME_BLOG = Integer.parseInt(newValue.toString()); GlobalVars.FONT_SIZE_HOME_RETWEET = GlobalVars.FONT_SIZE_HOME_BLOG; SettingActivity.this.setResult(Constants.RESULT_CODE_SUCCESS); return true; } }); showHead = (CheckBoxPreference) findPreference(Constants.PREFS_KEY_SHOW_HEAD); showHead.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { if (showHead.isChecked()) { GlobalVars.IS_SHOW_HEAD = true; } else { GlobalVars.IS_SHOW_HEAD = false; } return true; } }); showThumbnail = (ListPreference)findPreference(Constants.PREFS_KEY_SHOW_THUMBNAIL); showThumbnail.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { int policy = Integer.parseInt(newValue.toString()); GlobalVars.IS_SHOW_THUMBNAIL = NetUtil.isPolicyPositive(policy); return true; } }); ListPreference updateCount = (ListPreference)findPreference(Constants.PREFS_KEY_UPDATE_COUNT); updateCount.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { int updateCount = Integer.parseInt(newValue.toString()); GlobalVars.UPDATE_COUNT = updateCount; return true; } }); CheckBoxPreference useSlider = (CheckBoxPreference) findPreference(Constants.PREFS_KEY_USE_SLIDER); useSlider.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { SettingActivity.this.setResult(Constants.RESULT_CODE_SUCCESS); return true; } }); final CheckBoxPreference gestureSupport = (CheckBoxPreference) findPreference(Constants.PREFS_KEY_ENABLE_GESTURE); gestureSupport.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { if (gestureSupport.isChecked()) { GlobalVars.IS_ENABLE_GESTURE = true; } else { GlobalVars.IS_ENABLE_GESTURE = false; } return true; } }); ListPreference imageDownloadQuality = (ListPreference)findPreference(Constants.PREFS_KEY_IMAGE_DOWNLOAD_QUALITY); imageDownloadQuality.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { ImageQuality quality = ImageQuality.valueOf(newValue.toString()); GlobalVars.IMAGE_DOWNLOAD_QUALITY = quality; return true; } }); autoScreenOrientation = (CheckBoxPreference) findPreference(Constants.PREFS_KEY_AUTO_SCREEN_ORIENTATION); autoScreenOrientation.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { SettingActivity.this.setResult(Constants.RESULT_CODE_SUCCESS); return true; } }); clearCache = (Preference) findPreference(Constants.PREFS_KEY_CLEAR_CACHE); clearCache.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { new AlertDialog.Builder(SettingActivity.this) .setTitle(R.string.title_dialog_alert) .setMessage(R.string.msg_setting_clear_confirm) .setNegativeButton(R.string.btn_cancel, new AlertDialog.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }) .setPositiveButton(R.string.btn_confirm, new AlertDialog.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { CacheCleanTask task = new CacheCleanTask(SettingActivity.this); task.execute(); } }) .show(); return false; } }); clearImageCache = (Preference) findPreference(Constants.PREFS_KEY_CLEAR_IMAGE_CACHE); clearImageCache.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { new AlertDialog.Builder(SettingActivity.this) .setTitle(R.string.title_dialog_alert) .setMessage(R.string.msg_setting_clear_confirm) .setNegativeButton(R.string.btn_cancel, new AlertDialog.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }) .setPositiveButton(R.string.btn_confirm, new AlertDialog.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { ImageCacheCleanTask task = new ImageCacheCleanTask(SettingActivity.this); task.execute(); } }) .show(); return false; } }); enableUpdates = (CheckBoxPreference) findPreference(Constants.PREFS_KEY_ENABLE_UPDATES); enableUpdates.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { updateUpdatesSettings(); return false; } }); updateUpdatesSettings(); updateInterval = (ListPreference)findPreference(Constants.PREFS_KEY_UPDATE_INTERVAL); updateInterval.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { //启动service和注册接收器 Intent serviceIntent = new Intent(SettingActivity.this, AutoUpdateService.class); SettingActivity.this.startService(serviceIntent); return true; } }); checkFor = (Preference)findPreference("CHECK_FOR"); checkFor.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { createCheckForSettingDialog(); return false; } }); notifications = (Preference)findPreference("NOTIFICATIONS"); notifications.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { createNotificationsSettingDialog(); return false; } }); imageFolder = (Preference) findPreference(Constants.PREFS_KEY_IMAGE_FOLDER); imageFolder.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { YiBoApplication yibo = (YiBoApplication) SettingActivity.this.getApplication(); String folderPath = yibo.getImageFolder(); final EditText editView = new EditText(SettingActivity.this); editView.setText(folderPath); new AlertDialog.Builder(SettingActivity.this) .setView(editView) .setPositiveButton(R.string.btn_confirm, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { String path = editView.getText().toString(); if (StringUtil.isNotEmpty(path)) { if (!path.startsWith(File.separator)) { path = File.separator + path; } } else { path = Constants.DCIM_PATH; } File file = new File(path); boolean dirOk = true; if (!file.exists() || file.isFile()) { dirOk = file.mkdirs(); } if (dirOk) { imageFolder.getEditor().putString(Constants.PREFS_KEY_IMAGE_FOLDER, path).commit(); } } }) .setNegativeButton(R.string.btn_cancel, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }) .show(); return false; } }); detectImageInfo = (CheckBoxPreference) findPreference(Constants.PREFS_KEY_DETECT_IMAGE_INFO); detectImageInfo.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { GlobalVars.IS_DETECT_IAMGE_INFO = (Boolean) newValue; return true; } }); autoLoadComments = (ListPreference)findPreference(Constants.PREFS_KEY_AUTO_LOAD_COMMENTS); autoLoadComments.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { int policy = Integer.parseInt(newValue.toString()); GlobalVars.IS_AUTO_LOAD_COMMENTS = NetUtil.isPolicyPositive(policy); return true; } }); about = (Preference)findPreference("ABOUT"); about.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { String aboutMsg = getResources().getString(R.string.about, GlobalResource.getVersionName(SettingActivity.this)); new AlertDialog.Builder(SettingActivity.this) .setTitle(getString(R.string.title_dialog_about)) .setMessage(aboutMsg) .create() .show(); return false; } }); } private void createCheckForSettingDialog() { final String[] keys = new String[]{ Constants.PREFS_KEY_CHECK_STATUSES, Constants.PREFS_KEY_CHECK_MENTIONS, Constants.PREFS_KEY_CHECK_COMMENTS, Constants.PREFS_KEY_CHECK_MESSAGES, Constants.PREFS_KEY_CHECK_FOLLOWERS }; boolean[] selectedState = new boolean[keys.length]; for (int i = 0; i < selectedState.length; i++ ) { selectedState[i] = prefs.getBoolean(keys[i], true); } String[] checkForTargets = new String[5]; checkForTargets[0] = getResources().getString(R.string.label_setting_check_statuses); checkForTargets[1] = getResources().getString(R.string.label_setting_check_mentions); checkForTargets[2] = getResources().getString(R.string.label_setting_check_comments); checkForTargets[3] = getResources().getString(R.string.label_setting_check_messages); checkForTargets[4] = getResources().getString(R.string.label_setting_check_followers); new AlertDialog.Builder(this) .setIcon(R.drawable.menu_accounts) .setTitle(R.string.title_dialog_setting_check_for) .setMultiChoiceItems(checkForTargets, selectedState, new DialogInterface.OnMultiChoiceClickListener() { public void onClick(DialogInterface dialog, int whichButton, boolean isChecked) { updateBooleanSetting(keys[whichButton], isChecked); } }) .setNegativeButton(R.string.btn_close, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { dialog.dismiss(); } }) .create() .show(); } private void createNotificationsSettingDialog() { final String[] keys = new String[]{ Constants.PREFS_KEY_VIBRATE, Constants.PREFS_KEY_RINGTONE, Constants.PREFS_KEY_LED }; boolean[] selectedState = new boolean[keys.length]; for (int i = 0; i < selectedState.length; i++ ) { selectedState[i] = prefs.getBoolean(keys[i], true); } String[] checkForTargets = new String[3]; checkForTargets[0] = getResources().getString(R.string.label_setting_notification_vibrate); checkForTargets[1] = getResources().getString(R.string.label_setting_notification_ringtone); checkForTargets[2] = getResources().getString(R.string.label_setting_notification_led); new AlertDialog.Builder(this) .setTitle(R.string.title_dialog_setting_notification) .setMultiChoiceItems(checkForTargets, selectedState, new DialogInterface.OnMultiChoiceClickListener() { public void onClick(DialogInterface dialog, int whichButton, boolean isChecked) { updateBooleanSetting(keys[whichButton], isChecked); } }) .setNegativeButton(R.string.btn_close, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { dialog.dismiss(); } }) .create() .show(); } private void updateBooleanSetting(String key, boolean value) { SharedPreferences.Editor editor = prefs.edit(); editor.putBoolean(key, value); editor.commit(); } private void updateUpdatesSettings() { boolean enabled = prefs.getBoolean(Constants.PREFS_KEY_ENABLE_UPDATES, true); if (enabled) { enableUpdates.setSummary(R.string.hint_setting_updates_enabled); } else { enableUpdates.setSummary(R.string.hint_setting_updates_disabled); } updateCatalog.setEnabled(enabled); ringtoneCatalog.setEnabled(enabled); } @Override protected void onResume() { super.onResume(); MobclickAgent.onResume(this); } @Override protected void onPause() { super.onPause(); MobclickAgent.onPause(this); } }