1/**
2 * Copyright (c) 2022 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15import { HiLog } from '../util/HiLog';
16import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
17
18const TAG = 'PermissionManager';
19
20export class PermissionManager {
21  private _isAllPermissionsGranted: boolean = false;
22  private static instance: PermissionManager;
23  private constructor() {
24  }
25
26  public static getInstance(): PermissionManager {
27    if (!PermissionManager.instance) {
28      PermissionManager.instance = new PermissionManager();
29    }
30    return PermissionManager.instance;
31  }
32
33  public isAllPermissionsGranted() {
34    return this._isAllPermissionsGranted;
35  }
36
37  async initPermissions() {
38    let requestPermissions: Array<any> = [
39      "ohos.permission.READ_CONTACTS",
40      "ohos.permission.WRITE_CONTACTS",
41      "ohos.permission.MANAGE_VOICEMAIL",
42      "ohos.permission.READ_CALL_LOG",
43      "ohos.permission.WRITE_CALL_LOG"
44    ];
45    let AtManager = abilityAccessCtrl.createAtManager();
46    AtManager.requestPermissionsFromUser(globalThis.context, requestPermissions)
47      .then((data) => {
48        HiLog.i(TAG, "Auth result is: " + JSON.stringify(data.authResults));
49        let authFlag = true;
50        for (let i = 0; i < data.authResults.length; i++) {
51          if (data.authResults[i] == -1) {
52            authFlag = authFlag && false;
53          }
54        }
55        HiLog.i(TAG, "authFlag: " + JSON.stringify(authFlag));
56        this._isAllPermissionsGranted = authFlag;
57      })
58      .catch(err => {
59        HiLog.e(TAG, "requestPermissionsFromUser err:" + JSON.stringify(err));
60      });
61    HiLog.i(TAG, 'Application requestPermissionsFromUser end');
62  }
63}