Browse Source

Merge branch 'new_dev' of https://github.com/deepcloud2048/deep_voice into new_dev

weicu
fdp 11 months ago
parent
commit
7089ccc85d
  1. 51
      android/app/src/main/kotlin/com/saitong/voitrans/FloatingWindowService.kt
  2. 10
      lib/modules/eq_settings/bindings/eq_settings_binding.dart
  3. 3
      lib/modules/eq_settings/controllers/eq_settings_controller.dart
  4. 13
      lib/modules/eq_settings/views/eq_settings_view.dart
  5. 9
      lib/routes/app_pages.dart
  6. 1
      lib/routes/app_routes.dart

51
android/app/src/main/kotlin/com/saitong/voitrans/FloatingWindowService.kt

@ -19,6 +19,7 @@ class FloatingWindowService : Service() {
private var windowManager: WindowManager? = null private var windowManager: WindowManager? = null
private var floatingView: View? = null private var floatingView: View? = null
private var isMinimized = true private var isMinimized = true
private lateinit var layoutParams: WindowManager.LayoutParams
private lateinit var sourceTextView: TextView private lateinit var sourceTextView: TextView
private lateinit var translatedTextView: TextView private lateinit var translatedTextView: TextView
@ -73,7 +74,7 @@ class FloatingWindowService : Service() {
setupClickListeners() setupClickListeners()
// 设置窗口参数 // 设置窗口参数
val layoutParams = WindowManager.LayoutParams().apply { layoutParams = WindowManager.LayoutParams().apply {
width = WindowManager.LayoutParams.WRAP_CONTENT width = WindowManager.LayoutParams.WRAP_CONTENT
height = WindowManager.LayoutParams.WRAP_CONTENT height = WindowManager.LayoutParams.WRAP_CONTENT
type = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { type = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
@ -255,26 +256,12 @@ class FloatingWindowService : Service() {
} }
private fun setupClickListeners() { private fun setupClickListeners() {
// 最小化状态点击展开
minimizedView.setOnClickListener {
isMinimized = false
updateViewState(false)
notifyStateChange("expanded")
}
// 展开状态点击最小化
expandedView.setOnClickListener {
isMinimized = true
updateViewState(true)
notifyStateChange("minimized")
}
// 长按关闭 // 长按关闭
floatingView!!.setOnLongClickListener { floatingView!!.setOnLongClickListener {
closeFloatingWindow() closeFloatingWindow()
true true
} }
// 拖拽功能 // 拖拽功能
setupDragListener() setupDragListener()
} }
@ -284,25 +271,40 @@ class FloatingWindowService : Service() {
var initialY = 0 var initialY = 0
var initialTouchX = 0f var initialTouchX = 0f
var initialTouchY = 0f var initialTouchY = 0f
var dragging = false
val threshold = (4 * resources.displayMetrics.density).toInt()
floatingView!!.setOnTouchListener { _, event -> floatingView!!.setOnTouchListener { _, event ->
when (event.action) { when (event.action) {
MotionEvent.ACTION_DOWN -> { MotionEvent.ACTION_DOWN -> {
val layoutParams = floatingView!!.layoutParams as WindowManager.LayoutParams
initialX = layoutParams.x initialX = layoutParams.x
initialY = layoutParams.y initialY = layoutParams.y
initialTouchX = event.rawX initialTouchX = event.rawX
initialTouchY = event.rawY initialTouchY = event.rawY
dragging = false
true true
} }
MotionEvent.ACTION_MOVE -> { MotionEvent.ACTION_MOVE -> {
val layoutParams = floatingView!!.layoutParams as WindowManager.LayoutParams val dx = (event.rawX - initialTouchX).toInt()
layoutParams.x = initialX + (event.rawX - initialTouchX).toInt() val dy = (event.rawY - initialTouchY).toInt()
layoutParams.y = initialY + (event.rawY - initialTouchY).toInt() if (Math.abs(dx) > threshold || Math.abs(dy) > threshold) dragging = true
val dm = resources.displayMetrics
val maxX = dm.widthPixels - (floatingView?.width ?: 0)
val maxY = dm.heightPixels - (floatingView?.height ?: 0)
layoutParams.x = (initialX + dx).coerceIn(0, maxX)
layoutParams.y = (initialY + dy).coerceIn(0, maxY)
windowManager?.updateViewLayout(floatingView, layoutParams) windowManager?.updateViewLayout(floatingView, layoutParams)
true true
} }
else -> false MotionEvent.ACTION_UP -> {
if (!dragging) {
isMinimized = !isMinimized
updateViewState(isMinimized)
notifyStateChange(if (isMinimized) "minimized" else "expanded")
}
dragging = false
true
}
else -> true
} }
} }
} }
@ -347,11 +349,10 @@ class FloatingWindowService : Service() {
val x = intent.getIntExtra(EXTRA_X, 0) val x = intent.getIntExtra(EXTRA_X, 0)
val y = intent.getIntExtra(EXTRA_Y, 0) val y = intent.getIntExtra(EXTRA_Y, 0)
floatingView?.let { view -> floatingView?.let {
val layoutParams = view.layoutParams as WindowManager.LayoutParams
layoutParams.x = x layoutParams.x = x
layoutParams.y = y layoutParams.y = y
windowManager?.updateViewLayout(view, layoutParams) windowManager?.updateViewLayout(it, layoutParams)
} }
} }

10
lib/modules/eq_settings/bindings/eq_settings_binding.dart

@ -0,0 +1,10 @@
import 'package:get/get.dart';
import '../controllers/eq_settings_controller.dart';
class EqSettingsBinding extends Bindings {
@override
void dependencies() {
Get.lazyPut<EqSettingsController>(() => EqSettingsController());
}
}

3
lib/modules/eq_settings/controllers/eq_settings_controller.dart

@ -0,0 +1,3 @@
import 'package:get/get.dart';
class EqSettingsController extends GetxController {}

13
lib/modules/eq_settings/views/eq_settings_view.dart

@ -0,0 +1,13 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../controllers/eq_settings_controller.dart';
class EqSettingsView extends GetView<EqSettingsController> {
const EqSettingsView({super.key});
@override
Widget build(BuildContext context) {
return const Placeholder();
}
}

9
lib/routes/app_pages.dart

@ -1,5 +1,7 @@
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:qq_music/qq_music.dart'; import 'package:qq_music/qq_music.dart';
import '../modules/eq_settings/bindings/eq_settings_binding.dart';
import '../modules/eq_settings/views/eq_settings_view.dart';
import '/modules/qqmusic/bindings/qqmusic_playlist_binding.dart'; import '/modules/qqmusic/bindings/qqmusic_playlist_binding.dart';
import '/modules/qqmusic/views/qqmusic_playlist_view.dart'; import '/modules/qqmusic/views/qqmusic_playlist_view.dart';
@ -324,5 +326,12 @@ abstract class AppPages {
transition: Transition.rightToLeft, transition: Transition.rightToLeft,
transitionDuration: Duration(milliseconds: 250), transitionDuration: Duration(milliseconds: 250),
), ),
GetPage(
name: Routes.eqSettings,
page: () => const EqSettingsView(),
binding: EqSettingsBinding(),
transition: Transition.rightToLeft,
transitionDuration: Duration(milliseconds: 250),
),
]; ];
} }

1
lib/routes/app_routes.dart

@ -19,6 +19,7 @@ abstract class Routes {
static const settings = '/settings'; // 系统设置 static const settings = '/settings'; // 系统设置
static const permissions = '/permissions'; // 权限管理 static const permissions = '/permissions'; // 权限管理
static const recording = '/recording'; // 录音功能 static const recording = '/recording'; // 录音功能
static const eqSettings = '/eq_settings'; // 设备设置
// 会议相关 // 会议相关
static const meeting = '/meeting'; static const meeting = '/meeting';

Loading…
Cancel
Save