mirror of
https://github.com/oxen-io/session-android.git
synced 2025-02-17 11:48:25 +00:00
Cleaning up styling and using registerForActivityResult
This commit is contained in:
parent
cab8c03a84
commit
fea17d77a1
@ -6,17 +6,14 @@ import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.pm.PackageManager
|
||||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.provider.MediaStore
|
||||
import androidx.activity.result.ActivityResultLauncher
|
||||
import androidx.annotation.StringRes
|
||||
import androidx.core.content.ContextCompat
|
||||
import com.canhub.cropper.CropImage
|
||||
import com.canhub.cropper.CropImageContract
|
||||
import com.canhub.cropper.CropImageContractOptions
|
||||
import com.canhub.cropper.CropImageView
|
||||
import com.canhub.cropper.options
|
||||
import network.loki.messenger.R
|
||||
import org.session.libsession.utilities.getColorFromAttr
|
||||
import org.session.libsignal.utilities.ExternalStorageUtil.getImageDir
|
||||
import org.session.libsignal.utilities.Log
|
||||
import org.session.libsignal.utilities.NoExternalStorageException
|
||||
@ -26,24 +23,26 @@ import java.io.File
|
||||
import java.io.IOException
|
||||
import java.util.LinkedList
|
||||
|
||||
object AvatarSelection {
|
||||
class AvatarSelection(
|
||||
private val activity: Activity,
|
||||
private val onAvatarCropped: ActivityResultLauncher<CropImageContractOptions>,
|
||||
private val onPickImage: ActivityResultLauncher<Intent>
|
||||
) {
|
||||
private val TAG: String = AvatarSelection::class.java.simpleName
|
||||
|
||||
const val REQUEST_CODE_IMAGE_PICK: Int = 888
|
||||
private val bgColor by lazy { activity.getColorFromAttr(android.R.attr.colorPrimary) }
|
||||
private val txtColor by lazy { activity.getColorFromAttr(android.R.attr.textColorPrimary) }
|
||||
private val imageScrim by lazy { ContextCompat.getColor(activity, R.color.avatar_background) }
|
||||
private val activityTitle by lazy { activity.getString(R.string.CropImageActivity_profile_avatar) }
|
||||
|
||||
/**
|
||||
* Returns result on [.REQUEST_CODE_CROP_IMAGE]
|
||||
*/
|
||||
fun circularCropImage(
|
||||
activity: Activity,
|
||||
launcher: ActivityResultLauncher<CropImageContractOptions>,
|
||||
inputFile: Uri?,
|
||||
outputFile: Uri?,
|
||||
@StringRes title: Int,
|
||||
bgColor: Int,
|
||||
txtColor: Int
|
||||
outputFile: Uri?
|
||||
) {
|
||||
launcher.launch(
|
||||
onAvatarCropped.launch(
|
||||
options(inputFile) {
|
||||
setGuidelines(CropImageView.Guidelines.ON)
|
||||
setAspectRatio(1, 1)
|
||||
@ -51,11 +50,11 @@ object AvatarSelection {
|
||||
setOutputUri(outputFile)
|
||||
setAllowRotation(true)
|
||||
setAllowFlipping(true)
|
||||
setBackgroundColor(ContextCompat.getColor(activity, R.color.avatar_background))
|
||||
setBackgroundColor(imageScrim)
|
||||
setToolbarColor(bgColor)
|
||||
setActivityBackgroundColor(bgColor)
|
||||
setToolbarTintColor(txtColor)
|
||||
setActivityTitle(activity.getString(title))
|
||||
setActivityTitle(activityTitle)
|
||||
}
|
||||
)
|
||||
}
|
||||
@ -66,7 +65,6 @@ object AvatarSelection {
|
||||
* @return Temporary capture file if created.
|
||||
*/
|
||||
fun startAvatarSelection(
|
||||
activity: Activity,
|
||||
includeClear: Boolean,
|
||||
attemptToIncludeCamera: Boolean
|
||||
): File? {
|
||||
@ -87,7 +85,7 @@ object AvatarSelection {
|
||||
}
|
||||
|
||||
val chooserIntent = createAvatarSelectionIntent(activity, captureFile, includeClear)
|
||||
activity.startActivityForResult(chooserIntent, REQUEST_CODE_IMAGE_PICK)
|
||||
onPickImage.launch(chooserIntent)
|
||||
return captureFile
|
||||
}
|
||||
|
||||
|
@ -18,6 +18,7 @@ import android.view.View
|
||||
import android.view.inputmethod.EditorInfo
|
||||
import android.view.inputmethod.InputMethodManager
|
||||
import android.widget.Toast
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.compose.animation.Crossfade
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
@ -61,7 +62,6 @@ import org.session.libsession.utilities.ProfileKeyUtil
|
||||
import org.session.libsession.utilities.ProfilePictureUtilities
|
||||
import org.session.libsession.utilities.SSKEnvironment.ProfileManagerProtocol
|
||||
import org.session.libsession.utilities.TextSecurePreferences
|
||||
import org.session.libsession.utilities.getColorFromAttr
|
||||
import org.session.libsession.utilities.recipients.Recipient
|
||||
import org.session.libsession.utilities.truncateIdForDisplay
|
||||
import org.session.libsignal.utilities.Log
|
||||
@ -81,12 +81,12 @@ import org.thoughtcrime.securesms.ui.Cell
|
||||
import org.thoughtcrime.securesms.ui.Divider
|
||||
import org.thoughtcrime.securesms.ui.LargeItemButton
|
||||
import org.thoughtcrime.securesms.ui.LargeItemButtonWithDrawable
|
||||
import org.thoughtcrime.securesms.ui.theme.LocalDimensions
|
||||
import org.thoughtcrime.securesms.ui.theme.dangerButtonColors
|
||||
import org.thoughtcrime.securesms.ui.components.PrimaryOutlineButton
|
||||
import org.thoughtcrime.securesms.ui.components.PrimaryOutlineCopyButton
|
||||
import org.thoughtcrime.securesms.ui.contentDescription
|
||||
import org.thoughtcrime.securesms.ui.setThemedContent
|
||||
import org.thoughtcrime.securesms.ui.theme.LocalDimensions
|
||||
import org.thoughtcrime.securesms.ui.theme.dangerButtonColors
|
||||
import org.thoughtcrime.securesms.util.BitmapDecodingException
|
||||
import org.thoughtcrime.securesms.util.BitmapUtil
|
||||
import org.thoughtcrime.securesms.util.ConfigurationMessageUtilities
|
||||
@ -112,9 +112,6 @@ class SettingsActivity : PassphraseRequiredActionBarActivity() {
|
||||
|
||||
private val hexEncodedPublicKey: String get() = TextSecurePreferences.getLocalNumber(this)!!
|
||||
|
||||
private val bgColor by lazy { getColorFromAttr(android.R.attr.colorPrimary) }
|
||||
private val txtColor by lazy { getColorFromAttr(android.R.attr.textColorPrimary) }
|
||||
|
||||
private val onAvatarCropped = registerForActivityResult(CropImageContract()) { result ->
|
||||
when {
|
||||
result.isSuccessful -> {
|
||||
@ -145,6 +142,18 @@ class SettingsActivity : PassphraseRequiredActionBarActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
private val onPickImage = registerForActivityResult(
|
||||
ActivityResultContracts.StartActivityForResult()
|
||||
){ result ->
|
||||
if (result.resultCode != Activity.RESULT_OK) return@registerForActivityResult
|
||||
|
||||
val outputFile = Uri.fromFile(File(cacheDir, "cropped"))
|
||||
val inputFile: Uri? = result.data?.data ?: tempFile?.let(Uri::fromFile)
|
||||
cropImage(inputFile, outputFile)
|
||||
}
|
||||
|
||||
private val avatarSelection = AvatarSelection(this, onAvatarCropped, onPickImage)
|
||||
|
||||
companion object {
|
||||
private const val SCROLL_STATE = "SCROLL_STATE"
|
||||
}
|
||||
@ -217,27 +226,6 @@ class SettingsActivity : PassphraseRequiredActionBarActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||
super.onActivityResult(requestCode, resultCode, data)
|
||||
if (resultCode != Activity.RESULT_OK) return
|
||||
when (requestCode) {
|
||||
AvatarSelection.REQUEST_CODE_IMAGE_PICK -> {
|
||||
val outputFile = Uri.fromFile(File(cacheDir, "cropped"))
|
||||
val inputFile: Uri? = data?.data ?: tempFile?.let(Uri::fromFile)
|
||||
AvatarSelection.circularCropImage(
|
||||
activity = this,
|
||||
launcher = onAvatarCropped,
|
||||
inputFile = inputFile,
|
||||
outputFile = outputFile,
|
||||
title = R.string.CropImageActivity_profile_avatar,
|
||||
bgColor = bgColor,
|
||||
txtColor = txtColor
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
|
||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
|
||||
Permissions.onRequestPermissionsResult(this, requestCode, permissions, grantResults)
|
||||
@ -439,10 +427,17 @@ class SettingsActivity : PassphraseRequiredActionBarActivity() {
|
||||
Permissions.with(this)
|
||||
.request(Manifest.permission.CAMERA)
|
||||
.onAnyResult {
|
||||
tempFile = AvatarSelection.startAvatarSelection(this, false, true)
|
||||
tempFile = avatarSelection.startAvatarSelection( false, true)
|
||||
}
|
||||
.execute()
|
||||
}
|
||||
|
||||
private fun cropImage(inputFile: Uri?, outputFile: Uri?){
|
||||
avatarSelection.circularCropImage(
|
||||
inputFile = inputFile,
|
||||
outputFile = outputFile,
|
||||
)
|
||||
}
|
||||
// endregion
|
||||
|
||||
private inner class DisplayNameEditActionModeCallback: ActionMode.Callback {
|
||||
|
Loading…
x
Reference in New Issue
Block a user