Merge pull request #2140 from nextcloud/chore/noid/MimetypeCentralization

Centralize mime type definitions
This commit is contained in:
Andy Scherzinger 2022-06-10 13:32:33 +02:00 committed by GitHub
commit 07c30f0993
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 138 additions and 48 deletions

View File

@ -37,6 +37,7 @@ import com.nextcloud.talk.BuildConfig
import com.nextcloud.talk.R import com.nextcloud.talk.R
import com.nextcloud.talk.databinding.ActivityFullScreenImageBinding import com.nextcloud.talk.databinding.ActivityFullScreenImageBinding
import com.nextcloud.talk.utils.BitmapShrinker import com.nextcloud.talk.utils.BitmapShrinker
import com.nextcloud.talk.utils.Mimetype.IMAGE_PREFIX_GENERIC
import pl.droidsonroids.gif.GifDrawable import pl.droidsonroids.gif.GifDrawable
import java.io.File import java.io.File
@ -64,7 +65,7 @@ class FullScreenImageActivity : AppCompatActivity() {
val shareIntent: Intent = Intent().apply { val shareIntent: Intent = Intent().apply {
action = Intent.ACTION_SEND action = Intent.ACTION_SEND
putExtra(Intent.EXTRA_STREAM, shareUri) putExtra(Intent.EXTRA_STREAM, shareUri)
type = "image/*" type = IMAGE_PREFIX_GENERIC
addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
} }
startActivity(Intent.createChooser(shareIntent, resources.getText(R.string.send_to))) startActivity(Intent.createChooser(shareIntent, resources.getText(R.string.send_to)))

View File

@ -38,6 +38,7 @@ import com.nextcloud.talk.BuildConfig
import com.nextcloud.talk.R import com.nextcloud.talk.R
import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.application.NextcloudTalkApplication
import com.nextcloud.talk.databinding.ActivityFullScreenMediaBinding import com.nextcloud.talk.databinding.ActivityFullScreenMediaBinding
import com.nextcloud.talk.utils.Mimetype.VIDEO_PREFIX_GENERIC
import java.io.File import java.io.File
@AutoInjector(NextcloudTalkApplication::class) @AutoInjector(NextcloudTalkApplication::class)
@ -66,7 +67,7 @@ class FullScreenMediaActivity : AppCompatActivity(), Player.Listener {
val shareIntent: Intent = Intent().apply { val shareIntent: Intent = Intent().apply {
action = Intent.ACTION_SEND action = Intent.ACTION_SEND
putExtra(Intent.EXTRA_STREAM, shareUri) putExtra(Intent.EXTRA_STREAM, shareUri)
type = "video/*" type = VIDEO_PREFIX_GENERIC
addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
} }
startActivity(Intent.createChooser(shareIntent, resources.getText(R.string.send_to))) startActivity(Intent.createChooser(shareIntent, resources.getText(R.string.send_to)))

View File

@ -35,6 +35,7 @@ import com.nextcloud.talk.R
import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.application.NextcloudTalkApplication
import com.nextcloud.talk.databinding.ActivityFullScreenTextBinding import com.nextcloud.talk.databinding.ActivityFullScreenTextBinding
import com.nextcloud.talk.utils.DisplayUtils import com.nextcloud.talk.utils.DisplayUtils
import com.nextcloud.talk.utils.Mimetype.TEXT_PREFIX_GENERIC
import io.noties.markwon.Markwon import io.noties.markwon.Markwon
import java.io.File import java.io.File
@ -63,7 +64,7 @@ class FullScreenTextViewerActivity : AppCompatActivity() {
val shareIntent: Intent = Intent().apply { val shareIntent: Intent = Intent().apply {
action = Intent.ACTION_SEND action = Intent.ACTION_SEND
putExtra(Intent.EXTRA_STREAM, shareUri) putExtra(Intent.EXTRA_STREAM, shareUri)
type = "text/*" type = TEXT_PREFIX_GENERIC
addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
} }
startActivity(Intent.createChooser(shareIntent, resources.getText(R.string.send_to))) startActivity(Intent.createChooser(shareIntent, resources.getText(R.string.send_to)))

View File

@ -67,6 +67,8 @@ import androidx.core.content.ContextCompat;
import androidx.exifinterface.media.ExifInterface; import androidx.exifinterface.media.ExifInterface;
import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelProvider;
import static com.nextcloud.talk.utils.Mimetype.IMAGE_JPEG;
public class TakePhotoActivity extends AppCompatActivity { public class TakePhotoActivity extends AppCompatActivity {
private static final String TAG = TakePhotoActivity.class.getSimpleName(); private static final String TAG = TakePhotoActivity.class.getSimpleName();
@ -175,7 +177,7 @@ public class TakePhotoActivity extends AppCompatActivity {
}); });
binding.send.setOnClickListener((v) -> { binding.send.setOnClickListener((v) -> {
Uri uri = (Uri) binding.photoPreview.getTag(); Uri uri = (Uri) binding.photoPreview.getTag();
setResult(RESULT_OK, new Intent().setDataAndType(uri, "image/jpeg")); setResult(RESULT_OK, new Intent().setDataAndType(uri, IMAGE_JPEG));
binding.photoPreview.setTag(null); binding.photoPreview.setTag(null);
finish(); finish();
}); });

View File

@ -36,6 +36,7 @@ import com.nextcloud.talk.components.filebrowser.models.properties.NCPreview
import com.nextcloud.talk.components.filebrowser.models.properties.OCFavorite import com.nextcloud.talk.components.filebrowser.models.properties.OCFavorite
import com.nextcloud.talk.components.filebrowser.models.properties.OCId import com.nextcloud.talk.components.filebrowser.models.properties.OCId
import com.nextcloud.talk.components.filebrowser.models.properties.OCSize import com.nextcloud.talk.components.filebrowser.models.properties.OCSize
import com.nextcloud.talk.utils.Mimetype.FOLDER
import kotlinx.android.parcel.Parcelize import kotlinx.android.parcel.Parcelize
import java.io.File import java.io.File
@ -73,7 +74,7 @@ data class BrowserFile(
browserFile.isAllowedToReShare = true browserFile.isAllowedToReShare = true
} }
if (TextUtils.isEmpty(browserFile.mimeType) && !browserFile.isFile) { if (TextUtils.isEmpty(browserFile.mimeType) && !browserFile.isFile) {
browserFile.mimeType = "inode/directory" browserFile.mimeType = FOLDER
} }
return browserFile return browserFile

View File

@ -44,6 +44,7 @@ import com.nextcloud.talk.dagger.modules.RestModule.MagicAuthenticator
import com.nextcloud.talk.models.database.UserEntity import com.nextcloud.talk.models.database.UserEntity
import com.nextcloud.talk.remotefilebrowser.model.RemoteFileBrowserItem import com.nextcloud.talk.remotefilebrowser.model.RemoteFileBrowserItem
import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.ApiUtils
import com.nextcloud.talk.utils.Mimetype.FOLDER
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import java.io.File import java.io.File
@ -130,7 +131,7 @@ class ReadFolderListingOperation(okHttpClient: OkHttpClient, currentUser: UserEn
remoteFileBrowserItem.isAllowedToReShare = true remoteFileBrowserItem.isAllowedToReShare = true
} }
if (TextUtils.isEmpty(remoteFileBrowserItem.mimeType) && !remoteFileBrowserItem.isFile) { if (TextUtils.isEmpty(remoteFileBrowserItem.mimeType) && !remoteFileBrowserItem.isFile) {
remoteFileBrowserItem.mimeType = "inode/directory" remoteFileBrowserItem.mimeType = FOLDER
} }
return remoteFileBrowserItem return remoteFileBrowserItem

View File

@ -147,6 +147,8 @@ import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers; import io.reactivex.schedulers.Schedulers;
import retrofit2.HttpException; import retrofit2.HttpException;
import static com.nextcloud.talk.utils.Mimetype.TEXT_PLAIN;
@AutoInjector(NextcloudTalkApplication.class) @AutoInjector(NextcloudTalkApplication.class)
public class ConversationsListController extends BaseController implements FlexibleAdapter.OnItemClickListener, FlexibleAdapter.OnItemLongClickListener, ConversationMenuInterface { public class ConversationsListController extends BaseController implements FlexibleAdapter.OnItemClickListener, FlexibleAdapter.OnItemLongClickListener, ConversationMenuInterface {
@ -1099,7 +1101,7 @@ public class ConversationsListController extends BaseController implements Flexi
|| Intent.ACTION_SEND_MULTIPLE.equals(intent.getAction())) { || Intent.ACTION_SEND_MULTIPLE.equals(intent.getAction())) {
try { try {
String mimeType = intent.getType(); String mimeType = intent.getType();
if ("text/plain".equals(mimeType) && (intent.getStringExtra(Intent.EXTRA_TEXT) != null)) { if (TEXT_PLAIN.equals(mimeType) && (intent.getStringExtra(Intent.EXTRA_TEXT) != null)) {
// Share from Google Chrome sets text/plain MIME type, but also provides a content:// URI // Share from Google Chrome sets text/plain MIME type, but also provides a content:// URI
// with a *screenshot* of the current page in getClipData(). // with a *screenshot* of the current page in getClipData().
// Here we assume that when sharing a web page the user would prefer to send the URL // Here we assume that when sharing a web page the user would prefer to send the URL

View File

@ -71,6 +71,9 @@ import com.nextcloud.talk.ui.dialog.ScopeDialog
import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.ApiUtils
import com.nextcloud.talk.utils.DisplayUtils import com.nextcloud.talk.utils.DisplayUtils
import com.nextcloud.talk.utils.FileUtils import com.nextcloud.talk.utils.FileUtils
import com.nextcloud.talk.utils.Mimetype.IMAGE_JPG
import com.nextcloud.talk.utils.Mimetype.IMAGE_PREFIX
import com.nextcloud.talk.utils.Mimetype.IMAGE_PREFIX_GENERIC
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_MIME_TYPE_FILTER import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_MIME_TYPE_FILTER
import com.nextcloud.talk.utils.database.user.UserUtils import com.nextcloud.talk.utils.database.user.UserUtils
import io.reactivex.Observer import io.reactivex.Observer
@ -482,7 +485,7 @@ class ProfileController : NewBaseController(R.layout.controller_profile) {
private fun showBrowserScreen() { private fun showBrowserScreen() {
val bundle = Bundle() val bundle = Bundle()
bundle.putString(KEY_MIME_TYPE_FILTER, "image/") bundle.putString(KEY_MIME_TYPE_FILTER, IMAGE_PREFIX)
val avatarIntent = Intent(activity, RemoteFileBrowserActivity::class.java) val avatarIntent = Intent(activity, RemoteFileBrowserActivity::class.java)
avatarIntent.putExtras(bundle) avatarIntent.putExtras(bundle)
@ -565,10 +568,13 @@ class ProfileController : NewBaseController(R.layout.controller_profile) {
private fun uploadAvatar(file: File?) { private fun uploadAvatar(file: File?) {
val builder = MultipartBody.Builder() val builder = MultipartBody.Builder()
builder.setType(MultipartBody.FORM) builder.setType(MultipartBody.FORM)
builder.addFormDataPart("files[]", file!!.name, RequestBody.create("image/*".toMediaTypeOrNull(), file)) builder.addFormDataPart(
"files[]", file!!.name,
RequestBody.create(IMAGE_PREFIX_GENERIC.toMediaTypeOrNull(), file)
)
val filePart: MultipartBody.Part = MultipartBody.Part.createFormData( val filePart: MultipartBody.Part = MultipartBody.Part.createFormData(
"files[]", file.name, "files[]", file.name,
RequestBody.create("image/jpg".toMediaTypeOrNull(), file) RequestBody.create(IMAGE_JPG.toMediaTypeOrNull(), file)
) )
// upload file // upload file

View File

@ -37,6 +37,7 @@ import com.nextcloud.talk.utils.ApiUtils
import com.nextcloud.talk.utils.DateUtils.getLocalDateTimeStringFromTimestamp import com.nextcloud.talk.utils.DateUtils.getLocalDateTimeStringFromTimestamp
import com.nextcloud.talk.utils.DisplayUtils import com.nextcloud.talk.utils.DisplayUtils
import com.nextcloud.talk.utils.DrawableUtils.getDrawableResourceIdForMimeType import com.nextcloud.talk.utils.DrawableUtils.getDrawableResourceIdForMimeType
import com.nextcloud.talk.utils.Mimetype.FOLDER
@AutoInjector(NextcloudTalkApplication::class) @AutoInjector(NextcloudTalkApplication::class)
class RemoteFileBrowserItemsListViewHolder( class RemoteFileBrowserItemsListViewHolder(
@ -143,7 +144,7 @@ class RemoteFileBrowserItemsListViewHolder(
} }
private fun calculateClickability(item: RemoteFileBrowserItem, selectableItem: Boolean) { private fun calculateClickability(item: RemoteFileBrowserItem, selectableItem: Boolean) {
clickable = selectableItem || "inode/directory" == item.mimeType clickable = selectableItem || FOLDER == item.mimeType
} }
companion object { companion object {

View File

@ -29,6 +29,7 @@ import androidx.lifecycle.ViewModel
import com.nextcloud.talk.remotefilebrowser.model.RemoteFileBrowserItem import com.nextcloud.talk.remotefilebrowser.model.RemoteFileBrowserItem
import com.nextcloud.talk.remotefilebrowser.repositories.RemoteFileBrowserItemsRepository import com.nextcloud.talk.remotefilebrowser.repositories.RemoteFileBrowserItemsRepository
import com.nextcloud.talk.utils.FileSortOrder import com.nextcloud.talk.utils.FileSortOrder
import com.nextcloud.talk.utils.Mimetype.FOLDER
import com.nextcloud.talk.utils.preferences.AppPreferences import com.nextcloud.talk.utils.preferences.AppPreferences
import io.reactivex.Observer import io.reactivex.Observer
import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.android.schedulers.AndroidSchedulers
@ -171,7 +172,7 @@ class RemoteFileBrowserItemsViewModel @Inject constructor(
} }
fun onItemClicked(remoteFileBrowserItem: RemoteFileBrowserItem) { fun onItemClicked(remoteFileBrowserItem: RemoteFileBrowserItem) {
if (remoteFileBrowserItem.mimeType == MIME_DIRECTORY) { if (remoteFileBrowserItem.mimeType == FOLDER) {
changePath(remoteFileBrowserItem.path!!) changePath(remoteFileBrowserItem.path!!)
} else { } else {
toggleBrowserItemSelection(remoteFileBrowserItem.path!!) toggleBrowserItemSelection(remoteFileBrowserItem.path!!)
@ -225,6 +226,5 @@ class RemoteFileBrowserItemsViewModel @Inject constructor(
companion object { companion object {
private val TAG = RemoteFileBrowserItemsViewModel::class.simpleName private val TAG = RemoteFileBrowserItemsViewModel::class.simpleName
private const val ROOT_PATH = "/" private const val ROOT_PATH = "/"
private const val MIME_DIRECTORY = "inode/directory"
} }
} }

View File

@ -57,6 +57,7 @@ import com.nextcloud.talk.jobs.LeaveConversationWorker
import com.nextcloud.talk.models.database.CapabilitiesUtil import com.nextcloud.talk.models.database.CapabilitiesUtil
import com.nextcloud.talk.models.database.UserEntity import com.nextcloud.talk.models.database.UserEntity
import com.nextcloud.talk.models.json.conversations.Conversation import com.nextcloud.talk.models.json.conversations.Conversation
import com.nextcloud.talk.utils.Mimetype.TEXT_PLAIN
import com.nextcloud.talk.utils.ShareUtils import com.nextcloud.talk.utils.ShareUtils
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_INTERNAL_USER_ID import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_INTERNAL_USER_ID
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_OPERATION_CODE import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_OPERATION_CODE
@ -242,7 +243,7 @@ class ConversationsListBottomDialog(
binding.conversationOperationShareLink.setOnClickListener { binding.conversationOperationShareLink.setOnClickListener {
val sendIntent: Intent = Intent().apply { val sendIntent: Intent = Intent().apply {
action = Intent.ACTION_SEND action = Intent.ACTION_SEND
type = "text/plain" type = TEXT_PLAIN
putExtra( putExtra(
Intent.EXTRA_SUBJECT, Intent.EXTRA_SUBJECT,
String.format( String.format(

View File

@ -21,7 +21,11 @@
package com.nextcloud.talk.utils package com.nextcloud.talk.utils
import com.nextcloud.talk.R import com.nextcloud.talk.R
import java.util.HashMap import com.nextcloud.talk.utils.Mimetype.AUDIO_PREFIX
import com.nextcloud.talk.utils.Mimetype.FOLDER
import com.nextcloud.talk.utils.Mimetype.IMAGE_PREFIX
import com.nextcloud.talk.utils.Mimetype.TEXT_PREFIX
import com.nextcloud.talk.utils.Mimetype.VIDEO_PREFIX
object DrawableUtils { object DrawableUtils {
@ -140,7 +144,7 @@ object DrawableUtils {
drawableMap["web"] = R.drawable.ic_mimetype_text_code drawableMap["web"] = R.drawable.ic_mimetype_text_code
drawableMap["application/internet-shortcut"] = R.drawable.ic_mimetype_link drawableMap["application/internet-shortcut"] = R.drawable.ic_mimetype_link
drawableMap["inode/directory"] = R.drawable.ic_mimetype_folder drawableMap[FOLDER] = R.drawable.ic_mimetype_folder
drawableMap["unknown"] = R.drawable.ic_mimetype_file drawableMap["unknown"] = R.drawable.ic_mimetype_file
drawableMap["application/pdf"] = R.drawable.ic_mimetype_application_pdf drawableMap["application/pdf"] = R.drawable.ic_mimetype_application_pdf
@ -149,7 +153,7 @@ object DrawableUtils {
} }
if ("DIR" == localMimetype) { if ("DIR" == localMimetype) {
localMimetype = "inode/directory" localMimetype = FOLDER
return drawableMap[localMimetype]!! return drawableMap[localMimetype]!!
} }
@ -157,19 +161,19 @@ object DrawableUtils {
return drawableMap[localMimetype]!! return drawableMap[localMimetype]!!
} }
if (localMimetype.startsWith("image/")) { if (localMimetype.startsWith(IMAGE_PREFIX)) {
return R.drawable.ic_mimetype_image return R.drawable.ic_mimetype_image
} }
if (localMimetype.startsWith("video/")) { if (localMimetype.startsWith(VIDEO_PREFIX)) {
return R.drawable.ic_mimetype_video return R.drawable.ic_mimetype_video
} }
if (localMimetype.startsWith("text/")) { if (localMimetype.startsWith(TEXT_PREFIX)) {
return R.drawable.ic_mimetype_text return R.drawable.ic_mimetype_text
} }
return if (localMimetype.startsWith("audio")) { return if (localMimetype.startsWith(AUDIO_PREFIX)) {
R.drawable.ic_mimetype_audio R.drawable.ic_mimetype_audio
} else drawableMap["unknown"]!! } else drawableMap["unknown"]!!
} }

View File

@ -47,16 +47,28 @@ import com.nextcloud.talk.models.database.CapabilitiesUtil
import com.nextcloud.talk.models.database.UserEntity import com.nextcloud.talk.models.database.UserEntity
import com.nextcloud.talk.models.json.chat.ChatMessage import com.nextcloud.talk.models.json.chat.ChatMessage
import com.nextcloud.talk.utils.AccountUtils.canWeOpenFilesApp import com.nextcloud.talk.utils.AccountUtils.canWeOpenFilesApp
import com.nextcloud.talk.utils.Mimetype.AUDIO_MPEG
import com.nextcloud.talk.utils.Mimetype.AUDIO_OGG
import com.nextcloud.talk.utils.Mimetype.AUDIO_PREFIX
import com.nextcloud.talk.utils.Mimetype.AUDIO_WAV
import com.nextcloud.talk.utils.Mimetype.IMAGE_GIF
import com.nextcloud.talk.utils.Mimetype.IMAGE_JPEG
import com.nextcloud.talk.utils.Mimetype.IMAGE_PNG
import com.nextcloud.talk.utils.Mimetype.TEXT_MARKDOWN
import com.nextcloud.talk.utils.Mimetype.TEXT_PLAIN
import com.nextcloud.talk.utils.Mimetype.VIDEO_MP4
import com.nextcloud.talk.utils.Mimetype.VIDEO_OGG
import com.nextcloud.talk.utils.Mimetype.VIDEO_QUICKTIME
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ACCOUNT import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ACCOUNT
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_FILE_ID import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_FILE_ID
import java.io.File import java.io.File
import java.util.concurrent.ExecutionException import java.util.concurrent.ExecutionException
/* /*
Usage of this class forces us to do things at one location which should be separated in a activity and view model. * Usage of this class forces us to do things at one location which should be separated in a activity and view model.
*
Example: * Example:
- SharedItemsViewHolder * - SharedItemsViewHolder
*/ */
class FileViewerUtils(private val context: Context, private val userEntity: UserEntity) { class FileViewerUtils(private val context: Context, private val userEntity: UserEntity) {
@ -143,19 +155,19 @@ class FileViewerUtils(private val context: Context, private val userEntity: User
private fun openFileByMimetype(filename: String, mimetype: String?) { private fun openFileByMimetype(filename: String, mimetype: String?) {
if (mimetype != null) { if (mimetype != null) {
when (mimetype) { when (mimetype) {
"audio/mpeg", AUDIO_MPEG,
"audio/wav", AUDIO_WAV,
"audio/ogg", AUDIO_OGG,
"video/mp4", VIDEO_MP4,
"video/quicktime", VIDEO_QUICKTIME,
"video/ogg" VIDEO_OGG
-> openMediaView(filename, mimetype) -> openMediaView(filename, mimetype)
"image/png", IMAGE_PNG,
"image/jpeg", IMAGE_JPEG,
"image/gif" IMAGE_GIF
-> openImageView(filename, mimetype) -> openImageView(filename, mimetype)
"text/markdown", TEXT_MARKDOWN,
"text/plain" TEXT_PLAIN
-> openTextView(filename, mimetype) -> openTextView(filename, mimetype)
else else
-> openFileByExternalApp(filename, mimetype) -> openFileByExternalApp(filename, mimetype)
@ -249,26 +261,31 @@ class FileViewerUtils(private val context: Context, private val userEntity: User
fun isSupportedForInternalViewer(mimetype: String?): Boolean { fun isSupportedForInternalViewer(mimetype: String?): Boolean {
return when (mimetype) { return when (mimetype) {
"image/png", "image/jpeg", IMAGE_PNG,
"image/gif", "audio/mpeg", IMAGE_JPEG,
"audio/wav", "audio/ogg", IMAGE_GIF,
"video/mp4", "video/quicktime", AUDIO_MPEG,
"video/ogg", "text/markdown", AUDIO_WAV,
"text/plain" -> true AUDIO_OGG,
VIDEO_MP4,
VIDEO_QUICKTIME,
VIDEO_OGG,
TEXT_MARKDOWN,
TEXT_PLAIN -> true
else -> false else -> false
} }
} }
private fun isGif(mimetype: String): Boolean { private fun isGif(mimetype: String): Boolean {
return "image/gif" == mimetype return IMAGE_GIF == mimetype
} }
private fun isMarkdown(mimetype: String): Boolean { private fun isMarkdown(mimetype: String): Boolean {
return "text/markdown" == mimetype return TEXT_MARKDOWN == mimetype
} }
private fun isAudioOnly(mimetype: String): Boolean { private fun isAudioOnly(mimetype: String): Boolean {
return mimetype.startsWith("audio") return mimetype.startsWith(AUDIO_PREFIX)
} }
@SuppressLint("LongLogTag") @SuppressLint("LongLogTag")
@ -416,6 +433,5 @@ class FileViewerUtils(private val context: Context, private val userEntity: User
companion object { companion object {
private val TAG = FileViewerUtils::class.simpleName private val TAG = FileViewerUtils::class.simpleName
const val KEY_ID = "id"
} }
} }

View File

@ -29,6 +29,9 @@ import android.view.inputmethod.InputConnection
import androidx.core.view.inputmethod.EditorInfoCompat import androidx.core.view.inputmethod.EditorInfoCompat
import androidx.core.view.inputmethod.InputConnectionCompat import androidx.core.view.inputmethod.InputConnectionCompat
import androidx.emoji.widget.EmojiEditText import androidx.emoji.widget.EmojiEditText
import com.nextcloud.talk.utils.Mimetype.IMAGE_GIF
import com.nextcloud.talk.utils.Mimetype.IMAGE_JPEG
import com.nextcloud.talk.utils.Mimetype.IMAGE_PNG
/* /*
Subclass of EmojiEditText with support for image keyboards - primarily for GIF handling. ;-) Subclass of EmojiEditText with support for image keyboards - primarily for GIF handling. ;-)
@ -48,7 +51,7 @@ class ImageEmojiEditText : EmojiEditText {
val ic: InputConnection = super.onCreateInputConnection(editorInfo) val ic: InputConnection = super.onCreateInputConnection(editorInfo)
EditorInfoCompat.setContentMimeTypes(editorInfo, arrayOf("image/gif", "image/jpeg", "image/png")) EditorInfoCompat.setContentMimeTypes(editorInfo, arrayOf(IMAGE_GIF, IMAGE_JPEG, IMAGE_PNG))
val callback = val callback =
InputConnectionCompat.OnCommitContentListener { inputContentInfo, flags, _ -> InputConnectionCompat.OnCommitContentListener { inputContentInfo, flags, _ ->

View File

@ -52,7 +52,7 @@ object LoggingUtils {
// val mailto = "android@nextcloud.com" // val mailto = "android@nextcloud.com"
// emailIntent.putExtra(Intent.EXTRA_EMAIL, arrayOf(mailto)) // emailIntent.putExtra(Intent.EXTRA_EMAIL, arrayOf(mailto))
// emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Talk logs") // emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Talk logs")
// emailIntent.type = "text/plain" // emailIntent.type = TEXT_PLAIN
// emailIntent.flags = Intent.FLAG_GRANT_READ_URI_PERMISSION // emailIntent.flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
// val uri: Uri // val uri: Uri
// //

View File

@ -0,0 +1,50 @@
/*
* Nextcloud Talk application
*
* @author Andy Scherzinger
* Copyright (C) 2022 Andy Scherzinger <info@andy-scherzinger.de>
*
* This program is free software: you can redistribute it and/or modify
* 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.
*
* This program is distributed in the hope that it will be useful,
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.nextcloud.talk.utils
object Mimetype {
const val IMAGE_PREFIX = "image/"
const val VIDEO_PREFIX = "video/"
const val TEXT_PREFIX = "text/"
const val AUDIO_PREFIX = "audio"
const val IMAGE_PREFIX_GENERIC = "image/*"
const val VIDEO_PREFIX_GENERIC = "video/*"
const val TEXT_PREFIX_GENERIC = "text/*"
const val FOLDER = "inode/directory"
const val IMAGE_PNG = "image/png"
const val IMAGE_JPEG = "image/jpeg"
const val IMAGE_JPG = "image/jpg"
const val IMAGE_GIF = "image/gif"
const val VIDEO_MP4 = "video/mp4"
const val VIDEO_QUICKTIME = "video/quicktime"
const val VIDEO_OGG = "video/ogg"
const val TEXT_MARKDOWN = "text/markdown"
const val TEXT_PLAIN = "text/plain"
const val AUDIO_MPEG = "audio/mpeg"
const val AUDIO_WAV = "audio/wav"
const val AUDIO_OGG = "audio/ogg"
}