60 QOhosConsumer<QtOhos::JsState &,
bool> resultConsumer)
62 tryGetBundleAccessTokenIdWithConsumer(
64 [permissionName, resultConsumer = std::move(resultConsumer)](
66 if (bundleAccessTokenId.hasValue()) {
67 checkAppPermissionStatusGrantedWithConsumer(
68 jsState, bundleAccessTokenId.value(), permissionName,
69 std::move(resultConsumer));
72 "Cannot check permission: '%s': cannot get bundle access token id.",
73 permissionName.c_str());
74 resultConsumer(jsState,
false);
81 QOhosConsumer<QtOhos::JsState &,
bool> resultConsumer)
83 return requestAppPermissionFromUser(
84 jsState, jsState.defaultQAbilityPeer(), permissionName,
85 std::move(resultConsumer));
90 const std::string &permissionName,
91 QOhosConsumer<QtOhos::JsState &,
bool> resultConsumer)
93 requestAppPermissionsFromUserWithResult(
94 jsState, abilityPeer, {permissionName},
95 [resultConsumer = std::move(resultConsumer)](
QtOhos::
JsState &jsState, std::vector<QOhosAppPermissions::AppPermissionResult> result) {
96 resultConsumer(jsState, result.size() == 1 && result.front().permissionGranted);
111 const std::vector<std::string> &permissionNames,
112 QOhosConsumer<QtOhos::JsState &, std::vector<AppPermissionResult>> resultConsumer)
114 jsState.eval<QNapi::Promise>(
115 "@ohos.abilityAccessCtrl.createAtManager().requestPermissionsFromUser(*)",
117 abilityPeer->qAbility().eval<QNapi::Object>(
"context"),
120 std::vector<QNapi::ValueWrapper>(permissionNames.begin(), permissionNames.end()))
122 .withContext(std::move(resultConsumer))
124 [permissionNames](
const QtOhos::CallbackInfo &cbInfo,
auto &resultConsumer) {
125 QNapi::Object resultObj = cbInfo.getFirstArg<QNapi::Object>(Q_FUNC_INFO);
127 auto resultPermissionsNames =
128 QNapi::getArrayElements<std::vector<std::string>, QNapi::String>(
129 resultObj.get<QNapi::Array>(
"permissions"));
130 auto resultAuthResults =
131 QNapi::getArrayElements<std::vector<
int>, QNapi::Number>(
132 resultObj.get<QNapi::Array>(
"authResults"));
134 auto dialogShownResultsOrEmpty = QNapi::getOptionalPropOrEmpty<QNapi::Array>(resultObj,
"dialogShownResults");
135 auto dialogShownResultsVector =
136 !dialogShownResultsOrEmpty.IsEmpty()
137 ? QNapi::getArrayElements<std::vector<
bool>, QNapi::Boolean>(dialogShownResultsOrEmpty)
138 : std::vector<
bool>();
140 int permissionGrantedStatus = cbInfo.jsState().eval<QNapi::Number>(
141 "@ohos.abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED");
143 const std::size_t totalPermissions = permissionNames.size();
144 std::vector<AppPermissionResult> appPermissionResults(
146 AppPermissionResult {
147 .permissionGranted =
false,
150 if (resultPermissionsNames.size() == totalPermissions && resultAuthResults.size() == totalPermissions
151 && dialogShownResultsVector.size() == totalPermissions) {
152 for (
const auto &permissionName : permissionNames) {
153 const auto it = std::find(resultPermissionsNames.begin(), resultPermissionsNames.end(), permissionName);
154 if (it != resultPermissionsNames.end()) {
155 const int index = std::distance(resultPermissionsNames.begin(), it);
156 appPermissionResults[index].permissionGranted = (resultAuthResults[index] == permissionGrantedStatus);
157 appPermissionResults[index].dialogShown = dialogShownResultsVector[index];
161 resultConsumer(cbInfo.jsState(), appPermissionResults);
164 [permissionNames](
const QtOhos::CallbackInfo &cbInfo,
auto &resultConsumer) {
165 QtOhos::logJsCallbackError(cbInfo,
"Got error from requestPermissionsFromUser()");
166 const std::size_t totalPermissions = permissionNames.size();
167 std::vector<AppPermissionResult> appPermissionResults(
169 AppPermissionResult {
170 .permissionGranted =
false,
173 resultConsumer(cbInfo.jsState(), appPermissionResults);
187 const std::vector<std::string> &permissionNames,
188 QOhosConsumer<QtOhos::JsState &, std::vector<
bool>> resultConsumer)
190 jsState.eval<QNapi::Promise>(
191 "@ohos.abilityAccessCtrl.createAtManager().requestPermissionOnSetting(*)",
193 abilityPeer->qAbility().eval<QNapi::Object>(
"context"),
196 std::vector<QNapi::ValueWrapper>(permissionNames.begin(), permissionNames.end()))
198 .withContext(std::move(resultConsumer))
200 [permissionNames](
const QtOhos::CallbackInfo &cbInfo,
auto &resultConsumer) {
201 QNapi::Array resultArray = cbInfo.getFirstArg<QNapi::Array>(Q_FUNC_INFO);
203 auto resultAuthResults = QNapi::getArrayElements<std::vector<
int>, QNapi::Number>(resultArray);
205 int permissionGrantedStatus = cbInfo.jsState().eval<QNapi::Number>(
206 "@ohos.abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED");
208 const std::size_t totalPermissions = permissionNames.size();
209 std::vector<
bool> settingsPermissionResults(totalPermissions,
false);
210 if (resultAuthResults.size() == totalPermissions) {
211 for (std::size_t permIndex = 0; permIndex < totalPermissions; permIndex++)
212 settingsPermissionResults[permIndex] = (resultAuthResults[permIndex] == permissionGrantedStatus);
215 resultConsumer(cbInfo.jsState(), settingsPermissionResults);
218 [permissionNames](
const QtOhos::CallbackInfo &cbInfo,
auto &resultConsumer) {
219 QtOhos::logJsCallbackError(cbInfo,
"Got error from requestPermissionOnSetting()");
220 std::vector<
bool> settingsPermissionResults(permissionNames.size(),
false);
221 resultConsumer(cbInfo.jsState(), settingsPermissionResults);