package me.guillaumin.android.osmtracker.osm; import me.guillaumin.android.osmtracker.OSMTracker; import me.guillaumin.android.osmtracker.R; import me.guillaumin.android.osmtracker.activity.OpenStreetMapUpload; 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.SharedPreferences; import android.content.SharedPreferences.Editor; import android.os.AsyncTask; import android.preference.PreferenceManager; import android.util.Log; /** * <p>Retrieves the OAuth access token and starts the upload.</p> * * <p>Cannot be done directly in the upload activity as network is not * permitted on the UI thread.</p> * */ public class RetrieveAccessTokenTask extends AsyncTask<Void, Void, Void> { private static final String TAG = RetrieveAccessTokenTask.class.getSimpleName(); private final OpenStreetMapUpload activity; private final CommonsHttpOAuthProvider oAuthProvider; private final CommonsHttpOAuthConsumer oAuthConsumer; private final String verifier; private OAuthException oAuthException = null; public RetrieveAccessTokenTask(OpenStreetMapUpload activity, CommonsHttpOAuthProvider oAuthProvider, CommonsHttpOAuthConsumer oAuthConsumer, String verifier) { this.activity = activity; this.oAuthProvider = oAuthProvider; this.oAuthConsumer = oAuthConsumer; this.verifier = verifier; } @Override protected Void doInBackground(Void... params) { try { oAuthProvider.retrieveAccessToken(oAuthConsumer, verifier); // Store token in preferences for future use SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(activity); Editor editor = prefs.edit(); editor.putString(OSMTracker.Preferences.KEY_OSM_OAUTH_TOKEN, oAuthConsumer.getToken()); editor.putString(OSMTracker.Preferences.KEY_OSM_OAUTH_SECRET, oAuthConsumer.getTokenSecret()); editor.commit(); } catch (OAuthException oe) { Log.e(TAG, "Could not retrieve access token", oe); oAuthException = oe; cancel(false); } return null; } @Override protected void onCancelled() { DialogUtils.showErrorDialog(activity, activity.getResources().getString(R.string.osm_upload_oauth_failed) + ": " + oAuthException); } @Override protected void onPostExecute(Void result) { activity.uploadToOsm(); } }