public String getBlockedDate() { return blockedDate; } public void setBlockedDate(String blockedDate) { this.blockedDate = blockedDate; } } - Layout file <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="16dp"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Blocked Numbers" android:textSize="24sp" android:textStyle="bold" android:layout_marginBottom="16dp"/>
public boolean unblockNumber(BlockedNumber blockedNumber) { Set<String> blockedSet = sharedPreferences.getStringSet(KEY_BLOCKED_LIST, new HashSet<>()); Set<String> newBlockedSet = new HashSet<>(blockedSet); String numberToRemove = null; for (String numberJson : blockedSet) { try { JSONObject jsonObject = new JSONObject(numberJson); if (jsonObject.getString("number").equals(blockedNumber.getPhoneNumber())) { numberToRemove = numberJson; break; } } catch (JSONException e) { e.printStackTrace(); } } if (numberToRemove != null && newBlockedSet.remove(numberToRemove)) { SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putStringSet(KEY_BLOCKED_LIST, newBlockedSet); editor.apply(); // Also remove from system call blocking if applicable removeFromSystemBlockList(blockedNumber.getPhoneNumber()); return true; } return false; } unblock a number on android
public List<BlockedNumber> getBlockedNumbers() { Set<String> blockedSet = sharedPreferences.getStringSet(KEY_BLOCKED_LIST, new HashSet<>()); List<BlockedNumber> blockedNumbers = new ArrayList<>(); for (String numberJson : blockedSet) { try { JSONObject jsonObject = new JSONObject(numberJson); BlockedNumber blockedNumber = new BlockedNumber(); blockedNumber.setPhoneNumber(jsonObject.getString("number")); blockedNumber.setBlockedDate(jsonObject.getString("date")); blockedNumber.setContactName(getContactName(jsonObject.getString("number"))); blockedNumbers.add(blockedNumber); } catch (JSONException e) { e.printStackTrace(); } } return blockedNumbers; } public String getBlockedDate() { return blockedDate
public BlockedNumbersManager(Context context) { this.context = context; this.sharedPreferences = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE); } } } - Layout file <
private void removeFromSystemBlockList(String phoneNumber) { // For Android 7+ (API 24+) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { try { ContentResolver contentResolver = context.getContentResolver(); Uri uri = BlockedNumbersContract.BlockedNumbers.CONTENT_URI; String selection = BlockedNumbersContract.BlockedNumbers.COLUMN_ORIGINAL_NUMBER + "=?"; String[] selectionArgs = new String[]{phoneNumber}; contentResolver.delete(uri, selection, selectionArgs); } catch (SecurityException e) { e.printStackTrace(); } } } } - Model class public class BlockedNumber { private String phoneNumber; private String contactName; private String blockedDate; public String getPhoneNumber() { return phoneNumber; } public void setPhoneNumber(String phoneNumber) { this.phoneNumber = phoneNumber; }
private String getContactName(String phoneNumber) { ContentResolver contentResolver = context.getContentResolver(); Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber)); String[] projection = new String[]{ContactsContract.PhoneLookup.DISPLAY_NAME}; try (Cursor cursor = contentResolver.query(uri, projection, null, null, null)) { if (cursor != null && cursor.moveToFirst()) { return cursor.getString(0); } } return "Unknown Contact"; }