|
|
|
@ -11,6 +11,7 @@ import 'package:path_provider/path_provider.dart'; |
|
|
|
import 'package:permission_handler/permission_handler.dart'; |
|
|
|
import 'package:device_info_plus/device_info_plus.dart'; |
|
|
|
import 'package:pip/pip.dart'; |
|
|
|
import 'package:voitrans/data/services/qq_music.dart'; |
|
|
|
import '../../../data/services/ast_service.dart'; |
|
|
|
import '../../../data/services/bluetooth_manager.dart'; |
|
|
|
import '../../../data/services/music_manager.dart'; |
|
|
|
@ -54,6 +55,7 @@ class TranslationController extends GetxController with WidgetsBindingObserver { |
|
|
|
final BluetoothManager bluetoothManager = Get.find<BluetoothManager>(); |
|
|
|
final BleManager bleManager = Get.find<BleManager>(); |
|
|
|
final _musiceManager = Get.find<MusicManager>(); |
|
|
|
final _qqMusicManager = Get.find<QqMusicService>(); |
|
|
|
late final UsageStatsService _usageService; |
|
|
|
// 安卓悬浮窗管理器 |
|
|
|
late final FloatingWindowManager _floatingWindowManager; |
|
|
|
@ -79,6 +81,7 @@ class TranslationController extends GetxController with WidgetsBindingObserver { |
|
|
|
bool _audioSourceType = false; // 音频输入源类型 |
|
|
|
bool isPlayback = false; // 是否开启播放 |
|
|
|
bool isContinuePlaying = false; // 是否继续播放 |
|
|
|
bool _isContinueQqMusicPlaying = false; // 是否继续播放QQ音乐 |
|
|
|
|
|
|
|
// 存储相关配置 |
|
|
|
static const String _sourceLanguageKey = 'translation_source_language'; |
|
|
|
@ -330,7 +333,10 @@ class TranslationController extends GetxController with WidgetsBindingObserver { |
|
|
|
} |
|
|
|
|
|
|
|
/// 更改翻译模式 |
|
|
|
/// [mode] 翻译模式:simultaneous(同声传译)、audioVideo(音视频)、call(通话)、faceToFace(面对面) |
|
|
|
/// 参数: |
|
|
|
/// - [mode] 翻译模式:simultaneous(同声传译)、audioVideo(音视频)、call(通话)、faceToFace(面对面) |
|
|
|
/// 返回值:无 |
|
|
|
/// 异常:可能抛出底层服务调用异常 |
|
|
|
Future<void> changeTranslationMode(String mode) async { |
|
|
|
currentMode.value = mode; |
|
|
|
currentModeTitle.value = _getModeTitle(mode); |
|
|
|
@ -338,6 +344,10 @@ class TranslationController extends GetxController with WidgetsBindingObserver { |
|
|
|
loadTranslationHistory(); |
|
|
|
//stopAll(); |
|
|
|
|
|
|
|
if (mode == 'faceToFace' || mode == 'call' || mode == 'simultaneous') { |
|
|
|
await suspendOtherServices(); |
|
|
|
} |
|
|
|
|
|
|
|
if (Platform.isAndroid && (mode == 'call' || mode == 'audioVideo')) { |
|
|
|
try { |
|
|
|
_floatingWindowManager.setLastTranslationMode(mode); |
|
|
|
@ -741,16 +751,26 @@ class TranslationController extends GetxController with WidgetsBindingObserver { |
|
|
|
} |
|
|
|
|
|
|
|
/// 暂停其他服务(如音乐播放) |
|
|
|
/// 参数:无 |
|
|
|
/// 返回值:无 |
|
|
|
/// 异常:内部捕获并记录日志,不向外抛出 |
|
|
|
Future<void> suspendOtherServices() async { |
|
|
|
try { |
|
|
|
var status = await _musiceManager.getStatus(); |
|
|
|
var isPlaying = status['isPlaying'] ?? false; |
|
|
|
if (!isContinuePlaying) { |
|
|
|
final status = await _musiceManager.getStatus(); |
|
|
|
final bool isPlaying = status['isPlaying'] ?? false; |
|
|
|
if (isPlaying == true) { |
|
|
|
isContinuePlaying = true; |
|
|
|
await _musiceManager.pause(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (isPlaying == true) { |
|
|
|
isContinuePlaying = true; |
|
|
|
await _musiceManager.pause(); |
|
|
|
} else { |
|
|
|
isContinuePlaying = false; |
|
|
|
if (!_isContinueQqMusicPlaying) { |
|
|
|
await _qqMusicManager.syncCurrentPlayInfo(); |
|
|
|
if (_qqMusicManager.isPlaying.value == true) { |
|
|
|
_isContinueQqMusicPlaying = true; |
|
|
|
await _qqMusicManager.pauseMusic(); |
|
|
|
} |
|
|
|
} |
|
|
|
} catch (e) { |
|
|
|
Logger.error('暂停其他服务失败: ${e.toString()}'); |
|
|
|
@ -758,11 +778,18 @@ class TranslationController extends GetxController with WidgetsBindingObserver { |
|
|
|
} |
|
|
|
|
|
|
|
/// 恢复其他服务(如音乐播放) |
|
|
|
/// 参数:无 |
|
|
|
/// 返回值:无 |
|
|
|
/// 异常:内部捕获并记录日志,不向外抛出 |
|
|
|
Future<void> restoreOtherServices() async { |
|
|
|
try { |
|
|
|
if (isContinuePlaying) await _musiceManager.resume(); |
|
|
|
if (_isContinueQqMusicPlaying) await _qqMusicManager.resumeMusic(); |
|
|
|
} catch (e) { |
|
|
|
Logger.error('恢复其他服务失败: ${e.toString()}'); |
|
|
|
} finally { |
|
|
|
isContinuePlaying = false; |
|
|
|
_isContinueQqMusicPlaying = false; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|