package com.jasonchen.microlang.preference;
import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Environment;
import android.preference.Preference;
import android.preference.PreferenceFragment;
import android.text.ClipboardManager;
import android.view.View;
import android.widget.Toast;
import com.jasonchen.microlang.R;
import com.jasonchen.microlang.activitys.SettingActivity;
import com.jasonchen.microlang.debug.AppLogger;
import com.jasonchen.microlang.fragments.MDColorsDialogFragment;
import com.jasonchen.microlang.settings.SettingUtility;
import com.jasonchen.microlang.tasks.MyAsyncTask;
import com.jasonchen.microlang.utils.AppNewMsgAlarm;
import com.jasonchen.microlang.utils.GlobalContext;
import com.jasonchen.microlang.utils.MythouCrashHandler;
import com.jasonchen.microlang.utils.SendCrashLog;
import com.jasonchen.microlang.utils.ThemeUtility;
import com.jasonchen.microlang.utils.file.FileManager;
import java.io.File;
import java.io.IOException;
import java.util.UnknownFormatFlagsException;
import me.drakeet.materialdialog.MaterialDialog;
/**
* jasonchen
* 2015/04/10
*/
public class SettingFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {
private BroadcastReceiver sdCardReceiver;
private Preference cleanCachePre;
private Preference theme;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.setting_activity_pref);
Thread.setDefaultUncaughtExceptionHandler(new MythouCrashHandler());
buildCacheSummary();
buildLogSummary();
findPreference("pref_crash_now").setEnabled(false);
findPreference(SettingActivity.SAVED_PIC_PATH)
.setSummary(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES).getAbsolutePath() + "/x_ray");
cleanCachePre = findPreference(SettingActivity.CLICK_TO_CLEAN_CACHE);
theme = (Preference) findPreference(SettingActivity.THEME);
theme.setSummary(getResources().getStringArray(R.array.mdColorNames)[SettingUtility.getThemeIndex()]);
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
if (FileManager.isExternalStorageMounted()) {
new CalcCacheSize(cleanCachePre)
.executeOnExecutor(
MyAsyncTask.THREAD_POOL_EXECUTOR);
} else {
cleanCachePre.setSummary(R.string.please_insert_sd_card);
}
cleanCachePre
.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
final MaterialDialog deleteCacheDialog = new MaterialDialog(getActivity());
deleteCacheDialog.setTitle(getString(R.string.notice))
.setMessage(getString(R.string.clean_cache_will_be_done_sure)).setPositiveButton(getString(R.string.confirm), new View.OnClickListener() {
@Override
public void onClick(View v) {
deleteCache();
deleteCacheDialog.dismiss();
}
}).setNegativeButton(getString(R.string.cancel), new View.OnClickListener() {
@Override
public void onClick(View v) {
deleteCacheDialog.dismiss();
}
});
deleteCacheDialog.show();
return true;
}
});
theme.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
MDColorsDialogFragment.launch(getActivity());
return false;
}
});
findPreference("pref_crash_now").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
throw new RuntimeException();
}
});
findPreference("pref_send_crash").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()).setTitle(getString(R.string.pref_send_crash))
.setMessage("发送log至ecjtuchend@163.com,帮助优化程序,邮箱地址已经拷贝至剪贴板").setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
ClipboardManager cmb = (ClipboardManager) getActivity().getSystemService(getActivity().CLIPBOARD_SERVICE);
cmb.setText("ecjtuchend@163.com");
builder.create();
builder.show();
return true;
}
});
}
private void deleteCache(){
if (FileManager.isExternalStorageMounted()) {
new CleanCacheTask(cleanCachePre)
.executeOnExecutor(MyAsyncTask.THREAD_POOL_EXECUTOR);
} else {
Toast.makeText(getActivity(),
getString(R.string.please_insert_sd_card),
Toast.LENGTH_SHORT).show();
}
}
@Override
public void onResume() {
super.onResume();
sdCardReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
buildCacheSummary();
buildLogSummary();
}
};
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_MEDIA_MOUNTED);
filter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);
filter.addDataScheme("file");
getActivity().registerReceiver(sdCardReceiver, filter);
if(!SettingUtility.getIntelligencePic()){
findPreference(SettingActivity.SHOW_PIC_WHEN_INTELLIGENT).setEnabled(false);
}
}
@Override
public void onPause() {
super.onPause();
if (sdCardReceiver != null) {
getActivity().unregisterReceiver(sdCardReceiver);
}
}
private void buildCacheSummary() {
File cachedDir = GlobalContext.getInstance().getExternalCacheDir();
if (cachedDir != null) {
findPreference(SettingActivity.CACHE_PATH).setSummary(cachedDir.getAbsolutePath());
} else {
findPreference(SettingActivity.CACHE_PATH)
.setSummary(getString(R.string.sd_card_in_not_mounted));
}
}
private void buildLogSummary() {
File cachedDir = GlobalContext.getInstance().getExternalCacheDir();
if (cachedDir != null) {
findPreference(SettingActivity.SAVED_LOG_PATH).setSummary(FileManager.getLogDir());
} else {
findPreference(SettingActivity.SAVED_LOG_PATH)
.setSummary(getString(R.string.sd_card_in_not_mounted));
}
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key.equals(SettingActivity.INTELLIGENCE_PIC)) {
boolean value = sharedPreferences.getBoolean(key, false);
if (value) {
findPreference(SettingActivity.SHOW_PIC_WHEN_INTELLIGENT).setEnabled(true);
} else {
findPreference(SettingActivity.SHOW_PIC_WHEN_INTELLIGENT).setEnabled(false);
}
}
}
private class CalcCacheSize extends MyAsyncTask<Void, Void, String> {
Preference preference;
public CalcCacheSize(Preference preference) {
this.preference = preference;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
this.preference.setSummary(R.string.getting_cache_size);
}
@Override
protected String doInBackground(Void... params) {
return FileManager.getPictureCacheSize();
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
if (getActivity() == null) {
return;
}
preference.setSummary(
getString(R.string.pref_max_file_cache_size_is_300mb_current_size_is, s));
}
}
private class CleanCacheTask extends MyAsyncTask<Void, Void, Void> {
Preference preference;
public CleanCacheTask(Preference preference) {
this.preference = preference;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
Toast.makeText(getActivity(), getString(R.string.start_clean_cache),
Toast.LENGTH_SHORT).show();
}
@Override
protected Void doInBackground(Void... params) {
FileManager.deletePictureCache();
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
if (getActivity() == null) {
return;
}
Toast.makeText(getActivity(), getString(R.string.clean_cache_finish),
Toast.LENGTH_SHORT).show();
new CalcCacheSize(preference)
.executeOnExecutor(
MyAsyncTask.THREAD_POOL_EXECUTOR);
}
}
}