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 return requestAppPermissionFromUser(
85 jsState, jsState.defaultQAbilityPeer(), permissionName,
86 std::move(resultConsumer));
91 const std::string &permissionName,
92 QOhosConsumer<QtOhos::JsState &,
bool> resultConsumer)
94 requestAppPermissionsFromUserWithResult(
95 jsState, abilityPeer, {permissionName},
96 [resultConsumer = std::move(resultConsumer)](
QtOhos::
JsState &jsState, std::vector<QOhosAppPermissions::AppPermissionResult> result) {
97 resultConsumer(jsState, result.size() == 1 && result.front().permissionGranted);
112 const std::vector<std::string> &permissionNames,
113 QOhosConsumer<QtOhos::JsState &, std::vector<AppPermissionResult>> resultConsumer)
115 jsState.evalToPromiseOrRejectOnThrow(
116 "@ohos.abilityAccessCtrl.createAtManager().requestPermissionsFromUser(*)",
118 abilityPeer->qAbility().eval<QNapi::Object>(
"context"),
121 std::vector<QNapi::ValueWrapper>(permissionNames.begin(), permissionNames.end()))
123 .withContext(
std::move(resultConsumer))
126 QNapi::Object resultObj = cbInfo.getFirstArg<QNapi::Object>(Q_FUNC_INFO);
128 auto resultPermissionsNames =
129 QNapi::getArrayElements<std::vector<std::string>, QNapi::String>(
130 resultObj.get<QNapi::Array>(
"permissions"));
131 auto resultAuthResults =
132 QNapi::getArrayElements<std::vector<
int>, QNapi::Number>(
133 resultObj.get<QNapi::Array>(
"authResults"));
135 auto dialogShownResultsOrEmpty = QNapi::getOptionalPropOrEmpty<QNapi::Array>(resultObj,
"dialogShownResults");
136 auto dialogShownResultsVector =
137 !dialogShownResultsOrEmpty.IsEmpty()
138 ? QNapi::getArrayElements<std::vector<
bool>, QNapi::Boolean>(dialogShownResultsOrEmpty)
139 : std::vector<
bool>();
141 int permissionGrantedStatus = cbInfo.jsState().eval<QNapi::Number>(
142 "@ohos.abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED");
144 const std::size_t totalPermissions = permissionNames.size();
145 std::vector<AppPermissionResult> appPermissionResults(
147 AppPermissionResult {
148 .permissionGranted =
false,
151 if (resultPermissionsNames.size() == totalPermissions && resultAuthResults.size() == totalPermissions
152 && dialogShownResultsVector.size() == totalPermissions) {
153 for (
const auto &permissionName : permissionNames) {
154 const auto it = std::find(resultPermissionsNames.begin(), resultPermissionsNames.end(), permissionName);
155 if (it != resultPermissionsNames.end()) {
156 const int index = std::distance(resultPermissionsNames.begin(), it);
157 appPermissionResults[index].permissionGranted = (resultAuthResults[index] == permissionGrantedStatus);
158 appPermissionResults[index].dialogShown = dialogShownResultsVector[index];
162 resultConsumer(cbInfo
.jsState(), appPermissionResults);
166 QtOhos::logJsCallbackError(cbInfo,
"Got error from requestPermissionsFromUser()");
167 const std::size_t totalPermissions = permissionNames.size();
168 std::vector<AppPermissionResult> appPermissionResults(
170 AppPermissionResult {
171 .permissionGranted =
false,
174 resultConsumer(cbInfo
.jsState(), appPermissionResults);
188 const std::vector<std::string> &permissionNames,
189 QOhosConsumer<QtOhos::JsState &, std::vector<
bool>> resultConsumer)
191 jsState.evalToPromiseOrRejectOnThrow(
192 "@ohos.abilityAccessCtrl.createAtManager().requestPermissionOnSetting(*)",
194 abilityPeer->qAbility().eval<QNapi::Object>(
"context"),
197 std::vector<QNapi::ValueWrapper>(permissionNames.begin(), permissionNames.end()))
199 .withContext(
std::move(resultConsumer))
202 QNapi::Array resultArray = cbInfo.getFirstArg<QNapi::Array>(Q_FUNC_INFO);
204 auto resultAuthResults = QNapi::getArrayElements<std::vector<
int>, QNapi::Number>(resultArray);
206 int permissionGrantedStatus = cbInfo.jsState().eval<QNapi::Number>(
207 "@ohos.abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED");
209 const std::size_t totalPermissions = permissionNames.size();
210 std::vector<
bool> settingsPermissionResults(totalPermissions,
false);
211 if (resultAuthResults.size() == totalPermissions) {
212 for (
std::size_t permIndex = 0; permIndex < totalPermissions; permIndex++)
213 settingsPermissionResults[permIndex] = (resultAuthResults[permIndex] == permissionGrantedStatus);
216 resultConsumer(cbInfo
.jsState(), settingsPermissionResults);
220 QtOhos::logJsCallbackError(cbInfo,
"Got error from requestPermissionOnSetting()");
221 std::vector<
bool> settingsPermissionResults(permissionNames.size(),
false);
222 resultConsumer(cbInfo
.jsState(), settingsPermissionResults);