1 /*
2  * Copyright (C) 2020 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.systemui.settings
18 
19 import android.content.Context
20 import android.content.pm.UserInfo
21 import android.os.UserHandle
22 import java.util.concurrent.Executor
23 
24 /**
25  * User tracker for SystemUI.
26  *
27  * This tracker provides async access to current user information, as well as callbacks for
28  * user/profile change.
29  */
30 interface UserTracker : UserContentResolverProvider, UserContextProvider {
31 
32     /**
33      * Current user's id.
34      */
35     val userId: Int
36 
37     /**
38      * [UserHandle] for current user
39      */
40     val userHandle: UserHandle
41 
42     /**
43      * [UserInfo] for current user
44      */
45     val userInfo: UserInfo
46 
47     /**
48      * List of profiles associated with the current user.
49      */
50     val userProfiles: List<UserInfo>
51 
52     /**
53      * Add a [Callback] to be notified of chances, on a particular [Executor]
54      */
55     fun addCallback(callback: Callback, executor: Executor)
56 
57     /**
58      * Remove a [Callback] previously added.
59      */
60     fun removeCallback(callback: Callback)
61 
62     /**
63      * Ćallback for notifying of changes.
64      */
65     interface Callback {
66 
67         /**
68          * Notifies that the current user has changed.
69          */
70         @JvmDefault
71         fun onUserChanged(newUser: Int, userContext: Context) {}
72 
73         /**
74          * Notifies that the current user's profiles have changed.
75          */
76         @JvmDefault
77         fun onProfilesChanged(profiles: List<UserInfo>) {}
78     }
79 }