/src/se/istenes/twitter/utils/TwitterAuth.java

https://bitbucket.org/nistenes/twooter-app · Java · 116 lines · 77 code · 16 blank · 23 comment · 2 complexity · 2388f2fece5b294e7f68ac3baa101c85 MD5 · raw file

  1. package se.istenes.twitter.utils;
  2. import java.io.InputStream;
  3. import org.brickred.socialauth.AuthProvider;
  4. import org.brickred.socialauth.SocialAuthConfig;
  5. import org.brickred.socialauth.android.DialogListener;
  6. import org.brickred.socialauth.android.SocialAuthAdapter;
  7. import org.brickred.socialauth.android.SocialAuthAdapter.Provider;
  8. import org.brickred.socialauth.android.SocialAuthError;
  9. import twitter4j.Twitter;
  10. import twitter4j.TwitterFactory;
  11. import twitter4j.conf.ConfigurationBuilder;
  12. import android.content.Context;
  13. import android.content.SharedPreferences;
  14. import android.os.Bundle;
  15. public class TwitterAuth {
  16. private Context ctx;
  17. private SocialAuthAdapter adapter;
  18. private static TwitterFactory factory;
  19. public final String AUTH_SETTINGS = "auth_settings";
  20. /***
  21. * Creates a dialog for the user to authenticate
  22. * @param ctx The current activity context
  23. * @param tal A listener to check for successes or fails
  24. */
  25. public TwitterAuth(final Context ctx, final TwitterAuthListener tal) {
  26. //Store Context to access shared preferences later
  27. this.ctx = ctx;
  28. final SharedPreferences preferences = ctx.getSharedPreferences(AUTH_SETTINGS, Context.MODE_PRIVATE);
  29. adapter = new SocialAuthAdapter(new DialogListener() {
  30. @Override
  31. public void onError(SocialAuthError arg0) {
  32. preferences.edit().clear().commit();
  33. tal.Fail(arg0.getInnerException());
  34. }
  35. @Override
  36. public void onComplete(Bundle arg0) {
  37. AuthProvider provider = adapter.getCurrentProvider();
  38. SocialAuthConfig config = new SocialAuthConfig();
  39. InputStream input;
  40. try {
  41. //piggybacks the consumer properties from the oauth_consumer file
  42. input = ctx.getAssets().open("oauth_consumer.properties");
  43. config.load(input);
  44. } catch (Exception e) {
  45. e.printStackTrace();
  46. }
  47. //Sets up the preferences so we don't need to authenticate again
  48. preferences.edit()
  49. .putString("consumer_key", config.getApplicationProperties().getProperty("twitter.com.consumer_key"))
  50. .putString("consumer_secret", config.getApplicationProperties().getProperty("twitter.com.consumer_secret"))
  51. .putString("access_key", provider.getAccessGrant().getKey())
  52. .putString("access_secret", provider.getAccessGrant().getSecret())
  53. .commit();
  54. tal.Success(setUpTwitter());
  55. }
  56. @Override
  57. public void onCancel() {
  58. preferences.edit().clear().commit();
  59. tal.Fail(new Exception("user aborted"));
  60. }
  61. });
  62. if(!preferences.contains("consumer_key")||
  63. !preferences.contains("consumer_secret")||
  64. !preferences.contains("access_key")||
  65. !preferences.contains("access_secret")) {
  66. //Bring up the authorization dialog
  67. adapter.authorize(ctx, Provider.TWITTER);
  68. } else {
  69. tal.Success(setUpTwitter());
  70. }
  71. }
  72. /***
  73. * Sets up twitter4j with all the required parameters such as
  74. * consumer and accesstokens. Also stores them privatly to the
  75. * shared preferences.
  76. * @return a new instance of twitter if successful.
  77. * <br />NOTE: This instance is synchronous and must be used with AsyncTask
  78. */
  79. private Twitter setUpTwitter() {
  80. //loads the keys and secrets
  81. SharedPreferences settings = ctx.getSharedPreferences(AUTH_SETTINGS, Context.MODE_PRIVATE);
  82. //Sets up twitter4j, set debug to false when deploying application
  83. ConfigurationBuilder cb = new ConfigurationBuilder();
  84. cb.setDebugEnabled(true)
  85. .setOAuthConsumerKey(settings.getString("consumer_key", ""))
  86. .setOAuthConsumerSecret(settings.getString("consumer_secret", ""))
  87. .setOAuthAccessToken(settings.getString("access_key", ""))
  88. .setOAuthAccessTokenSecret(settings.getString("access_secret", ""));
  89. //builds a new factory based on the configurations, this is used to create a twitter instance
  90. factory = new TwitterFactory(cb.build());
  91. return factory.getInstance();
  92. }
  93. /***
  94. * Get's the twitter "singleton"
  95. * @return Authorized twitter instance
  96. */
  97. public static Twitter getInstance() {
  98. return factory.getInstance();
  99. }
  100. }