package com.maxiee.heartbeat.ui.fragments; import android.app.Activity; import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.net.Uri; import android.os.Bundle; import android.preference.Preference; import android.preference.PreferenceFragment; import android.support.design.widget.Snackbar; import android.support.v7.app.AlertDialog; import android.webkit.WebView; import com.maxiee.heartbeat.R; import com.maxiee.heartbeat.backup.BackupAllTask; import com.maxiee.heartbeat.backup.BackupManager; import com.maxiee.heartbeat.backup.RestoreAllTask; import com.maxiee.heartbeat.common.ThemeUtils; import com.maxiee.heartbeat.data.DataManager; import com.maxiee.heartbeat.ui.CrashListActivity; import com.maxiee.heartbeat.ui.PatternActivity; /** * Created by maxiee on 15-6-28. * Thanks to fython/NHentai-android (https://github.com/fython/NHentai-android) */ public class SettingsFragment extends PreferenceFragment implements Preference.OnPreferenceClickListener{ private final static int RESTORE_REQUEST = 1127; private final static int RESTORE_ALL_REQUEST = 1128; private final static String GITHUB_URL = "https://github.com/maxiee/HeartBeat"; private final static String Weibo_URL = "http://weibo.com/maxiee"; private final static String EMAIL = "maxieewong@gmail.com"; private final static String XXXXL = "http://coolapk.com/u/421881"; private final static String DONATE_MAIL = "maxer_ray@163.com"; private Preference mThemePref; private Preference mPatternPref; private Preference mVersionPref; private Preference mGitHubPref; private Preference mWeiboPref; private Preference mCrashPref; private Preference mEmailPref; private Preference mThanksXXXXL; private Preference mBackupSDPref; private Preference mBackupCloudPref; private Preference mBackupAllPref; private Preference mRestorePref; private Preference mRestoreAllPref; private Preference mDonatePref; private Preference mLicensesPref; private SharedPreferences mPrefs; private String mPattern; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.settings); mThemePref = findPreference("change_theme"); mPatternPref = findPreference("pattern"); mVersionPref = findPreference("version"); mGitHubPref = findPreference("github"); mWeiboPref = findPreference("weibo"); mCrashPref = findPreference("crash"); mEmailPref = findPreference("email"); mThanksXXXXL = findPreference("icon_thanks"); mBackupSDPref = findPreference("backup_sd"); mBackupCloudPref = findPreference("backup_cloud"); mBackupAllPref = findPreference("backup_all"); mRestorePref = findPreference("restore"); mRestoreAllPref = findPreference("restore_all"); mDonatePref = findPreference("donate"); mLicensesPref = findPreference("licenses"); String version = "Unknown"; try { version = getActivity().getPackageManager().getPackageInfo(getActivity().getPackageName(), 0).versionName; version += " (" + getActivity().getPackageManager().getPackageInfo(getActivity().getPackageName(), 0).versionCode + ")"; } catch (Exception e) {e.printStackTrace();} mPrefs = getActivity().getSharedPreferences("hb", Context.MODE_PRIVATE); mVersionPref.setSummary(version); mGitHubPref.setOnPreferenceClickListener(this); mGitHubPref.setSummary(GITHUB_URL); mDonatePref.setOnPreferenceClickListener(this); mDonatePref.setSummary(getString(R.string.donate_summary) + " " + DONATE_MAIL); mWeiboPref.setOnPreferenceClickListener(this); mWeiboPref.setSummary(Weibo_URL); mCrashPref.setSummary(getString(R.string.settings_crash_summary)); mCrashPref.setOnPreferenceClickListener(this); mEmailPref.setSummary(EMAIL); mEmailPref.setOnPreferenceClickListener(this); mThanksXXXXL.setOnPreferenceClickListener(this); mBackupSDPref.setOnPreferenceClickListener(this); mBackupCloudPref.setOnPreferenceClickListener(this); mBackupAllPref.setOnPreferenceClickListener(this); mRestorePref.setOnPreferenceClickListener(this); mRestoreAllPref.setOnPreferenceClickListener(this); mThemePref.setOnPreferenceClickListener(this); mLicensesPref.setOnPreferenceClickListener(this); initPattern(); } @Override public void onResume() { super.onResume(); initPattern(); } @Override public boolean onPreferenceClick(Preference preference) { if (preference == mWeiboPref) { Uri uri = Uri.parse(Weibo_URL); startActivity(new Intent(Intent.ACTION_VIEW, uri)); return true; } if (preference == mGitHubPref) { Uri uri = Uri.parse(GITHUB_URL); startActivity(new Intent(Intent.ACTION_VIEW, uri)); return true; } if (preference == mCrashPref) { Intent intent = new Intent(); intent.setAction(Intent.ACTION_MAIN); intent.setClass(getActivity(), CrashListActivity.class); startActivity(intent); return true; } if (preference == mPatternPref) { onPatternClick(); return true; } if (preference == mThanksXXXXL) { Uri uri = Uri.parse(XXXXL); startActivity(new Intent(Intent.ACTION_VIEW, uri)); return true; } if (preference == mBackupSDPref) { if (BackupManager.backupSD(getActivity()) == null) { Snackbar.make(getView(), getString(R.string.backup_failed), Snackbar.LENGTH_SHORT).show(); } else { Snackbar.make(getView(), getString(R.string.backup_ok), Snackbar.LENGTH_SHORT).show(); } return true; } if (preference == mBackupCloudPref) { String ret = BackupManager.backupCloud(getActivity()); if (ret != null) Snackbar.make(getView(), ret, Snackbar.LENGTH_LONG).show(); return true; } if (preference == mBackupAllPref) { new BackupAllTask(getActivity()).execute(); } if (preference == mRestorePref) { Intent i = new Intent(); i.setAction(Intent.ACTION_GET_CONTENT); i.setType("file/*"); startActivityForResult(i, RESTORE_REQUEST); return true; } if (preference == mRestoreAllPref) { Intent i = new Intent(); i.setAction(Intent.ACTION_GET_CONTENT); i.setType("file/*"); startActivityForResult(i, RESTORE_ALL_REQUEST); return true; } if (preference == mEmailPref) { Intent i = new Intent(Intent.ACTION_SENDTO); i.setData(Uri.parse("mailto:")); i.putExtra(Intent.EXTRA_EMAIL, new String[] {EMAIL}); if (i.resolveActivity(getActivity().getPackageManager()) != null) { startActivity(i); } return true; } if (preference == mDonatePref) { ClipboardManager clipboard = (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE); ClipData clip = ClipData.newPlainText("Donate", DONATE_MAIL); clipboard.setPrimaryClip(clip); Snackbar.make(getView(), getString(R.string.copy_finished), Snackbar.LENGTH_LONG).show(); return true; } if (preference == mThemePref) { ThemeUtils.chooseThemeDialog(getActivity()); return true; } if (preference == mLicensesPref) { WebView webView = new WebView(getActivity()); webView.loadUrl("file:///android_asset/licenses.html"); new AlertDialog.Builder(getActivity()) .setView(webView) .setCancelable(true) .show(); } return false; } private void initPattern() { mPattern = mPrefs.getString( "pattern", "" ); if (mPattern.isEmpty()) { mPatternPref.setSummary(getString(R.string.pattern_empty)); } else { mPatternPref.setSummary(getString(R.string.setted)); } mPatternPref.setOnPreferenceClickListener(this); } private void onPatternClick() { if (mPattern.isEmpty()) { Intent i = new Intent(); i.setClass(getActivity(), PatternActivity.class); i.putExtra(PatternActivity.ACTION, PatternActivity.SET); startActivity(i); } else { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.AppTheme_Dialog); builder.setTitle(getString(R.string.choice)); builder.setItems( new String[]{ getString(R.string.settings_pattern_cancel), getString(R.string.settings_pattern_change) }, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (which == 0) { Intent i = new Intent(getActivity(), PatternActivity.class); i.putExtra(PatternActivity.ACTION, PatternActivity.CANCEL); startActivity(i); dialog.dismiss(); } else if (which == 1) { Intent i = new Intent(getActivity(), PatternActivity.class); i.putExtra(PatternActivity.ACTION, PatternActivity.MODIFY); startActivity(i); dialog.dismiss(); } } } ); builder.show(); } } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == RESTORE_REQUEST && resultCode == Activity.RESULT_OK) { String ret = BackupManager.restore(getActivity(), data); DataManager dm = DataManager.getInstance(getActivity()); dm.reload(); Snackbar.make(getView(), ret, Snackbar.LENGTH_LONG).show(); } if (requestCode == RESTORE_ALL_REQUEST && resultCode == Activity.RESULT_OK) { new RestoreAllTask(getActivity()).execute(data); } } }