61 QOhosConsumer<QtOhos::JsState &,
bool> resultConsumer)
63 tryGetBundleAccessTokenIdWithConsumer(
65 [permissionName, resultConsumer = std::move(resultConsumer)](
67 if (bundleAccessTokenId.has_value()) {
68 checkAppPermissionStatusGrantedWithConsumer(
69 jsState, bundleAccessTokenId.value(), permissionName,
70 std::move(resultConsumer));
73 "Cannot check permission: '%s': cannot get bundle access token id.",
74 permissionName.c_str());
75 resultConsumer(jsState,
false);
82 QOhosConsumer<QtOhos::JsState &,
bool> resultConsumer)
84 auto optQAbility = jsState.defaultQAbility();
87 "Cannot request permission: '%s': no default QAbility.", permissionName.c_str());
88 resultConsumer(jsState,
false);
92 requestAppPermissionFromUser(
93 jsState, optQAbility.value(), permissionName,
std::move(resultConsumer));
97 QtOhos::
JsState &jsState, QNapi::Object qAbility,
const std::string &permissionName,
98 QOhosConsumer<QtOhos::JsState &,
bool> resultConsumer)
100 requestAppPermissionsFromUserWithResult(
101 jsState, qAbility, {permissionName},
102 [resultConsumer = std::move(resultConsumer)](
QtOhos::
JsState &jsState, std::vector<QOhosAppPermissions::AppPermissionResult> result) {
103 resultConsumer(jsState, result.size() == 1 && result.front().permissionGranted);
108 QtOhos::
JsState &jsState,
const std::vector<std::string> &permissionNames,
109 QOhosConsumer<QtOhos::JsState &, std::vector<AppPermissionResult>> resultConsumer)
111 auto optQAbility = jsState.defaultQAbility();
113 qOhosPrintfError(
"Cannot request permissions from user: no default QAbility.");
116 std::vector<AppPermissionResult>(
117 permissionNames.size(),
118 AppPermissionResult {
119 .permissionGranted =
false,
125 requestAppPermissionsFromUserWithResult(
126 jsState, optQAbility.value(), permissionNames,
std::move(resultConsumer));
131 const std::vector<std::string> &permissionNames,
132 QOhosConsumer<QtOhos::JsState &, std::vector<AppPermissionResult>> resultConsumer)
134 jsState.evalToPromiseOrRejectOnThrow(
135 "@ohos.abilityAccessCtrl.createAtManager().requestPermissionsFromUser(*)",
137 qAbility.eval<QNapi::Object>(
"context"),
140 std::vector<QNapi::ValueWrapper>(permissionNames.begin(), permissionNames.end()))
142 .withContext(
std::move(resultConsumer))
145 QNapi::Object resultObj = cbInfo.getFirstArg<QNapi::Object>(Q_FUNC_INFO);
147 auto resultPermissionsNames =
148 QNapi::getArrayElements<std::vector<std::string>, QNapi::String>(
149 resultObj.get<QNapi::Array>(
"permissions"));
150 auto resultAuthResults =
151 QNapi::getArrayElements<std::vector<
int>, QNapi::Number>(
152 resultObj.get<QNapi::Array>(
"authResults"));
154 auto dialogShownResultsOrEmpty = QNapi::getOptionalPropOrEmpty<QNapi::Array>(resultObj,
"dialogShownResults");
155 auto dialogShownResultsVector =
156 !dialogShownResultsOrEmpty.IsEmpty()
157 ? QNapi::getArrayElements<std::vector<
bool>, QNapi::Boolean>(dialogShownResultsOrEmpty)
158 : std::vector<
bool>();
160 int permissionGrantedStatus = cbInfo.jsState().eval<QNapi::Number>(
161 "@ohos.abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED");
163 const std::size_t totalPermissions = permissionNames.size();
164 std::vector<AppPermissionResult> appPermissionResults(
166 AppPermissionResult {
167 .permissionGranted =
false,
170 if (resultPermissionsNames.size() == totalPermissions && resultAuthResults.size() == totalPermissions
171 && dialogShownResultsVector.size() == totalPermissions) {
172 for (
const auto &permissionName : permissionNames) {
173 const auto it = std::find(resultPermissionsNames.begin(), resultPermissionsNames.end(), permissionName);
174 if (it != resultPermissionsNames.end()) {
175 const int index = std::distance(resultPermissionsNames.begin(), it);
176 appPermissionResults[index].permissionGranted = (resultAuthResults[index] == permissionGrantedStatus);
177 appPermissionResults[index].dialogShown = dialogShownResultsVector[index];
181 resultConsumer(cbInfo
.jsState(), appPermissionResults);
185 QtOhos::logJsCallbackError(cbInfo,
"Got error from requestPermissionsFromUser()");
186 const std::size_t totalPermissions = permissionNames.size();
187 std::vector<AppPermissionResult> appPermissionResults(
189 AppPermissionResult {
190 .permissionGranted =
false,
193 resultConsumer(cbInfo
.jsState(), appPermissionResults);
198 QtOhos::
JsState &jsState,
const std::vector<std::string> &permissionNames,
199 QOhosConsumer<QtOhos::JsState &, std::vector<
bool>> resultConsumer)
201 auto optQAbility = jsState.defaultQAbility();
203 qOhosPrintfError(
"Cannot request permissions on setting: no default QAbility.");
204 resultConsumer(jsState, std::vector<
bool>(permissionNames.size(),
false));
208 requestAppPermissionsOnSetting(
209 jsState, optQAbility.value(), permissionNames,
std::move(resultConsumer));
214 const std::vector<std::string> &permissionNames,
215 QOhosConsumer<QtOhos::JsState &, std::vector<
bool>> resultConsumer)
217 jsState.evalToPromiseOrRejectOnThrow(
218 "@ohos.abilityAccessCtrl.createAtManager().requestPermissionOnSetting(*)",
220 qAbility.eval<QNapi::Object>(
"context"),
223 std::vector<QNapi::ValueWrapper>(permissionNames.begin(), permissionNames.end()))
225 .withContext(
std::move(resultConsumer))
228 QNapi::Array resultArray = cbInfo.getFirstArg<QNapi::Array>(Q_FUNC_INFO);
230 auto resultAuthResults = QNapi::getArrayElements<std::vector<
int>, QNapi::Number>(resultArray);
232 int permissionGrantedStatus = cbInfo.jsState().eval<QNapi::Number>(
233 "@ohos.abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED");
235 const std::size_t totalPermissions = permissionNames.size();
236 std::vector<
bool> settingsPermissionResults(totalPermissions,
false);
237 if (resultAuthResults.size() == totalPermissions) {
238 for (
std::size_t permIndex = 0; permIndex < totalPermissions; permIndex++)
239 settingsPermissionResults[permIndex] = (resultAuthResults[permIndex] == permissionGrantedStatus);
242 resultConsumer(cbInfo
.jsState(), settingsPermissionResults);
246 QtOhos::logJsCallbackError(cbInfo,
"Got error from requestPermissionOnSetting()");
247 std::vector<
bool> settingsPermissionResults(permissionNames.size(),
false);
248 resultConsumer(cbInfo
.jsState(), settingsPermissionResults);