6.7.0 - Alpha10 - 控制台浮动窗口背景色彩行为相关 API (透明度/着色/基色) 更符合安卓设计规范 (issue #458)
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
package org.autojs.autojs.annotation
|
||||
|
||||
@Target(AnnotationTarget.TYPE, AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.FUNCTION)
|
||||
@Retention(AnnotationRetention.RUNTIME)
|
||||
annotation class OmniColor
|
||||
@@ -12,12 +12,14 @@ import android.widget.LinearLayout
|
||||
import android.widget.TextView
|
||||
import androidx.annotation.ColorInt
|
||||
import androidx.core.content.res.ResourcesCompat
|
||||
import androidx.core.view.ViewCompat
|
||||
import androidx.core.view.isVisible
|
||||
import org.autojs.autojs.runtime.api.ScreenMetrics
|
||||
import org.autojs.autojs.ui.enhancedfloaty.FloatyService
|
||||
import org.autojs.autojs.ui.enhancedfloaty.ResizableExpandableFloaty.AbstractResizableExpandableFloaty
|
||||
import org.autojs.autojs.ui.enhancedfloaty.ResizableExpandableFloatyWindow
|
||||
import org.autojs.autojs.util.DrawableUtils
|
||||
import org.autojs.autojs.util.ColorUtils
|
||||
import org.autojs.autojs.util.ViewUtils
|
||||
import org.autojs.autojs.util.ViewUtils.setViewMeasure
|
||||
import org.autojs.autojs6.R
|
||||
import org.autojs.autojs6.databinding.FloatingConsoleExpandBinding
|
||||
@@ -111,7 +113,12 @@ class ConsoleFloaty(private val console: ConsoleImpl) : AbstractResizableExpanda
|
||||
text = mTitleText
|
||||
}
|
||||
titleBarView = expandedBinding.titleBar.apply {
|
||||
setTitleViewBackgroundColor(this, console.configurator.titleBackgroundColor)
|
||||
applyTitleBackground(
|
||||
this,
|
||||
console.getTitleBackgroundColor(),
|
||||
console.getTitleBackgroundTint(),
|
||||
console.getTitleBackgroundAlpha(),
|
||||
)
|
||||
}
|
||||
expandedBinding.close.let {
|
||||
it.setOnClickListener { console.hide() }
|
||||
@@ -140,6 +147,22 @@ class ConsoleFloaty(private val console: ConsoleImpl) : AbstractResizableExpanda
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Apply color/tint/alpha to title bar background at once
|
||||
* to prevent transition flash on first frame.
|
||||
*
|
||||
* zh-CN: 将 color/tint/alpha 一次性应用到标题栏背景, 防止首帧过渡闪现.
|
||||
*/
|
||||
private fun applyTitleBackground(view: LinearLayout, @ColorInt color: Int, @ColorInt tint: Int?, alpha: Double) {
|
||||
val bg = view.background?.mutate()
|
||||
|
||||
ViewUtils.setBackgroundColor(view, color, false)
|
||||
ViewCompat.setBackgroundTintList(view, tint?.let { ColorStateList.valueOf(it) })
|
||||
bg?.alpha = ColorUtils.toUint8(alpha, true)
|
||||
|
||||
view.background = bg
|
||||
}
|
||||
|
||||
private fun setUpConsole(window: ResizableExpandableFloatyWindow) {
|
||||
expandedBinding.console.apply {
|
||||
setConsole(console)
|
||||
@@ -162,25 +185,23 @@ class ConsoleFloaty(private val console: ConsoleImpl) : AbstractResizableExpanda
|
||||
|
||||
fun getTitle(): String = mTitleText?.toString() ?: ""
|
||||
|
||||
fun setTitleBackgroundColor(@ColorInt color: Int) {
|
||||
console.configurator.setTitleBackgroundColor(color)
|
||||
titleBarView?.apply { post { setTitleViewBackgroundColor(this, console.configurator.titleBackgroundColor) } }
|
||||
fun setTitleBackgroundColor(@ColorInt color: Int) = withTitleBarView {
|
||||
ViewUtils.setBackgroundColor(it, color)
|
||||
}
|
||||
|
||||
fun setTitleBackgroundTint(tint: Int) {
|
||||
console.configurator.setTitleBackgroundTint(tint)
|
||||
titleBarView?.apply { post { setTitleViewBackgroundColor(this, console.configurator.titleBackgroundColor) } }
|
||||
fun setTitleBackgroundTint(@ColorInt tint: Int?) = withTitleBarView {
|
||||
it.background?.mutate()?.clearColorFilter()
|
||||
ViewCompat.setBackgroundTintList(it, tint?.let { ColorStateList.valueOf(tint) })
|
||||
}
|
||||
|
||||
fun setTitleBackgroundAlpha(alpha: Int) {
|
||||
console.configurator.setTitleBackgroundAlpha(alpha)
|
||||
titleBarView?.apply { post { setTitleViewBackgroundColor(this, console.configurator.titleBackgroundColor) } }
|
||||
fun setTitleBackgroundAlpha(alpha: Float?) = withTitleBarView {
|
||||
it.background?.mutate()?.alpha = ColorUtils.toUint8(alpha?.toDouble() ?: 1.0, true)
|
||||
}
|
||||
|
||||
fun setTitleIconsTint(color: Int) {
|
||||
fun setTitleIconsTint(color: Int?) {
|
||||
mtTitleIconsTint = color
|
||||
arrayOf(mMinimizeButton, mControllingButton, mCloseButton).filterNotNull().forEach {
|
||||
it.imageTintList = ColorStateList.valueOf(color)
|
||||
arrayOf(mMinimizeButton, mControllingButton, mCloseButton).filterNotNull().forEach { view ->
|
||||
view.imageTintList = color?.let { ColorStateList.valueOf(it) }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -198,8 +219,8 @@ class ConsoleFloaty(private val console: ConsoleImpl) : AbstractResizableExpanda
|
||||
|
||||
fun getTitleTextColor() = mTitleView?.textColors?.defaultColor ?: Color.BLACK
|
||||
|
||||
private fun setTitleViewBackgroundColor(view: LinearLayout, color: Int) {
|
||||
view.background = DrawableUtils.setDrawableColorFilterSrc(view.background, color)
|
||||
private fun withTitleBarView(block: (LinearLayout) -> Unit) {
|
||||
titleBarView?.let { it.post { block(it) } }
|
||||
}
|
||||
|
||||
internal fun setCloseButton(resId: Int) {
|
||||
|
||||
@@ -3,7 +3,7 @@ package org.autojs.autojs.core.console
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.graphics.Color
|
||||
import android.content.res.ColorStateList
|
||||
import android.net.Uri
|
||||
import android.os.CountDownTimer
|
||||
import android.util.Log
|
||||
@@ -18,13 +18,11 @@ import android.view.Gravity.START
|
||||
import android.view.Gravity.TOP
|
||||
import android.view.View
|
||||
import androidx.annotation.ColorInt
|
||||
import androidx.core.graphics.alpha
|
||||
import androidx.core.graphics.blue
|
||||
import androidx.core.graphics.green
|
||||
import androidx.core.graphics.red
|
||||
import androidx.core.view.ViewCompat
|
||||
import androidx.core.view.doOnLayout
|
||||
import com.afollestad.materialdialogs.DialogAction
|
||||
import com.afollestad.materialdialogs.MaterialDialog
|
||||
import org.autojs.autojs.annotation.OmniColor
|
||||
import org.autojs.autojs.annotation.ScriptInterface
|
||||
import org.autojs.autojs.core.pref.Language
|
||||
import org.autojs.autojs.core.ui.inflater.util.Gravities
|
||||
@@ -33,13 +31,14 @@ import org.autojs.autojs.permission.DisplayOverOtherAppsPermission
|
||||
import org.autojs.autojs.runtime.ScriptRuntime
|
||||
import org.autojs.autojs.runtime.api.AbstractConsole
|
||||
import org.autojs.autojs.runtime.api.Mime
|
||||
import org.autojs.autojs.runtime.api.augment.colors.Colors
|
||||
import org.autojs.autojs.tool.UiHandler
|
||||
import org.autojs.autojs.ui.common.NotAskAgainDialog
|
||||
import org.autojs.autojs.ui.enhancedfloaty.FloatyService
|
||||
import org.autojs.autojs.ui.enhancedfloaty.ResizableExpandableFloatyWindow
|
||||
import org.autojs.autojs.ui.enhancedfloaty.gesture.DragGesture
|
||||
import org.autojs.autojs.util.ClipboardUtils
|
||||
import org.autojs.autojs.util.DrawableUtils
|
||||
import org.autojs.autojs.util.ColorUtils
|
||||
import org.autojs.autojs.util.StringUtils.key
|
||||
import org.autojs.autojs.util.ViewUtils
|
||||
import org.autojs.autojs6.R
|
||||
@@ -381,11 +380,19 @@ open class ConsoleImpl(val uiHandler: UiHandler) : AbstractConsole() {
|
||||
setGravity(getGravity())
|
||||
configurator.titleTextSize?.let { setTitleTextSize(it) }
|
||||
configurator.titleTextColor?.let { setTitleTextColor(it) }
|
||||
|
||||
setTitleBackgroundAlpha(getTitleBackgroundAlpha())
|
||||
setTitleBackgroundTint(getTitleBackgroundTint())
|
||||
setTitleBackgroundColor(getTitleBackgroundColor())
|
||||
|
||||
configurator.titleIconsTint?.let { setTitleIconsTint(it) }
|
||||
configurator.contentTextSize?.let { setContentTextSize(it) }
|
||||
configurator.contentTextColors?.let { setContentTextColors(it) }
|
||||
|
||||
setContentBackgroundAlpha(getContentBackgroundAlpha())
|
||||
setContentBackgroundTint(getContentBackgroundTint())
|
||||
setContentBackgroundColor(getContentBackgroundColor())
|
||||
|
||||
setTouchable(isTouchable())
|
||||
}
|
||||
|
||||
@@ -581,11 +588,14 @@ open class ConsoleImpl(val uiHandler: UiHandler) : AbstractConsole() {
|
||||
}
|
||||
}
|
||||
|
||||
@ScriptInterface
|
||||
fun getGravity() = configurator.gravity
|
||||
|
||||
@ScriptInterface
|
||||
fun setGravity(gravity: String) = setGravity(Gravities.parse(gravity))
|
||||
|
||||
@ScriptInterface
|
||||
fun getGravity() = configurator.gravity
|
||||
fun getTitleTextSize() = mConsoleFloaty.getTitleTextSize()
|
||||
|
||||
@ScriptInterface
|
||||
fun setTitleTextSize(size: Float) {
|
||||
@@ -596,7 +606,7 @@ open class ConsoleImpl(val uiHandler: UiHandler) : AbstractConsole() {
|
||||
}
|
||||
|
||||
@ScriptInterface
|
||||
fun getTitleTextSize() = mConsoleFloaty.getTitleTextSize()
|
||||
fun getTitleTextColor() = mConsoleFloaty.getTitleTextColor()
|
||||
|
||||
@ScriptInterface
|
||||
fun setTitleTextColor(color: Int) {
|
||||
@@ -607,46 +617,54 @@ open class ConsoleImpl(val uiHandler: UiHandler) : AbstractConsole() {
|
||||
}
|
||||
|
||||
@ScriptInterface
|
||||
fun getTitleTextColor() = mConsoleFloaty.getTitleTextColor()
|
||||
fun getTitleBackgroundColor() = configurator.titleBackgroundColor
|
||||
|
||||
@ScriptInterface
|
||||
fun setTitleBackgroundColor(@ColorInt color: Int) {
|
||||
configurator.setTitleBackgroundColor(color)
|
||||
uiHandler.post {
|
||||
mConsoleFloaty.setTitleBackgroundColor(getTitleBackgroundColor())
|
||||
enqueueMutation(Stage.VIEW_ATTACHED) {
|
||||
mConsoleFloaty.titleBarView?.let { view ->
|
||||
ViewUtils.setBackgroundColor(view, configurator.titleBackgroundColor)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ScriptInterface
|
||||
fun getTitleBackgroundColor() = configurator.titleBackgroundColor
|
||||
fun getTitleBackgroundTint() = configurator.titleBackgroundTint
|
||||
|
||||
@ScriptInterface
|
||||
fun setTitleBackgroundTint(@ColorInt tint: Int) {
|
||||
fun setTitleBackgroundTint(@ColorInt tint: Int?) {
|
||||
configurator.setTitleBackgroundTint(tint)
|
||||
uiHandler.post {
|
||||
mConsoleFloaty.setTitleBackgroundTint(tint)
|
||||
enqueueMutation(Stage.VIEW_ATTACHED) {
|
||||
mConsoleFloaty.setTitleBackgroundTint(configurator.titleBackgroundTint)
|
||||
}
|
||||
}
|
||||
|
||||
@ScriptInterface
|
||||
fun setTitleBackgroundAlpha(alpha: Int) {
|
||||
fun getTitleBackgroundAlpha() = configurator.titleBackgroundAlpha
|
||||
|
||||
@ScriptInterface
|
||||
fun setTitleBackgroundAlpha(alpha: Double?) {
|
||||
configurator.setTitleBackgroundAlpha(alpha)
|
||||
uiHandler.post {
|
||||
mConsoleFloaty.setTitleBackgroundAlpha(alpha)
|
||||
enqueueMutation(Stage.VIEW_ATTACHED) {
|
||||
mConsoleFloaty.setTitleBackgroundAlpha(configurator.titleBackgroundAlpha.toFloat())
|
||||
}
|
||||
}
|
||||
|
||||
@ScriptInterface
|
||||
fun resetTitleBackgroundAlpha() = setTitleBackgroundAlpha(-1)
|
||||
fun resetTitleBackgroundAlpha() = setTitleBackgroundAlpha(DEFAULT_ALPHA)
|
||||
|
||||
@ScriptInterface
|
||||
fun setTitleIconsTint(color: Int) {
|
||||
fun setTitleIconsTint(color: Int?) {
|
||||
configurator.setTitleIconsTint(color)
|
||||
uiHandler.post {
|
||||
enqueueMutation(Stage.VIEW_ATTACHED) {
|
||||
mConsoleFloaty.setTitleIconsTint(color)
|
||||
}
|
||||
}
|
||||
|
||||
@ScriptInterface
|
||||
fun getContentTextSize() = getFloatingConsoleView()?.textSize ?: 0f
|
||||
|
||||
@ScriptInterface
|
||||
fun setContentTextSize(size: Float) {
|
||||
configurator.setContentTextSize(size)
|
||||
@@ -656,7 +674,9 @@ open class ConsoleImpl(val uiHandler: UiHandler) : AbstractConsole() {
|
||||
}
|
||||
|
||||
@ScriptInterface
|
||||
fun getContentTextSize() = getFloatingConsoleView()?.textSize ?: 0f
|
||||
fun getContentTextColors(): Map<Int, Int> {
|
||||
return getFloatingConsoleView()?.textColors ?: emptyMap()
|
||||
}
|
||||
|
||||
@ScriptInterface
|
||||
fun setContentTextColors(colors: Array<out Int?>) {
|
||||
@@ -667,39 +687,43 @@ open class ConsoleImpl(val uiHandler: UiHandler) : AbstractConsole() {
|
||||
}
|
||||
|
||||
@ScriptInterface
|
||||
fun getContentTextColors(): Map<Int, Int> {
|
||||
return getFloatingConsoleView()?.textColors ?: emptyMap()
|
||||
}
|
||||
fun getContentBackgroundColor() = configurator.contentBackgroundColor
|
||||
|
||||
@ScriptInterface
|
||||
fun setContentBackgroundColor(@ColorInt color: Int) {
|
||||
configurator.setContentBackgroundColor(color)
|
||||
uiHandler.post {
|
||||
setContentViewBackgroundColor(getFloatingConsoleView(), getContentBackgroundColor())
|
||||
enqueueMutation(Stage.VIEW_ATTACHED) {
|
||||
ViewUtils.setBackgroundColor(getFloatingConsoleView(), configurator.contentBackgroundColor)
|
||||
}
|
||||
}
|
||||
|
||||
@ScriptInterface
|
||||
fun getContentBackgroundColor() = configurator.contentBackgroundColor
|
||||
fun getContentBackgroundTint() = configurator.contentBackgroundTint
|
||||
|
||||
@ScriptInterface
|
||||
fun setContentBackgroundTint(@ColorInt tint: Int) {
|
||||
fun setContentBackgroundTint(@ColorInt tint: Int?) {
|
||||
configurator.setContentBackgroundTint(tint)
|
||||
enqueueMutation(Stage.VIEW_ATTACHED) {
|
||||
setContentViewBackgroundColor(getFloatingConsoleView(), getContentBackgroundColor())
|
||||
val view = getFloatingConsoleView() ?: return@enqueueMutation
|
||||
view.background?.mutate()?.clearColorFilter()
|
||||
val tint = configurator.contentBackgroundTint
|
||||
ViewCompat.setBackgroundTintList(view, tint?.let { ColorStateList.valueOf(it) })
|
||||
}
|
||||
}
|
||||
|
||||
@ScriptInterface
|
||||
fun setContentBackgroundAlpha(alpha: Int) {
|
||||
fun getContentBackgroundAlpha() = configurator.contentBackgroundAlpha
|
||||
|
||||
@ScriptInterface
|
||||
fun setContentBackgroundAlpha(alpha: Double?) {
|
||||
configurator.setContentBackgroundAlpha(alpha)
|
||||
enqueueMutation(Stage.VIEW_ATTACHED) {
|
||||
setContentViewBackgroundColor(getFloatingConsoleView(), getContentBackgroundColor())
|
||||
getFloatingConsoleView()?.background?.mutate()?.alpha = ColorUtils.toUint8(configurator.contentBackgroundAlpha, true)
|
||||
}
|
||||
}
|
||||
|
||||
@ScriptInterface
|
||||
fun resetContentBackgroundAlpha() = setContentBackgroundAlpha(-1)
|
||||
fun resetContentBackgroundAlpha() = setContentBackgroundAlpha(DEFAULT_ALPHA)
|
||||
|
||||
@ScriptInterface
|
||||
fun setTextSize(size: Float) {
|
||||
@@ -726,7 +750,7 @@ open class ConsoleImpl(val uiHandler: UiHandler) : AbstractConsole() {
|
||||
}
|
||||
|
||||
@ScriptInterface
|
||||
fun setBackgroundAlpha(alpha: Int) {
|
||||
fun setBackgroundAlpha(alpha: Double?) {
|
||||
setTitleBackgroundAlpha(alpha)
|
||||
setContentBackgroundAlpha(alpha)
|
||||
}
|
||||
@@ -760,7 +784,7 @@ open class ConsoleImpl(val uiHandler: UiHandler) : AbstractConsole() {
|
||||
|
||||
@JvmOverloads
|
||||
fun hideDelayed(exitOnCloseTimeout: Long = configurator.exitOnCloseTimeout) {
|
||||
configurator.initExitOnClose()
|
||||
configurator.resetExitOnClose()
|
||||
uiHandler.post {
|
||||
mCountDownTimer = object : CountDownTimer(exitOnCloseTimeout, 500) {
|
||||
override fun onTick(millisUntilFinished: Long) {
|
||||
@@ -797,14 +821,7 @@ open class ConsoleImpl(val uiHandler: UiHandler) : AbstractConsole() {
|
||||
|
||||
private fun setCloseButton(resId: Int) = mConsoleFloaty.setCloseButton(resId)
|
||||
|
||||
private fun setContentViewBackgroundColor(view: FloatingConsoleView?, color: Int) {
|
||||
view?.apply { background = DrawableUtils.setDrawableColorFilterSrc(background, color) }
|
||||
}
|
||||
|
||||
private fun parseAlpha(alpha: Int, defaultRes: Int) = when {
|
||||
alpha < 0 -> context.getColor(defaultRes).alpha
|
||||
else -> alpha
|
||||
}
|
||||
private fun parseAlpha(alpha: Double?) = ColorUtils.toUint8(alpha ?: DEFAULT_ALPHA, true) / 255.0
|
||||
|
||||
private fun advanceStage(newStage: Stage) {
|
||||
if (newStage.ordinal <= mStage.ordinal) return
|
||||
@@ -883,17 +900,14 @@ open class ConsoleImpl(val uiHandler: UiHandler) : AbstractConsole() {
|
||||
private set
|
||||
|
||||
@Volatile
|
||||
private var internalTitleBackgroundColor: Int? = null
|
||||
var titleBackgroundColor: Int = context.getColor(DEFAULT_TITLE_BAR_BG_COLOR_RES)
|
||||
|
||||
@Volatile
|
||||
private var internalTitleBackgroundAlpha: Int? = null
|
||||
var titleBackgroundAlpha: Double = DEFAULT_ALPHA
|
||||
private set
|
||||
|
||||
@Volatile
|
||||
private var internalTitleBackgroundTint: Int? = null
|
||||
|
||||
val titleBackgroundColor: Int
|
||||
get() = (internalTitleBackgroundColor ?: context.getColor(R.color.floating_console_title_bar_bg))
|
||||
.calibrateWith(internalTitleBackgroundAlpha, internalTitleBackgroundTint)
|
||||
var titleBackgroundTint: Int? = null
|
||||
|
||||
@Volatile
|
||||
var titleIconsTint: Int? = null
|
||||
@@ -908,20 +922,17 @@ open class ConsoleImpl(val uiHandler: UiHandler) : AbstractConsole() {
|
||||
private set
|
||||
|
||||
@Volatile
|
||||
private var internalContentBackgroundColor: Int? = null
|
||||
var contentBackgroundColor: Int = context.getColor(DEFAULT_CONTENT_BG_COLOR_RES)
|
||||
|
||||
@Volatile
|
||||
private var internalContentBackgroundAlpha: Int? = null
|
||||
var contentBackgroundAlpha: Double = DEFAULT_ALPHA
|
||||
private set
|
||||
|
||||
@Volatile
|
||||
private var internalContentBackgroundTint: Int? = null
|
||||
|
||||
val contentBackgroundColor: Int
|
||||
get() = (internalContentBackgroundColor ?: context.getColor(R.color.floating_console_content_bg))
|
||||
.calibrateWith(internalContentBackgroundAlpha, internalContentBackgroundTint)
|
||||
var contentBackgroundTint: Int? = null
|
||||
|
||||
@Volatile
|
||||
var isTouchable: Boolean = true
|
||||
var isTouchable: Boolean = DEFAULT_TOUCHABLE
|
||||
private set
|
||||
|
||||
@Volatile
|
||||
@@ -940,8 +951,8 @@ open class ConsoleImpl(val uiHandler: UiHandler) : AbstractConsole() {
|
||||
position = Point(x, y)
|
||||
}
|
||||
|
||||
fun setGravity(gravity: Int) = also {
|
||||
this.gravity = gravity
|
||||
fun setGravity(gravity: Int?) = also {
|
||||
this.gravity = gravity ?: DEFAULT_GRAVITY
|
||||
}
|
||||
|
||||
fun setTitle(title: CharSequence?) = also {
|
||||
@@ -952,44 +963,44 @@ open class ConsoleImpl(val uiHandler: UiHandler) : AbstractConsole() {
|
||||
titleTextSize = size
|
||||
}
|
||||
|
||||
fun setTitleTextColor(color: Int) = also {
|
||||
titleTextColor = color
|
||||
fun setTitleTextColor(@OmniColor color: Any?) = also {
|
||||
titleTextColor = color?.let { Colors.toIntRhino(it) }
|
||||
}
|
||||
|
||||
fun setTitleBackgroundColor(color: Int) = also {
|
||||
internalTitleBackgroundColor = color
|
||||
fun setTitleBackgroundColor(@OmniColor color: Any?) = also {
|
||||
titleBackgroundColor = color?.let { Colors.toIntRhino(it) } ?: context.getColor(DEFAULT_TITLE_BAR_BG_COLOR_RES)
|
||||
}
|
||||
|
||||
fun setTitleBackgroundTint(tint: Int) = also {
|
||||
internalTitleBackgroundTint = tint
|
||||
fun setTitleBackgroundTint(@OmniColor tint: Any?) = also {
|
||||
titleBackgroundTint = tint?.let { Colors.toIntRhino(it) }
|
||||
}
|
||||
|
||||
fun setTitleBackgroundAlpha(alpha: Int) = also {
|
||||
internalTitleBackgroundAlpha = parseAlpha(alpha, R.color.floating_console_title_bar_bg)
|
||||
fun setTitleBackgroundAlpha(alpha: Double?) = also {
|
||||
titleBackgroundAlpha = parseAlpha(alpha)
|
||||
}
|
||||
|
||||
fun setTitleIconsTint(color: Int) = also {
|
||||
titleIconsTint = color
|
||||
fun setTitleIconsTint(@OmniColor color: Any?) = also {
|
||||
titleIconsTint = color?.let { Colors.toIntRhino(it) }
|
||||
}
|
||||
|
||||
fun setContentTextSize(size: Float) = also {
|
||||
contentTextSize = size
|
||||
}
|
||||
|
||||
fun setContentTextColors(colors: Array<out Int?>) = also {
|
||||
contentTextColors = colors
|
||||
fun setContentTextColors(colors: Array<out @OmniColor Any?>) = also {
|
||||
contentTextColors = colors.map { it?.let { Colors.toIntRhino(it) } }.toTypedArray()
|
||||
}
|
||||
|
||||
fun setContentBackgroundColor(color: Int) = also {
|
||||
internalContentBackgroundColor = color
|
||||
fun setContentBackgroundColor(@OmniColor color: Any?) = also {
|
||||
contentBackgroundColor = color.let { Colors.toIntRhino(it) }
|
||||
}
|
||||
|
||||
fun setContentBackgroundTint(tint: Int) {
|
||||
internalContentBackgroundTint = tint
|
||||
fun setContentBackgroundTint(@OmniColor tint: Any?) {
|
||||
contentBackgroundTint = tint?.let { Colors.toIntRhino(it) }
|
||||
}
|
||||
|
||||
fun setContentBackgroundAlpha(alpha: Int) = also {
|
||||
internalContentBackgroundAlpha = parseAlpha(alpha, R.color.floating_console_content_bg)
|
||||
fun setContentBackgroundAlpha(alpha: Double?) = also {
|
||||
contentBackgroundAlpha = parseAlpha(alpha)
|
||||
}
|
||||
|
||||
fun setTextSize(size: Float) = also {
|
||||
@@ -997,22 +1008,22 @@ open class ConsoleImpl(val uiHandler: UiHandler) : AbstractConsole() {
|
||||
setContentTextSize(size)
|
||||
}
|
||||
|
||||
fun setTextColor(color: Int) = also {
|
||||
fun setTextColor(@OmniColor color: Any?) = also {
|
||||
setTitleTextColor(color)
|
||||
setContentTextColors(Array(6) { color })
|
||||
}
|
||||
|
||||
fun setBackgroundColor(color: Int) = also {
|
||||
fun setBackgroundColor(@OmniColor color: Any?) = also {
|
||||
setTitleBackgroundColor(color)
|
||||
setContentBackgroundColor(color)
|
||||
}
|
||||
|
||||
fun setBackgroundTint(color: Int) = also {
|
||||
fun setBackgroundTint(@OmniColor color: Any?) = also {
|
||||
setTitleBackgroundTint(color)
|
||||
setContentBackgroundTint(color)
|
||||
}
|
||||
|
||||
fun setBackgroundAlpha(alpha: Int) = also {
|
||||
fun setBackgroundAlpha(alpha: Double?) = also {
|
||||
setTitleBackgroundAlpha(alpha)
|
||||
setContentBackgroundAlpha(alpha)
|
||||
}
|
||||
@@ -1042,21 +1053,21 @@ open class ConsoleImpl(val uiHandler: UiHandler) : AbstractConsole() {
|
||||
title = null
|
||||
titleTextSize = null
|
||||
titleTextColor = null
|
||||
internalTitleBackgroundColor = null
|
||||
internalTitleBackgroundAlpha = null
|
||||
internalTitleBackgroundTint = null
|
||||
internalContentBackgroundColor = null
|
||||
internalContentBackgroundAlpha = null
|
||||
internalContentBackgroundTint = null
|
||||
titleBackgroundColor = context.getColor(DEFAULT_TITLE_BAR_BG_COLOR_RES)
|
||||
titleBackgroundAlpha = DEFAULT_ALPHA
|
||||
titleBackgroundTint = null
|
||||
contentBackgroundColor = context.getColor(DEFAULT_CONTENT_BG_COLOR_RES)
|
||||
contentBackgroundAlpha = DEFAULT_ALPHA
|
||||
contentBackgroundTint = null
|
||||
titleIconsTint = null
|
||||
contentTextSize = null
|
||||
contentTextColors = null
|
||||
isTouchable = true
|
||||
isTouchable = DEFAULT_TOUCHABLE
|
||||
isExitOnClose = false
|
||||
exitOnCloseTimeout = DEFAULT_EXIT_ON_CLOSE_TIMEOUT
|
||||
}
|
||||
|
||||
internal fun initExitOnClose() {
|
||||
internal fun resetExitOnClose() {
|
||||
setExitOnClose(false)
|
||||
exitOnCloseTimeout = DEFAULT_EXIT_ON_CLOSE_TIMEOUT
|
||||
}
|
||||
@@ -1064,13 +1075,6 @@ open class ConsoleImpl(val uiHandler: UiHandler) : AbstractConsole() {
|
||||
@JvmOverloads
|
||||
fun show(isReset: Boolean = false) = this@ConsoleImpl.show(isReset)
|
||||
|
||||
private fun Int.calibrateWith(alpha: Int?, tint: Int?): Int {
|
||||
var result = this
|
||||
alpha?.let { desired -> result = Color.argb(desired, result.red, result.green, result.blue) }
|
||||
tint?.let { desired -> result = Color.argb(result.alpha, desired.red, desired.green, desired.blue) }
|
||||
return result
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
companion object {
|
||||
@@ -1078,12 +1082,16 @@ open class ConsoleImpl(val uiHandler: UiHandler) : AbstractConsole() {
|
||||
private val TAG = ConsoleImpl::class.java.simpleName
|
||||
|
||||
const val DEFAULT_TITLE = ""
|
||||
const val DEFAULT_ALPHA = 1.0
|
||||
const val DEFAULT_TOUCHABLE = true
|
||||
const val DEFAULT_TOUCH_THROUGH = true
|
||||
const val DEFAULT_GRAVITY = Gravity.NO_GRAVITY
|
||||
const val DEFAULT_EXIT_ON_CLOSE_TIMEOUT = 5000L
|
||||
const val DEFAULT_EXIT_ON_CLOSE = true
|
||||
|
||||
val DEFAULT_TITLE_BAR_BG_COLOR_RES = R.color.floating_console_title_bar_bg
|
||||
val DEFAULT_CONTENT_BG_COLOR_RES = R.color.floating_console_content_bg
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -21,7 +21,6 @@ import org.autojs.autojs.runtime.api.augment.AugmentableProxy
|
||||
import org.autojs.autojs.runtime.api.augment.s13n.S13n
|
||||
import org.autojs.autojs.runtime.api.augment.util.Util
|
||||
import org.autojs.autojs.runtime.exception.WrappedIllegalArgumentException
|
||||
import org.autojs.autojs.util.ColorUtils
|
||||
import org.autojs.autojs.util.ConsoleUtils
|
||||
import org.autojs.autojs.util.DisplayUtils
|
||||
import org.autojs.autojs.util.RhinoUtils.NOT_CONSTRUCTABLE
|
||||
@@ -302,9 +301,7 @@ class Console(scriptRuntime: ScriptRuntime) : AugmentableProxy(scriptRuntime) {
|
||||
@RhinoRuntimeFunctionInterface
|
||||
fun build(scriptRuntime: ScriptRuntime, args: Array<out Any?>): ConsoleImpl.Configurator = ensureArgumentsAtMost(args, 1) {
|
||||
val (options) = it
|
||||
val configurator = scriptRuntime.console.configurator.apply {
|
||||
clearStates()
|
||||
}
|
||||
val configurator = scriptRuntime.console.configurator
|
||||
val opt = coerceObject(options, newNativeObject())
|
||||
|
||||
opt.entries.forEach { entry ->
|
||||
@@ -390,21 +387,21 @@ class Console(scriptRuntime: ScriptRuntime) : AugmentableProxy(scriptRuntime) {
|
||||
@JvmStatic
|
||||
@RhinoRuntimeFunctionInterface
|
||||
fun setTitleBackgroundTint(scriptRuntime: ScriptRuntime, args: Array<out Any?>): ProxyObject = ensureArgumentsOnlyOne(args) {
|
||||
scriptRuntime.console.setTitleBackgroundTint(S13n.color(arrayOf(it)))
|
||||
scriptRuntime.console.setTitleBackgroundTint(it?.let { S13n.color(arrayOf(it)) })
|
||||
scriptRuntime.consoleProxyObject
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
@RhinoRuntimeFunctionInterface
|
||||
fun setTitleBackgroundAlpha(scriptRuntime: ScriptRuntime, args: Array<out Any?>): ProxyObject = ensureArgumentsOnlyOne(args) {
|
||||
scriptRuntime.console.setTitleBackgroundAlpha(ColorUtils.toUnit8(coerceNumber(it, 1.0), true))
|
||||
scriptRuntime.console.setTitleBackgroundAlpha(coerceNumber(it, 1.0))
|
||||
scriptRuntime.consoleProxyObject
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
@RhinoRuntimeFunctionInterface
|
||||
fun setTitleIconsTint(scriptRuntime: ScriptRuntime, args: Array<out Any?>): ProxyObject = ensureArgumentsOnlyOne(args) {
|
||||
scriptRuntime.console.setTitleIconsTint(S13n.color(arrayOf(it)))
|
||||
scriptRuntime.console.setTitleIconsTint(it?.let { S13n.color(arrayOf(it)) })
|
||||
scriptRuntime.consoleProxyObject
|
||||
}
|
||||
|
||||
@@ -458,14 +455,14 @@ class Console(scriptRuntime: ScriptRuntime) : AugmentableProxy(scriptRuntime) {
|
||||
@JvmStatic
|
||||
@RhinoRuntimeFunctionInterface
|
||||
fun setContentBackgroundTint(scriptRuntime: ScriptRuntime, args: Array<out Any?>): ProxyObject = ensureArgumentsOnlyOne(args) {
|
||||
scriptRuntime.console.setContentBackgroundTint(S13n.color(arrayOf(it)))
|
||||
scriptRuntime.console.setContentBackgroundTint(it?.let { S13n.color(arrayOf(it)) })
|
||||
scriptRuntime.consoleProxyObject
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
@RhinoRuntimeFunctionInterface
|
||||
fun setContentBackgroundAlpha(scriptRuntime: ScriptRuntime, args: Array<out Any?>): ProxyObject = ensureArgumentsOnlyOne(args) {
|
||||
scriptRuntime.console.setContentBackgroundAlpha(ColorUtils.toUnit8(coerceNumber(it, 1.0), true))
|
||||
scriptRuntime.console.setContentBackgroundAlpha(coerceNumber(it, 1.0))
|
||||
scriptRuntime.consoleProxyObject
|
||||
}
|
||||
|
||||
@@ -500,7 +497,7 @@ class Console(scriptRuntime: ScriptRuntime) : AugmentableProxy(scriptRuntime) {
|
||||
@JvmStatic
|
||||
@RhinoRuntimeFunctionInterface
|
||||
fun setBackgroundAlpha(scriptRuntime: ScriptRuntime, args: Array<out Any?>): ProxyObject = ensureArgumentsOnlyOne(args) {
|
||||
scriptRuntime.console.setBackgroundAlpha(ColorUtils.toUnit8(coerceNumber(it, 1.0), true))
|
||||
scriptRuntime.console.setBackgroundAlpha(coerceNumber(it, 1.0))
|
||||
scriptRuntime.consoleProxyObject
|
||||
}
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@ import org.autojs.autojs.core.image.ColorTable
|
||||
import org.autojs.autojs.theme.ThemeColor
|
||||
import org.autojs.autojs.theme.ThemeColorManager
|
||||
import java.math.RoundingMode
|
||||
import kotlin.math.abs
|
||||
import kotlin.math.roundToInt
|
||||
import kotlin.text.RegexOption.IGNORE_CASE
|
||||
|
||||
@@ -48,12 +49,19 @@ object ColorUtils {
|
||||
|
||||
@JvmStatic
|
||||
@JvmOverloads
|
||||
fun toUnit8(component: Double, takeNumOneAsPercent: Boolean = false) = when {
|
||||
component < 1 -> (component * 255).roundToInt()
|
||||
component == 1.0 && takeNumOneAsPercent -> 255
|
||||
else -> 255.coerceAtMost(component.roundToInt())
|
||||
fun toUint8(component: Double, takeNumOneAsPercent: Boolean = false): Int {
|
||||
val epsilon = 1e-9
|
||||
return when {
|
||||
component == -1.0 -> 255
|
||||
component < 1.0 - epsilon -> (component * 255.0).roundToInt().coerceIn(0, 255)
|
||||
abs(component - 1.0) <= epsilon -> if (takeNumOneAsPercent) 255 else 1
|
||||
else -> component.roundToInt().coerceIn(0, 255)
|
||||
}
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun toFraction(value: Number) = value.toDouble().coerceIn(0.0, 255.0) / 255.0
|
||||
|
||||
@JvmStatic
|
||||
fun toInt(num: Number) = toInt(toHex(num))
|
||||
|
||||
|
||||
@@ -13,9 +13,13 @@ import android.content.res.Configuration.UI_MODE_NIGHT_YES
|
||||
import android.content.res.Resources
|
||||
import android.graphics.ColorFilter
|
||||
import android.graphics.PorterDuff
|
||||
import android.graphics.PorterDuff.Mode.SRC_IN
|
||||
import android.graphics.PorterDuffColorFilter
|
||||
import android.graphics.Rect
|
||||
import android.graphics.drawable.ColorDrawable
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.graphics.drawable.GradientDrawable
|
||||
import android.graphics.drawable.ShapeDrawable
|
||||
import android.os.Build
|
||||
import android.os.Looper
|
||||
import android.util.DisplayMetrics
|
||||
@@ -42,6 +46,7 @@ import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.appcompat.app.AppCompatDelegate
|
||||
import androidx.appcompat.widget.SearchView
|
||||
import androidx.appcompat.widget.Toolbar
|
||||
import androidx.core.graphics.drawable.DrawableCompat
|
||||
import androidx.core.view.ViewCompat
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
import androidx.core.view.WindowInsetsControllerCompat
|
||||
@@ -96,6 +101,33 @@ object ViewUtils {
|
||||
return view.findViewById(resId)
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
@JvmOverloads
|
||||
fun setBackgroundColor(view: View?, color: Int, reAssignment: Boolean = true) {
|
||||
view ?: return
|
||||
val bg = view.background?.mutate()
|
||||
when (bg) {
|
||||
is GradientDrawable -> {
|
||||
bg.clearColorFilter()
|
||||
bg.setColor(color)
|
||||
}
|
||||
is ShapeDrawable -> {
|
||||
bg.clearColorFilter()
|
||||
bg.paint.color = color
|
||||
}
|
||||
is ColorDrawable -> {
|
||||
bg.clearColorFilter()
|
||||
bg.color = color
|
||||
}
|
||||
else -> bg?.let {
|
||||
it.clearColorFilter()
|
||||
DrawableCompat.setTintMode(it, SRC_IN)
|
||||
DrawableCompat.setTint(it, color)
|
||||
}
|
||||
}
|
||||
if (reAssignment) view.background = bg
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
@JvmOverloads
|
||||
fun getStatusBarHeight(context: Context, withFallback: Boolean = true): Int {
|
||||
|
||||
Reference in New Issue
Block a user