Commit 008819d4 authored by Vladislav Bogdashkin's avatar Vladislav Bogdashkin 🎣

Merge branch 'feature/glide' into develop

parents 23fc8814 9e76476d
...@@ -77,10 +77,6 @@ dependencies { ...@@ -77,10 +77,6 @@ dependencies {
//Constraint Layout //Constraint Layout
implementation "androidx.constraintlayout:constraintlayout:$constrainLayoutVersion" implementation "androidx.constraintlayout:constraintlayout:$constrainLayoutVersion"
//image loading store and cashe by url: Picasso
implementation "com.squareup.picasso:picasso:$picassoVersion"
implementation 'jp.wasabeef:picasso-transformations:2.2.1'
//Logger: Timber //Logger: Timber
implementation "com.jakewharton.timber:timber:$timberVersion" implementation "com.jakewharton.timber:timber:$timberVersion"
...@@ -162,6 +158,7 @@ dependencies { ...@@ -162,6 +158,7 @@ dependencies {
//Glide //Glide
implementation "com.github.bumptech.glide:glide:$glideVersion" implementation "com.github.bumptech.glide:glide:$glideVersion"
implementation 'jp.wasabeef:glide-transformations:4.0.0'
annotationProcessor "com.github.bumptech.glide:compiler:$glideVersion" annotationProcessor "com.github.bumptech.glide:compiler:$glideVersion"
//Tests //Tests
......
...@@ -5,7 +5,6 @@ import com.biganto.visual.roompark.BuildConfig ...@@ -5,7 +5,6 @@ import com.biganto.visual.roompark.BuildConfig
import com.biganto.visual.roompark.di.dagger.AppComponent import com.biganto.visual.roompark.di.dagger.AppComponent
import com.biganto.visual.roompark.di.dagger.DaggerAppComponent import com.biganto.visual.roompark.di.dagger.DaggerAppComponent
import com.crashlytics.android.Crashlytics import com.crashlytics.android.Crashlytics
import com.squareup.picasso.Picasso
import dagger.android.AndroidInjector import dagger.android.AndroidInjector
import dagger.android.DaggerApplication import dagger.android.DaggerApplication
import timber.log.Timber import timber.log.Timber
...@@ -35,24 +34,6 @@ class RoomParkApplication : DaggerApplication() { ...@@ -35,24 +34,6 @@ class RoomParkApplication : DaggerApplication() {
if (BuildConfig.DEBUG) Timber.plant(Timber.DebugTree()) if (BuildConfig.DEBUG) Timber.plant(Timber.DebugTree())
else Timber.plant(CrashlyticsTree()) else Timber.plant(CrashlyticsTree())
val picassoBuilder = Picasso.Builder(this)
picassoBuilder.listener { _, uri, exception ->
Timber.e(exception)
Timber.e(exception, "PICASSO url = %s", uri.toString())
}
// Picasso.Builder creates the Picasso object to do the actual requests
val picasso = picassoBuilder.build()
try {
Picasso.setSingletonInstance(picasso)
} catch (ignored: IllegalStateException) {
Timber.e(ignored, "PICASSO")
// Picasso instance was already set
// cannot set it after Picasso.with(Context) was already in use
}
} }
} }
......
...@@ -10,7 +10,6 @@ import com.biganto.visual.roompark.data.repository.db.IDb ...@@ -10,7 +10,6 @@ import com.biganto.visual.roompark.data.repository.db.IDb
import com.biganto.visual.roompark.data.repository.db.requrey.DbModule import com.biganto.visual.roompark.data.repository.db.requrey.DbModule
import com.biganto.visual.roompark.data.repository.file.FileModule import com.biganto.visual.roompark.data.repository.file.FileModule
import com.biganto.visual.roompark.domain.contract.* import com.biganto.visual.roompark.domain.contract.*
import com.squareup.picasso.Picasso
import dagger.BindsInstance import dagger.BindsInstance
import dagger.Component import dagger.Component
import dagger.android.AndroidInjectionModule import dagger.android.AndroidInjectionModule
...@@ -38,7 +37,6 @@ import javax.inject.Singleton ...@@ -38,7 +37,6 @@ import javax.inject.Singleton
AndroidInjectionModule::class, AndroidInjectionModule::class,
AndroidSupportInjectionModule::class, AndroidSupportInjectionModule::class,
// MappingProvider::class, // MappingProvider::class,
PicassoModule::class,
ActivityModule::class, ActivityModule::class,
ContractRepositoryModule::class, ContractRepositoryModule::class,
AppActivityModule ::class, AppActivityModule ::class,
...@@ -64,8 +62,6 @@ interface AppComponent : AndroidInjector<RoomParkApplication>{ ...@@ -64,8 +62,6 @@ interface AppComponent : AndroidInjector<RoomParkApplication>{
fun provideAppContext():Application fun provideAppContext():Application
fun providePicassoAsync(): Picasso
fun provideFileSystem(): FileModule fun provideFileSystem(): FileModule
......
package com.biganto.visual.roompark.di.dagger
import android.app.Application
import com.squareup.picasso.Picasso
import dagger.Module
import dagger.Provides
import java.util.concurrent.Executors
import javax.inject.Singleton
/**
* Created by Vladislav Bogdashkin on 16.12.2019.
*/
private const val THREAD_POOL_COUNT = 4
@Module
class PicassoModule{
@Provides
@Singleton
fun providePicassoAsyncSingleton(context: Application): Picasso {
val executor = Executors.newFixedThreadPool(THREAD_POOL_COUNT)
return Picasso.Builder(context)
.executor(executor)
.build()
}
}
\ No newline at end of file
package com.biganto.visual.roompark.presentation.screen.albums package com.biganto.visual.roompark.presentation.screen.albums
import android.graphics.Bitmap import android.content.Context
import android.graphics.drawable.BitmapDrawable
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
...@@ -19,22 +18,22 @@ import com.biganto.visual.roompark.domain.model.PhotoModel ...@@ -19,22 +18,22 @@ import com.biganto.visual.roompark.domain.model.PhotoModel
import com.biganto.visual.roompark.presentation.screen.albums.util.AlbumListAdapter import com.biganto.visual.roompark.presentation.screen.albums.util.AlbumListAdapter
import com.biganto.visual.roompark.presentation.screen.albums.util.AlbumsHeaderAdapter import com.biganto.visual.roompark.presentation.screen.albums.util.AlbumsHeaderAdapter
import com.biganto.visual.roompark.presentation.screen.photo.PhotoScreenController import com.biganto.visual.roompark.presentation.screen.photo.PhotoScreenController
import com.biganto.visual.roompark.util.extensions.scaleCenterCrop
import com.biganto.visual.roompark.util.view_utils.grid.CeilsDecoration import com.biganto.visual.roompark.util.view_utils.grid.CeilsDecoration
import com.bluelinelabs.conductor.RouterTransaction import com.bluelinelabs.conductor.RouterTransaction
import com.bluelinelabs.conductor.changehandler.FadeChangeHandler import com.bluelinelabs.conductor.changehandler.FadeChangeHandler
import com.bluelinelabs.conductor.changehandler.VerticalChangeHandler import com.bluelinelabs.conductor.changehandler.VerticalChangeHandler
import com.bumptech.glide.Glide
import com.bumptech.glide.request.target.SimpleTarget
import com.bumptech.glide.request.target.Target
import com.bumptech.glide.request.transition.Transition
import com.google.android.material.textview.MaterialTextView import com.google.android.material.textview.MaterialTextView
import com.squareup.picasso.Picasso
import io.reactivex.Observable import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.android.schedulers.AndroidSchedulers
import jp.wasabeef.picasso.transformations.BlurTransformation import jp.wasabeef.glide.transformations.BlurTransformation
import jp.wasabeef.picasso.transformations.ColorFilterTransformation import jp.wasabeef.glide.transformations.ColorFilterTransformation
import timber.log.Timber
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
import javax.inject.Inject import javax.inject.Inject
/** /**
* Created by Vladislav Bogdashkin on 30.09.2019. * Created by Vladislav Bogdashkin on 30.09.2019.
*/ */
...@@ -67,22 +66,22 @@ class AlbumsScreenController : ...@@ -67,22 +66,22 @@ class AlbumsScreenController :
//
private val photosBackgroundTarget = object : com.squareup.picasso.Target { // private val photosBackgroundTarget = object : com.squareup.picasso.Target {
override fun onPrepareLoad(placeHolderDrawable: Drawable?) { // override fun onPrepareLoad(placeHolderDrawable: Drawable?) {
// nestedScrollView.background = placeHolderDrawable //// nestedScrollView.background = placeHolderDrawable
} // }
//
override fun onBitmapFailed(e: Exception?, errorDrawable: Drawable?) { // override fun onBitmapFailed(e: Exception?, errorDrawable: Drawable?) {
Timber.e(e) // Timber.e(e)
} // }
//
override fun onBitmapLoaded(bitmap: Bitmap?, from: Picasso.LoadedFrom?) { // override fun onBitmapLoaded(bitmap: Bitmap?, from: Picasso.LoadedFrom?) {
bitmap?.scaleCenterCrop(nestedScrollView)?.let { // bitmap?.scaleCenterCrop(nestedScrollView)?.let {
nestedScrollView.background = BitmapDrawable(activity?.resources, it) // nestedScrollView.background = BitmapDrawable(activity?.resources, it)
} // }
} // }
} // }
private fun bindRecycler() { private fun bindRecycler() {
...@@ -161,9 +160,6 @@ class AlbumsScreenController : ...@@ -161,9 +160,6 @@ class AlbumsScreenController :
private fun render(viewState: AlbumsScreenViewState.SomeError) = private fun render(viewState: AlbumsScreenViewState.SomeError) =
showError(viewState.exception) showError(viewState.exception)
@Inject
lateinit var picassoAsync:Picasso
private fun render(viewState: AlbumsScreenViewState.AlbumsListLoaded) { private fun render(viewState: AlbumsScreenViewState.AlbumsListLoaded) {
(headersRecyclerView.adapter as AlbumsHeaderAdapter).setItems( (headersRecyclerView.adapter as AlbumsHeaderAdapter).setItems(
viewState.list.asSequence().sortedByDescending { it.published }.toList() viewState.list.asSequence().sortedByDescending { it.published }.toList()
...@@ -177,13 +173,10 @@ class AlbumsScreenController : ...@@ -177,13 +173,10 @@ class AlbumsScreenController :
viewState.list.first { it.albumId == viewState.selectedAlbumId }.let { viewState.list.first { it.albumId == viewState.selectedAlbumId }.let {
currentAlbomTitle.text = it.title currentAlbomTitle.text = it.title
picassoAsync activity?.let { ctx ->
.load(it.previewUrl) loadGlideBlurred(it.previewUrl, ctx, nestedBgTarget)
.transform(BlurTransformation(activity, 13, 2)) }
.transform(ColorFilterTransformation(0xCC000000.toInt()))
.into(photosBackgroundTarget)
} }
} }
private fun render(viewState: AlbumsScreenViewState.HeaderAlbumChoosed) { private fun render(viewState: AlbumsScreenViewState.HeaderAlbumChoosed) {
...@@ -193,11 +186,10 @@ class AlbumsScreenController : ...@@ -193,11 +186,10 @@ class AlbumsScreenController :
} }
currentAlbomTitle.text = viewState.item.title currentAlbomTitle.text = viewState.item.title
picassoAsync activity?.let { ctx ->
.load(viewState.item.previewUrl) loadGlideBlurred(viewState.item.previewUrl, ctx, nestedBgTarget)
.transform(BlurTransformation(activity, 13, 2)) }
.transform(ColorFilterTransformation(0xCC000000.toInt()))
.into(photosBackgroundTarget)
} }
private fun render(viewState: AlbumsScreenViewState.AlbumsSelected){ private fun render(viewState: AlbumsScreenViewState.AlbumsSelected){
...@@ -206,7 +198,7 @@ class AlbumsScreenController : ...@@ -206,7 +198,7 @@ class AlbumsScreenController :
) )
} }
private fun render(viewState: AlbumsScreenViewState.RestoreView){ private fun render(viewState: AlbumsScreenViewState.RestoreView) {
(albumsRecyclerView.adapter as AlbumListAdapter).setItems( (albumsRecyclerView.adapter as AlbumListAdapter).setItems(
viewState.restore.albumList.asSequence().sortedByDescending { it.published }.toList() viewState.restore.albumList.asSequence().sortedByDescending { it.published }.toList()
) )
...@@ -221,16 +213,27 @@ class AlbumsScreenController : ...@@ -221,16 +213,27 @@ class AlbumsScreenController :
) )
} }
viewState.restore.albumsPreview.first { it.albumId == viewState.restore.currentIndex} viewState.restore.albumsPreview.first { it.albumId == viewState.restore.currentIndex }
.let { .let {
currentAlbomTitle.text = it.title currentAlbomTitle.text = it.title
picassoAsync activity?.let { ctx ->
.load(it.previewUrl) loadGlideBlurred(it.previewUrl, ctx, nestedBgTarget)
.transform(BlurTransformation(activity, 13, 2))
.transform(ColorFilterTransformation(0xCC000000.toInt()))
.into(photosBackgroundTarget)
} }
} }
}
private val nestedBgTarget = object : SimpleTarget<Drawable>(){
override fun onResourceReady(resource: Drawable, transition: Transition<in Drawable>?) {
nestedScrollView.background = resource
}
}
private fun loadGlideBlurred(url:String, context: Context, drawable: Target<Drawable>) =
Glide.with(context)
.load(url)
.transform(BlurTransformation(13, 2))
.transform(ColorFilterTransformation(0xCC000000.toInt()))
.into(drawable)
override fun onAlbumSelected(): Observable<AlbumPreviewModel> override fun onAlbumSelected(): Observable<AlbumPreviewModel>
= (headersRecyclerView.adapter as AlbumsHeaderAdapter) = (headersRecyclerView.adapter as AlbumsHeaderAdapter)
......
...@@ -8,9 +8,7 @@ import com.biganto.visual.roompark.R ...@@ -8,9 +8,7 @@ import com.biganto.visual.roompark.R
import com.biganto.visual.roompark.domain.model.AlbumPreviewModel import com.biganto.visual.roompark.domain.model.AlbumPreviewModel
import com.biganto.visual.roompark.presentation.screen.settings.util.CommonRecyclerAdapter import com.biganto.visual.roompark.presentation.screen.settings.util.CommonRecyclerAdapter
import com.biganto.visual.roompark.presentation.screen.settings.util.CommonViewHolder import com.biganto.visual.roompark.presentation.screen.settings.util.CommonViewHolder
import com.squareup.picasso.Picasso import com.bumptech.glide.Glide
import java.text.SimpleDateFormat
import java.util.*
/** /**
...@@ -32,22 +30,16 @@ class AlbumsHeaderAdapter : CommonRecyclerAdapter<AlbumsHeaderViewHolder, AlbumP ...@@ -32,22 +30,16 @@ class AlbumsHeaderAdapter : CommonRecyclerAdapter<AlbumsHeaderViewHolder, AlbumP
class AlbumsHeaderViewHolder(itemView: View) : CommonViewHolder<AlbumPreviewModel>(itemView) { class AlbumsHeaderViewHolder(itemView: View) : CommonViewHolder<AlbumPreviewModel>(itemView) {
private val dateFormatter = SimpleDateFormat("dd MMMM yyyy", Locale("ru"))
@BindView(R.id.preview) lateinit var preview:ImageView @BindView(R.id.preview) lateinit var preview:ImageView
@BindView(R.id.card_title) lateinit var articleTitle:TextView @BindView(R.id.card_title) lateinit var articleTitle:TextView
@BindView(R.id.card_updated) lateinit var articleDate:TextView @BindView(R.id.card_updated) lateinit var articleDate:TextView
override fun onViewBound(model: AlbumPreviewModel) { override fun onViewBound(model: AlbumPreviewModel) {
// articleDate.text = dateFormatter.format(model.published)
articleTitle.text = model.title articleTitle.text = model.title
Picasso.get() Glide.with(itemView)
.load(model.previewUrl) .load(model.previewUrl)
.centerCrop() .centerCrop()
.fit() .fitCenter()
.into(preview) .into(preview)
//
} }
} }
...@@ -6,13 +6,13 @@ import androidx.recyclerview.widget.StaggeredGridLayoutManager ...@@ -6,13 +6,13 @@ import androidx.recyclerview.widget.StaggeredGridLayoutManager
import androidx.recyclerview.widget.StaggeredGridLayoutManager.GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS import androidx.recyclerview.widget.StaggeredGridLayoutManager.GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS
import butterknife.BindView import butterknife.BindView
import com.biganto.visual.roompark.R import com.biganto.visual.roompark.R
import com.biganto.visual.roompark.base.RoomParkApplication
import com.biganto.visual.roompark.domain.model.AlbumSortedModel import com.biganto.visual.roompark.domain.model.AlbumSortedModel
import com.biganto.visual.roompark.domain.model.PhotoModel import com.biganto.visual.roompark.domain.model.PhotoModel
import com.biganto.visual.roompark.domain.model.PhotoResolutionModel import com.biganto.visual.roompark.domain.model.PhotoResolutionModel
import com.biganto.visual.roompark.presentation.screen.settings.util.CommonRecyclerAdapter import com.biganto.visual.roompark.presentation.screen.settings.util.CommonRecyclerAdapter
import com.biganto.visual.roompark.presentation.screen.settings.util.CommonViewHolder import com.biganto.visual.roompark.presentation.screen.settings.util.CommonViewHolder
import com.biganto.visual.roompark.util.view_utils.image_view.RoundedImageView import com.biganto.visual.roompark.util.view_utils.image_view.RoundedImageView
import com.bumptech.glide.Glide
import com.google.android.material.textview.MaterialTextView import com.google.android.material.textview.MaterialTextView
import com.jakewharton.rxbinding3.view.detaches import com.jakewharton.rxbinding3.view.detaches
import com.jakewharton.rxrelay2.BehaviorRelay import com.jakewharton.rxrelay2.BehaviorRelay
...@@ -83,16 +83,12 @@ class PhotosViewHolder(itemView: View) : CommonViewHolder<PhotoModel>(itemView) ...@@ -83,16 +83,12 @@ class PhotosViewHolder(itemView: View) : CommonViewHolder<PhotoModel>(itemView)
@BindView(R.id.photo_preview_imageview) lateinit var photoPreview: RoundedImageView @BindView(R.id.photo_preview_imageview) lateinit var photoPreview: RoundedImageView
private val picassoAsync by lazy {
return@lazy RoomParkApplication.component.providePicassoAsync()
}
override fun onViewBound(model: PhotoModel) { override fun onViewBound(model: PhotoModel) {
model.resolutionList.lowelest()?.let { model.resolutionList.lowelest()?.let {
picassoAsync Glide.with(itemView)
.load(it.url) .load(it.url)
.centerCrop() .centerCrop()
.fit() .fitCenter()
.into(photoPreview) .into(photoPreview)
}} }}
} }
......
...@@ -3,7 +3,6 @@ package com.biganto.visual.roompark.presentation.screen.article ...@@ -3,7 +3,6 @@ package com.biganto.visual.roompark.presentation.screen.article
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.webkit.WebView
import android.widget.ImageView import android.widget.ImageView
import androidx.core.os.bundleOf import androidx.core.os.bundleOf
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
...@@ -17,10 +16,10 @@ import com.biganto.visual.roompark.conductor.BigantoBaseController ...@@ -17,10 +16,10 @@ import com.biganto.visual.roompark.conductor.BigantoBaseController
import com.biganto.visual.roompark.presentation.screen.article.util.HtmlPageAdapter import com.biganto.visual.roompark.presentation.screen.article.util.HtmlPageAdapter
import com.biganto.visual.roompark.presentation.screen.article.util.HtmlTag import com.biganto.visual.roompark.presentation.screen.article.util.HtmlTag
import com.biganto.visual.roompark.util.extensions.formatToSimple import com.biganto.visual.roompark.util.extensions.formatToSimple
import com.bumptech.glide.Glide
import com.google.android.material.floatingactionbutton.FloatingActionButton import com.google.android.material.floatingactionbutton.FloatingActionButton
import com.google.android.material.textview.MaterialTextView import com.google.android.material.textview.MaterialTextView
import com.squareup.picasso.Picasso import jp.wasabeef.glide.transformations.BlurTransformation
import jp.wasabeef.picasso.transformations.BlurTransformation
import timber.log.Timber import timber.log.Timber
import javax.inject.Inject import javax.inject.Inject
...@@ -132,12 +131,12 @@ class ArticleScreenController : ...@@ -132,12 +131,12 @@ class ArticleScreenController :
articleDate.text = viewState.item.published.formatToSimple articleDate.text = viewState.item.published.formatToSimple
Picasso.get() Glide.with(blurPreview)
.load(viewState.item.previewUrl) .load(viewState.item.previewUrl)
.transform(BlurTransformation(activity,40,4)) .transform(BlurTransformation(40,4))
.into(blurPreview) .into(blurPreview)
Picasso.get() Glide.with(articlePreview)
.load(viewState.item.previewUrl) .load(viewState.item.previewUrl)
.into(articlePreview) .into(articlePreview)
} }
......
...@@ -9,7 +9,7 @@ import android.widget.ImageView ...@@ -9,7 +9,7 @@ import android.widget.ImageView
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import butterknife.ButterKnife import butterknife.ButterKnife
import com.biganto.visual.roompark.R import com.biganto.visual.roompark.R
import com.biganto.visual.roompark.base.RoomParkApplication import com.bumptech.glide.Glide
import com.google.android.material.textview.MaterialTextView import com.google.android.material.textview.MaterialTextView
/** /**
...@@ -89,18 +89,13 @@ class HtmlTextViewHolder(itemView: View) : HtmlTagViewHolder<HtmlTag.Text>(itemV ...@@ -89,18 +89,13 @@ class HtmlTextViewHolder(itemView: View) : HtmlTagViewHolder<HtmlTag.Text>(itemV
} }
class HtmlImageViewHolder(itemView: View) :HtmlTagViewHolder<HtmlTag.ImageSource>(itemView) { class HtmlImageViewHolder(itemView: View) :HtmlTagViewHolder<HtmlTag.ImageSource>(itemView) {
private val picassoAsync by lazy {
return@lazy RoomParkApplication.component.providePicassoAsync()
}
override fun onViewBound(model: HtmlTag.ImageSource) { override fun onViewBound(model: HtmlTag.ImageSource) {
val url = "https://room-park.ru${model.src}" val url = "https://room-park.ru${model.src}"
picassoAsync
Glide.with(itemView)
.load(url) .load(url)
.into(itemView as ImageView) .into(itemView as ImageView)
} }
} }
private enum class HtmlViewType(val viewType:Int){ private enum class HtmlViewType(val viewType:Int){
......
...@@ -17,9 +17,9 @@ import com.biganto.visual.roompark.util.extensions.toRubly ...@@ -17,9 +17,9 @@ import com.biganto.visual.roompark.util.extensions.toRubly
import com.biganto.visual.roompark.util.view_utils.image_view.RoundedImageView import com.biganto.visual.roompark.util.view_utils.image_view.RoundedImageView
import com.biganto.visual.roompark.util.view_utils.status_progress_view.StatusProgressAnimationState import com.biganto.visual.roompark.util.view_utils.status_progress_view.StatusProgressAnimationState
import com.biganto.visual.roompark.util.view_utils.status_progress_view.StatusProgressCeil import com.biganto.visual.roompark.util.view_utils.status_progress_view.StatusProgressCeil
import com.bumptech.glide.Glide
import com.google.android.material.textview.MaterialTextView import com.google.android.material.textview.MaterialTextView
import com.jakewharton.rxbinding3.view.clicks import com.jakewharton.rxbinding3.view.clicks
import com.squareup.picasso.Picasso
import io.reactivex.Observable import io.reactivex.Observable
import io.reactivex.subjects.PublishSubject import io.reactivex.subjects.PublishSubject
...@@ -93,7 +93,7 @@ class DealViewHolder(itemView: View) : CommonViewHolder<DealPreviewModel>(itemVi ...@@ -93,7 +93,7 @@ class DealViewHolder(itemView: View) : CommonViewHolder<DealPreviewModel>(itemVi
statusLayout.invalidate() statusLayout.invalidate()
model.tourPreview?.let { model.tourPreview?.let {
Picasso.get() Glide.with(tourScreen)
.load(it) .load(it)
.into(tourScreen) .into(tourScreen)
} }
......
...@@ -9,9 +9,7 @@ import com.biganto.visual.roompark.domain.model.ArticlePreviewModel ...@@ -9,9 +9,7 @@ import com.biganto.visual.roompark.domain.model.ArticlePreviewModel
import com.biganto.visual.roompark.presentation.screen.settings.util.CommonRecyclerAdapter import com.biganto.visual.roompark.presentation.screen.settings.util.CommonRecyclerAdapter
import com.biganto.visual.roompark.presentation.screen.settings.util.CommonViewHolder import com.biganto.visual.roompark.presentation.screen.settings.util.CommonViewHolder
import com.biganto.visual.roompark.util.extensions.setGone import com.biganto.visual.roompark.util.extensions.setGone
import com.jakewharton.rxbinding3.view.clicks import com.bumptech.glide.Glide
import com.squareup.picasso.Picasso
import io.reactivex.subjects.PublishSubject
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.* import java.util.*
...@@ -44,7 +42,7 @@ class ArticleViewHolder(itemView: View) : CommonViewHolder<ArticlePreviewModel>( ...@@ -44,7 +42,7 @@ class ArticleViewHolder(itemView: View) : CommonViewHolder<ArticlePreviewModel>(
articleTitle.text = model.title articleTitle.text = model.title
articleIsRead.setGone(model.isRead) articleIsRead.setGone(model.isRead)
Picasso.get() Glide.with(preview)
.load(model.previewUrl) .load(model.previewUrl)
.into(preview) .into(preview)
} }
......
...@@ -10,8 +10,7 @@ import com.biganto.visual.roompark.presentation.screen.settings.util.CommonRecyc ...@@ -10,8 +10,7 @@ import com.biganto.visual.roompark.presentation.screen.settings.util.CommonRecyc
import com.biganto.visual.roompark.presentation.screen.settings.util.CommonViewHolder import com.biganto.visual.roompark.presentation.screen.settings.util.CommonViewHolder
import com.biganto.visual.roompark.util.extensions.formatToSimple import com.biganto.visual.roompark.util.extensions.formatToSimple
import com.biganto.visual.roompark.util.extensions.setGone import com.biganto.visual.roompark.util.extensions.setGone
import com.squareup.picasso.Picasso import com.bumptech.glide.Glide
/** /**
* Created by Vladislav Bogdashkin on 15.10.2019. * Created by Vladislav Bogdashkin on 15.10.2019.
...@@ -37,7 +36,7 @@ class ArticlePreviewViewHolder(itemView: View) : CommonViewHolder<ArticlePreview ...@@ -37,7 +36,7 @@ class ArticlePreviewViewHolder(itemView: View) : CommonViewHolder<ArticlePreview
articleTitle.text = model.title articleTitle.text = model.title
articleIsRead.setGone(model.isRead) articleIsRead.setGone(model.isRead)
Picasso.get() Glide.with(preview)
.load(model.previewUrl) .load(model.previewUrl)
.into(preview) .into(preview)
} }
......
...@@ -8,7 +8,7 @@ import com.biganto.visual.roompark.R ...@@ -8,7 +8,7 @@ import com.biganto.visual.roompark.R
import com.biganto.visual.roompark.domain.model.AlbumPreviewModel import com.biganto.visual.roompark.domain.model.AlbumPreviewModel
import com.biganto.visual.roompark.presentation.screen.settings.util.CommonRecyclerAdapter import com.biganto.visual.roompark.presentation.screen.settings.util.CommonRecyclerAdapter
import com.biganto.visual.roompark.presentation.screen.settings.util.CommonViewHolder import com.biganto.visual.roompark.presentation.screen.settings.util.CommonViewHolder
import com.squareup.picasso.Picasso import com.bumptech.glide.Glide
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.* import java.util.*
...@@ -41,10 +41,10 @@ class AlbumCardViewHolder(itemView: View) : CommonViewHolder<AlbumPreviewModel>( ...@@ -41,10 +41,10 @@ class AlbumCardViewHolder(itemView: View) : CommonViewHolder<AlbumPreviewModel>(
articleTitle.text = model.title articleTitle.text = model.title
articleTitle.text = model.title articleTitle.text = model.title
Picasso.get() Glide.with(preview)
.load(model.previewUrl) .load(model.previewUrl)
.centerCrop() .centerCrop()
.fit() .fitCenter()
.into(preview) .into(preview)
} }
} }
...@@ -12,7 +12,6 @@ import com.biganto.visual.roompark.conductor.BigantoBaseController ...@@ -12,7 +12,6 @@ import com.biganto.visual.roompark.conductor.BigantoBaseController
import com.biganto.visual.roompark.presentation.screen.photo.util.PhotoPreviewSlider import com.biganto.visual.roompark.presentation.screen.photo.util.PhotoPreviewSlider
import com.biganto.visual.roompark.presentation.screen.photo.util.PhotosAdapter import com.biganto.visual.roompark.presentation.screen.photo.util.PhotosAdapter
import com.google.android.material.textview.MaterialTextView import com.google.android.material.textview.MaterialTextView
import com.squareup.picasso.Picasso
import timber.log.Timber import timber.log.Timber
import javax.inject.Inject import javax.inject.Inject
...@@ -46,7 +45,7 @@ class PhotoScreenController : ...@@ -46,7 +45,7 @@ class PhotoScreenController :
private fun bindRecycler() { private fun bindRecycler() {
photoViewPager.isNestedScrollingEnabled = false photoViewPager.isNestedScrollingEnabled = false
photoViewPager.offscreenPageLimit = 2 photoViewPager.offscreenPageLimit = 1
photoViewPager.adapter = PhotosAdapter() photoViewPager.adapter = PhotosAdapter()
setVewPager() setVewPager()
} }
...@@ -105,9 +104,6 @@ class PhotoScreenController : ...@@ -105,9 +104,6 @@ class PhotoScreenController :
private fun render(viewState: PhotoScreenViewState.SomeError) = private fun render(viewState: PhotoScreenViewState.SomeError) =
showError(viewState.exception) showError(viewState.exception)
@Inject
lateinit var picassoAsync:Picasso
private fun render(viewState: PhotoScreenViewState.PhotoListLoaded) { private fun render(viewState: PhotoScreenViewState.PhotoListLoaded) {
(photoViewPager.adapter as PhotosAdapter).setItems( (photoViewPager.adapter as PhotosAdapter).setItems(
viewState.list.asSequence().sortedBy{it.sort}.toList() viewState.list.asSequence().sortedBy{it.sort}.toList()
......
...@@ -6,15 +6,15 @@ import android.view.View ...@@ -6,15 +6,15 @@ import android.view.View
import android.view.WindowManager import android.view.WindowManager
import butterknife.BindView import butterknife.BindView
import com.biganto.visual.roompark.R import com.biganto.visual.roompark.R
import com.biganto.visual.roompark.base.RoomParkApplication
import com.biganto.visual.roompark.domain.model.PhotoModel import com.biganto.visual.roompark.domain.model.PhotoModel
import com.biganto.visual.roompark.domain.model.PhotoResolutionModel import com.biganto.visual.roompark.domain.model.PhotoResolutionModel
import com.biganto.visual.roompark.presentation.screen.settings.util.CommonRecyclerAdapter import com.biganto.visual.roompark.presentation.screen.settings.util.CommonRecyclerAdapter
import com.biganto.visual.roompark.presentation.screen.settings.util.CommonViewHolder import com.biganto.visual.roompark.presentation.screen.settings.util.CommonViewHolder
import com.bumptech.glide.Glide
import com.bumptech.glide.load.engine.DiskCacheStrategy
import com.github.chrisbanes.photoview.PhotoView import com.github.chrisbanes.photoview.PhotoView
import com.google.android.material.textview.MaterialTextView import com.google.android.material.textview.MaterialTextView
import timber.log.Timber import timber.log.Timber
import javax.security.auth.callback.Callback
import kotlin.math.absoluteValue import kotlin.math.absoluteValue
/** /**
...@@ -47,11 +47,6 @@ class PhotosViewHolder(itemView: View) : CommonViewHolder<PhotoModel>(itemView) ...@@ -47,11 +47,6 @@ class PhotosViewHolder(itemView: View) : CommonViewHolder<PhotoModel>(itemView)
@BindView(R.id.photo_description) @BindView(R.id.photo_description)
lateinit var description: MaterialTextView lateinit var description: MaterialTextView
private val picassoAsync by lazy {
return@lazy RoomParkApplication.component.providePicassoAsync()
}
private val windowSize by lazy { private val windowSize by lazy {
val pSize: Point = Point() val pSize: Point = Point()
(itemView.context.getSystemService(Context.WINDOW_SERVICE) as WindowManager) (itemView.context.getSystemService(Context.WINDOW_SERVICE) as WindowManager)
...@@ -64,54 +59,26 @@ class PhotosViewHolder(itemView: View) : CommonViewHolder<PhotoModel>(itemView) ...@@ -64,54 +59,26 @@ class PhotosViewHolder(itemView: View) : CommonViewHolder<PhotoModel>(itemView)
description.visibility = if (model.description != null) View.VISIBLE else View.GONE description.visibility = if (model.description != null) View.VISIBLE else View.GONE
model.description?.let { description.text = it } model.description?.let { description.text = it }
model.resolutionList.lowelest()?.let {
picassoAsync
.load(it.url)
.centerCrop()
.fit()
.into(photoPreview, object :Callback, com.squareup.picasso.Callback {
override fun onSuccess() {
model.resolutionList model.resolutionList
.onEach { Timber.d("val ensure: ${it.resWidth} : ${it.resHeight}") }
.minBy { .minBy {
((windowSize.x - it.resWidth + .1f).absoluteValue ((windowSize.x - it.resWidth + .1f).absoluteValue
+ (windowSize.y - it.resHeight + .1f).absoluteValue + (windowSize.y - it.resHeight + .1f).absoluteValue
) )
} }
?.let {photo -> ?.let { photo ->
Timber.d("val: ${photo.resWidth} : ${photo.resHeight}") Timber.d("val: ${photo.resWidth} : ${photo.resHeight}")
picassoAsync Glide.with(photoPreview)
.load(photo.url) .load(photo.url)
.centerCrop() .thumbnail(model.resolutionList.lowelest()?.let { thumb ->
.fit() Glide.with(photoPreview).load(thumb.url).diskCacheStrategy(DiskCacheStrategy.ALL)
.into(photoPreview)
}
}
override fun onError(e: Exception?) {
model.resolutionList
.onEach { Timber.d("val ensure: ${it.resWidth} : ${it.resHeight}") }
.minBy {
((windowSize.x - it.resWidth + .1f).absoluteValue
+ (windowSize.y - it.resHeight + .1f).absoluteValue
)
}
?.let {
Timber.d("val: ${it.resWidth} : ${it.resHeight}")
picassoAsync
.load(it.url)
.centerCrop()
.fit()
.into(photoPreview)
}
}
}) })
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(photoPreview)
} }
} }
} }
private fun List<PhotoResolutionModel>.lowelest() = private fun List<PhotoResolutionModel>.lowelest() =
this.minBy { it.resWidth * it.resHeight } this.minBy { it.resWidth * it.resHeight }
\ No newline at end of file
package com.biganto.visual.roompark.presentation.screen.photo.util
import android.app.Activity
import android.graphics.Bitmap
import android.graphics.Point
import android.graphics.drawable.Drawable
import android.util.DisplayMetrics
import android.view.View
import butterknife.BindView
import com.biganto.visual.roompark.R
import com.biganto.visual.roompark.base.RoomParkApplication
import com.biganto.visual.roompark.domain.model.PhotoModel
import com.biganto.visual.roompark.presentation.screen.settings.util.CommonRecyclerAdapter
import com.biganto.visual.roompark.presentation.screen.settings.util.CommonViewHolder
import com.github.chrisbanes.photoview.PhotoView
import com.google.android.material.textview.MaterialTextView
import com.squareup.picasso.Callback
import com.squareup.picasso.Picasso
import com.squareup.picasso.Target
import jp.wasabeef.picasso.transformations.BlurTransformation
import jp.wasabeef.picasso.transformations.ColorFilterTransformation
import timber.log.Timber
/**
* Created by Vladislav Bogdashkin on 15.10.2019.
*/
class PhotoViewerAdapter : CommonRecyclerAdapter<PhotoViewerViewHolder, PhotoModel>() {
override val vhKlazz = PhotoViewerViewHolder::class
override fun getVhLayout(): Int = R.layout.photo_page_viewholder
fun getItemPosition(model: PhotoModel) = getItemPosition(model.photoId)
fun getItemPosition(modelId: Int) = list.indexOfFirst {
it.photoId == modelId
}
}
class PhotoViewerViewHolder(itemView: View) : CommonViewHolder<PhotoModel>(itemView) {
@BindView(R.id.photo_view) lateinit var photoView:PhotoView
@BindView(R.id.photo_description) lateinit var photoDesc:MaterialTextView
private val displayMetrics = DisplayMetrics()
private val displaySize = Point()
private val picassoAsync: Picasso by lazy {
return@lazy RoomParkApplication.component.providePicassoAsync()
}
private val _t = object :Target{
override fun onPrepareLoad(placeHolderDrawable: Drawable?) {
Timber.d("lalala")
}
override fun onBitmapFailed(e: java.lang.Exception?, errorDrawable: Drawable?) {
Timber.e(e)
}
override fun onBitmapLoaded(bitmap: Bitmap?, from: Picasso.LoadedFrom?) {
Timber.d("bitmap loaded: $bitmap")
photoView.setImageBitmap(bitmap)
}
}
override fun onViewBound(model: PhotoModel) {
photoDesc.visibility = if (model.description.isNullOrBlank()) View.GONE else View.VISIBLE
model.description?.let { photoDesc.text = it }
(itemView.context as Activity).windowManager.defaultDisplay.getSize(displaySize)
model.resolutionList.minBy { it.resHeight * it.resWidth }?.let { photoRes ->
picassoAsync
.load(photoRes.url)
.transform(BlurTransformation(itemView.context, 13, 1))
.transform(ColorFilterTransformation(0xCC000000.toInt()))
.into(photoView, object : Callback {
override fun onSuccess() {
model.optimalResolution(displaySize.x, displaySize.y).let {
Timber.d("goonna load image with ${it.resWidth} / ${it.resHeight}")
Picasso.get()
.load(it.url)
.into(_t)
}
}
override fun onError(e: Exception?) {
Timber.e(e)
}
})
}
}
}
import android.content.res.Resources
import android.graphics.Bitmap
import android.graphics.Canvas
import android.graphics.drawable.BitmapDrawable
import android.graphics.drawable.Drawable
import android.text.Html
import com.biganto.visual.roompark.R
import com.biganto.visual.roompark.base.RoomParkApplication
import com.google.android.material.textview.MaterialTextView
import com.squareup.picasso.Picasso
import com.squareup.picasso.Target
import timber.log.Timber
class PicassoImageGetter(private val target: MaterialTextView) : Html.ImageGetter {
override fun getDrawable(source: String): Drawable {
val drawable = BitmapDrawablePlaceHolder()
Picasso.get()
.load("https://room-park.ru$source")
.placeholder(R.drawable.ic_deals)
.into(drawable)
return drawable
}
private inner class BitmapDrawablePlaceHolder : BitmapDrawable(), Target{
protected var _drawable: Drawable? = null
private val resources: Resources = RoomParkApplication.component.provideAppContext().resources
override fun draw(canvas: Canvas) {
if (_drawable != null) {
_drawable!!.draw(canvas)
}
}
fun setDrawable(drawable: Drawable) {
this._drawable = drawable
var width = drawable.intrinsicWidth
var height = drawable.intrinsicHeight
Timber.d("WE GONNA WORK WITH DATA: ${target.width} / ${target.height}")
Timber.d("WE GONNA WORK WITH M DATA: ${target.measuredWidth} / ${target.measuredHeight}")
target.width.let{
val aspect = width.toFloat()/it.toFloat()
Timber.d("aspect is $aspect")
val imgWider = width>it
Timber.d("imgWider is $imgWider")
height = if (imgWider) (height.toFloat()/aspect).toInt()
else (height.toFloat()*aspect).toInt()
width = if (imgWider) it else it//imgWider
drawable.setBounds(0, 0, width, height)
setBounds(0, 0, width, height)
}
target.text=target.text
}
override fun onBitmapLoaded(bitmap: Bitmap, from: Picasso.LoadedFrom) {
setDrawable(BitmapDrawable(resources, bitmap))
}
override fun onBitmapFailed(e: Exception?, errorDrawable: Drawable?) {}
override fun onPrepareLoad(placeHolderDrawable: Drawable) {
}
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment