horizon.platform.users package. Create an instance of Users to call them:import horizon.platform.users.Users val users = Users()
AndroidManifest.xml (see Minimum OS versions) or handle error code 1003 (PROVIDER_OPERATION_NOT_SUPPORTED).suspend fun launchBlockFlow(userId: String): LaunchBlockFlowResult
userId: The ID of the user that the viewer is going to launch the block flow request for.launchBlockFlow is a suspending function. Call it from a coroutine and wrap the call in a try/catch for UsersException.LaunchBlockFlowResult reports the outcome of the viewer’s actions in the modal. See Example code 1 below for how to handle the result.LaunchBlockFlowResult.didBlock is true if the viewer selected Block from the modal.LaunchBlockFlowResult.didCancel is true if the viewer canceled or selected Back from the modal.| Situation | Description | Result feedback (LaunchBlockFlowResult) |
|---|---|---|
Successful block | The user will view a dialog allowing them to Block or Cancel. The user selects Block and the block is executed successfully. | didBlock: true, didCancel: false |
User cancel | The user will view a dialog allowing them to Block or Cancel. The user selects Cancel and returns the viewer to the app. | didBlock: false, didCancel: true |
Viewer tries to block someone they blocked previously | The viewer receives a message informing them of the situation and asking whether they would like to unblock the target user. Selecting Back returns the viewer to their app. | didBlock: false, didCancel: true |
Viewer tries to block themselves | The viewer receives a message indicating that this is not supported. Selecting Back returns the viewer to their app. | didBlock: false, didCancel: true |
The block cannot be sent for some other reason. | The user receives the message “Unable to block. Please check your connection and try again.” Selecting Back returns the viewer to the app. | didBlock: false, didCancel: true |
suspend fun launchUnblockFlow(userId: String): LaunchUnblockFlowResult
userId: The ID of the user that the viewer is going to launch the unblock flow request for.launchUnblockFlow is a suspending function. Call it from a coroutine and wrap the call in a try/catch for UsersException.LaunchUnblockFlowResult reports the outcome of the viewer’s actions in the modal. See Example code 1 below for how to handle the result.LaunchUnblockFlowResult.didUnblock is true if the viewer selected Unblock from the modal.LaunchUnblockFlowResult.didCancel is true if the viewer canceled or selected Back from the modal.import android.util.Log
import horizon.platform.users.Users
import horizon.platform.users.UsersException
suspend fun blockUser(users: Users, userId: String) {
try {
val result = users.launchBlockFlow(userId)
Log.d(TAG, "Got result: didBlock = ${result.didBlock} didCancel = ${result.didCancel}")
} catch (e: UsersException) {
Log.e(TAG, "Error when trying to block the user: code ${e.code}", e)
}
}
suspend fun unblockUser(users: Users, userId: String) {
try {
val result = users.launchUnblockFlow(userId)
Log.d(TAG, "Got result: didUnblock = ${result.didUnblock} didCancel = ${result.didCancel}")
} catch (e: UsersException) {
Log.e(TAG, "Error when trying to unblock the user: code ${e.code}", e)
}
}
TAG is your app’s logging tag (any String).Users.getBlockedUsers(coroutineScope). This returns the blocked user IDs who are also entitled to your app.fun getBlockedUsers(coroutineScope: CoroutineScope): PagedResults<BlockedUser>
PagedResults<BlockedUser>. Call initialPage() to fetch the first page, then collect the pages flow to read each page; each BlockedUser exposes the blocked user’s id. See Example code 2 below for how to log the blocked user data.import android.util.Log
import horizon.core.android.common.pagination.PageFetchException
import horizon.core.android.common.pagination.ext.initialPage
import horizon.core.android.common.pagination.ext.pages
import horizon.platform.users.Users
import horizon.platform.users.UsersException
suspend fun logBlockedUsers(users: Users, coroutineScope: CoroutineScope) {
try {
val pagedResults = users.getBlockedUsers(coroutineScope)
pagedResults.initialPage()
pagedResults.pages.collect { page ->
for (blockedUser in page.contents) {
Log.d(TAG, "Blocked User: ${blockedUser.id}")
}
}
} catch (e: UsersException) {
Log.e(TAG, "Could not get the list of blocked users: code ${e.code}", e)
} catch (e: PageFetchException) {
Log.e(TAG, "Could not fetch a page of blocked users", e)
}
}