From 50b435b7e9619bd81cd2ef09d1968f0565dd0bae Mon Sep 17 00:00:00 2001 From: ggurdin <46800240+ggurdin@users.noreply.github.com> Date: Fri, 13 Dec 2024 10:08:39 -0500 Subject: [PATCH] added clicking sounds on button click (#1236) --- assets/sounds/click.ogg | Bin 0 -> 8577 bytes lib/pages/chat/events/message.dart | 3 + lib/pages/chat/events/message_content.dart | 6 ++ .../controllers/choreographer.dart | 3 + lib/pangea/utils/play_click_sound.dart | 20 ++++++ .../widgets/chat/message_toolbar_buttons.dart | 2 + lib/pangea/widgets/pressable_button.dart | 6 +- linux/flutter/generated_plugin_registrant.cc | 4 ++ linux/flutter/generated_plugins.cmake | 1 + macos/Flutter/GeneratedPluginRegistrant.swift | 2 + pubspec.lock | 60 +++++++++++++++++- pubspec.yaml | 3 +- .../flutter/generated_plugin_registrant.cc | 3 + windows/flutter/generated_plugins.cmake | 1 + 14 files changed, 110 insertions(+), 4 deletions(-) create mode 100644 assets/sounds/click.ogg create mode 100644 lib/pangea/utils/play_click_sound.dart diff --git a/assets/sounds/click.ogg b/assets/sounds/click.ogg new file mode 100644 index 0000000000000000000000000000000000000000..225eeb7ea78528a9608485a1214eaa9373597966 GIT binary patch literal 8577 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 PZ}YtCP play() async { + await _player.stop(); + _player.play(AssetSource('sounds/click.ogg')); + } + + void dispose() { + _player.dispose(); + } +} diff --git a/lib/pangea/widgets/chat/message_toolbar_buttons.dart b/lib/pangea/widgets/chat/message_toolbar_buttons.dart index bfa3ab746..71a20189f 100644 --- a/lib/pangea/widgets/chat/message_toolbar_buttons.dart +++ b/lib/pangea/widgets/chat/message_toolbar_buttons.dart @@ -109,6 +109,8 @@ class ToolbarButtons extends StatelessWidget { onPressed: enabled ? () => overlayController.updateToolbarMode(mode) : null, + clickPlayer: overlayController + .widget.chatController.choreographer.clickPlayer, child: AnimatedContainer( duration: FluffyThemes.animationDuration, height: buttonSize, diff --git a/lib/pangea/widgets/pressable_button.dart b/lib/pangea/widgets/pressable_button.dart index ae84bc486..bb06fdce6 100644 --- a/lib/pangea/widgets/pressable_button.dart +++ b/lib/pangea/widgets/pressable_button.dart @@ -1,5 +1,6 @@ import 'dart:async'; +import 'package:fluffychat/pangea/utils/play_click_sound.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -13,6 +14,7 @@ class PressableButton extends StatefulWidget { final void Function()? onPressed; final Stream? triggerAnimation; + final ClickPlayer? clickPlayer; const PressableButton({ required this.borderRadius, @@ -22,6 +24,7 @@ class PressableButton extends StatefulWidget { this.buttonHeight = 5, this.depressed = false, this.triggerAnimation, + this.clickPlayer, super.key, }); @@ -79,10 +82,11 @@ class PressableButtonState extends State if (_animationCompleter != null) { await _animationCompleter!.future; } - if (mounted) _controller.reverse(); + widget.clickPlayer?.play(); if (!kIsWeb) { HapticFeedback.mediumImpact(); } + if (mounted) _controller.reverse(); } void _onTapCancel() { diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc index 99fe9d9d6..8a1e26c05 100644 --- a/linux/flutter/generated_plugin_registrant.cc +++ b/linux/flutter/generated_plugin_registrant.cc @@ -6,6 +6,7 @@ #include "generated_plugin_registrant.h" +#include #include #include #include @@ -20,6 +21,9 @@ #include void fl_register_plugins(FlPluginRegistry* registry) { + g_autoptr(FlPluginRegistrar) audioplayers_linux_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "AudioplayersLinuxPlugin"); + audioplayers_linux_plugin_register_with_registrar(audioplayers_linux_registrar); g_autoptr(FlPluginRegistrar) dynamic_color_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "DynamicColorPlugin"); dynamic_color_plugin_register_with_registrar(dynamic_color_registrar); diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake index de98e488d..7c2b2bd52 100644 --- a/linux/flutter/generated_plugins.cmake +++ b/linux/flutter/generated_plugins.cmake @@ -3,6 +3,7 @@ # list(APPEND FLUTTER_PLUGIN_LIST + audioplayers_linux dynamic_color emoji_picker_flutter file_selector_linux diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index 94d578564..011b37ee1 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -7,6 +7,7 @@ import Foundation import appkit_ui_element_colors import audio_session +import audioplayers_darwin import device_info_plus import dynamic_color import emoji_picker_flutter @@ -46,6 +47,7 @@ import window_to_front func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { AppkitUiElementColorsPlugin.register(with: registry.registrar(forPlugin: "AppkitUiElementColorsPlugin")) AudioSessionPlugin.register(with: registry.registrar(forPlugin: "AudioSessionPlugin")) + AudioplayersDarwinPlugin.register(with: registry.registrar(forPlugin: "AudioplayersDarwinPlugin")) DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin")) DynamicColorPlugin.register(with: registry.registrar(forPlugin: "DynamicColorPlugin")) EmojiPickerFlutterPlugin.register(with: registry.registrar(forPlugin: "EmojiPickerFlutterPlugin")) diff --git a/pubspec.lock b/pubspec.lock index 31d245fd7..a1ea075e7 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -97,6 +97,62 @@ packages: url: "https://pub.dev" source: hosted version: "0.1.20" + audioplayers: + dependency: "direct main" + description: + name: audioplayers + sha256: c346ba5a39dc208f1bab55fc239855f573d69b0e832402114bf0b793622adc4d + url: "https://pub.dev" + source: hosted + version: "6.1.0" + audioplayers_android: + dependency: transitive + description: + name: audioplayers_android + sha256: de576b890befe27175c2f511ba8b742bec83765fa97c3ce4282bba46212f58e4 + url: "https://pub.dev" + source: hosted + version: "5.0.0" + audioplayers_darwin: + dependency: transitive + description: + name: audioplayers_darwin + sha256: e507887f3ff18d8e5a10a668d7bedc28206b12e10b98347797257c6ae1019c3b + url: "https://pub.dev" + source: hosted + version: "6.0.0" + audioplayers_linux: + dependency: transitive + description: + name: audioplayers_linux + sha256: "3d3d244c90436115417f170426ce768856d8fe4dfc5ed66a049d2890acfa82f9" + url: "https://pub.dev" + source: hosted + version: "4.0.0" + audioplayers_platform_interface: + dependency: transitive + description: + name: audioplayers_platform_interface + sha256: "6834dd48dfb7bc6c2404998ebdd161f79cd3774a7e6779e1348d54a3bfdcfaa5" + url: "https://pub.dev" + source: hosted + version: "7.0.0" + audioplayers_web: + dependency: transitive + description: + name: audioplayers_web + sha256: "3609bdf0e05e66a3d9750ee40b1e37f2a622c4edb796cc600b53a90a30a2ace4" + url: "https://pub.dev" + source: hosted + version: "5.0.1" + audioplayers_windows: + dependency: transitive + description: + name: audioplayers_windows + sha256: "8605762dddba992138d476f6a0c3afd9df30ac5b96039929063eceed416795c2" + url: "https://pub.dev" + source: hosted + version: "4.0.0" badges: dependency: "direct main" description: @@ -412,10 +468,10 @@ packages: dependency: transitive description: name: ffi - sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21" + sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6" url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.3" file: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 5a7cf83f7..2e05bd747 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -6,7 +6,7 @@ description: Learn a language while texting your friends. # Pangea# publish_to: none # On version bump also increase the build number for F-Droid -version: 1.23.17+3576 +version: 1.23.18+1 environment: sdk: ">=3.0.0 <4.0.0" @@ -111,6 +111,7 @@ dependencies: webrtc_interface: ^1.0.13 # #Pangea android_intent_plus: ^5.2.0 + audioplayers: ^6.1.0 country_picker: ^2.0.25 csv: ^6.0.0 dropdown_button2: ^2.3.9 diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc index cb606b32d..bd80c81e1 100644 --- a/windows/flutter/generated_plugin_registrant.cc +++ b/windows/flutter/generated_plugin_registrant.cc @@ -6,6 +6,7 @@ #include "generated_plugin_registrant.h" +#include #include #include #include @@ -25,6 +26,8 @@ #include void RegisterPlugins(flutter::PluginRegistry* registry) { + AudioplayersWindowsPluginRegisterWithRegistrar( + registry->GetRegistrarForPlugin("AudioplayersWindowsPlugin")); DynamicColorPluginCApiRegisterWithRegistrar( registry->GetRegistrarForPlugin("DynamicColorPluginCApi")); EmojiPickerFlutterPluginCApiRegisterWithRegistrar( diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index 981947647..095209a76 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -3,6 +3,7 @@ # list(APPEND FLUTTER_PLUGIN_LIST + audioplayers_windows dynamic_color emoji_picker_flutter file_selector_windows