package com.manuelmaly.hn; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.os.Bundle; import android.os.Message; import android.preference.Preference; import android.preference.Preference.OnPreferenceClickListener; import android.preference.PreferenceActivity; import android.preference.PreferenceManager; import android.view.View; import android.view.View.OnClickListener; import android.widget.ImageView; import com.manuelmaly.hn.login.LoginActivity_; import com.manuelmaly.hn.server.HNCredentials; import com.manuelmaly.hn.util.Run; public class SettingsActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener { public enum FONTSIZE { FONTSIZE_SMALL, FONTSIZE_NORMAL, FONTSIZE_BIG } public enum HTMLPROVIDER { HTMLPROVIDER_ORIGINAL_ARTICLE_URL, HTMLPROVIDER_GOOGLE, HTMLPROVIDER_VIEWTEXT, HTMLPROVIDER_INSTAPAPER } public enum HTMLVIEWER { HTMLVIEWER_WITHINAPP, HTMLVIEWER_BROWSER } private static final int REQUEST_LOGIN = 100; private Preference mUserPref; @Override @SuppressWarnings("deprecation") public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.settings); addPreferencesFromResource(R.xml.preferences); SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this); Preference fontSizePref = findPreference(Settings.PREF_FONTSIZE); fontSizePref.setSummary(sharedPref.getString(Settings.PREF_FONTSIZE, "Undefined")); Preference htmlProviderPref = findPreference(Settings.PREF_HTMLPROVIDER); htmlProviderPref.setSummary(sharedPref.getString(Settings.PREF_HTMLPROVIDER, "Undefined")); Preference htmlViewerPref = findPreference(Settings.PREF_HTMLVIEWER); htmlViewerPref.setSummary(sharedPref.getString(Settings.PREF_HTMLVIEWER, "Undefined")); mUserPref= (UserPreference) findPreference(Settings.PREF_USER); mUserPref.setOnPreferenceClickListener(new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { String userName = Settings.getUserName(SettingsActivity.this); if (userName == null || userName.equals("")) { onLoginClick(); } else { onLogoutClik(); } return false; } }); updateUserItem(); View backView = (ImageView) findViewById(R.id.actionbar_back); backView.setOnClickListener(new OnClickListener() { public void onClick(View v) { finish(); } }); } @SuppressWarnings("deprecation") public void onSharedPreferenceChanged(final SharedPreferences sharedPreferences, final String key) { Run.onUiThread(new Runnable() { @Override public void run() { if (key.equals(Settings.PREF_FONTSIZE) || key.equals(Settings.PREF_HTMLPROVIDER) || key.equals(Settings.PREF_HTMLVIEWER)) findPreference(key).setSummary(sharedPreferences.getString(key, "Undefined")); else if (key.equals(Settings.PREF_USER)) { HNCredentials.invalidate(); updateUserItem(); } } }, this); } private void updateUserItem() { String userName = Settings.getUserName(this); if (!userName.equals("")) mUserPref.setSummary(userName); else mUserPref.setSummary(" "); } private void onLoginClick() { Intent intent = new Intent(SettingsActivity.this, LoginActivity_.class); startActivityForResult(intent, REQUEST_LOGIN); } private void onLogoutClik() { AlertDialog logoutDialog = new AlertDialog.Builder(SettingsActivity.this).create(); logoutDialog.setTitle(R.string.logout_question_lbl); logoutDialog.setButton(DialogInterface.BUTTON_POSITIVE, getString(R.string.ok), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { Settings.clearUserData(SettingsActivity.this); } }); logoutDialog.setButton(DialogInterface.BUTTON_NEGATIVE, getString(R.string.cancel), (Message) null); logoutDialog.show(); } @Override @SuppressWarnings("deprecation") protected void onResume() { super.onResume(); getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); } @Override @SuppressWarnings("deprecation") protected void onPause() { super.onPause(); getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch(requestCode) { case REQUEST_LOGIN: // If there was a successful login, then we want to show that to // the user if(resultCode == RESULT_OK) { updateUserItem(); } } super.onActivityResult(requestCode, resultCode, data); } }