Changeset View
Changeset View
Standalone View
Standalone View
src/org/kde/kdeconnect/Plugins/TelephonyPlugin/TelephonyPlugin.java
Show All 19 Lines | |||||
20 | 20 | | |||
21 | package org.kde.kdeconnect.Plugins.TelephonyPlugin; | 21 | package org.kde.kdeconnect.Plugins.TelephonyPlugin; | ||
22 | 22 | | |||
23 | import android.Manifest; | 23 | import android.Manifest; | ||
24 | import android.content.BroadcastReceiver; | 24 | import android.content.BroadcastReceiver; | ||
25 | import android.content.Context; | 25 | import android.content.Context; | ||
26 | import android.content.Intent; | 26 | import android.content.Intent; | ||
27 | import android.content.IntentFilter; | 27 | import android.content.IntentFilter; | ||
28 | import android.content.SharedPreferences; | ||||
28 | import android.content.pm.PackageManager; | 29 | import android.content.pm.PackageManager; | ||
29 | import android.media.AudioManager; | 30 | import android.media.AudioManager; | ||
30 | import android.os.Build; | 31 | import android.os.Build; | ||
31 | import android.os.Bundle; | 32 | import android.os.Bundle; | ||
33 | import android.preference.PreferenceManager; | ||||
32 | import android.support.v4.content.ContextCompat; | 34 | import android.support.v4.content.ContextCompat; | ||
35 | import android.telephony.PhoneNumberUtils; | ||||
33 | import android.telephony.SmsMessage; | 36 | import android.telephony.SmsMessage; | ||
34 | import android.telephony.TelephonyManager; | 37 | import android.telephony.TelephonyManager; | ||
35 | import android.util.Log; | 38 | import android.util.Log; | ||
36 | 39 | | |||
37 | import org.kde.kdeconnect.Helpers.ContactsHelper; | 40 | import org.kde.kdeconnect.Helpers.ContactsHelper; | ||
38 | import org.kde.kdeconnect.NetworkPackage; | 41 | import org.kde.kdeconnect.NetworkPackage; | ||
39 | import org.kde.kdeconnect.Plugins.Plugin; | 42 | import org.kde.kdeconnect.Plugins.Plugin; | ||
40 | import org.kde.kdeconnect_tp.BuildConfig; | 43 | import org.kde.kdeconnect_tp.BuildConfig; | ||
41 | import org.kde.kdeconnect_tp.R; | 44 | import org.kde.kdeconnect_tp.R; | ||
42 | 45 | | |||
43 | import java.util.ArrayList; | 46 | import java.util.ArrayList; | ||
44 | import java.util.Map; | 47 | import java.util.Map; | ||
45 | import java.util.Timer; | 48 | import java.util.Timer; | ||
46 | import java.util.TimerTask; | 49 | import java.util.TimerTask; | ||
47 | 50 | | |||
48 | public class TelephonyPlugin extends Plugin { | 51 | public class TelephonyPlugin extends Plugin { | ||
49 | 52 | | |||
50 | private final static String PACKAGE_TYPE_TELEPHONY = "kdeconnect.telephony"; | 53 | private final static String PACKAGE_TYPE_TELEPHONY = "kdeconnect.telephony"; | ||
51 | public final static String PACKAGE_TYPE_TELEPHONY_REQUEST = "kdeconnect.telephony.request"; | 54 | public final static String PACKAGE_TYPE_TELEPHONY_REQUEST = "kdeconnect.telephony.request"; | ||
55 | private static final String KEY_PREF_BLOCKED_NUMBERS = "telephony_blocked_numbers"; | ||||
52 | 56 | | |||
53 | private int lastState = TelephonyManager.CALL_STATE_IDLE; | 57 | private int lastState = TelephonyManager.CALL_STATE_IDLE; | ||
54 | private NetworkPackage lastPackage = null; | 58 | private NetworkPackage lastPackage = null; | ||
55 | private boolean isMuted = false; | 59 | private boolean isMuted = false; | ||
56 | 60 | | |||
57 | private final BroadcastReceiver receiver = new BroadcastReceiver() { | 61 | private final BroadcastReceiver receiver = new BroadcastReceiver() { | ||
58 | @Override | 62 | @Override | ||
59 | public void onReceive(Context context, Intent intent) { | 63 | public void onReceive(Context context, Intent intent) { | ||
▲ Show 20 Lines • Show All 49 Lines • ▼ Show 20 Line(s) | |||||
109 | 113 | | |||
110 | @Override | 114 | @Override | ||
111 | public String getDescription() { | 115 | public String getDescription() { | ||
112 | return context.getResources().getString(R.string.pref_plugin_telephony_desc); | 116 | return context.getResources().getString(R.string.pref_plugin_telephony_desc); | ||
113 | } | 117 | } | ||
114 | 118 | | |||
115 | private void callBroadcastReceived(int state, String phoneNumber) { | 119 | private void callBroadcastReceived(int state, String phoneNumber) { | ||
116 | 120 | | |||
121 | if (isNumberBlocked(phoneNumber)) | ||||
122 | return; | ||||
123 | | ||||
117 | NetworkPackage np = new NetworkPackage(PACKAGE_TYPE_TELEPHONY); | 124 | NetworkPackage np = new NetworkPackage(PACKAGE_TYPE_TELEPHONY); | ||
118 | 125 | | |||
119 | int permissionCheck = ContextCompat.checkSelfPermission(context, | 126 | int permissionCheck = ContextCompat.checkSelfPermission(context, | ||
120 | Manifest.permission.READ_CONTACTS); | 127 | Manifest.permission.READ_CONTACTS); | ||
121 | 128 | | |||
122 | if (permissionCheck == PackageManager.PERMISSION_GRANTED) { | 129 | if (permissionCheck == PackageManager.PERMISSION_GRANTED) { | ||
123 | 130 | | |||
124 | Map<String, String> contactInfo = ContactsHelper.phoneNumberLookup(context, phoneNumber); | 131 | Map<String, String> contactInfo = ContactsHelper.phoneNumberLookup(context, phoneNumber); | ||
▲ Show 20 Lines • Show All 104 Lines • ▼ Show 20 Line(s) | 224 | private void smsBroadcastReceived(ArrayList<SmsMessage> messages) { | |||
229 | StringBuilder messageBody = new StringBuilder(); | 236 | StringBuilder messageBody = new StringBuilder(); | ||
230 | for (int index = 0; index < messages.size(); index++) { | 237 | for (int index = 0; index < messages.size(); index++) { | ||
231 | messageBody.append(messages.get(index).getMessageBody()); | 238 | messageBody.append(messages.get(index).getMessageBody()); | ||
232 | } | 239 | } | ||
233 | np.set("messageBody", messageBody.toString()); | 240 | np.set("messageBody", messageBody.toString()); | ||
234 | 241 | | |||
235 | String phoneNumber = messages.get(0).getOriginatingAddress(); | 242 | String phoneNumber = messages.get(0).getOriginatingAddress(); | ||
236 | 243 | | |||
244 | if (isNumberBlocked(phoneNumber)) | ||||
245 | return; | ||||
246 | | ||||
237 | int permissionCheck = ContextCompat.checkSelfPermission(context, | 247 | int permissionCheck = ContextCompat.checkSelfPermission(context, | ||
238 | Manifest.permission.READ_CONTACTS); | 248 | Manifest.permission.READ_CONTACTS); | ||
239 | 249 | | |||
240 | if (permissionCheck == PackageManager.PERMISSION_GRANTED) { | 250 | if (permissionCheck == PackageManager.PERMISSION_GRANTED) { | ||
241 | Map<String, String> contactInfo = ContactsHelper.phoneNumberLookup(context, phoneNumber); | 251 | Map<String, String> contactInfo = ContactsHelper.phoneNumberLookup(context, phoneNumber); | ||
242 | 252 | | |||
243 | if (contactInfo.containsKey("name")) { | 253 | if (contactInfo.containsKey("name")) { | ||
244 | np.set("contactName", contactInfo.get("name")); | 254 | np.set("contactName", contactInfo.get("name")); | ||
Show All 39 Lines | 288 | if (!isMuted) { | |||
284 | } | 294 | } | ||
285 | isMuted = true; | 295 | isMuted = true; | ||
286 | } | 296 | } | ||
287 | } | 297 | } | ||
288 | //Do nothing | 298 | //Do nothing | ||
289 | return true; | 299 | return true; | ||
290 | } | 300 | } | ||
291 | 301 | | |||
302 | private boolean isNumberBlocked(String number) { | ||||
303 | SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context); | ||||
304 | String[] blockedNumbers = sharedPref.getString(KEY_PREF_BLOCKED_NUMBERS, "").split("\n"); | ||||
305 | | ||||
306 | for (String s: blockedNumbers) { | ||||
307 | if (PhoneNumberUtils.compare(number, s)) | ||||
308 | return true; | ||||
309 | } | ||||
310 | | ||||
311 | return false; | ||||
312 | } | ||||
313 | | ||||
292 | @Override | 314 | @Override | ||
293 | public String[] getSupportedPackageTypes() { | 315 | public String[] getSupportedPackageTypes() { | ||
294 | return new String[]{PACKAGE_TYPE_TELEPHONY_REQUEST}; | 316 | return new String[]{PACKAGE_TYPE_TELEPHONY_REQUEST}; | ||
295 | } | 317 | } | ||
296 | 318 | | |||
297 | @Override | 319 | @Override | ||
298 | public String[] getOutgoingPackageTypes() { | 320 | public String[] getOutgoingPackageTypes() { | ||
299 | return new String[]{PACKAGE_TYPE_TELEPHONY}; | 321 | return new String[]{PACKAGE_TYPE_TELEPHONY}; | ||
300 | } | 322 | } | ||
301 | 323 | | |||
302 | @Override | 324 | @Override | ||
303 | public String[] getRequiredPermissions() { | 325 | public String[] getRequiredPermissions() { | ||
304 | return new String[]{Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_SMS}; | 326 | return new String[]{Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_SMS}; | ||
305 | } | 327 | } | ||
306 | 328 | | |||
307 | @Override | 329 | @Override | ||
308 | public String[] getOptionalPermissions() { | 330 | public String[] getOptionalPermissions() { | ||
309 | return new String[]{Manifest.permission.READ_CONTACTS}; | 331 | return new String[]{Manifest.permission.READ_CONTACTS}; | ||
310 | } | 332 | } | ||
333 | | ||||
334 | @Override | ||||
335 | public boolean hasSettings() { | ||||
336 | return true; | ||||
337 | } | ||||
311 | } | 338 | } |