Skip to content

Commit 8629ed7

Browse files
authored
Clean up the embedder API and refactor (flutter-tizen#83)
* Rename types and functions * Clean up engine APIs * Add FlutterDesktopEngineGetMessenger API * Refactor FlutterTizenEngine a bit * Refactor channels
1 parent ad1fd5b commit 8629ed7

27 files changed

+303
-364
lines changed

shell/platform/tizen/BUILD.gn

+1-1
Original file line numberDiff line numberDiff line change
@@ -94,9 +94,9 @@ template("embedder_for_profile") {
9494
"channels/settings_channel.cc",
9595
"channels/text_input_channel.cc",
9696
"external_texture_gl.cc",
97+
"flutter_tizen_engine.cc",
9798
"flutter_tizen.cc",
9899
"key_event_handler.cc",
99-
"tizen_embedder_engine.cc",
100100
"tizen_event_loop.cc",
101101
"tizen_log.cc",
102102
"tizen_renderer.cc",

shell/platform/tizen/channels/lifecycle_channel.h

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ class LifecycleChannel {
1111
public:
1212
explicit LifecycleChannel(FLUTTER_API_SYMBOL(FlutterEngine) flutter_engine);
1313
virtual ~LifecycleChannel();
14+
1415
void AppIsInactive();
1516
void AppIsResumed();
1617
void AppIsPaused();

shell/platform/tizen/channels/localization_channel.cc

+31-30
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,8 @@ void LocalizationChannel::SendPlatformResolvedLocale() {
7373
return;
7474
}
7575

76-
FlutterLocale* flutterLocale = GetFlutterLocale(locale);
77-
if (!flutterLocale) {
76+
FlutterLocale* flutter_locale = GetFlutterLocale(locale);
77+
if (!flutter_locale) {
7878
FT_LOGE("Language code is required but not present.");
7979
return;
8080
}
@@ -86,14 +86,15 @@ void LocalizationChannel::SendPlatformResolvedLocale() {
8686
document.AddMember("method", "setPlatformResolvedLocale", allocator);
8787

8888
rapidjson::Value language_code, country_code, script_code, variant_code;
89-
language_code.SetString(flutterLocale->language_code, allocator);
89+
language_code.SetString(flutter_locale->language_code, allocator);
9090
country_code.SetString(
91-
flutterLocale->country_code ? flutterLocale->country_code : "",
91+
flutter_locale->country_code ? flutter_locale->country_code : "",
9292
allocator);
9393
script_code.SetString(
94-
flutterLocale->script_code ? flutterLocale->script_code : "", allocator);
94+
flutter_locale->script_code ? flutter_locale->script_code : "",
95+
allocator);
9596
variant_code.SetString(
96-
flutterLocale->variant_code ? flutterLocale->variant_code : "",
97+
flutter_locale->variant_code ? flutter_locale->variant_code : "",
9798
allocator);
9899

99100
rapidjson::Value args(rapidjson::kArrayType);
@@ -118,7 +119,7 @@ void LocalizationChannel::SendPlatformResolvedLocale() {
118119
message.response_handle = nullptr;
119120
FlutterEngineSendPlatformMessage(flutter_engine_, &message);
120121

121-
DestroyFlutterLocale(flutterLocale);
122+
DestroyFlutterLocale(flutter_locale);
122123
}
123124

124125
FlutterLocale* LocalizationChannel::GetFlutterLocale(const char* locale) {
@@ -166,39 +167,39 @@ FlutterLocale* LocalizationChannel::GetFlutterLocale(const char* locale) {
166167
variant[bufSize] = '\0';
167168
}
168169

169-
FlutterLocale* flutterLocale = new FlutterLocale;
170-
flutterLocale->struct_size = sizeof(FlutterLocale);
171-
flutterLocale->language_code = language;
172-
flutterLocale->country_code = country;
173-
flutterLocale->script_code = script;
174-
flutterLocale->variant_code = variant;
170+
FlutterLocale* flutter_locale = new FlutterLocale;
171+
flutter_locale->struct_size = sizeof(FlutterLocale);
172+
flutter_locale->language_code = language;
173+
flutter_locale->country_code = country;
174+
flutter_locale->script_code = script;
175+
flutter_locale->variant_code = variant;
175176

176-
return flutterLocale;
177+
return flutter_locale;
177178
}
178179

179-
void LocalizationChannel::DestroyFlutterLocale(FlutterLocale* flutterLocale) {
180-
if (flutterLocale) {
181-
if (flutterLocale->language_code) {
182-
delete[] flutterLocale->language_code;
183-
flutterLocale->language_code = nullptr;
180+
void LocalizationChannel::DestroyFlutterLocale(FlutterLocale* flutter_locale) {
181+
if (flutter_locale) {
182+
if (flutter_locale->language_code) {
183+
delete[] flutter_locale->language_code;
184+
flutter_locale->language_code = nullptr;
184185
}
185186

186-
if (flutterLocale->country_code) {
187-
delete[] flutterLocale->country_code;
188-
flutterLocale->country_code = nullptr;
187+
if (flutter_locale->country_code) {
188+
delete[] flutter_locale->country_code;
189+
flutter_locale->country_code = nullptr;
189190
}
190191

191-
if (flutterLocale->script_code) {
192-
delete[] flutterLocale->script_code;
193-
flutterLocale->script_code = nullptr;
192+
if (flutter_locale->script_code) {
193+
delete[] flutter_locale->script_code;
194+
flutter_locale->script_code = nullptr;
194195
}
195196

196-
if (flutterLocale->variant_code) {
197-
delete[] flutterLocale->variant_code;
198-
flutterLocale->variant_code = nullptr;
197+
if (flutter_locale->variant_code) {
198+
delete[] flutter_locale->variant_code;
199+
flutter_locale->variant_code = nullptr;
199200
}
200201

201-
delete flutterLocale;
202-
flutterLocale = nullptr;
202+
delete flutter_locale;
203+
flutter_locale = nullptr;
203204
}
204205
}

shell/platform/tizen/channels/localization_channel.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,15 @@ class LocalizationChannel {
1212
explicit LocalizationChannel(FLUTTER_API_SYMBOL(FlutterEngine)
1313
flutter_engine);
1414
virtual ~LocalizationChannel();
15+
1516
void SendLocales();
1617

1718
private:
1819
void SendPlatformResolvedLocale();
1920
FlutterLocale* GetFlutterLocale(const char* locale);
20-
void DestroyFlutterLocale(FlutterLocale* flutterLocale);
21+
void DestroyFlutterLocale(FlutterLocale* flutter_locale);
2122

2223
FLUTTER_API_SYMBOL(FlutterEngine) flutter_engine_;
2324
};
25+
2426
#endif // EMBEDDER_LOCALIZATION_CHANNEL_H_

shell/platform/tizen/channels/platform_channel.cc

+4-6
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,14 @@ static constexpr char kChannelName[] = "flutter/platform";
1616
PlatformChannel::PlatformChannel(flutter::BinaryMessenger* messenger,
1717
TizenRenderer* renderer)
1818
: channel_(std::make_unique<flutter::MethodChannel<rapidjson::Document>>(
19-
messenger, kChannelName, &flutter::JsonMethodCodec::GetInstance())) {
19+
messenger, kChannelName, &flutter::JsonMethodCodec::GetInstance())),
20+
renderer_(renderer) {
2021
channel_->SetMethodCallHandler(
2122
[this](
2223
const flutter::MethodCall<rapidjson::Document>& call,
2324
std::unique_ptr<flutter::MethodResult<rapidjson::Document>> result) {
2425
HandleMethodCall(call, std::move(result));
2526
});
26-
// renderer pointer is managed by TizenEmbedderEngine
27-
// !! can be nullptr in case of service application !!
28-
tizen_renderer_ = renderer;
2927
}
3028

3129
PlatformChannel::~PlatformChannel() {}
@@ -49,7 +47,7 @@ void PlatformChannel::HandleMethodCall(
4947
} else if (method == "Clipboard.hasStrings") {
5048
result->NotImplemented();
5149
} else if (method == "SystemChrome.setPreferredOrientations") {
52-
if (tizen_renderer_) {
50+
if (renderer_) {
5351
static const std::string kPortraitUp = "DeviceOrientation.portraitUp";
5452
static const std::string kPortraitDown = "DeviceOrientation.portraitDown";
5553
static const std::string kLandscapeLeft =
@@ -79,7 +77,7 @@ void PlatformChannel::HandleMethodCall(
7977
FT_LOGD("No rotations passed, using default values");
8078
rotations = {0, 90, 180, 270};
8179
}
82-
tizen_renderer_->SetPreferredOrientations(rotations);
80+
renderer_->SetPreferredOrientations(rotations);
8381
result->Success();
8482
} else {
8583
result->Error("Not supported for service applications");

shell/platform/tizen/channels/platform_channel.h

+6-3
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,15 @@ class PlatformChannel {
1717
virtual ~PlatformChannel();
1818

1919
private:
20-
std::unique_ptr<flutter::MethodChannel<rapidjson::Document>> channel_;
21-
TizenRenderer* tizen_renderer_;
22-
2320
void HandleMethodCall(
2421
const flutter::MethodCall<rapidjson::Document>& call,
2522
std::unique_ptr<flutter::MethodResult<rapidjson::Document>> result);
23+
24+
std::unique_ptr<flutter::MethodChannel<rapidjson::Document>> channel_;
25+
26+
// A reference to the renderer object managed by FlutterTizenEngine.
27+
// This can be nullptr if the engine is running in headless mode.
28+
TizenRenderer* renderer_;
2629
};
2730

2831
#endif // EMBEDDER_PLATFORM_CHANNEL_H_

shell/platform/tizen/channels/platform_view_channel.cc

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
#include "flutter/shell/platform/common/cpp/client_wrapper/include/flutter/standard_method_codec.h"
99
#include "flutter/shell/platform/common/cpp/json_method_codec.h"
1010
#include "flutter/shell/platform/tizen/channels/text_input_channel.h"
11+
#include "flutter/shell/platform/tizen/flutter_tizen_engine.h"
1112
#include "flutter/shell/platform/tizen/public/flutter_platform_view.h"
12-
#include "flutter/shell/platform/tizen/tizen_embedder_engine.h"
1313
#include "flutter/shell/platform/tizen/tizen_log.h"
1414

1515
static constexpr char kChannelName[] = "flutter/platform_views";
@@ -68,7 +68,7 @@ flutter::EncodableList ExtractListFromMap(
6868
}
6969

7070
PlatformViewChannel::PlatformViewChannel(flutter::BinaryMessenger* messenger,
71-
TizenEmbedderEngine* engine)
71+
FlutterTizenEngine* engine)
7272
: engine_(engine),
7373
channel_(
7474
std::make_unique<flutter::MethodChannel<flutter::EncodableValue>>(

shell/platform/tizen/channels/platform_view_channel.h

+9-7
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,17 @@
1313
#include "flutter/shell/platform/common/cpp/client_wrapper/include/flutter/method_channel.h"
1414
#include "rapidjson/document.h"
1515

16-
class TizenEmbedderEngine;
16+
class FlutterTizenEngine;
1717
class PlatformView;
1818
class PlatformViewFactory;
1919
class PlatformViewChannel {
2020
public:
2121
explicit PlatformViewChannel(flutter::BinaryMessenger* messenger,
22-
TizenEmbedderEngine* engine);
22+
FlutterTizenEngine* engine);
2323
virtual ~PlatformViewChannel();
24+
2425
void Dispose();
26+
2527
std::map<std::string, std::unique_ptr<PlatformViewFactory>>& ViewFactories() {
2628
return view_factories_;
2729
}
@@ -34,14 +36,14 @@ class PlatformViewChannel {
3436
void DispatchCompositionEndEvent(const std::string& key);
3537

3638
private:
37-
TizenEmbedderEngine* engine_;
38-
std::unique_ptr<flutter::MethodChannel<flutter::EncodableValue>> channel_;
39-
std::map<std::string, std::unique_ptr<PlatformViewFactory>> view_factories_;
40-
std::map<int, PlatformView*> view_instances_;
41-
4239
void HandleMethodCall(
4340
const flutter::MethodCall<flutter::EncodableValue>& call,
4441
std::unique_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
42+
43+
FlutterTizenEngine* engine_;
44+
std::unique_ptr<flutter::MethodChannel<flutter::EncodableValue>> channel_;
45+
std::map<std::string, std::unique_ptr<PlatformViewFactory>> view_factories_;
46+
std::map<int, PlatformView*> view_instances_;
4547
};
4648

4749
#endif // EMBEDDER_PLATFORM_VIEW_CHANNEL_H_

shell/platform/tizen/channels/settings_channel.cc

+10-11
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@
44

55
#include "settings_channel.h"
66

7-
static constexpr char CHANNEL_NAME[] = "flutter/settings";
8-
static constexpr char TEXT_SCALE_FACTOR[] = "textScaleFactor";
9-
static constexpr char ALWAYS_USE_24_HOUR_FORMAT[] = "alwaysUse24HourFormat";
10-
static constexpr char PLATFORM_BRIGHTNESS[] = "platformBrightness";
7+
static constexpr char kChannelName[] = "flutter/settings";
8+
static constexpr char kTextScaleFactorKey[] = "textScaleFactor";
9+
static constexpr char kAlwaysUse24HourFormatKey[] = "alwaysUse24HourFormat";
10+
static constexpr char kPlatformBrightnessKey[] = "platformBrightness";
1111

1212
SettingsChannel::SettingsChannel(flutter::BinaryMessenger* messenger)
1313
: channel_(
1414
std::make_unique<flutter::BasicMessageChannel<rapidjson::Document>>(
15-
messenger, CHANNEL_NAME,
15+
messenger, kChannelName,
1616
&flutter::JsonMessageCodec::GetInstance())) {
1717
system_settings_set_changed_cb(SYSTEM_SETTINGS_KEY_LOCALE_TIMEFORMAT_24HOUR,
1818
OnSettingsChangedCallback, this);
@@ -31,16 +31,15 @@ void SettingsChannel::SendSettingsEvent() {
3131
int ret = system_settings_get_value_bool(
3232
SYSTEM_SETTINGS_KEY_LOCALE_TIMEFORMAT_24HOUR, &value);
3333
if (ret == SYSTEM_SETTINGS_ERROR_NONE) {
34-
event.AddMember(TEXT_SCALE_FACTOR, 1.0, allocator);
35-
event.AddMember(PLATFORM_BRIGHTNESS, "light", allocator);
36-
event.AddMember(ALWAYS_USE_24_HOUR_FORMAT, value, allocator);
34+
event.AddMember(kTextScaleFactorKey, 1.0, allocator);
35+
event.AddMember(kPlatformBrightnessKey, "light", allocator);
36+
event.AddMember(kAlwaysUse24HourFormatKey, value, allocator);
3737
channel_->Send(event);
3838
}
3939
}
4040

4141
void SettingsChannel::OnSettingsChangedCallback(system_settings_key_e key,
4242
void* user_data) {
43-
SettingsChannel* settingsChannel =
44-
reinterpret_cast<SettingsChannel*>(user_data);
45-
settingsChannel->SendSettingsEvent();
43+
auto settings_channel = reinterpret_cast<SettingsChannel*>(user_data);
44+
settings_channel->SendSettingsEvent();
4645
}

shell/platform/tizen/channels/settings_channel.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,11 @@ class SettingsChannel {
1818
virtual ~SettingsChannel();
1919

2020
private:
21-
std::unique_ptr<flutter::BasicMessageChannel<rapidjson::Document>> channel_;
2221
static void OnSettingsChangedCallback(system_settings_key_e key,
2322
void* user_data);
2423
void SendSettingsEvent();
24+
25+
std::unique_ptr<flutter::BasicMessageChannel<rapidjson::Document>> channel_;
2526
};
2627

2728
#endif // EMBEDDER_SETTINGS_CHANNEL_H_

shell/platform/tizen/channels/text_input_channel.cc

+3-3
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
#include <Ecore.h>
88
#include <Ecore_IMF_Evas.h>
99

10-
#include "flutter/shell/platform/tizen/tizen_embedder_engine.h"
10+
#include "flutter/shell/platform/tizen/flutter_tizen_engine.h"
1111
#include "flutter/shell/platform/tizen/tizen_log.h"
1212

1313
static constexpr char kSetEditingStateMethod[] = "TextInput.setEditingState";
@@ -203,7 +203,7 @@ Ecore_IMF_Keyboard_Locks EcoreInputModifierToEcoreIMFLock(
203203
}
204204

205205
TextInputChannel::TextInputChannel(flutter::BinaryMessenger* messenger,
206-
TizenEmbedderEngine* engine)
206+
FlutterTizenEngine* engine)
207207
: channel_(std::make_unique<flutter::MethodChannel<rapidjson::Document>>(
208208
messenger, kChannelName, &flutter::JsonMethodCodec::GetInstance())),
209209
engine_(engine) {
@@ -223,7 +223,7 @@ TextInputChannel::TextInputChannel(flutter::BinaryMessenger* messenger,
223223
}
224224
if (imf_context_) {
225225
ecore_imf_context_client_window_set(
226-
imf_context_, (void*)engine_->tizen_renderer->GetWindowId());
226+
imf_context_, (void*)engine_->renderer->GetWindowId());
227227
RegisterIMFCallback();
228228
} else {
229229
FT_LOGE("Failed to create imfContext");

shell/platform/tizen/channels/text_input_channel.h

+6-3
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,19 @@
1616
#include "flutter/shell/platform/common/cpp/json_method_codec.h"
1717
#include "flutter/shell/platform/common/cpp/text_input_model.h"
1818

19-
class TizenEmbedderEngine;
19+
class FlutterTizenEngine;
2020
class TextInputChannel {
2121
public:
2222
struct SoftwareKeyboardGeometry {
2323
int32_t x = 0, y = 0, w = 0, h = 0;
2424
};
25+
2526
enum EditStatus { kNone, kPreeditStart, kPreeditEnd, kCommit };
27+
2628
explicit TextInputChannel(flutter::BinaryMessenger* messenger,
27-
TizenEmbedderEngine* engine);
29+
FlutterTizenEngine* engine);
2830
virtual ~TextInputChannel();
31+
2932
void OnKeyDown(Ecore_Event_Key* key);
3033
void OnCommit(std::string str);
3134
void OnPreedit(std::string str, int cursor_pos);
@@ -91,7 +94,7 @@ class TextInputChannel {
9194
int preedit_end_pos_{0};
9295
int preedit_start_pos_{0};
9396
std::string last_handled_ecore_event_keyname_;
94-
TizenEmbedderEngine* engine_{nullptr};
97+
FlutterTizenEngine* engine_{nullptr};
9598
Ecore_IMF_Context* imf_context_{nullptr};
9699
};
97100

0 commit comments

Comments
 (0)