diff --git a/permissionmanager/src/main/ets/PermissionSheet/GlobalSwitchSheetDialog.ets b/permissionmanager/src/main/ets/PermissionSheet/GlobalSwitchSheetDialog.ets index 74d9b1b04d67ebf31c61a37a8cd8bea50e2ce0d7..a0502b9027b2697154cd91229eb49ab93a5b2c12 100644 --- a/permissionmanager/src/main/ets/PermissionSheet/GlobalSwitchSheetDialog.ets +++ b/permissionmanager/src/main/ets/PermissionSheet/GlobalSwitchSheetDialog.ets @@ -27,6 +27,7 @@ import bundleManager from '@ohos.bundle.bundleManager'; import { getCallerBundleInfo } from './PermissionStateSheetDialog'; import UIExtensionContentSession from '@ohos.app.ability.UIExtensionContentSession'; import common from '@ohos.app.ability.common'; +import { PermissionGroup } from '../common/model/definition'; let globalIsOn: boolean; @@ -42,7 +43,7 @@ struct GlobalSwitchSheetDialog { storage.get('session') as UIExtensionContentSession; private context = getContext(this) as common.ServiceExtensionContext; private muteSuppoted = false; - private groupName: string = ''; + private groupName: PermissionGroup = PermissionGroup.OTHER; dialogController: CustomDialogController | null = new CustomDialogController({ builder: CustomContentDialog({ contentBuilder: () => { @@ -87,9 +88,9 @@ struct GlobalSwitchSheetDialog { bundleName = callerBundle.bundleName; if (globalSwitch === Constants.GLOBAL_SWITCH_CAMERA) { - this.groupName = 'CAMERA'; + this.groupName = PermissionGroup.CAMERA; } else if (globalSwitch === Constants.GLOBAL_SWITCH_MICROPHONE) { - this.groupName = 'MICROPHONE'; + this.groupName = PermissionGroup.MICROPHONE; } else { Log.error('global switch not suppoted'); PermissionDialogException(Constants.ERR_GLOBAL_SWITCH_NOT_SUPPORTED, session); @@ -141,8 +142,8 @@ struct applicationItem { private context = getContext(this) as common.ServiceExtensionContext; @State globalIsOn: boolean = false; @State backTitle: string = ''; - @State groupInfo: GroupInfo = new GroupInfo('', '', '', '', [], '', [], [], false); - @State currentGroup: string = ''; + @State groupInfo: GroupInfo = new GroupInfo(PermissionGroup.OTHER, '', '', '', [], '', [], [], false); + @State currentGroup: PermissionGroup = PermissionGroup.OTHER; @State isMuteSupported: boolean = false; @State appName: ResourceStr = ''; private controller: CustomDialogController; diff --git a/permissionmanager/src/main/ets/PermissionSheet/PermissionStateSheetDialog.ets b/permissionmanager/src/main/ets/PermissionSheet/PermissionStateSheetDialog.ets index 14ad85d95b73b30ae5cb2b1014b7e83d7e83dbfb..cdd7d11458c7d29659e7791e1b79494d97f95cea 100644 --- a/permissionmanager/src/main/ets/PermissionSheet/PermissionStateSheetDialog.ets +++ b/permissionmanager/src/main/ets/PermissionSheet/PermissionStateSheetDialog.ets @@ -27,7 +27,7 @@ import { AppInfo, CallerBundleInfo, MediaDocObj, WantInfo } from '../common/model/typedef'; import { GlobalContext } from '../common/utils/globalContext'; -import { Permission } from '../common/model/definition'; +import { Permission, PermissionGroup } from '../common/model/definition'; import abilityAccessCtrl, { Permissions } from '@ohos.abilityAccessCtrl'; import { groups, showSubPermissionsGroup } from '../common/model/permissionGroup'; import UIExtensionContentSession from '@ohos.app.ability.UIExtensionContentSession'; @@ -86,7 +86,7 @@ struct PermissionStateSheetDialog { @State bundleName: string = ''; @State isGranted: number = Constants.PERMISSION_ALLOW; @State groupName: ResourceStr = ''; - @State currentGroup: string = ''; + @State currentGroup: PermissionGroup = PermissionGroup.OTHER; dialogController: CustomDialogController | null = new CustomDialogController({ builder: CustomContentDialog({ @@ -357,7 +357,7 @@ struct mediaDocumentItem { private tokenId: number = 0; private controller: CustomDialogController; @State hidden: boolean = false; - @State currentGroup: string = ''; + @State currentGroup: PermissionGroup = PermissionGroup.OTHER; @State applicationInfo: AppInfo = GlobalContext.load('applicationInfo'); @State folderStatus: boolean[] = []; @State mediaDocListItem: MediaDocObj[] = []; // Permission information array diff --git a/permissionmanager/src/main/ets/common/model/permissionGroup.ets b/permissionmanager/src/main/ets/common/model/permissionGroup.ets index f1ad0ac1d69505ea6968bad747003b40c44911a2..68dd61eb219340425b979fc43e092b40f4102178 100644 --- a/permissionmanager/src/main/ets/common/model/permissionGroup.ets +++ b/permissionmanager/src/main/ets/common/model/permissionGroup.ets @@ -73,7 +73,7 @@ export const groups: GroupInfo[] = [ new GroupInfo(PermissionGroup.CUSTOM_SCREEN_CAPTURE, $r('app.string.groupName_screenCapture'), 'app.string.group_label_screenCapture', $r('app.media.ic_public_screen_capture'), [], '', [Permission.CUSTOM_SCREEN_CAPTURE], [ButtonStatus.DENY, ButtonStatus.ALLOW], false, 'app.string.enable_description_screenCapture', $r('app.string.forbidden_description_screenCapture')) ]; -export const userGrantPermissions: string[] = [ +export const userGrantPermissions: Permission[] = [ Permission.LOCATION_IN_BACKGROUND, Permission.APPROXIMATELY_LOCATION, Permission.LOCATION, @@ -108,6 +108,13 @@ export const userGrantPermissions: string[] = [ Permission.CUSTOM_SCREEN_CAPTURE ]; +export const only2in1AndTabletSupportedPermissions: Permission[] = [ + Permission.READ_WRITE_DOWNLOAD_DIRECTORY, + Permission.READ_WRITE_DESKTOP_DIRECTORY, + Permission.READ_WRITE_DOCUMENTS_DIRECTORY, + Permission.CUSTOM_SCREEN_CAPTURE +] + export const buttonResource: Map = new Map([ [ButtonStatus.ALLOW, $r('app.string.allow')], [ButtonStatus.DENY, $r('app.string.ban')], @@ -117,17 +124,17 @@ export const buttonResource: Map = new Map([ [ButtonStatus.ALLOW_ONLY_DURING_USE, $r('app.string.allowed_only_during_use')] ]) -export const showSubPermissionsGroup: string[] = [ +export const showSubPermissionsGroup: PermissionGroup[] = [ PermissionGroup.CALENDAR, PermissionGroup.CONTACTS, ]; -export const polymorphismGroup: string[] = [ +export const polymorphismGroup: PermissionGroup[] = [ PermissionGroup.LOCATION, PermissionGroup.FOLDER ] -export const globalGroup: string[] = [ +export const globalGroup: PermissionGroup[] = [ PermissionGroup.MICROPHONE, PermissionGroup.CAMERA ] \ No newline at end of file diff --git a/permissionmanager/src/main/ets/common/model/typedef.ets b/permissionmanager/src/main/ets/common/model/typedef.ets index 39e9837923ac7c84b50a4ab21958252ec42483e3..860133382614de3a823a28ecf96f02907990a02a 100644 --- a/permissionmanager/src/main/ets/common/model/typedef.ets +++ b/permissionmanager/src/main/ets/common/model/typedef.ets @@ -13,7 +13,7 @@ * limitations under the License. */ import { Permissions } from '@ohos.abilityAccessCtrl'; -import { ButtonStatus, Permission } from './definition'; +import { ButtonStatus, Permission, PermissionGroup } from './definition'; export class AppInfo { public bundleName: string @@ -79,13 +79,19 @@ export class PermissionApplications { }; export class GroupPermission { - public group: string + public group: PermissionGroup public permissions: string[] public groupName: ResourceStr public icon: ResourceStr public isShow: boolean - constructor(group: string, permissions: string[], groupName: ResourceStr, icon: ResourceStr, isShow: boolean) { + constructor( + group: PermissionGroup, + permissions: string[], + groupName: ResourceStr, + icon: ResourceStr, + isShow: boolean + ) { this.group = group this.permissions = permissions this.groupName = groupName @@ -227,7 +233,7 @@ export class OtherPermission { export class PermissionInfo { public permissionName: Permission - public groupName: string + public groupName: PermissionGroup public label: ResourceStr public groupId: number public enableDescription?: string @@ -235,7 +241,7 @@ export class PermissionInfo { constructor( permissionName: Permission, - groupName: string, + groupName: PermissionGroup, label: ResourceStr, groupId: number, enableDescription?: string, @@ -251,7 +257,7 @@ export class PermissionInfo { } export class GroupInfo { - public name: string + public name: PermissionGroup public groupName: ResourceStr public label: string public icon: ResourceStr @@ -264,7 +270,7 @@ export class GroupInfo { public forbiddenDescription?: ResourceStr constructor( - name: string, + name: PermissionGroup, groupName: ResourceStr, label: string, icon: ResourceStr, diff --git a/permissionmanager/src/main/ets/common/utils/utils.ets b/permissionmanager/src/main/ets/common/utils/utils.ets index 539751a907f37ed25135a3ae3b1708e9d0ffed4c..0127e97781b6f929333b678afb68f38971c16ad9 100644 --- a/permissionmanager/src/main/ets/common/utils/utils.ets +++ b/permissionmanager/src/main/ets/common/utils/utils.ets @@ -16,8 +16,13 @@ import abilityAccessCtrl, { Permissions } from '@ohos.abilityAccessCtrl'; import i18n from '@ohos.i18n'; import hilog from '@ohos.hilog'; -import { permissionInfos, groups } from '../model/permissionGroup'; -import { Permission } from '../model/definition'; +import { + permissionInfos, + groups, + userGrantPermissions, + only2in1AndTabletSupportedPermissions +} from '../model/permissionGroup'; +import { Permission, PermissionGroup } from '../model/definition'; import Constants from '../utils/constant'; import { BundleInfoUtils } from './bundleInfoUtils'; import { CommonUtils } from './commonUtils'; @@ -26,6 +31,7 @@ import systemParameterEnhance from '@ohos.systemParameterEnhance'; import UIExtensionContentSession from '@ohos.app.ability.UIExtensionContentSession'; import uiExtensionHost from '@ohos.uiExtensionHost'; import window from '@ohos.window'; +import { deviceInfo } from '@kit.BasicServicesKit'; import { GlobalContext } from './globalContext'; const TAG = 'PermissionManager_Log ' @@ -181,7 +187,7 @@ export function getPermissionLabel(permission: Permission): ResourceStr { export function getPermissionGroup(permission: Permission): GroupInfo { let permissionInfo = permissionInfos.get(permission); if (!permissionInfo) { - return new GroupInfo('', '', '', '', [], '', [], [], false); + return new GroupInfo(PermissionGroup.OTHER, '', '', '', [], '', [], [], false); } return groups[permissionInfo.groupId]; } @@ -238,27 +244,27 @@ export function PermissionDialogReturn(resultArray: Array, session: UIEx } // check if the permissions provided are in the same group -export function checkPermissionGroup(appPermissions: Permission[]): string | null { +export function checkPermissionGroup(appPermissions: Permission[]): PermissionGroup | null { if (appPermissions.length == 0) { return null; } - let groupName = '' // index of group in permissionGroup + let groupName = PermissionGroup.OTHER; // index of group in permissionGroup // check if permission is a valid permission for (const permission of appPermissions) { let permissionInfo = permissionInfos.get(permission); // if permission not found in known permissions , return false if (!permissionInfo) { - Log.error(TAG + 'unknown info ' + permission) + Log.error(TAG + 'unknown info ' + permission); return null; } // if groupName not set , set groupName - if (groupName == '') { + if (groupName == PermissionGroup.OTHER) { groupName = permissionInfo.groupName; } // if current groupName is not the same to the previous , not the same group if (permissionInfo.groupName != groupName) { - Log.error(TAG + 'permission ' + permission + ' is not in current group ' + groupName) - return null + Log.error(TAG + 'permission ' + permission + ' is not in current group ' + groupName); + return null; } } return groupName; @@ -277,6 +283,16 @@ export function getFontSizeScale(): boolean { return fontSizeScale > 1; } +export function supportPermission(): Permission[] { + if (deviceInfo.deviceType === '2in1' || deviceInfo.deviceType === 'tablet') { + return userGrantPermissions; + } + let supportGroup: Permission[] = []; + supportGroup = + userGrantPermissions.filter(permission => only2in1AndTabletSupportedPermissions.includes(permission) === false); + return supportGroup; +} + export class Log { public static domain: number = 0x8214; public static tag: string = 'PermissionManager_Log'; diff --git a/permissionmanager/src/main/ets/pages/application-secondary.ets b/permissionmanager/src/main/ets/pages/application-secondary.ets index 96833412b367fb2241c5e57729038d4f424f422e..aaa3734f7c56f2693a1efbc2d7ddbaa548011e64 100644 --- a/permissionmanager/src/main/ets/pages/application-secondary.ets +++ b/permissionmanager/src/main/ets/pages/application-secondary.ets @@ -19,9 +19,9 @@ import common from '@ohos.app.ability.common'; import abilityAccessCtrl, { Permissions } from '@ohos.abilityAccessCtrl'; import bundleManager from '@ohos.bundle.bundleManager'; import { BusinessError } from '@ohos.base'; -import { groups, userGrantPermissions } from '../common/model/permissionGroup'; +import { groups } from '../common/model/permissionGroup'; import Constants from '../common/utils/constant'; -import { Log, verifyAccessToken, getGroupIdByPermission } from '../common/utils/utils'; +import { Log, verifyAccessToken, getGroupIdByPermission, supportPermission } from '../common/utils/utils'; import { PermissionObj, AppInfo } from '../common/model/typedef'; import { GlobalContext } from '../common/utils/globalContext'; import { Permission } from '../common/model/definition'; @@ -104,7 +104,8 @@ struct appNamePlusPage { if (info.permissions.length > 0) { for (let j = 0; j < info.permissions.length; j++) { let permission = info.permissions[j] as Permission; - if (userGrantPermissions.indexOf(permission) == -1) { + let supportPermissions = supportPermission(); + if (supportPermissions.indexOf(permission) == -1) { continue; } try { diff --git a/permissionmanager/src/main/ets/pages/application-tertiary.ets b/permissionmanager/src/main/ets/pages/application-tertiary.ets index 3738f9f8688177cba9dd6fc20171f6ef3db8b736..9c9eeae2047b1eff89e5594fe480821deaf21da9 100644 --- a/permissionmanager/src/main/ets/pages/application-tertiary.ets +++ b/permissionmanager/src/main/ets/pages/application-tertiary.ets @@ -24,7 +24,7 @@ import { Log, getPermissionLabel } from '../common/utils/utils'; import Constants from '../common/utils/constant'; import { MediaDocObj, RouterParams3, AppInfo, CheckboxInfo } from '../common/model/typedef'; import { GlobalContext } from '../common/utils/globalContext'; -import { Permission } from '../common/model/definition'; +import { Permission, PermissionGroup } from '../common/model/definition'; const showPrecise: number[] = [Constants.PERMISSION_ALLOW, Constants.PERMISSION_ALLOWED_ONLY_DURING_USE]; let accessTokenId: number = 0; @@ -162,7 +162,7 @@ struct mediaDocumentItem { private bundleName: string = (router.getParams() as RouterParams3).bundleName; private permissions: Permission[] = (router.getParams() as RouterParams3).permission; private status: number = (router.getParams() as RouterParams3).status; - @State currentGroup: string = GlobalContext.load('currentPermissionGroup'); + @State currentGroup: PermissionGroup = GlobalContext.load('currentPermissionGroup'); @State applicationInfo: AppInfo = GlobalContext.load('applicationInfo'); @Link folderStatus: boolean[]; @State mediaDocListItem: MediaDocObj[] = []; // Permission information array diff --git a/permissionmanager/src/main/ets/pages/authority-management.ets b/permissionmanager/src/main/ets/pages/authority-management.ets index f5d799511154c56c16d92ff816802c9da3c58afb..612276e6902a20c89522f1f1fcf2b34be9452820 100644 --- a/permissionmanager/src/main/ets/pages/authority-management.ets +++ b/permissionmanager/src/main/ets/pages/authority-management.ets @@ -17,24 +17,25 @@ import { backBar } from '../common/components/backBar'; import { alphabetIndexerComponent } from '../common/components/alphabeticalIndex'; import { textInput } from '../common/components/search'; import router from '@ohos.router'; -import abilityAccessCtrl, { Permissions } from '@ohos.abilityAccessCtrl'; +import abilityAccessCtrl from '@ohos.abilityAccessCtrl'; import audio from '@ohos.multimedia.audio' import camera from '@ohos.multimedia.camera' import display from '@ohos.display'; import common from '@ohos.app.ability.common'; -import { groups, userGrantPermissions, globalGroup, showSubPermissionsGroup } from '../common/model/permissionGroup'; +import { groups, globalGroup, showSubPermissionsGroup } from '../common/model/permissionGroup'; import { Log, indexValue, addLocalTag, sortByName, + supportPermission, getPermissionGroup, getGroupIdByPermission, getPermissionGroupByName } from '../common/utils/utils'; import { AppInfo, PermissionApplications, GroupPermission, GroupInfo } from '../common/model/typedef'; import { GlobalContext } from '../common/utils/globalContext'; -import { Permission } from '../common/model/definition'; +import { Permission, PermissionGroup } from '../common/model/definition'; import Constants from '../common/utils/constant'; import bundleManager from '@ohos.bundle.bundleManager'; @@ -148,7 +149,7 @@ struct authorityManagementPage { @State allGroupPermission: GroupPermission[] = []; // All group permissions @State allUserPermissions: Permission[] = []; @State allBundleInfo: AppInfo[] = []; - @State allGroups: string[] = []; + @State allGroups: PermissionGroup[] = []; @State currentIndex: number = 0; @State isTouch: string = ''; @State isVertical: boolean = true; @@ -276,7 +277,8 @@ struct authorityManagementPage { } catch (err) { Log.error('getPermissionFlags error: ' + JSON.stringify(err)); } - if (userGrantPermissions.indexOf(permission) != -1) { + let supportPermissions = supportPermission(); + if (supportPermissions.indexOf(permission) != -1) { reqUserPermissions.push(permission); if (this.allUserPermissions.indexOf(permission) == -1) { this.allUserPermissions.push(permission); diff --git a/permissionmanager/src/main/ets/pages/authority-tertiary-groups.ets b/permissionmanager/src/main/ets/pages/authority-tertiary-groups.ets index b41ddf08c7c9b8ab501bf5057dd5269d92067fa7..10373eed24470b3de99de92d14a5e0365c97eedc 100644 --- a/permissionmanager/src/main/ets/pages/authority-tertiary-groups.ets +++ b/permissionmanager/src/main/ets/pages/authority-tertiary-groups.ets @@ -43,7 +43,7 @@ let globalIsOn: boolean = (router.getParams() as RouterParams1).globalIsOn; // r struct locationInfoPage { private backTitle: ResourceStr = (router.getParams() as RouterParams1).backTitle; private list: PermissionApplications[] = (router.getParams() as RouterParams1).list; - @State currentGroup: string = GlobalContext.load('currentPermissionGroup'); + @State currentGroup: PermissionGroup = GlobalContext.load('currentPermissionGroup'); @State polymorphismIsOn: Array = []; @State folderStatusArray: Array> = [[]]; @@ -168,8 +168,8 @@ struct applicationItem { @State globalIsOn: boolean = true; @State selectedIndex: number = 0; @State isTouch: string = ''; - @State groupInfo: GroupInfo = new GroupInfo('', '', '', '', [], '', [], [], false); - @State currentGroup: string = GlobalContext.load('currentPermissionGroup'); + @State groupInfo: GroupInfo = new GroupInfo(PermissionGroup.OTHER, '', '', '', [], '', [], [], false); + @State currentGroup: PermissionGroup = GlobalContext.load('currentPermissionGroup'); @State isMuteSupported: boolean = GlobalContext.load('isMuteSupported'); @State allBundleInfo: AppInfo[] = GlobalContext.load('allBundleInfo'); scroller: Scroller = new Scroller(); diff --git a/permissionmanager/src/main/ets/pages/dialogPlus.ets b/permissionmanager/src/main/ets/pages/dialogPlus.ets index f3d465fc0ca011b154400c77e147d2b01a8566c2..20b777200767ca80ae048435f3edc420e68a8fee 100644 --- a/permissionmanager/src/main/ets/pages/dialogPlus.ets +++ b/permissionmanager/src/main/ets/pages/dialogPlus.ets @@ -26,13 +26,14 @@ import { getPermissionGroup, titleTrim, getPermissionLabel, - getFontSizeScale + getFontSizeScale, + supportPermission } from '../common/utils/utils'; import { Permission, ButtonStatus } from '../common/model/definition'; import { GroupInfo, WantInfo } from '../common/model/typedef'; import { GlobalContext } from '../common/utils/globalContext'; import Constants from '../common/utils/constant'; -import { showSubPermissionsGroup, userGrantPermissions, buttonResource } from '../common/model/permissionGroup'; +import { showSubPermissionsGroup, buttonResource } from '../common/model/permissionGroup'; import { LocationCanvas } from '../common/components/location'; import { MeasureText } from '@kit.ArkUI'; @@ -430,8 +431,9 @@ struct dialogPlusPage { Log.info('permission has been fixed:' + permission); this.result[idx] = abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED; } else if (stateGroup[idx] == Constants.DYNAMIC_OPER) { - if (!userGrantPermissions.includes(permission)) { - Log.info('permission not find:' + permission); + let supportPermissions = supportPermission(); + if (!supportPermissions.includes(permission)) { + Log.info('The permission does not exist or is not supported by the current device: ' + permission); } else { this.addGroup(permission); } diff --git a/permissionmanager/src/main/ets/pages/permission-access-record.ets b/permissionmanager/src/main/ets/pages/permission-access-record.ets index 49f2c92e8f8f93f6ceef90e23c19a03e0efd1e9a..69ba3c2abea81e768ffcb84471159c1e7a6a63cb 100644 --- a/permissionmanager/src/main/ets/pages/permission-access-record.ets +++ b/permissionmanager/src/main/ets/pages/permission-access-record.ets @@ -16,12 +16,11 @@ import bundleManager from '@ohos.bundle.bundleManager'; import router from '@ohos.router'; import common from '@ohos.app.ability.common'; -import abilityAccessCtrl, { Permissions } from '@ohos.abilityAccessCtrl'; +import abilityAccessCtrl from '@ohos.abilityAccessCtrl'; import privacyManager from '@ohos.privacyManager'; import { backBar } from '../common/components/backBar'; import Constants from '../common/utils/constant'; -import { userGrantPermissions } from '../common/model/permissionGroup'; -import { Log, getPermissionGroup, getGroupIdByPermission } from '../common/utils/utils'; +import { Log, getPermissionGroup, getGroupIdByPermission, supportPermission } from '../common/utils/utils'; import { StringObj, AppInfoSimple, @@ -506,7 +505,7 @@ struct permissionRecordPage { async getReqUserRecords(record: privacyManager.BundleUsedRecord, info: bundleManager.BundleInfo) { for (let j = 0; j < record.permissionRecords.length; j++) { - let permission = record.permissionRecords[j].permissionName; + let permission = record.permissionRecords[j].permissionName as Permission; try { let flag = await abilityAccessCtrl.createAtManager().getPermissionFlags(info.appInfo.accessTokenId, permission); if (flag == Constants.PERMISSION_SYSTEM_FIXED) { @@ -515,7 +514,8 @@ struct permissionRecordPage { } catch (err) { Log.error('getPermissionFlags error: ' + JSON.stringify(err)); } - if (userGrantPermissions.indexOf(permission) != -1) { + let supportPermissions = supportPermission(); + if (supportPermissions.indexOf(permission) != -1) { this.reqUserRecords.push(record.permissionRecords[j]); } } @@ -533,7 +533,8 @@ struct permissionRecordPage { } catch (err) { Log.error('getPermissionFlags error: ' + JSON.stringify(err)); } - if (userGrantPermissions.indexOf(reqPermission) != -1) { + let supportPermissions = supportPermission(); + if (supportPermissions.indexOf(reqPermission) != -1) { this.reqUserPermissions.push(reqPermission); } }