package me.guillaumin.android.osmtracker.osm;
import me.guillaumin.android.osmtracker.R;
import me.guillaumin.android.osmtracker.util.DialogUtils;
import oauth.signpost.commonshttp.CommonsHttpOAuthConsumer;
import oauth.signpost.commonshttp.CommonsHttpOAuthProvider;
import oauth.signpost.exception.OAuthException;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.AsyncTask;
import android.util.Log;
/**
* <p>Retrieves the OAuth request token (opens the browser
* for the user to log in if necessary).</p>
*
* <p>Cannot be done directly in the upload activity as network is not
* permitted on the UI thread.</p>
*/
public class RetrieveRequestTokenTask extends AsyncTask<Void, Void, Void> {
private static final String TAG = RetrieveRequestTokenTask.class.getSimpleName();
private final Context context;
private final CommonsHttpOAuthProvider oAuthProvider;
private final CommonsHttpOAuthConsumer oAuthConsumer;
private final String callbackUrl;
private OAuthException oAuthException = null;
private String requestTokenUrl;
public RetrieveRequestTokenTask(Context context,
CommonsHttpOAuthProvider oAuthProvider,
CommonsHttpOAuthConsumer oAuthConsumer, String callbackUrl) {
this.context = context;
this.oAuthProvider = oAuthProvider;
this.oAuthConsumer = oAuthConsumer;
this.callbackUrl = callbackUrl;
}
@Override
protected Void doInBackground(Void... params) {
try {
requestTokenUrl = oAuthProvider.retrieveRequestToken(oAuthConsumer, callbackUrl);
} catch (OAuthException oe) {
Log.e(TAG, "Could not retrieve request token", oe);
oAuthException = oe;
cancel(false);
}
return null;
}
@Override
protected void onCancelled() {
DialogUtils.showErrorDialog(context,
context.getResources().getString(R.string.osm_upload_oauth_failed) + ": " + oAuthException);
}
@Override
protected void onPostExecute(Void result) {
context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(requestTokenUrl)));
}
}