1 /* 2 * Copyright (C) 2020 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file 5 * except in compliance with the License. You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software distributed under the 10 * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 11 * KIND, either express or implied. See the License for the specific language governing 12 * permissions and limitations under the License. 13 */ 14 15 package com.android.systemui.privacy 16 17 import android.content.Context 18 import com.android.systemui.res.R 19 20 typealias Privacy = PrivacyType 21 22 enum class PrivacyType( 23 val nameId: Int, 24 val iconId: Int, 25 val permGroupName: String, 26 val logName: String 27 ) { 28 // This uses the icons used by the corresponding permission groups in the AndroidManifest 29 TYPE_CAMERA( 30 R.string.privacy_type_camera, 31 com.android.internal.R.drawable.perm_group_camera, 32 android.Manifest.permission_group.CAMERA, 33 "camera" 34 ), 35 TYPE_MICROPHONE( 36 R.string.privacy_type_microphone, 37 com.android.internal.R.drawable.perm_group_microphone, 38 android.Manifest.permission_group.MICROPHONE, 39 "microphone" 40 ), 41 TYPE_LOCATION( 42 R.string.privacy_type_location, 43 com.android.internal.R.drawable.perm_group_location, 44 android.Manifest.permission_group.LOCATION, 45 "location" 46 ), 47 TYPE_MEDIA_PROJECTION( 48 R.string.privacy_type_media_projection, 49 R.drawable.stat_sys_cast, 50 android.Manifest.permission_group.UNDEFINED, 51 "media projection" 52 ); 53 getNamenull54 fun getName(context: Context) = context.resources.getString(nameId) 55 56 fun getIcon(context: Context) = context.resources.getDrawable(iconId, context.theme) 57 } 58 59 private const val UNKNOWN_TIMESTAMP = -1L 60 data class PrivacyItem( 61 val privacyType: PrivacyType, 62 val application: PrivacyApplication, 63 val timeStampElapsed: Long = UNKNOWN_TIMESTAMP, 64 val paused: Boolean = false 65 ) { 66 val log = "(${privacyType.logName}, ${application.packageName}(${application.uid}), " + 67 "$timeStampElapsed, paused=$paused)" 68 } 69 70 data class PrivacyApplication(val packageName: String, val uid: Int) 71