package com.malmstein.yahnac.settings;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceCategory;
import android.preference.PreferenceFragment;
import com.malmstein.yahnac.BuildConfig;
import com.malmstein.yahnac.R;
import com.malmstein.yahnac.data.updater.LoginSharedPreferences;
public class SettingsFragment extends PreferenceFragment {
private Listener listener;
private LoginSharedPreferences loginSharedPreferences;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.about_settings);
addPreferencesFromResource(R.xml.community_settings);
configureAccountPreferences();
addPreferenceClickListenerForSoftwareLicenses();
addPreferenceClickListenerForCommunity();
addPreferenceClickListenerForAppInvite();
updateSummaryPreferences();
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
this.listener = (Listener) activity;
}
@Override
public void onDetach() {
super.onDetach();
this.listener = new DummyListener();
}
private void configureAccountPreferences() {
loginSharedPreferences = LoginSharedPreferences.newInstance();
if (loginSharedPreferences.isLoggedIn()) {
addPreferencesFromResource(R.xml.account_settings);
PreferenceCategory accountCategory = (PreferenceCategory) findPreference(getString(R.string.settings_category_key_account));
Preference logoutNotification = accountCategory.findPreference(getString(R.string.settings_key_logout));
logoutNotification.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
listener.onShowLogoutDialog();
return true;
}
});
}
}
private void addPreferenceClickListenerForSoftwareLicenses() {
Preference licensesPreference = findPreference(getString(R.string.settings_key_software_licences));
licensesPreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
Intent softwareLicenses = new Intent(getActivity(), SoftwareLicensesActivity.class);
startActivity(softwareLicenses);
return true;
}
});
}
private void addPreferenceClickListenerForCommunity() {
PreferenceCategory communityCategory = (PreferenceCategory) findPreference(getString(R.string.settings_category_key_community));
Preference communityPreference = communityCategory.findPreference(getString(R.string.settings_key_community));
communityPreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://plus.google.com/communities/108233780766400792163"));
startActivity(browserIntent);
return true;
}
});
}
private void addPreferenceClickListenerForAppInvite() {
PreferenceCategory communityCategory = (PreferenceCategory) findPreference(getString(R.string.settings_category_key_community));
Preference invitePreference = communityCategory.findPreference(getString(R.string.settings_key_invite));
invitePreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
listener.onAppInviteRequested();
return true;
}
});
}
private void updateSummaryPreferences() {
updateSummary(R.string.settings_key_build_version, String.format(getString(R.string.settings_value_version_number), BuildConfig.VERSION_NAME));
updateSummary(R.string.settings_key_build_timestamp, BuildConfig.BUILD_TIME_FORMATTED);
}
private void updateSummary(int settingsKeyId, String summary) {
Preference preference = findPreference(getString(settingsKeyId));
preference.setSummary(summary);
}
public interface Listener {
void onShowLogoutDialog();
void onAppInviteRequested();
}
private static class DummyListener implements Listener {
@Override
public void onShowLogoutDialog() {
// no-op
}
@Override
public void onAppInviteRequested() {
// no-op
}
}
}