public class SettingPrefsFragment extends PreferenceFragment implements OnPreferenceChangeListener,
OnPreferenceClickListener {
private CheckBoxPreference mAutoUpdate;
private ListPreference mUpdateFrequency;
private CheckBoxPreference mAutoLocate;
private Preference mProductinfo;
/*private CheckBoxPreference mSoundSetting;
private CheckBoxPreference mLockscreenSetting;*/
String mSummary;
String mUpdateFreValue;
String[] mUpdateFreArray;
String[] mUpdateFreEntry;
SimpleSharedPreference mSharedPreference;
WeatherPresStorage mPresStorage;
private PendingIntent mPendingIntent;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.layout.setting_preference);
//mSharedPreference = new SimpleSharedPreference();
mPresStorage = new WeatherPresStorage(getActivity());
mSharedPreference = mPresStorage.getWeatherPreference();
mUpdateFreValue = mSharedPreference.getUpdate_frequency();
mUpdateFreArray = getResources().getStringArray(R.array.auto_update_frequency_value);
mUpdateFreEntry = getResources().getStringArray(R.array.auto_update_frequency_entry);
mAutoUpdate = (CheckBoxPreference) findPreference(SimpleSharedPreference.AUTO_UPDATE);
mUpdateFrequency = (ListPreference) findPreference(SimpleSharedPreference.UPDATE_FREQUENCY);
mAutoLocate = (CheckBoxPreference) findPreference(SimpleSharedPreference.AUTO_LOCATE);
mProductinfo = (Preference) findPreference(SimpleSharedPreference.PRODUCT_INFO);
/*mSoundSetting = (CheckBoxPreference) findPreference(SimpleSharedPreference.SOUND_SETTING);
mLockscreenSetting = (CheckBoxPreference) findPreference(SimpleSharedPreference.LOCKSCREEN_SETTING);*/
mAutoUpdate.setChecked(mSharedPreference.isAuto_update());
mUpdateFrequency.setEnabled(mSharedPreference.isAuto_update());
mAutoLocate.setChecked(mSharedPreference.isAuto_locate());
mAutoUpdate.setOnPreferenceClickListener(this);
mAutoUpdate.setOnPreferenceChangeListener(this);
mUpdateFrequency.setOnPreferenceClickListener(this);
mUpdateFrequency.setOnPreferenceChangeListener(this);
mAutoLocate.setOnPreferenceClickListener(this);
mAutoLocate.setOnPreferenceChangeListener(this);
mProductinfo.setOnPreferenceClickListener(this);
/*mSoundSetting.setOnPreferenceClickListener(this);
mSoundSetting.setOnPreferenceChangeListener(this);
mLockscreenSetting.setOnPreferenceClickListener(this);
mLockscreenSetting.setOnPreferenceChangeListener(this);*/
}
@Override
public void onResume() {
for (int i = 0; i < mUpdateFreArray.length; i++) {
if (mUpdateFreValue.equals(mUpdateFreArray[i])) {
mUpdateFrequency.setValueIndex(i);
mSummary = mUpdateFreEntry[i];
}
}
mUpdateFrequency.setSummary(String.format(
getString(R.string.auto_update_frequency_summary), mSummary));
super.onResume();
}
@Override
public boolean onPreferenceClick(Preference preference) {
if (preference.getKey().equals(SimpleSharedPreference.PRODUCT_INFO)) {
Log.d("xcl00","preference.getKey().equals(SimpleSharedPreference.PRODUCT_INFO)");
new AlertDialog.Builder(getActivity())
.setMessage(R.string.product_infomation)
.setTitle(R.string.productinfo)
.setNegativeButton(R.string.button_ok, null)
.create()
.show();
}
return true;
}
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if (preference.getKey().equals(SimpleSharedPreference.AUTO_UPDATE)) {
boolean value = (Boolean) newValue;
mSharedPreference.setAuto_update(value);
mPresStorage.saveWeatherPreference(mSharedPreference);
if (value == false) {
mUpdateFrequency.setEnabled(false);
if (mPendingIntent!=null){
mPendingIntent.cancel();
}
} else {
mUpdateFrequency.setEnabled(true);
setAlarm();
}
} else if (preference.getKey().equals(SimpleSharedPreference.UPDATE_FREQUENCY)) {
mSharedPreference.setUpdate_frequency((String) newValue);
mPresStorage.saveWeatherPreference(mSharedPreference);
for (int i = 0; i < mUpdateFreArray.length; i++) {
mUpdateFreValue = (String) newValue;
if (mUpdateFreValue.equals(mUpdateFreArray[i])) {
mUpdateFrequency.setValueIndex(i);
mSummary = mUpdateFreEntry[i];
}
}
mUpdateFrequency.setSummary(String.format(
getString(R.string.auto_update_frequency_summary), mSummary));
setAlarm();
} else if (preference.getKey().equals(SimpleSharedPreference.AUTO_LOCATE)) {
mSharedPreference.setAuto_locate((Boolean) newValue);
mPresStorage.saveWeatherPreference(mSharedPreference);
} /*else if (preference.getKey().equals(SimpleSharedPreference.SOUND_SETTING)) {
mSharedPreference.setSound_setting((Boolean) newValue);
} else if (preference.getKey().equals(SimpleSharedPreference.LOCKSCREEN_SETTING)) {
mSharedPreference.setLockscreen_setting((Boolean) newValue);
}*/else {
return false;
}
return true;
}
private void setAlarm(){
if (mPendingIntent!=null){
mPendingIntent.cancel();
}
String mTimeString = mPresStorage.getWeatherPreference().getUpdate_frequency();
long mTimeLong = System.currentTimeMillis() + Long.parseLong(mTimeString) * 3600
* 1000;
AlarmManager mManager = (AlarmManager) getActivity().getSystemService(
Context.ALARM_SERVICE);
Intent alarmIntent = new Intent(DataService.AUTO_UPDATE_ACTION);
mPendingIntent = PendingIntent.getBroadcast(getActivity(), 0,
alarmIntent, 1);
mManager.set(AlarmManager.RTC_WAKEUP, mTimeLong, mPendingIntent);
}
}
<PreferenceScreen xmlns:android = "http://schemas.android.com/apk/res/android" > <PreferenceCategory android:title = "@string/inline_preferences" > <CheckBoxPreference android:key = "checkbox_preference" android:title = "@string/title_checkbox_preference" android:summary = "@string/summary_checkbox_preference" /> </PreferenceCategory> <PreferenceCategory android:title = "@string/dialog_based_preferences" > <EditTextPreference android:key = "edittext_preference" android:title = "@string/title_edittext_preference" android:summary = "@string/summary_edittext_preference" android:dialogTitle = "@string/dialog_title_edittext_preference" /> <ListPreference android:key = "list_preference" android:title = "@string/title_list_preference" android:summary = "@string/summary_list_preference" android:entries = "@array/entries_list_preference" android:entryValues = "@array/entryvalues_list_preference" android:dialogTitle = "@string/dialog_title_list_preference" /> </PreferenceCategory> <PreferenceCategory android:title = "@string/launch_preferences" > <!-- This PreferenceScreen tag serves as a screen break (similar to page break in word processing). Like for other preference types, we assign a key here so it is able to save and restore its instance state. --> <PreferenceScreen android:key = "screen_preference" android:title = "@string/title_screen_preference" android:summary = "@string/summary_screen_preference" > <!-- You can place more preferences here that will be shown on the next screen. --> <CheckBoxPreference android:key = "next_screen_checkbox_preference" android:title = "@string/title_next_screen_toggle_preference" android:summary = "@string/summary_next_screen_toggle_preference" /> </PreferenceScreen> <PreferenceScreen android:title = "@string/title_intent_preference" android:summary = "@string/summary_intent_preference" > <intent android:action = "android.intent.action.VIEW" android:data = "http://www.android.com" /> </PreferenceScreen> </PreferenceCategory> <PreferenceCategory android:title = "@string/preference_attributes" > <CheckBoxPreference android:key = "parent_checkbox_preference" android:title = "@string/title_parent_preference" android:summary = "@string/summary_parent_preference" /> <!-- The visual style of a child is defined by this styled theme attribute. --> <CheckBoxPreference android:key = "child_checkbox_preference" android:dependency = "parent_checkbox_preference" android:layout = "?android:attr/preferenceLayoutChild" android:title = "@string/title_child_preference" android:summary = "@string/summary_child_preference" /> </PreferenceCategory> </PreferenceScreen>