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