package name.caiyao.microreader.ui.fragment; import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.preference.Preference; import android.preference.PreferenceFragment; import android.support.v7.app.AlertDialog; import android.widget.Toast; import name.caiyao.microreader.BuildConfig; import name.caiyao.microreader.R; import name.caiyao.microreader.bean.UpdateItem; import name.caiyao.microreader.event.StatusBarEvent; import name.caiyao.microreader.presenter.ISettingPresenter; import name.caiyao.microreader.presenter.impl.SettingPresenterImpl; import name.caiyao.microreader.ui.iView.ISettingFragment; import name.caiyao.microreader.utils.CacheUtil; import name.caiyao.microreader.utils.RxBus; public class SettingsFragment extends PreferenceFragment implements ISettingFragment { private Preference prefCache; private ISettingPresenter mISettingPresenter; public SettingsFragment() { } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mISettingPresenter = new SettingPresenterImpl(this); addPreferencesFromResource(R.xml.preferences); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); prefCache = findPreference(getString(R.string.pre_cache_size)); prefCache.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { CacheUtil.deleteDir(SettingsFragment.this.getActivity().getCacheDir()); showCacheSize(prefCache); return true; } }); findPreference(getString(R.string.pre_feedback)).setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { try { Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts( "mailto", "me@caiyao.name", null)); startActivity(Intent.createChooser(intent, "选择邮件客户端:")); } catch (Exception e) { e.printStackTrace(); } return true; } }); findPreference(getString(R.string.pre_author)).setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { try { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://caiyao.name/releases"))); } catch (Exception e) { e.printStackTrace(); } return true; } }); findPreference(getString(R.string.pre_status_bar)).setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { RxBus.getDefault().send(new StatusBarEvent()); return true; } }); findPreference(getString(R.string.pre_nav_color)).setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { RxBus.getDefault().send(new StatusBarEvent()); return true; } }); Preference version = findPreference(getString(R.string.pre_version)); version.setSummary(BuildConfig.VERSION_NAME); version.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { mISettingPresenter.checkUpdate(); return true; } }); } @Override public void onResume() { super.onResume(); showCacheSize(prefCache); } @Override public void onPause() { super.onPause(); mISettingPresenter.unsubcrible(); } private void showCacheSize(Preference preference) { preference.setSummary(getActivity().getString(R.string.cache_size) + CacheUtil.getCacheSize(getActivity().getCacheDir())); } @Override public void showError(String error) { if (getActivity() != null)//Caused by: java.lang.IllegalStateException: Fragment SettingsFragment{9c95f97} not attached to Activity Toast.makeText(getActivity(), error, Toast.LENGTH_SHORT).show(); } @Override public void showUpdateDialog(final UpdateItem updateItem) { new AlertDialog.Builder(getActivity()) .setTitle(getString(R.string.update_title)) .setMessage(String.format(getString(R.string.update_description), updateItem.getVersionName(), updateItem.getReleaseNote())) .setPositiveButton(getString(R.string.update_button), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(updateItem.getDownloadUrl()))); } }) .setNegativeButton(getString(R.string.common_cancel), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }) .show(); } @Override public void showNoUpdate() { if (getActivity() != null)//Caused by: java.lang.IllegalStateException: Fragment SettingsFragment{9c95f97} not attached to Activity Toast.makeText(getActivity(), getString(R.string.update_no_update), Toast.LENGTH_SHORT).show(); } }