From b865afe355cb37287204763618fd5d3a9085c59b Mon Sep 17 00:00:00 2001 From: otsmr Date: Tue, 5 Aug 2025 13:47:41 +0200 Subject: [PATCH] fix #264 --- lib/src/model/json/userdata.dart | 3 +++ lib/src/model/json/userdata.g.dart | 3 +++ .../camera/camera_preview_controller_view.dart | 14 ++++++++++++++ 3 files changed, 20 insertions(+) diff --git a/lib/src/model/json/userdata.dart b/lib/src/model/json/userdata.dart index 702b340..d28cb58 100644 --- a/lib/src/model/json/userdata.dart +++ b/lib/src/model/json/userdata.dart @@ -49,6 +49,9 @@ class UserData { @JsonKey(defaultValue: true) bool useHighQuality = true; + @JsonKey(defaultValue: false) + bool requestedAudioPermission = false; + @JsonKey(defaultValue: true) bool showFeedbackShortcut = true; diff --git a/lib/src/model/json/userdata.g.dart b/lib/src/model/json/userdata.g.dart index 3c615c0..1e4004d 100644 --- a/lib/src/model/json/userdata.g.dart +++ b/lib/src/model/json/userdata.g.dart @@ -26,6 +26,8 @@ UserData _$UserDataFromJson(Map json) => UserData( ThemeMode.system ..defaultShowTime = (json['defaultShowTime'] as num?)?.toInt() ..useHighQuality = json['useHighQuality'] as bool? ?? true + ..requestedAudioPermission = + json['requestedAudioPermission'] as bool? ?? false ..showFeedbackShortcut = json['showFeedbackShortcut'] as bool? ?? true ..preSelectedEmojies = (json['preSelectedEmojies'] as List?) ?.map((e) => e as String) @@ -84,6 +86,7 @@ Map _$UserDataToJson(UserData instance) => { 'themeMode': _$ThemeModeEnumMap[instance.themeMode]!, 'defaultShowTime': instance.defaultShowTime, 'useHighQuality': instance.useHighQuality, + 'requestedAudioPermission': instance.requestedAudioPermission, 'showFeedbackShortcut': instance.showFeedbackShortcut, 'preSelectedEmojies': instance.preSelectedEmojies, 'autoDownloadOptions': instance.autoDownloadOptions, diff --git a/lib/src/views/camera/camera_preview_controller_view.dart b/lib/src/views/camera/camera_preview_controller_view.dart index 652c613..43eeb01 100644 --- a/lib/src/views/camera/camera_preview_controller_view.dart +++ b/lib/src/views/camera/camera_preview_controller_view.dart @@ -13,6 +13,7 @@ import 'package:twonly/src/database/daos/contacts_dao.dart'; import 'package:twonly/src/database/twonly_database.dart'; import 'package:twonly/src/utils/log.dart'; import 'package:twonly/src/utils/misc.dart'; +import 'package:twonly/src/utils/storage.dart'; import 'package:twonly/src/views/camera/camera_preview_components/permissions_view.dart'; import 'package:twonly/src/views/camera/camera_preview_components/send_to.dart'; import 'package:twonly/src/views/camera/camera_preview_components/video_recording_time.dart'; @@ -171,6 +172,19 @@ class _CameraPreviewViewState extends State { Future initAsync() async { hasAudioPermission = await Permission.microphone.isGranted; + + if (!hasAudioPermission) { + final user = await getUser(); + if (user != null) { + if (!user.requestedAudioPermission) { + await updateUserdata((u) { + u.requestedAudioPermission = true; + return u; + }); + await requestMicrophonePermission(); + } + } + } if (!mounted) return; setState(() {}); }