[3.3.0][魔方] 增加魔方调试开关状态持久化;更改魔方Toast的实现方式
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user