srctree

Robin Linden parent a9bdab90 5025392a
Migrate from Picasso to Glide for image loading

inlinesplit
WORKSPACE added: 24, removed: 48, total 0
@@ -180,7 +180,6 @@ maven_install(
"com.google.android.material:material:1.4.0",
"com.google.code.gson:gson:2.8.6",
"com.google.guava:guava:19.0",
"com.squareup.picasso:picasso:2.8",
"com.typesafe.scala-logging:scala-logging_2.11:3.7.2",
"javax.inject:javax.inject:1",
"junit:junit:4.13.1",
 
atox/build.gradle.kts added: 24, removed: 48, total 0
@@ -77,9 +77,9 @@ dependencies {
 
implementation(libs.androidx.multidex)
 
implementation(libs.nayuki.qrcodegen)
implementation(libs.bumptech.glide)
 
implementation(libs.square.picasso)
implementation(libs.nayuki.qrcodegen)
 
debugImplementation(libs.square.leakcanary)
 
 
atox/src/main/kotlin/ui/NotificationHelper.kt added: 24, removed: 48, total 0
@@ -8,12 +8,6 @@ import android.app.NotificationManager
import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import android.graphics.Bitmap
import android.graphics.Canvas
import android.graphics.Paint
import android.graphics.PorterDuff
import android.graphics.PorterDuffXfermode
import android.graphics.Rect
import android.media.AudioAttributes
import android.media.RingtoneManager
import android.os.Build
@@ -24,10 +18,10 @@ import androidx.core.app.Person
import androidx.core.app.RemoteInput
import androidx.core.content.getSystemService
import androidx.core.graphics.drawable.IconCompat
import androidx.core.graphics.drawable.toBitmap
import androidx.core.os.bundleOf
import androidx.navigation.NavDeepLinkBuilder
import com.squareup.picasso.Picasso
import com.squareup.picasso.Transformation
import com.bumptech.glide.Glide
import javax.inject.Inject
import javax.inject.Singleton
import ltd.evilcorp.atox.Action
@@ -92,27 +86,6 @@ class NotificationHelper @Inject constructor(
 
fun dismissNotifications(publicKey: PublicKey) = notifier.cancel(publicKey.string().hashCode())
 
private val circleTransform = object : Transformation {
override fun transform(bitmap: Bitmap): Bitmap {
val output = Bitmap.createBitmap(bitmap.width, bitmap.height, Bitmap.Config.ARGB_8888)
val canvas = Canvas(output)
val paint = Paint()
val rect = Rect(0, 0, bitmap.width, bitmap.height)
 
paint.isAntiAlias = true
canvas.drawARGB(0, 0, 0, 0)
canvas.drawCircle(bitmap.width / 2.0f, bitmap.height / 2.0f, bitmap.width / 2.0f, paint)
paint.xfermode = PorterDuffXfermode(PorterDuff.Mode.SRC_IN)
canvas.drawBitmap(bitmap, rect, rect, paint)
if (bitmap != output) {
bitmap.recycle()
}
return output
}
 
override fun key() = "circleTransform"
}
 
fun showMessageNotification(
contact: Contact,
message: String,
@@ -130,7 +103,9 @@ class NotificationHelper @Inject constructor(
 
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
val icon = if (contact.avatarUri.isNotEmpty()) {
IconCompat.createWithBitmap(Picasso.get().load(contact.avatarUri).transform(circleTransform).get())
IconCompat.createWithBitmap(
Glide.with(context).load(contact.avatarUri).circleCrop().submit().get().toBitmap()
)
} else null
 
val chatPartner = Person.Builder()
 
atox/src/main/kotlin/ui/chat/ChatAdapter.kt added: 24, removed: 48, total 0
@@ -19,7 +19,9 @@ import android.widget.ListView
import android.widget.ProgressBar
import android.widget.RelativeLayout
import android.widget.TextView
import com.squareup.picasso.Picasso
import com.bumptech.glide.Glide
import com.bumptech.glide.load.resource.bitmap.DownsampleStrategy
import com.bumptech.glide.signature.ObjectKey
import java.net.URLConnection
import java.text.DateFormat
import java.util.Locale
@@ -191,9 +193,12 @@ class ChatAdapter(
 
if (fileTransfer.isImage() && (fileTransfer.isComplete() || fileTransfer.outgoing)) {
vh.completedLayout.visibility = View.VISIBLE
Picasso.get().load(fileTransfer.destination)
.resize((Resources.getSystem().displayMetrics.widthPixels * 0.75).roundToInt(), 0)
.onlyScaleDown()
Glide.with(vh.imagePreview)
.load(fileTransfer.destination)
// Make sure fts with the same destination have unique caches.
.signature(ObjectKey(fileTransfer.id))
.downsample(DownsampleStrategy.AT_MOST)
.override((Resources.getSystem().displayMetrics.widthPixels * 0.75).roundToInt(), 1000)
.into(vh.imagePreview)
} else {
vh.completedLayout.visibility = View.GONE
 
atox/src/main/kotlin/ui/chat/ChatViewModel.kt added: 24, removed: 48, total 0
@@ -12,7 +12,6 @@ import android.widget.Toast
import androidx.lifecycle.LiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.asLiveData
import com.squareup.picasso.Picasso
import java.io.File
import java.io.FileInputStream
import javax.inject.Inject
@@ -125,9 +124,6 @@ class ChatViewModel @Inject constructor(
}
 
fun createFt(file: Uri) = scope.launch {
// Make sure there's no stale cached image in Picasso.
// This happens if the user sends 2 different files with the same path (e.g. by overwriting one with the other.)
Picasso.get().invalidate(file)
fileTransferManager.create(publicKey, file)
}
 
 
gradle/libs.versions.toml added: 24, removed: 48, total 0
@@ -58,7 +58,8 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t
nayuki-qrcodegen = "io.nayuki:qrcodegen:1.8.0"
 
square-leakcanary = "com.squareup.leakcanary:leakcanary-android:2.9.1"
square-picasso = "com.squareup.picasso:picasso:2.8"
 
bumptech-glide = "com.github.bumptech.glide:glide:4.13.1"
 
tox4j-android-aarch64 = { module = "org.toktok:tox4j-c_aarch64-linux-android", version.ref = "tox4j-android" }
tox4j-android-arm = { module = "org.toktok:tox4j-c_armv7a-linux-androideabi", version.ref = "tox4j-android" }