fix(mobile-next): 清理悬浮窗、语音文案与位置发送

按 B-273 / B-269 收口 Android 客户端:去掉悬浮窗申请与旧浮窗服务,通话入口统一为语音通话,删除位置发送与定位权限,保留历史位置只读展示。

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: multica-agent <github@multica.ai>
This commit is contained in:
编码工程师
2026-08-21 10:04:39 +08:00
co-authored by Cursor multica-agent
parent 092039bc1a
commit 694891c393
20 changed files with 662 additions and 726 deletions
@@ -1,12 +1,10 @@
import 'dart:convert';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_openim_sdk/flutter_openim_sdk.dart';
import 'package:get/get.dart';
import 'package:openim_common/openim_common.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:openim_live/openim_live.dart';
import '../../company/feature_flags.dart';
@@ -20,7 +18,8 @@ class IMController extends GetxController with IMCallback, OpenIMLive {
late Rx<UserFullInfo> userInfo;
late String atAllTag;
final _rtcTokenApi = RtcTokenApi();
final callGuard = CallSessionGuard(inviteTimeout: LiveKitCallConfig.inviteTimeout);
final callGuard =
CallSessionGuard(inviteTimeout: LiveKitCallConfig.inviteTimeout);
@override
void onClose() {
@@ -36,7 +35,8 @@ class IMController extends GetxController with IMCallback, OpenIMLive {
if (token == null || token.isEmpty) {
return Future.error(StateError('登录状态已失效,请重新登录'));
}
return _rtcTokenApi.getToken(room: roomID, identity: userID, authToken: token);
return _rtcTokenApi.getToken(
room: roomID, identity: userID, authToken: token);
}
@override
@@ -54,11 +54,13 @@ class IMController extends GetxController with IMCallback, OpenIMLive {
if (!FeatureFlags.livekitCall) return;
final invitation = info.invitation;
final roomID = invitation?.roomID ?? '';
if (invitation?.mediaType != 'audio' || invitation?.sessionType != ConversationType.single) {
if (invitation?.mediaType != 'audio' ||
invitation?.sessionType != ConversationType.single) {
onTapReject(info);
return;
}
if (!callGuard.acceptSignaling(customType: CustomMessageType.callingInvite, roomID: roomID)) {
if (!callGuard.acceptSignaling(
customType: CustomMessageType.callingInvite, roomID: roomID)) {
return;
}
if (isBusy || callGuard.isBusy) {
@@ -149,7 +151,8 @@ class IMController extends GetxController with IMCallback, OpenIMLive {
);
OpenIM.iMManager
..setUploadLogsListener(OnUploadLogsListener(onUploadProgress: uploadLogsProgress))
..setUploadLogsListener(
OnUploadLogsListener(onUploadProgress: uploadLogsProgress))
..userManager.setUserListener(OnUserListener(
onSelfInfoUpdated: (u) {
selfInfoUpdated(u);
@@ -180,11 +183,13 @@ class IMController extends GetxController with IMCallback, OpenIMLive {
customType == CustomMessageType.callingCancel ||
customType == CustomMessageType.callingHungup) {
if (!FeatureFlags.livekitCall) return;
final signaling = SignalingInfo(invitation: InvitationInfo.fromJson(map['data']));
final signaling = SignalingInfo(
invitation: InvitationInfo.fromJson(map['data']));
signaling.userID = signaling.invitation?.inviterUserID;
final roomID = signaling.invitation?.roomID ?? '';
if (customType != CustomMessageType.callingInvite &&
!callGuard.acceptSignaling(customType: customType as int, roomID: roomID)) {
!callGuard.acceptSignaling(
customType: customType as int, roomID: roomID)) {
return;
}
@@ -236,9 +241,6 @@ class IMController extends GetxController with IMCallback, OpenIMLive {
},
onSyncServerFinish: (reInstall) {
imSdkStatus(IMSdkStatus.syncEnded, reInstall: reInstall ?? false);
if (Platform.isAndroid) {
Permissions.request([Permission.systemAlertWindow]);
}
},
onSyncServerStart: (reInstall) {
imSdkStatus(IMSdkStatus.syncStart, reInstall: reInstall ?? false);