proton-mail-android/app/src/main/java/ch/protonmail/android/activities/messageDetails/attachments/MessageDetailsAttachmentLis...

86 lines
3.4 KiB
Kotlin
Raw Normal View History

2020-04-16 15:44:53 +00:00
/*
2022-02-28 15:15:59 +00:00
* Copyright (c) 2022 Proton AG
2020-09-17 09:47:11 +00:00
*
2022-02-28 15:15:59 +00:00
* This file is part of Proton Mail.
2020-09-17 09:47:11 +00:00
*
2022-02-28 15:15:59 +00:00
* Proton Mail is free software: you can redistribute it and/or modify
2020-04-16 15:44:53 +00:00
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
2020-09-17 09:47:11 +00:00
*
2022-02-28 15:15:59 +00:00
* Proton Mail is distributed in the hope that it will be useful,
2020-04-16 15:44:53 +00:00
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
2020-09-17 09:47:11 +00:00
*
2020-04-16 15:44:53 +00:00
* You should have received a copy of the GNU General Public License
2022-02-28 15:15:59 +00:00
* along with Proton Mail. If not, see https://www.gnu.org/licenses/.
2020-04-16 15:44:53 +00:00
*/
package ch.protonmail.android.activities.messageDetails.attachments
import android.content.Context
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
2020-09-17 09:47:11 +00:00
import androidx.annotation.DrawableRes
2020-04-16 15:44:53 +00:00
import ch.protonmail.android.R
Replace imports for import ch.protonmail.android.api.models.room..+; MAILAND-1189 # Conflicts: # app/src/androidTest/java/ch/protonmail/android/api/models/room/ContactGroupsDatabaseTest.kt # app/src/main/java/ch/protonmail/android/api/segments/contact/ContactEmailsManager.kt # app/src/main/java/ch/protonmail/android/api/segments/event/EventHandler.kt # app/src/main/java/ch/protonmail/android/contacts/groups/details/ContactGroupDetailsViewModel.kt # app/src/main/java/ch/protonmail/android/contacts/groups/list/ContactGroupsFragment.kt # app/src/main/java/ch/protonmail/android/contacts/groups/list/ContactGroupsRepository.kt # app/src/main/java/ch/protonmail/android/contacts/groups/list/ContactGroupsViewModel.kt # app/src/main/java/ch/protonmail/android/contacts/list/listView/ProtonMailContactsLiveData.kt # app/src/main/java/ch/protonmail/android/jobs/UpdateContactJob.java # app/src/test/java/ch/protonmail/android/contacts/details/ContactDetailsRepositoryTest.kt # app/src/test/java/ch/protonmail/android/contacts/details/ContactGroupsRepositoryTest.kt # app/src/test/java/ch/protonmail/android/contacts/groups/ContactGroupsViewModelTest.kt # app/src/test/java/ch/protonmail/android/contacts/groups/edit/ContactGroupEditCreateRepositoryTest.kt # Conflicts: # app/src/main/java/ch/protonmail/android/activities/messageDetails/viewmodel/MessageDetailsViewModel.kt # app/src/main/java/ch/protonmail/android/api/models/messages/receive/ServerAttachment.kt # app/src/main/java/ch/protonmail/android/attachments/DownloadEmbeddedAttachmentsWorker.kt # app/src/main/java/ch/protonmail/android/jobs/helper/EmbeddedImage.kt # app/src/main/java/ch/protonmail/android/jobs/messages/PostMessageJob.java # Conflicts: # app/src/androidTest/java/ch/protonmail/android/api/models/room/contacts/ContactDaoTest.kt # Conflicts: # app/src/main/java/ch/protonmail/android/api/models/factories/PackageFactory.java # app/src/main/java/ch/protonmail/android/api/models/factories/SendPreferencesFactory.java # app/src/main/java/ch/protonmail/android/attachments/UploadAttachments.kt # app/src/main/java/ch/protonmail/android/compose/ComposeMessageViewModel.kt # app/src/main/java/ch/protonmail/android/core/ProtonMailApplication.java # app/src/main/java/ch/protonmail/android/jobs/messages/PostMessageJob.java # app/src/main/java/ch/protonmail/android/usecase/compose/SaveDraft.kt # app/src/test/java/ch/protonmail/android/attachments/UploadAttachmentsTest.kt # app/src/test/java/ch/protonmail/android/compose/ComposeMessageViewModelTest.kt # app/src/test/java/ch/protonmail/android/usecase/compose/SaveDraftTest.kt # Conflicts: # app/src/main/java/ch/protonmail/android/di/ApplicationModule.kt # app/src/main/java/ch/protonmail/android/fcm/FcmIntentService.java
2021-03-18 09:46:25 +00:00
import ch.protonmail.android.data.local.model.Attachment
2020-04-16 15:44:53 +00:00
import ch.protonmail.android.views.messageDetails.AttachmentDetailView
class MessageDetailsAttachmentListAdapter(
context: Context,
private val downloadListener: (Attachment) -> Unit
) : ArrayAdapter<Attachment>(context, R.layout.layout_message_details_attachments_details) {
private val downloadingIds = mutableSetOf<String>()
private var pgpEncrypted: Boolean = false
2020-04-16 15:44:53 +00:00
@DrawableRes
private fun String?.getIconRes(): Int {
return when (this) {
"image/jpeg", "image/pjpeg", "image/png" -> R.drawable.ic_file_image_variants
"application/zip", "application/x-compressed", "application/x-zip-compressed", "multipart/x-zip" ->
R.drawable.ic_file_rar_zip_variants
"text/plain" -> R.drawable.ic_file_attachment_variants // currently no icon for plain text files
"application/pdf" -> R.drawable.ic_file_pdf_variants
"application/msword" -> R.drawable.ic_file_word_variants
else -> R.drawable.ic_file_attachment_variants
}
}
2020-04-16 15:44:53 +00:00
fun setList(attachmentsList: List<Attachment>) {
downloadingIds.clear()
clear()
addAll(attachmentsList)
}
2020-04-16 15:44:53 +00:00
fun setDownloaded(attachmentId: String, isDownloaded: Boolean) {
if (isDownloaded) {
downloadingIds.remove(attachmentId)
} else {
downloadingIds.add(attachmentId)
}
notifyDataSetChanged()
}
2020-04-16 15:44:53 +00:00
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
2020-04-16 15:44:53 +00:00
val view = convertView as? AttachmentDetailView ?: AttachmentDetailView(context)
val attachment = getItem(position) ?: return view
2020-04-16 15:44:53 +00:00
val fileName = attachment.fileName
val fileSize = attachment.fileSize
val mimeType = attachment.mimeType
val attachmentSpecificIcon = mimeType.getIconRes()
val headers = attachment.headers
val showWarningIcon = headers != null && headers.contentEncryption == "on-delivery" && pgpEncrypted
val attachmentId = attachment.attachmentId
val isDownloading = downloadingIds.contains(attachmentId)
view.bind(fileName, fileSize, attachmentSpecificIcon, showWarningIcon, isDownloading)
2020-04-16 15:44:53 +00:00
val onClickListener = View.OnClickListener { downloadListener(attachment) }
view.setOnClickListener(onClickListener)
2020-04-16 15:44:53 +00:00
return view
}
2020-04-16 15:44:53 +00:00
}