mirror of
https://github.com/nextcloud/talk-android
synced 2025-06-19 19:49:33 +01:00
add fallback image for mimetype if drawee request fails
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
This commit is contained in:
parent
a64e22c820
commit
734f33caba
@ -1,18 +1,23 @@
|
|||||||
package com.nextcloud.talk.adapters
|
package com.nextcloud.talk.adapters
|
||||||
|
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
|
import android.util.Log
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import com.facebook.drawee.backends.pipeline.Fresco
|
import com.facebook.drawee.backends.pipeline.Fresco
|
||||||
|
import com.facebook.drawee.controller.BaseControllerListener
|
||||||
|
import com.facebook.drawee.controller.ControllerListener
|
||||||
import com.facebook.drawee.interfaces.DraweeController
|
import com.facebook.drawee.interfaces.DraweeController
|
||||||
import com.facebook.drawee.view.SimpleDraweeView
|
import com.facebook.drawee.view.SimpleDraweeView
|
||||||
import com.facebook.imagepipeline.common.RotationOptions
|
import com.facebook.imagepipeline.common.RotationOptions
|
||||||
|
import com.facebook.imagepipeline.image.ImageInfo
|
||||||
import com.facebook.imagepipeline.request.ImageRequestBuilder
|
import com.facebook.imagepipeline.request.ImageRequestBuilder
|
||||||
import com.nextcloud.talk.databinding.SharedItemGridBinding
|
import com.nextcloud.talk.databinding.SharedItemGridBinding
|
||||||
import com.nextcloud.talk.repositories.SharedItem
|
import com.nextcloud.talk.repositories.SharedItem
|
||||||
|
import com.nextcloud.talk.utils.DrawableUtils
|
||||||
import com.nextcloud.talk.utils.DrawableUtils.getDrawableResourceIdForMimeType
|
import com.nextcloud.talk.utils.DrawableUtils.getDrawableResourceIdForMimeType
|
||||||
import com.nextcloud.talk.utils.FileViewerUtils
|
import com.nextcloud.talk.utils.FileViewerUtils
|
||||||
|
|
||||||
@ -44,16 +49,22 @@ class SharedItemsGridAdapter : RecyclerView.Adapter<SharedItemsGridAdapter.ViewH
|
|||||||
.setHeaders(authHeader)
|
.setHeaders(authHeader)
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
|
val listener: ControllerListener<ImageInfo?> = object : BaseControllerListener<ImageInfo?>() {
|
||||||
|
override fun onFailure(id: String, e: Throwable) {
|
||||||
|
Log.w(TAG, "Failed to load image. A static mimetype image will be used", e)
|
||||||
|
setStaticMimetypeImage(currentItem, holder)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
val draweeController: DraweeController = Fresco.newDraweeControllerBuilder()
|
val draweeController: DraweeController = Fresco.newDraweeControllerBuilder()
|
||||||
.setOldController(holder.binding.image.controller)
|
.setOldController(holder.binding.image.controller)
|
||||||
.setAutoPlayAnimations(true)
|
.setAutoPlayAnimations(true)
|
||||||
.setImageRequest(imageRequest)
|
.setImageRequest(imageRequest)
|
||||||
|
.setControllerListener(listener)
|
||||||
.build()
|
.build()
|
||||||
holder.binding.image.controller = draweeController
|
holder.binding.image.controller = draweeController
|
||||||
} else {
|
} else {
|
||||||
val drawableResourceId = getDrawableResourceIdForMimeType(currentItem.mimeType)
|
setStaticMimetypeImage(currentItem, holder)
|
||||||
val drawable = ContextCompat.getDrawable(holder.binding.image.context, drawableResourceId)
|
|
||||||
holder.binding.image.hierarchy.setPlaceholderImage(drawable)
|
|
||||||
}
|
}
|
||||||
holder.binding.image.setOnClickListener {
|
holder.binding.image.setOnClickListener {
|
||||||
val fileViewerUtils = FileViewerUtils(it.context, currentItem.userEntity)
|
val fileViewerUtils = FileViewerUtils(it.context, currentItem.userEntity)
|
||||||
@ -72,6 +83,15 @@ class SharedItemsGridAdapter : RecyclerView.Adapter<SharedItemsGridAdapter.ViewH
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun setStaticMimetypeImage(
|
||||||
|
currentItem: SharedItem,
|
||||||
|
holder: SharedItemsGridAdapter.ViewHolder
|
||||||
|
) {
|
||||||
|
val drawableResourceId = DrawableUtils.getDrawableResourceIdForMimeType(currentItem.mimeType)
|
||||||
|
val drawable = ContextCompat.getDrawable(holder.binding.image.context, drawableResourceId)
|
||||||
|
holder.binding.image.hierarchy.setPlaceholderImage(drawable)
|
||||||
|
}
|
||||||
|
|
||||||
override fun getItemCount(): Int {
|
override fun getItemCount(): Int {
|
||||||
return items.size
|
return items.size
|
||||||
}
|
}
|
||||||
|
@ -2,14 +2,18 @@ package com.nextcloud.talk.adapters
|
|||||||
|
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.text.format.Formatter
|
import android.text.format.Formatter
|
||||||
|
import android.util.Log
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import com.facebook.drawee.backends.pipeline.Fresco
|
import com.facebook.drawee.backends.pipeline.Fresco
|
||||||
|
import com.facebook.drawee.controller.BaseControllerListener
|
||||||
|
import com.facebook.drawee.controller.ControllerListener
|
||||||
import com.facebook.drawee.interfaces.DraweeController
|
import com.facebook.drawee.interfaces.DraweeController
|
||||||
import com.facebook.imagepipeline.common.RotationOptions
|
import com.facebook.imagepipeline.common.RotationOptions
|
||||||
|
import com.facebook.imagepipeline.image.ImageInfo
|
||||||
import com.facebook.imagepipeline.request.ImageRequestBuilder
|
import com.facebook.imagepipeline.request.ImageRequestBuilder
|
||||||
import com.nextcloud.talk.databinding.SharedItemListBinding
|
import com.nextcloud.talk.databinding.SharedItemListBinding
|
||||||
import com.nextcloud.talk.repositories.SharedItem
|
import com.nextcloud.talk.repositories.SharedItem
|
||||||
@ -55,16 +59,22 @@ class SharedItemsListAdapter : RecyclerView.Adapter<SharedItemsListAdapter.ViewH
|
|||||||
.setHeaders(authHeader)
|
.setHeaders(authHeader)
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
|
val listener: ControllerListener<ImageInfo?> = object : BaseControllerListener<ImageInfo?>() {
|
||||||
|
override fun onFailure(id: String, e: Throwable) {
|
||||||
|
Log.w(TAG, "Failed to load image. A static mimetype image will be used", e)
|
||||||
|
setStaticMimetypeImage(currentItem, holder)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
val draweeController: DraweeController = Fresco.newDraweeControllerBuilder()
|
val draweeController: DraweeController = Fresco.newDraweeControllerBuilder()
|
||||||
.setOldController(holder.binding.fileImage.controller)
|
.setOldController(holder.binding.fileImage.controller)
|
||||||
.setAutoPlayAnimations(true)
|
.setAutoPlayAnimations(true)
|
||||||
.setImageRequest(imageRequest)
|
.setImageRequest(imageRequest)
|
||||||
|
.setControllerListener(listener)
|
||||||
.build()
|
.build()
|
||||||
holder.binding.fileImage.controller = draweeController
|
holder.binding.fileImage.controller = draweeController
|
||||||
} else {
|
} else {
|
||||||
val drawableResourceId = DrawableUtils.getDrawableResourceIdForMimeType(currentItem.mimeType)
|
setStaticMimetypeImage(currentItem, holder)
|
||||||
val drawable = ContextCompat.getDrawable(holder.binding.fileImage.context, drawableResourceId)
|
|
||||||
holder.binding.fileImage.hierarchy.setPlaceholderImage(drawable)
|
|
||||||
}
|
}
|
||||||
holder.binding.fileItem.setOnClickListener {
|
holder.binding.fileItem.setOnClickListener {
|
||||||
val fileViewerUtils = FileViewerUtils(it.context, currentItem.userEntity)
|
val fileViewerUtils = FileViewerUtils(it.context, currentItem.userEntity)
|
||||||
@ -79,6 +89,15 @@ class SharedItemsListAdapter : RecyclerView.Adapter<SharedItemsListAdapter.ViewH
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun setStaticMimetypeImage(
|
||||||
|
currentItem: SharedItem,
|
||||||
|
holder: ViewHolder
|
||||||
|
) {
|
||||||
|
val drawableResourceId = DrawableUtils.getDrawableResourceIdForMimeType(currentItem.mimeType)
|
||||||
|
val drawable = ContextCompat.getDrawable(holder.binding.fileImage.context, drawableResourceId)
|
||||||
|
holder.binding.fileImage.hierarchy.setPlaceholderImage(drawable)
|
||||||
|
}
|
||||||
|
|
||||||
override fun getItemCount(): Int {
|
override fun getItemCount(): Int {
|
||||||
return items.size
|
return items.size
|
||||||
}
|
}
|
||||||
|
@ -45,11 +45,8 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:padding="4dp"
|
android:padding="4dp"
|
||||||
android:src="@drawable/ic_mimetype_file"
|
|
||||||
app:placeholderImageScaleType="fitCenter"
|
app:placeholderImageScaleType="fitCenter"
|
||||||
fresco:actualImageScaleType="centerCrop"
|
fresco:actualImageScaleType="centerCrop"
|
||||||
fresco:failureImage="@drawable/ic_mimetype_file"
|
|
||||||
fresco:placeholderImage="@drawable/ic_mimetype_file"
|
|
||||||
fresco:roundedCornerRadius="4dp" />
|
fresco:roundedCornerRadius="4dp" />
|
||||||
|
|
||||||
<ProgressBar
|
<ProgressBar
|
||||||
|
@ -45,12 +45,9 @@
|
|||||||
android:layout_width="@dimen/mediatab_file_icon_size"
|
android:layout_width="@dimen/mediatab_file_icon_size"
|
||||||
android:layout_height="@dimen/mediatab_file_icon_size"
|
android:layout_height="@dimen/mediatab_file_icon_size"
|
||||||
android:padding="4dp"
|
android:padding="4dp"
|
||||||
android:src="@drawable/ic_mimetype_file"
|
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
app:placeholderImageScaleType="fitCenter"
|
app:placeholderImageScaleType="fitCenter"
|
||||||
fresco:actualImageScaleType="centerCrop"
|
fresco:actualImageScaleType="centerCrop"
|
||||||
fresco:failureImage="@drawable/ic_mimetype_file"
|
|
||||||
fresco:placeholderImage="@drawable/ic_mimetype_file"
|
|
||||||
fresco:roundedCornerRadius="4dp"
|
fresco:roundedCornerRadius="4dp"
|
||||||
tools:src="@drawable/ic_call_black_24dp"/>
|
tools:src="@drawable/ic_call_black_24dp"/>
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user