package com.automattic.simplenote; import android.app.Fragment; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.support.v7.preference.ListPreference; import android.support.v7.preference.Preference; import android.widget.Toast; import com.automattic.simplenote.analytics.AnalyticsTracker; import com.automattic.simplenote.utils.PrefUtils; import com.automattic.simplenote.utils.ThemeUtils; import com.simperium.Simperium; import com.simperium.android.LoginActivity; import com.simperium.client.User; import com.takisoft.fix.support.v7.preference.PreferenceFragmentCompat; import com.takisoft.fix.support.v7.preference.SwitchPreferenceCompat; /** * A simple {@link Fragment} subclass. */ public class PreferencesFragment extends PreferenceFragmentCompat implements User.StatusChangeListener, Simperium.OnUserCreatedListener { public PreferencesFragment() { // Required empty public constructor } @Override public void onCreatePreferencesFix(Bundle savedInstanceState, String rootKey) { addPreferencesFromResource(R.xml.preferences); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); Preference authenticatePreference = findPreference("pref_key_authenticate"); Simplenote currentApp = (Simplenote) getActivity().getApplication(); currentApp.getSimperium().setUserStatusChangeListener(this); currentApp.getSimperium().setOnUserCreatedListener(this); authenticatePreference.setSummary(currentApp.getSimperium().getUser().getEmail()); if (currentApp.getSimperium().needsAuthorization()) { authenticatePreference.setTitle(R.string.sign_in); } else { authenticatePreference.setTitle(R.string.sign_out); } authenticatePreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { if (!isAdded()) return false; Simplenote currentApp = (Simplenote) getActivity().getApplication(); if (currentApp.getSimperium().needsAuthorization()) { Intent loginIntent = new Intent(getActivity(), LoginActivity.class); loginIntent.putExtra(LoginActivity.EXTRA_SIGN_IN_FIRST, true); startActivityForResult(loginIntent, Simperium.SIGNUP_SIGNIN_REQUEST); } else { Simplenote application = (Simplenote) getActivity().getApplication(); application.getSimperium().deauthorizeUser(); application.getNotesBucket().reset(); application.getTagsBucket().reset(); application.getNotesBucket().stop(); application.getTagsBucket().stop(); AnalyticsTracker.track( AnalyticsTracker.Stat.USER_SIGNED_OUT, AnalyticsTracker.CATEGORY_USER, "preferences_sign_out_button" ); // Resets analytics user back to 'anon' type AnalyticsTracker.refreshMetadata(null); getActivity().finish(); } return true; } }); findPreference("pref_key_website").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { try { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://simplenote.com"))); } catch (Exception e) { Toast.makeText(getActivity(), R.string.no_browser_available, Toast.LENGTH_LONG).show(); } return true; } }); findPreference("pref_key_about").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { startActivity(new Intent(getActivity(), AboutActivity.class)); return true; } }); final ListPreference themePreference = (ListPreference) findPreference(PrefUtils.PREF_THEME); themePreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { int index = Integer.parseInt(newValue.toString()); CharSequence[] entries = themePreference.getEntries(); themePreference.setSummary(entries[index]); AnalyticsTracker.track( AnalyticsTracker.Stat.SETTINGS_THEME_UPDATED, AnalyticsTracker.CATEGORY_USER, "theme_preference" ); // update intent to indicate the theme setting was changed getActivity().setIntent(ThemeUtils.makeThemeChangeIntent()); // recreate the activity so new theme is applied getActivity().recreate(); return true; } }); final ListPreference sortPreference = (ListPreference) findPreference(PrefUtils.PREF_SORT_ORDER); sortPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { int index = Integer.parseInt(newValue.toString()); CharSequence[] entries = sortPreference.getEntries(); sortPreference.setSummary(entries[index]); return true; } }); Preference versionPref = findPreference("pref_key_build"); versionPref.setSummary(PrefUtils.versionInfo()); SwitchPreferenceCompat switchPreference = (SwitchPreferenceCompat) findPreference("pref_key_condensed_note_list"); switchPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object o) { if (((SwitchPreferenceCompat) preference).isChecked()) { AnalyticsTracker.track( AnalyticsTracker.Stat.SETTINGS_LIST_CONDENSED_ENABLED, AnalyticsTracker.CATEGORY_USER, "condensed_list_preference" ); } return true; } }); } @Override public void onUserStatusChange(User.Status status) { if (isAdded() && status == User.Status.AUTHORIZED) { // User signed in getActivity().runOnUiThread(new Runnable() { public void run() { Preference authenticatePreference = findPreference("pref_key_authenticate"); authenticatePreference.setTitle(R.string.sign_out); } }); Simplenote app = (Simplenote) getActivity().getApplication(); AnalyticsTracker.refreshMetadata(app.getSimperium().getUser().getEmail()); AnalyticsTracker.track( AnalyticsTracker.Stat.USER_SIGNED_IN, AnalyticsTracker.CATEGORY_USER, "signed_in_from_preferences_activity" ); } } @Override public void onUserCreated(User user) { AnalyticsTracker.track( AnalyticsTracker.Stat.USER_ACCOUNT_CREATED, AnalyticsTracker.CATEGORY_USER, "account_created_from_preferences_activity" ); } }