/** * Copyright 2008 Joe LaPenna */ package com.joelapenna.foursquared; import android.os.AsyncTask; import com.joelapenna.foursquare.Foursquare; import com.joelapenna.foursquared.preferences.Preferences; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; import android.content.SharedPreferences; import android.content.DialogInterface.OnClickListener; import android.net.Uri; import android.os.Bundle; import android.preference.CheckBoxPreference; import android.preference.Preference; import android.preference.PreferenceManager; import android.preference.PreferenceScreen; import android.preference.Preference.OnPreferenceChangeListener; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.TextView; import java.lang.reflect.Constructor; /** * @author Joe LaPenna (joe@joelapenna.com) * @author Mark Wyszomierski (markww@gmail.com) * -added notifications settings (May 21, 2010). * -removed user update, moved to NotificationSettingsActivity (June 2, 2010) */ public class PreferenceActivity extends android.preference.PreferenceActivity { final private class ChangeSyncTask extends AsyncTask<Boolean,Object,Boolean[]> { @Override protected Boolean[] doInBackground(Boolean... enableSync) { Sync sync = Foursquared.get(PreferenceActivity.this).getSync(); return new Boolean[] { sync.setEnabled(enableSync[0]), enableSync[0] }; } @Override protected void onPostExecute(Boolean[] updateFlagAndNewState) { if (updateFlagAndNewState[0]) { CheckBoxPreference syncPref = (CheckBoxPreference)getPreferenceScreen().findPreference(Preferences.PREFERENCE_SYNC_CONTACTS); syncPref.setChecked(updateFlagAndNewState[1]); } Preference pref = getSyncPref(); pref.setEnabled(true); pref.setOnPreferenceChangeListener(syncChangeListener); } } private static final String TAG = "PreferenceActivity"; private static final boolean DEBUG = FoursquaredSettings.DEBUG; private static final int DIALOG_TOS_PRIVACY = 1; private static final int DIALOG_PROFILE_SETTINGS = 2; private static final String URL_TOS = "http://foursquare.com/legal/terms"; private static final String URL_PRIVACY = "http://foursquare.com/legal/privacy"; private SharedPreferences mPrefs; private OnPreferenceChangeListener syncChangeListener; private BroadcastReceiver mLoggedOutReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (DEBUG) Log.d(TAG, "onReceive: " + intent); finish(); } }; private CheckBoxPreference getSyncPref() { return (CheckBoxPreference)getPreferenceScreen().findPreference(Preferences.PREFERENCE_SYNC_CONTACTS); } @Override protected void onResume() { super.onResume(); CheckBoxPreference syncPref = getSyncPref(); syncPref.setChecked(Foursquared.get(this).getSync().isEnabled()); if ( syncChangeListener != null ) { syncPref.setOnPreferenceChangeListener(syncChangeListener); } } @Override protected void onPause() { Preference syncContactsPreference = getPreferenceScreen().findPreference(Preferences.PREFERENCE_SYNC_CONTACTS); syncContactsPreference.setOnPreferenceChangeListener(null); super.onPause(); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); registerReceiver(mLoggedOutReceiver, new IntentFilter(Foursquared.INTENT_ACTION_LOGGED_OUT)); syncChangeListener = new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { preference.setOnPreferenceChangeListener(null); preference.setEnabled(false); new ChangeSyncTask().execute((Boolean)newValue); return false; } }; this.addPreferencesFromResource(R.xml.preferences); mPrefs = PreferenceManager.getDefaultSharedPreferences(this); Preference advanceSettingsPreference = getPreferenceScreen().findPreference( Preferences.PREFERENCE_ADVANCED_SETTINGS); advanceSettingsPreference.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { ((Foursquared) getApplication()).requestUpdateUser(); return false; } }); } @Override public void onDestroy() { super.onDestroy(); unregisterReceiver(mLoggedOutReceiver); } @Override public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { if (DEBUG) Log.d(TAG, "onPreferenceTreeClick"); String key = preference.getKey(); if (Preferences.PREFERENCE_LOGOUT.equals(key)) { mPrefs.edit().clear().commit(); // TODO: If we re-implement oAuth, we'll have to call // clearAllCrendentials here. ((Foursquared) getApplication()).getFoursquare().setCredentials(null, null); Intent intent = new Intent(this, LoginActivity.class); intent.setAction(Intent.ACTION_MAIN); intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS | Intent.FLAG_ACTIVITY_CLEAR_TOP); sendBroadcast(new Intent(Foursquared.INTENT_ACTION_LOGGED_OUT)); } else if (Preferences.PREFERENCE_ADVANCED_SETTINGS.equals(key)) { startActivity(new Intent( // Intent.ACTION_VIEW, Uri.parse(Foursquare.FOURSQUARE_PREFERENCES))); } else if (Preferences.PREFERENCE_HELP.equals(key)) { Intent intent = new Intent(this, WebViewActivity.class); intent.putExtra(WebViewActivity.INTENT_EXTRA_URL, "http://foursquare.com/help/android"); startActivity(intent); } else if (Preferences.PREFERENCE_SEND_FEEDBACK.equals(key)) { startActivity(new Intent(this, SendLogActivity.class)); } else if (Preferences.PREFERENCE_FRIEND_ADD.equals(key)) { startActivity(new Intent(this, AddFriendsActivity.class)); } else if (Preferences.PREFERENCE_FRIEND_REQUESTS.equals(key)) { startActivity(new Intent(this, FriendRequestsActivity.class)); } else if (Preferences.PREFERENCE_CHANGELOG.equals(key)) { startActivity(new Intent(this, ChangelogActivity.class)); } else if (Preferences.PREFERENCE_PINGS.equals(key)) { startActivity(new Intent(this, PingsSettingsActivity.class)); } else if (Preferences.PREFERENCE_TOS_PRIVACY.equals(key)) { showDialog(DIALOG_TOS_PRIVACY); } else if (Preferences.PREFERENCE_PROFILE_SETTINGS.equals(key)) { showDialog(DIALOG_PROFILE_SETTINGS); } return true; } @Override protected Dialog onCreateDialog(int id) { switch (id) { case DIALOG_TOS_PRIVACY: ArrayAdapter<String> adapterTos = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1); adapterTos.add(getResources().getString(R.string.preference_activity_tos)); adapterTos.add(getResources().getString(R.string.preference_activity_privacy)); AlertDialog dlgInfo = new AlertDialog.Builder(this) .setTitle(getResources().getString(R.string.preference_activity_tos_privacy_dlg_title)) .setAdapter(adapterTos, new OnClickListener() { @Override public void onClick(DialogInterface dlg, int pos) { Intent intent = new Intent(PreferenceActivity.this, WebViewActivity.class); switch (pos) { case 0: intent.putExtra(WebViewActivity.INTENT_EXTRA_URL, URL_TOS); break; case 1: intent.putExtra(WebViewActivity.INTENT_EXTRA_URL, URL_PRIVACY); break; default: return; } startActivity(intent); } }) .create(); return dlgInfo; case DIALOG_PROFILE_SETTINGS: String userId = ((Foursquared) getApplication()).getUserId(); String userName = ((Foursquared) getApplication()).getUserName(); String userEmail = ((Foursquared) getApplication()).getUserEmail(); LayoutInflater inflater = (LayoutInflater) getSystemService(Activity.LAYOUT_INFLATER_SERVICE); View layout = inflater.inflate(R.layout.settings_user_info, (ViewGroup) findViewById(R.id.settings_user_info_layout_root)); TextView tvUserId = (TextView)layout.findViewById(R.id.settings_user_info_label_user_id); TextView tvUserName = (TextView)layout.findViewById(R.id.settings_user_info_label_user_name); TextView tvUserEmail = (TextView)layout.findViewById(R.id.settings_user_info_label_user_email); tvUserId.setText(userId); tvUserName.setText(userName); tvUserEmail.setText(userEmail); AlertDialog dlgProfileSettings = new AlertDialog.Builder(this) .setTitle(getResources().getString(R.string.preference_activity_profile_settings_dlg_title)) .setView(layout) .create(); return dlgProfileSettings; } return null; } }