Skip to content

Commit 917aa24

Browse files
committed
refactor: slightly refine NinePatchBitmapFactory.kt
1 parent 37663b7 commit 917aa24

File tree

1 file changed

+33
-62
lines changed

1 file changed

+33
-62
lines changed

app/src/main/java/com/osfans/trime/util/NinePatchBitmapFactory.kt

Lines changed: 33 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,7 @@ import android.graphics.Rect
1212
import android.graphics.drawable.NinePatchDrawable
1313
import android.util.DisplayMetrics
1414
import timber.log.Timber
15-
import java.io.BufferedInputStream
1615
import java.io.File
17-
import java.io.FileInputStream
18-
import java.io.IOException
1916
import java.nio.ByteBuffer
2017
import java.nio.ByteOrder
2118

@@ -44,9 +41,9 @@ object NinePatchBitmapFactory {
4441

4542
private fun createNinePatchWithCapInsets(
4643
res: Resources?,
47-
bitmap: Bitmap?,
48-
rangeListX: List<Range>?,
49-
rangeListY: List<Range>?,
44+
bitmap: Bitmap,
45+
rangeListX: List<Range>,
46+
rangeListY: List<Range>,
5047
srcName: String?,
5148
): NinePatchDrawable {
5249
val buffer =
@@ -55,12 +52,12 @@ object NinePatchBitmapFactory {
5552
}
5653

5754
private fun getByteBuffer(
58-
rangeListX: List<Range>?,
59-
rangeListY: List<Range>?,
55+
rangeListX: List<Range>,
56+
rangeListY: List<Range>,
6057
): ByteBuffer {
6158
val buffer =
6259
ByteBuffer
63-
.allocate(4 + 4 * 7 + 4 * 2 * rangeListX!!.size + 4 * 2 * rangeListY!!.size + 4 * 9)
60+
.allocate(4 + 4 * 7 + 4 * 2 * rangeListX.size + 4 * 2 * rangeListY.size + 4 * 9)
6461
.order(
6562
ByteOrder.nativeOrder(),
6663
)
@@ -104,7 +101,7 @@ object NinePatchBitmapFactory {
104101
private fun checkBitmap(bitmap: Bitmap): RangeLists {
105102
val width = bitmap.width
106103
val height = bitmap.height
107-
val rangeListX: MutableList<Range> = ArrayList()
104+
val rangeListX = arrayListOf<Range>()
108105
var pos = -1
109106
for (i in 1 until width - 1) {
110107
val color = bitmap.getPixel(i, 0)
@@ -119,19 +116,13 @@ object NinePatchBitmapFactory {
119116
}
120117
} else {
121118
if (pos != -1) {
122-
val range = Range()
123-
range.start = pos
124-
range.end = i - 1
125-
rangeListX.add(range)
119+
rangeListX.add(Range(pos, i - 1))
126120
pos = -1
127121
}
128122
}
129123
}
130124
if (pos != -1) {
131-
val range = Range()
132-
range.start = pos
133-
range.end = width - 2
134-
rangeListX.add(range)
125+
rangeListX.add(Range(pos, width - 2))
135126
}
136127
for (range in rangeListX) {
137128
Timber.v("(" + range.start + "," + range.end + ")")
@@ -150,27 +141,18 @@ object NinePatchBitmapFactory {
150141
}
151142
} else {
152143
if (pos != -1) {
153-
val range = Range()
154-
range.start = pos
155-
range.end = i - 1
156-
rangeListY.add(range)
144+
rangeListY.add(Range(pos, i - 1))
157145
pos = -1
158146
}
159147
}
160148
}
161149
if (pos != -1) {
162-
val range = Range()
163-
range.start = pos
164-
range.end = height - 2
165-
rangeListY.add(range)
150+
rangeListY.add(Range(pos, height - 2))
166151
}
167152
for (range in rangeListY) {
168153
Timber.v("(" + range.start + "," + range.end + ")")
169154
}
170-
val rangeLists = RangeLists()
171-
rangeLists.rangeListX = rangeListX
172-
rangeLists.rangeListY = rangeListY
173-
return rangeLists
155+
return RangeLists(rangeListX, rangeListY)
174156
}
175157

176158
private fun trimBitmap(bitmap: Bitmap): Bitmap {
@@ -179,42 +161,31 @@ object NinePatchBitmapFactory {
179161
return Bitmap.createBitmap(bitmap, 1, 1, width - 2, height - 2)
180162
}
181163

182-
fun loadBitmap(file: File?): Bitmap? {
183-
var bis: BufferedInputStream? = null
184-
try {
185-
bis = BufferedInputStream(FileInputStream(file))
186-
return BitmapFactory.decodeStream(bis)
187-
} catch (e: IOException) {
188-
e.printStackTrace()
189-
} finally {
190-
try {
191-
bis!!.close()
192-
} catch (e: Exception) {
164+
fun loadBitmap(file: File): Bitmap? =
165+
runCatching {
166+
file.inputStream().buffered().use {
167+
BitmapFactory.decodeStream(it)
193168
}
194-
}
195-
return null
196-
}
169+
}.getOrNull()
197170

198-
fun getDensityPostfix(res: Resources): String? {
199-
var result: String? = null
171+
fun getDensityPostfix(res: Resources): String? =
200172
when (res.displayMetrics.densityDpi) {
201-
DisplayMetrics.DENSITY_LOW -> result = "ldpi"
202-
DisplayMetrics.DENSITY_MEDIUM -> result = "mdpi"
203-
DisplayMetrics.DENSITY_HIGH -> result = "hdpi"
204-
DisplayMetrics.DENSITY_XHIGH -> result = "xhdpi"
205-
DisplayMetrics.DENSITY_XXHIGH -> result = "xxhdpi"
206-
DisplayMetrics.DENSITY_XXXHIGH -> result = "xxxhdpi"
173+
DisplayMetrics.DENSITY_LOW -> "ldpi"
174+
DisplayMetrics.DENSITY_MEDIUM -> "mdpi"
175+
DisplayMetrics.DENSITY_HIGH -> "hdpi"
176+
DisplayMetrics.DENSITY_XHIGH -> "xhdpi"
177+
DisplayMetrics.DENSITY_XXHIGH -> "xxhdpi"
178+
DisplayMetrics.DENSITY_XXXHIGH -> "xxxhdpi"
179+
else -> null
207180
}
208-
return result
209-
}
210181

211-
class RangeLists {
212-
var rangeListX: List<Range>? = null
213-
var rangeListY: List<Range>? = null
214-
}
182+
class RangeLists(
183+
val rangeListX: List<Range>,
184+
val rangeListY: List<Range>,
185+
)
215186

216-
class Range {
217-
var start = 0
218-
var end = 0
219-
}
187+
data class Range(
188+
val start: Int,
189+
val end: Int,
190+
)
220191
}

0 commit comments

Comments
 (0)