Unblock A Number On Android < 99% AUTHENTIC >

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

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"/>

- Add permissions <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.WRITE_CONTACTS" /> <uses-permission android:name="android.permission.CALL_PHONE" /> 2. BlockedNumbersActivity.java - Main activity to view and unblock numbers public class BlockedNumbersActivity extends AppCompatActivity { private RecyclerView recyclerView; private BlockedNumbersAdapter adapter; private List<BlockedNumber> blockedNumbersList; private BlockedNumbersManager blockedNumbersManager; unblock a number on android

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_blocked_numbers); blockedNumbersManager = new BlockedNumbersManager(this); recyclerView = findViewById(R.id.recyclerView); setupRecyclerView(); loadBlockedNumbers(); }

private void setupRecyclerView() { recyclerView.setLayoutManager(new LinearLayoutManager(this)); adapter = new BlockedNumbersAdapter(); recyclerView.setAdapter(adapter); } blockedSet = sharedPreferences.getStringSet(KEY_BLOCKED_LIST

<androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent"/> </LinearLayout> - List item layout <?xml version="1.0" encoding="utf-8"?> <androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="4dp" app:cardCornerRadius="8dp"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="16dp"> <TextView android:id="@+id/tvNumber" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="18sp" android:textStyle="bold" android:textColor="#000000"/> <TextView android:id="@+id/tvName" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="14sp" android:textColor="#666666" android:layout_marginTop="4dp"/> <TextView android:id="@+id/tvBlockedDate" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="12sp" android:textColor="#999999" android:layout_marginTop="4dp"/> <Button android:id="@+id/btnUnblock" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Unblock" android:layout_marginTop="8dp" style="?attr/materialButtonOutlinedStyle"/> </LinearLayout> </androidx.cardview.widget.CardView> 7. Optional: Add quick unblock from call log (CallLogHelper.java) public class CallLogHelper { public static void addUnblockButtonToCallLog(Context context, String phoneNumber) { // This can be integrated into your call log adapter new AlertDialog.Builder(context) .setTitle("Unblock Number") .setMessage("Do you want to unblock " + phoneNumber + "?") .setPositiveButton("Yes", (dialog, which) -> { BlockedNumbersManager manager = new BlockedNumbersManager(context); BlockedNumber blockedNumber = new BlockedNumber(); blockedNumber.setPhoneNumber(phoneNumber); blockedNumber.setContactName(getContactName(context, phoneNumber)); if (manager.unblockNumber(blockedNumber)) { Toast.makeText(context, "Number unblocked", Toast.LENGTH_SHORT).show(); } }) .setNegativeButton("No", null) .show(); }

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; } newBlockedSet = new HashSet&lt

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