diff options
Diffstat (limited to 'src/de')
4 files changed, 102 insertions, 24 deletions
diff --git a/src/de/danoeh/antennapod/asynctask/FlattrClickWorker.java b/src/de/danoeh/antennapod/asynctask/FlattrClickWorker.java new file mode 100644 index 000000000..339bf18d8 --- /dev/null +++ b/src/de/danoeh/antennapod/asynctask/FlattrClickWorker.java @@ -0,0 +1,83 @@ +package de.danoeh.antennapod.asynctask; + +import org.shredzone.flattr4j.exception.FlattrException; +import org.shredzone.flattr4j.oauth.AccessToken; + +import android.content.Context; +import android.os.AsyncTask; +import android.util.Log; +import android.widget.Toast; +import de.danoeh.antennapod.R; +import de.danoeh.antennapod.util.FlattrUtils; + +/** Performs a click action in a background thread. */ +public class FlattrClickWorker extends AsyncTask<Void, Void, Void> { + protected static final String TAG = "FlattrClickWorker"; + protected Context context; + protected String url; + protected String errorMsg; + protected int exitCode; + + protected final static int SUCCESS = 0; + protected final static int NO_TOKEN = 1; + protected final static int FLATTR_ERROR = 2; + + public FlattrClickWorker(Context context, String url) { + super(); + this.context = context; + this.url = url; + exitCode = SUCCESS; + errorMsg = ""; + } + + protected void onNoAccessToken() { + Log.w(TAG, "No access token was available"); + FlattrUtils.showNoTokenDialog(context, url); + } + + protected void onFlattrError() { + FlattrUtils.showErrorDialog(context, errorMsg); + } + + protected void onSuccess() { + Toast toast = Toast.makeText(context.getApplicationContext(), + R.string.flattr_click_success, Toast.LENGTH_LONG); + toast.show(); + } + + @Override + protected void onPostExecute(Void result) { + Log.d(TAG, "Exit code was " + exitCode); + switch (exitCode) { + case NO_TOKEN: + onNoAccessToken(); + break; + case FLATTR_ERROR: + onFlattrError(); + break; + case SUCCESS: + onSuccess(); + break; + } + } + + @Override + protected Void doInBackground(Void... params) { + Log.d(TAG, "Starting background work"); + AccessToken token = FlattrUtils.retrieveToken(); + if (token != null) { + try { + FlattrUtils.clickUrl(token, context, url); + } catch (FlattrException e) { + e.printStackTrace(); + exitCode = FLATTR_ERROR; + errorMsg = e.getMessage(); + } + } else { + exitCode = NO_TOKEN; + } + return null; + } + +} + diff --git a/src/de/danoeh/antennapod/util/FeedItemMenuHandler.java b/src/de/danoeh/antennapod/util/FeedItemMenuHandler.java index db99399d6..fad7db30b 100644 --- a/src/de/danoeh/antennapod/util/FeedItemMenuHandler.java +++ b/src/de/danoeh/antennapod/util/FeedItemMenuHandler.java @@ -8,10 +8,11 @@ import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuInflater; import com.actionbarsherlock.view.MenuItem; +import de.danoeh.antennapod.R; +import de.danoeh.antennapod.asynctask.FlattrClickWorker; import de.danoeh.antennapod.feed.FeedItem; import de.danoeh.antennapod.feed.FeedManager; import de.danoeh.antennapod.storage.DownloadRequester; -import de.danoeh.antennapod.R; /** Handles interactions with the FeedItemMenu. */ public class FeedItemMenuHandler { @@ -102,7 +103,7 @@ public class FeedItemMenuHandler { context.startActivity(new Intent(Intent.ACTION_VIEW, uri)); break; case R.id.support_item: - FlattrUtils.clickUrl(context, selectedItem.getPaymentLink()); + new FlattrClickWorker(context, selectedItem.getPaymentLink()).execute(); break; case R.id.share_link_item: ShareUtils.shareFeedItemLink(context, selectedItem); diff --git a/src/de/danoeh/antennapod/util/FeedMenuHandler.java b/src/de/danoeh/antennapod/util/FeedMenuHandler.java index 10afc687c..85bca3e26 100644 --- a/src/de/danoeh/antennapod/util/FeedMenuHandler.java +++ b/src/de/danoeh/antennapod/util/FeedMenuHandler.java @@ -11,6 +11,7 @@ import com.actionbarsherlock.view.MenuInflater; import com.actionbarsherlock.view.MenuItem; import de.danoeh.antennapod.activity.FeedInfoActivity; +import de.danoeh.antennapod.asynctask.FlattrClickWorker; import de.danoeh.antennapod.feed.Feed; import de.danoeh.antennapod.feed.FeedItem; import de.danoeh.antennapod.feed.FeedManager; @@ -68,7 +69,7 @@ public class FeedMenuHandler { context.startActivity(new Intent(Intent.ACTION_VIEW, uri)); break; case R.id.support_item: - FlattrUtils.clickUrl(context, selectedFeed.getPaymentLink()); + new FlattrClickWorker(context, selectedFeed.getPaymentLink()).execute(); break; case R.id.share_link_item: ShareUtils.shareFeedlink(context, selectedFeed); diff --git a/src/de/danoeh/antennapod/util/FlattrUtils.java b/src/de/danoeh/antennapod/util/FlattrUtils.java index b8f1d02bc..ccc9347f3 100644 --- a/src/de/danoeh/antennapod/util/FlattrUtils.java +++ b/src/de/danoeh/antennapod/util/FlattrUtils.java @@ -17,6 +17,7 @@ import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.content.SharedPreferences; import android.net.Uri; +import android.os.AsyncTask; import android.preference.PreferenceManager; import android.util.Log; import android.widget.Toast; @@ -85,22 +86,14 @@ public class FlattrUtils { storeToken(null); } - public static void clickUrl(Context context, String url) { + public static void clickUrl(AccessToken token, Context context, String url) + throws FlattrException { FlattrFactory factory = FlattrFactory.getInstance(); - AccessToken token = retrieveToken(); if (token != null) { FlattrService fs = factory.createFlattrService(retrieveToken()); - try { - fs.click(url); - Toast toast = Toast.makeText(context.getApplicationContext(), - R.string.flattr_click_success, Toast.LENGTH_LONG); - toast.show(); - } catch (FlattrException e) { - e.printStackTrace(); - showErrorDialog(context, e.getMessage()); - } + fs.click(url); } else { - showNoTokenDialog(context, url); + Log.e(TAG, "clickUrl was called with null access token"); } } @@ -116,17 +109,16 @@ public class FlattrUtils { return null; } } - + public static void revokeAccessToken(Context context) { Log.d(TAG, "Revoking access token"); deleteToken(); showRevokeDialog(context); } - - - //------------------------------------------------ DIALOGS - - private static void showRevokeDialog(final Context context) { + + // ------------------------------------------------ DIALOGS + + public static void showRevokeDialog(final Context context) { AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setTitle(R.string.access_revoked_title); builder.setMessage(R.string.access_revoked_info); @@ -140,7 +132,7 @@ public class FlattrUtils { builder.create().show(); } - private static void showNoTokenDialog(final Context context, + public static void showNoTokenDialog(final Context context, final String url) { Log.d(TAG, "Creating showNoTokenDialog"); AlertDialog.Builder builder = new AlertDialog.Builder(context); @@ -170,7 +162,7 @@ public class FlattrUtils { builder.create().show(); } - private static void showForbiddenDialog(final Context context, + public static void showForbiddenDialog(final Context context, final String url) { AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setTitle(R.string.action_forbidden_title); @@ -199,7 +191,7 @@ public class FlattrUtils { builder.create().show(); } - private static void showErrorDialog(final Context context, final String msg) { + public static void showErrorDialog(final Context context, final String msg) { AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setTitle(R.string.error_label); builder.setMessage(msg); @@ -212,4 +204,5 @@ public class FlattrUtils { }); builder.create().show(); } + } |