org.umit.icm.mobile.social.TwitterUpdate.java Source code

Java tutorial

Introduction

Here is the source code for org.umit.icm.mobile.social.TwitterUpdate.java

Source

/**
 * Copyright (C) 2011 Adriano Monteiro Marques
 *
 * Author:  Zubair Nabi <zn.zubairnabi@gmail.com>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either Test 2 of the License, or
 * (at your option) any later Test.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 * USA
 */

package org.umit.icm.mobile.social;

import java.io.IOException;

import org.apache.http.HttpException;
import org.umit.icm.mobile.process.Constants;
import org.umit.icm.mobile.process.Globals;
import org.umit.icm.mobile.utils.SDCardReadWrite;

import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.auth.AccessToken;
import twitter4j.auth.RequestToken;

/**
 * TwitterUpdate class that registers with Twitter and sends Tweets.
 * 
 */
public class TwitterUpdate {
    private Twitter twitter;
    private RequestToken requestToken;
    private AccessToken accessToken;

    /**
     * Default constructor which initiates the Twitter object and adds keys. 
     * 
     * 
         
     @see TwitterFactory
     *
         
     @see Twitter
     */
    public TwitterUpdate() {
        twitter = new TwitterFactory().getInstance();
        twitter.setOAuthConsumer(Constants.TWITTER_CONSUMER_KEY, Constants.TWITTER_CONSUMER_KEY_SECRET);
        accessToken = null;
        requestToken = null;
    }

    /**
     * Resets the core objects. 
     * 
     * 
         
     @see TwitterFactory
     *
         
     @see Twitter
     */
    public synchronized void reset() {
        twitter = new TwitterFactory().getInstance();
        twitter.setOAuthConsumer(Constants.TWITTER_CONSUMER_KEY, Constants.TWITTER_CONSUMER_KEY_SECRET);
        accessToken = null;
        requestToken = null;
    }

    public synchronized void setAccessToken(AccessToken accessToken) {
        this.accessToken = accessToken;
    }

    /**
     * Sends a Tweet. 
     * 
     * 
         
     @param   tweet    An object of type String which contains the Tweet.
     *
         
     @see Twitter
     */
    public synchronized void sendTweet(String tweet) throws TwitterException, IOException, RuntimeException {
        if (accessToken != null && Globals.runtimeParameters.getTwitter().equals("On")) {
            twitter.setOAuthAccessToken(accessToken);
            twitter.updateStatus(tweet);
        }
    }

    /**
     * Requests a new Token. 
     * 
     * 
         
     @param context   An object of type {@link Context}
     *
         
     @see Intent
     */
    public synchronized void requestToken(Context context) throws TwitterException, IOException, HttpException {
        requestToken = twitter.getOAuthRequestToken();
        Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(requestToken.getAuthorizationURL()));
        context.startActivity(browserIntent);
    }

    /**
     * Takes as input a pin and gets the associated Token and writes it to disk. 
     * 
     * 
         
     @param   pin      Object of type String which is the Twitter pin.
     *
         
     @see Twitter
     *
     @see SDCardReadWrite
     */
    public synchronized void enterPin(String pin) throws TwitterException, IOException, RuntimeException {
        if (requestToken != null) {
            accessToken = twitter.getOAuthAccessToken(requestToken, pin);
            SDCardReadWrite.writeAccessToken(Constants.KEYS_DIR, accessToken);
        }
    }

    /**
     * Sends a Tweet using the Notification Service. 
     * 
     * 
         
     @param   message      An object of type String which represents the Tweet.
     *
         
     @see Intent 
     */
    public synchronized void sendTweet(String message, Context context) {
        Bundle bundle = new Bundle();
        bundle.putString("twitter", message);
        Intent intent = new Intent("org.umit.icm.mobile.TWITTER_SERVICE");
        intent.putExtras(bundle);
        context.sendBroadcast(intent);
    }

}