diff --git a/res/values/strings.xml b/res/values/strings.xml
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -217,5 +217,7 @@
To see phone calls and SMS from the desktop you need to give permission to phone calls and SMS
To see a contact name instead of a phone number you need to give access to the phone\'s contacts
Select a ringtone
+ Blocked numbers
+ Don\'t show calls and SMS from these numbers. Please specify one number per line
diff --git a/res/xml/telephonyplugin_preferences.xml b/res/xml/telephonyplugin_preferences.xml
new file mode 100644
--- /dev/null
+++ b/res/xml/telephonyplugin_preferences.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/org/kde/kdeconnect/Plugins/TelephonyPlugin/TelephonyPlugin.java b/src/org/kde/kdeconnect/Plugins/TelephonyPlugin/TelephonyPlugin.java
--- a/src/org/kde/kdeconnect/Plugins/TelephonyPlugin/TelephonyPlugin.java
+++ b/src/org/kde/kdeconnect/Plugins/TelephonyPlugin/TelephonyPlugin.java
@@ -25,11 +25,14 @@
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
+import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.media.AudioManager;
import android.os.Build;
import android.os.Bundle;
+import android.preference.PreferenceManager;
import android.support.v4.content.ContextCompat;
+import android.telephony.PhoneNumberUtils;
import android.telephony.SmsMessage;
import android.telephony.TelephonyManager;
import android.util.Log;
@@ -49,6 +52,7 @@
private final static String PACKAGE_TYPE_TELEPHONY = "kdeconnect.telephony";
public final static String PACKAGE_TYPE_TELEPHONY_REQUEST = "kdeconnect.telephony.request";
+ private static final String KEY_PREF_BLOCKED_NUMBERS = "telephony_blocked_numbers";
private int lastState = TelephonyManager.CALL_STATE_IDLE;
private NetworkPackage lastPackage = null;
@@ -114,6 +118,9 @@
private void callBroadcastReceived(int state, String phoneNumber) {
+ if (isNumberBlocked(phoneNumber))
+ return;
+
NetworkPackage np = new NetworkPackage(PACKAGE_TYPE_TELEPHONY);
int permissionCheck = ContextCompat.checkSelfPermission(context,
@@ -234,6 +241,9 @@
String phoneNumber = messages.get(0).getOriginatingAddress();
+ if (isNumberBlocked(phoneNumber))
+ return;
+
int permissionCheck = ContextCompat.checkSelfPermission(context,
Manifest.permission.READ_CONTACTS);
@@ -289,6 +299,18 @@
return true;
}
+ private boolean isNumberBlocked(String number) {
+ SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context);
+ String[] blockedNumbers = sharedPref.getString(KEY_PREF_BLOCKED_NUMBERS, "").split("\n");
+
+ for (String s: blockedNumbers) {
+ if (PhoneNumberUtils.compare(number, s))
+ return true;
+ }
+
+ return false;
+ }
+
@Override
public String[] getSupportedPackageTypes() {
return new String[]{PACKAGE_TYPE_TELEPHONY_REQUEST};
@@ -308,4 +330,9 @@
public String[] getOptionalPermissions() {
return new String[]{Manifest.permission.READ_CONTACTS};
}
+
+ @Override
+ public boolean hasSettings() {
+ return true;
+ }
}