package com.liyu.fakeweather.ui.setting;
import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceFragment;
import android.support.design.widget.Snackbar;
import com.afollestad.materialdialogs.color.ColorChooserDialog;
import com.liyu.fakeweather.App;
import com.liyu.fakeweather.R;
import com.liyu.fakeweather.utils.FileSizeUtil;
import com.liyu.fakeweather.utils.FileUtil;
import com.liyu.fakeweather.utils.SettingsUtil;
import com.liyu.fakeweather.utils.SimpleSubscriber;
import com.liyu.fakeweather.utils.TTSManager;
import rx.Observable;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Func1;
import rx.schedulers.Schedulers;
/**
* Created by liyu on 2016/11/18.
*/
public class SettingFragment extends PreferenceFragment implements Preference.OnPreferenceClickListener,
Preference.OnPreferenceChangeListener {
private ListPreference weatherShareType;
private ListPreference busRefreshFreq;
private ListPreference ttsVoiceType;
private Preference cleanCache;
private Preference theme;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.setting);
weatherShareType = (ListPreference) findPreference(SettingsUtil.WEATHER_SHARE_TYPE);
busRefreshFreq = (ListPreference) findPreference(SettingsUtil.BUS_REFRESH_FREQ);
ttsVoiceType = (ListPreference) findPreference(SettingsUtil.TTS_VOICE_TYPE);
cleanCache = findPreference(SettingsUtil.CLEAR_CACHE);
theme = findPreference(SettingsUtil.THEME);
weatherShareType.setSummary(weatherShareType.getValue());
ttsVoiceType.setSummary(ttsVoiceType.getEntry());
busRefreshFreq.setSummary(String.format("%s 秒,长按『刷新』按钮即可开启自动模式。", busRefreshFreq.getValue()));
String[] colorNames = getActivity().getResources().getStringArray(R.array.color_name);
int currentThemeIndex = SettingsUtil.getTheme();
if (currentThemeIndex >= colorNames.length) {
theme.setSummary("自定义色");
} else {
theme.setSummary(colorNames[currentThemeIndex]);
}
weatherShareType.setOnPreferenceChangeListener(this);
busRefreshFreq.setOnPreferenceChangeListener(this);
ttsVoiceType.setOnPreferenceChangeListener(this);
cleanCache.setOnPreferenceClickListener(this);
theme.setOnPreferenceClickListener(this);
String[] cachePaths = new String[]{FileUtil.getInternalCacheDir(App.getContext()), FileUtil.getExternalCacheDir(App.getContext())};
Observable
.just(cachePaths)
.map(new Func1<String[], String>() {
@Override
public String call(String[] strings) {
return FileSizeUtil.getAutoFileOrFilesSize(strings);
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new SimpleSubscriber<String>() {
@Override
public void onNext(String s) {
cleanCache.setSummary(s);
}
});
}
@Override
public boolean onPreferenceChange(Preference preference, Object o) {
if (preference == weatherShareType) {
weatherShareType.setSummary((String) o);
SettingsUtil.setWeatherShareType((String) o);
} else if (preference == busRefreshFreq) {
busRefreshFreq.setSummary(String.format("%s 秒,长按『刷新』按钮即可开启自动模式。", (String) o));
SettingsUtil.setBusRefreshFreq(Integer.parseInt((String) o));
} else if (preference == ttsVoiceType) {
ttsVoiceType.setSummary(ttsVoiceType.getEntries()[ttsVoiceType.findIndexOfValue((String) o)]);
SettingsUtil.setTtsVoiceType((String) o);
TTSManager.destroy();
}
return true;
}
@Override
public boolean onPreferenceClick(Preference preference) {
if (preference == cleanCache) {
Observable
.just(FileUtil.delete(FileUtil.getInternalCacheDir(App.getContext())))
.map(new Func1<Boolean, Boolean>() {
@Override
public Boolean call(Boolean result) {
return result && FileUtil.delete(FileUtil.getExternalCacheDir(App.getContext()));
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new SimpleSubscriber<Boolean>() {
@Override
public void onNext(Boolean aBoolean) {
cleanCache.setSummary(FileSizeUtil.getAutoFileOrFilesSize(FileUtil.getInternalCacheDir(App.getContext()), FileUtil.getExternalCacheDir(App.getContext())));
Snackbar.make(getView(), "缓存已清除 (*^__^*)", Snackbar.LENGTH_SHORT).show();
}
});
} else if (preference == theme) {
new ColorChooserDialog.Builder((SettingActivity) getActivity(), R.string.theme)
.customColors(R.array.colors, null)
.doneButton(R.string.done)
.cancelButton(R.string.cancel)
.allowUserColorInput(false)
.allowUserColorInputAlpha(false)
.show();
}
return true;
}
}