From d2fa3a0cc60b9b6933b28abe780248e1b23e6207 Mon Sep 17 00:00:00 2001 From: warren powers Date: Thu, 7 Jul 2011 00:46:44 +0000 Subject: [PATCH] created FacebookActivity.java and facebookactivity.xml. this activity is designed to assist with context issues during facebook authorization for the initial authorization. also modified TravelPostMain.java to fire an intent for this activity. currently works. facebook authorized. saves the settings. only issue is you get a black screen aftwords. if you hit back all is good. TODO: log the onComplete method in facebookactivity to see what is happening. twitter authorization. finish widget and posting to sites. --- TravelPost/AndroidManifest.xml | 32 +++--- TravelPost/ChangeLog.txt | 9 ++ .../com/TwentyCodes/android/SkyHook/R.java | 3 +- .../com/TwentyCodes/android/TravelPost/R.java | 3 +- .../com/TwentyCodes/android/exception/R.java | 3 +- TravelPost/gen/com/facebook/android/R.java | 3 +- TravelPost/res/layout/facebookactivity.xml | 8 ++ .../SocialSites/FacebookActivity.java | 98 +++++++++++++++++++ .../android/TravelPost/TravelPostMain.java | 73 ++------------ 9 files changed, 154 insertions(+), 78 deletions(-) create mode 100644 TravelPost/ChangeLog.txt create mode 100644 TravelPost/res/layout/facebookactivity.xml create mode 100644 TravelPost/src/com/TwentyCodes/android/TravelPost/SocialSites/FacebookActivity.java diff --git a/TravelPost/AndroidManifest.xml b/TravelPost/AndroidManifest.xml index 4fb5afa..b3e74f5 100644 --- a/TravelPost/AndroidManifest.xml +++ b/TravelPost/AndroidManifest.xml @@ -1,19 +1,29 @@ - - + + + - - + + + - - + + - + + diff --git a/TravelPost/ChangeLog.txt b/TravelPost/ChangeLog.txt new file mode 100644 index 0000000..9ca67e3 --- /dev/null +++ b/TravelPost/ChangeLog.txt @@ -0,0 +1,9 @@ +created FacebookActivity.java and facebookactivity.xml. this activity is designed to assist with context issues during facebook authorization for the initial authorization. +also modified TravelPostMain.java to fire an intent for this activity. + +currently works. facebook authorized. saves the settings. only issue is you get a black screen aftwords. if you hit back all is good. + +TODO: +log the onComplete method in facebookactivity to see what is happening. +twitter authorization. +finish widget and posting to sites. \ No newline at end of file diff --git a/TravelPost/gen/com/TwentyCodes/android/SkyHook/R.java b/TravelPost/gen/com/TwentyCodes/android/SkyHook/R.java index 5604e16..cbaca73 100644 --- a/TravelPost/gen/com/TwentyCodes/android/SkyHook/R.java +++ b/TravelPost/gen/com/TwentyCodes/android/SkyHook/R.java @@ -33,7 +33,8 @@ public final class R { public static final int text=0x7f070001; } public static final class layout { - public static final int powered_by_skyhook=0x7f030000; + public static final int facebookactivity=0x7f030000; + public static final int powered_by_skyhook=0x7f030001; } public static final class string { public static final int about=0x7f050005; diff --git a/TravelPost/gen/com/TwentyCodes/android/TravelPost/R.java b/TravelPost/gen/com/TwentyCodes/android/TravelPost/R.java index effcc3e..7b8bf1c 100644 --- a/TravelPost/gen/com/TwentyCodes/android/TravelPost/R.java +++ b/TravelPost/gen/com/TwentyCodes/android/TravelPost/R.java @@ -33,7 +33,8 @@ public final class R { public static final int text=0x7f070001; } public static final class layout { - public static final int powered_by_skyhook=0x7f030000; + public static final int facebookactivity=0x7f030000; + public static final int powered_by_skyhook=0x7f030001; } public static final class string { public static final int about=0x7f050005; diff --git a/TravelPost/gen/com/TwentyCodes/android/exception/R.java b/TravelPost/gen/com/TwentyCodes/android/exception/R.java index dff2bb2..0c509ef 100644 --- a/TravelPost/gen/com/TwentyCodes/android/exception/R.java +++ b/TravelPost/gen/com/TwentyCodes/android/exception/R.java @@ -33,7 +33,8 @@ public final class R { public static final int text=0x7f070001; } public static final class layout { - public static final int powered_by_skyhook=0x7f030000; + public static final int facebookactivity=0x7f030000; + public static final int powered_by_skyhook=0x7f030001; } public static final class string { public static final int about=0x7f050005; diff --git a/TravelPost/gen/com/facebook/android/R.java b/TravelPost/gen/com/facebook/android/R.java index 69cefba..39291c8 100644 --- a/TravelPost/gen/com/facebook/android/R.java +++ b/TravelPost/gen/com/facebook/android/R.java @@ -33,7 +33,8 @@ public final class R { public static final int text=0x7f070001; } public static final class layout { - public static final int powered_by_skyhook=0x7f030000; + public static final int facebookactivity=0x7f030000; + public static final int powered_by_skyhook=0x7f030001; } public static final class string { public static final int about=0x7f050005; diff --git a/TravelPost/res/layout/facebookactivity.xml b/TravelPost/res/layout/facebookactivity.xml new file mode 100644 index 0000000..32f2c4f --- /dev/null +++ b/TravelPost/res/layout/facebookactivity.xml @@ -0,0 +1,8 @@ + + + diff --git a/TravelPost/src/com/TwentyCodes/android/TravelPost/SocialSites/FacebookActivity.java b/TravelPost/src/com/TwentyCodes/android/TravelPost/SocialSites/FacebookActivity.java new file mode 100644 index 0000000..d50f7b1 --- /dev/null +++ b/TravelPost/src/com/TwentyCodes/android/TravelPost/SocialSites/FacebookActivity.java @@ -0,0 +1,98 @@ +package com.TwentyCodes.android.TravelPost.SocialSites; + +import com.TwentyCodes.android.TravelPost.R; +import com.TwentyCodes.android.TravelPost.Debug.Debug; +import com.facebook.android.DialogError; +import com.facebook.android.Facebook.DialogListener; +import com.facebook.android.FacebookError; + +import android.app.Activity; +import android.app.Dialog; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.util.Log; +import android.widget.Toast; + +public class FacebookActivity extends Activity { + + private static final String AUTHORIZED = "authorized"; //key for shared prefs showing how many social sites are added + private static final String FACEBOOK = "Facebook"; //the facebook shared pref + private static final String TAG = "FacebookActivity"; + private static final String SETTINGS = "settings"; //Shared Prefs name + private static SharedPreferences mSettingsPrefs; + private static SharedPreferences mFacebookPrefs; + private static Facebook mFb; + + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + this.setContentView(R.layout.facebookactivity); + + mSettingsPrefs = this.getSharedPreferences(SETTINGS, 0); + mFacebookPrefs = this.getSharedPreferences(FACEBOOK, 0); + + mFb = new Facebook(this); //NOTE: facebook auth creates a dialog with this context. If you pass the application context the dialog will crash #fixitgoogle + if (this.getSharedPreferences(FACEBOOK, 0).getBoolean(AUTHORIZED, false)) { + Toast.makeText(this, this.getString(R.string.facebook_already_authorized), Toast.LENGTH_LONG); + } else { + mFb.authorize(new LoginDialogListener()); + } + } + + public void onComplete() { + mFb = null; + mFacebookPrefs = null; + mSettingsPrefs = null; + this.finishActivity(RESULT_OK); + } + + public void onDestroy() { + mFb = null; + mFacebookPrefs = null; + mSettingsPrefs = null; + super.onDestroy(); + } + + /** + * Handles facebook login callbacks + * @author warren + * + */ + + protected final class LoginDialogListener implements DialogListener { + public void onComplete(Bundle values, Dialog dialog) { + FacebookEvents.onLoginSuccess(); + if (Debug.LOGGING) + Log.i(TAG, "LoginDialogListener.onComplete.login success"); + + String authorized = FacebookActivity.AUTHORIZED; + SharedPreferences prefs = FacebookActivity.mSettingsPrefs; + SharedPreferences fbPrefs = FacebookActivity.mFacebookPrefs; + + if (FacebookActivity.mFb.isSessionValid()) { + fbPrefs.edit().putBoolean(authorized, true).commit(); + int auths = prefs.getInt(authorized, 0); + prefs.edit().putInt(authorized, auths + 1).commit(); + } + FacebookActivity fa = new FacebookActivity(); + fa.onComplete(); + } + + public void onFacebookError(FacebookError error) { + FacebookEvents.onLoginError(error.getMessage()); + if (Debug.LOGGING) + Log.e(TAG, "LoginDialogListener.error: " + error.getMessage()); + } + + public void onError(DialogError error) { + FacebookEvents.onLoginError(error.getMessage()); + if (Debug.LOGGING) + Log.e(TAG, "LoginDialogListener.error: " + error.getMessage()); + } + + public void onCancel() { + FacebookEvents.onLoginError("Action Canceled"); + if (Debug.LOGGING) + Log.e(TAG, "LoginDialogListener.login cancelled"); + } + } +} diff --git a/TravelPost/src/com/TwentyCodes/android/TravelPost/TravelPostMain.java b/TravelPost/src/com/TwentyCodes/android/TravelPost/TravelPostMain.java index a8c7fc3..c573f96 100644 --- a/TravelPost/src/com/TwentyCodes/android/TravelPost/TravelPostMain.java +++ b/TravelPost/src/com/TwentyCodes/android/TravelPost/TravelPostMain.java @@ -1,17 +1,9 @@ package com.TwentyCodes.android.TravelPost; -import com.TwentyCodes.android.TravelPost.Debug.Debug; -import com.TwentyCodes.android.TravelPost.SocialSites.Facebook; -import com.TwentyCodes.android.TravelPost.SocialSites.FacebookEvents; -import com.TwentyCodes.android.exception.ExceptionHandler; -import com.facebook.android.DialogError; -import com.facebook.android.FacebookError; -import com.facebook.android.Facebook.DialogListener; - import android.app.AlertDialog; -import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; +import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.Preference; @@ -19,7 +11,9 @@ import android.preference.Preference.OnPreferenceClickListener; import android.preference.PreferenceActivity; import android.preference.PreferenceCategory; import android.util.Log; -import android.widget.Toast; + +import com.TwentyCodes.android.TravelPost.Debug.Debug; +import com.TwentyCodes.android.exception.ExceptionHandler; public class TravelPostMain extends PreferenceActivity implements OnPreferenceClickListener { @@ -30,9 +24,7 @@ public class TravelPostMain extends PreferenceActivity implements OnPreferenceCl private static final String TAG = "TravelPostMain"; private static PreferenceCategory mSocialSites; - private static SharedPreferences mPrefs; private static SharedPreferences mFacebookPrefs; - private static Facebook mFb; private static Context mAppCtx; @@ -60,8 +52,7 @@ public class TravelPostMain extends PreferenceActivity implements OnPreferenceCl this.getPreferenceManager().setSharedPreferencesName(SETTINGS); this.addPreferencesFromResource(R.xml.travelpostmain); - mFb = new Facebook(this); //it seems dialogs crash when handed an application context. need to use this - mPrefs = this.getSharedPreferences(SETTINGS, 0); + this.getSharedPreferences(SETTINGS, 0); mFacebookPrefs = this.getSharedPreferences(FACEBOOK, 0); mSocialSites = (PreferenceCategory) this.findPreference("socialsites"); this.findPreference("add_social_site").setOnPreferenceClickListener(this); @@ -125,11 +116,8 @@ public class TravelPostMain extends PreferenceActivity implements OnPreferenceCl Log.i(TAG, "addSocialSite.site" + site); if (site.equals(FACEBOOK)) { - if (this.getSharedPreferences(FACEBOOK, 0).getBoolean(AUTHORIZED, false)) { - Toast.makeText(this, this.getString(R.string.facebook_already_authorized), Toast.LENGTH_LONG); - } else { - mFb.authorize(new LoginDialogListener()); - } + Intent intent = new Intent(this, com.TwentyCodes.android.TravelPost.SocialSites.FacebookActivity.class); + this.startActivityForResult(intent, 0); } else if (site.equals(TWITTER)) { } @@ -139,7 +127,7 @@ public class TravelPostMain extends PreferenceActivity implements OnPreferenceCl public void onStart() { if (Debug.LOGGING) Log.i(TAG, "onStart()"); - initPreferences(); + this.initPreferences(); super.onStart(); } @@ -196,53 +184,12 @@ public class TravelPostMain extends PreferenceActivity implements OnPreferenceCl */ protected void createPreference(int id) { + if (Debug.LOGGING) + Log.i(TAG, "createPreference: " + id); Preference pref = new Preference(mAppCtx); pref.setTitle(mAppCtx.getString(id)); pref.setKey(mAppCtx.getString(id)); mSocialSites.addPreference(pref); pref.setOnPreferenceClickListener(this); } - - /** - * Handles facebook login callbacks - * @author warren - * - */ - - protected final class LoginDialogListener implements DialogListener { - public void onComplete(Bundle values, Dialog dialog) { - FacebookEvents.onLoginSuccess(); - if (Debug.LOGGING) - Log.i(TAG, "LoginDialogListener.onComplete.login success"); - - SharedPreferences prefs = TravelPostMain.mPrefs; - SharedPreferences fbPrefs = TravelPostMain.mFacebookPrefs; - if (TravelPostMain.mFb.isSessionValid()) { - fbPrefs.edit().putBoolean(TravelPostMain.AUTHORIZED, true).commit(); - int auths = prefs.getInt(TravelPostMain.AUTHORIZED, 0); - prefs.edit().putInt(TravelPostMain.AUTHORIZED, auths + 1).commit(); - } - TravelPostMain tp = new TravelPostMain(); - tp.initPreferences(); - } - - public void onFacebookError(FacebookError error) { - FacebookEvents.onLoginError(error.getMessage()); - if (Debug.LOGGING) - Log.e(TAG, "LoginDialogListener.error: " + error.getMessage()); - } - - public void onError(DialogError error) { - FacebookEvents.onLoginError(error.getMessage()); - if (Debug.LOGGING) - Log.e(TAG, "LoginDialogListener.error: " + error.getMessage()); - } - - public void onCancel() { - FacebookEvents.onLoginError("Action Canceled"); - if (Debug.LOGGING) - Log.e(TAG, "LoginDialogListener.login cancelled"); - } - } - } \ No newline at end of file