5#include <QtCore/private/qohoscommon_p.h>
10#include <qohosdeviceinfo_p.h>
11#include <qohosjsutils.h>
12#include <qohosplugincore.h>
13#include <qohosutils.h>
25 return QtOhos::evalInJsThreadWithPromise<
std::optional<
std::string>>(
27 auto optDefaultQAbility = jsState.defaultQAbility();
28 if (!optDefaultQAbility) {
33 auto thenCatchPromises =
std::move(evalPromise).makeThenCatchBranches(Q_FUNC_INFO);
34 jsState.evalToPromiseOrRejectOnThrow(
35 "@ohos.settings.getValue(*)",
36 {optDefaultQAbility->get(
"context"), name, domainName})
37 .onThen([thenPromise = std::move(thenCatchPromises.first)](
const QtOhos::
CallbackInfo &cbInfo) {
38 std::string result = cbInfo.getFirstArg<QNapi::String>(Q_FUNC_INFO);
41 .onCatch([catchPromise = std::move(thenCatchPromises.second), name, domainName](
const QtOhos::
CallbackInfo &) {
43 "Got error from @ohos.settings.getValue(..., '%s', '%s').",
44 name.c_str(), domainName.c_str());
57 auto optStringValue = tryGetDataItemValue(name, domainName);
58 auto optDoubleValue = optStringValue.has_value()
62 if (optStringValue.has_value() && !optDoubleValue.has_value()) {
64 "OHOS settings value %s/%s ('%s') is not correct double value, assuming empty setting",
65 name.c_str(), domainName.c_str(), optStringValue.value().c_str());
68 return optDoubleValue;
74 return jsState.eval<QNapi::String>(
"@ohos.settings.domainName.USER_PROPERTY").Utf8Value();
81 return jsState.eval<QNapi::String>(
"@ohos.settings.domainName.USER_PROPERTY");
86 auto optQAbility = jsState.defaultQAbility();
88 ? std::optional(optQAbility->eval<QNapi::Object>(
"context"))
93 QtOhos::
JsState &jsState,
const QNapi::Object &context,
const std::string &name)
95 return jsState.eval<QNapi::String>(
96 "@ohos.settings.getValueSync(*)",
97 {context, name,
"", settingsUserPropertyDomainName(jsState)});
106 const bool registered = jsState.eval<QNapi::Boolean>(
107 "@ohos.settings.registerKeyObserver(*)",
109 context, name, domainName,
110 [onChanged = std::move(onChanged)](
const QtOhos::CallbackInfo &cbInfo) {
111 onChanged(cbInfo.jsState());
116 "Failed to register observer for settings key '%s' in domain '%s'.",
117 name.c_str(), domainName.c_str());
121 auto contextRefPtr = QtOhos::moveToSharedPtr(QNapi::Reference<>::makePersistentFrom(context));
122 return std::shared_ptr<
void>(
124 [contextRefPtr, name, domainName](
auto) {
127 auto contextRef =
std::move(*contextRefPtr);
128 jsState.eval<QNapi::Value>(
129 "@ohos.settings.unregisterKeyObserver(*)",
130 {contextRef.Value(), name, domainName});
138 auto optContext = settingsContext(jsState);
142 return readSettingValue(jsState, optContext.value(), windowPcModeSwitchStatusPropertyName) ==
"true";
148 return [] {
return true; };
150 return QtOhos::makeDataSource<
bool>(
152 [](
QtOhos::
JsState &jsState, QOhosConsumer<
bool> valueChangedConsumer) ->
std::shared_ptr<
void> {
160 auto optContext = settingsContext(jsState);
164 return registerSettingsKeyObserver(
165 jsState, optContext.value(), windowPcModeSwitchStatusPropertyName,
166 [valueChangedConsumer = std::move(valueChangedConsumer)](QtOhos::JsState &jsState) {
167 valueChangedConsumer(readWindowPcModeEnabled(jsState));
170 makeQOhosNoOpConsumer(),
171 QtOhos::invokeInQtThread,
178 return QOhosDeviceInfo::is2in1()
179 || QtOhos::evalInJsThread(readWindowPcModeEnabled, Q_FUNC_INFO);
193 return QtOhos::makeDestroyNotifier(
194 [
this, previousSupplier = std::exchange(m_windowPcModeEnabled, makeWindowPcModeEnabledSupplier())]()
mutable {
195 m_windowPcModeEnabled = std::move(previousSupplier);
200 : m_windowPcModeEnabled(makeUncachedWindowPcModeEnabledSupplier())
206 constexpr double defaultFontSizeScale = 1.0;
207 const auto maybeFontSizeScaleSetting = tryGetDataItemTypedValue<
double>(
210 if (!maybeFontSizeScaleSetting.has_value()) {
212 "Cannot obtain '%s' property. Assuming its default fallback mode value %f",
214 return defaultFontSizeScale;
217 return maybeFontSizeScaleSetting.value();
222 return m_windowPcModeEnabled();
bool isWindowPcModeEnabled() const
static QOhosSettings & instance()
double fontSizeScale() const
Combined button and popup list for selecting options.
bool readWindowPcModeEnabled(QtOhos::JsState &jsState)
std::optional< std::string > tryGetDataItemValue(const std::string &name, const std::string &domainName)
constexpr const char * windowPcModeSwitchStatusPropertyName
QOhosSupplier< bool > makeWindowPcModeEnabledSupplier()
std::shared_ptr< void > registerSettingsKeyObserver(QtOhos::JsState &jsState, QNapi::Object context, const std::string &name, std::function< void(QtOhos::JsState &)> onChanged)
std::optional< QNapi::Object > settingsContext(QtOhos::JsState &jsState)
constexpr const char * fontSizeScalePropertyName
std::string getOhosSettingsUserPropertyDomainName()
std::optional< double > tryGetDataItemTypedValue(const std::string &name, const std::string &domainName)
std::optional< T > tryGetDataItemTypedValue(const std::string &name, const std::string &domainName)
QOhosSupplier< bool > makeUncachedWindowPcModeEnabledSupplier()
std::string settingsUserPropertyDomainName(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::optional< double > tryParseStringAsFiniteDouble(const std::string &inputString)