blob: 01b479eadcc81ea4d97c59859920278c5c4d17bb (
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
116
117
|
package com.cyanogen.lookup.phonenumber;
import android.content.Context;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Message;
import android.text.TextUtils;
import android.util.Log;
import com.cyanogen.lookup.phonenumber.provider.LookupProviderImpl;
import com.cyanogen.lookup.phonenumber.request.LookupRequest;
import java.util.HashSet;
public class LookupHandlerThread extends HandlerThread implements Handler.Callback {
private static final int MSG_FETCH_INFO = 0;
private static final int MSG_MARK_AS_SPAM = 1;
private static final String TAG = LookupHandlerThread.class.getSimpleName();
private Context mContext;
private Handler mHandler;
private LookupProviderImpl mLookupProvider;
private HashSet<LookupRequest> mSubmittedRequests;
private boolean mInitialized = false;
public LookupHandlerThread(String name, Context ctx) {
super(name);
mContext = ctx;
mLookupProvider = new LookupProviderImpl(mContext, null);
}
public LookupHandlerThread(String name, int priority, Context ctx) {
super(name, priority);
mContext = ctx;
mLookupProvider = new LookupProviderImpl(mContext, null);
}
public boolean initialize() {
if (mInitialized) {
return true;
}
mInitialized = mLookupProvider.initialize();
if (mInitialized) {
mSubmittedRequests = new HashSet<>();
start();
mHandler = new Handler(getLooper(), this);
} else {
Log.w(TAG, "Failed to initialize!");
}
return mInitialized;
}
public boolean isProviderEnabled() {
return mLookupProvider.isEnabled();
}
public void tearDown() {
if (mInitialized) {
quit();
mLookupProvider.disable();
mInitialized = false;
}
}
public boolean fetchInfoForPhoneNumber(LookupRequest lookupRequest) {
if (!mSubmittedRequests.contains(lookupRequest)) {
Message msg = mHandler.obtainMessage(MSG_FETCH_INFO);
msg.obj = lookupRequest;
boolean requested = mHandler.sendMessage(msg);
if (requested) {
mSubmittedRequests.add(lookupRequest);
}
return requested;
}
return false;
}
/**
* Posts a message to {@link #mHandler} which later dispatches a request to the provider
* implementation that knows how to mark a phone number as spam
*
* @param phoneNumber {@link String}
*/
public void markAsSpam(String phoneNumber) {
if (TextUtils.isEmpty(phoneNumber)) {
return;
}
if (mHandler != null) {
Message msg = mHandler.obtainMessage(MSG_MARK_AS_SPAM);
msg.obj = phoneNumber;
mHandler.sendMessage(msg);
} else {
Log.w(TAG, "No handler!");
}
}
@Override
public boolean handleMessage(Message msg) {
int what = msg.what;
switch (what) {
case MSG_FETCH_INFO :
if (mInitialized) {
mLookupProvider.fetchInfo((LookupRequest) msg.obj);
}
break;
case MSG_MARK_AS_SPAM :
if (mInitialized) {
mLookupProvider.markAsSpam((String) msg.obj);
}
break;
}
return true;
}
}
|