Mercurial > cgi-bin > hgweb.cgi > SimpleResizer
view app/src/main/java/com/bartsent/simpleresizer/EditImage.kt @ 1:f26f61a8a9ad
Make the EditImage activity stateful.
author | David Barts <n5jrn@me.com> |
---|---|
date | Mon, 01 Feb 2021 08:30:12 -0800 |
parents | 13935000c2d9 |
children | 06825e49f7aa |
line wrap: on
line source
package com.bartsent.simpleresizer import android.graphics.Bitmap import android.graphics.BitmapFactory import android.net.Uri import android.os.Build import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.provider.OpenableColumns import android.text.Html import android.text.Spanned import android.view.View import android.widget.TextView import android.widget.Toast import androidx.annotation.RequiresApi import androidx.databinding.DataBindingUtil import com.bartsent.simpleresizer.databinding.ActivityEditImageBinding class EditImage : AppCompatActivity() { object State { var uri: Uri? = null var bitmap: Bitmap? = null } private lateinit var binding: ActivityEditImageBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityEditImageBinding.inflate(layoutInflater) setContentView(binding.root) } private fun item(title: String, value: Any?): String = if (value == null) "" else "<b>${title}:</b> ${Html.escapeHtml(value.toString())}<br/>" private fun fromHtml(input: String): Spanned = if (android.os.Build.VERSION.SDK_INT >= 24) { Html.fromHtml(input, Html.FROM_HTML_MODE_COMPACT) } else { Html.fromHtml(input) } // Cribbed from: https://stackoverflow.com/questions/5568874/how-to-extract-the-file-name-from-uri-returned-from-intent-action-get-content private fun getFileName(uri: Uri): String? { var result: String? = null if (uri.scheme == "content") { contentResolver.query(uri, null, null, null, null).use { cursor -> if (cursor != null && cursor.moveToFirst()) result = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME)) } } if (result == null) { val uriPath = uri.path result = uriPath?.substring(uriPath.lastIndexOf('/') + 1) } return result } override fun onResume() { super.onResume() // Read the URI, die if we can't. val imageUri = intent?.data if (imageUri == null) { binding.imageStatusReport.text = fromHtml("<b>Error:</b> no URI supplied!") return } // Being stateful stops data loss when the phone gets rotated. if (imageUri != State.uri) { State.uri = imageUri State.bitmap = contentResolver.openInputStream(imageUri).use { BitmapFactory.decodeStream(it) } } if (State.bitmap == null) { binding.imageStatusReport.text = fromHtml("<b>Error:</b> bad image!") return } val imageBitmap = State.bitmap!! // OK, we have the Bitmap; operate on it. binding.imageStatusReport.text = fromHtml( item("Uri", imageUri) + item("File-Name", getFileName((imageUri))) + item("Byte-Count", imageBitmap.byteCount) + item("Density", imageBitmap.density) + item("Height", imageBitmap.height) + item("Width", imageBitmap.width) + item("Has-Alpha", imageBitmap.hasAlpha()) ) } }