1 |
|
|
2 |
|
|
3 |
|
|
4 |
|
|
5 |
|
|
6 |
|
|
7 |
|
|
8 |
|
|
9 |
|
|
10 |
|
|
11 |
|
|
12 |
|
|
13 |
|
|
14 |
|
|
15 |
|
|
16 |
|
|
17 |
|
|
18 |
|
|
19 |
|
package net.sourceforge.subsonic.androidapp.util; |
20 |
|
|
21 |
|
import java.util.concurrent.atomic.AtomicBoolean; |
22 |
|
import java.util.concurrent.atomic.AtomicReference; |
23 |
|
|
24 |
|
import android.util.Log; |
25 |
|
|
26 |
|
|
27 |
|
@author |
28 |
|
@version |
29 |
|
|
|
|
| 96,2% |
Uncovered Elements: 1 (26) |
Complexity: 8 |
Complexity Density: 0,44 |
|
30 |
|
public abstract class CancellableTask { |
31 |
|
|
32 |
|
private static final String TAG = CancellableTask.class.getSimpleName(); |
33 |
|
|
34 |
|
private final AtomicBoolean running = new AtomicBoolean(false); |
35 |
|
private final AtomicBoolean cancelled = new AtomicBoolean(false); |
36 |
|
private final AtomicReference<Thread> thread = new AtomicReference<Thread>(); |
37 |
|
private final AtomicReference<OnCancelListener> cancelListener = new AtomicReference<OnCancelListener>(); |
38 |
|
|
|
|
| 88,9% |
Uncovered Elements: 1 (9) |
Complexity: 3 |
Complexity Density: 0,43 |
|
39 |
70
|
public void cancel() {... |
40 |
70
|
Log.d(TAG, "Cancelling " + CancellableTask.this); |
41 |
70
|
cancelled.set(true); |
42 |
|
|
43 |
70
|
OnCancelListener listener = cancelListener.get(); |
44 |
70
|
if (listener != null) { |
45 |
20
|
try { |
46 |
20
|
listener.onCancel(); |
47 |
|
} catch (Throwable x) { |
48 |
0
|
Log.w(TAG, "Error when invoking OnCancelListener.", x); |
49 |
|
} |
50 |
|
} |
51 |
|
} |
52 |
|
|
|
|
| 100% |
Uncovered Elements: 0 (1) |
Complexity: 1 |
Complexity Density: 1 |
|
53 |
17573
|
public boolean isCancelled() {... |
54 |
17573
|
return cancelled.get(); |
55 |
|
} |
56 |
|
|
|
|
| 100% |
Uncovered Elements: 0 (1) |
Complexity: 1 |
Complexity Density: 1 |
|
57 |
21
|
public void setOnCancelListener(OnCancelListener listener) {... |
58 |
21
|
cancelListener.set(listener); |
59 |
|
} |
60 |
|
|
|
|
| 100% |
Uncovered Elements: 0 (1) |
Complexity: 1 |
Complexity Density: 1 |
|
61 |
166
|
public boolean isRunning() {... |
62 |
166
|
return running.get(); |
63 |
|
} |
64 |
|
|
65 |
|
public abstract void execute(); |
66 |
|
|
|
|
| 100% |
Uncovered Elements: 0 (2) |
Complexity: 1 |
Complexity Density: 0,5 |
|
67 |
51
|
public void start() {... |
68 |
51
|
thread.set(new Thread() { |
|
|
| 100% |
Uncovered Elements: 0 (6) |
Complexity: 1 |
Complexity Density: 0,17 |
|
69 |
51
|
@Override... |
70 |
|
public void run() { |
71 |
51
|
running.set(true); |
72 |
51
|
Log.d(TAG, "Starting thread for " + CancellableTask.this); |
73 |
51
|
try { |
74 |
51
|
execute(); |
75 |
|
} finally { |
76 |
50
|
running.set(false); |
77 |
50
|
Log.d(TAG, "Stopping thread for " + CancellableTask.this); |
78 |
|
} |
79 |
|
} |
80 |
|
}); |
81 |
51
|
thread.get().start(); |
82 |
|
} |
83 |
|
|
|
|
| - |
Uncovered Elements: 0 (0) |
Complexity: 0 |
Complexity Density: - |
|
84 |
|
public static interface OnCancelListener { |
85 |
|
void onCancel(); |
86 |
|
} |
87 |
|
} |