package com.rec.photoeditor.share; import java.io.File; import java.net.URL; import java.util.Observer; import twitter4j.auth.AccessToken; import twitter4j.conf.Configuration; import twitter4j.conf.ConfigurationBuilder; import twitter4j.media.ImageUpload; import twitter4j.media.ImageUploadFactory; import twitter4j.media.MediaProvider; import com.rec.photoeditor.twitter.TwitterAPICredentials; import com.rec.photoeditor.twitter.TwitterApp; import com.rec.photoeditor.twitter.TwitterApp.TwitterDialogListener; import com.rec.photoeditor.twitter.TwitterSession; import android.content.Context; import android.os.AsyncTask; import android.os.Handler; import android.os.Message; import android.util.Log; import android.widget.Toast; public class TwitterShare extends RECEditorShare { private static final String TAG = "Photo Editor"; private Context context; String pathToImage; String message; TwitterApp twitterApp; public TwitterShare(Context _context, Observer _observer) { super(_context, _observer); context = _context; twitterApp = new TwitterApp(context, TwitterAPICredentials.twitter_consumer_key, TwitterAPICredentials.twitter_secret_key); } public void setTwitterAppListner(TwitterDialogListener listner) { } public void uploadImage(String _pathToImage, String _comment) { pathToImage = _pathToImage; message = _comment; new ImageSender().send(); } public TwitterApp getTwitterApp() { return twitterApp; } private class ImageSender extends AsyncTask<URL, Integer, Long> { private String url; protected void onPreExecute() { notifyObservers(new ShareMessages( ShareMessages.TWITTER_IMAGE_IS_SENDING, "")); } protected Long doInBackground(URL... urls) { long result = 0; TwitterSession twitterSession = new TwitterSession(context); AccessToken accessToken = twitterSession.getAccessToken(); Configuration conf = new ConfigurationBuilder() .setOAuthConsumerKey( TwitterAPICredentials.twitter_consumer_key) .setOAuthConsumerSecret( TwitterAPICredentials.twitter_secret_key) .setOAuthAccessToken(accessToken.getToken()) .setOAuthAccessTokenSecret(accessToken.getTokenSecret()) .setMediaProvider("twitpic") .setMediaProviderAPIKey( TwitterAPICredentials.twitpic_api_key).build(); // OAuthAuthorization auth = new OAuthAuthorization (conf); ImageUploadFactory imageUploadFactory = new ImageUploadFactory(conf); ImageUpload upload = imageUploadFactory .getInstance(MediaProvider.TWITPIC); Log.d(TAG, "Start sending image..."); try { url = upload.upload(new File(pathToImage), message); result = 1; postToTwitter(message + "\n" + url); Log.d(TAG, "Image uploaded, Twitpic url is " + url); } catch (Exception e) { Log.e(TAG, "Failed to send image"); finished = true; e.printStackTrace(); } return result; } protected Long send() { long result = 0; TwitterSession twitterSession = new TwitterSession(context); AccessToken accessToken = twitterSession.getAccessToken(); Configuration conf = new ConfigurationBuilder() .setOAuthConsumerKey( TwitterAPICredentials.twitter_consumer_key) .setOAuthConsumerSecret( TwitterAPICredentials.twitter_secret_key) .setOAuthAccessToken(accessToken.getToken()) .setOAuthAccessTokenSecret(accessToken.getTokenSecret()) .setMediaProvider("twitpic") .setMediaProviderAPIKey( TwitterAPICredentials.twitpic_api_key).build(); // OAuthAuthorization auth = new OAuthAuthorization (conf); ImageUploadFactory imageUploadFactory = new ImageUploadFactory(conf); ImageUpload upload = imageUploadFactory .getInstance(MediaProvider.TWITPIC); Log.d(TAG, "Start sending image..."); try { url = upload.upload(new File(pathToImage), message); result = 1; postToTwitter(message + "\n" + url); Log.d(TAG, "Image uploaded, Twitpic url is " + url); } catch (Exception e) { Log.e(TAG, "Failed to send image"); finished = true; e.printStackTrace(); } return result; } protected void onProgressUpdate(Integer... progress) { } protected void onPostExecute(Long result) { String text = (result == 1) ? "Image sent successfully.\n Twitpic url is: " + url : "Failed to send image"; /* * notifyObservers(new ShareMessages(ShareMessages.TWITPIC_STATUS, * text)); */ } } private void postToTwitter(final String message) { int what = 0; try { twitterApp.updateStatus(message); } catch (Exception e) { what = 1; finished = true; } mHandler.sendMessage(mHandler.obtainMessage(what)); } private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { String text = (msg.what == 0) ? "Posted to Twitter" : "Post to Twitter failed"; success = (msg.what == 0) ? true : false; finished = true; notifyObservers(new ShareMessages(ShareMessages.TWITTER_STATUS, text)); } }; public final TwitterDialogListener mTwLoginDialogListener = new TwitterDialogListener() { @Override public void onComplete(String value) { String username = twitterApp.getUsername(); username = (username.equals("")) ? "No Name" : username; notifyObservers(new ShareMessages( ShareMessages.TWITTER_LOGIN_SUCESS, username)); } @Override public void onError(String value) { notifyObservers(new ShareMessages( ShareMessages.TWITTER_LOGIN_FAILED, "")); finished = true; } }; }