This library provides the BlockedNumbersDelete
API that allows you to delete existing
BlockedNumbers.
An instance of the BlockedNumbersDelete
API is obtained by,
val delete = Contacts(context).blockedNumbers().delete()
Note that blocked number deletions will only work for privileged apps. For more info, read about Blocked numbers.
To delete a set of existing blocked numbers,
val deleteResult = delete
.blockedNumbers()
.delete()
.blockedNumbers(existingBlockedNumbers)
.commit()
To delete a set of existing blocked numbers using IDs,
val deleteResult = delete
.blockedNumbers()
.delete()
.blockedNumbersWithId(1, 2, 3)
.commit()
You may specify a matching criteria, like in queries, that will delete all matching blocked numbers,
val deleteResult = delete
.dataWhere { Number contains "555" }
.commit()
To execute the delete,
.commit()
If you want to delete all given blockedNumbers in a single atomic transaction,
.commitInOneTransaction()
The call to commitInOneTransaction
will only succeed if ALL given blocked numbers are successfully
deleted. If one delete fails, the entire operation will fail and everything will be reverted prior
to the delete operation. In contrast, commit
allows for some deletes to succeed and some to fail.
The commit
and commitInOneTransaction
functions returns a Result
,
To check if all deletes succeeded,
val allDeletesSuccessful = deleteResult.isSuccessful
To check if a particular delete succeeded,
val deleteSuccessful = deleteResult.isSuccessful(blockedNumber)
val deleteSuccessful = deleteResult.isSuccessful(blockedNumber.id)
To check if a particular advanced delete managed to delete at least one matching blocked number,
val where = BlockedNumbersFields.Number contains "555"
val deleteResult = delete.groupsWhere(where).commit()
val advancedDeleteSuccessful = deleteResult.isSuccessful(where)
Deletes are executed when the commit
or commitInOneTransaction
function is invoked. The work is
done in the same thread as the call-site. This may result in a choppy UI.
To perform the work in a different thread, use the Kotlin coroutine extensions provided in the async
module.
For more info, read Execute work outside of the UI thread using coroutines.
You may, of course, use other multi-threading libraries or just do it yourself =)
ℹ️ Extensions for Kotlin Flow and RxJava are also in the project roadmap.
There are no permissions required for blocked numbers. However, there are privileges that must be acquired. For more info, read about Blocked numbers.