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"
);
}
}