|
|
@@ -1,37 +1,21 @@
|
|
|
package com.atmob.keyboard_android
|
|
|
|
|
|
-import android.content.Context
|
|
|
-import android.os.Build
|
|
|
import com.atmob.keyboard_android.component.ComponentMediator
|
|
|
import com.atmob.keyboard_android.component.base.interceptor.LoginRouteInterceptor
|
|
|
import com.atmob.keyboard_android.component.base.interceptor.RouteInterceptorManager
|
|
|
import com.atmob.keyboard_android.component.listener.ComponentUpdateLoggingListener
|
|
|
-import com.atmob.keyboard_android.constant.PluginConfig
|
|
|
-import com.atmob.keyboard_android.floating.FloatingButtonService
|
|
|
-import com.atmob.keyboard_android.model.KeyboardSelectModel
|
|
|
import com.atmob.keyboard_android.util.AppMonitor
|
|
|
import com.atmob.keyboard_android.util.ContextUtil
|
|
|
-import com.atmob.keyboard_android.util.FloatingWindowUtil
|
|
|
-import com.atmob.keyboard_android.util.InputMethodUtil
|
|
|
-import com.atmob.keyboard_android.util.JsonUtil
|
|
|
-import com.atmob.keyboard_android.util.KeyboardHolder
|
|
|
+import com.atmob.keyboard_android.util.FlutterEngineHolder
|
|
|
import com.atmob.keyboard_android.util.LogUtil
|
|
|
import com.atmob.keyboard_android.util.activity.ActivityProvider
|
|
|
import com.atmob.keyboard_android.util.bridge.FlutterBridgeManager
|
|
|
import io.flutter.embedding.engine.plugins.FlutterPlugin
|
|
|
-import io.flutter.plugin.common.MethodCall
|
|
|
-import io.flutter.plugin.common.MethodChannel
|
|
|
-import io.flutter.plugin.common.MethodChannel.MethodCallHandler
|
|
|
-import io.flutter.plugin.common.MethodChannel.Result
|
|
|
|
|
|
/**
|
|
|
* 键盘插件
|
|
|
*/
|
|
|
-class KeyboardAndroidPlugin : FlutterPlugin, MethodCallHandler {
|
|
|
- private lateinit var channel: MethodChannel
|
|
|
-
|
|
|
- private lateinit var context: Context
|
|
|
-
|
|
|
+class KeyboardAndroidPlugin : FlutterPlugin {
|
|
|
companion object {
|
|
|
init {
|
|
|
// 伴生对象的初始化,相当于Java的静态代码块,只初始化一次
|
|
|
@@ -67,112 +51,18 @@ class KeyboardAndroidPlugin : FlutterPlugin, MethodCallHandler {
|
|
|
}
|
|
|
|
|
|
override fun onAttachedToEngine(flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) {
|
|
|
- context = flutterPluginBinding.applicationContext
|
|
|
- channel = MethodChannel(
|
|
|
- flutterPluginBinding.binaryMessenger,
|
|
|
- PluginConfig.FLUTTER_METHOD_CHANNEL_NAME
|
|
|
+ FlutterEngineHolder.attachFlutterEngine(
|
|
|
+ flutterPluginBinding.flutterEngine
|
|
|
)
|
|
|
- channel.setMethodCallHandler(this)
|
|
|
-
|
|
|
- LogUtil.d("KeyboardAndroidPlugin 初始化")
|
|
|
- }
|
|
|
-
|
|
|
- override fun onMethodCall(call: MethodCall, result: Result) {
|
|
|
- LogUtil.d("Method called: ${call.method}")
|
|
|
- when (call.method) {
|
|
|
- "getPlatformVersion" -> {
|
|
|
- result.success("Android ${Build.VERSION.RELEASE}")
|
|
|
- }
|
|
|
-
|
|
|
- // 初始化插件
|
|
|
- "initPlugin" -> {
|
|
|
- // 注册键盘切换监听
|
|
|
- FlutterBridgeManager.registerDefaultKeyboardChangeEvent()
|
|
|
- result.success(null)
|
|
|
- }
|
|
|
-
|
|
|
- // 开启或关闭悬浮窗
|
|
|
- "enableFloatingWindow" -> {
|
|
|
- val enable = call.argument<Boolean>("enable") == true
|
|
|
- enableFloatingWindow(enable)
|
|
|
- result.success(null)
|
|
|
- }
|
|
|
-
|
|
|
- // 跳转到系统的悬浮窗设置页
|
|
|
- "jumpFloatingWindowSetting" -> {
|
|
|
- FloatingWindowUtil.jumpFloatingWindowSetting(context)
|
|
|
- result.success(null)
|
|
|
- }
|
|
|
-
|
|
|
- // 是否开启了悬浮窗权限
|
|
|
- "hasFloatingWindowPermission" -> {
|
|
|
- val hasPermission = FloatingWindowUtil.hasFloatingWindowPermission(context)
|
|
|
- result.success(hasPermission)
|
|
|
- }
|
|
|
-
|
|
|
- // 打开输入法设置
|
|
|
- "openInputMethodSettings" -> {
|
|
|
- InputMethodUtil.openInputMethodSettings(context)
|
|
|
- result.success(null)
|
|
|
- }
|
|
|
-
|
|
|
- // 判断指定的输入法是否启用
|
|
|
- "isTargetKeyboardEnabled" -> {
|
|
|
- result.success(InputMethodUtil.isTargetKeyboardEnabled(context))
|
|
|
- }
|
|
|
-
|
|
|
- // 是否是默认输入法
|
|
|
- "isDefaultKeyboard" -> {
|
|
|
- result.success(InputMethodUtil.isDefaultKeyboard(context))
|
|
|
- }
|
|
|
-
|
|
|
- // 更新键盘信息
|
|
|
- "updateKeyboardInfo" -> {
|
|
|
- val keyboardInfoJson = call.arguments<String>() ?: ""
|
|
|
- val currentKeyboardInfo =
|
|
|
- JsonUtil.parseJsonByClass(keyboardInfoJson, KeyboardSelectModel::class.java)
|
|
|
- KeyboardHolder.getKeyboardService()?.getKeyboardViewModel()
|
|
|
- ?.updateCurrentKeyboardInfo(currentKeyboardInfo)
|
|
|
- result.success(null)
|
|
|
- }
|
|
|
-
|
|
|
- // 刷新人设列表
|
|
|
- "refreshCharacterList" -> {
|
|
|
- LogUtil.d("刷新人设列表")
|
|
|
- KeyboardHolder.getKeyboardService()?.getKeyboardViewModel()
|
|
|
- ?.getCharacterList()
|
|
|
- result.success(null)
|
|
|
- }
|
|
|
-
|
|
|
- // 登录成功\退出登录\注销账号,刷新用户数据
|
|
|
- "refreshData" -> {
|
|
|
- KeyboardHolder.getKeyboardService()?.getKeyboardViewModel()?.run {
|
|
|
- // 刷新数据
|
|
|
- getCurrentKeyboardInfo()
|
|
|
- getKeyboardList()
|
|
|
- getCharacterList()
|
|
|
- getPrologueList()
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- else -> {
|
|
|
- result.notImplemented()
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 开启或关闭悬浮窗
|
|
|
- */
|
|
|
- private fun enableFloatingWindow(enable: Boolean) {
|
|
|
- if (enable) {
|
|
|
- FloatingButtonService.start(context)
|
|
|
- } else {
|
|
|
- FloatingButtonService.stop(context)
|
|
|
- }
|
|
|
+ // 暴露给Flutter的原生方法
|
|
|
+ FlutterBridgeManager.exposeKeyboardOptMethod()
|
|
|
+ LogUtil.d("KeyboardAndroidPlugin 注册到引擎,onAttachedToEngine()")
|
|
|
}
|
|
|
|
|
|
override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) {
|
|
|
- channel.setMethodCallHandler(null)
|
|
|
+ // 取消暴露给Flutter的原生方法
|
|
|
+ FlutterBridgeManager.cancelExposeKeyboardOptMethod()
|
|
|
+ FlutterEngineHolder.detachFlutterEngine()
|
|
|
+ LogUtil.d("KeyboardAndroidPlugin 从引擎中注销,onDetachedFromEngine()")
|
|
|
}
|
|
|
}
|