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