/** * */ package com.niveales.library.ui.activity; import oauth.signpost.OAuth; import oauth.signpost.exception.OAuthCommunicationException; import oauth.signpost.exception.OAuthExpectationFailedException; import oauth.signpost.exception.OAuthMessageSignerException; import oauth.signpost.exception.OAuthNotAuthorizedException; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.LinearLayout; import com.niveales.library.ui.NivealesApplication; /** * @author Dmitry Valetin * */ public class TwitterAuthActivity extends Activity { int productId; private WebView webView; Intent data; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Setup UI with webview LinearLayout ll = new LinearLayout(this); webView = new WebView(this); webView.setWebViewClient(new WebViewClient(){ public boolean shouldOverrideUrlLoading(WebView view, String url){ if(url.startsWith(NivealesApplication.TWITTER_CALLBACK_URL)) { new TwitterAuthCallbackAsyncTask().execute(url); return true; } return false; } }); ll.addView(webView); data = getIntent(); productId = data.getIntExtra("productid", 0); setContentView(ll); new TwitterAuthAsyncTask().execute(webView); } public class TwitterAuthAsyncTask extends AsyncTask<WebView, Void, Void> { /* (non-Javadoc) * @see android.os.AsyncTask#doInBackground(Params[]) */ @Override protected Void doInBackground(WebView... pParams) { String authURL; try { authURL = NivealesApplication.provider.retrieveRequestToken( NivealesApplication.consumer, NivealesApplication.TWITTER_CALLBACK_URL); webView.loadUrl(authURL); } catch (OAuthMessageSignerException e) { e.printStackTrace(); data.putExtra("error", e.getMessage()); setResult(Activity.RESULT_CANCELED, data); finish(); } catch (OAuthNotAuthorizedException e) { e.printStackTrace(); data.putExtra("error", e.getMessage()); setResult(Activity.RESULT_CANCELED, data); finish(); } catch (OAuthExpectationFailedException e) { e.printStackTrace(); data.putExtra("error", e.getMessage()); setResult(Activity.RESULT_CANCELED, data); finish(); } catch (OAuthCommunicationException e) { e.printStackTrace(); data.putExtra("error", e.getMessage()); setResult(Activity.RESULT_CANCELED, data); finish(); } return null; } } public class TwitterAuthCallbackAsyncTask extends AsyncTask<String, Void, Void> { /* (non-Javadoc) * @see android.os.AsyncTask#doInBackground(Params[]) */ @Override protected Void doInBackground(String... pArg0) { // TODO Auto-generated method stub String url = pArg0[0]; onTwitterCallback(url); return null; } } public void onTwitterCallback(String url) { Uri uri = Uri.parse(url); if (uri != null && uri.toString().startsWith(NivealesApplication.TWITTER_CALLBACK_URL)) { //We get here after successful twitter login Log.d("OAuthTwitter", uri.toString()); String verifier = uri.getQueryParameter(OAuth.OAUTH_VERIFIER); if(verifier == null) { // user cancelled twitter auth setResult(Activity.RESULT_CANCELED, data); finish(); return; } Log.d("OAuthTwitter", verifier); try { NivealesApplication.provider.retrieveAccessToken(NivealesApplication.consumer, verifier); NivealesApplication.ACCESS_KEY = NivealesApplication.consumer.getToken(); NivealesApplication.ACCESS_SECRET = NivealesApplication.consumer.getTokenSecret(); setResult(Activity.RESULT_OK, data); finish(); } catch (OAuthMessageSignerException e) { e.printStackTrace(); data.putExtra("error", e.getMessage()); setResult(Activity.RESULT_CANCELED, data); finish(); } catch (OAuthNotAuthorizedException e) { e.printStackTrace(); data.putExtra("error", e.getMessage()); setResult(Activity.RESULT_CANCELED, data); finish(); } catch (OAuthExpectationFailedException e) { e.printStackTrace(); data.putExtra("error", e.getMessage()); setResult(Activity.RESULT_CANCELED, data); finish(); } catch (OAuthCommunicationException e) { e.printStackTrace(); data.putExtra("error", e.getMessage()); setResult(Activity.RESULT_CANCELED, data); finish(); } catch (Exception e) { data.putExtra("error", e.getMessage()); setResult(Activity.RESULT_CANCELED, data); finish(); } } } }