Skip to content

Commit a73ebf8

Browse files
committed
use correct mime type
Signed-off-by: alperozturk <[email protected]>
1 parent 926a11a commit a73ebf8

File tree

4 files changed

+54
-48
lines changed

4 files changed

+54
-48
lines changed

app/src/main/java/com/nextcloud/client/jobs/gallery/GalleryImageGenerationJob.kt

Lines changed: 5 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,10 @@
88
package com.nextcloud.client.jobs.gallery
99

1010
import android.graphics.Bitmap
11-
import android.graphics.Color
12-
import android.graphics.drawable.BitmapDrawable
1311
import android.widget.ImageView
1412
import androidx.core.content.ContextCompat
15-
import androidx.core.content.res.ResourcesCompat
16-
import androidx.core.graphics.drawable.toDrawable
1713
import com.nextcloud.client.account.User
14+
import com.nextcloud.utils.OCFileUtils
1815
import com.nextcloud.utils.allocationKilobyte
1916
import com.owncloud.android.MainApp
2017
import com.owncloud.android.R
@@ -24,9 +21,7 @@ import com.owncloud.android.datamodel.ThumbnailsCacheManager
2421
import com.owncloud.android.lib.common.OwnCloudClientManagerFactory
2522
import com.owncloud.android.lib.common.utils.Log_OC
2623
import com.owncloud.android.lib.resources.files.model.ImageDimension
27-
import com.owncloud.android.utils.BitmapUtils
2824
import com.owncloud.android.utils.MimeTypeUtil
29-
import com.owncloud.android.utils.theme.ViewThemeUtils
3025
import kotlinx.coroutines.Dispatchers
3126
import kotlinx.coroutines.sync.Semaphore
3227
import kotlinx.coroutines.sync.withPermit
@@ -47,8 +42,7 @@ class GalleryImageGenerationJob(private val user: User, private val storageManag
4742
suspend fun run(
4843
file: OCFile,
4944
imageView: ImageView,
50-
width: Int,
51-
viewThemeUtils: ViewThemeUtils,
45+
imageDimension: Pair<Int, Int>,
5246
listener: GalleryImageGenerationListener
5347
) {
5448
try {
@@ -59,7 +53,7 @@ class GalleryImageGenerationJob(private val user: User, private val storageManag
5953
return
6054
}
6155

62-
val bitmap: Bitmap? = getBitmap(imageView, file, width, viewThemeUtils, onThumbnailGeneration = {
56+
val bitmap: Bitmap? = getBitmap(imageView, file, imageDimension, onThumbnailGeneration = {
6357
newImage = true
6458
})
6559

@@ -77,32 +71,10 @@ class GalleryImageGenerationJob(private val user: User, private val storageManag
7771
}
7872
}
7973

80-
private fun getPlaceholder(file: OCFile, width: Int, viewThemeUtils: ViewThemeUtils): BitmapDrawable {
81-
val context = MainApp.getAppContext()
82-
83-
val placeholder = MimeTypeUtil.getFileTypeIcon(
84-
file.mimeType,
85-
file.fileName,
86-
context,
87-
viewThemeUtils
88-
)
89-
?: ResourcesCompat.getDrawable(context.resources, R.drawable.file_image, null)
90-
?: Color.GRAY.toDrawable()
91-
92-
val bitmap = BitmapUtils.drawableToBitmap(
93-
placeholder,
94-
width / 2,
95-
width / 2
96-
)
97-
98-
return BitmapDrawable(context.resources, bitmap)
99-
}
100-
10174
private suspend fun getBitmap(
10275
imageView: ImageView,
10376
file: OCFile,
104-
width: Int,
105-
viewThemeUtils: ViewThemeUtils,
77+
imageDimension: Pair<Int, Int>,
10678
onThumbnailGeneration: () -> Unit
10779
): Bitmap? = withContext(Dispatchers.IO) {
10880
if (file.remoteId == null && !file.isPreviewAvailable) {
@@ -123,7 +95,7 @@ class GalleryImageGenerationJob(private val user: User, private val storageManag
12395

12496
// only add placeholder if new thumbnail will be generated because cached image will appear so quickly
12597
withContext(Dispatchers.Main) {
126-
val placeholderDrawable = getPlaceholder(file, width, viewThemeUtils)
98+
val placeholderDrawable = OCFileUtils.getMediaPlaceholder(file, imageDimension)
12799
imageView.setImageDrawable(placeholderDrawable)
128100
}
129101

app/src/main/java/com/nextcloud/utils/OCFileUtils.kt

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,18 @@
66
*/
77
package com.nextcloud.utils
88

9+
import android.graphics.Color
10+
import android.graphics.drawable.BitmapDrawable
11+
import androidx.core.content.ContextCompat
12+
import androidx.core.graphics.drawable.toBitmap
13+
import androidx.core.graphics.drawable.toDrawable
914
import androidx.exifinterface.media.ExifInterface
15+
import com.owncloud.android.MainApp
16+
import com.owncloud.android.R
1017
import com.owncloud.android.datamodel.OCFile
1118
import com.owncloud.android.lib.common.utils.Log_OC
1219
import com.owncloud.android.utils.BitmapUtils
20+
import com.owncloud.android.utils.MimeTypeUtil
1321

1422
object OCFileUtils {
1523
private const val TAG = "OCFileUtils"
@@ -22,9 +30,12 @@ object OCFileUtils {
2230
if (!ocFile.exists()) {
2331
ocFile.imageDimension?.width?.let { w ->
2432
ocFile.imageDimension?.height?.let { h ->
33+
Log_OC.d(TAG, "Image dimensions are used width: $w and height: $h")
2534
return w.toInt() to h.toInt()
2635
}
2736
}
37+
38+
Log_OC.d(TAG, "Default size is used: $defaultThumbnailSize")
2839
val size = defaultThumbnailSize.toInt().coerceAtLeast(1)
2940
return size to size
3041
}
@@ -53,4 +64,28 @@ object OCFileUtils {
5364
Log_OC.d(TAG, "-----------------------------")
5465
}
5566
}
67+
68+
fun getMediaPlaceholder(file: OCFile, imageDimension: Pair<Int, Int>): BitmapDrawable {
69+
val context = MainApp.getAppContext()
70+
71+
val drawableId = if (MimeTypeUtil.isImage(file)) {
72+
R.drawable.file_image
73+
} else if (MimeTypeUtil.isVideo(file)) {
74+
R.drawable.file_movie
75+
} else {
76+
R.drawable.file
77+
}
78+
79+
val drawable = ContextCompat.getDrawable(context, drawableId)
80+
?: return Color.GRAY.toDrawable().toBitmap(imageDimension.first, imageDimension.second)
81+
.toDrawable(context.resources)
82+
83+
val bitmap = BitmapUtils.drawableToBitmap(
84+
drawable,
85+
imageDimension.first,
86+
imageDimension.second
87+
)
88+
89+
return bitmap.toDrawable(context.resources)
90+
}
5691
}

app/src/main/java/com/owncloud/android/ui/adapter/GalleryRowHolder.kt

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import android.view.ViewGroup
1414
import android.widget.FrameLayout
1515
import android.widget.ImageView
1616
import androidx.core.content.ContextCompat
17-
import androidx.core.content.res.ResourcesCompat
1817
import androidx.core.view.get
1918
import com.afollestad.sectionedrecyclerview.SectionedViewHolder
2019
import com.elyeproj.loaderviewlibrary.LoaderImageView
@@ -28,7 +27,6 @@ import com.owncloud.android.datamodel.FileDataStorageManager
2827
import com.owncloud.android.datamodel.GalleryRow
2928
import com.owncloud.android.datamodel.OCFile
3029
import com.owncloud.android.lib.resources.files.model.ImageDimension
31-
import com.owncloud.android.utils.BitmapUtils
3230
import com.owncloud.android.utils.DisplayUtils
3331
import com.owncloud.android.utils.theme.ViewThemeUtils
3432

@@ -52,12 +50,6 @@ class GalleryRowHolder(
5250
private val standardMargin by lazy { context.resources.getDimension(R.dimen.standard_margin) }
5351
private val checkBoxMargin by lazy { context.resources.getDimension(R.dimen.standard_quarter_padding) }
5452

55-
private val defaultBitmap by lazy {
56-
val fileDrawable = ResourcesCompat.getDrawable(context.resources, R.drawable.file_image, null)
57-
val thumbnailSize = defaultThumbnailSize.toInt()
58-
BitmapUtils.drawableToBitmap(fileDrawable, thumbnailSize, thumbnailSize)
59-
}
60-
6153
private val checkedDrawable by lazy {
6254
ContextCompat.getDrawable(context, R.drawable.ic_checkbox_marked)?.also {
6355
viewThemeUtils.platform.tintDrawable(context, it, ColorRole.PRIMARY)
@@ -78,7 +70,10 @@ class GalleryRowHolder(
7870
// Only rebuild if file count changed
7971
if (lastFileCount != requiredCount) {
8072
binding.rowLayout.removeAllViews()
81-
repeat(requiredCount) { binding.rowLayout.addView(getRowLayout()) }
73+
for (file in row.files) {
74+
val rowLayout = getRowLayout(file)
75+
binding.rowLayout.addView(rowLayout)
76+
}
8277
lastFileCount = requiredCount
8378
}
8479

@@ -93,7 +88,7 @@ class GalleryRowHolder(
9388
bind(currentRow)
9489
}
9590

96-
private fun getRowLayout(): FrameLayout {
91+
private fun getRowLayout(file: OCFile): FrameLayout {
9792
val checkbox = ImageView(context).apply {
9893
visibility = View.GONE
9994
layoutParams = FrameLayout.LayoutParams(
@@ -112,8 +107,13 @@ class GalleryRowHolder(
112107
invalidate()
113108
}
114109

110+
// FIXME using max height for row calculation is not always producing correct row ratio
111+
112+
// FIXME check from webdav --- image dimension must be available there thus no need to use default size
113+
val mediaSize = defaultThumbnailSize.toInt() to defaultThumbnailSize.toInt()
114+
val drawable = OCFileUtils.getMediaPlaceholder(file, mediaSize)
115115
val rowCellImageView = ImageView(context).apply {
116-
setImageBitmap(defaultBitmap)
116+
setImageDrawable(drawable)
117117
adjustViewBounds = true
118118
scaleType = ImageView.ScaleType.FIT_XY
119119
}
@@ -180,7 +180,7 @@ class GalleryRowHolder(
180180
thumbnail,
181181
file,
182182
this,
183-
width
183+
width to height
184184
)
185185

186186
// Update layout params only if they differ

app/src/main/java/com/owncloud/android/ui/adapter/OCFileListDelegate.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,16 +104,15 @@ class OCFileListDelegate(
104104
imageView: ImageView,
105105
file: OCFile,
106106
galleryRowHolder: GalleryRowHolder,
107-
width: Int
107+
imageDimension: Pair<Int, Int>
108108
) {
109109
imageView.tag = file.fileId
110110

111111
ioScope.launch {
112112
galleryImageGenerationJob.run(
113113
file,
114114
imageView,
115-
width,
116-
viewThemeUtils,
115+
imageDimension,
117116
object : GalleryImageGenerationListener {
118117
override fun onSuccess() {
119118
galleryRowHolder.binding.rowLayout.invalidate()

0 commit comments

Comments
 (0)