• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * 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.systemui.car.systembar;
18 
19 import android.content.BroadcastReceiver;
20 import android.content.Context;
21 import android.content.Intent;
22 import android.content.IntentFilter;
23 import android.content.pm.UserInfo;
24 import android.os.UserHandle;
25 import android.os.UserManager;
26 
27 import com.android.systemui.broadcast.BroadcastDispatcher;
28 import com.android.systemui.car.systembar.element.CarSystemBarElementController;
29 import com.android.systemui.car.systembar.element.CarSystemBarElementStateController;
30 import com.android.systemui.car.systembar.element.CarSystemBarElementStatusBarDisableController;
31 import com.android.systemui.car.systembar.element.layout.CarSystemBarTextView;
32 import com.android.systemui.dagger.qualifiers.Main;
33 import com.android.systemui.settings.UserTracker;
34 
35 import dagger.assisted.Assisted;
36 import dagger.assisted.AssistedFactory;
37 import dagger.assisted.AssistedInject;
38 
39 import java.util.concurrent.Executor;
40 
41 /**
42  * Controls user name TextView for the current logged in user.
43  */
44 public final class UserNameTextViewController extends
45         CarSystemBarElementController<CarSystemBarTextView> {
46     private final Executor mMainExecutor;
47     private final UserTracker mUserTracker;
48     private final UserManager mUserManager;
49     private final BroadcastDispatcher mBroadcastDispatcher;
50     private boolean mUserLifecycleListenerRegistered;
51 
52     private final UserTracker.Callback mUserChangedCallback =
53             new UserTracker.Callback() {
54                 @Override
55                 public void onUserChanged(int newUser, Context userContext) {
56                     updateUser(newUser);
57                 }
58             };
59 
60     private final BroadcastReceiver mUserUpdateReceiver = new BroadcastReceiver() {
61         @Override
62         public void onReceive(Context context, Intent intent) {
63             updateUser(mUserTracker.getUserId());
64         }
65     };
66 
67     @AssistedInject
UserNameTextViewController(@ssisted CarSystemBarTextView view, CarSystemBarElementStatusBarDisableController disableController, CarSystemBarElementStateController stateController, @Main Executor mainExecutor, UserTracker userTracker, UserManager userManager, BroadcastDispatcher broadcastDispatcher)68     protected UserNameTextViewController(@Assisted CarSystemBarTextView view,
69             CarSystemBarElementStatusBarDisableController disableController,
70             CarSystemBarElementStateController stateController,
71             @Main Executor mainExecutor, UserTracker userTracker, UserManager userManager,
72             BroadcastDispatcher broadcastDispatcher) {
73         super(view, disableController, stateController);
74         mMainExecutor = mainExecutor;
75         mUserTracker = userTracker;
76         mUserManager = userManager;
77         mBroadcastDispatcher = broadcastDispatcher;
78     }
79 
80     @AssistedFactory
81     public interface Factory extends
82             CarSystemBarElementController.Factory<CarSystemBarTextView,
83                     UserNameTextViewController> {
84     }
85 
86     @Override
onViewAttached()87     protected void onViewAttached() {
88         super.onViewAttached();
89         registerForUserChangeEvents();
90         updateUser(mUserTracker.getUserId());
91     }
92 
93     @Override
onViewDetached()94     protected void onViewDetached() {
95         super.onViewDetached();
96         if (mUserLifecycleListenerRegistered) {
97             mBroadcastDispatcher.unregisterReceiver(mUserUpdateReceiver);
98             mUserTracker.removeCallback(mUserChangedCallback);
99             mUserLifecycleListenerRegistered = false;
100         }
101     }
102 
registerForUserChangeEvents()103     private void registerForUserChangeEvents() {
104         if (mUserLifecycleListenerRegistered) {
105             return;
106         }
107         mUserLifecycleListenerRegistered = true;
108         // Register for user switching
109         mUserTracker.addCallback(mUserChangedCallback, mMainExecutor);
110         // Also register for user info changing
111         IntentFilter filter = new IntentFilter();
112         filter.addAction(Intent.ACTION_USER_INFO_CHANGED);
113         mBroadcastDispatcher.registerReceiver(mUserUpdateReceiver, filter, /* executor= */ null,
114                 UserHandle.ALL);
115     }
116 
updateUser(int userId)117     private void updateUser(int userId) {
118         UserInfo currentUserInfo = mUserManager.getUserInfo(userId);
119         mView.setText(currentUserInfo.name);
120     }
121 }
122