5#include <QtCore/private/qohoscommon_p.h>
9#include <qohosdeviceinfo_p.h>
10#include <qohosjsutils.h>
11#include <qohosplugincore.h>
12#include <qohosutils.h>
26 return QtOhos::evalInJsThreadWithPromise<QOhosOptional<std::string>>(
27 [&](QtOhos::JsState &jsState,
auto evalPromise) {
28 auto defaultQAbility = jsState.defaultQAbilityPeer()->qAbility();
29 if (defaultQAbility.IsEmpty()) {
30 evalPromise(makeEmptyQOhosOptional());
34 auto thenCatchPromises = std::move(evalPromise).makeThenCatchBranches(Q_FUNC_INFO);
35 jsState.evalToPromiseOrRejectOnThrow(
36 "@ohos.settings.getValue(*)",
37 {defaultQAbility.get(
"context"), name, domainName})
38 .onThen([thenPromise = std::move(thenCatchPromises.first)](
const QtOhos::CallbackInfo &cbInfo) {
39 std::string result = cbInfo.getFirstArg<QNapi::String>(Q_FUNC_INFO);
40 thenPromise(makeQOhosOptional(result));
42 .onCatch([catchPromise = std::move(thenCatchPromises.second), name, domainName](
const QtOhos::CallbackInfo &) {
44 "Got error from @ohos.settings.getValue(..., '%s', '%s').",
45 name.c_str(), domainName.c_str());
46 catchPromise(makeEmptyQOhosOptional());
58 auto optStringValue = tryGetDataItemValue(name, domainName);
59 auto optDoubleValue = optStringValue.has_value()
60 ? QtOhos::tryParseStringAsFiniteDouble(optStringValue.value())
63 if (optStringValue.has_value() && !optDoubleValue.has_value()) {
65 "OHOS settings value %s/%s ('%s') is not correct double value, assuming empty setting",
66 name.c_str(), domainName.c_str(), optStringValue.value().c_str());
69 return optDoubleValue;
75 return jsState.eval<QNapi::String>(
"@ohos.settings.domainName.USER_PROPERTY").Utf8Value();
82 return jsState.eval<QNapi::String>(
"@ohos.settings.domainName.USER_PROPERTY");
87 return jsState.defaultQAbilityPeer()->qAbility().eval<QNapi::Object>(
"context");
91 QtOhos::
JsState &jsState,
const QNapi::Object &context,
const std::string &name)
93 return jsState.eval<QNapi::String>(
94 "@ohos.settings.getValueSync(*)",
95 {context, name,
"", settingsUserPropertyDomainName(jsState)});
104 const bool registered = jsState.eval<QNapi::Boolean>(
105 "@ohos.settings.registerKeyObserver(*)",
107 context, name, domainName,
108 [onChanged = std::move(onChanged)](
const QtOhos::CallbackInfo &cbInfo) {
109 onChanged(cbInfo.jsState());
114 "Failed to register observer for settings key '%s' in domain '%s'.",
115 name.c_str(), domainName.c_str());
119 auto contextRefPtr = QtOhos::moveToSharedPtr(QNapi::Reference<>::makePersistentFrom(context));
120 return std::shared_ptr<
void>(
122 [contextRefPtr, name, domainName](
auto) {
125 auto contextRef =
std::move(*contextRefPtr);
126 jsState.eval<QNapi::Value>(
127 "@ohos.settings.unregisterKeyObserver(*)",
128 {contextRef.Value(), name, domainName});
136 if (jsState.defaultQAbilityPeer()->qAbility().IsEmpty())
139 return readSettingValue(jsState, settingsContext(jsState), windowPcModeSwitchStatusPropertyName) ==
"true";
145 return [] {
return true; };
147 return QtOhos::makeDataSource<
bool>(
148 readWindowPcModeEnabled,
149 [](QtOhos::JsState &jsState, QOhosConsumer<
bool> valueChangedConsumer) -> std::shared_ptr<
void> {
157 if (jsState.defaultQAbilityPeer()->qAbility().IsEmpty())
160 return registerSettingsKeyObserver(
161 jsState, settingsContext(jsState), windowPcModeSwitchStatusPropertyName,
162 [valueChangedConsumer = std::move(valueChangedConsumer)](QtOhos::JsState &jsState) {
163 valueChangedConsumer(readWindowPcModeEnabled(jsState));
166 makeQOhosNoOpConsumer(),
179 constexpr double defaultFontSizeScale = 1.0;
180 const auto maybeFontSizeScaleSetting = tryGetDataItemTypedValue<
double>(
181 fontSizeScalePropertyName, getOhosSettingsUserPropertyDomainName());
183 if (!maybeFontSizeScaleSetting.has_value()) {
185 "Cannot obtain '%s' property. Assuming its default fallback mode value %f",
187 return defaultFontSizeScale;
190 return maybeFontSizeScaleSetting.value();
195 return m_windowPcModeEnabled();
bool isWindowPcModeEnabled() const
double fontSizeScale() const
Combined button and popup list for selecting options.
QOhosOptional< std::string > tryGetDataItemValue(const std::string &name, const std::string &domainName)
bool readWindowPcModeEnabled(QtOhos::JsState &jsState)
constexpr const char * windowPcModeSwitchStatusPropertyName
QOhosSupplier< bool > makeWindowPcModeEnabledSupplier()
QOhosOptional< T > tryGetDataItemTypedValue(const std::string &name, const std::string &domainName)
std::shared_ptr< void > registerSettingsKeyObserver(QtOhos::JsState &jsState, QNapi::Object context, const std::string &name, std::function< void(QtOhos::JsState &)> onChanged)
QOhosOptional< double > tryGetDataItemTypedValue(const std::string &name, const std::string &domainName)
constexpr const char * fontSizeScalePropertyName
std::string getOhosSettingsUserPropertyDomainName()
std::string settingsUserPropertyDomainName(QtOhos::JsState &jsState)
QNapi::Object settingsContext(QtOhos::JsState &jsState)
std::string readSettingValue(QtOhos::JsState &jsState, const QNapi::Object &context, const std::string &name)
void runInJsThreadAndWait(const std::function< void(JsState &)> &task, std::string callerContextName={})
std::nullopt_t makeEmptyQOhosOptional()