summaryrefslogtreecommitdiff
path: root/src/de/danoeh/antennapod/asynctask/FlattrClickWorker.java
blob: 975aa5efe2c3413c230b849a60f3d07967018791 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
package de.danoeh.antennapod.asynctask;

import org.shredzone.flattr4j.exception.FlattrException;

import android.annotation.SuppressLint;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.Toast;
import de.danoeh.antennapod.AppConfig;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.util.flattr.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 ProgressDialog progDialog;

	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");
		if (url.equals(FlattrUtils.APP_URL)) {
			FlattrUtils.showNoTokenDialog(context, FlattrUtils.APP_LINK);
		} else {
			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();
	}

	protected void onSetupProgDialog() {
		progDialog = new ProgressDialog(context);
		progDialog.setMessage(context.getString(R.string.flattring_label));
		progDialog.setIndeterminate(true);
		progDialog.setCancelable(false);
		progDialog.show();
	}

	@Override
	protected void onPostExecute(Void result) {
		if (AppConfig.DEBUG) Log.d(TAG, "Exit code was " + exitCode);
		if (progDialog != null) {
			progDialog.dismiss();
		}
		switch (exitCode) {
		case NO_TOKEN:
			onNoAccessToken();
			break;
		case FLATTR_ERROR:
			onFlattrError();
			break;
		case SUCCESS:
			onSuccess();
			break;
		}
	}

	@Override
	protected void onPreExecute() {
		onSetupProgDialog();
	}

	@Override
	protected Void doInBackground(Void... params) {
		if (AppConfig.DEBUG) Log.d(TAG, "Starting background work");
		if (FlattrUtils.hasToken()) {
			try {
				FlattrUtils.clickUrl(context, url);
			} catch (FlattrException e) {
				e.printStackTrace();
				exitCode = FLATTR_ERROR;
				errorMsg = e.getMessage();
			}
		} else {
			exitCode = NO_TOKEN;
		}
		return null;
	}

	@SuppressLint("NewApi")
	public void executeAsync() {
		FlattrUtils.hasToken();
		if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.GINGERBREAD_MR1) {
			executeOnExecutor(THREAD_POOL_EXECUTOR);
		} else {
			execute();
		}
	}

}