Android Open Source - airprobe Twitter Manager






From Project

Back to project page airprobe.

License

The source code is released under:

GNU General Public License

If you think the Android project airprobe listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/**
 * AirProbe/*from  w  w  w  .j a v a  2 s.  co m*/
 * Air quality application for Android, developed as part of 
 * EveryAware project (<http://www.everyaware.eu>).
 *
 * Copyright (C) 2014 CSP Innovazione nelle ICT. All rights reserved.
 * 
 * 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 version 3 of the License, or
 * (at your option) any later version.
 * 
 * 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, see <http://www.gnu.org/licenses/>.
 * 
 * For any inquiry please write to <devel@csp.it>
 * 
 * CONTRIBUTORS
 * 
 * This program was made with the contribution of:
 *   Fabio Saracino <fabio.saracino@csp.it>
 *   Patrick Facco <patrick.facco@csp.it>
 * 
 * 
 * SOURCE CODE
 * 
 *  The source code of this program is available at
 *  <https://github.com/CSPICT/airprobe>
 */

package org.csp.everyaware.internet;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.csp.everyaware.Constants;
import org.csp.everyaware.R;
import org.csp.everyaware.db.AnnotatedRecord;
import org.csp.everyaware.db.Record;
import org.csp.everyaware.facebooksdk.Facebook;
import org.csp.everyaware.tabactivities.Map;

import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.auth.AccessToken;
import twitter4j.auth.RequestToken;
import twitter4j.conf.Configuration;
import twitter4j.conf.ConfigurationBuilder;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.AsyncTask;
import android.os.Handler;
import android.util.Log;
import android.webkit.WebView;
import android.widget.Toast;


/* DATA OBTAINED DURING APP REGISTRATION ON TWITTER
 * 
  Consumer key   OOvAO63hbxDRnc9wiG5w
  Consumer secret   dNFbQk6HaMAAON36Mg6tKn4RufsehZbj4OuhozyswY
  Request token URL   https://api.twitter.com/oauth/request_token
  Authorize URL   https://api.twitter.com/oauth/authorize
  Access token URL   https://api.twitter.com/oauth/access_token
  Callback URL   http://www.everyaware.eu/
  
  Access token   552769274-ljMnrJFjpiD5Pygvh7pFJU06WQUPNEo2UkMoBgHQ
  Access token secret   fiGzcndltiOFUEpm1CU4Ox24bz3jk1iW3ojaPDgP3Sw
  Access level   Read and write  
*/

public class TwitterManager 
{
  private static TwitterManager mTwMan;
  private Activity mActivity;
    private Twitter mTwitter;
    
    //tokens
    private RequestToken mRequestToken;
    
  public static TwitterManager getInstance(Activity activity)
  {
    if(mTwMan == null)
      mTwMan = new TwitterManager(activity);
    return mTwMan;
  }
  
  private TwitterManager(Activity activity)
  {
    mActivity = activity;
  }
  
  //call this only if internet connection is available
  public void initTwitter()
  {
    ConfigurationBuilder confbuilder = new ConfigurationBuilder();
        Configuration conf = confbuilder
            .setOAuthConsumerKey(Constants.CONSUMER_KEY)
            .setOAuthConsumerSecret(Constants.CONSUMER_SECRET)
            .build();
        mTwitter = new TwitterFactory(conf).getInstance();
        mTwitter.setOAuthAccessToken(null);
        
        //try 
        //{
          new OuthRequestTokenTask().execute(Constants.CALLBACK_URL);
          /*
            mRequestToken = mTwitter.getOAuthRequestToken(Constants.CALLBACK_URL);
            Intent intent = new Intent(mActivity, TwitterLogin.class);
            intent.putExtra(Constants.IEXTRA_AUTH_URL, mRequestToken.getAuthorizationURL());
            mActivity.startActivityForResult(intent, 0);*/
        /*
    } 
        catch (TwitterException e) 
        {
            e.printStackTrace();
        }*/
  }
  
  public boolean authoriseNewUser(String oauthVerifier) 
  {
        AccessToken accessToken = null;
        
        try 
        {            
            accessToken = mTwitter.getOAuthAccessToken(mRequestToken, oauthVerifier);
            SharedPreferences pref = mActivity.getSharedPreferences(Constants.PREF_NAME, Activity.MODE_PRIVATE);
            SharedPreferences.Editor editor = pref.edit();
            editor.putString(Constants.PREF_KEY_ACCESS_TOKEN, accessToken.getToken());
            editor.putString(Constants.PREF_KEY_ACCESS_TOKEN_SECRET, accessToken.getTokenSecret());
            editor.commit();
                              
            Toast.makeText(mActivity, "authorized", Toast.LENGTH_SHORT).show();
            return true;
        } 
        catch(TwitterException e) 
        {
            e.printStackTrace();
            return false;

        }
  }
  
  public void shutdown()
  {
        SharedPreferences pref = mActivity.getSharedPreferences(Constants.PREF_NAME, Activity.MODE_PRIVATE);
        SharedPreferences.Editor editor = pref.edit();
        editor.remove(Constants.PREF_KEY_ACCESS_TOKEN);
        editor.remove(Constants.PREF_KEY_ACCESS_TOKEN_SECRET);
        editor.commit();
        
        if (mTwitter != null) 
        {
            mTwitter.shutdown();
        }
  }
  
  public void postMessage(Record annotatedRecord)
  {
    SharedPreferences pref = mActivity.getApplicationContext().getSharedPreferences(Constants.PREF_NAME, 
        mActivity.getApplicationContext().MODE_PRIVATE);
        String accessToken = pref.getString(Constants.PREF_KEY_ACCESS_TOKEN, null);
        String accessTokenSecret = pref.getString(Constants.PREF_KEY_ACCESS_TOKEN_SECRET, null);
        if (accessToken == null || accessTokenSecret == null) 
        {
            Toast.makeText(mActivity.getApplicationContext(), "not authorize yet", Toast.LENGTH_SHORT).show();
            return;
        }
        mTwitter.setOAuthAccessToken(new AccessToken(accessToken, accessTokenSecret));

        String status = composeMessage(annotatedRecord);
        
        //do twitter update status in async task
        new PostMessageTask().execute(status);
  }
  
  //compose string message that will be posted on wall
  private String composeMessage(Record record)
  {    
    String message;
    String avgPoll = "";
    
    try
    {
      avgPoll = String.valueOf(record.calcAvgPoll());
    }
    catch(Exception e)
    {}
    
    if(avgPoll.length()-1 - avgPoll.lastIndexOf(".") > 2);
      avgPoll = avgPoll.substring(0, avgPoll.lastIndexOf(".")+4);
    
    //add user annotation to msg
    message = "\"" +record.mUserData1+ "\"\n";
    
    //average pollution
    message += "AQI: " +record.calcAvgPoll()+ "\n";
    
    //add gps coordinates to msg
    if(record.mValues[0] != 0)
      message += "Lat " +record.mValues[0]+"?, Lon "+record.mValues[1]+"?\n";
        
    //format timestamp into date and add to msg
    String dateString = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(new Date(record.mSysTimestamp));  
    message += "Time: " +dateString+ "\n";
    message += "Sent with AirProbe - http://www.everyaware.eu/\n";
    
    if(message.length() > 140)
      message = message.substring(0, 140);
    return message;
  }
  
  private class PostMessageTask extends AsyncTask<String, Integer, Integer>
  {

    @Override
    protected void onPostExecute( Integer result )  
    {
          if(result == 1)
            Toast.makeText(mActivity.getApplicationContext(), "Twitter status updated", Toast.LENGTH_LONG).show();
    }

    @Override
    protected Integer doInBackground(String... params) 
    {
      try 
          {
        mTwitter.updateStatus(params[0]);
      } 
          catch (TwitterException e) 
          {
        e.printStackTrace();
      }
      return 1;
    }
  }
  
  private class OuthRequestTokenTask extends AsyncTask<String, Void, Void>
  {
    @Override
    protected Void doInBackground(String... url) 
    {
      try
      {
        mRequestToken = mTwitter.getOAuthRequestToken(Constants.CALLBACK_URL);
      }
      catch(TwitterException e)
      {
        e.printStackTrace();
      }
      
      return null;
    }
    
    @Override
    protected void onPostExecute(Void result )  
    {
      Intent intent = new Intent(mActivity, TwitterLogin.class);
          intent.putExtra(Constants.IEXTRA_AUTH_URL, mRequestToken.getAuthorizationURL());
          mActivity.startActivityForResult(intent, 0);          
    }
  }
}




Java Source Code List

android.UnusedStub.java
org.csp.everyaware.ColorHelper.java
org.csp.everyaware.Constants.java
org.csp.everyaware.Credits.java
org.csp.everyaware.ExtendedLatLng.java
org.csp.everyaware.Installation.java
org.csp.everyaware.KmlParser.java
org.csp.everyaware.ManageAccount.java
org.csp.everyaware.Options.java
org.csp.everyaware.Start.java
org.csp.everyaware.Utils.java
org.csp.everyaware.bluetooth.BluetoothBroadcastReceiver.java
org.csp.everyaware.bluetooth.BluetoothHistoryManager.java
org.csp.everyaware.bluetooth.BluetoothManager.java
org.csp.everyaware.bluetooth.BluetoothObject.java
org.csp.everyaware.db.AnnotatedRecord.java
org.csp.everyaware.db.DbManager.java
org.csp.everyaware.db.MapCluster.java
org.csp.everyaware.db.MarkerRecord.java
org.csp.everyaware.db.Record.java
org.csp.everyaware.db.SemanticSessionDetails.java
org.csp.everyaware.db.Track.java
org.csp.everyaware.facebooksdk.AsyncFacebookRunner.java
org.csp.everyaware.facebooksdk.DialogError.java
org.csp.everyaware.facebooksdk.FacebookError.java
org.csp.everyaware.facebooksdk.Facebook.java
org.csp.everyaware.facebooksdk.FbDialog.java
org.csp.everyaware.facebooksdk.Util.java
org.csp.everyaware.fragments.FragmentWizardStep0.java
org.csp.everyaware.fragments.FragmentWizardStep1.java
org.csp.everyaware.fragments.FragmentWizardStep2.java
org.csp.everyaware.gps.GpsTrackingService.java
org.csp.everyaware.internet.FacebookManager.java
org.csp.everyaware.internet.StoreAndForwardService.java
org.csp.everyaware.internet.TwitterLogin.java
org.csp.everyaware.internet.TwitterManager.java
org.csp.everyaware.offline.Graph.java
org.csp.everyaware.offline.Map.java
org.csp.everyaware.offline.MyTracks.java
org.csp.everyaware.offline.Tabs.java
org.csp.everyaware.tabactivities.Graph.java
org.csp.everyaware.tabactivities.Map.java
org.csp.everyaware.tabactivities.Monitor.java
org.csp.everyaware.tabactivities.Tabs.java