mirror of
https://github.com/Michatec/michas-droid.git
synced 2026-05-30 18:02:43 +02:00
Migrate from Coil to Picasso
This commit is contained in:
+1
-1
@@ -122,5 +122,5 @@ dependencies {
|
|||||||
implementation 'io.reactivex.rxjava3:rxjava:3.0.4'
|
implementation 'io.reactivex.rxjava3:rxjava:3.0.4'
|
||||||
implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
|
implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
|
||||||
implementation 'com.fasterxml.jackson.core:jackson-core:2.11.0'
|
implementation 'com.fasterxml.jackson.core:jackson-core:2.11.0'
|
||||||
implementation 'io.coil-kt:coil:0.11.0'
|
implementation 'com.squareup.picasso:picasso:2.71828'
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,16 +10,16 @@ import android.content.Context
|
|||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.IntentFilter
|
import android.content.IntentFilter
|
||||||
import android.content.pm.PackageInfo
|
import android.content.pm.PackageInfo
|
||||||
import coil.Coil
|
import com.squareup.picasso.OkHttp3Downloader
|
||||||
import coil.ImageLoader
|
import com.squareup.picasso.Picasso
|
||||||
import nya.kitsunyan.foxydroid.content.Cache
|
import nya.kitsunyan.foxydroid.content.Cache
|
||||||
import nya.kitsunyan.foxydroid.content.Preferences
|
import nya.kitsunyan.foxydroid.content.Preferences
|
||||||
import nya.kitsunyan.foxydroid.content.ProductPreferences
|
import nya.kitsunyan.foxydroid.content.ProductPreferences
|
||||||
import nya.kitsunyan.foxydroid.database.Database
|
import nya.kitsunyan.foxydroid.database.Database
|
||||||
import nya.kitsunyan.foxydroid.entity.InstalledItem
|
import nya.kitsunyan.foxydroid.entity.InstalledItem
|
||||||
import nya.kitsunyan.foxydroid.index.RepositoryUpdater
|
import nya.kitsunyan.foxydroid.index.RepositoryUpdater
|
||||||
import nya.kitsunyan.foxydroid.network.CoilDownloader
|
|
||||||
import nya.kitsunyan.foxydroid.network.Downloader
|
import nya.kitsunyan.foxydroid.network.Downloader
|
||||||
|
import nya.kitsunyan.foxydroid.network.PicassoDownloader
|
||||||
import nya.kitsunyan.foxydroid.service.Connection
|
import nya.kitsunyan.foxydroid.service.Connection
|
||||||
import nya.kitsunyan.foxydroid.service.SyncService
|
import nya.kitsunyan.foxydroid.service.SyncService
|
||||||
import nya.kitsunyan.foxydroid.utility.Utils
|
import nya.kitsunyan.foxydroid.utility.Utils
|
||||||
@@ -48,8 +48,8 @@ class MainApplication: Application() {
|
|||||||
listenApplications()
|
listenApplications()
|
||||||
listenPreferences()
|
listenPreferences()
|
||||||
|
|
||||||
Coil.setImageLoader(ImageLoader.Builder(this)
|
Picasso.setSingletonInstance(Picasso.Builder(this)
|
||||||
.callFactory(CoilDownloader.Factory(Cache.getImagesDir(this))).build())
|
.downloader(OkHttp3Downloader(PicassoDownloader.Factory(Cache.getImagesDir(this)))).build())
|
||||||
|
|
||||||
if (databaseUpdated) {
|
if (databaseUpdated) {
|
||||||
forceSyncAll()
|
forceSyncAll()
|
||||||
|
|||||||
+1
-1
@@ -12,7 +12,7 @@ import okhttp3.HttpUrl.Companion.toHttpUrl
|
|||||||
import java.io.File
|
import java.io.File
|
||||||
import kotlin.math.*
|
import kotlin.math.*
|
||||||
|
|
||||||
object CoilDownloader {
|
object PicassoDownloader {
|
||||||
private const val HOST_ICON = "icon"
|
private const val HOST_ICON = "icon"
|
||||||
private const val HOST_SCREENSHOT = "screenshot"
|
private const val HOST_SCREENSHOT = "screenshot"
|
||||||
private const val QUERY_ADDRESS = "address"
|
private const val QUERY_ADDRESS = "address"
|
||||||
@@ -40,7 +40,6 @@ import androidx.core.content.ContextCompat
|
|||||||
import androidx.core.graphics.ColorUtils
|
import androidx.core.graphics.ColorUtils
|
||||||
import androidx.core.text.util.LinkifyCompat
|
import androidx.core.text.util.LinkifyCompat
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import coil.api.*
|
|
||||||
import nya.kitsunyan.foxydroid.R
|
import nya.kitsunyan.foxydroid.R
|
||||||
import nya.kitsunyan.foxydroid.content.Preferences
|
import nya.kitsunyan.foxydroid.content.Preferences
|
||||||
import nya.kitsunyan.foxydroid.content.ProductPreferences
|
import nya.kitsunyan.foxydroid.content.ProductPreferences
|
||||||
@@ -50,7 +49,7 @@ import nya.kitsunyan.foxydroid.entity.ProductPreference
|
|||||||
import nya.kitsunyan.foxydroid.entity.Release
|
import nya.kitsunyan.foxydroid.entity.Release
|
||||||
import nya.kitsunyan.foxydroid.entity.Repository
|
import nya.kitsunyan.foxydroid.entity.Repository
|
||||||
import nya.kitsunyan.foxydroid.graphics.PaddingDrawable
|
import nya.kitsunyan.foxydroid.graphics.PaddingDrawable
|
||||||
import nya.kitsunyan.foxydroid.network.CoilDownloader
|
import nya.kitsunyan.foxydroid.network.PicassoDownloader
|
||||||
import nya.kitsunyan.foxydroid.utility.KParcelable
|
import nya.kitsunyan.foxydroid.utility.KParcelable
|
||||||
import nya.kitsunyan.foxydroid.utility.PackageItemResolver
|
import nya.kitsunyan.foxydroid.utility.PackageItemResolver
|
||||||
import nya.kitsunyan.foxydroid.utility.Utils
|
import nya.kitsunyan.foxydroid.utility.Utils
|
||||||
@@ -953,7 +952,7 @@ class ProductAdapter(private val callbacks: Callbacks, private val columns: Int)
|
|||||||
item as Item.HeaderItem
|
item as Item.HeaderItem
|
||||||
val installedItem = installedItem
|
val installedItem = installedItem
|
||||||
if (item.product.icon.isNotEmpty()) {
|
if (item.product.icon.isNotEmpty()) {
|
||||||
holder.icon.load(CoilDownloader.createIconUri(holder.icon, item.product.icon, item.repository)) {
|
holder.icon.load(PicassoDownloader.createIconUri(holder.icon, item.product.icon, item.repository)) {
|
||||||
placeholder(holder.progressIcon)
|
placeholder(holder.progressIcon)
|
||||||
error(holder.defaultIcon)
|
error(holder.defaultIcon)
|
||||||
}
|
}
|
||||||
@@ -1122,12 +1121,12 @@ class ProductAdapter(private val callbacks: Callbacks, private val columns: Int)
|
|||||||
val outer = context.resources.sizeScaled(GRID_SPACING_OUTER_DP)
|
val outer = context.resources.sizeScaled(GRID_SPACING_OUTER_DP)
|
||||||
val inner = context.resources.sizeScaled(GRID_SPACING_INNER_DP)
|
val inner = context.resources.sizeScaled(GRID_SPACING_INNER_DP)
|
||||||
val cellSize = (screenWidth - 2 * outer - (columns - 1) * inner) / columns
|
val cellSize = (screenWidth - 2 * outer - (columns - 1) * inner) / columns
|
||||||
holder.image.load(CoilDownloader.createScreenshotUri(item.repository, item.packageName, item.screenshot)) {
|
holder.image.load(PicassoDownloader.createScreenshotUri(item.repository, item.packageName, item.screenshot)) {
|
||||||
size(cellSize)
|
|
||||||
placeholder(holder.placeholder)
|
placeholder(holder.placeholder)
|
||||||
error(holder.placeholder)
|
error(holder.placeholder)
|
||||||
|
resize(cellSize, cellSize)
|
||||||
|
centerCrop()
|
||||||
}
|
}
|
||||||
Unit
|
|
||||||
}
|
}
|
||||||
ViewType.RELEASE -> {
|
ViewType.RELEASE -> {
|
||||||
holder as ReleaseViewHolder
|
holder as ReleaseViewHolder
|
||||||
|
|||||||
@@ -11,13 +11,11 @@ import android.widget.ImageView
|
|||||||
import android.widget.ProgressBar
|
import android.widget.ProgressBar
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import coil.api.clear
|
|
||||||
import coil.api.load
|
|
||||||
import nya.kitsunyan.foxydroid.R
|
import nya.kitsunyan.foxydroid.R
|
||||||
import nya.kitsunyan.foxydroid.database.Database
|
import nya.kitsunyan.foxydroid.database.Database
|
||||||
import nya.kitsunyan.foxydroid.entity.ProductItem
|
import nya.kitsunyan.foxydroid.entity.ProductItem
|
||||||
import nya.kitsunyan.foxydroid.entity.Repository
|
import nya.kitsunyan.foxydroid.entity.Repository
|
||||||
import nya.kitsunyan.foxydroid.network.CoilDownloader
|
import nya.kitsunyan.foxydroid.network.PicassoDownloader
|
||||||
import nya.kitsunyan.foxydroid.utility.Utils
|
import nya.kitsunyan.foxydroid.utility.Utils
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.resources.*
|
import nya.kitsunyan.foxydroid.utility.extension.resources.*
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.text.*
|
import nya.kitsunyan.foxydroid.utility.extension.text.*
|
||||||
@@ -127,7 +125,7 @@ class ProductsAdapter(private val onClick: (ProductItem) -> Unit):
|
|||||||
holder.summary.visibility = if (holder.summary.text.isNotEmpty()) View.VISIBLE else View.GONE
|
holder.summary.visibility = if (holder.summary.text.isNotEmpty()) View.VISIBLE else View.GONE
|
||||||
val repository: Repository? = repositories[productItem.repositoryId]
|
val repository: Repository? = repositories[productItem.repositoryId]
|
||||||
if (productItem.icon.isNotEmpty() && repository != null) {
|
if (productItem.icon.isNotEmpty() && repository != null) {
|
||||||
holder.icon.load(CoilDownloader.createIconUri(holder.icon, productItem.icon, repository)) {
|
holder.icon.load(PicassoDownloader.createIconUri(holder.icon, productItem.icon, repository)) {
|
||||||
placeholder(holder.progressIcon)
|
placeholder(holder.progressIcon)
|
||||||
error(holder.defaultIcon)
|
error(holder.defaultIcon)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ import androidx.fragment.app.FragmentManager
|
|||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import androidx.viewpager2.widget.MarginPageTransformer
|
import androidx.viewpager2.widget.MarginPageTransformer
|
||||||
import androidx.viewpager2.widget.ViewPager2
|
import androidx.viewpager2.widget.ViewPager2
|
||||||
import coil.api.*
|
|
||||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
||||||
import io.reactivex.rxjava3.core.Observable
|
import io.reactivex.rxjava3.core.Observable
|
||||||
import io.reactivex.rxjava3.disposables.Disposable
|
import io.reactivex.rxjava3.disposables.Disposable
|
||||||
@@ -25,7 +24,7 @@ import nya.kitsunyan.foxydroid.database.Database
|
|||||||
import nya.kitsunyan.foxydroid.entity.Product
|
import nya.kitsunyan.foxydroid.entity.Product
|
||||||
import nya.kitsunyan.foxydroid.entity.Repository
|
import nya.kitsunyan.foxydroid.entity.Repository
|
||||||
import nya.kitsunyan.foxydroid.graphics.PaddingDrawable
|
import nya.kitsunyan.foxydroid.graphics.PaddingDrawable
|
||||||
import nya.kitsunyan.foxydroid.network.CoilDownloader
|
import nya.kitsunyan.foxydroid.network.PicassoDownloader
|
||||||
import nya.kitsunyan.foxydroid.utility.RxUtils
|
import nya.kitsunyan.foxydroid.utility.RxUtils
|
||||||
import nya.kitsunyan.foxydroid.utility.extension.resources.*
|
import nya.kitsunyan.foxydroid.utility.extension.resources.*
|
||||||
import nya.kitsunyan.foxydroid.widget.StableRecyclerAdapter
|
import nya.kitsunyan.foxydroid.widget.StableRecyclerAdapter
|
||||||
@@ -101,6 +100,9 @@ class ScreenshotsFragment(): DialogFragment() {
|
|||||||
val viewPager = ViewPager2(dialog.context)
|
val viewPager = ViewPager2(dialog.context)
|
||||||
viewPager.adapter = Adapter(packageName) { decorView.performClick() }
|
viewPager.adapter = Adapter(packageName) { decorView.performClick() }
|
||||||
viewPager.setPageTransformer(MarginPageTransformer(resources.sizeScaled(16)))
|
viewPager.setPageTransformer(MarginPageTransformer(resources.sizeScaled(16)))
|
||||||
|
viewPager.viewTreeObserver.addOnGlobalLayoutListener {
|
||||||
|
(viewPager.adapter as Adapter).size = Pair(viewPager.width, viewPager.height)
|
||||||
|
}
|
||||||
dialog.addContentView(viewPager, ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
|
dialog.addContentView(viewPager, ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
|
||||||
ViewGroup.LayoutParams.MATCH_PARENT))
|
ViewGroup.LayoutParams.MATCH_PARENT))
|
||||||
this.viewPager = viewPager
|
this.viewPager = viewPager
|
||||||
@@ -181,6 +183,14 @@ class ScreenshotsFragment(): DialogFragment() {
|
|||||||
notifyDataSetChanged()
|
notifyDataSetChanged()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var size = Pair(0, 0)
|
||||||
|
set(value) {
|
||||||
|
if (field != value) {
|
||||||
|
field = value
|
||||||
|
notifyDataSetChanged()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun getCurrentIdentifier(viewPager: ViewPager2): String? {
|
fun getCurrentIdentifier(viewPager: ViewPager2): String? {
|
||||||
val position = viewPager.currentItem
|
val position = viewPager.currentItem
|
||||||
return screenshots.getOrNull(position)?.identifier
|
return screenshots.getOrNull(position)?.identifier
|
||||||
@@ -202,9 +212,16 @@ class ScreenshotsFragment(): DialogFragment() {
|
|||||||
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
|
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
|
||||||
holder as ViewHolder
|
holder as ViewHolder
|
||||||
val screenshot = screenshots[position]
|
val screenshot = screenshots[position]
|
||||||
holder.image.load(CoilDownloader.createScreenshotUri(repository!!, packageName, screenshot)) {
|
val (width, height) = size
|
||||||
placeholder(holder.placeholder)
|
if (width > 0 && height > 0) {
|
||||||
error(holder.placeholder)
|
holder.image.load(PicassoDownloader.createScreenshotUri(repository!!, packageName, screenshot)) {
|
||||||
|
placeholder(holder.placeholder)
|
||||||
|
error(holder.placeholder)
|
||||||
|
resize(width, height)
|
||||||
|
centerInside()
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
holder.image.clear()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,12 +6,16 @@ import android.content.res.ColorStateList
|
|||||||
import android.content.res.Resources
|
import android.content.res.Resources
|
||||||
import android.graphics.Typeface
|
import android.graphics.Typeface
|
||||||
import android.graphics.drawable.Drawable
|
import android.graphics.drawable.Drawable
|
||||||
|
import android.net.Uri
|
||||||
import android.util.TypedValue
|
import android.util.TypedValue
|
||||||
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 android.widget.ImageView
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
|
import com.squareup.picasso.Picasso
|
||||||
|
import com.squareup.picasso.RequestCreator
|
||||||
import kotlin.math.*
|
import kotlin.math.*
|
||||||
|
|
||||||
object TypefaceExtra {
|
object TypefaceExtra {
|
||||||
@@ -51,3 +55,11 @@ fun TextView.setTextSizeScaled(size: Int) {
|
|||||||
fun ViewGroup.inflate(layoutResId: Int): View {
|
fun ViewGroup.inflate(layoutResId: Int): View {
|
||||||
return LayoutInflater.from(context).inflate(layoutResId, this, false)
|
return LayoutInflater.from(context).inflate(layoutResId, this, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun ImageView.load(uri: Uri, builder: RequestCreator.() -> Unit) {
|
||||||
|
Picasso.get().load(uri).noFade().apply(builder).into(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun ImageView.clear() {
|
||||||
|
Picasso.get().cancelRequest(this)
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user