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.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 getNamenull48 fun getName(context: Context) = context.resources.getString(nameId) 49 50 fun getIcon(context: Context) = context.resources.getDrawable(iconId, context.theme) 51 } 52 53 private const val UNKNOWN_TIMESTAMP = -1L 54 data class PrivacyItem( 55 val privacyType: PrivacyType, 56 val application: PrivacyApplication, 57 val timeStampElapsed: Long = UNKNOWN_TIMESTAMP, 58 val paused: Boolean = false 59 ) { 60 val log = "(${privacyType.logName}, ${application.packageName}(${application.uid}), " + 61 "$timeStampElapsed, paused=$paused)" 62 } 63 64 data class PrivacyApplication(val packageName: String, val uid: Int) 65