2018-01-04 19:52:25 +01:00
|
|
|
package jp.juggler.subwaytooter
|
|
|
|
|
|
|
|
import android.content.Intent
|
2019-01-17 20:40:51 +01:00
|
|
|
import android.content.res.ColorStateList
|
2018-01-04 19:52:25 +01:00
|
|
|
import android.graphics.Bitmap
|
2021-11-20 13:16:56 +01:00
|
|
|
import android.graphics.Color
|
2018-01-04 19:52:25 +01:00
|
|
|
import android.net.Uri
|
|
|
|
import android.os.Bundle
|
|
|
|
import android.text.Editable
|
|
|
|
import android.text.TextWatcher
|
|
|
|
import android.view.View
|
2020-09-11 11:19:09 +02:00
|
|
|
import android.view.inputmethod.EditorInfo
|
2018-01-04 19:52:25 +01:00
|
|
|
import android.widget.EditText
|
|
|
|
import android.widget.ImageView
|
|
|
|
import android.widget.SeekBar
|
|
|
|
import android.widget.TextView
|
2020-09-09 21:46:50 +02:00
|
|
|
import androidx.annotation.ColorInt
|
|
|
|
import androidx.appcompat.app.AppCompatActivity
|
|
|
|
import androidx.core.view.ViewCompat
|
2018-01-04 19:52:25 +01:00
|
|
|
import com.jrummyapps.android.colorpicker.ColorPickerDialog
|
|
|
|
import com.jrummyapps.android.colorpicker.ColorPickerDialogListener
|
2022-08-06 00:52:31 +02:00
|
|
|
import jp.juggler.subwaytooter.api.TootApiResult
|
|
|
|
import jp.juggler.subwaytooter.api.runApiTask
|
2021-06-28 09:09:00 +02:00
|
|
|
import jp.juggler.subwaytooter.column.*
|
2023-01-13 13:22:25 +01:00
|
|
|
import jp.juggler.util.backPressed
|
|
|
|
import jp.juggler.util.coroutine.launchMain
|
|
|
|
import jp.juggler.util.data.*
|
|
|
|
import jp.juggler.util.log.LogCategory
|
|
|
|
import jp.juggler.util.log.showToast
|
|
|
|
import jp.juggler.util.log.withCaption
|
|
|
|
import jp.juggler.util.media.createResizedBitmap
|
|
|
|
import jp.juggler.util.ui.ActivityResultHandler
|
|
|
|
import jp.juggler.util.ui.hideKeyboard
|
|
|
|
import jp.juggler.util.ui.isNotOk
|
2018-11-18 15:29:35 +01:00
|
|
|
import org.jetbrains.anko.textColor
|
2018-09-07 07:51:59 +02:00
|
|
|
import java.io.File
|
|
|
|
import java.io.FileOutputStream
|
2018-01-04 19:52:25 +01:00
|
|
|
import java.text.NumberFormat
|
2018-09-07 13:34:54 +02:00
|
|
|
import kotlin.math.max
|
2018-01-04 19:52:25 +01:00
|
|
|
|
|
|
|
class ActColumnCustomize : AppCompatActivity(), View.OnClickListener, ColorPickerDialogListener {
|
2020-10-24 14:55:51 +02:00
|
|
|
|
|
|
|
companion object {
|
|
|
|
|
|
|
|
internal val log = LogCategory("ActColumnCustomize")
|
|
|
|
|
|
|
|
internal const val EXTRA_COLUMN_INDEX = "column_index"
|
|
|
|
|
|
|
|
internal const val COLOR_DIALOG_ID_HEADER_BACKGROUND = 1
|
|
|
|
internal const val COLOR_DIALOG_ID_HEADER_FOREGROUND = 2
|
|
|
|
internal const val COLOR_DIALOG_ID_COLUMN_BACKGROUND = 3
|
|
|
|
internal const val COLOR_DIALOG_ID_ACCT_TEXT = 4
|
|
|
|
internal const val COLOR_DIALOG_ID_CONTENT_TEXT = 5
|
|
|
|
|
|
|
|
internal const val PROGRESS_MAX = 65536
|
|
|
|
|
2021-05-22 00:03:16 +02:00
|
|
|
fun createIntent(activity: ActMain, idx: Int) =
|
|
|
|
Intent(activity, ActColumnCustomize::class.java).apply {
|
|
|
|
putExtra(EXTRA_COLUMN_INDEX, idx)
|
|
|
|
}
|
2020-10-24 14:55:51 +02:00
|
|
|
}
|
|
|
|
|
2021-06-20 15:12:25 +02:00
|
|
|
private var columnIndex: Int = 0
|
2020-10-24 14:55:51 +02:00
|
|
|
internal lateinit var column: Column
|
2021-06-20 15:12:25 +02:00
|
|
|
internal lateinit var appState: AppState
|
2020-10-24 14:55:51 +02:00
|
|
|
internal var density: Float = 0f
|
|
|
|
|
|
|
|
private lateinit var flColumnBackground: View
|
|
|
|
internal lateinit var ivColumnBackground: ImageView
|
|
|
|
internal lateinit var sbColumnBackgroundAlpha: SeekBar
|
|
|
|
private lateinit var llColumnHeader: View
|
|
|
|
private lateinit var ivColumnHeader: ImageView
|
|
|
|
private lateinit var tvColumnName: TextView
|
|
|
|
internal lateinit var etAlpha: EditText
|
|
|
|
private lateinit var tvSampleAcct: TextView
|
|
|
|
private lateinit var tvSampleContent: TextView
|
|
|
|
|
2021-06-20 15:12:25 +02:00
|
|
|
internal var loadingBusy: Boolean = false
|
2020-10-24 14:55:51 +02:00
|
|
|
|
2021-06-20 15:12:25 +02:00
|
|
|
private var lastImageUri: String? = null
|
|
|
|
private var lastImageBitmap: Bitmap? = null
|
2020-10-24 14:55:51 +02:00
|
|
|
|
2022-08-06 00:52:31 +02:00
|
|
|
private val arColumnBackgroundImage = ActivityResultHandler(log) { r ->
|
|
|
|
if (r.isNotOk) return@ActivityResultHandler
|
|
|
|
r.data?.handleGetContentResult(contentResolver)
|
|
|
|
?.firstOrNull()?.uri?.let { updateBackground(it) }
|
2021-05-22 00:03:16 +02:00
|
|
|
}
|
|
|
|
|
2020-10-24 14:55:51 +02:00
|
|
|
private fun makeResult() {
|
|
|
|
val data = Intent()
|
2021-06-20 15:12:25 +02:00
|
|
|
data.putExtra(EXTRA_COLUMN_INDEX, columnIndex)
|
2020-10-24 14:55:51 +02:00
|
|
|
setResult(RESULT_OK, data)
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
|
|
super.onCreate(savedInstanceState)
|
2022-09-10 23:09:26 +02:00
|
|
|
backPressed {
|
|
|
|
makeResult()
|
|
|
|
finish()
|
|
|
|
}
|
2022-08-06 00:52:31 +02:00
|
|
|
arColumnBackgroundImage.register(this)
|
2020-10-24 14:55:51 +02:00
|
|
|
App1.setActivityTheme(this)
|
|
|
|
initUI()
|
|
|
|
|
2021-06-20 15:12:25 +02:00
|
|
|
appState = App1.getAppState(this)
|
|
|
|
density = appState.density
|
|
|
|
columnIndex = intent.getIntExtra(EXTRA_COLUMN_INDEX, 0)
|
|
|
|
column = appState.column(columnIndex)!!
|
2020-10-24 14:55:51 +02:00
|
|
|
show()
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onDestroy() {
|
|
|
|
closeBitmaps()
|
|
|
|
super.onDestroy()
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onClick(v: View) {
|
|
|
|
|
|
|
|
val builder: ColorPickerDialog.Builder
|
|
|
|
|
|
|
|
when (v.id) {
|
|
|
|
|
2021-05-22 00:03:16 +02:00
|
|
|
R.id.btnHeaderBackgroundEdit -> {
|
|
|
|
ColorPickerDialog.newBuilder()
|
|
|
|
.setDialogType(ColorPickerDialog.TYPE_CUSTOM)
|
|
|
|
.setAllowPresets(true)
|
|
|
|
.setShowAlphaSlider(false)
|
|
|
|
.setDialogId(COLOR_DIALOG_ID_HEADER_BACKGROUND)
|
|
|
|
.setColor(column.getHeaderBackgroundColor())
|
|
|
|
.show(this)
|
|
|
|
}
|
|
|
|
|
|
|
|
R.id.btnHeaderBackgroundReset -> {
|
2021-06-20 15:12:25 +02:00
|
|
|
column.headerBgColor = 0
|
2021-05-22 00:03:16 +02:00
|
|
|
show()
|
|
|
|
}
|
|
|
|
|
|
|
|
R.id.btnHeaderTextEdit -> {
|
|
|
|
ColorPickerDialog.newBuilder()
|
|
|
|
.setDialogType(ColorPickerDialog.TYPE_CUSTOM)
|
|
|
|
.setAllowPresets(true)
|
|
|
|
.setShowAlphaSlider(false)
|
|
|
|
.setDialogId(COLOR_DIALOG_ID_HEADER_FOREGROUND)
|
|
|
|
.setColor(column.getHeaderNameColor())
|
|
|
|
.show(this)
|
|
|
|
}
|
|
|
|
|
|
|
|
R.id.btnHeaderTextReset -> {
|
2021-06-20 15:12:25 +02:00
|
|
|
column.headerFgColor = 0
|
2021-05-22 00:03:16 +02:00
|
|
|
show()
|
|
|
|
}
|
|
|
|
|
|
|
|
R.id.btnColumnBackgroundColor -> {
|
|
|
|
builder = ColorPickerDialog.newBuilder()
|
|
|
|
.setDialogType(ColorPickerDialog.TYPE_CUSTOM)
|
|
|
|
.setAllowPresets(true)
|
|
|
|
.setShowAlphaSlider(false)
|
|
|
|
.setDialogId(COLOR_DIALOG_ID_COLUMN_BACKGROUND)
|
2021-06-20 15:12:25 +02:00
|
|
|
if (column.columnBgColor != 0) builder.setColor(column.columnBgColor)
|
2021-05-22 00:03:16 +02:00
|
|
|
builder.show(this)
|
|
|
|
}
|
|
|
|
|
|
|
|
R.id.btnColumnBackgroundColorReset -> {
|
2021-06-20 15:12:25 +02:00
|
|
|
column.columnBgColor = 0
|
2021-05-22 00:03:16 +02:00
|
|
|
show()
|
|
|
|
}
|
|
|
|
|
|
|
|
R.id.btnAcctColor -> {
|
|
|
|
ColorPickerDialog.newBuilder()
|
|
|
|
.setDialogType(ColorPickerDialog.TYPE_CUSTOM)
|
|
|
|
.setAllowPresets(true)
|
|
|
|
.setShowAlphaSlider(true)
|
|
|
|
.setDialogId(COLOR_DIALOG_ID_ACCT_TEXT)
|
|
|
|
.setColor(column.getAcctColor())
|
|
|
|
.show(this)
|
|
|
|
}
|
|
|
|
|
|
|
|
R.id.btnAcctColorReset -> {
|
2021-06-20 15:12:25 +02:00
|
|
|
column.acctColor = 0
|
2021-05-22 00:03:16 +02:00
|
|
|
show()
|
|
|
|
}
|
|
|
|
|
|
|
|
R.id.btnContentColor -> {
|
|
|
|
ColorPickerDialog.newBuilder()
|
|
|
|
.setDialogType(ColorPickerDialog.TYPE_CUSTOM)
|
|
|
|
.setAllowPresets(true)
|
|
|
|
.setShowAlphaSlider(true)
|
|
|
|
.setDialogId(COLOR_DIALOG_ID_CONTENT_TEXT)
|
|
|
|
.setColor(column.getContentColor())
|
|
|
|
.show(this)
|
|
|
|
}
|
|
|
|
|
|
|
|
R.id.btnContentColorReset -> {
|
2021-06-20 15:12:25 +02:00
|
|
|
column.contentColor = 0
|
2021-05-22 00:03:16 +02:00
|
|
|
show()
|
|
|
|
}
|
|
|
|
|
|
|
|
R.id.btnColumnBackgroundImage -> {
|
2023-01-13 13:22:25 +01:00
|
|
|
val intent = intentGetContent(
|
|
|
|
false,
|
|
|
|
getString(R.string.pick_image),
|
|
|
|
arrayOf("image/*")
|
|
|
|
)
|
2021-05-22 00:03:16 +02:00
|
|
|
arColumnBackgroundImage.launch(intent)
|
|
|
|
}
|
|
|
|
|
|
|
|
R.id.btnColumnBackgroundImageReset -> {
|
2021-06-20 15:12:25 +02:00
|
|
|
column.columnBgImage = ""
|
2021-05-22 00:03:16 +02:00
|
|
|
show()
|
|
|
|
}
|
2020-10-24 14:55:51 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-11-20 13:16:56 +01:00
|
|
|
override fun onColorSelected(dialogId: Int, @ColorInt newColor: Int) {
|
2020-10-24 14:55:51 +02:00
|
|
|
when (dialogId) {
|
2021-11-20 13:16:56 +01:00
|
|
|
COLOR_DIALOG_ID_HEADER_BACKGROUND ->
|
|
|
|
column.headerBgColor = Color.BLACK or newColor
|
2021-05-22 00:03:16 +02:00
|
|
|
|
2021-11-20 13:16:56 +01:00
|
|
|
COLOR_DIALOG_ID_HEADER_FOREGROUND ->
|
|
|
|
column.headerFgColor = Color.BLACK or newColor
|
|
|
|
|
|
|
|
COLOR_DIALOG_ID_COLUMN_BACKGROUND ->
|
|
|
|
column.columnBgColor = Color.BLACK or newColor
|
|
|
|
|
|
|
|
COLOR_DIALOG_ID_ACCT_TEXT ->
|
|
|
|
column.acctColor = newColor.notZero() ?: 1
|
|
|
|
|
|
|
|
COLOR_DIALOG_ID_CONTENT_TEXT ->
|
|
|
|
column.contentColor = newColor.notZero() ?: 1
|
2020-10-24 14:55:51 +02:00
|
|
|
}
|
|
|
|
show()
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onDialogDismissed(dialogId: Int) {}
|
|
|
|
|
|
|
|
private fun updateBackground(uriArg: Uri) {
|
2021-05-27 04:15:59 +02:00
|
|
|
launchMain {
|
|
|
|
var resultUri: String? = null
|
|
|
|
runApiTask { client ->
|
2021-05-22 00:03:16 +02:00
|
|
|
try {
|
|
|
|
val backgroundDir = getBackgroundImageDir(this@ActColumnCustomize)
|
2021-11-20 13:16:56 +01:00
|
|
|
val file =
|
|
|
|
File(backgroundDir, "${column.columnId}:${System.currentTimeMillis()}")
|
2021-05-22 00:03:16 +02:00
|
|
|
val fileUri = Uri.fromFile(file)
|
|
|
|
|
2021-06-20 15:12:25 +02:00
|
|
|
client.publishApiProgress("loading image from $uriArg")
|
2022-03-13 13:05:54 +01:00
|
|
|
contentResolver.openInputStream(uriArg)?.use { inStream ->
|
2021-05-22 00:03:16 +02:00
|
|
|
FileOutputStream(file).use { outStream ->
|
2022-03-13 13:05:54 +01:00
|
|
|
inStream.copyTo(outStream)
|
2021-05-22 00:03:16 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// リサイズや回転が必要ならする
|
|
|
|
client.publishApiProgress("check resize/rotation…")
|
|
|
|
|
|
|
|
val size = (max(
|
|
|
|
resources.displayMetrics.widthPixels,
|
|
|
|
resources.displayMetrics.heightPixels
|
|
|
|
) * 1.5f).toInt()
|
|
|
|
|
|
|
|
val bitmap = createResizedBitmap(
|
2021-05-27 04:15:59 +02:00
|
|
|
this,
|
2021-05-22 00:03:16 +02:00
|
|
|
fileUri,
|
|
|
|
size,
|
2022-03-15 06:21:11 +01:00
|
|
|
skipIfNoNeedToResizeAndRotate = true,
|
2021-05-22 00:03:16 +02:00
|
|
|
)
|
|
|
|
if (bitmap != null) {
|
|
|
|
try {
|
2021-06-20 15:12:25 +02:00
|
|
|
client.publishApiProgress("save resized(${bitmap.width}x${bitmap.height}) image to $file")
|
2021-05-22 00:03:16 +02:00
|
|
|
FileOutputStream(file).use { os ->
|
|
|
|
bitmap.compress(Bitmap.CompressFormat.PNG, 100, os)
|
|
|
|
}
|
|
|
|
} finally {
|
|
|
|
bitmap.recycle()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-05-27 04:15:59 +02:00
|
|
|
resultUri = fileUri.toString()
|
|
|
|
TootApiResult()
|
2021-05-22 00:03:16 +02:00
|
|
|
} catch (ex: Throwable) {
|
2022-12-27 03:54:52 +01:00
|
|
|
log.e(ex, "can't update background image.")
|
2021-05-27 04:15:59 +02:00
|
|
|
TootApiResult(ex.withCaption("can't update background image."))
|
2021-05-22 00:03:16 +02:00
|
|
|
}
|
2021-05-27 04:15:59 +02:00
|
|
|
}?.let { result ->
|
|
|
|
when (val bgUri = resultUri) {
|
|
|
|
null -> showToast(true, result.error ?: "?")
|
|
|
|
else -> {
|
2021-06-20 15:12:25 +02:00
|
|
|
column.columnBgImage = bgUri
|
2021-05-22 00:03:16 +02:00
|
|
|
show()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2021-05-27 04:15:59 +02:00
|
|
|
}
|
2020-10-24 14:55:51 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
private fun initUI() {
|
|
|
|
setContentView(R.layout.act_column_customize)
|
|
|
|
App1.initEdgeToEdge(this)
|
|
|
|
|
2023-01-13 13:22:25 +01:00
|
|
|
fixHorizontalPadding(findViewById(R.id.svContent))
|
2020-10-24 14:55:51 +02:00
|
|
|
|
|
|
|
llColumnHeader = findViewById(R.id.llColumnHeader)
|
|
|
|
ivColumnHeader = findViewById(R.id.ivColumnHeader)
|
|
|
|
tvColumnName = findViewById(R.id.tvColumnName)
|
|
|
|
flColumnBackground = findViewById(R.id.flColumnBackground)
|
|
|
|
ivColumnBackground = findViewById(R.id.ivColumnBackground)
|
|
|
|
tvSampleAcct = findViewById(R.id.tvSampleAcct)
|
|
|
|
tvSampleContent = findViewById(R.id.tvSampleContent)
|
|
|
|
|
|
|
|
findViewById<View>(R.id.btnHeaderBackgroundEdit).setOnClickListener(this)
|
|
|
|
findViewById<View>(R.id.btnHeaderBackgroundReset).setOnClickListener(this)
|
|
|
|
findViewById<View>(R.id.btnHeaderTextEdit).setOnClickListener(this)
|
|
|
|
findViewById<View>(R.id.btnHeaderTextReset).setOnClickListener(this)
|
|
|
|
findViewById<View>(R.id.btnColumnBackgroundColor).setOnClickListener(this)
|
|
|
|
findViewById<View>(R.id.btnColumnBackgroundColorReset).setOnClickListener(this)
|
|
|
|
findViewById<View>(R.id.btnColumnBackgroundImage).setOnClickListener(this)
|
|
|
|
findViewById<View>(R.id.btnColumnBackgroundImageReset).setOnClickListener(this)
|
|
|
|
findViewById<View>(R.id.btnAcctColor).setOnClickListener(this)
|
|
|
|
findViewById<View>(R.id.btnAcctColorReset).setOnClickListener(this)
|
|
|
|
findViewById<View>(R.id.btnContentColor).setOnClickListener(this)
|
|
|
|
findViewById<View>(R.id.btnContentColorReset).setOnClickListener(this)
|
|
|
|
|
|
|
|
sbColumnBackgroundAlpha = findViewById(R.id.sbColumnBackgroundAlpha)
|
|
|
|
sbColumnBackgroundAlpha.max = PROGRESS_MAX
|
|
|
|
|
2021-11-20 13:16:56 +01:00
|
|
|
sbColumnBackgroundAlpha.setOnSeekBarChangeListener(object :
|
|
|
|
SeekBar.OnSeekBarChangeListener {
|
2021-05-22 00:03:16 +02:00
|
|
|
override fun onStartTrackingTouch(seekBar: SeekBar) {}
|
2020-10-24 14:55:51 +02:00
|
|
|
|
2021-06-20 15:12:25 +02:00
|
|
|
override fun onStopTrackingTouch(seekBar: SeekBar) {}
|
2020-10-24 14:55:51 +02:00
|
|
|
|
2021-05-22 00:03:16 +02:00
|
|
|
override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
|
2021-06-20 15:12:25 +02:00
|
|
|
if (loadingBusy) return
|
2021-05-22 00:03:16 +02:00
|
|
|
if (!fromUser) return
|
2021-06-20 15:12:25 +02:00
|
|
|
column.columnBgImageAlpha = progress / PROGRESS_MAX.toFloat()
|
|
|
|
ivColumnBackground.alpha = column.columnBgImageAlpha
|
2021-05-22 00:03:16 +02:00
|
|
|
etAlpha.setText(
|
|
|
|
String.format(
|
|
|
|
defaultLocale(this@ActColumnCustomize),
|
|
|
|
"%.4f",
|
2021-06-20 15:12:25 +02:00
|
|
|
column.columnBgImageAlpha
|
2021-05-22 00:03:16 +02:00
|
|
|
)
|
|
|
|
)
|
|
|
|
}
|
|
|
|
})
|
2020-10-24 14:55:51 +02:00
|
|
|
|
|
|
|
etAlpha = findViewById(R.id.etAlpha)
|
|
|
|
etAlpha.addTextChangedListener(object : TextWatcher {
|
2021-06-20 15:12:25 +02:00
|
|
|
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}
|
2020-10-24 14:55:51 +02:00
|
|
|
|
2021-06-20 15:12:25 +02:00
|
|
|
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {}
|
2020-10-24 14:55:51 +02:00
|
|
|
|
2021-05-22 00:03:16 +02:00
|
|
|
override fun afterTextChanged(s: Editable) {
|
2021-06-20 15:12:25 +02:00
|
|
|
if (loadingBusy) return
|
2021-05-22 00:03:16 +02:00
|
|
|
try {
|
2020-10-24 14:55:51 +02:00
|
|
|
|
2021-05-22 00:03:16 +02:00
|
|
|
var f = NumberFormat.getInstance(defaultLocale(this@ActColumnCustomize))
|
|
|
|
.parse(etAlpha.text.toString())?.toFloat()
|
2020-10-24 14:55:51 +02:00
|
|
|
|
2021-05-22 00:03:16 +02:00
|
|
|
if (f != null && !f.isNaN()) {
|
|
|
|
if (f < 0f) f = 0f
|
|
|
|
if (f > 1f) f = 1f
|
2021-06-20 15:12:25 +02:00
|
|
|
column.columnBgImageAlpha = f
|
|
|
|
ivColumnBackground.alpha = column.columnBgImageAlpha
|
2021-05-22 00:03:16 +02:00
|
|
|
sbColumnBackgroundAlpha.progress = (0.5f + f * PROGRESS_MAX).toInt()
|
|
|
|
}
|
|
|
|
} catch (ex: Throwable) {
|
|
|
|
log.e(ex, "alpha parse failed.")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
2020-10-24 14:55:51 +02:00
|
|
|
|
|
|
|
etAlpha.setOnEditorActionListener { _, actionId, _ ->
|
|
|
|
when (actionId) {
|
2021-05-22 00:03:16 +02:00
|
|
|
EditorInfo.IME_ACTION_DONE -> {
|
|
|
|
etAlpha.hideKeyboard()
|
|
|
|
true
|
|
|
|
}
|
2020-10-24 14:55:51 +02:00
|
|
|
|
|
|
|
else -> false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private fun show() {
|
|
|
|
try {
|
2021-06-20 15:12:25 +02:00
|
|
|
loadingBusy = true
|
2020-10-24 14:55:51 +02:00
|
|
|
|
|
|
|
column.setHeaderBackground(llColumnHeader)
|
|
|
|
|
|
|
|
val c = column.getHeaderNameColor()
|
|
|
|
tvColumnName.textColor = c
|
|
|
|
ivColumnHeader.setImageResource(column.getIconId())
|
|
|
|
ivColumnHeader.imageTintList = ColorStateList.valueOf(c)
|
|
|
|
|
|
|
|
tvColumnName.text = column.getColumnName(false)
|
|
|
|
|
2021-06-20 15:12:25 +02:00
|
|
|
if (column.columnBgColor != 0) {
|
|
|
|
flColumnBackground.setBackgroundColor(column.columnBgColor)
|
2020-10-24 14:55:51 +02:00
|
|
|
} else {
|
|
|
|
ViewCompat.setBackground(flColumnBackground, null)
|
|
|
|
}
|
|
|
|
|
2021-06-20 15:12:25 +02:00
|
|
|
var alpha = column.columnBgImageAlpha
|
2020-10-24 14:55:51 +02:00
|
|
|
if (alpha.isNaN()) {
|
|
|
|
alpha = 1f
|
2021-06-20 15:12:25 +02:00
|
|
|
column.columnBgImageAlpha = alpha
|
2020-10-24 14:55:51 +02:00
|
|
|
}
|
|
|
|
ivColumnBackground.alpha = alpha
|
|
|
|
sbColumnBackgroundAlpha.progress = (0.5f + alpha * PROGRESS_MAX).toInt()
|
|
|
|
|
|
|
|
etAlpha.setText(
|
2021-05-22 00:03:16 +02:00
|
|
|
String.format(
|
|
|
|
defaultLocale(this@ActColumnCustomize),
|
|
|
|
"%.4f",
|
2021-06-20 15:12:25 +02:00
|
|
|
column.columnBgImageAlpha
|
2021-05-22 00:03:16 +02:00
|
|
|
)
|
|
|
|
)
|
2020-10-24 14:55:51 +02:00
|
|
|
|
2021-06-20 15:12:25 +02:00
|
|
|
loadImage(ivColumnBackground, column.columnBgImage)
|
2020-10-24 14:55:51 +02:00
|
|
|
|
|
|
|
tvSampleAcct.setTextColor(column.getAcctColor())
|
|
|
|
tvSampleContent.setTextColor(column.getContentColor())
|
|
|
|
} finally {
|
2021-06-20 15:12:25 +02:00
|
|
|
loadingBusy = false
|
2020-10-24 14:55:51 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private fun closeBitmaps() {
|
|
|
|
try {
|
|
|
|
ivColumnBackground.setImageDrawable(null)
|
2021-06-20 15:12:25 +02:00
|
|
|
lastImageUri = null
|
2020-10-24 14:55:51 +02:00
|
|
|
|
2021-06-20 15:12:25 +02:00
|
|
|
lastImageBitmap?.recycle()
|
|
|
|
lastImageBitmap = null
|
2020-10-24 14:55:51 +02:00
|
|
|
} catch (ex: Throwable) {
|
2022-12-27 03:54:52 +01:00
|
|
|
log.e(ex, "closeBitmaps failed.")
|
2020-10-24 14:55:51 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private fun loadImage(ivColumnBackground: ImageView, url: String) {
|
|
|
|
try {
|
|
|
|
if (url.isEmpty()) {
|
|
|
|
closeBitmaps()
|
|
|
|
return
|
2021-06-20 15:12:25 +02:00
|
|
|
} else if (url == lastImageUri) {
|
2020-10-24 14:55:51 +02:00
|
|
|
// 今表示してるのと同じ
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// 直前のBitmapを掃除する
|
|
|
|
closeBitmaps()
|
|
|
|
|
|
|
|
val uri = url.mayUri() ?: return
|
|
|
|
|
|
|
|
// 画像をロードして、成功したら表示してURLを覚える
|
2021-06-20 15:12:25 +02:00
|
|
|
val resizeMax = (0.5f + 64f * density).toInt()
|
|
|
|
lastImageBitmap = createResizedBitmap(this, uri, resizeMax)
|
|
|
|
if (lastImageBitmap != null) {
|
|
|
|
ivColumnBackground.setImageBitmap(lastImageBitmap)
|
|
|
|
lastImageUri = url
|
2020-10-24 14:55:51 +02:00
|
|
|
}
|
|
|
|
} catch (ex: Throwable) {
|
2022-12-27 03:54:52 +01:00
|
|
|
log.e(ex, "loadImage failed.")
|
2020-10-24 14:55:51 +02:00
|
|
|
}
|
|
|
|
}
|
2018-01-04 19:52:25 +01:00
|
|
|
}
|