[3.3.0][魔方] 增加魔方调试开关状态持久化;更改魔方Toast的实现方式

This commit is contained in:
renwj
2023-06-29 14:50:29 +08:00
parent 3a69cc47d1
commit a1284f485e
2 changed files with 61 additions and 32 deletions

View File

@@ -69,7 +69,7 @@ public class WindowCallbackLancet {
@Override
public void onViewAttachedToWindow(@NonNull View v) {
try {
v.getViewTreeObserver().addOnGlobalFocusChangeListener(listener);
v.getRootView().getViewTreeObserver().addOnGlobalFocusChangeListener(listener);
isAdd = true;
} catch (Throwable t) {
t.printStackTrace();
@@ -79,7 +79,7 @@ public class WindowCallbackLancet {
public void onViewDetachedFromWindow(@NonNull View v) {
try {
if (isAdd) {
v.getViewTreeObserver().removeOnGlobalFocusChangeListener(listener);
v.getRootView().getViewTreeObserver().removeOnGlobalFocusChangeListener(listener);
}
} catch (Throwable t) {
t.printStackTrace();
@@ -99,7 +99,7 @@ public class WindowCallbackLancet {
@Override
public void onViewAttachedToWindow(@NonNull View v) {
try {
v.getViewTreeObserver().addOnGlobalFocusChangeListener(listener);
v.getRootView().getViewTreeObserver().addOnGlobalFocusChangeListener(listener);
isAdd = true;
} catch (Throwable t) {
t.printStackTrace();
@@ -109,7 +109,7 @@ public class WindowCallbackLancet {
public void onViewDetachedFromWindow(@NonNull View v) {
try {
if (isAdd) {
v.getViewTreeObserver().removeOnGlobalFocusChangeListener(listener);
v.getRootView().getViewTreeObserver().removeOnGlobalFocusChangeListener(listener);
}
} catch (Throwable t) {
t.printStackTrace();

View File

@@ -3,17 +3,23 @@ package com.zhjt.mogo_core_function_devatools.mofang
import android.annotation.*
import android.app.*
import android.bluetooth.*
import android.graphics.*
import android.graphics.drawable.ColorDrawable
import android.util.*
import android.view.*
import android.view.Window.Callback
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.*
import androidx.lifecycle.*
import com.mogo.core.mofang.connect.MoFangManager
import com.mogo.core.mofang.connect.device.*
import com.mogo.core.mofang.connect.listener.*
import com.mogo.eagle.core.function.api.devatools.mofang.*
import com.mogo.eagle.core.function.api.devatools.mofang.IMoGoMoFangProvider.OnMoFangStatusListener
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.mogo.eagle.core.utilcode.util.Utils
import com.mogo.eagle.core.utilcode.floating.*
import com.mogo.eagle.core.utilcode.util.*
import com.zhjt.mogo_core_function_devatools.mofang.MoFangAnalyticUtils.Companion.EVENT_BATTERY
import com.zhjt.mogo_core_function_devatools.mofang.MoFangAnalyticUtils.Companion.EVENT_BATTERY_VALUE
import com.zhjt.mogo_core_function_devatools.mofang.MoFangAnalyticUtils.Companion.EVENT_INPUT
@@ -24,6 +30,8 @@ import com.zhjt.mogo_core_function_devatools.mofang.MoFangAnalyticUtils.Companio
import com.zhjt.mogo_core_function_devatools.mofang.MoFangAnalyticUtils.Companion.EVENT_SUB_DISCONNECT_SUCCESS
import com.zhjt.mogo_core_function_devatools.mofang.MoFangAnalyticUtils.Companion.EVENT_SUB_START_CONNECT
import com.zhjt.mogo_core_function_devatools.mofang.MoFangAnalyticUtils.Companion.EVENT_SUB_START_DISCONNECT
import kotlinx.coroutines.*
import me.jessyan.autosize.utils.AutoSizeUtils
import java.util.concurrent.ConcurrentHashMap
import java.util.concurrent.atomic.AtomicBoolean
import java.util.concurrent.atomic.AtomicInteger
@@ -33,9 +41,9 @@ internal class MoGoMoFangProviderImpl: IMoGoMoFangProvider, OnMoFangDeviceListen
companion object {
private const val TAG = "MoGoMoFangProviderImpl"
}
private val battery by lazy { AtomicInteger(0) }
private const val SP_KEY_TEST_ENABLE = "sp_mofang_test_enable"
}
private val listeners by lazy { ConcurrentHashMap<String, OnMoFangStatusListener>() }
@@ -43,12 +51,15 @@ internal class MoGoMoFangProviderImpl: IMoGoMoFangProvider, OnMoFangDeviceListen
private val linkedLog by lazy { MoFangLinkedLog().also { executor.setLinkedLog(it) } }
private val isTest by lazy { AtomicBoolean(false) }
private val isTest by lazy { AtomicBoolean(SPUtils.getInstance().getBoolean(SP_KEY_TEST_ENABLE)) }
private val toast by lazy { AtomicReference<Toast>() }
private var toast: MoGoPopWindow? = null
private var job: Job? = null
override fun enableTest(enable: Boolean) {
isTest.set(enable)
SPUtils.getInstance().put(SP_KEY_TEST_ENABLE, enable)
}
override fun isEnableTest(): Boolean {
@@ -126,13 +137,10 @@ internal class MoGoMoFangProviderImpl: IMoGoMoFangProvider, OnMoFangDeviceListen
override fun onBluetoothBatteryChanged(battery: Int) {
linkedLog.record(mapOf("callback" to "onBluetoothBatteryChanged:$battery"))
MoFangAnalyticUtils.track(EVENT_BATTERY, mutableMapOf(EVENT_BATTERY_VALUE to "$battery"))
if (this.battery.get() != battery) {
UiThreadHandler.post {
listeners.values.forEach {
it.onMoFangBatteryChanged(battery)
}
UiThreadHandler.post {
listeners.values.forEach {
it.onMoFangBatteryChanged(battery)
}
this.battery.set(battery)
}
}
@@ -167,13 +175,9 @@ internal class MoGoMoFangProviderImpl: IMoGoMoFangProvider, OnMoFangDeviceListen
}
override fun onBluetoothKeyBoardCombineClicked(vararg keyCodes: Int) {
val keycodesText = keyCodes.joinToString(",") { KeyEvent.keyCodeToString(it) }
val keycodesText = keyCodes.joinToString(",") { KeyEvent.keyCodeToString(it).replace("KEYCODE_", "", true) }
if (isTest.get()) {
toast.get()?.cancel()
Toast.makeText(Utils.getApp(), "组合键[$keycodesText]触发了\n[正式使用时,请关闭运营面板上的\"魔方指令\"测试开关]", Toast.LENGTH_SHORT).also {
toast.set(it)
}.show()
return
showToast("组合键[$keycodesText]触发了")
}
try {
MoFangAnalyticUtils.track(EVENT_INPUT, mutableMapOf(EVENT_INPUT_SUB_KEYCODE to keycodesText, EVENT_INPUT_SUB_TYPE to "3"))
@@ -188,11 +192,7 @@ internal class MoGoMoFangProviderImpl: IMoGoMoFangProvider, OnMoFangDeviceListen
override fun onBluetoothKeyBoardLongClicked(keyCode: Int) {
if (isTest.get()) {
toast.get()?.cancel()
Toast.makeText(Utils.getApp(), "长按键[${KeyEvent.keyCodeToString(keyCode)}]触发了\n[正式使用时,请关闭运营面板上的\"魔方指令\"测试开关]", Toast.LENGTH_SHORT).also {
toast.set(it)
}.show()
return
showToast("长按键[${KeyEvent.keyCodeToString(keyCode).replace("KEYCODE_", "", true)}]触发了")
}
try {
MoFangAnalyticUtils.track(EVENT_INPUT, mutableMapOf(EVENT_INPUT_SUB_KEYCODE to keyCode.toString(), EVENT_INPUT_SUB_TYPE to "2"))
@@ -210,11 +210,7 @@ internal class MoGoMoFangProviderImpl: IMoGoMoFangProvider, OnMoFangDeviceListen
override fun onBluetoothKeyboardClicked(keyCode: Int) {
val keycodeText = KeyEvent.keyCodeToString(keyCode)
if (isTest.get()) {
toast.get()?.cancel()
Toast.makeText(Utils.getApp(), "单击键[$keycodeText]触发了\n[正式使用时,请关闭运营面板上的\"魔方指令\"测试开关]", Toast.LENGTH_SHORT).also {
toast.set(it)
}.show()
return
showToast("单击键[${keycodeText.replace("KEYCODE_", "", true)}]触发了")
}
try {
MoFangAnalyticUtils.track(EVENT_INPUT, mutableMapOf(EVENT_INPUT_SUB_KEYCODE to keyCode.toString(), EVENT_INPUT_SUB_TYPE to "1"))
@@ -229,6 +225,39 @@ internal class MoGoMoFangProviderImpl: IMoGoMoFangProvider, OnMoFangDeviceListen
}
}
private fun showToast(text: String) {
toast?.hide()
val activity = AppStateManager.currentActivity()
if (activity !is AppCompatActivity) {
return
}
val padding = AutoSizeUtils.dp2px(activity, 10.0f)
MoGoPopWindow.Builder()
.attachToActivity(activity)
.contentView(TextView(activity).also {
it.setPadding(padding)
it.setTextColor(Color.WHITE)
it.background = ColorDrawable(Color.BLACK)
it.textSize = AutoSizeUtils.sp2px(activity, 12f).toFloat()
it.text = text
})
.width(WindowManager.LayoutParams.WRAP_CONTENT)
.height(WindowManager.LayoutParams.WRAP_CONTENT)
.gravityInActivity(Gravity.BOTTOM or Gravity.CENTER_HORIZONTAL)
.offsetY(AutoSizeUtils.dp2px(activity, 200.0f))
.onDismissed {
toast = null
}
.onShowed {
job?.cancel()
activity.lifecycleScope.launch {
delay(2000)
toast?.hide()
}.also { job = it }
}
.build().also { toast = it }.show()
}
override fun onBluetoothKeyboardEvent(event: KeyEvent) { }
override fun onBluetoothKeyboardInputInvalid() {