comparison 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
comparison
equal deleted inserted replaced
0:13935000c2d9 1:f26f61a8a9ad
1 package com.bartsent.simpleresizer 1 package com.bartsent.simpleresizer
2 2
3 import android.graphics.Bitmap
3 import android.graphics.BitmapFactory 4 import android.graphics.BitmapFactory
4 import android.net.Uri 5 import android.net.Uri
5 import android.os.Build 6 import android.os.Build
6 import androidx.appcompat.app.AppCompatActivity 7 import androidx.appcompat.app.AppCompatActivity
7 import android.os.Bundle 8 import android.os.Bundle
9 import android.provider.OpenableColumns
8 import android.text.Html 10 import android.text.Html
9 import android.text.Spanned 11 import android.text.Spanned
10 import android.view.View 12 import android.view.View
11 import android.widget.TextView 13 import android.widget.TextView
12 import android.widget.Toast 14 import android.widget.Toast
14 import androidx.databinding.DataBindingUtil 16 import androidx.databinding.DataBindingUtil
15 import com.bartsent.simpleresizer.databinding.ActivityEditImageBinding 17 import com.bartsent.simpleresizer.databinding.ActivityEditImageBinding
16 18
17 19
18 class EditImage : AppCompatActivity() { 20 class EditImage : AppCompatActivity() {
21 object State {
22 var uri: Uri? = null
23 var bitmap: Bitmap? = null
24 }
25
19 private lateinit var binding: ActivityEditImageBinding 26 private lateinit var binding: ActivityEditImageBinding
20 27
21 override fun onCreate(savedInstanceState: Bundle?) { 28 override fun onCreate(savedInstanceState: Bundle?) {
22 super.onCreate(savedInstanceState) 29 super.onCreate(savedInstanceState)
23 binding = ActivityEditImageBinding.inflate(layoutInflater) 30 binding = ActivityEditImageBinding.inflate(layoutInflater)
35 Html.fromHtml(input, Html.FROM_HTML_MODE_COMPACT) 42 Html.fromHtml(input, Html.FROM_HTML_MODE_COMPACT)
36 } else { 43 } else {
37 Html.fromHtml(input) 44 Html.fromHtml(input)
38 } 45 }
39 46
47 // Cribbed from: https://stackoverflow.com/questions/5568874/how-to-extract-the-file-name-from-uri-returned-from-intent-action-get-content
48 private fun getFileName(uri: Uri): String? {
49 var result: String? = null
50 if (uri.scheme == "content") {
51 contentResolver.query(uri, null, null, null, null).use { cursor ->
52 if (cursor != null && cursor.moveToFirst())
53 result = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME))
54 }
55 }
56 if (result == null) {
57 val uriPath = uri.path
58 result = uriPath?.substring(uriPath.lastIndexOf('/') + 1)
59 }
60 return result
61 }
62
40 override fun onResume() { 63 override fun onResume() {
41 super.onResume() 64 super.onResume()
65
66 // Read the URI, die if we can't.
42 val imageUri = intent?.data 67 val imageUri = intent?.data
43 if (imageUri == null) { 68 if (imageUri == null) {
44 binding.imageStatusReport.text = fromHtml("<b>Error:</b> no URI supplied!") 69 binding.imageStatusReport.text = fromHtml("<b>Error:</b> no URI supplied!")
45 return; 70 return
46 } 71 }
47 val imageBitmap = contentResolver.openInputStream(imageUri).use { 72
48 BitmapFactory.decodeStream(it) 73 // Being stateful stops data loss when the phone gets rotated.
74 if (imageUri != State.uri) {
75 State.uri = imageUri
76 State.bitmap = contentResolver.openInputStream(imageUri).use {
77 BitmapFactory.decodeStream(it)
78 }
49 } 79 }
80 if (State.bitmap == null) {
81 binding.imageStatusReport.text = fromHtml("<b>Error:</b> bad image!")
82 return
83 }
84 val imageBitmap = State.bitmap!!
85
86 // OK, we have the Bitmap; operate on it.
50 binding.imageStatusReport.text = fromHtml( 87 binding.imageStatusReport.text = fromHtml(
51 item("Uri", imageUri) + 88 item("Uri", imageUri) +
89 item("File-Name", getFileName((imageUri))) +
52 item("Byte-Count", imageBitmap.byteCount) + 90 item("Byte-Count", imageBitmap.byteCount) +
53 item("Density", imageBitmap.density) + 91 item("Density", imageBitmap.density) +
54 item("Height", imageBitmap.height) + 92 item("Height", imageBitmap.height) +
55 item("Width", imageBitmap.width) + 93 item("Width", imageBitmap.width) +
56 item("Has-Alpha", imageBitmap.hasAlpha()) 94 item("Has-Alpha", imageBitmap.hasAlpha())
57 ) 95 )
58 Toast.makeText(applicationContext, "Exiting.", Toast.LENGTH_LONG).show() // debug
59 } 96 }
60 } 97 }