package com.electronapps.LJPro; import java.util.HashMap; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.scribe.builder.ServiceBuilder; import org.scribe.model.Token; import org.scribe.oauth.OAuthService; import android.app.Activity; import android.app.AlertDialog.Builder; import android.app.AlertDialog; import android.content.ContentValues; import android.content.DialogInterface; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.Window; import android.webkit.WebChromeClient; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.ProgressBar; import android.widget.TextView; public class Authenticate extends Activity { FlickrAPI mFlickr; private OAuthService mPBAuth; public String mFrob; private Token mToken; private WebView mAuthWeb; private ProgressBar mProgress; private TextView mHeader; LJDB mDB; private String mJournalname; private ProgressBar mWebProgress; private String mProvider; protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); Intent intent=getIntent(); mJournalname=intent.getStringExtra("journalname"); setContentView(R.layout.authview); mHeader=(TextView) findViewById(R.id.authheader); mHeader.setText("Authentication"); mProgress=(ProgressBar) findViewById(R.id.status_progress); mWebProgress=(ProgressBar) findViewById(R.id.webprogress); mProgress.setMax(100); mAuthWeb=(WebView) findViewById(R.id.authweb); mAuthWeb.getSettings().setJavaScriptEnabled(true); mAuthWeb.setWebViewClient(new HelloWebViewClient()); final Activity activity=this; mAuthWeb.setWebChromeClient(new WebChromeClient() { public void onProgressChanged(WebView view, int progress) { // Activities and WebViews measure progress with different scales. // The progress meter will automatically disappear when we reach 100% mWebProgress.setProgress(progress * 100); } }); mProvider=intent.getStringExtra("provider"); if (mProvider.equals("Flickr")) { mFlickr=new FlickrAPI(getApplicationContext(),getString(R.string.flickr_key),getString(R.string.flickr_secret)); FlickrTask auth1=new FlickrTask("init"); auth1.execute(); } else if(mProvider.equals("PhotoBucket")){ mPBAuth= new ServiceBuilder() .provider(PhotoBucketAPI.class) .apiKey(getString(R.string.photobucket_key)) .apiSecret(getString(R.string.photobucket_secret)) .build(); PBTask auth1=new PBTask("init"); auth1.execute(); } } public void handleClick(View v){ int id=v.getId(); if (id==R.id.done) { AlertDialog.Builder builder=new AlertDialog.Builder(Authenticate.this); builder.setTitle("Confirm sign in"); builder.setMessage("Have you signed into Flickr and authorized access?"); builder.setPositiveButton("Yes", new DialogInterface.OnClickListener(){ public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); mProgress.setProgress(66); mHeader.setText("Fetching Token"); if (mProvider.equals("Flickr")) { FlickrTask auth2=new FlickrTask("complete"); auth2.execute(); } else { PBTask auth2=new PBTask("complete"); auth2.execute(); } } }); builder.setNegativeButton("No",new DialogInterface.OnClickListener(){ public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); builder.create().show(); } else if (id==R.id.cancel){ } } private class FlickrTask extends AsyncTask<Void,Void,Object>{ private String mMode; public FlickrTask(String mode){ mMode=mode; } @Override protected Object doInBackground(Void... params) { Object result=null; if (mMode.equals("init")) { result=mFlickr.initAuth(); } else if (mMode.equals("complete")) { mDB=LJDB.getDB(Authenticate.this); mDB.open(); result=mFlickr.finishAuthentication(mFrob); } return result; } @SuppressWarnings("unchecked") @Override protected void onPostExecute(Object result) { if (mMode.equals("init")) { HashMap<String,String> data=(HashMap<String,String>) result; mFrob=data.get("frob"); String url=data.get("url"); mHeader.setText("Grant Permissions"); mProgress.setProgress(33); mAuthWeb.loadUrl(url); } else if (mMode.equals("complete")) { mProgress.setProgress(90); ContentValues account=(ContentValues) result; account.put("accountname", mJournalname); String token=(String) account.get("auth_token"); Boolean success=mDB.insertPhotoAccount(account); Intent intent=new Intent(); intent.putExtra("token",token); setResult(RESULT_OK,intent); finish(); } } } private class PBTask extends AsyncTask<Void,Void,Token>{ private String mMode; private Pattern subdRE=Pattern.compile("(?<=subdomain=)[^&]*"); private Pattern unameRE=Pattern.compile("(?<=username=)[^&]*"); public PBTask(String mode){ mMode=mode; } @Override protected Token doInBackground(Void... params) { if (mMode.equals("init")) { mToken=mPBAuth.getRequestToken(); } else if (mMode.equals("complete")) { mDB=LJDB.getDB(Authenticate.this); mDB.open(); HashMap<String,Object> result=mPBAuth.getAccessToken(mToken,null); mToken=(Token) result.get("token"); mProgress.setProgress(90); ContentValues account=new ContentValues(); account.put("accountname", mJournalname); account.put("auth_token", mToken.getToken()); account.put("auth_secret",mToken.getSecret()); account.put("provider", "PhotoBucket"); String response=result.get("response").toString(); Matcher umatcher=unameRE.matcher(response); Matcher dmatcher=subdRE.matcher(response); if (umatcher.find()){ account.put("photo_account",umatcher.group()); } if (dmatcher.find()){ account.put("photo_accountid", dmatcher.group()); } Boolean success=mDB.insertPhotoAccount(account); Intent intent=new Intent(); intent.putExtra("token",mToken.getToken()); intent.putExtra("secret", mToken.getSecret()); setResult(RESULT_OK,intent); //oauth_token=53.821187_1299568533&oauth_token_secret=f9981b614d1e8ef445a33243314cdcf2a1ad0144&username=jfelectron&subdomain=api861.photobucket.com&homeurl=http%3A%2F%2Fs861.photobucket.com%2Falbums%2Fab180%2Fjfelectron%2F Log.d("PBAuth",response); } return mToken; } @SuppressWarnings("unchecked") @Override protected void onPostExecute(Token token) { if (mMode.equals("init")) { String url=mPBAuth.getAuthorizationUrl(token); mHeader.setText("Grant Permissions"); mProgress.setProgress(33); mAuthWeb.loadUrl(url); } else if (mMode.equals("complete")) { mProgress.setProgress(90); //String accessToken=token.getToken(); //String secret=token.getSecret(); finish(); /*ContentValues account=new ContentValues(); account.put("accountname", mJournalname); String token=(String) account.get("auth_token"); Boolean success=mDB.insertPhotoAccount(account); Intent intent=new Intent(); intent.putExtra("token",token); setResult(RESULT_OK,intent); finish();*/ } } } private class HelloWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } } }