@@ -105,13 +105,31 @@ class AudioplayersTizenPlugin : public flutter::Plugin {
105105 registrar->messenger (), " xyz.luan/audioplayers" ,
106106 &flutter::StandardMethodCodec::GetInstance ());
107107
108+ auto global_method_channel = std::make_unique<FlMethodChannel>(
109+ registrar->messenger (), " xyz.luan/audioplayers.global" ,
110+ &flutter::StandardMethodCodec::GetInstance ());
111+
112+ auto global_event_channel = std::make_unique<FlEventChannel>(
113+ registrar->messenger (), " xyz.luan/audioplayers.global/events" ,
114+ &flutter::StandardMethodCodec::GetInstance ());
115+
108116 auto plugin = std::make_unique<AudioplayersTizenPlugin>(registrar);
109117
110118 channel->SetMethodCallHandler (
111119 [plugin_pointer = plugin.get ()](const auto &call, auto result) {
112120 plugin_pointer->HandleMethodCall (call, std::move (result));
113121 });
114- plugin->channel_ = std::move (channel);
122+ global_method_channel->SetMethodCallHandler (
123+ [plugin_pointer = plugin.get ()](const auto &call, auto result) {
124+ plugin_pointer->HandleGlobalMethodCall (call, std::move (result));
125+ });
126+
127+ global_event_channel->SetStreamHandler (
128+ std::make_unique<AudioPlayerStreamHandler>(
129+ [plugin_pointer =
130+ plugin.get ()](std::unique_ptr<FlEventSink> event_sink) {
131+ plugin_pointer->global_event_sinks_ = std::move (event_sink);
132+ }));
115133
116134 registrar->AddPlugin (std::move (plugin));
117135 }
@@ -222,6 +240,52 @@ class AudioplayersTizenPlugin : public flutter::Plugin {
222240 }
223241 }
224242
243+ void HandleGlobalMethodCall (const FlMethodCall &method_call,
244+ std::unique_ptr<FlMethodResult> result) {
245+ const auto *arguments =
246+ std::get_if<flutter::EncodableMap>(method_call.arguments ());
247+ try {
248+ const std::string &method_name = method_call.method_name ();
249+ if (method_name == " init" ) {
250+ for (auto &pair : audio_players_) {
251+ DisposeAudioPlayer (pair.first );
252+ }
253+ audio_players_.clear ();
254+ } else if (method_name == " setAudioContext" ) {
255+ const std::string message =
256+ " Setting AudioContext is not supported on Tizen" ;
257+ flutter::EncodableMap map = {{flutter::EncodableValue (" event" ),
258+ flutter::EncodableValue (" audio.onLog" )},
259+ {flutter::EncodableValue (" value" ),
260+ flutter::EncodableValue (message)}};
261+ global_event_sinks_->Success (flutter::EncodableValue (map));
262+ } else if (method_name == " emitLog" ) {
263+ if (arguments) {
264+ auto message = GetRequiredArg<std::string>(arguments, " message" );
265+ flutter::EncodableMap map = {{flutter::EncodableValue (" event" ),
266+ flutter::EncodableValue (" audio.onLog" )},
267+ {flutter::EncodableValue (" value" ),
268+ flutter::EncodableValue (message)}};
269+ global_event_sinks_->Success (flutter::EncodableValue (map));
270+ }
271+ } else if (method_name == " emitError" ) {
272+ if (arguments) {
273+ auto code = GetRequiredArg<std::string>(arguments, " code" );
274+ auto message = GetRequiredArg<std::string>(arguments, " message" );
275+ global_event_sinks_->Error (code, message, flutter::EncodableValue ());
276+ }
277+ } else {
278+ result->NotImplemented ();
279+ return ;
280+ }
281+ result->Success ();
282+ } catch (const std::invalid_argument &error) {
283+ result->Error (kInvalidArgument , error.what ());
284+ } catch (const AudioPlayerError &error) {
285+ result->Error (error.code (), error.message ());
286+ }
287+ }
288+
225289 AudioPlayer *GetAudioPlayer (const std::string &player_id) {
226290 auto iter = audio_players_.find (player_id);
227291 if (iter != audio_players_.end ()) {
@@ -295,10 +359,9 @@ class AudioplayersTizenPlugin : public flutter::Plugin {
295359 event_sinks_.erase (player_id);
296360 }
297361
298- std::unique_ptr<FlMethodChannel> channel_;
299-
300362 std::map<std::string, std::unique_ptr<AudioPlayer>> audio_players_;
301363 std::map<std::string, std::unique_ptr<FlEventSink>> event_sinks_;
364+ std::unique_ptr<FlEventSink> global_event_sinks_;
302365
303366 flutter::PluginRegistrar *registrar_;
304367};
0 commit comments