``` protected fun mapState(message: FileDetailMess...
# android-architecture
u
Copy code
protected fun mapState(message: FileDetailMessage): State {
        val toolbarTitle = message.userRealName ?: message.username
        val toolbarSubtitle =
            message.channelName?.let { resourceHelper.getString(R.string.shared_in, message.channelName ?: "") }

        val fileState = message.fileState
        val title = message.fileTitle

        val formattedFileSize = Utils.formatFileSize(message.fileSize)
        val subtitle = when {
            message.messageState == MessageState.SENDING -> resourceHelper.getString(
                R.string.file_state_uploading,
                message.fileProgress,
                formattedFileSize
            )
            message.messageState == MessageState.SENT && message.fileState == FileDownloadState.DOWNLOADING -> resourceHelper.getString(
                R.string.file_state_downloading,
                message.fileProgress,
                formattedFileSize
            )
            else -> formattedFileSize
        }

        val action = resourceHelper.getString(
            when (message.messageState) {
                MessageState.SENDING -> R.string.action_cancel
                MessageState.ERROR -> R.string.action_retry
                MessageState.SENT -> when (fileState) {
                    FileDownloadState.DOWNLOADING -> R.string.action_cancel
                    FileDownloadState.DOWNLOADED -> R.string.action_open
                    else -> R.string.action_download
                }
            }
        )
        return State(
            message.userImageUrl,
            toolbarTitle,
            toolbarSubtitle,
            title,
            subtitle,
            message.userRealName,
            message.username,
            Utils.getFileTypeIcon(message.fileMimeType),
            action
        )
    }