package com.markupartist.iglaset.activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; import android.content.SharedPreferences; import android.content.DialogInterface.OnClickListener; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.os.AsyncTask; import android.os.Bundle; import android.preference.Preference; import android.preference.PreferenceActivity; import android.preference.PreferenceScreen; import android.provider.SearchRecentSuggestions; import android.view.KeyEvent; import android.widget.Toast; import com.markupartist.iglaset.R; import com.markupartist.iglaset.provider.AuthUserTask; public class BasicPreferenceActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener, AuthUserTask.OnAuthorizeListener { private static final int DIALOG_CLEAR_SEARCH_HISTORY = 0; private static final int DIALOG_AUTH_FAILED = 1; private AuthUserTask mAuthUserTask; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Load the preferences from an XML resource addPreferencesFromResource(R.xml.preferences); } @Override public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { if (preference.getKey().equals("preference_clear_search_history")) { showDialog(DIALOG_CLEAR_SEARCH_HISTORY); return true; } return super.onPreferenceTreeClick(preferenceScreen, preference); } @Override protected void onResume() { super.onResume(); // Set up a listener whenever a key changes getPreferenceScreen().getSharedPreferences() .registerOnSharedPreferenceChangeListener(this); } @Override protected void onPause() { super.onPause(); // Unregister the listener whenever a key changes getPreferenceScreen().getSharedPreferences() .unregisterOnSharedPreferenceChangeListener(this); } @Override protected void onDestroy() { cancelAuthUserTask(); super.onDestroy(); } private void cancelAuthUserTask() { if(null != mAuthUserTask && mAuthUserTask.getStatus() == AsyncTask.Status.RUNNING) { mAuthUserTask.cancel(true); } } @Override protected Dialog onCreateDialog(int id) { switch(id) { case DIALOG_CLEAR_SEARCH_HISTORY: return new AlertDialog.Builder(this) .setTitle(R.string.clear_search_history_preference) .setMessage(R.string.clear_search_history_summary_preference) .setCancelable(true) .setPositiveButton(R.string.yes, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { SearchRecentSuggestions suggestions = new SearchRecentSuggestions( BasicPreferenceActivity.this, SearchSuggestionProvider.AUTHORITY, SearchSuggestionProvider.MODE); suggestions.clearHistory(); Toast.makeText(BasicPreferenceActivity.this, R.string.search_history_cleared, Toast.LENGTH_SHORT).show(); } }) .setNegativeButton(R.string.no, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }) .create(); case DIALOG_AUTH_FAILED: return new AlertDialog.Builder(this) .setTitle(R.string.login_failed) .setMessage(R.string.login_failed_message) .setPositiveButton("Ok", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { ; } }) .create(); } return null; } @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { if (key.equals("preference_password") || key.equals("preference_username")) { if(sharedPreferences.contains("preference_password") && sharedPreferences.contains("preference_username")) { Toast.makeText(BasicPreferenceActivity.this, R.string.logging_in, Toast.LENGTH_SHORT).show(); cancelAuthUserTask(); mAuthUserTask = new AuthUserTask(this); mAuthUserTask.execute(this); } } } /** * Called when a key is pressed. Overridden to catch if the back key was * pressed. Then setResult is called to allow activities to call this * activity with startActivityForResult. */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK){ setResult(RESULT_OK); finish(); return true; } return super.onKeyDown(keyCode, event); } @Override public void onAuthorizationFailed(Exception exception) { showDialog(DIALOG_AUTH_FAILED); } @Override public void onAuthorizationSuccessful() { Toast.makeText(BasicPreferenceActivity.this, R.string.login_success, Toast.LENGTH_SHORT).show(); } }