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; + } }