From 928f97dc977edfae35141a917b8ded6d1390d3e8 Mon Sep 17 00:00:00 2001 From: Hardcore Sushi Date: Tue, 17 Aug 2021 19:17:41 +0200 Subject: [PATCH] Don't re-compress avatars before storing in DB --- app/build.gradle | 10 +++---- .../hardcore/aira/CreateIdentityFragment.kt | 9 +++---- .../sushi/hardcore/aira/SettingsActivity.kt | 27 +++++++++---------- .../sushi/hardcore/aira/utils/AvatarPicker.kt | 26 ++---------------- 4 files changed, 24 insertions(+), 48 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 6305ab1..2565236 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -46,15 +46,15 @@ android { dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" - implementation 'androidx.core:core-ktx:1.5.0' - implementation 'androidx.appcompat:appcompat:1.3.0' - implementation "androidx.fragment:fragment-ktx:1.3.4" + implementation 'androidx.core:core-ktx:1.6.0' + implementation 'androidx.appcompat:appcompat:1.3.1' + implementation "androidx.fragment:fragment-ktx:1.3.6" implementation "androidx.preference:preference-ktx:1.1.1" - implementation 'com.google.android.material:material:1.3.0' + implementation 'com.google.android.material:material:1.4.0' implementation 'net.i2p.crypto:eddsa:0.3.0' implementation "org.whispersystems:curve25519-android:0.5.0" - implementation 'androidx.constraintlayout:constraintlayout:2.0.4' + implementation 'androidx.constraintlayout:constraintlayout:2.1.0' implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0" implementation 'com.github.bumptech.glide:glide:4.12.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0' diff --git a/app/src/main/java/sushi/hardcore/aira/CreateIdentityFragment.kt b/app/src/main/java/sushi/hardcore/aira/CreateIdentityFragment.kt index 23da16c..ac74a28 100644 --- a/app/src/main/java/sushi/hardcore/aira/CreateIdentityFragment.kt +++ b/app/src/main/java/sushi/hardcore/aira/CreateIdentityFragment.kt @@ -9,6 +9,7 @@ import android.view.View import android.view.ViewGroup import android.widget.Toast import androidx.appcompat.app.AppCompatActivity +import com.bumptech.glide.Glide import sushi.hardcore.aira.databinding.FragmentCreateIdentityBinding import sushi.hardcore.aira.utils.AvatarPicker @@ -25,11 +26,9 @@ class CreateIdentityFragment(private val activity: AppCompatActivity) : Fragment } } - private val avatarPicker = AvatarPicker(activity) { picker, avatar -> - picker.setOnAvatarCompressed { compressedAvatar -> - AIRADatabase.setIdentityAvatar(Constants.getDatabaseFolder(activity), compressedAvatar) - } - avatar.circleCrop().into(binding.avatar) + private val avatarPicker = AvatarPicker(activity) { avatar -> + AIRADatabase.setIdentityAvatar(Constants.getDatabaseFolder(activity), avatar) + Glide.with(this).load(avatar).circleCrop().into(binding.avatar) } private lateinit var binding: FragmentCreateIdentityBinding diff --git a/app/src/main/java/sushi/hardcore/aira/SettingsActivity.kt b/app/src/main/java/sushi/hardcore/aira/SettingsActivity.kt index e9307ab..73d97dd 100644 --- a/app/src/main/java/sushi/hardcore/aira/SettingsActivity.kt +++ b/app/src/main/java/sushi/hardcore/aira/SettingsActivity.kt @@ -29,11 +29,9 @@ class SettingsActivity: AppCompatActivity() { class MySettingsFragment(private val activity: AppCompatActivity): PreferenceFragmentCompat() { private lateinit var databaseFolder: String private lateinit var airaService: AIRAService - private val avatarPicker = AvatarPicker(activity) { picker, avatar -> + private val avatarPicker = AvatarPicker(activity) { avatar -> if (::airaService.isInitialized) { - picker.setOnAvatarCompressed { compressedAvatar -> - airaService.changeAvatar(compressedAvatar) - } + airaService.changeAvatar(avatar) } displayAvatar(avatar) } @@ -174,19 +172,20 @@ class SettingsActivity: AppCompatActivity() { if (avatar == null) { identityAvatarPreference.setIcon(R.drawable.ic_face) } else { - displayAvatar(Glide.with(this).load(avatar)) + Glide + .with(this) + .load(avatar) + .apply(RequestOptions().override(90)) //reduce image to be the same size as other icons + .circleCrop() + .into(object : CustomTarget() { + override fun onResourceReady(resource: Drawable, transition: Transition?) { + identityAvatarPreference.icon = resource + } + override fun onLoadCleared(placeholder: Drawable?) {} + }) } } - private fun displayAvatar(glideBuilder: RequestBuilder) { - glideBuilder.apply(RequestOptions().override(90)).circleCrop().into(object : CustomTarget() { - override fun onResourceReady(resource: Drawable, transition: Transition?) { - identityAvatarPreference.icon = resource - } - override fun onLoadCleared(placeholder: Drawable?) {} - }) - } - private fun changePassword(isIdentityProtected: Boolean, oldPasswordEditText: EditText, newPassword: ByteArray?) { val oldPassword = if (isIdentityProtected) { oldPasswordEditText.text.toString().toByteArray() diff --git a/app/src/main/java/sushi/hardcore/aira/utils/AvatarPicker.kt b/app/src/main/java/sushi/hardcore/aira/utils/AvatarPicker.kt index ce786b6..2ca1b78 100644 --- a/app/src/main/java/sushi/hardcore/aira/utils/AvatarPicker.kt +++ b/app/src/main/java/sushi/hardcore/aira/utils/AvatarPicker.kt @@ -1,26 +1,17 @@ package sushi.hardcore.aira.utils -import android.graphics.Bitmap -import android.graphics.drawable.Drawable import android.widget.Toast import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AppCompatActivity -import androidx.core.graphics.drawable.toBitmap -import com.bumptech.glide.Glide -import com.bumptech.glide.RequestBuilder -import com.bumptech.glide.request.target.CustomTarget -import com.bumptech.glide.request.transition.Transition import sushi.hardcore.aira.Constants import sushi.hardcore.aira.R -import java.io.ByteArrayOutputStream class AvatarPicker( private val activity: AppCompatActivity, - private val onAvatarPicked: (AvatarPicker, RequestBuilder) -> Unit, + private val onAvatarPicked: (ByteArray) -> Unit, ) { private lateinit var picker: ActivityResultLauncher - private lateinit var avatar: RequestBuilder fun register() { picker = activity.registerForActivityResult(ActivityResultContracts.GetContent()) { uri -> if (uri != null) { @@ -30,26 +21,13 @@ class AvatarPicker( if (image.size > Constants.MAX_AVATAR_SIZE) { Toast.makeText(activity, R.string.avatar_too_large, Toast.LENGTH_SHORT).show() } else { - avatar = Glide.with(activity).load(image).centerCrop() - onAvatarPicked(this, avatar) + onAvatarPicked(image) } } } } } - fun setOnAvatarCompressed(onCompressed: (ByteArray) -> Unit) { - avatar.into(object: CustomTarget() { - override fun onResourceReady(resource: Drawable, transition: Transition?) { - val avatar = ByteArrayOutputStream() - if (resource.toBitmap().compress(Bitmap.CompressFormat.PNG, 100, avatar)) { - onCompressed(avatar.toByteArray()) - } - } - override fun onLoadCleared(placeholder: Drawable?) {} - }) - } - fun launch() { picker.launch("image/*") }