Add missing permission request

This commit is contained in:
Benoit Marty 2019-07-09 14:52:48 +02:00
parent 5dc83d64c1
commit ba589e7961
4 changed files with 61 additions and 29 deletions

View File

@ -66,6 +66,7 @@ const val PERMISSION_REQUEST_CODE_AUDIO_CALL = 571
const val PERMISSION_REQUEST_CODE_VIDEO_CALL = 572
const val PERMISSION_REQUEST_CODE_EXPORT_KEYS = 573
const val PERMISSION_REQUEST_CODE_CHANGE_AVATAR = 574
const val PERMISSION_REQUEST_CODE_DOWNLOAD_FILE = 575
/**
* Log the used permissions statuses.

View File

@ -27,7 +27,7 @@ import im.vector.riotx.R
import im.vector.riotx.core.dialogs.ExportKeysDialog
import im.vector.riotx.core.extensions.observeEvent
import im.vector.riotx.core.platform.SimpleFragmentActivity
import im.vector.riotx.core.utils.toast
import im.vector.riotx.core.utils.*
import im.vector.riotx.features.crypto.keys.KeysExporter
class KeysBackupSetupActivity : SimpleFragmentActivity() {
@ -132,6 +132,7 @@ class KeysBackupSetupActivity : SimpleFragmentActivity() {
}
private fun exportKeysManually() {
if (checkPermissions(PERMISSIONS_FOR_WRITING_FILES, this, PERMISSION_REQUEST_CODE_EXPORT_KEYS)) {
ExportKeysDialog().show(this, object : ExportKeysDialog.ExportKeyDialogListener {
override fun onPassphrase(passphrase: String) {
showWaitingView()
@ -164,7 +165,15 @@ class KeysBackupSetupActivity : SimpleFragmentActivity() {
}
})
}
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
if (allGranted(grantResults)) {
if (requestCode == PERMISSION_REQUEST_CODE_EXPORT_KEYS) {
exportKeysManually()
}
}
}
override fun onBackPressed() {
if (viewModel.shouldPromptOnBack) {

View File

@ -621,7 +621,26 @@ class RoomDetailFragment :
}
override fun onFileMessageClicked(eventId: String, messageFileContent: MessageFileContent) {
roomDetailViewModel.process(RoomDetailActions.DownloadFile(eventId, messageFileContent))
val action = RoomDetailActions.DownloadFile(eventId, messageFileContent)
// We need WRITE_EXTERNAL permission
if (checkPermissions(PERMISSIONS_FOR_WRITING_FILES, this, PERMISSION_REQUEST_CODE_DOWNLOAD_FILE)) {
roomDetailViewModel.process(action)
} else {
roomDetailViewModel.pendingAction = action
}
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
if (allGranted(grantResults)) {
if (requestCode == PERMISSION_REQUEST_CODE_DOWNLOAD_FILE) {
val action = roomDetailViewModel.pendingAction
if (action != null) {
roomDetailViewModel.pendingAction = null
roomDetailViewModel.process(action)
}
}
}
}
override fun onAudioMessageClicked(messageAudioContent: MessageAudioContent) {

View File

@ -75,6 +75,9 @@ class RoomDetailViewModel @AssistedInject constructor(@Assisted initialState: Ro
}
private var timeline = room.createTimeline(eventId, allowedTypes)
// Slot to keep a pending action during permission request
var pendingAction: RoomDetailActions? = null
@AssistedInject.Factory
interface Factory {
fun create(initialState: RoomDetailViewState): RoomDetailViewModel