package com.cundong.izhihu.fragment;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Dialog;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceFragment;
import android.preference.PreferenceManager;
import android.text.Html;
import android.text.method.LinkMovementMethod;
import android.view.View;
import android.view.Window;
import android.widget.TextView;
import com.cundong.izhihu.Constants;
import com.cundong.izhihu.R;
import com.cundong.izhihu.util.PhoneUtils;
/**
* 类说明: 用于Android4.0+的设置页Fragment
*
* @date 2014-9-20
* @version 1.0
*/
@SuppressLint("NewApi")
public class PrefsFragment extends PreferenceFragment implements
Preference.OnPreferenceClickListener,
Preference.OnPreferenceChangeListener {
private static final String PREFERENCES_ABOUT = "about";
private static final String PREFERENCE_VERSION = "version";
private static final String PREFERENCE_NOIMAGE_NOWIFI = "noimage_nowifi?";
private static final String PREFERENCE_DARK_THEME = "dark_theme?";
private OnPreChangeListener mListener = null;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mListener = (OnPreChangeListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnPreChangeListener");
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.prefs);
findPreference(PREFERENCES_ABOUT).setOnPreferenceClickListener(this);
findPreference(PREFERENCE_VERSION).setOnPreferenceClickListener(this);
findPreference(PREFERENCE_NOIMAGE_NOWIFI).setOnPreferenceChangeListener(this);
findPreference(PREFERENCE_DARK_THEME).setOnPreferenceChangeListener(this);
boolean noImgnoWifi = PreferenceManager.getDefaultSharedPreferences(
getActivity()).getBoolean(PREFERENCE_NOIMAGE_NOWIFI, false);
findPreference(PREFERENCE_NOIMAGE_NOWIFI).setDefaultValue(noImgnoWifi);
}
@Override
public boolean onPreferenceClick(Preference preference) {
if (preference.getKey().equals(PREFERENCES_ABOUT)) {
showDialog(false);
} else if (preference.getKey().equals(PREFERENCE_VERSION)) {
showDialog(true);
}
return false;
}
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if (preference.getKey().equals(PREFERENCE_NOIMAGE_NOWIFI)) {
if (newValue instanceof Boolean) {
Boolean boolVal = (Boolean) newValue;
SharedPreferences mPerferences = PreferenceManager
.getDefaultSharedPreferences(getActivity());
SharedPreferences.Editor mEditor = mPerferences.edit();
mEditor.putBoolean(PREFERENCE_NOIMAGE_NOWIFI, boolVal);
mEditor.commit();
}
return true;
} else if (preference.getKey().equals(PREFERENCE_DARK_THEME)) {
if (newValue instanceof Boolean) {
Boolean boolVal = (Boolean) newValue;
SharedPreferences mPerferences = PreferenceManager
.getDefaultSharedPreferences(getActivity());
SharedPreferences.Editor mEditor = mPerferences.edit();
mEditor.putBoolean(PREFERENCE_DARK_THEME, boolVal);
mEditor.commit();
mListener.onChanged(boolVal);
}
return true;
}
return false;
}
private void showDialog( boolean isVersion ) {
final Dialog dialog = new Dialog(getActivity());
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setCancelable(true);
dialog.setContentView(R.layout.dialog_version);
TextView textView = (TextView) dialog.findViewById(R.id.dialog_text);
textView.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
dialog.dismiss();
}
});
if (isVersion) {
String data = getResources().getString(R.string.setting_aboutme_version);
data = String.format(data,
PhoneUtils.getApplicationName(getActivity()),
PhoneUtils.getPackageInfo(getActivity()).versionName);
textView.setText(data);
} else {
String title = new StringBuilder().append(PhoneUtils.getApplicationName(getActivity()) ).append("<br/>").toString();
String subTitle = new StringBuilder().append(getResources().getString(R.string.app_sub_name)).append("<br/>").toString();
String author = new StringBuilder().append("@").append(getResources().getString(R.string.app_author)).toString();
String githubUrl = new StringBuilder().append("<a href='")
.append(Constants.GITGUB_PROJECT)
.append("'>")
.append(Constants.GITGUB_PROJECT)
.append("</a>")
.append("<br/>")
.toString();
String data = getResources().getString(R.string.setting_aboutme_text);
data = String.format(data,
title,
subTitle,
githubUrl,
author);
CharSequence charSequence = Html.fromHtml(data);
textView.setText(charSequence);
}
textView.setMovementMethod(LinkMovementMethod.getInstance());
dialog.show();
}
public static interface OnPreChangeListener {
public void onChanged( boolean result );
}
}