59 QOhosJsState &jsState,
const std::string &permissionName,
60 QOhosConsumer<QOhosJsState &,
bool> resultConsumer)
62 tryGetBundleAccessTokenIdWithConsumer(
64 [permissionName, resultConsumer = std::move(resultConsumer)](
65 QOhosJsState &jsState,
std::optional<
int> bundleAccessTokenId)
mutable {
66 if (bundleAccessTokenId.has_value()) {
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);
80 QOhosJsState &jsState,
const std::string &permissionName,
81 QOhosConsumer<QOhosJsState &,
bool> resultConsumer)
83 auto optQAbility = jsState.defaultQAbility();
86 "Cannot request permission: '%s': no default QAbility.", permissionName.c_str());
87 resultConsumer(jsState,
false);
91 requestAppPermissionFromUser(
92 jsState, optQAbility.value(), permissionName,
std::move(resultConsumer));
96 QOhosJsState &jsState, QNapi::Object qAbility,
const std::string &permissionName,
97 QOhosConsumer<QOhosJsState &,
bool> resultConsumer)
99 requestAppPermissionsFromUserWithResult(
100 jsState, qAbility, {permissionName},
101 [resultConsumer = std::move(resultConsumer)](QOhosJsState &jsState, std::vector<QOhosAppPermissions::AppPermissionResult> result) {
102 resultConsumer(jsState, result.size() == 1 && result.front().permissionGranted);
129 QOhosJsState &jsState, QNapi::Object qAbility,
130 const std::vector<std::string> &permissionNames,
133 auto sharedResultConsumer = QtOhos::moveToSharedPtr(std::move(resultConsumer));
134 jsState.evalToPromiseOrRejectOnThrow(
135 "@ohos.abilityAccessCtrl.createAtManager().requestPermissionsFromUser(*)",
137 qAbility.eval<QNapi::Object>(
"context"),
140 std::vector<QNapi::ValueWrapper>(permissionNames.begin(), permissionNames.end()))
143 [permissionNames, sharedResultConsumer](
const QOhosCallbackInfo &cbInfo) {
144 QNapi::Object resultObj = cbInfo.getFirstArg<QNapi::Object>(Q_FUNC_INFO);
146 auto resultPermissionsNames =
147 QNapi::getArrayElements<std::vector<std::string>, QNapi::String>(
148 resultObj.get<QNapi::Array>(
"permissions"));
149 auto resultAuthResults =
150 QNapi::getArrayElements<std::vector<
int>, QNapi::Number>(
151 resultObj.get<QNapi::Array>(
"authResults"));
153 auto dialogShownResultsOrEmpty = QNapi::getOptionalPropOrEmpty<QNapi::Array>(resultObj,
"dialogShownResults");
154 auto dialogShownResultsVector =
155 !dialogShownResultsOrEmpty.IsEmpty()
156 ? QNapi::getArrayElements<std::vector<
bool>, QNapi::Boolean>(dialogShownResultsOrEmpty)
157 : std::vector<
bool>();
159 int permissionGrantedStatus = cbInfo.jsState().eval<QNapi::Number>(
160 "@ohos.abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED");
162 const std::size_t totalPermissions = permissionNames.size();
163 std::vector<AppPermissionResult> appPermissionResults(
165 AppPermissionResult {
166 .permissionGranted =
false,
169 if (resultPermissionsNames.size() == totalPermissions && resultAuthResults.size() == totalPermissions
170 && dialogShownResultsVector.size() == totalPermissions) {
171 for (
const auto &permissionName : permissionNames) {
172 const auto it = std::find(resultPermissionsNames.begin(), resultPermissionsNames.end(), permissionName);
173 if (it != resultPermissionsNames.end()) {
174 const int index = std::distance(resultPermissionsNames.begin(), it);
175 appPermissionResults[index].permissionGranted = (resultAuthResults[index] == permissionGrantedStatus);
176 appPermissionResults[index].dialogShown = dialogShownResultsVector[index];
180 (*sharedResultConsumer)(cbInfo.jsState(), appPermissionResults);
183 [permissionNames, sharedResultConsumer](
const QOhosCallbackInfo &cbInfo) {
184 QtOhos::logJsCallbackError(cbInfo,
"Got error from requestPermissionsFromUser()");
185 const std::size_t totalPermissions = permissionNames.size();
186 std::vector<AppPermissionResult> appPermissionResults(
188 AppPermissionResult {
189 .permissionGranted =
false,
192 (*sharedResultConsumer)(cbInfo.jsState(), appPermissionResults);
197 QOhosJsState &jsState,
const std::vector<std::string> &permissionNames,
200 auto optQAbility = jsState.defaultQAbility();
202 qOhosPrintfError(
"Cannot request permissions on setting: no default QAbility.");
203 resultConsumer(jsState, std::vector<
bool>(permissionNames.size(),
false));
207 requestAppPermissionsOnSetting(
208 jsState, optQAbility.value(), permissionNames,
std::move(resultConsumer));
212 QOhosJsState &jsState, QNapi::Object qAbility,
213 const std::vector<std::string> &permissionNames,
216 auto sharedResultConsumer = QtOhos::moveToSharedPtr(std::move(resultConsumer));
217 jsState.evalToPromiseOrRejectOnThrow(
218 "@ohos.abilityAccessCtrl.createAtManager().requestPermissionOnSetting(*)",
220 qAbility.eval<QNapi::Object>(
"context"),
223 std::vector<QNapi::ValueWrapper>(permissionNames.begin(), permissionNames.end()))
226 [permissionNames, sharedResultConsumer](
const QOhosCallbackInfo &cbInfo) {
227 QNapi::Array resultArray = cbInfo.getFirstArg<QNapi::Array>(Q_FUNC_INFO);
229 auto resultAuthResults = QNapi::getArrayElements<std::vector<
int>, QNapi::Number>(resultArray);
231 int permissionGrantedStatus = cbInfo.jsState().eval<QNapi::Number>(
232 "@ohos.abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED");
234 const std::size_t totalPermissions = permissionNames.size();
235 std::vector<
bool> settingsPermissionResults(totalPermissions,
false);
236 if (resultAuthResults.size() == totalPermissions) {
237 for (std::size_t permIndex = 0; permIndex < totalPermissions; permIndex++)
238 settingsPermissionResults[permIndex] = (resultAuthResults[permIndex] == permissionGrantedStatus);
241 (*sharedResultConsumer)(cbInfo.jsState(), settingsPermissionResults);
244 [permissionNames, sharedResultConsumer](
const QOhosCallbackInfo &cbInfo) {
245 QtOhos::logJsCallbackError(cbInfo,
"Got error from requestPermissionOnSetting()");
246 std::vector<
bool> settingsPermissionResults(permissionNames.size(),
false);
247 (*sharedResultConsumer)(cbInfo.jsState(), settingsPermissionResults);