From a1284f485e1d8e0f34f2d33fd4acc98c89d72776 Mon Sep 17 00:00:00 2001 From: renwj Date: Thu, 29 Jun 2023 14:50:29 +0800 Subject: [PATCH] =?UTF-8?q?[3.3.0][=E9=AD=94=E6=96=B9]=20=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E9=AD=94=E6=96=B9=E8=B0=83=E8=AF=95=E5=BC=80=E5=85=B3?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E6=8C=81=E4=B9=85=E5=8C=96;=E6=9B=B4?= =?UTF-8?q?=E6=94=B9=E9=AD=94=E6=96=B9Toast=E7=9A=84=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../launcher/lancet/WindowCallbackLancet.java | 8 +- .../mofang/MoGoMoFangProviderImpl.kt | 85 +++++++++++++------ 2 files changed, 61 insertions(+), 32 deletions(-) diff --git a/app/src/main/java/com/mogo/launcher/lancet/WindowCallbackLancet.java b/app/src/main/java/com/mogo/launcher/lancet/WindowCallbackLancet.java index ce542d056a..80865299b8 100644 --- a/app/src/main/java/com/mogo/launcher/lancet/WindowCallbackLancet.java +++ b/app/src/main/java/com/mogo/launcher/lancet/WindowCallbackLancet.java @@ -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(); diff --git a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/mofang/MoGoMoFangProviderImpl.kt b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/mofang/MoGoMoFangProviderImpl.kt index 6057743514..a65afbaa0f 100644 --- a/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/mofang/MoGoMoFangProviderImpl.kt +++ b/core/function-impl/mogo-core-function-devatools/src/main/java/com/zhjt/mogo_core_function_devatools/mofang/MoGoMoFangProviderImpl.kt @@ -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() } @@ -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() } + 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() {