1c5c2eed7Sopenharmony_ci/* 2c5c2eed7Sopenharmony_ci * Copyright (c) 2021-2022 Huawei Device Co., Ltd. 3c5c2eed7Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4c5c2eed7Sopenharmony_ci * you may not use this file except in compliance with the License. 5c5c2eed7Sopenharmony_ci * You may obtain a copy of the License at 6c5c2eed7Sopenharmony_ci * 7c5c2eed7Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8c5c2eed7Sopenharmony_ci * 9c5c2eed7Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10c5c2eed7Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11c5c2eed7Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12c5c2eed7Sopenharmony_ci * See the License for the specific language governing permissions and 13c5c2eed7Sopenharmony_ci * limitations under the License. 14c5c2eed7Sopenharmony_ci */ 15c5c2eed7Sopenharmony_ci 16c5c2eed7Sopenharmony_ciimport UIAbility from '@ohos.app.ability.UIAbility'; 17c5c2eed7Sopenharmony_ciimport bundleManager from '@ohos.bundle.bundleManager'; 18c5c2eed7Sopenharmony_ciimport bundleMonitor from '@ohos.bundle.bundleMonitor'; 19c5c2eed7Sopenharmony_ciimport account_osAccount from '@ohos.account.osAccount'; 20c5c2eed7Sopenharmony_ciimport { GlobalContext } from '../common/utils/globalContext'; 21c5c2eed7Sopenharmony_ci 22c5c2eed7Sopenharmony_ciconst TAG = 'PermissionManager_Log:'; 23c5c2eed7Sopenharmony_ciconst USER_ID = 100; 24c5c2eed7Sopenharmony_ci 25c5c2eed7Sopenharmony_ciexport default class MainAbility extends UIAbility { 26c5c2eed7Sopenharmony_ci onCreate(want, launchParam): void { 27c5c2eed7Sopenharmony_ci console.log(TAG + 'MainAbility onCreate, ability name is ' + want.abilityName + '.'); 28c5c2eed7Sopenharmony_ci 29c5c2eed7Sopenharmony_ci globalThis.bundleName = want.parameters.bundleName; 30c5c2eed7Sopenharmony_ci GlobalContext.store('bundleName', want.parameters.bundleName); 31c5c2eed7Sopenharmony_ci GlobalContext.store('context', this.context); 32c5c2eed7Sopenharmony_ci } 33c5c2eed7Sopenharmony_ci 34c5c2eed7Sopenharmony_ci onWindowStageCreate(windowStage): void { 35c5c2eed7Sopenharmony_ci // Main window is created, set main page for this ability 36c5c2eed7Sopenharmony_ci console.log(TAG + 'MainAbility onWindowStageCreate.'); 37c5c2eed7Sopenharmony_ci globalThis.windowStage = windowStage; 38c5c2eed7Sopenharmony_ci globalThis.refresh = false; 39c5c2eed7Sopenharmony_ci 40c5c2eed7Sopenharmony_ci if (globalThis.bundleName) { 41c5c2eed7Sopenharmony_ci globalThis.currentApp = globalThis.bundleName; 42c5c2eed7Sopenharmony_ci this.getSperifiedApplication(globalThis.bundleName); 43c5c2eed7Sopenharmony_ci } else { 44c5c2eed7Sopenharmony_ci globalThis.currentApp = 'all'; 45c5c2eed7Sopenharmony_ci this.getAllApplications(); 46c5c2eed7Sopenharmony_ci } 47c5c2eed7Sopenharmony_ci 48c5c2eed7Sopenharmony_ci try { 49c5c2eed7Sopenharmony_ci bundleMonitor.on('add', (bundleChangeInfo) => { 50c5c2eed7Sopenharmony_ci console.log(`${TAG} bundleMonitor.add: ${JSON.stringify(bundleChangeInfo)}`); 51c5c2eed7Sopenharmony_ci if (globalThis.currentApp === 'all') { 52c5c2eed7Sopenharmony_ci this.getAllApplications(); 53c5c2eed7Sopenharmony_ci globalThis.refresh = true; 54c5c2eed7Sopenharmony_ci } 55c5c2eed7Sopenharmony_ci }); 56c5c2eed7Sopenharmony_ci bundleMonitor.on('remove', (bundleChangeInfo) => { 57c5c2eed7Sopenharmony_ci console.log(`${TAG} bundleMonitor.remove: ${JSON.stringify(bundleChangeInfo)}`); 58c5c2eed7Sopenharmony_ci if (globalThis.currentApp === 'all') { 59c5c2eed7Sopenharmony_ci this.getAllApplications(); 60c5c2eed7Sopenharmony_ci globalThis.refresh = true; 61c5c2eed7Sopenharmony_ci } 62c5c2eed7Sopenharmony_ci }); 63c5c2eed7Sopenharmony_ci bundleMonitor.on('update', (bundleChangeInfo) => { 64c5c2eed7Sopenharmony_ci console.log(`${TAG} bundleMonitor.update: ${JSON.stringify(bundleChangeInfo)}`); 65c5c2eed7Sopenharmony_ci if (globalThis.currentApp === 'all') { 66c5c2eed7Sopenharmony_ci this.getAllApplications(); 67c5c2eed7Sopenharmony_ci globalThis.refresh = true; 68c5c2eed7Sopenharmony_ci } 69c5c2eed7Sopenharmony_ci }); 70c5c2eed7Sopenharmony_ci } catch (error) { 71c5c2eed7Sopenharmony_ci console.error(TAG + 'bundleMonitor failed.'); 72c5c2eed7Sopenharmony_ci } 73c5c2eed7Sopenharmony_ci 74c5c2eed7Sopenharmony_ci } 75c5c2eed7Sopenharmony_ci 76c5c2eed7Sopenharmony_ci onNewWant(want): void { 77c5c2eed7Sopenharmony_ci console.log(TAG + 'MainAbility onNewWant. want: ' + JSON.stringify(want)); 78c5c2eed7Sopenharmony_ci console.log(TAG + 'MainAbility onNewWant. bundleName: ' + JSON.stringify(want.parameters.bundleName)); 79c5c2eed7Sopenharmony_ci 80c5c2eed7Sopenharmony_ci let bundleName = want.parameters.bundleName ? want.parameters.bundleName : 'all'; 81c5c2eed7Sopenharmony_ci if (globalThis.currentApp === 'all') { 82c5c2eed7Sopenharmony_ci if (globalThis.currentApp !== bundleName) { 83c5c2eed7Sopenharmony_ci console.log(TAG + 'MainAbility onNewWant. all -> app'); 84c5c2eed7Sopenharmony_ci globalThis.windowStage?.setUIContent(this.context, 'pages/transition', null); 85c5c2eed7Sopenharmony_ci globalThis.currentApp = bundleName; 86c5c2eed7Sopenharmony_ci GlobalContext.store('bundleName', bundleName); 87c5c2eed7Sopenharmony_ci this.getSperifiedApplication(bundleName); 88c5c2eed7Sopenharmony_ci } else { 89c5c2eed7Sopenharmony_ci if (globalThis.refresh === true) { 90c5c2eed7Sopenharmony_ci globalThis.windowStage?.setUIContent(this.context, 'pages/transition', null); 91c5c2eed7Sopenharmony_ci this.getAllApplications(); 92c5c2eed7Sopenharmony_ci globalThis.refresh = false; 93c5c2eed7Sopenharmony_ci } 94c5c2eed7Sopenharmony_ci } 95c5c2eed7Sopenharmony_ci } else { 96c5c2eed7Sopenharmony_ci if (bundleName === 'all') { 97c5c2eed7Sopenharmony_ci console.log(TAG + 'MainAbility onNewWant. app -> all'); 98c5c2eed7Sopenharmony_ci globalThis.windowStage?.setUIContent(this.context, 'pages/transition', null); 99c5c2eed7Sopenharmony_ci globalThis.currentApp = 'all'; 100c5c2eed7Sopenharmony_ci this.getAllApplications(); 101c5c2eed7Sopenharmony_ci } else { 102c5c2eed7Sopenharmony_ci if (globalThis.currentApp !== bundleName) { 103c5c2eed7Sopenharmony_ci console.log(TAG + 'MainAbility onNewWant. app -> app'); 104c5c2eed7Sopenharmony_ci globalThis.windowStage?.setUIContent(this.context, 'pages/transition', null); 105c5c2eed7Sopenharmony_ci globalThis.currentApp = bundleName; 106c5c2eed7Sopenharmony_ci GlobalContext.store('bundleName', bundleName); 107c5c2eed7Sopenharmony_ci this.getSperifiedApplication(bundleName); 108c5c2eed7Sopenharmony_ci } 109c5c2eed7Sopenharmony_ci } 110c5c2eed7Sopenharmony_ci } 111c5c2eed7Sopenharmony_ci 112c5c2eed7Sopenharmony_ci } 113c5c2eed7Sopenharmony_ci 114c5c2eed7Sopenharmony_ci onWindowStageDestroy(): void { 115c5c2eed7Sopenharmony_ci try { 116c5c2eed7Sopenharmony_ci bundleMonitor.off('add'); 117c5c2eed7Sopenharmony_ci bundleMonitor.off('remove'); 118c5c2eed7Sopenharmony_ci bundleMonitor.off('update'); 119c5c2eed7Sopenharmony_ci console.log(TAG + 'MainAbility onWindowStageDestroy.'); 120c5c2eed7Sopenharmony_ci } catch (err) { 121c5c2eed7Sopenharmony_ci console.log(`errData is errCode:${err.code} message:${err.message}`); 122c5c2eed7Sopenharmony_ci } 123c5c2eed7Sopenharmony_ci } 124c5c2eed7Sopenharmony_ci 125c5c2eed7Sopenharmony_ci onBackground(): void { 126c5c2eed7Sopenharmony_ci console.log(TAG + ' onBackground.'); 127c5c2eed7Sopenharmony_ci } 128c5c2eed7Sopenharmony_ci 129c5c2eed7Sopenharmony_ci onDestroy(): void { 130c5c2eed7Sopenharmony_ci console.log(TAG + ' onDestroy.'); 131c5c2eed7Sopenharmony_ci } 132c5c2eed7Sopenharmony_ci 133c5c2eed7Sopenharmony_ci onForeground(): void { 134c5c2eed7Sopenharmony_ci console.log(TAG + ' onForeground.'); 135c5c2eed7Sopenharmony_ci } 136c5c2eed7Sopenharmony_ci 137c5c2eed7Sopenharmony_ci getAllApplications(): void { 138c5c2eed7Sopenharmony_ci const flag = 139c5c2eed7Sopenharmony_ci bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION | 140c5c2eed7Sopenharmony_ci bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_REQUESTED_PERMISSION; 141c5c2eed7Sopenharmony_ci let accountManager = account_osAccount.getAccountManager(); 142c5c2eed7Sopenharmony_ci try { 143c5c2eed7Sopenharmony_ci accountManager.getActivatedOsAccountLocalIds((err, idArray: number[])=>{ 144c5c2eed7Sopenharmony_ci console.log(TAG + 'getActivatedOsAccountLocalIds err:' + JSON.stringify(err)); 145c5c2eed7Sopenharmony_ci console.log(TAG + 'getActivatedOsAccountLocalIds idArray: ' + JSON.stringify(idArray)); 146c5c2eed7Sopenharmony_ci let userId = idArray[0]; 147c5c2eed7Sopenharmony_ci bundleManager.getAllBundleInfo(flag, userId || USER_ID).then(async(bundleInfos) => { 148c5c2eed7Sopenharmony_ci if (bundleInfos.length <= 0) { 149c5c2eed7Sopenharmony_ci console.info(TAG + 'bundle.getAllBundleInfo result.length less than or equal to zero'); 150c5c2eed7Sopenharmony_ci return; 151c5c2eed7Sopenharmony_ci } 152c5c2eed7Sopenharmony_ci let initialGroups = []; 153c5c2eed7Sopenharmony_ci for (let i = 0; i < bundleInfos.length; i++) { 154c5c2eed7Sopenharmony_ci let info = bundleInfos[i]; 155c5c2eed7Sopenharmony_ci // Filter blank icon icon and text label resources 156c5c2eed7Sopenharmony_ci try { 157c5c2eed7Sopenharmony_ci await bundleManager.queryAbilityInfo({ 158c5c2eed7Sopenharmony_ci bundleName: info.name, 159c5c2eed7Sopenharmony_ci action: 'action.system.home', 160c5c2eed7Sopenharmony_ci entities: ['entity.system.home'] 161c5c2eed7Sopenharmony_ci }, bundleManager.AbilityFlag.GET_ABILITY_INFO_WITH_APPLICATION); 162c5c2eed7Sopenharmony_ci } catch (error) { 163c5c2eed7Sopenharmony_ci console.error( 164c5c2eed7Sopenharmony_ci TAG + 'queryAbilityByWant catch app: ' + JSON.stringify(info.name) + 'err: ' + JSON.stringify(error) 165c5c2eed7Sopenharmony_ci ); 166c5c2eed7Sopenharmony_ci continue; 167c5c2eed7Sopenharmony_ci } 168c5c2eed7Sopenharmony_ci 169c5c2eed7Sopenharmony_ci initialGroups.push(info); 170c5c2eed7Sopenharmony_ci } 171c5c2eed7Sopenharmony_ci let storage: LocalStorage = new LocalStorage({ 'initialGroups': initialGroups }); 172c5c2eed7Sopenharmony_ci globalThis.windowStage?.loadContent('pages/authority-management', storage); 173c5c2eed7Sopenharmony_ci }).catch((error) => { 174c5c2eed7Sopenharmony_ci console.error(TAG + 'bundle.getAllBundleInfo failed. Cause: ' + JSON.stringify(error)); 175c5c2eed7Sopenharmony_ci }); 176c5c2eed7Sopenharmony_ci }); 177c5c2eed7Sopenharmony_ci } catch (e) { 178c5c2eed7Sopenharmony_ci console.error(TAG + 'getActivatedOsAccountLocalIds exception: ' + JSON.stringify(e)); 179c5c2eed7Sopenharmony_ci } 180c5c2eed7Sopenharmony_ci } 181c5c2eed7Sopenharmony_ci 182c5c2eed7Sopenharmony_ci getSperifiedApplication(bundleName): void { 183c5c2eed7Sopenharmony_ci const flag = 184c5c2eed7Sopenharmony_ci bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION | 185c5c2eed7Sopenharmony_ci bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_REQUESTED_PERMISSION; 186c5c2eed7Sopenharmony_ci try { 187c5c2eed7Sopenharmony_ci bundleManager.getBundleInfo(bundleName, flag).then(bundleInfo => { 188c5c2eed7Sopenharmony_ci let reqPermissions: Array<string> = []; 189c5c2eed7Sopenharmony_ci bundleInfo.reqPermissionDetails.forEach(item => { 190c5c2eed7Sopenharmony_ci reqPermissions.push(item.name); 191c5c2eed7Sopenharmony_ci }); 192c5c2eed7Sopenharmony_ci 193c5c2eed7Sopenharmony_ci let info = { 194c5c2eed7Sopenharmony_ci 'bundleName': bundleInfo.name, 195c5c2eed7Sopenharmony_ci 'api': bundleInfo.targetVersion, 196c5c2eed7Sopenharmony_ci 'tokenId': bundleInfo.appInfo.accessTokenId, 197c5c2eed7Sopenharmony_ci 'icon': '', 198c5c2eed7Sopenharmony_ci 'iconId': bundleInfo.appInfo.iconId, 199c5c2eed7Sopenharmony_ci 'iconResource': bundleInfo.appInfo.iconResource, 200c5c2eed7Sopenharmony_ci 'label': '', 201c5c2eed7Sopenharmony_ci 'labelId': bundleInfo.appInfo.labelId, 202c5c2eed7Sopenharmony_ci 'labelResource': bundleInfo.appInfo.labelResource, 203c5c2eed7Sopenharmony_ci 'permissions': reqPermissions, 204c5c2eed7Sopenharmony_ci 'groupId': [], 205c5c2eed7Sopenharmony_ci 'zhTag': '', 206c5c2eed7Sopenharmony_ci 'indexTag': '', 207c5c2eed7Sopenharmony_ci 'language': '' 208c5c2eed7Sopenharmony_ci }; 209c5c2eed7Sopenharmony_ci GlobalContext.store('applicationInfo', info); 210c5c2eed7Sopenharmony_ci globalThis.windowStage?.setUIContent(this.context, 'pages/application-secondary', null); 211c5c2eed7Sopenharmony_ci }).catch((error) => { 212c5c2eed7Sopenharmony_ci console.log(TAG + 'Special branch getBundleInfo failed:' + JSON.stringify(error)); 213c5c2eed7Sopenharmony_ci this.context.terminateSelf(); 214c5c2eed7Sopenharmony_ci }); 215c5c2eed7Sopenharmony_ci } catch (error) { 216c5c2eed7Sopenharmony_ci console.error(TAG + 'Special branch failed: ' + JSON.stringify(error)); 217c5c2eed7Sopenharmony_ci } 218c5c2eed7Sopenharmony_ci } 219c5c2eed7Sopenharmony_ci}; 220