From f397b0749d4d9cfffa97eeae1220cb90b4b042b3 Mon Sep 17 00:00:00 2001 From: 18112475621 Date: Thu, 17 Feb 2022 18:38:42 +0800 Subject: [PATCH] Signed-off-by: 18112475621 Signed-off-by: 18112475621 Signed-off-by: 18112475621 Signed-off-by: 18112475621 Add permission-manager code Signed-off-by: 18112475621 --- .../entry/src/main/ets/default/app.ets | 2 +- .../src/main/ets/default/pages/index.ets | 2 +- .../entry/src/ohosTest/ets/default/app.ets | 2 +- .../ets/default/pages/index/index.ets | 2 +- .../ohosTest/ets/test/ExampleJsunit.test.ets | 2 +- .../entry/src/ohosTest/ets/test/List.test.ets | 2 +- .../permissionmanager/src/main/config.json | 28 + .../src/main/ets/default/app.ets | 4 +- .../common/components/alphabeticalIndex.ets | 78 +++ .../ets/default/common/components/backBar.ets | 50 ++ .../ets/default/common/components/dialog.ets | 40 ++ .../ets/default/common/components/search.ets | 64 ++ .../default/common/model/permissionGroup.ets | 454 +++++++++++++ .../ets/default/common/utils/constant.ets | 212 +++++++ .../main/ets/default/common/utils/utils.ets | 396 ++++++++++++ .../default/pages/application-secondary.ets | 290 +++++++++ .../default/pages/application-tertiary.ets | 351 +++++++++++ .../default/pages/authority-management.ets | 596 ++++++++++++++++++ .../ets/default/pages/authority-secondary.ets | 222 +++++++ .../ets/default/pages/authority-tertiary.ets | 331 ++++++++++ .../ets/default/pages/other-permissions.ets | 168 +++++ .../resources/ar/properties/string.json | 14 + .../resources/dark/properties/string.json | 7 + .../resources/default/media/icon_actived.png | Bin 0 -> 1671 bytes .../resources/default/media/icon_normal.png | Bin 0 -> 1107 bytes .../resources/default/properties/string.json | 19 + .../resources/en/properties/string.json | 14 + .../resources/light/properties/string.json | 7 + .../resources/zh/properties/string.json | 14 + .../src/main/ets/dynamic/app.ets | 2 +- .../ets/dynamic/common/components/dialog.ets | 2 +- .../main/ets/dynamic/common/model/bundle.ets | 2 +- .../dynamic/common/model/permissionGroup.ets | 2 +- .../ets/dynamic/common/utils/constant.ets | 2 +- .../main/ets/dynamic/common/utils/utils.ets | 2 +- .../src/main/ets/dynamic/pages/dialogPlus.ets | 2 +- .../main/resources/base/element/color.json | 38 +- .../main/resources/base/element/string.json | 32 +- .../src/main/resources/base/media/icon.png | Bin 0 -> 6790 bytes .../src/main/resources/base/media/left.png | Bin 0 -> 1070 bytes .../src/main/resources/base/media/loading.gif | Bin 0 -> 3897 bytes .../main/resources/base/media/radioactive.jpg | Bin 0 -> 2217 bytes .../resources/base/media/radiodefault.jpg | Bin 0 -> 1313 bytes .../main/resources/base/media/rightarrow.png | Bin 0 -> 1058 bytes .../src/main/resources/base/media/search.png | Bin 0 -> 1147 bytes .../src/ohosTest/ets/default/app.ets | 2 +- .../ets/default/pages/index/index.ets | 2 +- .../ohosTest/ets/test/ExampleJsunit.test.ets | 2 +- .../src/ohosTest/ets/test/List.test.ets | 2 +- 49 files changed, 3430 insertions(+), 33 deletions(-) create mode 100644 frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/common/components/alphabeticalIndex.ets create mode 100644 frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/common/components/backBar.ets create mode 100644 frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/common/components/dialog.ets create mode 100644 frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/common/components/search.ets create mode 100644 frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/common/model/permissionGroup.ets create mode 100644 frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/common/utils/constant.ets create mode 100644 frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/common/utils/utils.ets create mode 100644 frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/pages/application-secondary.ets create mode 100644 frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/pages/application-tertiary.ets create mode 100644 frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/pages/authority-management.ets create mode 100644 frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/pages/authority-secondary.ets create mode 100644 frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/pages/authority-tertiary.ets create mode 100644 frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/pages/other-permissions.ets create mode 100644 frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/resources/ar/properties/string.json create mode 100644 frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/resources/dark/properties/string.json create mode 100644 frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/resources/default/media/icon_actived.png create mode 100644 frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/resources/default/media/icon_normal.png create mode 100644 frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/resources/default/properties/string.json create mode 100644 frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/resources/en/properties/string.json create mode 100644 frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/resources/light/properties/string.json create mode 100644 frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/resources/zh/properties/string.json create mode 100644 frameworks/com.ohos.permissionmanager/permissionmanager/src/main/resources/base/media/icon.png create mode 100644 frameworks/com.ohos.permissionmanager/permissionmanager/src/main/resources/base/media/left.png create mode 100644 frameworks/com.ohos.permissionmanager/permissionmanager/src/main/resources/base/media/loading.gif create mode 100644 frameworks/com.ohos.permissionmanager/permissionmanager/src/main/resources/base/media/radioactive.jpg create mode 100644 frameworks/com.ohos.permissionmanager/permissionmanager/src/main/resources/base/media/radiodefault.jpg create mode 100644 frameworks/com.ohos.permissionmanager/permissionmanager/src/main/resources/base/media/rightarrow.png create mode 100644 frameworks/com.ohos.permissionmanager/permissionmanager/src/main/resources/base/media/search.png diff --git a/frameworks/com.ohos.permissionmanager/entry/src/main/ets/default/app.ets b/frameworks/com.ohos.permissionmanager/entry/src/main/ets/default/app.ets index 2a3b62387..9ae634daa 100644 --- a/frameworks/com.ohos.permissionmanager/entry/src/main/ets/default/app.ets +++ b/frameworks/com.ohos.permissionmanager/entry/src/main/ets/default/app.ets @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Huawei Device Co., Ltd. + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at diff --git a/frameworks/com.ohos.permissionmanager/entry/src/main/ets/default/pages/index.ets b/frameworks/com.ohos.permissionmanager/entry/src/main/ets/default/pages/index.ets index 4572857a3..5e693e0f5 100644 --- a/frameworks/com.ohos.permissionmanager/entry/src/main/ets/default/pages/index.ets +++ b/frameworks/com.ohos.permissionmanager/entry/src/main/ets/default/pages/index.ets @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Huawei Device Co., Ltd. + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at diff --git a/frameworks/com.ohos.permissionmanager/entry/src/ohosTest/ets/default/app.ets b/frameworks/com.ohos.permissionmanager/entry/src/ohosTest/ets/default/app.ets index fd3108959..03748140d 100644 --- a/frameworks/com.ohos.permissionmanager/entry/src/ohosTest/ets/default/app.ets +++ b/frameworks/com.ohos.permissionmanager/entry/src/ohosTest/ets/default/app.ets @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Huawei Device Co., Ltd. + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at diff --git a/frameworks/com.ohos.permissionmanager/entry/src/ohosTest/ets/default/pages/index/index.ets b/frameworks/com.ohos.permissionmanager/entry/src/ohosTest/ets/default/pages/index/index.ets index 2ebd82564..61dc37aa5 100644 --- a/frameworks/com.ohos.permissionmanager/entry/src/ohosTest/ets/default/pages/index/index.ets +++ b/frameworks/com.ohos.permissionmanager/entry/src/ohosTest/ets/default/pages/index/index.ets @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Huawei Device Co., Ltd. + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at diff --git a/frameworks/com.ohos.permissionmanager/entry/src/ohosTest/ets/test/ExampleJsunit.test.ets b/frameworks/com.ohos.permissionmanager/entry/src/ohosTest/ets/test/ExampleJsunit.test.ets index 35824cab4..c76c23ebb 100644 --- a/frameworks/com.ohos.permissionmanager/entry/src/ohosTest/ets/test/ExampleJsunit.test.ets +++ b/frameworks/com.ohos.permissionmanager/entry/src/ohosTest/ets/test/ExampleJsunit.test.ets @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Huawei Device Co., Ltd. + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at diff --git a/frameworks/com.ohos.permissionmanager/entry/src/ohosTest/ets/test/List.test.ets b/frameworks/com.ohos.permissionmanager/entry/src/ohosTest/ets/test/List.test.ets index e659c7498..23005224d 100644 --- a/frameworks/com.ohos.permissionmanager/entry/src/ohosTest/ets/test/List.test.ets +++ b/frameworks/com.ohos.permissionmanager/entry/src/ohosTest/ets/test/List.test.ets @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Huawei Device Co., Ltd. + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/config.json b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/config.json index afb90ba92..a4a9a97f0 100644 --- a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/config.json +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/config.json @@ -22,6 +22,15 @@ "installationFree": false }, "abilities": [ + { + "visible": true, + "name": "com.ohos.permissionmanager.MainAbility", + "description": "$string:mainability_description", + "label": "$string:permissionmanager_MainAbility", + "type": "page", + "launchType": "standard", + "srcPath": "default" + }, { "visible": true, "name": "com.ohos.permissionmanager.GrantAbility", @@ -33,6 +42,25 @@ } ], "js": [ + { + "mode": { + "syntax": "ets", + "type": "pageAbility" + }, + "pages": [ + "pages/authority-management", + "pages/application-secondary", + "pages/authority-secondary", + "pages/authority-tertiary", + "pages/application-tertiary", + "pages/other-permissions" + ], + "name": "default", + "window": { + "designWidth": 720, + "autoDesignWidth": false + } + }, { "mode": { "syntax": "ets", diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/app.ets b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/app.ets index 2a3b62387..05b8ea999 100644 --- a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/app.ets +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/app.ets @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Huawei Device Co., Ltd. + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -15,9 +15,7 @@ export default { onCreate() { - console.info('Application onCreate') }, onDestroy() { - console.info('Application onDestroy') }, } diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/common/components/alphabeticalIndex.ets b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/common/components/alphabeticalIndex.ets new file mode 100644 index 000000000..195b76c06 --- /dev/null +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/common/components/alphabeticalIndex.ets @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import Constants from '../utils/constant.ets'; + +@Component +export struct alphabetIndexerComponent { + private value: string[] = [ + '#', + '☆', + 'A', + 'B', + 'C', + 'D', + 'E', + 'F', + 'G', + 'H', + 'I', + 'J', + 'K', + 'L', + 'M', + 'N', + 'O', + 'P', + 'Q', + 'R', + 'S', + 'T', + 'U', + 'V', + 'W', + 'X', + 'Y', + 'Z' + ]; // Array of alphabetically indexed names + @Link applicationItem: any; // application info array + @Link oldApplicationItem: any; // Original application information array + @State index: number = 0; // alphabetical index + + build() { + AlphabetIndexer({ arrayValue: this.value, selected: this.index }) + .selectedColor($r('app.color.selected_Color')) // selected color + .popupColor($r('app.color.popup_Color')) // popover color + .selectedBackgroundColor($r('app.color.selected_Background_Color')) // Check background color + .popupBackground($r('app.color.popup_Background_Color')) // popover background color + .usingPopup(true) // whether to show a popup + .selectedFont({ size: Constants.ALPHABETINDEXER_SELECTEDFONT_SIZE, weight: FontWeight.Bolder }) // selected style + .popupFont({ size: Constants.ALPHABETINDEXER_POPUPFONT_SIZE, weight: FontWeight.Bolder }) // Demo of the popup + .itemSize(Constants.ALPHABETINDEXER_ITEMSIZE) // size square of each item + .alignStyle(IndexerAlign.Left) // Align left + .onSelected((index: number) => { + this.index = index; + if (this.value[index] === '#' || this.value[index] === '☆') { + this.applicationItem = this.oldApplicationItem; + } else { + this.applicationItem = this.oldApplicationItem.filter((item) => { + return item.alphabeticalIndex.toUpperCase() === this.value[index]; + }) + } + }) + .height(Constants.ALPHABETINDEXER_HEIGHT) + .width(Constants.ALPHABETINDEXER_WIDTH) + } +} \ No newline at end of file diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/common/components/backBar.ets b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/common/components/backBar.ets new file mode 100644 index 000000000..32ff689c7 --- /dev/null +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/common/components/backBar.ets @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import router from '@system.router'; +import Constants from '../utils/constant.ets'; + +@Component +export struct backBar { + @Prop title: string; // return title name + + build() { + Column() { + Flex({ justifyContent: FlexAlign.Start, alignItems: ItemAlign.Center }) { + Image($r('app.media.left')) + .objectFit(ImageFit.Contain) + .height(Constants.BACKBAR_IMAGE_HEIGHT) + .width(Constants.BACKBAR_IMAGE_WIDTH) + .margin({ + top: Constants.BACKBAR_IMAGE_MARGIN_TOP, + left: Constants.BACKBAR_IMAGE_MARGIN_LEFT, + right: Constants.BACKBAR_IMAGE_MARGIN_RIGHT + }) + .onClick(() => { + router.back(); + }) + Text(JSON.parse(this.title)) + .fontColor($r('app.color.title_text_color')) + .fontSize(Constants.BACKBAR_TEXT_FONT_SIZE) + .flexGrow(Constants.BACKBAR_TEXT_FLEX_GROW) + .margin({ top: Constants.BACKBAR_TEXT_MARGIN_TOP }) + } + } + .height(Constants.BACKBAR_HEIGHT) + .constraintSize({ minHeight: Constants.BACKBAR_MINHEIGHT }) + .alignItems(HorizontalAlign.Start) + .backgroundColor($r('app.color.background_color')) + } +} \ No newline at end of file diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/common/components/dialog.ets b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/common/components/dialog.ets new file mode 100644 index 000000000..aecf0cf5f --- /dev/null +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/common/components/dialog.ets @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import Constants from '../utils/constant.ets'; + +@CustomDialog +export struct authorizeDialog { + controller: CustomDialogController; + cancel: () => void; + confirm: () => void; + + build() { + Column() { + Row() { + Flex({ justifyContent: FlexAlign.Center }) { + Text($r("app.string.Authorization_failed")).fontSize(Constants.DIALOG_TEXT_FONT_SIZE) + .margin({ + top: Constants.DIALOG_TEXT_MARGIN_TOP + }) + } + } + } + .backgroundColor($r('app.color.default_background_color')) + .borderRadius(Constants.DIALOG_BORDER_RADIUS) + .height(Constants.DIALOG_HEIGHT) + .width(Constants.DIALOG_WIDTH) + } +} diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/common/components/search.ets b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/common/components/search.ets new file mode 100644 index 000000000..d0de61911 --- /dev/null +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/common/components/search.ets @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import Constants from '../utils/constant.ets'; + +@Component +export struct textInput { + @Prop placeholder: string; // Prompt text when no input + @Link applicationItem: any; // application info array + @Link oldApplicationItem: any; // Original application information array + @Link searchResult: boolean; // search results + + build() { + Column() { + Flex({ alignContent: FlexAlign.Start }) { + TextInput({ placeholder: this.placeholder }) + .padding({ left: Constants.TEXTINPUT_PADDING_LEFT }) + .type(InputType.Normal) + .border({ radius: Constants.TEXTINPUT_BORDER_RADIUS }) + .placeholderColor(Color.Grey) + .placeholderFont({ size: Constants.TEXTINPUT_PLACEHOLDER_Font_SIZE, weight: FontWeight.Normal, family: "sans-serif", style: FontStyle.Normal }) + .caretColor($r('app.color.secondary_font_color')) + .height(Constants.TEXTINPUT_HEIGHT) + .onChange((value: string) => { + if (value === '' || value === null) { + this.applicationItem = this.oldApplicationItem; + } else { + this.applicationItem = this.oldApplicationItem.filter((item) => { + return item.labelId.indexOf(value) > -1; + }) + } + if (this.applicationItem.length) { + this.searchResult = true; + } else { + this.searchResult = false; + } + }) + .onSubmit((enterKey) => { + }) + .onEditChanged((isEditing) => { + }) + Column() { + Image($r('app.media.search')) + .objectFit(ImageFit.Contain) + .width(Constants.TEXTINPUT_IMAGE_WIDTH) + .height(Constants.TEXTINPUT_IMAGE_HEIGHT) + .margin({ left: Constants.TEXTINPUT_IMAGE_MARGIN_LEFT, top: Constants.TEXTINPUT_IMAGE_MARGIN_TOP }) + } + } + } + } +} \ No newline at end of file diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/common/model/permissionGroup.ets b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/common/model/permissionGroup.ets new file mode 100644 index 000000000..3fe899e3b --- /dev/null +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/common/model/permissionGroup.ets @@ -0,0 +1,454 @@ +/* + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export const permissionGroups: any[] = [ + { + "permissionName": "ohos.permission.LOCATION_IN_BACKGROUND", + "groupName": "LOCATION", + "label": "定位权限", + "description": "允许应用在后台运行时获取位置信息。", + "groupId": 0 + }, + { + "permissionName": "ohos.permission.LOCATION", + "groupName": "LOCATION", + "label": "定位权限", + "description": "允许应用在前台运行时获取位置信息。", + "groupId": 0 + }, + { + "permissionName": "ohos.permission.CAMERA", + "groupName": "CAMERA", + "label": "拍摄照片和录制视频", + "description": "允许应用拍摄照片和视频。", + "groupId": 1 + }, + { + "permissionName": "ohos.permission.MICROPHONE", + "groupName": "MICROPHONE", + "label": "录制音频", + "description": "允许应用打开或关闭录音通路。", + "groupId": 2 + }, + { + "permissionName": "ohos.permission.ANSWER_CALL", + "groupName": "PHONE", + "label": "接听电话", + "description": "允许应用接听电话。", + "groupId": 3 + }, + { + "permissionName": "ohos.permission.MANAGE_VOICEMAIL", + "groupName": "PHONE", + "label": "语音信箱", + "description": "允许应用管理语音信箱。", + "groupId": 3 + }, + { + "permissionName": "ohos.permission.READ_CELL_MESSAGES", + "groupName": "SMS", + "label": "读取小区广播", + "description": "允许应用读取设备接收的小区广播信息。", + "groupId": 4 + }, + { + "permissionName": "ohos.permission.READ_MESSAGES", + "groupName": "SMS", + "label": "读取短彩信", + "description": "允许应用读取设备接收的短彩信信息。", + "groupId": 4 + }, + { + "permissionName": "ohos.permission.RECEIVE_MMS", + "groupName": "SMS", + "label": "接收彩信", + "description": "允许应用接收彩信。", + "groupId": 4 + }, + { + "permissionName": "ohos.permission.RECEIVE_SMS", + "groupName": "SMS", + "label": "接收短信", + "description": "允许应用接收短信。", + "groupId": 4 + }, + { + "permissionName": "ohos.permission.RECEIVE_WAP_MESSAGES", + "groupName": "SMS", + "label": "接收WAP消息", + "description": "允许应用接收和处理WAP消息。", + "groupId": 4 + }, + { + "permissionName": "ohos.permission.SEND_MESSAGES", + "groupName": "SMS", + "label": "发送短彩信", + "description": "允许应用发送短彩信", + "groupId": 4 + }, + { + "permissionName": "ohos.permission.READ_CONTACTS", + "groupName": "CONTACTS", + "label": "读取通讯录", + "description": "允许应用读取设备上存储的联系人信息。", + "groupId": 5 + }, + { + "permissionName": "ohos.permission.WRITE_CONTACTS", + "groupName": "CONTACTS", + "label": "新建/修改/删除通讯录", + "description": "允许应用新建/修改/删除设备上存储的联系人信息。", + "groupId": 5 + }, + { + "permissionName": "ohos.permission.READ_CALL_LOG", + "groupName": "CALL_LOG", + "label": "读取通话记录", + "description": "允许应用读取设备上的通话记录信息。", + "groupId": 6 + }, + { + "permissionName": "ohos.permission.WRITE_CALL_LOG", + "groupName": "CALL_LOG", + "label": "新建/修改/删除通话记录", + "description": "允许新建/修改/删除设备上的通话记录信息。", + "groupId": 6 + }, + { + "permissionName": "ohos.permission.MEDIA_LOCATION", + "groupName": "MEDIA", + "label": "允许应用访问拍摄位置", + "description": "应用访问用户媒体文件中的拍摄位置信息如经纬度信息。", + "groupId": 7 + }, + { + "permissionName": "ohos.permission.READ_MEDIA", + "groupName": "MEDIA", + "label": "允许应用读取媒体文件", + "description": "允许应用访问户媒体文件,如视频、音频、图片等。", + "groupId": 7 + }, + { + "permissionName": "ohos.permission.WRITE_MEDIA", + "groupName": "MEDIA", + "label": "允许应用读写媒体文件", + "description": "允许应用读写户媒体文件,如视频、音频、图片等。", + "groupId": 7 + }, + { + "permissionName": "ohos.permission.READ_CALENDAR", + "groupName": "CALENDAR", + "label": "读取日历", + "description": "允许应用读取日历。", + "groupId": 8 + }, + { + "permissionName": "ohos.permission.WRITE_CALENDAR", + "groupName": "CALENDAR", + "label": "修建/修改/删除日历", + "description": "允许应用修建/修改/删除日历。", + "groupId": 8 + }, + { + "permissionName": "ohos.permission.ACTIVITY_MOTION", + "groupName": "SPORT", + "label": "读取用户的运动状态", + "description": "允许应用程序读取用户的运动状态。", + "groupId": 9 + }, + { + "permissionName": "ohos.permission.READ_HEALTH_DATA", + "groupName": "HEALTH", + "label": "读取用户的健康数据", + "description": "允许应用程序读取用户的健康数据。", + "groupId": 10 + }, + { + "permissionName": "ohos.permission.DISTRIBUTED_DATASYNC", + "groupName": "OTHER", + "label": "允许不同设备间数据交换", + "description": "允许应用与远程设备交换用户数据(如图片、音乐、视频、及应用数据等)。", + "groupId": 11 + }, + { + "permissionName": "ohos.permission.DISTRIBUTED_DATASYNC", + "groupName": "OTHERA", + "label": "允许不同设备间数据交换A", + "description": "允许应用与远程设备交换用户数据(如图片、音乐、视频、及应用数据等)。", + "groupId": 11 + } +]; + +export const groups: any[] = [ + { + "name": "LOCATION", + "groupName": "位置信息", + "icon": $r('app.media.ic_public_gps'), + "description": "访问您的位置信息", + "permissions": [ + "ohos.permission.LOCATION_IN_BACKGROUND", + "ohos.permission.LOCATION" + ] + }, + { + "name": "CAMERA", + "groupName": "相机", + "icon": $r('app.media.ic_public_camera'), + "description": "访问您的相机", + "permissions": [ + "ohos.permission.CAMERA" + ] + }, + { + "name": "MICROPHONE", + "groupName": "麦克风", + "icon": $r('app.media.ic_public_voice'), + "description": "访问您的麦克风", + "permissions": [ + "ohos.permission.MICROPHONE" + ] + }, + { + "name": "PHONE", + "groupName": "电话", + "icon": $r('app.media.ic_public_phone'), + "description": "拨打电话和管理通话", + "permissions": [ + "ohos.permission.ANSWER_CALL", + "ohos.permission.MANAGE_VOICEMAIL" + ] + }, + { + "name": "SMS", + "groupName": "信息", + "icon": $r('app.media.ic_public_message'), + "description": "发送和查看短信", + "permissions": [ + "ohos.permission.READ_CELL_MESSAGES", + "ohos.permission.READ_MESSAGES", + "ohos.permission.RECEIVE_MMS", + "ohos.permission.RECEIVE_SMS", + "ohos.permission.RECEIVE_WAP_MESSAGES", + "ohos.permission.SEND_MESSAGES" + ] + }, + { + "name": "CONTACTS", + "groupName": "通讯录", + "icon": $r('app.media.ic_public_contacts_group'), + "description": "访问您的通讯录", + "permissions": [ + "ohos.permission.READ_CONTACTS", + "ohos.permission.WRITE_CONTACTS" + ] + }, + { + "name": "CALL_LOG", + "groupName": "通话记录", + "icon": $r('app.media.ic_call_logs'), + "description": "读取和写入手机通话记录", + "permissions": [ + "ohos.permission.READ_CALL_LOG", + "ohos.permission.WRITE_CALL_LOG" + ] + }, + { + "name": "MEDIA", + "groupName": "媒体和文件", + "icon": $r('app.media.ic_public_folder'), + "description": "访问您的媒体和文件", + "permissions": [ + "ohos.permission.MEDIA_LOCATION", + "ohos.permission.READ_MEDIA", + "ohos.permission.WRITE_MEDIA" + ] + }, + { + "name": "CALENDAR", + "groupName": "日历", + "icon": $r('app.media.ic_public_calendar'), + "description": "访问日历和活动", + "permissions": [ + "ohos.permission.READ_CALENDAR", + "ohos.permission.WRITE_CALENDAR" + ] + }, + { + "name": "SPORT", + "groupName": "健身运动", + "icon": $r('app.media.ic_sport'), + "description": "访问您的运动状态", + "permissions": [ + "ohos.permission.ACTIVITY_MOTION" + ] + }, + { + "name": "HEALTH", + "groupName": "身体传感器", + "icon": $r('app.media.ic_ssensor'), + "description": "访问您的健康数据", + "permissions": [ + "ohos.permission.READ_HEALTH_DATA" + ] + }, + { + "name": "OTHER", + "groupName": "其他权限", + "icon": $r('app.media.ic_more'), + "description": "访问您的其它权限", + "permissions": [ + "ohos.permission.DISTRIBUTED_DATASYNC" + ], + "children":[ + { + "name": "OTHER", + "groupName": "其他权限A", + "icon": $r('app.media.ic_more'), + "description": "访问您的其它权限", + "permissions": [ + "ohos.permission.DISTRIBUTED_DATASYNC", + "ohos.permission.DISTRIBUTED_DATASYNC" + ] + } + ] + } +]; + +export const permissionGroupPermissions: object = { + "LOCATION": ["ohos.permission.LOCATION_IN_BACKGROUND","ohos.permission.LOCATION"], + "CAMERA": ["ohos.permission.CAMERA"], + "MICROPHONE": ["ohos.permission.MICROPHONE"], + "PHONE": ["ohos.permission.ANSWER_CALL","ohos.permission.MANAGE_VOICEMAIL"], + "SMS": ["ohos.permission.READ_CELL_MESSAGES", "ohos.permission.READ_MESSAGES", "ohos.permission.RECEIVE_MMS", "ohos.permission.RECEIVE_SMS", "ohos.permission.RECEIVE_WAP_MESSAGES", "ohos.permission.SEND_MESSAGES"], + "CONTACTS": ["ohos.permission.READ_CONTACTS", "ohos.permission.WRITE_CONTACTS"], + "CALL_LOG": ["ohos.permission.READ_CALL_LOG", "ohos.permission.WRITE_CALL_LOG"], + "MEDIA": ["ohos.permission.MEDIA_LOCATION", "ohos.permission.READ_MEDIA", "ohos.permission.WRITE_MEDIA"], + "CALENDAR": ["ohos.permission.READ_CALENDAR", "ohos.permission.WRITE_CALENDAR"], + "SPORT": ["ohos.permission.ACTIVITY_MOTION"], + "HEALTH": ["ohos.permission.READ_HEALTH_DATA"], + "OTHER": ["ohos.permission.DISTRIBUTED_DATASYNCC","ohos.permission.DISTRIBUTED_DATASYNCD"] +}; + + +export const userGrantPermissions: string[] = [ + "ohos.permission.LOCATION_IN_BACKGROUND", + "ohos.permission.LOCATION", + "ohos.permission.CAMERA", + "ohos.permission.MICROPHONE", + "ohos.permission.ANSWER_CALL", + "ohos.permission.MANAGE_VOICEMAIL", + "ohos.permission.READ_CELL_MESSAGES", + "ohos.permission.READ_MESSAGES", + "ohos.permission.RECEIVE_MMS", + "ohos.permission.RECEIVE_SMS", + "ohos.permission.RECEIVE_WAP_MESSAGES", + "ohos.permission.SEND_MESSAGES", + "ohos.permission.READ_CONTACTS", + "ohos.permission.WRITE_CONTACTS", + "ohos.permission.READ_CALL_LOG", + "ohos.permission.WRITE_CALL_LOG", + "ohos.permission.MEDIA_LOCATION", + "ohos.permission.READ_MEDIA", + "ohos.permission.WRITE_MEDIA", + "ohos.permission.READ_CALENDAR", + "ohos.permission.WRITE_CALENDAR", + "ohos.permission.ACTIVITY_MOTION", + "ohos.permission.READ_HEALTH_DATA", + "ohos.permission.DISTRIBUTED_DATASYNC" +]; + +export const permissionDescriptions: object = { + "位置信息": "允许应用在后台运行时获取位置信息。" , + "相机": "允许应用拍摄照片和视频。" , + "麦克风": "允许应用打开或关闭录音通路。" , + "电话": "允许应用接听电话。" , + "信息": "允许应用发送短彩信。" , + "通讯录": "允许应用新建/修改/删除设备上存储的联系人信息。" , + "通话记录": "允许新建/修改/删除设备上的通话记录信息。" , + "媒体和文件": "允许应用访问户媒体文件,如视频、音频、图片等。" , + "日历": "允许应用修建/修改/删除日历。" , + "健身运动": "允许应用程序读取用户的运动状态。" , + "身体传感器": "允许应用程序读取用户的健康数据。" , + "其他权限": "允许应用与远程设备交换用户数据(如图片、音乐、视频、及应用数据等)。" +}; + +export const permissionPermissionGroup: object = { + "ohos.permission.LOCATION_IN_BACKGROUND": "LOCATION", + "ohos.permission.LOCATION": "LOCATION", + "ohos.permission.CAMERA": "CAMERA", + "ohos.permission.MICROPHONE": "MICROPHONE", + "ohos.permission.ANSWER_CALL": "PHONE", + "ohos.permission.MANAGE_VOICEMAIL": "PHONE", + "ohos.permission.READ_CELL_MESSAGES": "SMS", + "ohos.permission.READ_MESSAGES": "SMS", + "ohos.permission.RECEIVE_MMS": "SMS", + "ohos.permission.RECEIVE_SMS": "SMS", + "ohos.permission.RECEIVE_WAP_MESSAGES": "SMS", + "ohos.permission.SEND_MESSAGES": "SMS", + "ohos.permission.READ_CONTACTS": "CONTACTS", + "ohos.permission.WRITE_CONTACTS": "CONTACTS", + "ohos.permission.READ_CALL_LOG": "CALL_LOG", + "ohos.permission.WRITE_CALL_LOG": "CALL_LOG", + "ohos.permission.MEDIA_LOCATION": "MEDIA", + "ohos.permission.READ_MEDIA": "MEDIA", + "ohos.permission.WRITE_MEDIA": "MEDIA", + "ohos.permission.READ_CALENDAR": "CALENDAR", + "ohos.permission.WRITE_CALENDAR": "CALENDAR", + "ohos.permission.ACTIVITY_MOTION": "SPORT", + "ohos.permission.READ_HEALTH_DATA": "HEALTH", + "ohos.permission.DISTRIBUTED_DATASYNC": "OTHER" +}; + +export const permissionGroupIds: object = { + "ohos.permission.LOCATION_IN_BACKGROUND": "0", + "ohos.permission.LOCATION": "0", + "ohos.permission.CAMERA": "1", + "ohos.permission.MICROPHONE": "2", + "ohos.permission.ANSWER_CALL": "3", + "ohos.permission.MANAGE_VOICEMAIL": "3", + "ohos.permission.READ_CELL_MESSAGES": "4", + "ohos.permission.READ_MESSAGES": "4", + "ohos.permission.RECEIVE_MMS": "4", + "ohos.permission.RECEIVE_SMS": "4", + "ohos.permission.RECEIVE_WAP_MESSAGES": "4", + "ohos.permission.SEND_MESSAGES": "4", + "ohos.permission.READ_CONTACTS": "5", + "ohos.permission.WRITE_CONTACTS": "5", + "ohos.permission.READ_CALL_LOG": "6", + "ohos.permission.WRITE_CALL_LOG": "6", + "ohos.permission.MEDIA_LOCATION": "7", + "ohos.permission.READ_MEDIA": "7", + "ohos.permission.WRITE_MEDIA": "7", + "ohos.permission.READ_CALENDAR": "8", + "ohos.permission.WRITE_CALENDAR": "8", + "ohos.permission.ACTIVITY_MOTION": "9", + "ohos.permission.READ_HEALTH_DATA": "10", + "ohos.permission.DISTRIBUTED_DATASYNC": "11" +}; + +export const orderGroup: string[] = [ + "位置信息", + "相机", + "麦克风", + "电话", + "信息", + "通讯录", + "通话记录", + "媒体和文件", + "日历", + "健身运动", + "身体传感器", + "其他权限" +]; \ No newline at end of file diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/common/utils/constant.ets b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/common/utils/constant.ets new file mode 100644 index 000000000..0730cbfa0 --- /dev/null +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/common/utils/constant.ets @@ -0,0 +1,212 @@ +/* + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export default class Constants { + // alphabetIndexer + static ALPHABETINDEXER_SELECTEDFONT_SIZE = 12; + static ALPHABETINDEXER_POPUPFONT_SIZE = 30; + static ALPHABETINDEXER_ITEMSIZE = 16; + static ALPHABETINDEXER_HEIGHT = 448; + static ALPHABETINDEXER_WIDTH = 36; + + // backBar + static BACKBAR_HEIGHT = 56; + static BACKBAR_MINHEIGHT = 56; + + // image of backBar + static BACKBAR_IMAGE_HEIGHT = 24; + static BACKBAR_IMAGE_WIDTH = 24; + static BACKBAR_IMAGE_MARGIN_TOP = 17; + static BACKBAR_IMAGE_MARGIN_LEFT = 24; + static BACKBAR_IMAGE_MARGIN_RIGHT = 15; + + // text of backBar + static BACKBAR_TEXT_FONT_SIZE = 20; + static BACKBAR_TEXT_FLEX_GROW = 1; + static BACKBAR_TEXT_MARGIN_TOP = 17; + + // dialog + static DIALOG_BORDER_RADIUS = 24; + static DIALOG_HEIGHT = 70; + static DIALOG_WIDTH = 336; + + // text of dialog + static DIALOG_TEXT_FONT_SIZE = 20; + static DIALOG_TEXT_MARGIN_TOP = 25; + + // search textInput + static TEXTINPUT_PADDING_LEFT = 36; + static TEXTINPUT_BORDER_RADIUS = 20; + static TEXTINPUT_PLACEHOLDER_Font_SIZE = 16; + static TEXTINPUT_HEIGHT = 40; + static TEXTINPUT_IMAGE_WIDTH = 16; + static TEXTINPUT_IMAGE_HEIGHT = 16; + static TEXTINPUT_IMAGE_MARGIN_LEFT = -300; + static TEXTINPUT_IMAGE_MARGIN_TOP = 12; + + // grid useSizeType + static GUTTER = 0; + static LEFT_XS_SPAN = 1; + static LEFT_XS_OFFSET = 0; + static LEFT_SM_SPAN = 1; + static LEFT_SM_OFFSET = 0; + static LEFT_MD_SPAN = 1; + static LEFT_MD_OFFSET = 0; + static LEFT_LG_SPAN = 2; + static LEFT_LG_OFFSET = 0; + static MIDDLE_XS_SPAN = 1; + static MIDDLE_XS_OFFSET = 1; + static MIDDLE_SM_SPAN = 2; + static MIDDLE_SM_OFFSET = 1; + static MIDDLE_MD_SPAN = 6; + static MIDDLE_MD_OFFSET = 1; + static MIDDLE_LG_SPAN = 8; + static MIDDLE_LG_OFFSET = 2; + static RIGHT_XS_SPAN = 1; + static RIGHT_XS_OFFSET = 2; + static RIGHT_SM_SPAN = 1; + static RIGHT_SM_OFFSET = 3; + static RIGHT_MD_SPAN = 1; + static RIGHT_MD_OFFSET = 7; + static RIGHT_LG_SPAN = 2; + static RIGHT_LG_OFFSET = 10; + + // 100% width,height + static FULL_WIDTH = '100%'; + static FULL_HEIGHT = '100%'; + + // public property style + static LAYOUT_WEIGHT = 1; + static FLEX_GROW = 1; + static TEXT_DECORATION_HEIGHT = 2; + static TEXT_MIDDLE_FONT_SIZE = 16; + static TEXT_SMAL_FONT_SIZE = 14; + static TEXT_SMALLER_FONT_SIZE = 12; + static CONSTRAINTSIZE_MINHEIGHT = 48; + static LISTITEM_ROW_HEIGHT = 48; + static LISTITEM_PADDING_LEFT = 24; + static LISTITEM_PADDING_RIGHT = 24; + static IMAGE_HEIGHT = 24; + static IMAGE_WIDTH = 12; + static BORDER_RADIUS = 24; + + // application-secondary, authority-secondary + static FLEX_MARGIN_TOP = 8; + static FLEX_MARGIN_BOTTOM = 8; + static LIST_PADDING_TOP = 4; + static LIST_PADDING_BOTTOM = 4; + static ROW_MARGIN_TOP = 9; + static SECONDARY_TEXT_MARGIN_TOP = 19.5; + static SECONDARY_TEXT_MARGIN_LEFT = 48; + + // application-tertiary + static TERTIARY_IMAGE_WIDTH = 64; + static TERTIARY_IMAGE_HEIGHT = 64; + static TERTIARY_IMAGE_MARGIN_LEFT = 24; + static TERTIARY_IMAGE_MARGIN_RIGHT = 12; + static TERTIARY_HALF_WIDTH = '50%'; + static TERTIARY_ROW_MARGIN_TOP = 24; + static TERTIARY_PERMISSION_ROW_MARGIN_TOP = 12; + static TERTIARY_RADIO_IMAGE_WIDTH = 24; + static TERTIARY_RADIO_IMAGE_HEIGHT = 24; + static TERTIARY_RADIO_IMAGE_MARGIN_TOP = 4; + static TERTIARY_LISTITEM_PADDING_LEFT = 12; + static TERTIARY_LISTITEM_PADDING_RIGHT = 12; + static TERTIARY_LISTITEM_MARGIN_TOP = 1; + static TERTIARY_LIST_PADDING_LEFT = 12; + static TERTIARY_LIST_PADDING_RIGHT = 12; + static TERTIARY_LIST_PADDING_TOP = 3; + static TERTIARY_LIST_PADDING_BOTTOM = 4; + + // authority-tertiary + static AUTHORITY_IMAGE_WIDTH = 40; + static AUTHORITY_IMAGE_HEIGHT = 40; + static AUTHORITY_IMAGE_MARGIN_RIGHT = 16; + static AUTHORITY_TOGGLE_WIDTH = 36; + static AUTHORITY_TOGGLE_HEIGHT = 20; + static AUTHORITY_ROW_HEIGHT = 72; + static AUTHORITY_CONSTRAINTSIZE_MINHEIGHT = 72; + static AUTHORITY_LISTITEM_PADDING_LEFT = 12; + static AUTHORITY_LISTITEM_PADDING_RIGHT = 12; + static AUTHORITY_TEXTINPUT_PADDING_LEFT = 12; + static AUTHORITY_TEXTINPUT_PADDING_RIGHT = 4; + static AUTHORITY_TEXT_MARGIN_TOP = 24; + static AUTHORITY_TEXT_MARGIN_LEFT = 12; + static AUTHORITY_ROW_MARGIN_TOP = 24; + static SEARCHNORESULT_IMAGE_WIDTH = 200; + static SEARCHNORESULT_IMAGE_HEIGHT = 200; + static AUTHORITY_COLUMN_HEIGHT = '95%'; + static AUTHORITY_ALPHABETINDEX_WIDTH = 24; + static AUTHORITY_ALPHABETINDEX_PADDING_TOP = 16; + + // authority-management + static MANAGEMENT_IMAGE_WIDTH = 24; + static MANAGEMENT_IMAGE_HEIGHT = 24; + static MANAGEMENT_IMAGE_MARGIN_RIGHT = 16; + static MANAGEMENT_ROW_HEIGHT = 56; + static MANAGEMENT_TEXT_DECORATION_WIDTH = '90%'; + static MANAGEMENT_TEXT_DECORATION_MARGIN_LEFT = 40; + static MANAGEMENT_LODING_IMAGE_WIDTH = 48; + static MANAGEMENT_LODING_IMAGE_HEIGHT = 48; + static MANAGEMENT_LODING_ROW_HEIGHT = '90%'; + static MANAGEMENT_ROW_PADDING_LEFT = 12; + static MANAGEMENT_ROW_PADDING_RIGHT = 12; + static MANAGEMENT_ROW_PADDING_TOP = 8; + static MANAGEMENT_ROW_MARGIN_TOP = 12; + static APPLICATION_IMAGE_WIDTH = 40; + static APPLICATION_IMAGE_HEIGHT = 40; + static APPLICATION_IMAGE_MARGIN_RIGHT = 16; + static APPLICATION_TEXT_MARGIN_RIGHT = 4; + static APPLICATION_LISTITEM_PADDING_LEFT = 12; + static APPLICATION_LISTITEM_PADDING_RIGHT = 12; + static APPLICATION_TEXTINPUT_PADDING_LEFT = 12; + static APPLICATION_TEXTINPUT_PADDING_TOP = 8; + static APPLICATION_TEXTINPUT_PADDING_RIGHT = 4; + static APPLICATION_COLUMN_HEIGHT = '93%'; + static APPLICATION_ALPHABETINDEX_MARGIN_TOP = 12; + static APPLICATION_ALPHABETINDEX_WIDTH = 24; + static APPLICATION_TEXT_DECORATION_WIDTH = '85%'; + static APPLICATION_TEXT_DECORATION_MARGIN_LEFT = 56; + + // slice + static SLICE_START = 0; + static SLICE_END = -1; + static SLICE_START_INDEX = 0; + static SLICE_END_INDEX = 1; + + // tabBar + static BAR_WIDTH = 744; + + // setTimeout + static DELAY_TIME = 1000; + + // radio + static RADIO_ALLOW_NAME = '允许'; + static RADIO_ALLOW_INDEX = 0; + static RADIO_ALLOW_GROUP_NAME = 'radio'; + static RADIO_BAN_NAME = '禁止'; + static RADIO_BAN_INDEX = 1; + static RADIO_BAN_GROUP_NAME = 'radio'; + + // utils + static CHAR_CODE = 0; + static UNI_MAX = 40869; + static UNI_MIN = 19968; + + static PARMETER_BUNDLE_FLAG = 16; + static USERID = 100; + + static PERMISSION_INDEX = 0; +} \ No newline at end of file diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/common/utils/utils.ets b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/common/utils/utils.ets new file mode 100644 index 000000000..9e4b034cc --- /dev/null +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/common/utils/utils.ets @@ -0,0 +1,396 @@ +/* + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import Resmgr from '@ohos.resourceManager'; +import abilityAccessCtrl from '@ohos.abilityAccessCtrl'; +import { permissionGroups, groups } from "../model/permissionGroup.ets"; +import Constants from '../utils/constant.ets'; + +/** + * Get app name resource + * @param {Number} labelId app name id + * @param {String} bundleName Package names + */ +export function getAppLabel(labelId, bundleName) { + return new Promise((resolve) => { + Resmgr.getResourceManager(bundleName).then(item => { + item.getString(labelId, (error, value) => { + resolve(value); + }) + }).catch(e => { + }) + }) +} + +/** + * Get app icon resources + * @param {Number} iconId app icon id + * @param {String} bundleName Package names + */ +export function getAppIcon(iconId, bundleName) { + return new Promise((resolve) => { + Resmgr.getResourceManager(bundleName).then(item => { + item.getMediaBase64(iconId, (error, value) => { + resolve(value); + }) + }).catch(e => { + }) + }) +} + +/** + * verify permission + * @param {Number} accessTokenId + * @param {String} permission permission name + */ +export function verifyAccessToken(accessTokenId, permission) { + return new Promise((resolve) => { + abilityAccessCtrl.createAtManager().verifyAccessToken(accessTokenId, permission).then((res) => { + return resolve(res); + }) + }) +} + +/** +* Let arkui detect changes in array index assignments。 +*/ +export function changeIndexValue(stateList, changeItem){ + // copy array + let result = stateList.slice(0); + for (let i = 0 ; i < changeItem.length; i++) { + let item = changeItem[i]; + if (!Array.isArray(item)) { + throw new Error("error"); + } + let index = item[0]; + let value = item[1]; + if (index == undefined || value == undefined) { + throw new Error("error"); + } + if (index < 0 || index > stateList.length - 1) { + continue; + } + let start = result.slice(0, index); + start = start.concat([value]); + result = start.concat(result.slice(index + 1)); + } + return result; +} + +// List of Chinese Pinyin Initials +let strChineseFirstPY = "YDYQSXMWZSSXJBYMGCCZQPSSQBYCDSCDQLDYLYBSSJGYZZJJFKCCLZDHWDWZJLJPFYYNWJJTMYHZWZHFLZPPQHGSC" + +"YYYNJQYXXGJHHSDSJNKKTMOMLCRXYPSNQSECCQZGGLLYJLMYZZSECYKYYHQWJSSGGYXYZYJWWKDJHYCHMYXJTLXJYQBYXZLDWRDJRWYSRLDZJPCBZ" + +"JJBRCFTLECZSTZFXXZHTRQHYBDLYCZSSYMMRFMYQZPWWJJYFCRWFDFZQPYDDWYXKYJAWJFFXYPSFTZYHHYZYSWCJYXSCLCXXWZZXNBGNNXBXLZSZS" + +"BSGPYSYZDHMDZBQBZCWDZZYYTZHBTSYYBZGNTNXQYWQSKBPHHLXGYBFMJEBJHHGQTJCYSXSTKZHLYCKGLYSMZXYALMELDCCXGZYRJXSDLTYZCQKCN" + +"NJWHJTZZCQLJSTSTBNXBTYXCEQXGKWJYFLZQLYHYXSPSFXLMPBYSXXXYDJCZYLLLSJXFHJXPJBTFFYABYXBHZZBJYZLWLCZGGBTSSMDTJZXPTHYQT" + +"GLJSCQFZKJZJQNLZWLSLHDZBWJNCJZYZSQQYCQYRZCJJWYBRTWPYFTWEXCSKDZCTBZHYZZYYJXZCFFZZMJYXXSDZZOTTBZLQWFCKSZSXFYRLNYJMB" + +"DTHJXSQQCCSBXYYTSYFBXDZTGBCNSLCYZZPSAZYZZSCJCSHZQYDXLBPJLLMQXTYDZXSQJTZPXLCGLQTZWJBHCTSYJSFXYEJJTLBGXSXJMYJQQPFZA" + +"SYJNTYDJXKJCDJSZCBARTDCLYJQMWNQNCLLLKBYBZZSYHQQLTWLCCXTXLLZNTYLNEWYZYXCZXXGRKRMTCNDNJTSYYSSDQDGHSDBJGHRWRQLYBGLXH" + +"LGTGXBQJDZPYJSJYJCTMRNYMGRZJCZGJMZMGXMPRYXKJNYMSGMZJYMKMFXMLDTGFBHCJHKYLPFMDXLQJJSMTQGZSJLQDLDGJYCALCMZCSDJLLNXDJ" + +"FFFFJCZFMZFFPFKHKGDPSXKTACJDHHZDDCRRCFQYJKQCCWJDXHWJLYLLZGCFCQDSMLZPBJJPLSBCJGGDCKKDEZSQCCKJGCGKDJTJDLZYCXKLQSCGJ" + +"CLTFPCQCZGWPJDQYZJJBYJHSJDZWGFSJGZKQCCZLLPSPKJGQJHZZLJPLGJGJJTHJJYJZCZMLZLYQBGJWMLJKXZDZNJQSYZMLJLLJKYWXMKJLHSKJG" + +"BMCLYYMKXJQLBMLLKMDXXKWYXYSLMLPSJQQJQXYXFJTJDXMXXLLCXQBSYJBGWYMBGGBCYXPJYGPEPFGDJGBHBNSQJYZJKJKHXQFGQZKFHYGKHDKLL" + +"SDJQXPQYKYBNQSXQNSZSWHBSXWHXWBZZXDMNSJBSBKBBZKLYLXGWXDRWYQZMYWSJQLCJXXJXKJEQXSCYETLZHLYYYSDZPAQYZCMTLSHTZCFYZYXYL" + +"JSDCJQAGYSLCQLYYYSHMRQQKLDXZSCSSSYDYCJYSFSJBFRSSZQSBXXPXJYSDRCKGJLGDKZJZBDKTCSYQPYHSTCLDJDHMXMCGXYZHJDDTMHLTXZXYL" + +"YMOHYJCLTYFBQQXPFBDFHHTKSQHZYYWCNXXCRWHOWGYJLEGWDQCWGFJYCSNTMYTOLBYGWQWESJPWNMLRYDZSZTXYQPZGCWXHNGPYXSHMYQJXZTDPP" + +"BFYHZHTJYFDZWKGKZBLDNTSXHQEEGZZYLZMMZYJZGXZXKHKSTXNXXWYLYAPSTHXDWHZYMPXAGKYDXBHNHXKDPJNMYHYLPMGOCSLNZHKXXLPZZLBML" + +"SFBHHGYGYYGGBHSCYAQTYWLXTZQCEZYDQDQMMHTKLLSZHLSJZWFYHQSWSCWLQAZYNYTLSXTHAZNKZZSZZLAXXZWWCTGQQTDDYZTCCHYQZFLXPSLZY" + +"GPZSZNGLNDQTBDLXGTCTAJDKYWNSYZLJHHZZCWNYYZYWMHYCHHYXHJKZWSXHZYXLYSKQYSPSLYZWMYPPKBYGLKZHTYXAXQSYSHXASMCHKDSCRSWJP" + +"WXSGZJLWWSCHSJHSQNHCSEGNDAQTBAALZZMSSTDQJCJKTSCJAXPLGGXHHGXXZCXPDMMHLDGTYBYSJMXHMRCPXXJZCKZXSHMLQXXTTHXWZFKHCCZDY" + +"TCJYXQHLXDHYPJQXYLSYYDZOZJNYXQEZYSQYAYXWYPDGXDDXSPPYZNDLTWRHXYDXZZJHTCXMCZLHPYYYYMHZLLHNXMYLLLMDCPPXHMXDKYCYRDLTX" + +"JCHHZZXZLCCLYLNZSHZJZZLNNRLWHYQSNJHXYNTTTKYJPYCHHYEGKCTTWLGQRLGGTGTYGYHPYHYLQYQGCWYQKPYYYTTTTLHYHLLTYTTSPLKYZXGZW" + +"GPYDSSZZDQXSKCQNMJJZZBXYQMJRTFFBTKHZKBXLJJKDXJTLBWFZPPTKQTZTGPDGNTPJYFALQMKGXBDCLZFHZCLLLLADPMXDJHLCCLGYHDZFGYDDG" + +"CYYFGYDXKSSEBDHYKDKDKHNAXXYBPBYYHXZQGAFFQYJXDMLJCSQZLLPCHBSXGJYNDYBYQSPZWJLZKSDDTACTBXZDYZYPJZQSJNKKTKNJDJGYYPGTL" + +"FYQKASDNTCYHBLWDZHBBYDWJRYGKZYHEYYFJMSDTYFZJJHGCXPLXHLDWXXJKYTCYKSSSMTWCTTQZLPBSZDZWZXGZAGYKTYWXLHLSPBCLLOQMMZSSL" + +"CMBJCSZZKYDCZJGQQDSMCYTZQQLWZQZXSSFPTTFQMDDZDSHDTDWFHTDYZJYQJQKYPBDJYYXTLJHDRQXXXHAYDHRJLKLYTWHLLRLLRCXYLBWSRSZZS" + +"YMKZZHHKYHXKSMDSYDYCJPBZBSQLFCXXXNXKXWYWSDZYQOGGQMMYHCDZTTFJYYBGSTTTYBYKJDHKYXBELHTYPJQNFXFDYKZHQKZBYJTZBXHFDXKDA" + +"SWTAWAJLDYJSFHBLDNNTNQJTJNCHXFJSRFWHZFMDRYJYJWZPDJKZYJYMPCYZNYNXFBYTFYFWYGDBNZZZDNYTXZEMMQBSQEHXFZMBMFLZZSRXYMJGS" + +"XWZJSPRYDJSJGXHJJGLJJYNZZJXHGXKYMLPYYYCXYTWQZSWHWLYRJLPXSLSXMFSWWKLCTNXNYNPSJSZHDZEPTXMYYWXYYSYWLXJQZQXZDCLEEELMC" + +"PJPCLWBXSQHFWWTFFJTNQJHJQDXHWLBYZNFJLALKYYJLDXHHYCSTYYWNRJYXYWTRMDRQHWQCMFJDYZMHMYYXJWMYZQZXTLMRSPWWCHAQBXYGZYPXY" + +"YRRCLMPYMGKSJSZYSRMYJSNXTPLNBAPPYPYLXYYZKYNLDZYJZCZNNLMZHHARQMPGWQTZMXXMLLHGDZXYHXKYXYCJMFFYYHJFSBSSQLXXNDYCANNMT" + +"CJCYPRRNYTYQNYYMBMSXNDLYLYSLJRLXYSXQMLLYZLZJJJKYZZCSFBZXXMSTBJGNXYZHLXNMCWSCYZYFZLXBRNNNYLBNRTGZQYSATSWRYHYJZMZDH" + +"ZGZDWYBSSCSKXSYHYTXXGCQGXZZSHYXJSCRHMKKBXCZJYJYMKQHZJFNBHMQHYSNJNZYBKNQMCLGQHWLZNZSWXKHLJHYYBQLBFCDSXDLDSPFZPSKJY" + +"ZWZXZDDXJSMMEGJSCSSMGCLXXKYYYLNYPWWWGYDKZJGGGZGGSYCKNJWNJPCXBJJTQTJWDSSPJXZXNZXUMELPXFSXTLLXCLJXJJLJZXCTPSWXLYDHL" + +"YQRWHSYCSQYYBYAYWJJJQFWQCQQCJQGXALDBZZYJGKGXPLTZYFXJLTPADKYQHPMATLCPDCKBMTXYBHKLENXDLEEGQDYMSAWHZMLJTWYGXLYQZLJEE" + +"YYBQQFFNLYXRDSCTGJGXYYNKLLYQKCCTLHJLQMKKZGCYYGLLLJDZGYDHZWXPYSJBZKDZGYZZHYWYFQYTYZSZYEZZLYMHJJHTSMQWYZLKYYWZCSRKQ" + +"YTLTDXWCTYJKLWSQZWBDCQYNCJSRSZJLKCDCDTLZZZACQQZZDDXYPLXZBQJYLZLLLQDDZQJYJYJZYXNYYYNYJXKXDAZWYRDLJYYYRJLXLLDYXJCYW" + +"YWNQCCLDDNYYYNYCKCZHXXCCLGZQJGKWPPCQQJYSBZZXYJSQPXJPZBSBDSFNSFPZXHDWZTDWPPTFLZZBZDMYYPQJRSDZSQZSQXBDGCPZSWDWCSQZG" + +"MDHZXMWWFYBPDGPHTMJTHZSMMBGZMBZJCFZWFZBBZMQCFMBDMCJXLGPNJBBXGYHYYJGPTZGZMQBQTCGYXJXLWZKYDPDYMGCFTPFXYZTZXDZXTGKMT" + +"YBBCLBJASKYTSSQYYMSZXFJEWLXLLSZBQJJJAKLYLXLYCCTSXMCWFKKKBSXLLLLJYXTYLTJYYTDPJHNHNNKBYQNFQYYZBYYESSESSGDYHFHWTCJBS" + +"DZZTFDMXHCNJZYMQWSRYJDZJQPDQBBSTJGGFBKJBXTGQHNGWJXJGDLLTHZHHYYYYYYSXWTYYYCCBDBPYPZYCCZYJPZYWCBDLFWZCWJDXXHYHLHWZZ" + +"XJTCZLCDPXUJCZZZLYXJJTXPHFXWPYWXZPTDZZBDZCYHJHMLXBQXSBYLRDTGJRRCTTTHYTCZWMXFYTWWZCWJWXJYWCSKYBZSCCTZQNHXNWXXKHKFH" + +"TSWOCCJYBCMPZZYKBNNZPBZHHZDLSYDDYTYFJPXYNGFXBYQXCBHXCPSXTYZDMKYSNXSXLHKMZXLYHDHKWHXXSSKQYHHCJYXGLHZXCSNHEKDTGZXQY" + +"PKDHEXTYKCNYMYYYPKQYYYKXZLTHJQTBYQHXBMYHSQCKWWYLLHCYYLNNEQXQWMCFBDCCMLJGGXDQKTLXKGNQCDGZJWYJJLYHHQTTTNWCHMXCXWHWS" + +"ZJYDJCCDBQCDGDNYXZTHCQRXCBHZTQCBXWGQWYYBXHMBYMYQTYEXMQKYAQYRGYZSLFYKKQHYSSQYSHJGJCNXKZYCXSBXYXHYYLSTYCXQTHYSMGSCP" + +"MMGCCCCCMTZTASMGQZJHKLOSQYLSWTMXSYQKDZLJQQYPLSYCZTCQQPBBQJZCLPKHQZYYXXDTDDTSJCXFFLLCHQXMJLWCJCXTSPYCXNDTJSHJWXDQQ" + +"JSKXYAMYLSJHMLALYKXCYYDMNMDQMXMCZNNCYBZKKYFLMCHCMLHXRCJJHSYLNMTJZGZGYWJXSRXCWJGJQHQZDQJDCJJZKJKGDZQGJJYJYLXZXXCDQ" + +"HHHEYTMHLFSBDJSYYSHFYSTCZQLPBDRFRZTZYKYWHSZYQKWDQZRKMSYNBCRXQBJYFAZPZZEDZCJYWBCJWHYJBQSZYWRYSZPTDKZPFPBNZTKLQYHBB" + +"ZPNPPTYZZYBQNYDCPJMMCYCQMCYFZZDCMNLFPBPLNGQJTBTTNJZPZBBZNJKLJQYLNBZQHKSJZNGGQSZZKYXSHPZSNBCGZKDDZQANZHJKDRTLZLSWJ" + +"LJZLYWTJNDJZJHXYAYNCBGTZCSSQMNJPJYTYSWXZFKWJQTKHTZPLBHSNJZSYZBWZZZZLSYLSBJHDWWQPSLMMFBJDWAQYZTCJTBNNWZXQXCDSLQGDS" + +"DPDZHJTQQPSWLYYJZLGYXYZLCTCBJTKTYCZJTQKBSJLGMGZDMCSGPYNJZYQYYKNXRPWSZXMTNCSZZYXYBYHYZAXYWQCJTLLCKJJTJHGDXDXYQYZZB" + +"YWDLWQCGLZGJGQRQZCZSSBCRPCSKYDZNXJSQGXSSJMYDNSTZTPBDLTKZWXQWQTZEXNQCZGWEZKSSBYBRTSSSLCCGBPSZQSZLCCGLLLZXHZQTHCZMQ" + +"GYZQZNMCOCSZJMMZSQPJYGQLJYJPPLDXRGZYXCCSXHSHGTZNLZWZKJCXTCFCJXLBMQBCZZWPQDNHXLJCTHYZLGYLNLSZZPCXDSCQQHJQKSXZPBAJY" + +"EMSMJTZDXLCJYRYYNWJBNGZZTMJXLTBSLYRZPYLSSCNXPHLLHYLLQQZQLXYMRSYCXZLMMCZLTZSDWTJJLLNZGGQXPFSKYGYGHBFZPDKMWGHCXMSGD" + +"XJMCJZDYCABXJDLNBCDQYGSKYDQTXDJJYXMSZQAZDZFSLQXYJSJZYLBTXXWXQQZBJZUFBBLYLWDSLJHXJYZJWTDJCZFQZQZZDZSXZZQLZCDZFJHYS" + +"PYMPQZMLPPLFFXJJNZZYLSJEYQZFPFZKSYWJJJHRDJZZXTXXGLGHYDXCSKYSWMMZCWYBAZBJKSHFHJCXMHFQHYXXYZFTSJYZFXYXPZLCHMZMBXHZZ" + +"SXYFYMNCWDABAZLXKTCSHHXKXJJZJSTHYGXSXYYHHHJWXKZXSSBZZWHHHCWTZZZPJXSNXQQJGZYZYWLLCWXZFXXYXYHXMKYYSWSQMNLNAYCYSPMJK" + +"HWCQHYLAJJMZXHMMCNZHBHXCLXTJPLTXYJHDYYLTTXFSZHYXXSJBJYAYRSMXYPLCKDUYHLXRLNLLSTYZYYQYGYHHSCCSMZCTZQXKYQFPYYRPFFLKQ" + +"UNTSZLLZMWWTCQQYZWTLLMLMPWMBZSSTZRBPDDTLQJJBXZCSRZQQYGWCSXFWZLXCCRSZDZMCYGGDZQSGTJSWLJMYMMZYHFBJDGYXCCPSHXNZCSBSJ" + +"YJGJMPPWAFFYFNXHYZXZYLREMZGZCYZSSZDLLJCSQFNXZKPTXZGXJJGFMYYYSNBTYLBNLHPFZDCYFBMGQRRSSSZXYSGTZRNYDZZCDGPJAFJFZKNZB" + +"LCZSZPSGCYCJSZLMLRSZBZZLDLSLLYSXSQZQLYXZLSKKBRXBRBZCYCXZZZEEYFGKLZLYYHGZSGZLFJHGTGWKRAAJYZKZQTSSHJJXDCYZUYJLZYRZD" + +"QQHGJZXSSZBYKJPBFRTJXLLFQWJHYLQTYMBLPZDXTZYGBDHZZRBGXHWNJTJXLKSCFSMWLSDQYSJTXKZSCFWJLBXFTZLLJZLLQBLSQMQQCGCZFPBPH" + +"ZCZJLPYYGGDTGWDCFCZQYYYQYSSCLXZSKLZZZGFFCQNWGLHQYZJJCZLQZZYJPJZZBPDCCMHJGXDQDGDLZQMFGPSYTSDYFWWDJZJYSXYYCZCYHZWPB" + +"YKXRYLYBHKJKSFXTZJMMCKHLLTNYYMSYXYZPYJQYCSYCWMTJJKQYRHLLQXPSGTLYYCLJSCPXJYZFNMLRGJJTYZBXYZMSJYJHHFZQMSYXRSZCWTLRT" + +"QZSSTKXGQKGSPTGCZNJSJCQCXHMXGGZTQYDJKZDLBZSXJLHYQGGGTHQSZPYHJHHGYYGKGGCWJZZYLCZLXQSFTGZSLLLMLJSKCTBLLZZSZMMNYTPZS" + +"XQHJCJYQXYZXZQZCPSHKZZYSXCDFGMWQRLLQXRFZTLYSTCTMJCXJJXHJNXTNRZTZFQYHQGLLGCXSZSJDJLJCYDSJTLNYXHSZXCGJZYQPYLFHDJSBP" + +"CCZHJJJQZJQDYBSSLLCMYTTMQTBHJQNNYGKYRQYQMZGCJKPDCGMYZHQLLSLLCLMHOLZGDYYFZSLJCQZLYLZQJESHNYLLJXGJXLYSYYYXNBZLJSSZC" + +"QQCJYLLZLTJYLLZLLBNYLGQCHXYYXOXCXQKYJXXXYKLXSXXYQXCYKQXQCSGYXXYQXYGYTQOHXHXPYXXXULCYEYCHZZCBWQBBWJQZSCSZSSLZYLKDE" + +"SJZWMYMCYTSDSXXSCJPQQSQYLYYZYCMDJDZYWCBTJSYDJKCYDDJLBDJJSODZYSYXQQYXDHHGQQYQHDYXWGMMMAJDYBBBPPBCMUUPLJZSMTXERXJMH" + +"QNUTPJDCBSSMSSSTKJTSSMMTRCPLZSZMLQDSDMJMQPNQDXCFYNBFSDQXYXHYAYKQYDDLQYYYSSZBYDSLNTFQTZQPZMCHDHCZCWFDXTMYQSPHQYYXS" + +"RGJCWTJTZZQMGWJJTJHTQJBBHWZPXXHYQFXXQYWYYHYSCDYDHHQMNMTMWCPBSZPPZZGLMZFOLLCFWHMMSJZTTDHZZYFFYTZZGZYSKYJXQYJZQBHMB" + +"ZZLYGHGFMSHPZFZSNCLPBQSNJXZSLXXFPMTYJYGBXLLDLXPZJYZJYHHZCYWHJYLSJEXFSZZYWXKZJLUYDTMLYMQJPWXYHXSKTQJEZRPXXZHHMHWQP" + +"WQLYJJQJJZSZCPHJLCHHNXJLQWZJHBMZYXBDHHYPZLHLHLGFWLCHYYTLHJXCJMSCPXSTKPNHQXSRTYXXTESYJCTLSSLSTDLLLWWYHDHRJZSFGXTSY" + +"CZYNYHTDHWJSLHTZDQDJZXXQHGYLTZPHCSQFCLNJTCLZPFSTPDYNYLGMJLLYCQHYSSHCHYLHQYQTMZYPBYWRFQYKQSYSLZDQJMPXYYSSRHZJNYWTQ" + +"DFZBWWTWWRXCWHGYHXMKMYYYQMSMZHNGCEPMLQQMTCWCTMMPXJPJJHFXYYZSXZHTYBMSTSYJTTQQQYYLHYNPYQZLCYZHZWSMYLKFJXLWGXYPJYTYS" + +"YXYMZCKTTWLKSMZSYLMPWLZWXWQZSSAQSYXYRHSSNTSRAPXCPWCMGDXHXZDZYFJHGZTTSBJHGYZSZYSMYCLLLXBTYXHBBZJKSSDMALXHYCFYGMQYP" + +"JYCQXJLLLJGSLZGQLYCJCCZOTYXMTMTTLLWTGPXYMZMKLPSZZZXHKQYSXCTYJZYHXSHYXZKXLZWPSQPYHJWPJPWXQQYLXSDHMRSLZZYZWTTCYXYSZ" + +"ZSHBSCCSTPLWSSCJCHNLCGCHSSPHYLHFHHXJSXYLLNYLSZDHZXYLSXLWZYKCLDYAXZCMDDYSPJTQJZLNWQPSSSWCTSTSZLBLNXSMNYYMJQBQHRZWT" + +"YYDCHQLXKPZWBGQYBKFCMZWPZLLYYLSZYDWHXPSBCMLJBSCGBHXLQHYRLJXYSWXWXZSLDFHLSLYNJLZYFLYJYCDRJLFSYZFSLLCQYQFGJYHYXZLYL" + +"MSTDJCYHBZLLNWLXXYGYYHSMGDHXXHHLZZJZXCZZZCYQZFNGWPYLCPKPYYPMCLQKDGXZGGWQBDXZZKZFBXXLZXJTPJPTTBYTSZZDWSLCHZHSLTYXH" + +"QLHYXXXYYZYSWTXZKHLXZXZPYHGCHKCFSYHUTJRLXFJXPTZTWHPLYXFCRHXSHXKYXXYHZQDXQWULHYHMJTBFLKHTXCWHJFWJCFPQRYQXCYYYQYGRP" + +"YWSGSUNGWCHKZDXYFLXXHJJBYZWTSXXNCYJJYMSWZJQRMHXZWFQSYLZJZGBHYNSLBGTTCSYBYXXWXYHXYYXNSQYXMQYWRGYQLXBBZLJSYLPSYTJZY" + +"HYZAWLRORJMKSCZJXXXYXCHDYXRYXXJDTSQFXLYLTSFFYXLMTYJMJUYYYXLTZCSXQZQHZXLYYXZHDNBRXXXJCTYHLBRLMBRLLAXKYLLLJLYXXLYCR" + +"YLCJTGJCMTLZLLCYZZPZPCYAWHJJFYBDYYZSMPCKZDQYQPBPCJPDCYZMDPBCYYDYCNNPLMTMLRMFMMGWYZBSJGYGSMZQQQZTXMKQWGXLLPJGZBQCD" + +"JJJFPKJKCXBLJMSWMDTQJXLDLPPBXCWRCQFBFQJCZAHZGMYKPHYYHZYKNDKZMBPJYXPXYHLFPNYYGXJDBKXNXHJMZJXSTRSTLDXSKZYSYBZXJLXYS" + +"LBZYSLHXJPFXPQNBYLLJQKYGZMCYZZYMCCSLCLHZFWFWYXZMWSXTYNXJHPYYMCYSPMHYSMYDYSHQYZCHMJJMZCAAGCFJBBHPLYZYLXXSDJGXDHKXX" + +"TXXNBHRMLYJSLTXMRHNLXQJXYZLLYSWQGDLBJHDCGJYQYCMHWFMJYBMBYJYJWYMDPWHXQLDYGPDFXXBCGJSPCKRSSYZJMSLBZZJFLJJJLGXZGYXYX" + +"LSZQYXBEXYXHGCXBPLDYHWETTWWCJMBTXCHXYQXLLXFLYXLLJLSSFWDPZSMYJCLMWYTCZPCHQEKCQBWLCQYDPLQPPQZQFJQDJHYMMCXTXDRMJWRHX" + +"CJZYLQXDYYNHYYHRSLSRSYWWZJYMTLTLLGTQCJZYABTCKZCJYCCQLJZQXALMZYHYWLWDXZXQDLLQSHGPJFJLJHJABCQZDJGTKHSSTCYJLPSWZLXZX" + +"RWGLDLZRLZXTGSLLLLZLYXXWGDZYGBDPHZPBRLWSXQBPFDWOFMWHLYPCBJCCLDMBZPBZZLCYQXLDOMZBLZWPDWYYGDSTTHCSQSCCRSSSYSLFYBFNT" + +"YJSZDFNDPDHDZZMBBLSLCMYFFGTJJQWFTMTPJWFNLBZCMMJTGBDZLQLPYFHYYMJYLSDCHDZJWJCCTLJCLDTLJJCPDDSQDSSZYBNDBJLGGJZXSXNLY" + +"CYBJXQYCBYLZCFZPPGKCXZDZFZTJJFJSJXZBNZYJQTTYJYHTYCZHYMDJXTTMPXSPLZCDWSLSHXYPZGTFMLCJTYCBPMGDKWYCYZCDSZZYHFLYCTYGW" + +"HKJYYLSJCXGYWJCBLLCSNDDBTZBSCLYZCZZSSQDLLMQYYHFSLQLLXFTYHABXGWNYWYYPLLSDLDLLBJCYXJZMLHLJDXYYQYTDLLLBUGBFDFBBQJZZM" + +"DPJHGCLGMJJPGAEHHBWCQXAXHHHZCHXYPHJAXHLPHJPGPZJQCQZGJJZZUZDMQYYBZZPHYHYBWHAZYJHYKFGDPFQSDLZMLJXKXGALXZDAGLMDGXMWZ" + +"QYXXDXXPFDMMSSYMPFMDMMKXKSYZYSHDZKXSYSMMZZZMSYDNZZCZXFPLSTMZDNMXCKJMZTYYMZMZZMSXHHDCZJEMXXKLJSTLWLSQLYJZLLZJSSDPP" + +"MHNLZJCZYHMXXHGZCJMDHXTKGRMXFWMCGMWKDTKSXQMMMFZZYDKMSCLCMPCGMHSPXQPZDSSLCXKYXTWLWJYAHZJGZQMCSNXYYMMPMLKJXMHLMLQMX" + +"CTKZMJQYSZJSYSZHSYJZJCDAJZYBSDQJZGWZQQXFKDMSDJLFWEHKZQKJPEYPZYSZCDWYJFFMZZYLTTDZZEFMZLBNPPLPLPEPSZALLTYLKCKQZKGEN" + +"QLWAGYXYDPXLHSXQQWQCQXQCLHYXXMLYCCWLYMQYSKGCHLCJNSZKPYZKCQZQLJPDMDZHLASXLBYDWQLWDNBQCRYDDZTJYBKBWSZDXDTNPJDTCTQDF" + +"XQQMGNXECLTTBKPWSLCTYQLPWYZZKLPYGZCQQPLLKCCYLPQMZCZQCLJSLQZDJXLDDHPZQDLJJXZQDXYZQKZLJCYQDYJPPYPQYKJYRMPCBYMCXKLLZ" + +"LLFQPYLLLMBSGLCYSSLRSYSQTMXYXZQZFDZUYSYZTFFMZZSMZQHZSSCCMLYXWTPZGXZJGZGSJSGKDDHTQGGZLLBJDZLCBCHYXYZHZFYWXYZYMSDBZ" + +"ZYJGTSMTFXQYXQSTDGSLNXDLRYZZLRYYLXQHTXSRTZNGZXBNQQZFMYKMZJBZYMKBPNLYZPBLMCNQYZZZSJZHJCTZKHYZZJRDYZHNPXGLFZTLKGJTC" + +"TSSYLLGZRZBBQZZKLPKLCZYSSUYXBJFPNJZZXCDWXZYJXZZDJJKGGRSRJKMSMZJLSJYWQSKYHQJSXPJZZZLSNSHRNYPZTWCHKLPSRZLZXYJQXQKYS" + +"JYCZTLQZYBBYBWZPQDWWYZCYTJCJXCKCWDKKZXSGKDZXWWYYJQYYTCYTDLLXWKCZKKLCCLZCQQDZLQLCSFQCHQHSFSMQZZLNBJJZBSJHTSZDYSJQJ" + +"PDLZCDCWJKJZZLPYCGMZWDJJBSJQZSYZYHHXJPBJYDSSXDZNCGLQMBTSFSBPDZDLZNFGFJGFSMPXJQLMBLGQCYYXBQKDJJQYRFKZTJDHCZKLBSDZC" + +"FJTPLLJGXHYXZCSSZZXSTJYGKGCKGYOQXJPLZPBPGTGYJZGHZQZZLBJLSQFZGKQQJZGYCZBZQTLDXRJXBSXXPZXHYZYCLWDXJJHXMFDZPFZHQHQMQ" + +"GKSLYHTYCGFRZGNQXCLPDLBZCSCZQLLJBLHBZCYPZZPPDYMZZSGYHCKCPZJGSLJLNSCDSLDLXBMSTLDDFJMKDJDHZLZXLSZQPQPGJLLYBDSZGQLBZ" + +"LSLKYYHZTTNTJYQTZZPSZQZTLLJTYYLLQLLQYZQLBDZLSLYYZYMDFSZSNHLXZNCZQZPBWSKRFBSYZMTHBLGJPMCZZLSTLXSHTCSYZLZBLFEQHLXFL" + +"CJLYLJQCBZLZJHHSSTBRMHXZHJZCLXFNBGXGTQJCZTMSFZKJMSSNXLJKBHSJXNTNLZDNTLMSJXGZJYJCZXYJYJWRWWQNZTNFJSZPZSHZJFYRDJSFS" + +"ZJZBJFZQZZHZLXFYSBZQLZSGYFTZDCSZXZJBQMSZKJRHYJZCKMJKHCHGTXKXQGLXPXFXTRTYLXJXHDTSJXHJZJXZWZLCQSBTXWXGXTXXHXFTSDKFJ" + +"HZYJFJXRZSDLLLTQSQQZQWZXSYQTWGWBZCGZLLYZBCLMQQTZHZXZXLJFRMYZFLXYSQXXJKXRMQDZDMMYYBSQBHGZMWFWXGMXLZPYYTGZYCCDXYZXY" + +"WGSYJYZNBHPZJSQSYXSXRTFYZGRHZTXSZZTHCBFCLSYXZLZQMZLMPLMXZJXSFLBYZMYQHXJSXRXSQZZZSSLYFRCZJRCRXHHZXQYDYHXSJJHZCXZBT" + +"YNSYSXJBQLPXZQPYMLXZKYXLXCJLCYSXXZZLXDLLLJJYHZXGYJWKJRWYHCPSGNRZLFZWFZZNSXGXFLZSXZZZBFCSYJDBRJKRDHHGXJLJJTGXJXXST" + +"JTJXLYXQFCSGSWMSBCTLQZZWLZZKXJMLTMJYHSDDBXGZHDLBMYJFRZFSGCLYJBPMLYSMSXLSZJQQHJZFXGFQFQBPXZGYYQXGZTCQWYLTLGWSGWHRL" + +"FSFGZJMGMGBGTJFSYZZGZYZAFLSSPMLPFLCWBJZCLJJMZLPJJLYMQDMYYYFBGYGYZMLYZDXQYXRQQQHSYYYQXYLJTYXFSFSLLGNQCYHYCWFHCCCFX" + +"PYLYPLLZYXXXXXKQHHXSHJZCFZSCZJXCPZWHHHHHAPYLQALPQAFYHXDYLUKMZQGGGDDESRNNZLTZGCHYPPYSQJJHCLLJTOLNJPZLJLHYMHEYDYDSQ" + +"YCDDHGZUNDZCLZYZLLZNTNYZGSLHSLPJJBDGWXPCDUTJCKLKCLWKLLCASSTKZZDNQNTTLYYZSSYSSZZRYLJQKCQDHHCRXRZYDGRGCWCGZQFFFPPJF" + +"ZYNAKRGYWYQPQXXFKJTSZZXSWZDDFBBXTBGTZKZNPZZPZXZPJSZBMQHKCYXYLDKLJNYPKYGHGDZJXXEAHPNZKZTZCMXCXMMJXNKSZQNMNLWBWWXJK" + +"YHCPSTMCSQTZJYXTPCTPDTNNPGLLLZSJLSPBLPLQHDTNJNLYYRSZFFJFQWDPHZDWMRZCCLODAXNSSNYZRESTYJWJYJDBCFXNMWTTBYLWSTSZGYBLJ" + +"PXGLBOCLHPCBJLTMXZLJYLZXCLTPNCLCKXTPZJSWCYXSFYSZDKNTLBYJCYJLLSTGQCBXRYZXBXKLYLHZLQZLNZCXWJZLJZJNCJHXMNZZGJZZXTZJX" + +"YCYYCXXJYYXJJXSSSJSTSSTTPPGQTCSXWZDCSYFPTFBFHFBBLZJCLZZDBXGCXLQPXKFZFLSYLTUWBMQJHSZBMDDBCYSCCLDXYCDDQLYJJWMQLLCSG" + +"LJJSYFPYYCCYLTJANTJJPWYCMMGQYYSXDXQMZHSZXPFTWWZQSWQRFKJLZJQQYFBRXJHHFWJJZYQAZMYFRHCYYBYQWLPEXCCZSTYRLTTDMQLYKMBBG" + +"MYYJPRKZNPBSXYXBHYZDJDNGHPMFSGMWFZMFQMMBCMZZCJJLCNUXYQLMLRYGQZCYXZLWJGCJCGGMCJNFYZZJHYCPRRCMTZQZXHFQGTJXCCJEAQCRJ" + +"YHPLQLSZDJRBCQHQDYRHYLYXJSYMHZYDWLDFRYHBPYDTSSCNWBXGLPZMLZZTQSSCPJMXXYCSJYTYCGHYCJWYRXXLFEMWJNMKLLSWTXHYYYNCMMCWJ" + +"DQDJZGLLJWJRKHPZGGFLCCSCZMCBLTBHBQJXQDSPDJZZGKGLFQYWBZYZJLTSTDHQHCTCBCHFLQMPWDSHYYTQWCNZZJTLBYMBPDYYYXSQKXWYYFLXX" + +"NCWCXYPMAELYKKJMZZZBRXYYQJFLJPFHHHYTZZXSGQQMHSPGDZQWBWPJHZJDYSCQWZKTXXSQLZYYMYSDZGRXCKKUJLWPYSYSCSYZLRMLQSYLJXBCX" + +"TLWDQZPCYCYKPPPNSXFYZJJRCEMHSZMSXLXGLRWGCSTLRSXBZGBZGZTCPLUJLSLYLYMTXMTZPALZXPXJTJWTCYYZLBLXBZLQMYLXPGHDSLSSDMXMB" + +"DZZSXWHAMLCZCPJMCNHJYSNSYGCHSKQMZZQDLLKABLWJXSFMOCDXJRRLYQZKJMYBYQLYHETFJZFRFKSRYXFJTWDSXXSYSQJYSLYXWJHSNLXYYXHBH" + +"AWHHJZXWMYLJCSSLKYDZTXBZSYFDXGXZJKHSXXYBSSXDPYNZWRPTQZCZENYGCXQFJYKJBZMLJCMQQXUOXSLYXXLYLLJDZBTYMHPFSTTQQWLHOKYBL" + +"ZZALZXQLHZWRRQHLSTMYPYXJJXMQSJFNBXYXYJXXYQYLTHYLQYFMLKLJTMLLHSZWKZHLJMLHLJKLJSTLQXYLMBHHLNLZXQJHXCFXXLHYHJJGBYZZK" + +"BXSCQDJQDSUJZYYHZHHMGSXCSYMXFEBCQWWRBPYYJQTYZCYQYQQZYHMWFFHGZFRJFCDPXNTQYZPDYKHJLFRZXPPXZDBBGZQSTLGDGYLCQMLCHHMFY" + +"WLZYXKJLYPQHSYWMQQGQZMLZJNSQXJQSYJYCBEHSXFSZPXZWFLLBCYYJDYTDTHWZSFJMQQYJLMQXXLLDTTKHHYBFPWTYYSQQWNQWLGWDEBZWCMYGC" + +"ULKJXTMXMYJSXHYBRWFYMWFRXYQMXYSZTZZTFYKMLDHQDXWYYNLCRYJBLPSXCXYWLSPRRJWXHQYPHTYDNXHHMMYWYTZCSQMTSSCCDALWZTCPQPYJL" + +"LQZYJSWXMZZMMYLMXCLMXCZMXMZSQTZPPQQBLPGXQZHFLJJHYTJSRXWZXSCCDLXTYJDCQJXSLQYCLZXLZZXMXQRJMHRHZJBHMFLJLMLCLQNLDXZLL" + +"LPYPSYJYSXCQQDCMQJZZXHNPNXZMEKMXHYKYQLXSXTXJYYHWDCWDZHQYYBGYBCYSCFGPSJNZDYZZJZXRZRQJJYMCANYRJTLDPPYZBSTJKXXZYPFDW" + +"FGZZRPYMTNGXZQBYXNBUFNQKRJQZMJEGRZGYCLKXZDSKKNSXKCLJSPJYYZLQQJYBZSSQLLLKJXTBKTYLCCDDBLSPPFYLGYDTZJYQGGKQTTFZXBDKT" + +"YYHYBBFYTYYBCLPDYTGDHRYRNJSPTCSNYJQHKLLLZSLYDXXWBCJQSPXBPJZJCJDZFFXXBRMLAZHCSNDLBJDSZBLPRZTSWSBXBCLLXXLZDJZSJPYLY" + +"XXYFTFFFBHJJXGBYXJPMMMPSSJZJMTLYZJXSWXTYLEDQPJMYGQZJGDJLQJWJQLLSJGJGYGMSCLJJXDTYGJQJQJCJZCJGDZZSXQGSJGGCXHQXSNQLZ" + +"ZBXHSGZXCXYLJXYXYYDFQQJHJFXDHCTXJYRXYSQTJXYEFYYSSYYJXNCYZXFXMSYSZXYYSCHSHXZZZGZZZGFJDLTYLNPZGYJYZYYQZPBXQBDZTZCZY" + +"XXYHHSQXSHDHGQHJHGYWSZTMZMLHYXGEBTYLZKQWYTJZRCLEKYSTDBCYKQQSAYXCJXWWGSBHJYZYDHCSJKQCXSWXFLTYNYZPZCCZJQTZWJQDZZZQZ" + +"LJJXLSBHPYXXPSXSHHEZTXFPTLQYZZXHYTXNCFZYYHXGNXMYWXTZSJPTHHGYMXMXQZXTSBCZYJYXXTYYZYPCQLMMSZMJZZLLZXGXZAAJZYXJMZXWD" + +"XZSXZDZXLEYJJZQBHZWZZZQTZPSXZTDSXJJJZNYAZPHXYYSRNQDTHZHYYKYJHDZXZLSWCLYBZYECWCYCRYLCXNHZYDZYDYJDFRJJHTRSQTXYXJRJH" + +"OJYNXELXSFSFJZGHPZSXZSZDZCQZBYYKLSGSJHCZSHDGQGXYZGXCHXZJWYQWGYHKSSEQZZNDZFKWYSSTCLZSTSYMCDHJXXYWEYXCZAYDMPXMDSXYB" + +"SQMJMZJMTZQLPJYQZCGQHXJHHLXXHLHDLDJQCLDWBSXFZZYYSCHTYTYYBHECXHYKGJPXHHYZJFXHWHBDZFYZBCAPNPGNYDMSXHMMMMAMYNBYJTMPX" + +"YYMCTHJBZYFCGTYHWPHFTWZZEZSBZEGPFMTSKFTYCMHFLLHGPZJXZJGZJYXZSBBQSCZZLZCCSTPGXMJSFTCCZJZDJXCYBZLFCJSYZFGSZLYBCWZZB" + +"YZDZYPSWYJZXZBDSYUXLZZBZFYGCZXBZHZFTPBGZGEJBSTGKDMFHYZZJHZLLZZGJQZLSFDJSSCBZGPDLFZFZSZYZYZSYGCXSNXXCHCZXTZZLJFZGQ" + +"SQYXZJQDCCZTQCDXZJYQJQCHXZTDLGSCXZSYQJQTZWLQDQZTQCHQQJZYEZZZPBWKDJFCJPZTYPQYQTTYNLMBDKTJZPQZQZZFPZSBNJLGYJDXJDZZK" + +"ZGQKXDLPZJTCJDQBXDJQJSTCKNXBXZMSLYJCQMTJQWWCJQNJNLLLHJCWQTBZQYDZCZPZZDZYDDCYZZZCCJTTJFZDPRRTZTJDCQTQZDTJNPLZBCLLC" + +"TZSXKJZQZPZLBZRBTJDCXFCZDBCCJJLTQQPLDCGZDBBZJCQDCJWYNLLZYZCCDWLLXWZLXRXNTQQCZXKQLSGDFQTDDGLRLAJJTKUYMKQLLTZYTDYYC" + +"ZGJWYXDXFRSKSTQTENQMRKQZHHQKDLDAZFKYPBGGPZREBZZYKZZSPEGJXGYKQZZZSLYSYYYZWFQZYLZZLZHWCHKYPQGNPGBLPLRRJYXCCSYYHSFZF" + +"YBZYYTGZXYLXCZWXXZJZBLFFLGSKHYJZEYJHLPLLLLCZGXDRZELRHGKLZZYHZLYQSZZJZQLJZFLNBHGWLCZCFJYSPYXZLZLXGCCPZBLLCYBBBBUBB" + +"CBPCRNNZCZYRBFSRLDCGQYYQXYGMQZWTZYTYJXYFWTEHZZJYWLCCNTZYJJZDEDPZDZTSYQJHDYMBJNYJZLXTSSTPHNDJXXBYXQTZQDDTJTDYYTGWS" + +"CSZQFLSHLGLBCZPHDLYZJYCKWTYTYLBNYTSDSYCCTYSZYYEBHEXHQDTWNYGYCLXTSZYSTQMYGZAZCCSZZDSLZCLZRQXYYELJSBYMXSXZTEMBBLLYY" + +"LLYTDQYSHYMRQWKFKBFXNXSBYCHXBWJYHTQBPBSBWDZYLKGZSKYHXQZJXHXJXGNLJKZLYYCDXLFYFGHLJGJYBXQLYBXQPQGZTZPLNCYPXDJYQYDYM" + +"RBESJYYHKXXSTMXRCZZYWXYQYBMCLLYZHQYZWQXDBXBZWZMSLPDMYSKFMZKLZCYQYCZLQXFZZYDQZPZYGYJYZMZXDZFYFYTTQTZHGSPCZMLCCYTZX" + +"JCYTJMKSLPZHYSNZLLYTPZCTZZCKTXDHXXTQCYFKSMQCCYYAZHTJPCYLZLYJBJXTPNYLJYYNRXSYLMMNXJSMYBCSYSYLZYLXJJQYLDZLPQBFZZBLF" + +"NDXQKCZFYWHGQMRDSXYCYTXNQQJZYYPFZXDYZFPRXEJDGYQBXRCNFYYQPGHYJDYZXGRHTKYLNWDZNTSMPKLBTHBPYSZBZTJZSZZJTYYXZPHSSZZBZ" + +"CZPTQFZMYFLYPYBBJQXZMXXDJMTSYSKKBJZXHJCKLPSMKYJZCXTMLJYXRZZQSLXXQPYZXMKYXXXJCLJPRMYYGADYSKQLSNDHYZKQXZYZTCGHZTLML" + +"WZYBWSYCTBHJHJFCWZTXWYTKZLXQSHLYJZJXTMPLPYCGLTBZZTLZJCYJGDTCLKLPLLQPJMZPAPXYZLKKTKDZCZZBNZDYDYQZJYJGMCTXLTGXSZLML" + +"HBGLKFWNWZHDXUHLFMKYSLGXDTWWFRJEJZTZHYDXYKSHWFZCQSHKTMQQHTZHYMJDJSKHXZJZBZZXYMPAGQMSTPXLSKLZYNWRTSQLSZBPSPSGZWYHT" + +"LKSSSWHZZLYYTNXJGMJSZSUFWNLSOZTXGXLSAMMLBWLDSZYLAKQCQCTMYCFJBSLXCLZZCLXXKSBZQCLHJPSQPLSXXCKSLNHPSFQQYTXYJZLQLDXZQ" + +"JZDYYDJNZPTUZDSKJFSLJHYLZSQZLBTXYDGTQFDBYAZXDZHZJNHHQBYKNXJJQCZMLLJZKSPLDYCLBBLXKLELXJLBQYCXJXGCNLCQPLZLZYJTZLJGY" + +"ZDZPLTQCSXFDMNYCXGBTJDCZNBGBQYQJWGKFHTNPYQZQGBKPBBYZMTJDYTBLSQMPSXTBNPDXKLEMYYCJYNZCTLDYKZZXDDXHQSHDGMZSJYCCTAYRZ" + +"LPYLTLKXSLZCGGEXCLFXLKJRTLQJAQZNCMBYDKKCXGLCZJZXJHPTDJJMZQYKQSECQZDSHHADMLZFMMZBGNTJNNLGBYJBRBTMLBYJDZXLCJLPLDLPC" + +"QDHLXZLYCBLCXZZJADJLNZMMSSSMYBHBSQKBHRSXXJMXSDZNZPXLGBRHWGGFCXGMSKLLTSJYYCQLTSKYWYYHYWXBXQYWPYWYKQLSQPTNTKHQCWDQK" + +"TWPXXHCPTHTWUMSSYHBWCRWXHJMKMZNGWTMLKFGHKJYLSYYCXWHYECLQHKQHTTQKHFZLDXQWYZYYDESBPKYRZPJFYYZJCEQDZZDLATZBBFJLLCXDL" + +"MJSSXEGYGSJQXCWBXSSZPDYZCXDNYXPPZYDLYJCZPLTXLSXYZYRXCYYYDYLWWNZSAHJSYQYHGYWWAXTJZDAXYSRLTDPSSYYFNEJDXYZHLXLLLZQZS" + +"JNYQYQQXYJGHZGZCYJCHZLYCDSHWSHJZYJXCLLNXZJJYYXNFXMWFPYLCYLLABWDDHWDXJMCXZTZPMLQZHSFHZYNZTLLDYWLSLXHYMMYLMBWWKYXYA" + +"DTXYLLDJPYBPWUXJMWMLLSAFDLLYFLBHHHBQQLTZJCQJLDJTFFKMMMBYTHYGDCQRDDWRQJXNBYSNWZDBYYTBJHPYBYTTJXAAHGQDQTMYSTQXKBTZP" + +"KJLZRBEQQSSMJJBDJOTGTBXPGBKTLHQXJJJCTHXQDWJLWRFWQGWSHCKRYSWGFTGYGBXSDWDWRFHWYTJJXXXJYZYSLPYYYPAYXHYDQKXSHXYXGSKQH" + +"YWFDDDPPLCJLQQEEWXKSYYKDYPLTJTHKJLTCYYHHJTTPLTZZCDLTHQKZXQYSTEEYWYYZYXXYYSTTJKLLPZMCYHQGXYHSRMBXPLLNQYDQHXSXXWGDQ" + +"BSHYLLPJJJTHYJKYPPTHYYKTYEZYENMDSHLCRPQFDGFXZPSFTLJXXJBSWYYSKSFLXLPPLBBBLBSFXFYZBSJSSYLPBBFFFFSSCJDSTZSXZRYYSYFFS" + +"YZYZBJTBCTSBSDHRTJJBYTCXYJEYLXCBNEBJDSYXYKGSJZBXBYTFZWGENYHHTHZHHXFWGCSTBGXKLSXYWMTMBYXJSTZSCDYQRCYTWXZFHMYMCXLZN" + +"SDJTTTXRYCFYJSBSDYERXJLJXBBDEYNJGHXGCKGSCYMBLXJMSZNSKGXFBNBPTHFJAAFXYXFPXMYPQDTZCXZZPXRSYWZDLYBBKTYQPQJPZYPZJZNJP" + +"ZJLZZFYSBTTSLMPTZRTDXQSJEHBZYLZDHLJSQMLHTXTJECXSLZZSPKTLZKQQYFSYGYWPCPQFHQHYTQXZKRSGTTSQCZLPTXCDYYZXSQZSLXLZMYCPC" + +"QBZYXHBSXLZDLTCDXTYLZJYYZPZYZLTXJSJXHLPMYTXCQRBLZSSFJZZTNJYTXMYJHLHPPLCYXQJQQKZZSCPZKSWALQSBLCCZJSXGWWWYGYKTJBBZT" + +"DKHXHKGTGPBKQYSLPXPJCKBMLLXDZSTBKLGGQKQLSBKKTFXRMDKBFTPZFRTBBRFERQGXYJPZSSTLBZTPSZQZSJDHLJQLZBPMSMMSXLQQNHKNBLRDD" + +"NXXDHDDJCYYGYLXGZLXSYGMQQGKHBPMXYXLYTQWLWGCPBMQXCYZYDRJBHTDJYHQSHTMJSBYPLWHLZFFNYPMHXXHPLTBQPFBJWQDBYGPNZTPFZJGSD" + +"DTQSHZEAWZZYLLTYYBWJKXXGHLFKXDJTMSZSQYNZGGSWQSPHTLSSKMCLZXYSZQZXNCJDQGZDLFNYKLJCJLLZLMZZNHYDSSHTHZZLZZBBHQZWWYCRZ" + +"HLYQQJBEYFXXXWHSRXWQHWPSLMSSKZTTYGYQQWRSLALHMJTQJSMXQBJJZJXZYZKXBYQXBJXSHZTSFJLXMXZXFGHKZSZGGYLCLSARJYHSLLLMZXELG" + +"LXYDJYTLFBHBPNLYZFBBHPTGJKWETZHKJJXZXXGLLJLSTGSHJJYQLQZFKCGNNDJSSZFDBCTWWSEQFHQJBSAQTGYPQLBXBMMYWXGSLZHGLZGQYFLZB" + +"YFZJFRYSFMBYZHQGFWZSYFYJJPHZBYYZFFWODGRLMFTWLBZGYCQXCDJYGZYYYYTYTYDWEGAZYHXJLZYYHLRMGRXXZCLHNELJJTJTPWJYBJJBXJJTJ" + +"TEEKHWSLJPLPSFYZPQQBDLQJJTYYQLYZKDKSQJYYQZLDQTGJQYZJSUCMRYQTHTEJMFCTYHYPKMHYZWJDQFHYYXWSHCTXRLJHQXHCCYYYJLTKTTYTM" + +"XGTCJTZAYYOCZLYLBSZYWJYTSJYHBYSHFJLYGJXXTMZYYLTXXYPZLXYJZYZYYPNHMYMDYYLBLHLSYYQQLLNJJYMSOYQBZGDLYXYLCQYXTSZEGXHZG" + +"LHWBLJHEYXTWQMAKBPQCGYSHHEGQCMWYYWLJYJHYYZLLJJYLHZYHMGSLJLJXCJJYCLYCJPCPZJZJMMYLCQLNQLJQJSXYJMLSZLJQLYCMMHCFMMFPQ" + +"QMFYLQMCFFQMMMMHMZNFHHJGTTHHKHSLNCHHYQDXTMMQDCYZYXYQMYQYLTDCYYYZAZZCYMZYDLZFFFMMYCQZWZZMABTBYZTDMNZZGGDFTYPCGQYTT" + +"SSFFWFDTZQSSYSTWXJHXYTSXXYLBYQHWWKXHZXWZNNZZJZJJQJCCCHYYXBZXZCYZTLLCQXYNJYCYYCYNZZQYYYEWYCZDCJYCCHYJLBTZYYCQWMPWP" + +"YMLGKDLDLGKQQBGYCHJXY"; +// 375 polyphonic words are included here +let oMultiDiff = { "19969": "DZ", "19975": "WM", "19988": "QJ", "20048": "YL", "20056": "SC", "20060": "NM", + "20094": "QG", "20127": "QJ", "20167": "QC", "20193": "YG", "20250": "KH", "20256": "ZC", "20282": "SC", + "20285": "QJG", "20291": "TD", "20314": "YD", "20340": "NE", "20375": "TD", "20389": "YJ", "20391": "CZ", + "20415": "PB", "20446": "YS", "20447": "SQ", "20504": "TC", "20608": "KG", "20854": "QJ", "20857": "ZC", + "20911": "PF", "20985": "AW", "21032": "PB", "21048": "XQ", "21049": "SC", "21089": "YS", "21119": "JC", + "21242": "SB", "21273": "SC", "21305": "YP", "21306": "QO", "21330": "ZC", "21333": "SDC", "21345": "QK", + "21378": "CA", "21397": "SC", "21414": "XS", "21442": "SC", "21477": "JG", "21480": "TD", "21484": "ZS", + "21494": "YX", "21505": "YX", "21512": "HG", "21523": "XH", "21537": "PB", "21542": "PF", "21549": "KH", + "21571": "E", "21574": "DA", "21588": "TD", "21589": "O", "21618": "ZC", "21621": "KHA", "21632": "ZJ", + "21654": "KG", "21679": "LKG", "21683": "KH", "21710": "A", "21719": "YH", "21734": "WOE", "21769": "A", + "21780": "WN", "21804": "XH", "21834": "A", "21899": "ZD", "21903": "RN", "21908": "WO", "21939": "ZC", + "21956": "SA", "21964": "YA", "21970": "TD", "22003": "A", "22031": "JG", "22040": "XS", "22060": "ZC", + "22066": "ZC", "22079": "MH", "22129": "XJ", "22179": "XA", "22237": "NJ", "22244": "TD", "22280": "JQ", + "22300": "YH", "22313": "XW", "22331": "YQ", "22343": "YJ", "22351": "PH", "22395": "DC", "22412": "TD", + "22484": "PB", "22500": "PB", "22534": "ZD", "22549": "DH", "22561": "PB", "22612": "TD", "22771": "KQ", + "22831": "HB", "22841": "JG", "22855": "QJ", "22865": "XQ", "23013": "ML", "23081": "WM", "23487": "SX", + "23558": "QJ", "23561": "YW", "23586": "YW", "23614": "YW", "23615": "SN", "23631": "PB", "23646": "ZS", + "23663": "ZT", "23673": "YG", "23762": "TD", "23769": "ZS", "23780": "QJ", "23884": "QK", "24055": "XH", + "24113": "DC", "24162": "ZC", "24191": "GA", "24273": "QJ", "24324": "NL", "24377": "TD", "24378": "QJ", + "24439": "PF", "24554": "ZS", "24683": "TD", "24694": "WE", "24733": "LK", "24925": "TN", "25094": "ZG", + "25100": "XQ", "25103": "XH", "25153": "PB", "25170": "PB", "25179": "KG", "25203": "PB", "25240": "ZS", + "25282": "FB", "25303": "NA", "25324": "KG", "25341": "ZY", "25373": "WZ", "25375": "XJ", "25384": "A", + "25457": "A", "25528": "SD", "25530": "SC", "25552": "TD", "25774": "ZC", "25874": "ZC", "26044": "YW", + "26080": "WM", "26292": "PB", "26333": "PB", "26355": "ZY", "26366": "CZ", "26397": "ZC", "26399": "QJ", + "26415": "ZS", "26451": "SB", "26526": "ZC", "26552": "JG", "26561": "TD", "26588": "JG", "26597": "CZ", + "26629": "ZS", "26638": "YL", "26646": "XQ", "26653": "KG", "26657": "XJ", "26727": "HG", "26894": "ZC", + "26937": "ZS", "26946": "ZC", "26999": "KJ", "27099": "KJ", "27449": "YQ", "27481": "XS", "27542": "ZS", + "27663": "ZS", "27748": "TS", "27784": "SC", "27788": "ZD", "27795": "TD", "27812": "O", "27850": "PB", + "27852": "MB", "27895": "SL", "27898": "PL", "27973": "QJ", "27981": "KH", "27986": "HX", "27994": "XJ", + "28044": "YC", "28065": "WG", "28177": "SM", "28267": "QJ", "28291": "KH", "28337": "ZQ", "28463": "TL", + "28548": "DC", "28601": "TD", "28689": "PB", "28805": "JG", "28820": "QG", "28846": "PB", "28952": "TD", + "28975": "ZC", "29100": "A", "29325": "QJ", "29575": "SL", "29602": "FB", "30010": "TD", "30044": "CX", + "30058": "PF", "30091": "YSP", "30111": "YN", "30229": "XJ", "30427": "SC", "30465": "SX", "30631": "YQ", + "30655": "QJ", "30684": "QJG", "30707": "SD", "30729": "XH", "30796": "LG", "30917": "PB", "31074": "NM", + "31085": "JZ", "31109": "SC", "31181": "ZC", "31192": "MLB", "31293": "JQ", "31400": "YX", "31584": "YJ", + "31896": "ZN", "31909": "ZY", "31995": "XJ", "32321": "PF", "32327": "ZY", "32418": "HG", "32420": "XQ", + "32421": "HG", "32438": "LG", "32473": "GJ", "32488": "TD", "32521": "QJ", "32527": "PB", "32562": "ZSQ", + "32564": "JZ", "32735": "ZD", "32793": "PB", "33071": "PF", "33098": "XL", "33100": "YA", "33152": "PB", + "33261": "CX", "33324": "BP", "33333": "TD", "33406": "YA", "33426": "WM", "33432": "PB", "33445": "JG", + "33486": "ZN", "33493": "TS", "33507": "QJ", "33540": "QJ", "33544": "ZC", "33564": "XQ", "33617": "YT", + "33632": "QJ", "33636": "XH", "33637": "YX", "33694": "WG", "33705": "PF", "33728": "YW", "33882": "SR", + "34067": "WM", "34074": "YW", "34121": "QJ", "34255": "ZC", "34259": "XL", "34425": "JH", "34430": "XH", + "34485": "KH", "34503": "YS", "34532": "HG", "34552": "XS", "34558": "YE", "34593": "ZL", "34660": "YQ", + "34892": "XH", "34928": "SC", "34999": "QJ", "35048": "PB", "35059": "SC", "35098": "ZC", "35203": "TQ", + "35265": "JX", "35299": "JX", "35782": "SZ", "35828": "YS", "35830": "E", "35843": "TD", "35895": "YG", + "35977": "MH", "36158": "JG", "36228": "QJ", "36426": "XQ", "36466": "DC", "36710": "JC", "36711": "ZYG", + "36767": "PB", "36866": "SK", "36951": "YW", "37034": "YX", "37063": "XH", "37218": "ZC", "37325": "ZC", + "38063": "PB", "38079": "TD", "38085": "QY", "38107": "DC", "38116": "TD", "38123": "YD", "38224": "HG", + "38241": "XTC", "38271": "ZC", "38415": "YE", "38426": "KH", "38461": "YD", "38463": "AE", "38466": "PB", + "38477": "XJ", "38518": "YT", "38551": "WK", "38585": "ZC", "38704": "XS", "38739": "LJ", "38761": "GJ", + "38808": "SQ", "39048": "JG", "39049": "XJ", "39052": "HG", "39076": "CZ", "39271": "XT", "39534": "TD", + "39552": "TD", "39584": "PB", "39647": "SB", "39730": "LG", "39748": "TPB", "40109": "ZQ", "40479": "ND", + "40516": "HG", "40536": "HG", "40583": "QJ", "40765": "YQ", "40784": "QJ", "40840": "YK", "40863": "QJG" }; + +// Program that returns the first letter array of Chinese characters +export function makePy(str) { + if (typeof(str) != "string") + throw new Error("函数makePy需要字符串类型参数!"); + var arrResult = []; + // Convert string to array + for (var i = 0, len = str.length; i < len; i++) { + var ch = str.charAt(i); + arrResult.push(checkCh(ch)); + } + return mkRslt(arrResult); +} + +// Check processing Chinese characters +function checkCh(ch) { + var uni = ch.charCodeAt(Constants.CHAR_CODE); + // If it is not within the scope of Chinese character processing, return the original character, and you can also call your own processing function + if (uni > Constants.UNI_MAX || uni < Constants.UNI_MIN) + return ch; //dealWithOthers(ch); + // Check whether it is a polyphonic word, it is processed as a polyphonic word, if not, just find the corresponding first letter in the strChineseFirstPY string. + return (oMultiDiff[uni] ? oMultiDiff[uni] : (strChineseFirstPY.charAt(uni - Constants.UNI_MIN))); +} + +// Process the characters and return an array of letters +function mkRslt(arr) { + var arrRslt = [""]; + for (var i = 0, len = arr.length; i < len; i++) { + var str = arr[i]; + var strlen = str.length; + if (strlen == 1) { + for (var k = 0; k < arrRslt.length; k++) { + arrRslt[k] += str; + } + } else { + var tmpArr = arrRslt.slice(0); + arrRslt = []; + for (k = 0; k < strlen; k++) { + // Copy an identical arrRslt + var tmp = tmpArr.slice(0); + // Add the current character str[k] to the end of each element + for (var j = 0; j < tmp.length; j++) { + tmp[j] += str.charAt(k); + } + // Concatenate the copied and modified array to arrRslt + arrRslt = arrRslt.concat(tmp); + } + } + } + return arrRslt; +} + +/** + * Get the corresponding permission group id according to the permission + * @param {String} permission app name id + * @return {Number} groupId + */ +export function getPermissionGroup(permission: string) { + for (var i = 0; i < permissionGroups.length; i++) { + if (permissionGroups[i].permissionName == permission) { + return groups[permissionGroups[i].groupId]; + } + } +} diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/pages/application-secondary.ets b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/pages/application-secondary.ets new file mode 100644 index 000000000..f050e690e --- /dev/null +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/pages/application-secondary.ets @@ -0,0 +1,290 @@ +/* + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { backBar } from "../common/components/backBar.ets"; +import router from '@system.router'; +import abilityAccessCtrl from '@ohos.abilityAccessCtrl'; +import { groups } from "../common/model/permissionGroup.ets"; +import Constants from '../common/utils/constant.ets'; + +const allowedStatus = 0; // Status: Allowed +const bannedStatus = 1; // Status: Banned +class AllowedObj { + groupName: string; + permission: string; + constructor(groupName: string, permission: string) { + this.groupName = groupName; + this.permission = permission; + } +} // Class Allowed +class BannedObj { + groupName: string; + permission: string; + constructor(groupName: string, permission: string) { + this.groupName = groupName; + this.permission = permission; + } +} // Class Banned + +@Entry +@Component +struct appNamePlusPage { + @State allowedListItem: AllowedObj[] = []; // Array of allowed permissions + @State bannedListItem: BannedObj[] = []; // array of forbidden permissions + private routerData = router.getParams().routerData; // Routing jump data + + @Builder ListItemLayout(item, index, status) { + ListItem() { + Row() { + Column() { + Flex({ justifyContent: FlexAlign.Start, alignItems: ItemAlign.Center }) { + Row() { + Column() { + Row() { + Flex({ justifyContent: FlexAlign.Start, alignItems: ItemAlign.Center }) { + Text(item.groupName) + .fontSize(Constants.TEXT_MIDDLE_FONT_SIZE) + .fontColor($r('app.color.text_color')) + }.margin({ top: Constants.FLEX_MARGIN_TOP, bottom: Constants.FLEX_MARGIN_BOTTOM }) + }.height(Constants.FULL_HEIGHT) + }.flexGrow(Constants.FLEX_GROW).constraintSize({ minHeight: Constants.CONSTRAINTSIZE_MINHEIGHT }) + Image($r('app.media.rightarrow')) + .objectFit(ImageFit.Contain) + .height(Constants.IMAGE_HEIGHT) + .width(Constants.IMAGE_WIDTH) + } + .width(Constants.FULL_WIDTH) + .height(Constants.LISTITEM_ROW_HEIGHT) + } + if (!index) { + Row() { + Column() + .backgroundColor($r('app.color.text_decoration_color')) + .width(Constants.FULL_WIDTH) + .height(Constants.TEXT_DECORATION_HEIGHT) + } + } + }.onClick(() => { + if (status === 'allow') { + router.push({ + uri: 'pages/application-tertiary', + params: { + routerData: this.routerData.bundleName, + backTitle: item.groupName, + permission: item.permission, + status: allowedStatus + } + }); + } + else if (status === 'banned') { + router.push({ + uri: 'pages/application-tertiary', + params: { + routerData: this.routerData.bundleName, + backTitle: item.groupName, + permission: item.permission, + status: bannedStatus + } + }); + } + }) + } + }.padding({ left: Constants.LISTITEM_PADDING_LEFT, right: Constants.LISTITEM_PADDING_RIGHT }) + } + + /** + * Initialize permission status information and group permission information + */ + async initialPermissions() { + var reqGroups = this.routerData.permissions; + if (!reqGroups.length) { + this.allowedListItem = []; + this.bannedListItem = []; + return; + } + var ids = this.routerData.groupId; + for (var i = 0; i < reqGroups.length; i++) { + var isGranted = true; + var reqPermissions = groups[ids[i]].permissions; + for (var j = 0; j < reqPermissions.length; j++) { + var res = await abilityAccessCtrl.createAtManager().verifyAccessToken( + this.routerData.tokenId, reqPermissions[j]); + if (res != 0) { + isGranted = false; + break; + } + } + if (isGranted) { + this.allowedListItem.push(new AllowedObj(groups[ids[i]].groupName, reqPermissions[0])); + } else { + this.bannedListItem.push(new BannedObj(groups[ids[i]].groupName, reqPermissions[0])); + } + } + } + + /** + * Lifecycle function, triggered once when this page is displayed + */ + onPageShow() { + this.initialPermissions(); + } + + /** + * Lifecycle function, triggered once when this page disappears + */ + onPageHide() { + setTimeout(()=> { + this.allowedListItem = []; + this.bannedListItem = []; + }, Constants.DELAY_TIME) + } + + build() { + Column(){ + GridContainer({ gutter: Constants.GUTTER }) { + Row({}) { + Row() + .useSizeType({ + xs: { span: Constants.LEFT_XS_SPAN, offset: Constants.LEFT_XS_OFFSET }, + sm: { span: Constants.LEFT_SM_SPAN, offset: Constants.LEFT_SM_OFFSET }, + md: { span: Constants.LEFT_MD_SPAN, offset: Constants.LEFT_MD_OFFSET }, + lg: { span: Constants.LEFT_LG_SPAN, offset: Constants.LEFT_LG_OFFSET } + }) + .height(Constants.FULL_HEIGHT) + .backgroundColor(Color.White) + Row() { + Column() { + Row() { + backBar({ title: JSON.stringify(this.routerData.labelId) }) + } + Row() { + Column() { + if (!this.allowedListItem.length && !this.bannedListItem.length) { + Row() { + List() { + ListItem() { + Row() { + Column() { + Flex({ justifyContent: FlexAlign.Start, alignItems: ItemAlign.Center }) { + Row() { + Column() { + Row() { + Flex({ justifyContent: FlexAlign.Start, alignItems: ItemAlign.Center }) { + Text($r('app.string.no_permission')) + .fontSize(Constants.TEXT_MIDDLE_FONT_SIZE) + .fontColor($r('app.color.text_color')) + }.margin({ top: Constants.FLEX_MARGIN_TOP, bottom: Constants.FLEX_MARGIN_BOTTOM }) + }.height(Constants.FULL_HEIGHT) + }.flexGrow(Constants.FLEX_GROW) + .constraintSize({minHeight: Constants.CONSTRAINTSIZE_MINHEIGHT }) + } + .width(Constants.FULL_WIDTH) + .height(Constants.LISTITEM_ROW_HEIGHT) + } + } + } + }.padding({ left: Constants.LISTITEM_PADDING_LEFT, right: Constants.LISTITEM_PADDING_RIGHT }) + } + .backgroundColor($r('app.color.default_background_color')) + .borderRadius(Constants.BORDER_RADIUS) + .padding({ top: Constants.LIST_PADDING_TOP, bottom: Constants.LIST_PADDING_BOTTOM }) + }.margin({ top: Constants.ROW_MARGIN_TOP }) + .padding({ left: Constants.LISTITEM_PADDING_LEFT, right: Constants.LISTITEM_PADDING_RIGHT }) + } else { + if (this.allowedListItem.length) { + Row() { + Flex({ justifyContent: FlexAlign.Start, alignItems: ItemAlign.Center }) { + Text($r('app.string.allowed')) + .fontSize(Constants.TEXT_SMAL_FONT_SIZE) + .margin({ + top: Constants.SECONDARY_TEXT_MARGIN_TOP, + left: Constants.SECONDARY_TEXT_MARGIN_LEFT + }) + } + } + Row() { + List() { + ForEach(this.allowedListItem.slice(Constants.SLICE_START, this.allowedListItem.length - 1), + (item) => { + this.ListItemLayout(item, Constants.SLICE_START_INDEX, 'allow') + }, item => item.toString()) + ForEach(this.allowedListItem.slice(Constants.SLICE_END), (item, index) => { + this.ListItemLayout(item, Constants.SLICE_END_INDEX, 'allow') + }, item => item.toString()) + } + .backgroundColor($r('app.color.default_background_color')) + .borderRadius(Constants.BORDER_RADIUS) + .padding({ top: Constants.LIST_PADDING_TOP, bottom: Constants.LIST_PADDING_BOTTOM }) + }.margin({ top: Constants.ROW_MARGIN_TOP }) + .padding({ left: Constants.LISTITEM_PADDING_LEFT, right: Constants.LISTITEM_PADDING_RIGHT }) + } + if (this.bannedListItem.length) { + Row() { + Flex({ justifyContent: FlexAlign.Start, alignItems: ItemAlign.Center }) { + Text($r('app.string.banned')) + .fontSize(Constants.TEXT_SMAL_FONT_SIZE) + .margin({ + top: Constants.SECONDARY_TEXT_MARGIN_TOP, + left: Constants.SECONDARY_TEXT_MARGIN_LEFT + }) + } + } + Row() { + List() { + ForEach(this.bannedListItem.slice(Constants.SLICE_START, this.bannedListItem.length - 1), + (item) => { + this.ListItemLayout(item, Constants.SLICE_START_INDEX, 'banned') + }, item => item.toString()) + ForEach(this.bannedListItem.slice(Constants.SLICE_END), (item) => { + this.ListItemLayout(item, Constants.SLICE_END_INDEX, 'banned') + }, item => item.toString()) + } + .backgroundColor($r('app.color.default_background_color')) + .borderRadius(Constants.BORDER_RADIUS) + .padding({ top: Constants.LIST_PADDING_TOP, bottom: Constants.LIST_PADDING_BOTTOM }) + }.margin({ top: Constants.ROW_MARGIN_TOP }) + .padding({ left: Constants.LISTITEM_PADDING_LEFT, right: Constants.LISTITEM_PADDING_RIGHT }) + } + } + } + .width(Constants.FULL_WIDTH) + .height(Constants.FULL_HEIGHT) + .backgroundColor($r('app.color.background_color')) + } + .layoutWeight(Constants.LAYOUT_WEIGHT) + } + } + .useSizeType({ + xs: { span: Constants.MIDDLE_XS_SPAN, offset: Constants.MIDDLE_XS_OFFSET }, + sm: { span: Constants.MIDDLE_SM_SPAN, offset: Constants.MIDDLE_SM_OFFSET }, + md: { span: Constants.MIDDLE_MD_SPAN, offset: Constants.MIDDLE_MD_OFFSET }, + lg: { span: Constants.MIDDLE_LG_SPAN, offset: Constants.MIDDLE_LG_OFFSET } + }) + .height(Constants.FULL_HEIGHT) + Row() + .useSizeType({ + xs: { span: Constants.RIGHT_XS_SPAN, offset: Constants.RIGHT_XS_OFFSET }, + sm: { span: Constants.RIGHT_SM_SPAN, offset: Constants.RIGHT_SM_OFFSET }, + md: { span: Constants.RIGHT_MD_SPAN, offset: Constants.RIGHT_MD_OFFSET }, + lg: { span: Constants.RIGHT_LG_SPAN, offset: Constants.RIGHT_LG_OFFSET } + }) + .height(Constants.FULL_HEIGHT) + .backgroundColor(Color.White) + } + .height(Constants.FULL_HEIGHT) + }.backgroundColor(Color.White) + } + } +} diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/pages/application-tertiary.ets b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/pages/application-tertiary.ets new file mode 100644 index 000000000..ce2a88334 --- /dev/null +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/pages/application-tertiary.ets @@ -0,0 +1,351 @@ +/* + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { backBar } from "../common/components/backBar.ets"; +import router from '@system.router'; +import bundle from "@ohos.bundle"; +import { getAppLabel, getAppIcon } from "../common/utils/utils"; +import abilityAccessCtrl from '@ohos.abilityAccessCtrl'; +import { authorizeDialog } from "../common/components/dialog.ets"; +import { permissionDescriptions } from "../common/model/permissionGroup.ets"; +import Constants from '../common/utils/constant.ets'; + +let routerData = router.getParams().routerData; // Routing jump data +let backTitle = router.getParams().backTitle; // return title name +let status = router.getParams().status; // Status: Allowed, Forbidden +let permission = router.getParams().permission; // permission name +class MeidaDocObj { + name: string + index: number + groupName: string + accessTokenId: string + permission: string + constructor( + name: string, + index: number, + groupName: string, + accessTokenId: string, + permission: string + ) { + this.name = name + this.index = index + this.groupName = groupName + this.accessTokenId = accessTokenId + this.permission = permission + } +}; // permission information class +class MediaListObj { + labelId: string + iconId: string + versionName: string + description: string + constructor( + labelId: string, + iconId: string, + versionName: string, + description: string + ) { + this.labelId = labelId + this.iconId = iconId + this.versionName = versionName + this.description = description + } +}; // Permission application information class + +@Entry +@Component +struct mediaDocumentPage { + build() { + Column() { + GridContainer({ gutter: Constants.GUTTER }) { + Row() { + Row() + .useSizeType({ + xs: { span: Constants.LEFT_XS_SPAN, offset: Constants.LEFT_XS_OFFSET }, + sm: { span: Constants.LEFT_SM_SPAN, offset: Constants.LEFT_SM_OFFSET }, + md: { span: Constants.LEFT_MD_SPAN, offset: Constants.LEFT_MD_OFFSET }, + lg: { span: Constants.LEFT_LG_SPAN, offset: Constants.LEFT_LG_OFFSET } + }) + .height(Constants.FULL_HEIGHT) + .backgroundColor(Color.White) + Row() { + Column() { + Row() { + backBar({ title: JSON.stringify(backTitle) }) + } + Row() { + Column() { + mediaDocumentItem() + }.width(Constants.FULL_WIDTH) + } + .layoutWeight(Constants.LAYOUT_WEIGHT) + } + } + .useSizeType({ + xs: { span: Constants.MIDDLE_XS_SPAN, offset: Constants.MIDDLE_XS_OFFSET }, + sm: { span: Constants.MIDDLE_SM_SPAN, offset: Constants.MIDDLE_SM_OFFSET }, + md: { span: Constants.MIDDLE_MD_SPAN, offset: Constants.MIDDLE_MD_OFFSET }, + lg: { span: Constants.MIDDLE_LG_SPAN, offset: Constants.MIDDLE_LG_OFFSET } + }) + .height(Constants.FULL_HEIGHT) + Row() + .useSizeType({ + xs: { span: Constants.RIGHT_XS_SPAN, offset: Constants.RIGHT_XS_OFFSET }, + sm: { span: Constants.RIGHT_SM_SPAN, offset: Constants.RIGHT_SM_OFFSET }, + md: { span: Constants.RIGHT_MD_SPAN, offset: Constants.RIGHT_MD_OFFSET }, + lg: { span: Constants.RIGHT_LG_SPAN, offset: Constants.RIGHT_LG_OFFSET } + }) + .height(Constants.FULL_HEIGHT) + .backgroundColor(Color.White) + } + .height(Constants.FULL_HEIGHT) + } + }.backgroundColor(Color.White) + } +} + +@Component +struct mediaDocumentItem { + @State mediaDocListItem: MeidaDocObj[] = []; // Permission information array + @State mediaListItem: MediaListObj = { + labelId: '', + iconId: '', + versionName: '', + description: '' + }; // application info array + @State isCheckList: boolean[] = []; // Permission status array + + authorizeDialogController: CustomDialogController = new CustomDialogController({ + builder: authorizeDialog({ }), + autoCancel: true, + alignment: DialogAlignment.Center + }); + + /** + * Grant permissions to the app + * @param {Number} accessTokenId + * @param {String} permission permission name + */ + async grantUserGrantedPermission(accessTokenId, permission) { + var permissionFlag = await abilityAccessCtrl.createAtManager(). + getPermissionFlags(accessTokenId, permission); + abilityAccessCtrl.createAtManager().grantUserGrantedPermission( + accessTokenId, permission, permissionFlag).then(result => { + // result: 0 Authorization succeeded; result: -1 Authorization failed + if (result !== Constants.PERMISSION_INDEX) { + this.authorizeDialogController.open(); + setTimeout(()=> { + this.authorizeDialogController.close(); + }, Constants.DELAY_TIME) + } else { + this.isCheckList = [true, false]; + } + }).catch(error => { + }) + } + + /** + * Deauthorize the app + * @param {Number} accessTokenId + * @param {String} permission permission name + */ + async revokeUserGrantedPermission(accessTokenId, permission) { + var permissionFlag = await abilityAccessCtrl.createAtManager(). + getPermissionFlags(accessTokenId, permission); + abilityAccessCtrl.createAtManager().revokeUserGrantedPermission( + accessTokenId, permission, permissionFlag).then(result => { + // result: 0 successfully cancel the authorization; result: -1 cancel the authorization failed + if (result !== Constants.PERMISSION_INDEX) { + this.authorizeDialogController.open(); + setTimeout(()=> { + this.authorizeDialogController.close(); + }, Constants.DELAY_TIME) + } else { + this.isCheckList = [false, true]; + } + }) + } + + /** + * Lifecycle function, executed when the page is initialized + */ + aboutToAppear() { + let permissionDescription = permissionDescriptions[backTitle]; + bundle.getBundleInfo(routerData, Constants.PARMETER_BUNDLE_FLAG).then(res => { + Promise.all([getAppLabel(res.appInfo.labelId, res.name), + getAppIcon(res.appInfo.iconId, res.name)]) + .then((values) => { + this.mediaListItem = new MediaListObj( + String(values[0]), String(values[1]), res.versionName, permissionDescription); + }) + this.mediaDocListItem.push( + new MeidaDocObj( + Constants.RADIO_ALLOW_NAME, + Constants.RADIO_ALLOW_INDEX, + Constants.RADIO_ALLOW_GROUP_NAME, + res.appInfo.accessTokenId, + permission + ) + ); + this.mediaDocListItem.push( + new MeidaDocObj( + Constants.RADIO_BAN_NAME, + Constants.RADIO_BAN_INDEX, + Constants.RADIO_BAN_GROUP_NAME, + res.appInfo.accessTokenId, + permission + ) + ); + }).catch(() => { + this.mediaListItem = new MediaListObj('', '', '', permissionDescription); + this.mediaDocListItem.push( + new MeidaDocObj(Constants.RADIO_ALLOW_NAME, Constants.RADIO_ALLOW_INDEX, + Constants.RADIO_ALLOW_GROUP_NAME, '', permission) + ); + this.mediaDocListItem.push( + new MeidaDocObj(Constants.RADIO_BAN_NAME, Constants.RADIO_BAN_INDEX, + Constants.RADIO_BAN_GROUP_NAME, '', permission) + ); + }) + // Get permission status + if (!status) { + this.isCheckList = [true, false]; + } else { + this.isCheckList = [false, true]; + } + } + + build(){ + Column() { + Row() { + Flex({ justifyContent: FlexAlign.Start, alignItems: ItemAlign.Center }) { + Image(this.mediaListItem.iconId) + .width(Constants.TERTIARY_IMAGE_WIDTH) + .height(Constants.TERTIARY_IMAGE_HEIGHT) + .margin({ left: Constants.TERTIARY_IMAGE_MARGIN_LEFT, right: Constants.TERTIARY_IMAGE_MARGIN_RIGHT }) + Column() { + Row() { + Text(this.mediaListItem.labelId) + .fontSize(Constants.TEXT_MIDDLE_FONT_SIZE) + .fontColor($r('app.color.title_text_color')) + .textAlign(TextAlign.Start) + } + .width(Constants.TERTIARY_HALF_WIDTH) + Row() { + Text(this.mediaListItem.versionName) + .fontSize(Constants.TEXT_SMALLER_FONT_SIZE) + .textAlign(TextAlign.Start) + } + .width(Constants.TERTIARY_HALF_WIDTH) + } + } + } + Row() { + Flex({ justifyContent: FlexAlign.Start, alignItems: ItemAlign.Center }) { + Row() { + Text(this.mediaListItem.description) + .fontSize(Constants.TEXT_SMALLER_FONT_SIZE) + .textAlign(TextAlign.Start) + }.margin({ left: Constants.TERTIARY_IMAGE_MARGIN_LEFT, right: Constants.TERTIARY_IMAGE_MARGIN_RIGHT }) + } + } + .margin({ top: Constants.TERTIARY_ROW_MARGIN_TOP }) + Row() { + Flex({ justifyContent: FlexAlign.Start, alignItems: ItemAlign.Center }) { + Row() { + Text(backTitle + '访问权限') + .fontSize(Constants.TEXT_MIDDLE_FONT_SIZE) + .textAlign(TextAlign.Start) + }.margin({ left: Constants.TERTIARY_IMAGE_MARGIN_LEFT, right: Constants.TERTIARY_IMAGE_MARGIN_RIGHT }) + } + } + .height(Constants.LISTITEM_ROW_HEIGHT) + .margin({ top: Constants.TERTIARY_PERMISSION_ROW_MARGIN_TOP }) + Column() { + List() { + ForEach(this.mediaDocListItem, (item) => { + ListItem() { + Column() { + Row() { + Flex({ justifyContent: FlexAlign.Start, alignItems: ItemAlign.Center }) { + Row() { + Text(item.name) + .fontSize(Constants.TEXT_MIDDLE_FONT_SIZE) + .fontColor($r('app.color.text_color')) + .flexGrow(Constants.FLEX_GROW) + if (this.isCheckList[item.index] === true) { + Image($r('app.media.radioactive')) + .width(Constants.TERTIARY_RADIO_IMAGE_WIDTH) + .height(Constants.TERTIARY_RADIO_IMAGE_HEIGHT) + .margin({ + top: Constants.TERTIARY_RADIO_IMAGE_MARGIN_TOP + }) + } else if (this.isCheckList[item.index] === false) { + Image($r('app.media.radiodefault')) + .width(Constants.TERTIARY_RADIO_IMAGE_WIDTH) + .height(Constants.TERTIARY_RADIO_IMAGE_HEIGHT) + .margin({ + top: Constants.TERTIARY_RADIO_IMAGE_MARGIN_TOP + }) + } + } + .backgroundColor($r('app.color.default_background_color')) + .width(Constants.FULL_WIDTH) + .height(Constants.LISTITEM_ROW_HEIGHT) + .onClick(() => { + if (item.accessTokenId !== '' || item.permission !== ''){ + if (!item.index) { + this.grantUserGrantedPermission(item.accessTokenId, item.permission); + } else { + this.revokeUserGrantedPermission(item.accessTokenId, item.permission); + } + } + }) + } + } + if (!item.index) { + Row() { + Column() + .backgroundColor($r('app.color.text_decoration_color')) + .width(Constants.FULL_WIDTH) + .height(Constants.TEXT_DECORATION_HEIGHT) + } + } + } + .onClick(() => { + }) + } + .padding({ + left: Constants.TERTIARY_LISTITEM_PADDING_LEFT, + right: Constants.TERTIARY_LISTITEM_PADDING_RIGHT + }) + .margin({ top: Constants.TERTIARY_LISTITEM_MARGIN_TOP }) + }, item => item.toString()) + } + .borderRadius(Constants.BORDER_RADIUS) + .backgroundColor($r('app.color.default_background_color')) + .padding({ + left: Constants.TERTIARY_LIST_PADDING_LEFT, right: Constants.TERTIARY_LIST_PADDING_RIGHT, + top: Constants.TERTIARY_LIST_PADDING_TOP, bottom: Constants.TERTIARY_LIST_PADDING_BOTTOM + }) + } + .padding({ left: Constants.LISTITEM_PADDING_LEFT, right: Constants.LISTITEM_PADDING_RIGHT }) + .width(Constants.FULL_WIDTH) + .height(Constants.FULL_HEIGHT) + .backgroundColor($r('app.color.background_color')) + } + .backgroundColor($r('app.color.background_color')).width(Constants.FULL_WIDTH) + } +} diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/pages/authority-management.ets b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/pages/authority-management.ets new file mode 100644 index 000000000..b7491df34 --- /dev/null +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/pages/authority-management.ets @@ -0,0 +1,596 @@ +/* + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { backBar } from "../common/components/backBar.ets"; +import { alphabetIndexerComponent } from "../common/components/alphabeticalIndex.ets"; +import { textInput } from "../common/components/search.ets"; +import router from '@system.router'; +import bundle from "@ohos.bundle"; +import Resmgr from '@ohos.resourceManager'; +import { groups, userGrantPermissions,permissionGroupPermissions } from "../common/model/permissionGroup.ets"; +import { permissionGroups, permissionPermissionGroup, permissionGroupIds } from "../common/model/permissionGroup.ets"; +import { makePy } from "../common/utils/utils.ets"; +import Constants from '../common/utils/constant.ets'; + +@Extend(Image) function customizeImage(width: number, height: number) { + .objectFit(ImageFit.Contain) + .width(width) + .height(height) +}; + +interface applicationPermissions { + 'bundleName': string, + 'iconId': string, + 'permissions': string[], + 'labelId': string, + 'tokenId': number, + 'groupId': number[] +}; + +interface permissionApplications { + 'permission': string, + 'groupName': string, + 'bundleNames': string[], + 'icon': string +}; + +interface groupPermission { + 'group': string, + 'permissions': string[], + 'groupName': string, + 'icon': string +}; + +let bundleInfosList: any[] = []; // Permission information array + +@Entry +@Component +struct authorityManagementPage { + @Builder ListItemLayout(item, index) { + ListItem() { + Row() { + Column() { + Flex({ justifyContent: FlexAlign.Start, alignItems: ItemAlign.Center }) { + Row() { + Image(item.icon) + .customizeImage(Constants.MANAGEMENT_IMAGE_WIDTH, Constants.MANAGEMENT_IMAGE_HEIGHT) + .margin({ right: Constants.MANAGEMENT_IMAGE_MARGIN_RIGHT }) + Text(item.groupName) + .fontSize(Constants.TEXT_MIDDLE_FONT_SIZE) + .fontColor($r('app.color.text_color')) + .flexGrow(Constants.FLEX_GROW) + Image($r('app.media.rightarrow')) + .customizeImage(Constants.IMAGE_WIDTH, Constants.IMAGE_HEIGHT) + } + .width(Constants.FULL_WIDTH) + .height(Constants.MANAGEMENT_ROW_HEIGHT) + } + if (!index) { + Row() { + Column() + .backgroundColor($r('app.color.text_decoration_color')) + .width(Constants.MANAGEMENT_TEXT_DECORATION_WIDTH) + .height(Constants.TEXT_DECORATION_HEIGHT) + .margin({ left: Constants.MANAGEMENT_TEXT_DECORATION_MARGIN_LEFT }) + } + } + }.onClick(() => { + if (item.group == "OTHER") { + router.push({ + uri: 'pages/other-permissions', + params: { routerData: this.allPermissionApplications, backTitle: item.groupName } + }); + } else { + // 1: Indicates that there is a permission in the permission group + if (item.permissions.length > 1) { + router.push({ + uri: 'pages/authority-secondary', + params: { routerData: this.allPermissionApplications, backTitle: item.groupName } + }); + } else { + var dataList = this.allPermissionApplications.filter((ele) => { + return ele.permission === item.permissions[0] + }); + router.push({ + uri: 'pages/authority-tertiary', + params: { routerData: dataList, backTitle: item.groupName } + }); + } + } + }) + } + }.padding({ left: Constants.MANAGEMENT_ROW_PADDING_LEFT, right: Constants.MANAGEMENT_ROW_PADDING_RIGHT }) + } + + @State allApplicationPermissions: applicationPermissions[] = []; // All permissions apply + @State allPermissions: string[] = []; // All permissions + @State allSystemPermissions: string[] = []; // All system permissions + @State allUserPermissions: string[] = []; // All user rights + @State allPermissionApplications: permissionApplications [] = [] // All app permissions + @State allGroups: string[] = [] // All groups + @State allGroupPermission: groupPermission[] = [] // All group permissions + + /** + * Convert the permission array into key, value key-value objects for easy sorting + * @param {Array} order User rights + * @return {Object} return the processed object + */ + orderDict(order) { + let result = {}; + for (let i = 0; i < order.length; i++) { + let key = order[i]; + result[key] = i; + } + return result; + } + + /** + * Compare and sort the permission array according to the permission key value + * @param {String} prop Sort by permission + * @param {Object} orderSort objects to be sorted + * @return {Array} Returns a sorted array of permissions + */ + compare(prop, orderSort) { + return function(a, b) { + let aSortValue = orderSort[a[prop]]; + let bSortValue = orderSort[b[prop]]; + if (aSortValue == undefined) { + throw new Error('当前的字段不在排序列表里:' + a[prop]); + } + if (bSortValue == undefined) { + throw new Error('当前的字段不在排序列表里:' + b[prop]); + } + return aSortValue - bSortValue; + } + } + + /** + * Get all app permission information + * @param {Array} allPermissions All permissions + * @param {Object} allApplicationPermissions All app permissions + */ + getAllBundlePermissions(allPermissions: string[], allApplicationPermissions: applicationPermissions[]) { + bundle.getAllBundleInfo(Constants.PARMETER_BUNDLE_FLAG).then(async(res) => { + const bundleInfos = res; + var count = bundleInfos.length; + if (count <= 0) { + return; + } + var infoIndex = 0; + for (let i = 0; i < count; i++) { + var info = bundleInfos[i]; + // Filter blank icon icon and text label resources + try { + const ret = await bundle.queryAbilityByWant({ + bundleName: info.name, + action: "action.system.home", + entities: ["entity.system.home"] + }, bundle.BundleFlag.GET_ABILITY_INFO_WITH_APPLICATION, Constants.USERID); + } catch(e) { + continue; + } + this.deduplicationPermissions(info, allPermissions, allApplicationPermissions); + this.updateAppLabel(infoIndex, info.name, info.appInfo.label); + this.updateAppIcon(infoIndex, info.name); + infoIndex = infoIndex + 1; + } + this.getAllPermissionApplications(); + let orderSort = this.orderDict(userGrantPermissions); + this.allPermissionApplications.sort(this.compare('permission', orderSort)); + this.getAllGroupPermission(); + bundleInfosList = this.allApplicationPermissions; + bundleInfosList.forEach((item) => { + if (!isNaN(item.labelId)) { + item.alphabeticalIndex = ''; + } else { + item.alphabeticalIndex = makePy(item.labelId)[0].slice(0, 1); // Get the first letter in the returned initials array + } + }) + }) + } + + /** + * Get the corresponding permission group id according to the permission + * @param {String} permission app name id + * @return {Number} groupId + */ + getPermissionGroupByPermission(permission: string) { + for (let i = 0; i < permissionGroups.length; i++) { + if (permissionGroups[i].permissionName == permission) { + return groups[permissionGroups[i].groupId]; + } + } + } + + /** + * Get all app permission information + */ + getAllPermissionApplications() { + const this_ = this; + var leng = this_.allPermissions.length; + if (leng > 0) { + for (let i = 0; i < leng; i++) { + if (userGrantPermissions.indexOf(this_.allPermissions[i]) == -1) { + this_.allSystemPermissions.push(this_.allPermissions[i]); + } else { + this_.allUserPermissions.push(this_.allPermissions[i]); + } + } + } + for (let i = 0; i < this_.allUserPermissions.length; i++) { + var permissionGroup = this_.getPermissionGroupByPermission(this_.allUserPermissions[i]); + var icon: string = permissionGroup.icon; + var bundleNames: string[] = []; + for (let j = 0; j < this_.allApplicationPermissions.length; j++) { + if (this_.allApplicationPermissions[j].permissions.indexOf(permissionGroup.name) != -1) { + bundleNames.push(this_.allApplicationPermissions[j].bundleName); + } + } + var pa: permissionApplications = { + 'permission': this_.allUserPermissions[i], + 'groupName': permissionGroup.name, + 'bundleNames': bundleNames, + 'icon': icon + }; + this_.allPermissionApplications.push(pa); + } + } + + /** + * Get permission group information + */ + getAllGroupPermission() { + const this_ = this; + for (let i = 0; i < this_.allPermissionApplications.length; i++) { + if (this_.allGroups.length > 0) { + if (this_.allGroups.indexOf(this_.allPermissionApplications[i].groupName) == -1) { + this_.allGroups.push(this_.allPermissionApplications[i].groupName); + } + } else { + this_.allGroups.push(this_.allPermissionApplications[i].groupName); + } + } + for (let i = 0; i < this_.allGroups.length; i++) { + var permissions: string[] = permissionGroupPermissions[this_.allGroups[i]]; + var gp: groupPermission = { + "group": this_.allGroups[i], + "permissions": permissions, + 'groupName': '', + 'icon': '' + }; + this_.allGroupPermission.push(gp); + } + this.allGroupPermission.forEach((ele) => { + groups.forEach((item) => { + if (ele.group === item.name) { + ele.groupName = item.groupName; + ele.icon = item.icon; + } + }); + }) + } + + /** + * Deduplicate permission information and permission group information + * @param {Object} info bundleInfos Application Information + * @param {Array} allPermissions All permissions + * @param {Array} allApplicationPermissions All permissions apply + */ + deduplicationPermissions(info, allPermissions, allApplicationPermissions) { + var reqPermissionsLen = info.reqPermissions.length; + var reqUserPermissions: string[] = []; + if (reqPermissionsLen > 0) { + for (let j = 0; j < info.reqPermissions.length; j++) { + var permission = info.reqPermissions[j]; + if (allPermissions.indexOf(permission) == -1) { + allPermissions.push(permission); + } + if (userGrantPermissions.indexOf(permission) != -1) { + reqUserPermissions.push(permission); + } + } + } + let dePermissions = []; + let groupIds = []; + for (let i = 0; i < reqUserPermissions.length; i++) { + if(dePermissions.indexOf(permissionPermissionGroup[reqUserPermissions[i]]) == -1){ + dePermissions.push(permissionPermissionGroup[reqUserPermissions[i]]); + } + if(groupIds.indexOf(permissionGroupIds[reqUserPermissions[i]]) == -1){ + groupIds.push(permissionGroupIds[reqUserPermissions[i]]); + } + } + var ap: applicationPermissions = { + 'bundleName': info.name, + 'tokenId': info.appInfo.accessTokenId, + 'iconId': info.appInfo.iconId, + 'labelId': info.appInfo.labelId, + 'permissions': dePermissions, + 'groupId': groupIds + }; + allApplicationPermissions.push(ap); + } + + /** + * Get app name resource + * @param {Number} index index of all app permissions array + * @param {String} bundleName Package names + * @param {String} labelName Application Name + */ + updateAppLabel(index, bundleName, labelName) { + Resmgr.getResourceManager(bundleName).then(item => { + if (index >= this.allApplicationPermissions.length) { + return; + } + var info = this.allApplicationPermissions[index]; + item.getString(info['labelId'], (error, value) => { + if (value == undefined) { + info['labelId'] = labelName; + } else { + info['labelId'] = value; + } + }) + }).catch(e => { + }) + } + + /** + * Get app icon resources + * @param {Number} index index of all app permissions array + * @param {String} bundleName Package names + */ + updateAppIcon(index, bundleName) { + Resmgr.getResourceManager(bundleName).then(item => { + if (index >= this.allApplicationPermissions.length) { + return; + } + var info = this.allApplicationPermissions[index]; + item.getMediaBase64(info['iconId'], (error, value) => { + info['iconId'] = value; + }) + }).catch(e => { + }) + } + + /** + * Lifecycle function, executed when the page is initialized + */ + aboutToAppear() { + this.getAllBundlePermissions(this.allPermissions, this.allApplicationPermissions); + } + + build() { + GridContainer({ gutter: Constants.GUTTER }) { + Row() { + Row() + .useSizeType({ + xs: { span: Constants.LEFT_XS_SPAN, offset: Constants.LEFT_XS_OFFSET }, + sm: { span: Constants.LEFT_SM_SPAN, offset: Constants.LEFT_SM_OFFSET }, + md: { span: Constants.LEFT_MD_SPAN, offset: Constants.LEFT_MD_OFFSET }, + lg: { span: Constants.LEFT_LG_SPAN, offset: Constants.LEFT_LG_OFFSET } + }) + .height(Constants.FULL_HEIGHT) + Row() { + Column() { + Row() { + backBar( { title: JSON.stringify($r('app.string.authority_management')) }) + } + Row() { + Column() { + Column() { + Stack() { + Tabs() { + TabContent() { + Scroll() { + if(!this.allGroupPermission.length){ + Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }){ + Row(){ + Column() { + Image($r('app.media.loading')) + .customizeImage(Constants.MANAGEMENT_LODING_IMAGE_WIDTH, + Constants.MANAGEMENT_LODING_IMAGE_HEIGHT) + }.width(Constants.FULL_WIDTH) + .backgroundColor($r('app.color.background_color')) + }.height(Constants.MANAGEMENT_LODING_ROW_HEIGHT) + } + }else{ + Row() { + Column() { + Row() { + List() { + ForEach(this.allGroupPermission.slice(Constants.SLICE_START, + this.allGroupPermission.length - 1), (item) => { + this.ListItemLayout(item, Constants.SLICE_START_INDEX) + }, item => item.toString()) + ForEach(this.allGroupPermission.slice(Constants.SLICE_END), (item, index) => { + this.ListItemLayout(item, Constants.SLICE_END_INDEX) + }, item => item.toString()) + }.backgroundColor($r('app.color.default_background_color')) + .borderRadius(Constants.BORDER_RADIUS) + .padding({ top: Constants.LIST_PADDING_TOP, bottom: Constants.LIST_PADDING_BOTTOM }) + }.padding({ + left: Constants.MANAGEMENT_ROW_PADDING_LEFT, + right: Constants.MANAGEMENT_ROW_PADDING_RIGHT, + top: Constants.MANAGEMENT_ROW_PADDING_TOP + }) + }.width(Constants.FULL_WIDTH) + .backgroundColor($r('app.color.background_color')) + } + } + } + }.tabBar($r('app.string.authority')) + TabContent() { + Scroll() { + applicationItem({ + applicationItem: bundleInfosList, + oldApplicationItem: bundleInfosList + }) + } + }.tabBar($r('app.string.application')) + } + .backgroundColor($r('app.color.background_color')) + .barWidth(Constants.BAR_WIDTH) + .barMode(BarMode.Scrollable) + }.height(Constants.FULL_HEIGHT) + } + } + } + .layoutWeight(Constants.LAYOUT_WEIGHT) + } + } + .useSizeType({ + xs: { span: Constants.MIDDLE_XS_SPAN, offset: Constants.MIDDLE_XS_OFFSET }, + sm: { span: Constants.MIDDLE_SM_SPAN, offset: Constants.MIDDLE_SM_OFFSET }, + md: { span: Constants.MIDDLE_MD_SPAN, offset: Constants.MIDDLE_MD_OFFSET }, + lg: { span: Constants.MIDDLE_LG_SPAN, offset: Constants.MIDDLE_LG_OFFSET } + }) + .height(Constants.FULL_HEIGHT) + Row() + .useSizeType({ + xs: { span: Constants.RIGHT_XS_SPAN, offset: Constants.RIGHT_XS_OFFSET }, + sm: { span: Constants.RIGHT_SM_SPAN, offset: Constants.RIGHT_SM_OFFSET }, + md: { span: Constants.RIGHT_MD_SPAN, offset: Constants.RIGHT_MD_OFFSET }, + lg: { span: Constants.RIGHT_LG_SPAN, offset: Constants.RIGHT_LG_OFFSET } + }) + .height(Constants.FULL_HEIGHT) + } + .height(Constants.FULL_HEIGHT) + } + } +} + +@Component +struct applicationItem { + @State applicationItem: any[] = bundleInfosList // application info array + @State oldApplicationItem: any[] = bundleInfosList // Original application information array + @State searchResult: boolean = true // search results + + @Builder ListItemLayout(item, index) { + ListItem() { + Row() { + Column() { + Flex({ justifyContent: FlexAlign.Start, alignItems: ItemAlign.Center }) { + Row() { + Image(item.iconId) + .customizeImage(Constants.APPLICATION_IMAGE_WIDTH, Constants.APPLICATION_IMAGE_HEIGHT) + .margin({ right: Constants.APPLICATION_IMAGE_MARGIN_RIGHT }) + Text(item.labelId) + .fontSize(Constants.TEXT_MIDDLE_FONT_SIZE) + .fontColor($r('app.color.text_color')) + .flexGrow(Constants.FLEX_GROW) + Text(item.permissions.length + '项权限') + .fontSize(Constants.TEXT_SMAL_FONT_SIZE) + .fontColor($r('app.color.icon_color')) + .margin({ right: Constants.APPLICATION_TEXT_MARGIN_RIGHT }) + Image($r('app.media.rightarrow')) + .customizeImage(Constants.IMAGE_WIDTH, Constants.IMAGE_HEIGHT) + } + .width(Constants.FULL_WIDTH) + .height(Constants.AUTHORITY_ROW_HEIGHT) + .constraintSize({ minHeight: Constants.AUTHORITY_CONSTRAINTSIZE_MINHEIGHT }) + } + if (!index) { + Row() { + Column() + .backgroundColor($r('app.color.text_decoration_color')) + .width(Constants.APPLICATION_TEXT_DECORATION_WIDTH) + .height(Constants.TEXT_DECORATION_HEIGHT) + .margin({ left: Constants.APPLICATION_TEXT_DECORATION_MARGIN_LEFT }) + } + } + }.onClick(() => { + router.push({ + uri: 'pages/application-secondary', + params: { routerData: item } + }); + }) + } + }.padding({ + left: Constants.APPLICATION_LISTITEM_PADDING_LEFT, + right: Constants.APPLICATION_LISTITEM_PADDING_RIGHT + }) + } + + build() { + Column() { + Row() { + textInput({ + placeholder: $r('app.string.textInput_placeholder'), + applicationItem: $applicationItem, + oldApplicationItem: $oldApplicationItem, + searchResult: $searchResult + }) + }.padding({ + left: Constants.APPLICATION_TEXTINPUT_PADDING_LEFT, + top: Constants.APPLICATION_TEXTINPUT_PADDING_TOP, + right: Constants.APPLICATION_TEXTINPUT_PADDING_RIGHT + }) + Scroll() { + Row() { + Flex({ alignItems: ItemAlign.Start }) { + Column() { + if (!this.applicationItem.length) { + if (this.searchResult) { + Row() { + List() { + ForEach(this.applicationItem.slice(Constants.SLICE_START, this.applicationItem.length - 1), + (item) => { + this.ListItemLayout(item, Constants.SLICE_START_INDEX) + }, item => item.toString()) + ForEach(this.applicationItem.slice(Constants.SLICE_END), (item, index) => { + this.ListItemLayout(item, Constants.SLICE_END_INDEX) + }, item => item.toString()) + }.backgroundColor($r('app.color.default_background_color')).borderRadius(Constants.BORDER_RADIUS) + }.margin({ top: Constants.MANAGEMENT_ROW_MARGIN_TOP }) + .padding({ left: Constants.MANAGEMENT_ROW_PADDING_LEFT }) + } else { + Row() { + Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) { + Image($r('app.media.searchnoresult')) + .customizeImage(Constants.SEARCHNORESULT_IMAGE_WIDTH, Constants.SEARCHNORESULT_IMAGE_HEIGHT) + } + }.margin({ top: Constants.MANAGEMENT_ROW_MARGIN_TOP }) + .padding({ left: Constants.MANAGEMENT_ROW_PADDING_LEFT }) + } + } else { + Row() { + List() { + ForEach(this.applicationItem.slice(Constants.SLICE_START, this.applicationItem.length - 1), + (item) => { + this.ListItemLayout(item, Constants.SLICE_START_INDEX) + }, item => item.toString()) + ForEach(this.applicationItem.slice(Constants.SLICE_END), (item, index) => { + this.ListItemLayout(item, Constants.SLICE_END_INDEX) + }, item => item.toString()) + }.backgroundColor($r('app.color.default_background_color')) + .borderRadius(Constants.BORDER_RADIUS) + .padding({ top: Constants.LIST_PADDING_TOP, bottom: Constants.LIST_PADDING_BOTTOM }) + }.margin({ top: Constants.MANAGEMENT_ROW_MARGIN_TOP }) + .padding({ left: Constants.MANAGEMENT_ROW_PADDING_LEFT }) + } + } + .backgroundColor($r('app.color.background_color')) + .height(Constants.APPLICATION_COLUMN_HEIGHT) + Column() { + alphabetIndexerComponent({ applicationItem: $applicationItem, oldApplicationItem: $oldApplicationItem }) + } + .margin({ top: Constants.APPLICATION_ALPHABETINDEX_MARGIN_TOP }) + .width(Constants.APPLICATION_ALPHABETINDEX_WIDTH) + } + } + } + } + } +} diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/pages/authority-secondary.ets b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/pages/authority-secondary.ets new file mode 100644 index 000000000..6d5d449a7 --- /dev/null +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/pages/authority-secondary.ets @@ -0,0 +1,222 @@ +/* + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { backBar } from "../common/components/backBar.ets"; +import { permissionGroups, groups } from "../common/model/permissionGroup.ets"; +import router from '@system.router'; +import Constants from '../common/utils/constant.ets'; + +class CalendarObj { + permissionName: string + groupName: string + description: string + label: string + constructor(permissionName: string, groupName: string, description: string, label: string) { + this.permissionName = permissionName + this.groupName = groupName + this.description = description + this.label = label + } +} // Permission management secondary interface data class + +@Entry +@Component +struct appNamePage { + private backTitle = router.getParams().backTitle; // return title name + + build() { + GridContainer({ gutter: Constants.GUTTER }) { + Row() { + Row() + .useSizeType({ + xs: { span: Constants.LEFT_XS_SPAN, offset: Constants.LEFT_XS_OFFSET }, + sm: { span: Constants.LEFT_SM_SPAN, offset: Constants.LEFT_SM_OFFSET }, + md: { span: Constants.LEFT_MD_SPAN, offset: Constants.LEFT_MD_OFFSET }, + lg: { span: Constants.LEFT_LG_SPAN, offset: Constants.LEFT_LG_OFFSET } + }) + .height(Constants.FULL_HEIGHT) + Row() { + Column() { + Row() { + backBar({ title: JSON.stringify(this.backTitle) }) + } + Row() { + Column() { + Scroll() { + appNameItem() + } + } + }.layoutWeight(Constants.LAYOUT_WEIGHT) + } + } + .useSizeType({ + xs: { span: Constants.MIDDLE_XS_SPAN, offset: Constants.MIDDLE_XS_OFFSET }, + sm: { span: Constants.MIDDLE_SM_SPAN, offset: Constants.MIDDLE_SM_OFFSET }, + md: { span: Constants.MIDDLE_MD_SPAN, offset: Constants.MIDDLE_MD_OFFSET }, + lg: { span: Constants.MIDDLE_LG_SPAN, offset: Constants.MIDDLE_LG_OFFSET } + }) + .height(Constants.FULL_HEIGHT) + Row() + .useSizeType({ + xs: { span: Constants.RIGHT_XS_SPAN, offset: Constants.RIGHT_XS_OFFSET }, + sm: { span: Constants.RIGHT_SM_SPAN, offset: Constants.RIGHT_SM_OFFSET }, + md: { span: Constants.RIGHT_MD_SPAN, offset: Constants.RIGHT_MD_OFFSET }, + lg: { span: Constants.RIGHT_LG_SPAN, offset: Constants.RIGHT_LG_OFFSET } + }) + .height(Constants.FULL_HEIGHT) + } + .height(Constants.FULL_HEIGHT) + } + } +} + +@Component +struct appNameItem { + @State calendarListItem: CalendarObj[] = []; // Permission management secondary interface data array + private routerData = router.getParams().routerData; // Routing jump data + private backTitle = router.getParams().backTitle; // return title name + private allPermissionApplications = router.getParams().allPermissionApplications; // Array of all app permission names + + @Builder ListItemLayout(item, index) { + ListItem() { + Row() { + Column() { + Flex({ justifyContent: FlexAlign.Start, alignItems: ItemAlign.Center }) { + Row() { + Text(item.label) + .fontSize(Constants.TEXT_MIDDLE_FONT_SIZE) + .fontColor($r('app.color.text_color')) + .flexGrow(Constants.FLEX_GROW) + Image($r('app.media.rightarrow')) + .objectFit(ImageFit.Contain) + .height(Constants.IMAGE_HEIGHT) + .width(Constants.IMAGE_WIDTH) + } + .width(Constants.FULL_WIDTH) + .height(Constants.LISTITEM_ROW_HEIGHT) + } + if (!index) { + Row() { + Column() + .backgroundColor($r('app.color.text_decoration_color')) + .width(Constants.FULL_WIDTH) + .height(Constants.TEXT_DECORATION_HEIGHT) + } + } + }.onClick(() => { + var dataList = this.routerData.filter((ele) => { + return ele.groupName === item.groupName; + }) + router.push({ + uri: 'pages/authority-tertiary', + params: { routerData: dataList, backTitle: item.label } + }); + }) + } + }.padding({ left: Constants.LISTITEM_PADDING_LEFT, right: Constants.LISTITEM_PADDING_RIGHT }) + } + + /** + * Lifecycle function, executed when the page is initialized + */ + aboutToAppear() { + var permissionsListNomal = groups.filter((item) => { + return item.groupName === this.backTitle; + }); + var permissionsListOther = groups.filter((item) => { + return item.children !== undefined; + })[0].children.filter((item) => { + return item.groupName === this.backTitle; + }); + var arraySort = []; + for (let i = 0; i < permissionsListOther[0].permissions.length; i++) { + if (arraySort.indexOf(permissionsListOther[0].permissions[i]) === -1) { + arraySort.push(permissionsListOther[0].permissions[i]); + } + } + permissionsListOther[0].permissions = arraySort; + var permissionsList; + if (permissionsListNomal.length) { + permissionsList = permissionsListNomal; + } + if (permissionsListOther.length) { + permissionsList = permissionsListOther; + } + for (let i = 0; i < permissionsList[0].permissions.length; i++) { + permissionGroups.forEach((item) => { + if (item.permissionName === permissionsList[0].permissions[i]) { + this.calendarListItem.push( + new CalendarObj(item.permissionName, item.groupName, item.description, item.label) + ) + } + }) + } + } + + build() { + Row() { + Column() { + if (!this.calendarListItem.length) { + Row() { + List() { + ListItem() { + Row() { + Column() { + Flex({ justifyContent: FlexAlign.Start, alignItems: ItemAlign.Center }) { + Row() { + Column() { + Row() { + Flex({ justifyContent: FlexAlign.Start, alignItems: ItemAlign.Center }) { + Text($r('app.string.no_data')) + .fontSize(Constants.TEXT_MIDDLE_FONT_SIZE) + .fontColor($r('app.color.text_color')) + }.margin({ top: Constants.FLEX_MARGIN_TOP, bottom: Constants.FLEX_MARGIN_BOTTOM }) + }.height(Constants.FULL_HEIGHT) + }.flexGrow(Constants.FLEX_GROW) + .constraintSize({minHeight: Constants.CONSTRAINTSIZE_MINHEIGHT }) + } + .width(Constants.FULL_WIDTH) + .height(Constants.LISTITEM_ROW_HEIGHT) + } + } + } + }.padding({ left: Constants.LISTITEM_PADDING_LEFT, right: Constants.LISTITEM_PADDING_RIGHT }) + } + .backgroundColor($r('app.color.default_background_color')) + .borderRadius(Constants.BORDER_RADIUS) + .padding({ top: Constants.LIST_PADDING_TOP, bottom: Constants.LIST_PADDING_BOTTOM }) + }.margin({ top: Constants.ROW_MARGIN_TOP }) + .padding({ left: Constants.LISTITEM_PADDING_LEFT, right: Constants.LISTITEM_PADDING_RIGHT }) + } else { + Row() { + List() { + ForEach(this.calendarListItem.slice(Constants.SLICE_START, this.calendarListItem.length - 1), (item) => { + this.ListItemLayout(item, Constants.SLICE_START_INDEX) + }, item => item.toString()) + ForEach(this.calendarListItem.slice(Constants.SLICE_END), (item, index) => { + this.ListItemLayout(item, Constants.SLICE_END_INDEX) + }, item => item.toString()) + }.backgroundColor($r('app.color.default_background_color')).borderRadius(Constants.BORDER_RADIUS) + .padding({ top: Constants.LIST_PADDING_TOP, bottom: Constants.LIST_PADDING_BOTTOM }) + }.margin({ top: Constants.ROW_MARGIN_TOP }) + .padding({ left: Constants.LISTITEM_PADDING_LEFT, right: Constants.LISTITEM_PADDING_RIGHT }) + } + } + .width(Constants.FULL_WIDTH) + .height(Constants.FULL_HEIGHT) + .backgroundColor($r('app.color.background_color')) + } + } +} diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/pages/authority-tertiary.ets b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/pages/authority-tertiary.ets new file mode 100644 index 000000000..5c5f9d680 --- /dev/null +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/pages/authority-tertiary.ets @@ -0,0 +1,331 @@ +/* + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { backBar } from "../common/components/backBar.ets"; +import { alphabetIndexerComponent } from "../common/components/alphabeticalIndex.ets"; +import { textInput } from "../common/components/search.ets"; +import router from '@system.router'; +import bundle from "@ohos.bundle"; +import abilityAccessCtrl from '@ohos.abilityAccessCtrl'; +import { getAppLabel, getAppIcon, verifyAccessToken, changeIndexValue } from "../common/utils/utils"; +import { makePy } from "../common/utils/utils.ets"; +import { authorizeDialog } from "../common/components/dialog.ets"; +import Constants from '../common/utils/constant.ets'; + +@Extend(Image) function customizeImage(width: number, height: number) { + .objectFit(ImageFit.Contain) + .width(width) + .height(height) +} + +let routerData = router.getParams().routerData; // Routing jump data +let backTitle = router.getParams().backTitle; // return title name +class ApplicationObj { + labelId: string + iconId: string + index: number + accessTokenId: string + permission: string + alphabeticalIndex: string + constructor( + labelId: string, + iconId: string, + index: number, + accessTokenId: string, + permission: string, + alphabeticalIndex: string) { + this.labelId = labelId + this.iconId = iconId + this.index = index + this.accessTokenId = accessTokenId + this.permission = permission + this.alphabeticalIndex = alphabeticalIndex + } +} // application information + +@Entry +@Component +struct locationInfoPage { + build() { + GridContainer({ gutter: Constants.GUTTER }) { + Row() { + Row() + .useSizeType({ + xs: { span: Constants.LEFT_XS_SPAN, offset: Constants.LEFT_XS_OFFSET }, + sm: { span: Constants.LEFT_SM_SPAN, offset: Constants.LEFT_SM_OFFSET }, + md: { span: Constants.LEFT_MD_SPAN, offset: Constants.LEFT_MD_OFFSET }, + lg: { span: Constants.LEFT_LG_SPAN, offset: Constants.LEFT_LG_OFFSET } + }) + .height(Constants.FULL_HEIGHT) + Row() { + Column() { + Row() { + backBar({ title: JSON.stringify(backTitle) }) + } + Row() { + Column() { + applicationItem() + + }.width(Constants.FULL_WIDTH) + } + .layoutWeight(Constants.LAYOUT_WEIGHT) + } + } + .useSizeType({ + xs: { span: Constants.MIDDLE_XS_SPAN, offset: Constants.MIDDLE_XS_OFFSET }, + sm: { span: Constants.MIDDLE_SM_SPAN, offset: Constants.MIDDLE_SM_OFFSET }, + md: { span: Constants.MIDDLE_MD_SPAN, offset: Constants.MIDDLE_MD_OFFSET }, + lg: { span: Constants.MIDDLE_LG_SPAN, offset: Constants.MIDDLE_LG_OFFSET } + }) + .height(Constants.FULL_HEIGHT) + Row() + .useSizeType({ + xs: { span: Constants.RIGHT_XS_SPAN, offset: Constants.RIGHT_XS_OFFSET }, + sm: { span: Constants.RIGHT_SM_SPAN, offset: Constants.RIGHT_SM_OFFSET }, + md: { span: Constants.RIGHT_MD_SPAN, offset: Constants.RIGHT_MD_OFFSET }, + lg: { span: Constants.RIGHT_LG_SPAN, offset: Constants.RIGHT_LG_OFFSET } + }) + .height(Constants.FULL_HEIGHT) + } + .height(Constants.FULL_HEIGHT) + } + } +} + +@Component +struct applicationItem { + @State toggleIsOn: boolean[] = []; // toggle switch state array + @State applicationList: ApplicationObj[] = []; // application info array + @State oldApplicationItem: ApplicationObj[] = []; // Original application information array + @State searchResult: boolean = true; // search results + + authorizeDialogController: CustomDialogController = new CustomDialogController({ + builder: authorizeDialog({ }), + autoCancel: true, + alignment: DialogAlignment.Center + }); + + @Builder ListItemLayout(item, index) { + ListItem() { + Row() { + Column() { + Flex({ justifyContent: FlexAlign.Start, alignItems: ItemAlign.Center }) { + Row() { + Image(item.iconId) + .customizeImage(Constants.AUTHORITY_IMAGE_WIDTH, Constants.AUTHORITY_IMAGE_HEIGHT) + .margin({ right: Constants.AUTHORITY_IMAGE_MARGIN_RIGHT }) + Text(item.labelId) + .fontSize(Constants.TEXT_MIDDLE_FONT_SIZE) + .fontColor($r('app.color.text_color')) + .flexGrow(Constants.FLEX_GROW) + Toggle({ type: ToggleType.Switch, isOn: this.toggleIsOn[item.index] }) + .selectedColor($r('app.color.toggle_color')) + .width(Constants.AUTHORITY_TOGGLE_WIDTH) + .height(Constants.AUTHORITY_TOGGLE_HEIGHT) + .onChange((isOn: boolean) => { + if (item.accessTokenId === '' || item.permission === '') { + return; + } + if (isOn) { + this.grantUserGrantedPermission(item.accessTokenId, item.permission, item.index); + } else { + this.revokeUserGrantedPermission(item.accessTokenId, item.permission, item.index); + } + }) + } + .width(Constants.FULL_WIDTH) + .height(Constants.AUTHORITY_ROW_HEIGHT) + .constraintSize({ minHeight: Constants.AUTHORITY_CONSTRAINTSIZE_MINHEIGHT }) + } + if (!index) { + Row() { + Column() + .backgroundColor($r('app.color.text_decoration_color')) + .width(Constants.FULL_WIDTH) + .height(Constants.TEXT_DECORATION_HEIGHT) + } + } + }.onClick(() => { + }) + } + }.padding({ left: Constants.AUTHORITY_LISTITEM_PADDING_LEFT, right: Constants.AUTHORITY_LISTITEM_PADDING_RIGHT }) + } + + /** + * Grant permissions to the app + * @param {Number} accessTokenId + * @param {String} permission permission name + * @param {Number} index Array index to modify permission status + */ + async grantUserGrantedPermission(accessTokenId, permission, index) { + var permissionFlag = await abilityAccessCtrl.createAtManager(). + getPermissionFlags(accessTokenId, permission); + abilityAccessCtrl.createAtManager().grantUserGrantedPermission( + accessTokenId, permission, permissionFlag).then(result => { + // result: 0 Authorization succeeded; result: -1 Authorization failed + if (result !== Constants.PERMISSION_INDEX) { + this.authorizeDialogController.open(); + this.toggleIsOn = changeIndexValue(this.toggleIsOn, [[index, false]]); + setTimeout(()=> { + this.authorizeDialogController.close(); + }, Constants.DELAY_TIME) + } else { + this.toggleIsOn = changeIndexValue(this.toggleIsOn, [[index, true]]); + } + }).catch(error => { + }) + } + + /** + * Deauthorize the app + * @param {Number} accessTokenId + * @param {String} permission permission name + * @param {Number} index Array index to modify permission status + */ + async revokeUserGrantedPermission(accessTokenId, permission, index) { + var permissionFlag = await abilityAccessCtrl.createAtManager(). + getPermissionFlags(accessTokenId, permission); + abilityAccessCtrl.createAtManager().revokeUserGrantedPermission( + accessTokenId, permission, permissionFlag).then(result => { + // result: 0 successfully cancel the authorization; result: -1 cancel the authorization failed + if (result !== Constants.PERMISSION_INDEX) { + this.authorizeDialogController.open(); + this.toggleIsOn = changeIndexValue(this.toggleIsOn, [index, false]); + setTimeout(()=> { + this.authorizeDialogController.close(); + }, Constants.DELAY_TIME) + } else { + this.toggleIsOn = changeIndexValue(this.toggleIsOn, [index, true]); + } + }) + } + + /** + * Lifecycle function, executed when the page is initialized + */ + aboutToAppear() { + for (let i = 0; i < routerData[0].bundleNames.length; i++) { + // Get BundleInfo based on bundle name + bundle.getBundleInfo(routerData[0].bundleNames[i], Constants.PARMETER_BUNDLE_FLAG).then(res => { + Promise.all([getAppLabel(res.appInfo.labelId, res.name), + getAppIcon(res.appInfo.iconId, res.name), + verifyAccessToken(res.appInfo.accessTokenId, routerData[0].permission)]) + .then((values) => { + this.applicationList.push( + new ApplicationObj( + String(values[0]), + String(values[1]), + i, + res.appInfo.accessTokenId, + routerData[0].permission, + makePy(values[0])[0].slice(0, 1)) // Get the first letter in the returned initials array + ); + this.oldApplicationItem.push( + new ApplicationObj( + String(values[0]), + String(values[1]), + i, + res.appInfo.accessTokenId, + routerData[0].permission, + makePy(values[0])[0].slice(0, 1)) // Get the first letter in the returned initials array + ); + // 0: have permission; -1: no permission + if (values[2] === Constants.PERMISSION_INDEX) { + this.toggleIsOn.push(true); + } else { + this.toggleIsOn.push(false); + } + }); + }).catch(() => { + this.applicationList.push( + new ApplicationObj('', '', 0, '', '', '') + ); + this.oldApplicationItem.push( + new ApplicationObj('', '', 0, '', '', '') + ); + }) + } + } + + build() { + Column() { + Row() { + textInput({ + placeholder: $r('app.string.textInput_placeholder'), + applicationItem: $applicationList, + oldApplicationItem: $oldApplicationItem, + searchResult: $searchResult + }) + }.padding({ + left: Constants.AUTHORITY_TEXTINPUT_PADDING_LEFT, + right: Constants.AUTHORITY_TEXTINPUT_PADDING_RIGHT + }) + .backgroundColor($r('app.color.background_color')) + Row() { + Flex({ alignItems:ItemAlign.Start, justifyContent: FlexAlign.Start }) { + Column() { + Flex({ justifyContent: FlexAlign.Start }) { + Text(this.applicationList.length + '个应用获取此权限') + .fontSize(Constants.TEXT_SMAL_FONT_SIZE) + .fontColor($r('app.color.secondary_font_color')) + .margin({ top: Constants.AUTHORITY_TEXT_MARGIN_TOP, left: Constants.AUTHORITY_TEXT_MARGIN_LEFT }) + } + Scroll() { + Row() { + Column() { + if (!this.applicationList.length) { + if (this.searchResult) { + Row() { + }.margin({ top: Constants.AUTHORITY_ROW_MARGIN_TOP }) + } else { + Row() { + Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) { + Image($r('app.media.searchnoresult')) + .customizeImage(Constants.SEARCHNORESULT_IMAGE_WIDTH, Constants.SEARCHNORESULT_IMAGE_HEIGHT) + } + }.margin({ top: Constants.AUTHORITY_ROW_MARGIN_TOP }) + } + } else { + Row() { + List() { + ForEach(this.applicationList.slice(Constants.SLICE_START, this.applicationList.length - 1), + (item) => { + this.ListItemLayout(item, Constants.SLICE_START_INDEX) + }, item => item.toString()) + ForEach(this.applicationList.slice(Constants.SLICE_END), (item, index) => { + this.ListItemLayout(item, Constants.SLICE_END_INDEX) + }, item => item.toString()) + } + .backgroundColor($r('app.color.default_background_color')) + .borderRadius(Constants.BORDER_RADIUS) + .padding({ top: Constants.LIST_PADDING_TOP, bottom: Constants.LIST_PADDING_BOTTOM }) + }.margin({ top: Constants.AUTHORITY_ROW_MARGIN_TOP }) + } + }.width(Constants.FULL_WIDTH) + .height(Constants.AUTHORITY_COLUMN_HEIGHT) + .backgroundColor($r('app.color.background_color')) + } + } + }.padding({ left: Constants.AUTHORITY_LISTITEM_PADDING_LEFT }) + Column() { + alphabetIndexerComponent({ applicationItem: $applicationList, oldApplicationItem: $oldApplicationItem }) + }.width(Constants.AUTHORITY_ALPHABETINDEX_WIDTH) + .padding({ top: Constants.AUTHORITY_ALPHABETINDEX_PADDING_TOP }) + } + } + .backgroundColor($r('app.color.background_color')) + } + } +} diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/pages/other-permissions.ets b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/pages/other-permissions.ets new file mode 100644 index 000000000..a97d1af13 --- /dev/null +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/pages/other-permissions.ets @@ -0,0 +1,168 @@ +/* + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { backBar } from "../common/components/backBar.ets"; +import { groups } from "../common/model/permissionGroup.ets"; +import router from '@system.router'; +import Constants from '../common/utils/constant.ets'; + +class OtherPermissionObj { + groupName: string + permissions: string + constructor(groupName: string, permissions: string) { + this.groupName = groupName + this.permissions = permissions + } +} // Other permission interface data classes + +@Entry +@Component +struct appNamePage { + private backTitle = router.getParams().backTitle; // return title name + + build() { + GridContainer({ gutter: Constants.GUTTER }) { + Row() { + Row() + .useSizeType({ + xs: { span: Constants.LEFT_XS_SPAN, offset: Constants.LEFT_XS_OFFSET }, + sm: { span: Constants.LEFT_SM_SPAN, offset: Constants.LEFT_SM_OFFSET }, + md: { span: Constants.LEFT_MD_SPAN, offset: Constants.LEFT_MD_OFFSET }, + lg: { span: Constants.LEFT_LG_SPAN, offset: Constants.LEFT_LG_OFFSET } + }) + .height(Constants.FULL_HEIGHT) + Row() { + Column() { + Row() { + backBar({ title: JSON.stringify(this.backTitle) }) + } + Row() { + Column() { + Scroll() { + appNameItem() + } + } + }.layoutWeight(Constants.LAYOUT_WEIGHT) + } + } + .useSizeType({ + xs: { span: Constants.MIDDLE_XS_SPAN, offset: Constants.MIDDLE_XS_OFFSET }, + sm: { span: Constants.MIDDLE_SM_SPAN, offset: Constants.MIDDLE_SM_OFFSET }, + md: { span: Constants.MIDDLE_MD_SPAN, offset: Constants.MIDDLE_MD_OFFSET }, + lg: { span: Constants.MIDDLE_LG_SPAN, offset: Constants.MIDDLE_LG_OFFSET } + }) + .height(Constants.FULL_HEIGHT) + Row() + .useSizeType({ + xs: { span: Constants.RIGHT_XS_SPAN, offset: Constants.RIGHT_XS_OFFSET }, + sm: { span: Constants.RIGHT_SM_SPAN, offset: Constants.RIGHT_SM_OFFSET }, + md: { span: Constants.RIGHT_MD_SPAN, offset: Constants.RIGHT_MD_OFFSET }, + lg: { span: Constants.RIGHT_LG_SPAN, offset: Constants.RIGHT_LG_OFFSET } + }) + .height(Constants.FULL_HEIGHT) + } + .height(Constants.FULL_HEIGHT) + } + } +} + +@Component +struct appNameItem { + @State otherPermissionListItem: OtherPermissionObj[] = []; // Other permission interface data array + private backTitle = router.getParams().backTitle; // return title name + private allPermissionApplications = router.getParams().routerData; // Routing jump data + + @Builder ListItemLayout(item, index) { + ListItem() { + Row() { + Column() { + Flex({ justifyContent: FlexAlign.Start, alignItems: ItemAlign.Center }) { + Row() { + Text(item.groupName) + .fontSize(Constants.TEXT_MIDDLE_FONT_SIZE) + .fontColor($r('app.color.text_color')) + .flexGrow(Constants.FLEX_GROW) + Image($r('app.media.rightarrow')) + .objectFit(ImageFit.Contain) + .height(Constants.IMAGE_HEIGHT) + .width(Constants.IMAGE_WIDTH) + } + .width(Constants.FULL_WIDTH) + .height(Constants.LISTITEM_ROW_HEIGHT) + } + if (!index) { + Row() { + Column() + .backgroundColor($r('app.color.text_decoration_color')) + .width(Constants.FULL_WIDTH) + .height(Constants.TEXT_DECORATION_HEIGHT) + } + } + }.onClick(() => { + // 1: Indicates that there is a permission in the permission group + if (item.permissions.length > 1) { + router.push({ + uri: 'pages/authority-secondary', + params: { routerData: this.allPermissionApplications, backTitle: item.groupName } + }); + } + else { + router.push({ + uri: 'pages/authority-tertiary', + params: { routerData: this.allPermissionApplications, backTitle: item.groupName } + }); + } + }) + } + }.padding({ left: Constants.LISTITEM_PADDING_LEFT, right: Constants.LISTITEM_PADDING_RIGHT }) + } + + /** + * Lifecycle function, executed when the page is initialized + */ + aboutToAppear() { + var permissionsList = groups.filter((item) => { + return item.groupName === this.backTitle; + }) + for (let i = 0; i < permissionsList[0].children.length; i++) { + this.otherPermissionListItem.push( + new OtherPermissionObj(permissionsList[0].children[i].groupName, permissionsList[0].children[i].permissions) + ); + } + } + + build() { + Row() { + Column() { + Row() { + List() { + ForEach(this.otherPermissionListItem.slice(Constants.SLICE_START, this.otherPermissionListItem.length - 1), + (item) => { + this.ListItemLayout(item, Constants.SLICE_START_INDEX) + }, item => item.toString()) + ForEach(this.otherPermissionListItem.slice(Constants.SLICE_END), (item, index) => { + this.ListItemLayout(item, Constants.SLICE_END_INDEX) + }, item => item.toString()) + }.backgroundColor($r('app.color.default_background_color')).borderRadius(Constants.BORDER_RADIUS) + .padding({ top: Constants.LIST_PADDING_TOP, bottom: Constants.LIST_PADDING_BOTTOM }) + }.margin({ top: Constants.ROW_MARGIN_TOP }) + .padding({ left: Constants.LISTITEM_PADDING_LEFT, right: Constants.LISTITEM_PADDING_RIGHT }) + } + .width(Constants.FULL_WIDTH) + .height(Constants.FULL_HEIGHT) + .backgroundColor($r('app.color.background_color')) + } + } +} diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/resources/ar/properties/string.json b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/resources/ar/properties/string.json new file mode 100644 index 000000000..c3a6df19c --- /dev/null +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/resources/ar/properties/string.json @@ -0,0 +1,14 @@ +{ + "strings": { + "app_name": "CategoryPage", + "describe": "describe", + "category": "Category", + "itemChild": "ItemChild", + "item": "Item", + "search": "search...", + "you_search": "You search ", + "you_clicked": "You clicked ", + "tab": "Tab", + "more": "< more" + } +} \ No newline at end of file diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/resources/dark/properties/string.json b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/resources/dark/properties/string.json new file mode 100644 index 000000000..ddc52a17f --- /dev/null +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/resources/dark/properties/string.json @@ -0,0 +1,7 @@ +{ + "colors": { + "colorSubBackground": "#000000", + "appbar_subtitle_color": "#99ffffff", + "text_color": "#ffffff" + } +} \ No newline at end of file diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/resources/default/media/icon_actived.png b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/resources/default/media/icon_actived.png new file mode 100644 index 0000000000000000000000000000000000000000..49991d108d51f1803ff3dcadc8870d69977908e7 GIT binary patch literal 1671 zcmV;226*|2P)FV00001b5ch_0Itp) z=>Px*K}keGRA>e5S!-++RS=%p`$R&uO$0?K@<;FU50F43#8!FH$C>oSPVef0lnOn9!yL?k)bY zlich%XJ)=L-`PE{xd1~lGy)Zk09NF!I8R=jnN~1h5t7wF0HYD`URIChUy|$H{Om@e zE=1#OEQb5qTas;xd)dW`2ux|pOwALmVUWc{biYm%Oz<2U&_ZBr>u62>sN<{JmPKI7 zQW{sV%nby%8i))PP``|XNZS*M^joKPV3)4H7J*qWQ=;c`W+M>10YE9;&VudHWFng< zj!kd)Y71t9Z3ncG2~2OIktUftiQusT_rWhA!r?Tgn|^A=%TdrH5vXs@&dB8pyBV-H z3TUM^hSP#JC;^$M1&a<7(1obKcl)6dgZvN)S1p(Y5W|xm@8*@bTix=L1j@xnVigX0w@}`9-FE{Cu158;P)XWgO~iozNX!1Y17K z!*7>4ByGV=GMTC?wNI3M1KF(kemTKERFAM}eZmvG#4ChECpP**sa(!{uauvMKwVSz z0RViylyOj7)o_5UC@_qP(A*odvJ$gW@CoM~|Tc?cj_t9bOahiT>f7zY;aCN?YB zR$KVUk}J?lZa)tJvY^>*6s10MvIol7ZI*_u3W5ZS)Vh=%y~>Wu>+g8CQIvYkUE!l| zVq328Y9u$kesK`suefXi7cLQe{&jd@Vk5TY3dbnd z)P8ZV+GF}PWfWSzEx=#@5Ug1egWK%law*Sxs~te6*r>MG}VuSOt*gq-|VFW?D(pa2Js=+6hqEvdMUHvnYt z9W*-V2tJgpdm#=F);Sh46~AOzh`zEc4s)kluz7nPu4&8-NsOtWj-I))S5*d;t9hnu zd^MpRyoxEr1w*i+ie&XvThBYMTWs>48hjp-WAO*CCty4$5C=ofT_kw(qa5V&!Dy1r z>)4Z?pjtWJfGGGN{iSM9s{G=j*q{Y3_%aZJ877j7blZ3cBx3k6Ao@;(T3*}dH->lS z?kKD-n1byuJbgKj>ehP*w6~;A@oMy`+t98*_jC+`y0PtapMojaej@qPQb}MB0RiAd z>pOg{lwH{&!*~yz!^`0962X=}yn?1Af4%Ll3yp11y!|75XxHuMgfR%RVcjkfZ0W-- zlJqT=kq|rI;j9{&dYhpRsbHr%3AXOagH`@vQiXGr1yiu44^<@DD;aCGO)Y!rDq2bF zUC)|Fxv5rZhS{7NS-&a)>57hh1Bhl8VAHl79Buame}OaAbAmF}fdr%rxhLoI)jJ?@JtrFrf6^Q46;1&%@t6P9sU~#tdu>%TR|B5ZGddT9Uja@}v{_ zn_c=;3?wU&^37m6gUjRqj`NXw7vCQ`e|3)fEz7P%Jhmh(GcC4}2#DdWKR8;MM5EN* zlH}lp#LOuOqiPUp_`FkdXCM5Ps{~hi2>!T2aQrm?IQT4+C?)K1Xm~QctZfJWSxWD2 zi%dWqC1Wi~Um{$`d$#Mq?1t8@^Rmq=pDZ57wxSO`FQyg&+r2OOEBRANLF#AmY@Fhg zcYWD7W$*D@DjoK&N?8PK49TNPDpIm}VFy6l$9~GeOwL_$bdlZPZr6QQL_qCKRx3%2 zNp6Y%H|1P(ap@hyS5)~l literal 0 HcmV?d00001 diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/resources/default/media/icon_normal.png b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/resources/default/media/icon_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..cdf5bb49392dfce97ea9fa1be0ace95715903498 GIT binary patch literal 1107 zcmV-Z1g!gsP)FV00001b5ch_0Itp) z=>Px(4M{{nRA>e5n0ap$F$~4aeUm-VoFq@wM0-OltrqH0TZSvN#0@VoM~bD%1vm{Dyc`;;+DIJsyeV{HnoTx+s1Sf0PCr5&%v=7LS&UP52$Z z*kA9(>`IgZAZ?iWgLGcQEkJso7pYXedmG^QYJX_5_njI(5*O8Yo@wNDq5~F2SEP;+(+SVs)*T4rP1S)9qVdJE{wT)CR!{qW@M*z|vUYcuVRq0H<>a$an#k^r%Xm{pbbI;yi=X6ZNeq z-vf|AwgnwMF94Rg1vMvhjcn`-O=AKZ0O`XfY(Y(0)X2uZ;9HVLHUJKeR@9Wq8d>X4 zvI;f;Tl%bW?)R76NAs;l)~M!Jpf!CM4NeXfaA{ z=9stkVp{}6TEVL#`=!&I>0JrQ3fSI-bATBf3iNM@^iOuib2dUSoT}`Xn$_TjMtUw_ z2d$YAW}DWT8&fOL#YS%BtnH+V*#Ovd$r4%Z0Iu;07#>~jCWLQNZ;M`KK)$9*VXFq%_I$#ZEzgiAj2xR~*HIYLZae1OSKb)(P;POt=Rjp{Iu_8i>FkTF1{i(>LxriO} z1ZaUd_4rF8b{4}NDCm1juGfQsofo3LBQW+8kxsT3u~WT5`oNL@K#bEV$P)n7gHv^= zJ!YKLpk!Oe^=gstn|gMt4j*F-9S|KZ68FWv)&X1W4Tvo5LAZRdcW9@1vZBz<>E*X) zdLmmyO#m39YVpq+r)I6LRI(r-Dj(&tFSw3@RwqcM4UsN%3hc=UXOCMda|5&n5NvXB zAqXm!w?BfM_rzKHF7^SZe-p+A5D!W){4vI+CK$*bARWl(K%B+#W~Ze)W1fL|2L6{B Z_ye>Cr2VxM_(lK#002ovPDHLkV1jHc1@-^{ literal 0 HcmV?d00001 diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/resources/default/properties/string.json b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/resources/default/properties/string.json new file mode 100644 index 000000000..127f01aeb --- /dev/null +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/resources/default/properties/string.json @@ -0,0 +1,19 @@ +{ + "strings": { + "app_name": "CategoryPage", + "describe": "describe", + "category": "Category", + "itemChild": "ItemChild", + "item": "Item", + "search": "search...", + "you_search": "You search ", + "you_clicked": "You clicked ", + "tab": "Tab", + "more": "more >" + }, + "colors": { + "colorSubBackground": "#f1f3f5", + "appbar_subtitle_color": "#99000000", + "text_color": "#000000" + } +} \ No newline at end of file diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/resources/en/properties/string.json b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/resources/en/properties/string.json new file mode 100644 index 000000000..319b5d66e --- /dev/null +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/resources/en/properties/string.json @@ -0,0 +1,14 @@ +{ + "strings": { + "app_name": "CategoryPage", + "describe": "describe", + "category": "Category", + "itemChild": "ItemChild", + "item": "Item", + "search": "search...", + "you_search": "You search ", + "you_clicked": "You clicked ", + "tab": "Tab", + "more": "more >" + } +} \ No newline at end of file diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/resources/light/properties/string.json b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/resources/light/properties/string.json new file mode 100644 index 000000000..4b9482c8f --- /dev/null +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/resources/light/properties/string.json @@ -0,0 +1,7 @@ +{ + "colors": { + "colorSubBackground": "#f1f3f5", + "appbar_subtitle_color": "#99000000", + "text_color": "#000000" + } +} \ No newline at end of file diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/resources/zh/properties/string.json b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/resources/zh/properties/string.json new file mode 100644 index 000000000..4ca364c62 --- /dev/null +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/default/resources/zh/properties/string.json @@ -0,0 +1,14 @@ +{ + "strings": { + "app_name": "分类页", + "describe": "描述", + "category": "分类", + "itemChild": "子类", + "item": "类型", + "search": "搜索...", + "you_search": "你搜索了", + "you_clicked": "你点击了", + "tab": "分页", + "more": "更多 >" + } +} \ No newline at end of file diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/app.ets b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/app.ets index 2a3b62387..9ae634daa 100644 --- a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/app.ets +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/app.ets @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Huawei Device Co., Ltd. + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/common/components/dialog.ets b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/common/components/dialog.ets index dd5ed3e8f..ecf0f8df1 100644 --- a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/common/components/dialog.ets +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/common/components/dialog.ets @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Huawei Device Co., Ltd. + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/common/model/bundle.ets b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/common/model/bundle.ets index 2d34276d3..d5f38e35e 100644 --- a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/common/model/bundle.ets +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/common/model/bundle.ets @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Huawei Device Co., Ltd. + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/common/model/permissionGroup.ets b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/common/model/permissionGroup.ets index 087c521e3..ab6582050 100644 --- a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/common/model/permissionGroup.ets +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/common/model/permissionGroup.ets @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Huawei Device Co., Ltd. + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/common/utils/constant.ets b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/common/utils/constant.ets index 076e16960..ca3480021 100644 --- a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/common/utils/constant.ets +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/common/utils/constant.ets @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Huawei Device Co., Ltd. + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/common/utils/utils.ets b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/common/utils/utils.ets index 7c28551a8..c3610b74a 100644 --- a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/common/utils/utils.ets +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/common/utils/utils.ets @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Huawei Device Co., Ltd. + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/pages/dialogPlus.ets b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/pages/dialogPlus.ets index b6ef9eb80..d74085708 100644 --- a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/pages/dialogPlus.ets +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/ets/dynamic/pages/dialogPlus.ets @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Huawei Device Co., Ltd. + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/resources/base/element/color.json b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/resources/base/element/color.json index f2bfa884a..01d9deb53 100644 --- a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/resources/base/element/color.json +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/resources/base/element/color.json @@ -2,7 +2,7 @@ "color": [ { "name": "text_color", - "value": "#182331" + "value": "#E5000000" }, { "name": "background_color", @@ -10,7 +10,7 @@ }, { "name": "title_text_color", - "value": "#182431" + "value": "#E5000000" }, { "name": "active_background_color", @@ -38,11 +38,43 @@ }, { "name": "secondary_font_color", - "value": "#808080" + "value": "#66000000" }, { "name": "toggle_color", "value": "#409eff" + }, + { + "name": "color_Primary", + "value": "#E5000000" + }, + { + "name": "color_Secondary", + "value": "#99000000" + }, + { + "name": "color_Tertiary", + "value": "#66000000" + }, + { + "name": "color_Fourth", + "value": "#33000000" + }, + { + "name": "selected_Color", + "value": "#ffffff" + }, + { + "name": "popup_Color", + "value": "#FFFAF0" + }, + { + "name": "selected_Background_Color", + "value": "#CCCCCC" + }, + { + "name": "popup_Background_Color", + "value": "#D2B48C" } ] } \ No newline at end of file diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/resources/base/element/string.json b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/resources/base/element/string.json index 854142d25..a6f2b559c 100644 --- a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/resources/base/element/string.json +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/resources/base/element/string.json @@ -25,8 +25,16 @@ "value": "eTS_Empty Ability" }, { - "name": "settings", - "value": "设置" + "name": "no_permission", + "value": "暂无权限" + }, + { + "name": "no_data", + "value": "暂无数据" + }, + { + "name": "access_permission", + "value": "访问权限" }, { "name": "permission_access_record", @@ -37,8 +45,8 @@ "value": "权限管理" }, { - "name": "privacy", - "value": "隐私" + "name": "authority_tertiary_description", + "value": "个应用获取此权限" }, { "name": "authority_message", @@ -49,20 +57,20 @@ "value": "其它权限" }, { - "name": "app_name", - "value": "应用名称" + "name": "application", + "value": "应用" }, { - "name": "location_info", - "value": "位置信息" + "name": "authority", + "value": "权限" }, { "name": "media_document", "value": "媒体和文件" }, { - "name": "calendar", - "value": "日历" + "name": "textInput_placeholder", + "value": "搜索应用" }, { "name": "allowed", @@ -83,6 +91,10 @@ { "name": "entry_GrantAbility", "value": "entry_GrantAbility" + }, + { + "name": "Authorization_failed", + "value": "授权失败!" } ] } \ No newline at end of file diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/resources/base/media/icon.png b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce307a8827bd75456441ceb57d530e4c8d45d36c GIT binary patch literal 6790 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 literal 0 HcmV?d00001 diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/resources/base/media/radioactive.jpg b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/resources/base/media/radioactive.jpg new file mode 100644 index 0000000000000000000000000000000000000000..55e2adeb54f5b48587302a9f8ed15d8d5e9b1834 GIT binary patch literal 2217 zcmbW1eN@s}8pnTtfN!OUW~TXumD;3ZGftuK7acjBKeRQzNWSnU#)W zBWt>B006a0KE@A`SErNCPASp>L#b zV7L;xnX!?f@ycT5lCMXha2O13h(sX2l>ASkeFC8L0XM)625|(SCA@X55N10fkjcl;j@W#C^PSYn`&>sFcg3TG>gp3IHC#YYWZHaq<8rC3%(`sF4!tH@eG$| zUc{cA(pz8Zf6Ah{n2mVzg1xV^tiV;JHh-%eVrvR5BdgNe}%ji<%z}=*575ctriZid| zfA4FtWOsVpDzG>?3i~pBW@3hQCCU7H^EqN_E2jk{Z;^tju3m?C>}zP#T;o_~EpFoD z8cAj&Oq`7BYgZr)wMl6If_XQv42}4 ziu13qUf5$-+y88PX>1|ZFL7P-e1g!k)|(j?HbJ3O3renM@$cPG9B>?n8JWT>W>j`< zoJO21N*=6a$;~OK#|ETvQS5z(=o$2h@FNaZ3)3Zoao>I}Mm=-NN~9+BP~PL0Qq<9! zqGi7sj+q)$^I*p8AkXA1>uFF%UT`=T=9Ok$>Q&?D=j$BXhED3`@Wj@nTqz-+MJZY~ z9ddls=Ph#+@9+B{@e7f?DM>BqIst9)Wp?`Sl`AI4oN|>cf^NR^~9~s_kD=MdGFhJQs3rgWM@KH=~N#Lm9SI-W$*Yhs2{7 zc=Yu@$1BZ2OVTs`|kc|^hpXsN(-Sla4? z=cVqD*L%`zZ58n4Kgzdukp(&55K0qqahe%jM>c}ONCiWUCQ24&h0r5jsqKA-E-t-_ zAKyzQLj&ppXdI|_USRa2cApbfcXDfwqMLdqYo60WZ03JFK|8u!!kM_tff70C^TR}m zpd*hEUM`4Yy;?IL({$;WlTYqG6}D3g$S~be&9C2WGnrx9F?N<3PiK4B&2L_qW^rtz z7APi|$X~|Ys@)}V;_bxT4>3!E10Y>4;%WiQN3i-|y%oyS2*$09XtR;oXiNL|*R9O! zE4g~9=x6r7-zb1EpUjJvmJPy|z9&Cj_Pr7nZ!K6uT0QMq1@c1fVa-Rc@^TH)%G~{) zE$JKghn5A?a5p}uDrrJ$Q~Q8{Nyxw7C&CJ)4vHr|DG{he*tcj`UE;3p?`F^v6ZiqjZr*yj*OLUT|3F zHCiPtEz0zdkZOSuBG05I!A6jkoT&`Q|My~dY<{Y`SmBdcI2N~Knzj< literal 0 HcmV?d00001 diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/resources/base/media/radiodefault.jpg b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/resources/base/media/radiodefault.jpg new file mode 100644 index 0000000000000000000000000000000000000000..189d3ae2322a419ac0dc886fa6f4797daa651f10 GIT binary patch literal 1313 zcmex=iF;N$`UAd82aiwDF383NJD#LCRf%Eivc4pu@E@&5pWAP0jUgB~-Z5(ASU zBeNjm|04|YKzFi&odL?6mQqXwbzED#l4gO`Kd};u4Zls%q*Qnp!5NX66=_R?aT2 zZtfnQUcn)uVc`*xQOPN(Y3Ui6S;Zx#W#tu>Rn0A}ZS5VMU6UqHnL2IyjG40*Enc#8 z+42=DS8dw7W$U)>J9h3mboj{8W5-XNJay^vm8;jT-?(|};iJb-o<4j2;^nK4pFV&2 z`tAFVpT9u3cne5k^_L*fUreAlU=!0ld(M2vX6_bamA3_(y$p_- zkL7!!R%DjkZ~iuI<(`gXJ0GRC-mDhd;AnUG?W`Gp96wI$|6FnSVeA{jdeM8m71J-O zUv=>8_|H&gRJ(eWLLV=~#0wW#q~vxl`7zn6Ip)Gwj=VST77Ink+&;NeCHRii_PE-| zr=|C|g}?o1en{+SZd}4WjmwXmTs}Nzdl*t6XZTqrVN;XUqusl?Z|Az5vwm&aGSRE? zajA`gEiXgiJ#({P^N;CsyeM~^shd-3>u2(6UzU#9t0U!#c_~V}eUD3=E&R_Q#8Rc+ zTciEha>3st<&$1+-`xCfrCtb&`rpY~Zk%r?#?~@;x{3s_gqwZz7j`tsdhyCxo2Q9C zAba``3H9wi{1?6a9yC2$J8g5At(U`FuJkK!T~EHNTzg*Z$E3@LFvZDOqvx!Tx-mI+@?J|Ao^Wfa$ni(h9rDuF)YB1g7z94g- z=B4Ey{;kj19CgPnsA5iv(Y!@FdAX0>I)C`*{6qg4L=rM`7R+#7@}vI@zwD9d@cj9G z2?a;iMQh!5yu+Ql?mq+bIxWpbeWiwHrFK1kx8cMB*0zeLooP+36?al)`5fgIT&wS@ z$$se1azkzTqx*u9ncLngxX$|ZG%3h`x75k`50)R+%#(X||1fu2YVM_FGfQssf7-4^d-64$3X>)dbY^X5Nrfh{WY*Yso7d(9(0vUOK3 z&8W(K9drBT^iyKFP9>?I)F)OQmlAll;^w_b$)>jl-yJy4wD{Ql>9$tIK>_UlZvp_{ Cav1vn literal 0 HcmV?d00001 diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/resources/base/media/rightarrow.png b/frameworks/com.ohos.permissionmanager/permissionmanager/src/main/resources/base/media/rightarrow.png new file mode 100644 index 0000000000000000000000000000000000000000..51aad9fae9c47616835ecc4841028e1c887565e8 GIT binary patch literal 1058 zcmV+-1l{|IP)Px&+(|@1RA@uhnN5fsMHq(PZ+bm=@ZiA(4=#A{ASig)g9i^DJmesB*U$C@H)x2W z5`zQ@K|)YNkRU-82^vPxprYbHRqdaOL4pJk2@)it1Q7`me^60TamAkLPd;eD%Q~|& z)jhL)YUrx&=c#(Ty7-!~%@2yf@0{xp(amL9?y=ThjB(Fl?-5Jj2_kwNz=b49Oq!-& z4ht}DyC?zz5kff1%!dJ-CnBSix->4_F#V$m$iuw%#{fJE;2bj>W6b4YAjWAERiKhM z4&VSYe+a-DW4;>)a8Tdq0#%%rn0Y^dv%Ox==6U|(Adpe7*CJ3!oM7gC0M2Y|Y}m!c z#a~8+{J(y+2~=@93E)8hr;{YHX`22XTcTEhO5z0o_Yu+CMNvqcHeyQDE>Okk6f^Gz zusSz4XXoeVi&zqk2vjriDu7+G+A5_i5pfKO#sn&fHvsGe(A8SEx19hpQwX6e-v=Uk zT`9FVu0*3VAh4ZI=Ze|c*)B6@0AA5r-!qOx;{pQP?RKx6nVFH9xD&ujTI+j9m6(Wt zz^<&UT-ERQMPdgLJ+G8{U=)do2?*@^`uf#HQAnKbVCIv?n7vz-n5aM%r)#P>-OkJ> zj4=;yMPlLt0_&W+mWU)yw*gqvT0b(Z#8e0f?DF#Rb!AzK#H|31Ypo9sBQZ4s0=v4p zdcC~Z%sfv-$COfs21!hnfWWS;t=-V;^+e(pB08#+dTe6b=|Q8n*>&&zjq zWQ=)kv$j(=1J#~MM*WDKmu0!bTKn#{5eOk1W@f2yl&w}PS4z2U6Cvl^AtHJbK#!So zV@wzn!>Ngo_g=~|QkMA}K(4i383Zrar$QivaFCgwV&=b+B+0WZTN?&`Dg?au2js&A z;Lj>HZw(7SaRKkWY#E*g@COme3;WJi;3p~&LfFsDO8|b8)h5fbO_$24TZO#$vg3RP zz_0y&zrC=qaC)mF|8M)oU*ZtLKG`+{__-|0wzc-XQQ;epkaKP?5j_jwCjf1&^_g+t z8x`>0ONmiRjXzYed4F8^#soqL_cL<`!1v7DHpZNd0pEy#b581_QXl=cip>YH;Aol%tukltDDs#;Jv>az{>zG5m8$y zb*>KhS|Sue*u~6JiT)}{l6IP=AJ+vRUBEea7ZJV2%<`XDVspMu_^1Njdnubs`TUD2 zHlNfDA59>HkTdg}04`RsxzGfBOo4A?V^$Q!&OFaQZ3;e`fcJi(EX&WWwVyQ!A5EZX c=>I4T>t<807*qoM6N<$f~)T41cdvEP)Px(HAzH4R9Hv7mtSZcRTRd*GrQV08Y)vx0o4p%FL_|f+LnSDpd9c3K+L?7Tvnv5DXyUGOM0o&=ySr!?7@Q^W8P^#4YNa4u0aRf<2+$z_cZCf~;N!~L=<|gg$-l#U zIw)0PPXHJX8^ot$zThblqm&u=DU5$f1=O5<5{&(RGhGIA7QhT4I#XE_wIhp*BSbvn zfrbg3X-`&GNS{w@`Q;#d05Or@Md0_^Ow$TQo|(%ef9MuW%~@k$UK$h_@h*vRB?ijDu1C!Q6q|iqV zLqv((Sx6^;>=i&2`O^UJsrzSLL%$>V6r6Exz`C-W+c(vY0p4*l`s2L-ByxpekG-z} z?yvdjuxn_?0s*Q`le6CjjCLnrrF@+T(=k^7scAZ^d=d zQTA{<$@c<6KNA(?y8#2!MPu-br4_t%2vB_IpNQUaGTOdYZ76`y8_*_Us)#U2!*`I+foGk5Bo(r?al1ja~B!G?K=JwTD5c zTOfpM=;o>c$i%Tpdz=)=x2|gPRojBr(#Lao)5&OZ##EnGtw5(9`5#LUf-p}l^$Y+2 N002ovPDHLkV1oB;9~1xp literal 0 HcmV?d00001 diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/ohosTest/ets/default/app.ets b/frameworks/com.ohos.permissionmanager/permissionmanager/src/ohosTest/ets/default/app.ets index fd3108959..03748140d 100644 --- a/frameworks/com.ohos.permissionmanager/permissionmanager/src/ohosTest/ets/default/app.ets +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/ohosTest/ets/default/app.ets @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Huawei Device Co., Ltd. + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/ohosTest/ets/default/pages/index/index.ets b/frameworks/com.ohos.permissionmanager/permissionmanager/src/ohosTest/ets/default/pages/index/index.ets index 2ebd82564..61dc37aa5 100644 --- a/frameworks/com.ohos.permissionmanager/permissionmanager/src/ohosTest/ets/default/pages/index/index.ets +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/ohosTest/ets/default/pages/index/index.ets @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Huawei Device Co., Ltd. + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/ohosTest/ets/test/ExampleJsunit.test.ets b/frameworks/com.ohos.permissionmanager/permissionmanager/src/ohosTest/ets/test/ExampleJsunit.test.ets index 35824cab4..c76c23ebb 100644 --- a/frameworks/com.ohos.permissionmanager/permissionmanager/src/ohosTest/ets/test/ExampleJsunit.test.ets +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/ohosTest/ets/test/ExampleJsunit.test.ets @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Huawei Device Co., Ltd. + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at diff --git a/frameworks/com.ohos.permissionmanager/permissionmanager/src/ohosTest/ets/test/List.test.ets b/frameworks/com.ohos.permissionmanager/permissionmanager/src/ohosTest/ets/test/List.test.ets index e659c7498..23005224d 100644 --- a/frameworks/com.ohos.permissionmanager/permissionmanager/src/ohosTest/ets/test/List.test.ets +++ b/frameworks/com.ohos.permissionmanager/permissionmanager/src/ohosTest/ets/test/List.test.ets @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Huawei Device Co., Ltd. + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at -- Gitee