diff --git a/flutter/assets/record_screen.svg b/flutter/assets/record_screen.svg
new file mode 100644
index 000000000..e1b962124
--- /dev/null
+++ b/flutter/assets/record_screen.svg
@@ -0,0 +1,24 @@
+
+
+
+
\ No newline at end of file
diff --git a/flutter/assets/voice_call.svg b/flutter/assets/voice_call.svg
index 0637b58d9..5654befc7 100644
--- a/flutter/assets/voice_call.svg
+++ b/flutter/assets/voice_call.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/flutter/lib/desktop/pages/desktop_home_page.dart b/flutter/lib/desktop/pages/desktop_home_page.dart
index 71dd2c96e..2986adc7a 100644
--- a/flutter/lib/desktop/pages/desktop_home_page.dart
+++ b/flutter/lib/desktop/pages/desktop_home_page.dart
@@ -358,14 +358,16 @@ class _DesktopHomePageState extends State
return buildInstallCard("", "install_daemon_tip", "Install", () async {
bind.mainIsInstalledDaemon(prompt: true);
});
- } else if ((await osxCanRecordAudio() !=
- PermissionAuthorizeType.authorized)) {
- return buildInstallCard("Permissions", "config_microphone", "Configure",
- () async {
- osxRequestAudio();
- watchIsCanRecordAudio = true;
- });
}
+ //// Disable microphone configuration for macOS. We will request the permission when needed.
+ // else if ((await osxCanRecordAudio() !=
+ // PermissionAuthorizeType.authorized)) {
+ // return buildInstallCard("Permissions", "config_microphone", "Configure",
+ // () async {
+ // osxRequestAudio();
+ // watchIsCanRecordAudio = true;
+ // });
+ // }
} else if (Platform.isLinux) {
if (bind.mainCurrentIsWayland()) {
return buildInstallCard(
diff --git a/flutter/lib/desktop/widgets/remote_menubar.dart b/flutter/lib/desktop/widgets/remote_menubar.dart
index 653ff37b1..dcc531408 100644
--- a/flutter/lib/desktop/widgets/remote_menubar.dart
+++ b/flutter/lib/desktop/widgets/remote_menubar.dart
@@ -657,12 +657,17 @@ class _RemoteMenubarState extends State {
? translate('Stop session recording')
: translate('Start session recording'),
onPressed: () => value.toggle(),
- icon: Icon(
- value.start
- ? Icons.pause_circle_filled
- : Icons.videocam_outlined,
- color: _MenubarTheme.commonColor,
- ),
+ icon: value.start
+ ? Icon(
+ Icons.pause_circle_filled,
+ color: _MenubarTheme.commonColor,
+ )
+ : SvgPicture.asset(
+ "assets/record_screen.svg",
+ color: _MenubarTheme.commonColor,
+ width: Theme.of(context).iconTheme.size ?? 22.0,
+ height: Theme.of(context).iconTheme.size ?? 22.0,
+ ),
));
} else {
return Offstage();
@@ -708,36 +713,58 @@ class _RemoteMenubarState extends State {
);
}
+ Widget _getVoiceCallIcon() {
+ switch (widget.ffi.chatModel.voiceCallStatus.value) {
+ case VoiceCallStatus.waitingForResponse:
+ return IconButton(
+ onPressed: () {
+ widget.ffi.chatModel.closeVoiceCall(widget.id);
+ },
+ icon: SvgPicture.asset(
+ "assets/voice_call_waiting.svg",
+ color: Colors.red,
+ width: Theme.of(context).iconTheme.size ?? 20.0,
+ height: Theme.of(context).iconTheme.size ?? 20.0,
+ ));
+ case VoiceCallStatus.connected:
+ return IconButton(
+ onPressed: () {
+ widget.ffi.chatModel.closeVoiceCall(widget.id);
+ },
+ icon: Icon(
+ Icons.phone_disabled_rounded,
+ color: Colors.red,
+ size: Theme.of(context).iconTheme.size ?? 22.0,
+ ),
+ );
+ default:
+ return const Offstage();
+ }
+ }
+
+ String? _getVoiceCallTooltip() {
+ switch (widget.ffi.chatModel.voiceCallStatus.value) {
+ case VoiceCallStatus.waitingForResponse:
+ return "Waiting";
+ case VoiceCallStatus.connected:
+ return "Disconnect";
+ default:
+ return null;
+ }
+ }
+
Widget _buildVoiceCall(BuildContext context) {
return Obx(
() {
- switch (widget.ffi.chatModel.voiceCallStatus.value) {
- case VoiceCallStatus.waitingForResponse:
- return IconButton(
- onPressed: () {
- widget.ffi.chatModel.closeVoiceCall(widget.id);
- },
- icon: SvgPicture.asset(
- "assets/voice_call_waiting.svg",
- color: Colors.red,
- width: Theme.of(context).iconTheme.size ?? 24.0,
- height: Theme.of(context).iconTheme.size ?? 24.0,
- ));
- case VoiceCallStatus.connected:
- return IconButton(
- onPressed: () {
- widget.ffi.chatModel.closeVoiceCall(widget.id);
- },
- icon: SvgPicture.asset(
- "assets/voice_call.svg",
- color: Colors.red,
- width: Theme.of(context).iconTheme.size ?? 24.0,
- height: Theme.of(context).iconTheme.size ?? 24.0,
- ),
- );
- default:
- return const Offstage();
- }
+ final tooltipText = _getVoiceCallTooltip();
+ return tooltipText == null
+ ? const Offstage()
+ : IconButton(
+ padding: EdgeInsets.zero,
+ icon: _getVoiceCallIcon(),
+ tooltip: translate(tooltipText),
+ onPressed: () => bind.sessionRequestVoiceCall(id: widget.id),
+ );
},
);
}
diff --git a/flutter/lib/models/chat_model.dart b/flutter/lib/models/chat_model.dart
index 14af96570..bf7f8773d 100644
--- a/flutter/lib/models/chat_model.dart
+++ b/flutter/lib/models/chat_model.dart
@@ -328,4 +328,4 @@ enum VoiceCallStatus {
connected,
// Connection manager only.
incoming
-}
\ No newline at end of file
+}