Mercurial > cgi-bin > hgweb.cgi > SimpleResizer
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 } |