mirror of
https://github.com/nextcloud/talk-android
synced 2025-06-20 03:59:35 +01:00
Merge pull request #2140 from nextcloud/chore/noid/MimetypeCentralization
Centralize mime type definitions
This commit is contained in:
commit
07c30f0993
@ -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)))
|
||||||
|
@ -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)))
|
||||||
|
@ -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)))
|
||||||
|
@ -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();
|
||||||
});
|
});
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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 {
|
||||||
|
@ -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"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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(
|
||||||
|
@ -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"]!!
|
||||||
}
|
}
|
||||||
|
@ -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"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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, _ ->
|
||||||
|
@ -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
|
||||||
//
|
//
|
||||||
|
50
app/src/main/java/com/nextcloud/talk/utils/Mimetype.kt
Normal file
50
app/src/main/java/com/nextcloud/talk/utils/Mimetype.kt
Normal 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"
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user