summaryrefslogtreecommitdiff
path: root/src/de/danoeh/antennapod/util/ConnectionTester.java
blob: 2ca9b3218f31185aa72253210d243d236519a484 (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
package de.danoeh.antennapod.util;

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

import de.danoeh.antennapod.AppConfig;

import android.content.Context;
import android.os.Handler;
import android.util.Log;

/** Tests a connection before downloading something. */
public class ConnectionTester implements Runnable {
	private static final String TAG = "ConnectionTester";
	private String strUrl;
	private Callback callback;
	private int reason;

	private Handler handler;

	public ConnectionTester(String url, Callback callback) {
		super();
		this.strUrl = url;
		this.callback = callback;
		this.handler = new Handler();
	}

	@Override
	public void run() {
		if (AppConfig.DEBUG)
			Log.d(TAG, "Testing connection");
		try {
			URL url = new URL(strUrl);
			HttpURLConnection con = (HttpURLConnection) url.openConnection();
			con.connect();
			handler.post(new Runnable() {
				@Override
				public void run() {
					callback.onConnectionSuccessful();
				}	
			});			if (AppConfig.DEBUG)
				Log.d(TAG, "Connection seems to work");
		} catch (MalformedURLException e) {
			e.printStackTrace();
			reason = DownloadError.ERROR_CONNECTION_ERROR;
			if (AppConfig.DEBUG)
				Log.d(TAG, "Connection failed");
			handler.post(new Runnable() {
				@Override
				public void run() {
					callback.onConnectionFailure(reason);
				}
			});
		} catch (IOException e) {
			e.printStackTrace();
			reason = DownloadError.ERROR_CONNECTION_ERROR;
			if (AppConfig.DEBUG)
				Log.d(TAG, "Connection failed");
			handler.post(new Runnable() {
				@Override
				public void run() {
					callback.onConnectionFailure(reason);
				}
			});
		}
	}

	public static abstract class Callback {
		public abstract void onConnectionSuccessful();

		public abstract void onConnectionFailure(int reason);
	}

	public int getReason() {
		return reason;
	}

}