1c36cf2e9Sopenharmony_ci/*
2c36cf2e9Sopenharmony_ci * Copyright (c) 2023-2023 Huawei Device Co., Ltd.
3c36cf2e9Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4c36cf2e9Sopenharmony_ci * you may not use this file except in compliance with the License.
5c36cf2e9Sopenharmony_ci * You may obtain a copy of the License at
6c36cf2e9Sopenharmony_ci *
7c36cf2e9Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8c36cf2e9Sopenharmony_ci *
9c36cf2e9Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10c36cf2e9Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11c36cf2e9Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12c36cf2e9Sopenharmony_ci * See the License for the specific language governing permissions and
13c36cf2e9Sopenharmony_ci * limitations under the License.
14c36cf2e9Sopenharmony_ci */
15c36cf2e9Sopenharmony_ci
16c36cf2e9Sopenharmony_ciimport router from '@ohos.router';
17c36cf2e9Sopenharmony_ciimport CheckEmptyUtils, { Constants, Log } from '@ohos/common';
18c36cf2e9Sopenharmony_ciimport common from '@ohos.app.ability.common';
19c36cf2e9Sopenharmony_ciimport { GlobalThisHelper, GlobalThisStorageKey} from '@ohos/common';
20c36cf2e9Sopenharmony_ciimport { PreferencesKey} from '@ohos/common';
21c36cf2e9Sopenharmony_ciimport PreferencesAdapter from '../Common/Adapter/PreferencesAdapter';
22c36cf2e9Sopenharmony_ciimport {PrivacyStatementDialog} from './PrivacyStatementDialog';
23c36cf2e9Sopenharmony_ciimport {CancelButton} from './component/BaseComponent';
24c36cf2e9Sopenharmony_ciimport UIExtensionContentSession from '@ohos.app.ability.UIExtensionContentSession';
25c36cf2e9Sopenharmony_ci
26c36cf2e9Sopenharmony_ciconst TAG = 'PrivacyStatementPage';
27c36cf2e9Sopenharmony_ci
28c36cf2e9Sopenharmony_cilet storage = LocalStorage.getShared();
29c36cf2e9Sopenharmony_ci@Entry(storage)
30c36cf2e9Sopenharmony_ci@Component
31c36cf2e9Sopenharmony_cistruct PrivacyStatementPage {
32c36cf2e9Sopenharmony_ci  private readonly PRIVACY_STATEMENT_STORE: string = 'privacyStatementStore';
33c36cf2e9Sopenharmony_ci  private abilityContext: common.UIExtensionContext | undefined = undefined;
34c36cf2e9Sopenharmony_ci  private session?: UIExtensionContentSession = undefined;
35c36cf2e9Sopenharmony_ci  private dialogController: CustomDialogController = new CustomDialogController({
36c36cf2e9Sopenharmony_ci    builder: PrivacyStatementDialog(),
37c36cf2e9Sopenharmony_ci    autoCancel: false,
38c36cf2e9Sopenharmony_ci    customStyle: true,
39c36cf2e9Sopenharmony_ci  })
40c36cf2e9Sopenharmony_ci
41c36cf2e9Sopenharmony_ci  aboutToAppear() {
42c36cf2e9Sopenharmony_ci    this.abilityContext = GlobalThisHelper.getValue<common.UIExtensionContext>(
43c36cf2e9Sopenharmony_ci      GlobalThisStorageKey.KEY_MAIN_ABILITY_CONTEXT);
44c36cf2e9Sopenharmony_ci    this.session = storage.get<UIExtensionContentSession>(Constants.SESSION);
45c36cf2e9Sopenharmony_ci  }
46c36cf2e9Sopenharmony_ci
47c36cf2e9Sopenharmony_ci  build() {
48c36cf2e9Sopenharmony_ci    Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) {
49c36cf2e9Sopenharmony_ci      Flex({ direction: FlexDirection.Column, justifyContent: FlexAlign.SpaceBetween, alignItems: ItemAlign.Center }) {
50c36cf2e9Sopenharmony_ci        Column() {
51c36cf2e9Sopenharmony_ci          Image($r('app.media.logo'))
52c36cf2e9Sopenharmony_ci            .width($r('app.float.privacy_statement_print_log_width_height'))
53c36cf2e9Sopenharmony_ci            .height($r("app.float.privacy_statement_print_log_width_height"))
54c36cf2e9Sopenharmony_ci            .margin({top: $r('app.float.print_log_margin_top')})
55c36cf2e9Sopenharmony_ci          Text($r('app.string.welcome'))
56c36cf2e9Sopenharmony_ci            .margin({ top: $r('app.float.privacy_statement_text_relative_img_margin_top')})
57c36cf2e9Sopenharmony_ci            .fontColor($r('sys.color.ohos_id_color_text_tertiary'))
58c36cf2e9Sopenharmony_ci            .fontSize($r('sys.float.ohos_id_text_size_over_line'))
59c36cf2e9Sopenharmony_ci            .fontWeight(FontWeight.Regular)
60c36cf2e9Sopenharmony_ci            .height($r('app.float.privacy_statement_text_tertiary_height'))
61c36cf2e9Sopenharmony_ci          Text($r('app.string.MainAbility_label'))
62c36cf2e9Sopenharmony_ci            .fontSize($r('sys.float.ohos_id_text_size_headline7'))
63c36cf2e9Sopenharmony_ci            .fontColor($r('sys.color.ohos_id_color_text_primary'))
64c36cf2e9Sopenharmony_ci            .fontWeight(FontWeight.Bolder)
65c36cf2e9Sopenharmony_ci            .height($r('app.float.privacy_statement_text_headline_height'))
66c36cf2e9Sopenharmony_ci            .margin({top: $r('app.float.privacy_statement_text_relative_text_margin_top')})
67c36cf2e9Sopenharmony_ci          Text($r('app.string.print_slogan'))
68c36cf2e9Sopenharmony_ci            .fontColor($r('sys.color.ohos_id_color_text_tertiary'))
69c36cf2e9Sopenharmony_ci            .fontSize($r('sys.float.ohos_id_text_size_over_line'))
70c36cf2e9Sopenharmony_ci            .fontWeight(FontWeight.Regular)
71c36cf2e9Sopenharmony_ci            .margin({top: $r('app.float.privacy_statement_text_relative_text_margin_top')})
72c36cf2e9Sopenharmony_ci            .height($r('app.float.privacy_statement_text_tertiary_height'))
73c36cf2e9Sopenharmony_ci        }
74c36cf2e9Sopenharmony_ci
75c36cf2e9Sopenharmony_ci        Column() {
76c36cf2e9Sopenharmony_ci          Image($r('app.media.ic_public_shield'))
77c36cf2e9Sopenharmony_ci            .width($r('app.float.shield_width_height'))
78c36cf2e9Sopenharmony_ci            .height($r('app.float.shield_width_height'))
79c36cf2e9Sopenharmony_ci          Text() {
80c36cf2e9Sopenharmony_ci            ForEach(this.getPrivacyStatementText(), (privacyStatementText: string) => {
81c36cf2e9Sopenharmony_ci              if (privacyStatementText === this.abilityContext?.resourceManager.getStringByNameSync('location_information') ||
82c36cf2e9Sopenharmony_ci                privacyStatementText === this.abilityContext?.resourceManager.getStringByNameSync('print_permission_network')) {
83c36cf2e9Sopenharmony_ci                Span(privacyStatementText).fontWeight(FontWeight.Bolder)
84c36cf2e9Sopenharmony_ci              } else {
85c36cf2e9Sopenharmony_ci                Span(privacyStatementText)
86c36cf2e9Sopenharmony_ci              }
87c36cf2e9Sopenharmony_ci            })
88c36cf2e9Sopenharmony_ci            Span($r('app.string.about_privacy_statement_text'))
89c36cf2e9Sopenharmony_ci              .onClick(() => {
90c36cf2e9Sopenharmony_ci                router.replaceUrl({
91c36cf2e9Sopenharmony_ci                  url: 'pages/PrivacyStatementWebPage',
92c36cf2e9Sopenharmony_ci                  params: {
93c36cf2e9Sopenharmony_ci                    info: true
94c36cf2e9Sopenharmony_ci                  }
95c36cf2e9Sopenharmony_ci                });
96c36cf2e9Sopenharmony_ci              })
97c36cf2e9Sopenharmony_ci              .fontColor($r('sys.color.ohos_id_color_text_hyperlink'))
98c36cf2e9Sopenharmony_ci              .fontSize($r('sys.float.ohos_id_text_size_body3'))
99c36cf2e9Sopenharmony_ci            Span('、')
100c36cf2e9Sopenharmony_ci            Span($r('app.string.permissions_notice'))
101c36cf2e9Sopenharmony_ci              .fontColor($r('sys.color.ohos_id_color_text_hyperlink'))
102c36cf2e9Sopenharmony_ci              .fontSize($r('sys.float.ohos_id_text_size_body3'))
103c36cf2e9Sopenharmony_ci              .onClick(() => {
104c36cf2e9Sopenharmony_ci                this.dialogController.open();
105c36cf2e9Sopenharmony_ci              })
106c36cf2e9Sopenharmony_ci            Span('。')
107c36cf2e9Sopenharmony_ci          }
108c36cf2e9Sopenharmony_ci          .fontColor($r('sys.color.ohos_id_color_text_primary'))
109c36cf2e9Sopenharmony_ci          .fontSize($r('sys.float.ohos_id_text_size_body3'))
110c36cf2e9Sopenharmony_ci          .margin({
111c36cf2e9Sopenharmony_ci            top: $r('app.float.privacy_statement_text_relative_img_margin_top'),
112c36cf2e9Sopenharmony_ci            left: $r('app.float.privacy_statement_text_margin_left_right'),
113c36cf2e9Sopenharmony_ci            right: $r('app.float.privacy_statement_text_margin_left_right')
114c36cf2e9Sopenharmony_ci          })
115c36cf2e9Sopenharmony_ci          Row() {
116c36cf2e9Sopenharmony_ci            CancelButton({
117c36cf2e9Sopenharmony_ci              cancelLabel: $r('app.string.Cancel'),
118c36cf2e9Sopenharmony_ci              cancelWidth: $r('app.float.privacy_statement_button_width'),
119c36cf2e9Sopenharmony_ci              cancelHeight: $r('app.float.privacy_statement_button_height'),
120c36cf2e9Sopenharmony_ci              cancelClick: () => {
121c36cf2e9Sopenharmony_ci                this.session?.terminateSelf();
122c36cf2e9Sopenharmony_ci              }
123c36cf2e9Sopenharmony_ci            })
124c36cf2e9Sopenharmony_ci            .margin({right: $r('app.float.privacy_statement_button_space')})
125c36cf2e9Sopenharmony_ci            Button($r('app.string.Agree'))
126c36cf2e9Sopenharmony_ci              .onClick(() => {
127c36cf2e9Sopenharmony_ci                this.agreePrivacyStatement();
128c36cf2e9Sopenharmony_ci                router.replaceUrl({url: 'pages/PrintPage', params: storage});
129c36cf2e9Sopenharmony_ci              })
130c36cf2e9Sopenharmony_ci              .width($r('app.float.privacy_statement_button_width'))
131c36cf2e9Sopenharmony_ci              .height($r('app.float.privacy_statement_button_height'))
132c36cf2e9Sopenharmony_ci          }
133c36cf2e9Sopenharmony_ci          .margin({
134c36cf2e9Sopenharmony_ci              top: $r('app.float.privacy_statement_button_to_text_margin_top'),
135c36cf2e9Sopenharmony_ci              bottom: $r('app.float.privacy_statement_button_margin_bottom'),
136c36cf2e9Sopenharmony_ci          })
137c36cf2e9Sopenharmony_ci        }
138c36cf2e9Sopenharmony_ci      }
139c36cf2e9Sopenharmony_ci    }
140c36cf2e9Sopenharmony_ci    .width('100%')
141c36cf2e9Sopenharmony_ci    .height('100%')
142c36cf2e9Sopenharmony_ci  }
143c36cf2e9Sopenharmony_ci
144c36cf2e9Sopenharmony_ci  async agreePrivacyStatement() {
145c36cf2e9Sopenharmony_ci    Log.info(TAG, "agreePrivacyStatement");
146c36cf2e9Sopenharmony_ci    PreferencesAdapter.getInstance().getOrCreatePreferencesSync(this.PRIVACY_STATEMENT_STORE).then((successGet) => {
147c36cf2e9Sopenharmony_ci      Log.info(TAG, 'agreePrivacyStatement getOrCreatePreferencesSync successGet: ' + successGet);
148c36cf2e9Sopenharmony_ci      if (successGet) {
149c36cf2e9Sopenharmony_ci        PreferencesAdapter.getInstance().putValue(PreferencesKey.KEY_PRIVACY_STATEMENT_PREFERENCES, true).then((successPut) => {
150c36cf2e9Sopenharmony_ci          Log.info(TAG, 'agreePrivacyStatement putValue successPut: ' + successPut);
151c36cf2e9Sopenharmony_ci          if (successPut) {
152c36cf2e9Sopenharmony_ci            PreferencesAdapter.getInstance().flush();
153c36cf2e9Sopenharmony_ci          }
154c36cf2e9Sopenharmony_ci        })
155c36cf2e9Sopenharmony_ci      }
156c36cf2e9Sopenharmony_ci    });
157c36cf2e9Sopenharmony_ci  }
158c36cf2e9Sopenharmony_ci
159c36cf2e9Sopenharmony_ci  private getPrivacyStatementText() : Array<string> {
160c36cf2e9Sopenharmony_ci    let privacyStatementTextList = new Array<string>();
161c36cf2e9Sopenharmony_ci    if (CheckEmptyUtils.isEmpty(this.abilityContext)) {
162c36cf2e9Sopenharmony_ci      Log.warn(TAG, 'getPrivacyStatementText abilityContext is invalid.');
163c36cf2e9Sopenharmony_ci      return privacyStatementTextList;
164c36cf2e9Sopenharmony_ci    }
165c36cf2e9Sopenharmony_ci    let privacyStatementText = this.abilityContext!.resourceManager.getStringByNameSync('privacy_statement_text');
166c36cf2e9Sopenharmony_ci    let printPermissionNetwork = this.abilityContext!.resourceManager.getStringByNameSync('print_permission_network');
167c36cf2e9Sopenharmony_ci    let locationInformation = this.abilityContext!.resourceManager.getStringByNameSync('location_information');
168c36cf2e9Sopenharmony_ci
169c36cf2e9Sopenharmony_ci    let privacyStatementTexts = privacyStatementText.split(printPermissionNetwork);
170c36cf2e9Sopenharmony_ci    privacyStatementTextList.push(privacyStatementTexts[0]);
171c36cf2e9Sopenharmony_ci    privacyStatementTextList.push(printPermissionNetwork);
172c36cf2e9Sopenharmony_ci    privacyStatementTexts = privacyStatementTexts[1].split(locationInformation);
173c36cf2e9Sopenharmony_ci    privacyStatementTextList.push(privacyStatementTexts[0]);
174c36cf2e9Sopenharmony_ci    privacyStatementTextList.push(locationInformation);
175c36cf2e9Sopenharmony_ci    privacyStatementTextList.push(privacyStatementTexts[1]);
176c36cf2e9Sopenharmony_ci    return privacyStatementTextList;
177c36cf2e9Sopenharmony_ci  }
178c36cf2e9Sopenharmony_ci}