1 /*
<lambda>null2  * Copyright (C) 2024 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.intentresolver.data.repository
18 
19 import android.content.pm.UserInfo
20 import com.android.intentresolver.shared.model.User
21 import com.android.intentresolver.shared.model.User.Role
22 
23 /** Maps the UserInfo to one of the defined [Roles][User.Role], if possible. */
24 fun UserInfo.getSupportedUserRole(): Role? =
25     when {
26         isFull -> Role.PERSONAL
27         isManagedProfile -> Role.WORK
28         isCloneProfile -> Role.CLONE
29         isPrivateProfile -> Role.PRIVATE
30         else -> null
31     }
32 
33 /**
34  * Creates a [User], based on values from a [UserInfo].
35  *
36  * ```
37  * val users: List<User> =
38  *     getEnabledProfiles(user).map(::toUser).filterNotNull()
39  * ```
40  *
41  * @return a [User] if the [UserInfo] matched a supported [Role], otherwise null
42  */
toUsernull43 fun UserInfo.toUser(): User? {
44     return getSupportedUserRole()?.let { role -> User(userHandle.identifier, role) }
45 }
46