• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.car.userswitcher;
18 
19 import android.car.Car;
20 import android.car.user.CarUserManager;
21 import android.util.Log;
22 
23 import com.android.internal.annotations.VisibleForTesting;
24 import com.android.systemui.car.CarDeviceProvisionedController;
25 import com.android.systemui.car.CarServiceProvider;
26 import com.android.systemui.car.window.OverlayViewMediator;
27 
28 import javax.inject.Inject;
29 
30 /**
31  * Registers listeners that subscribe to events that show or hide CarUserSwitchingDialog that is
32  * mounted to SystemUiOverlayWindow.
33  */
34 public class UserSwitchTransitionViewMediator implements OverlayViewMediator,
35         CarUserManager.UserSwitchUiCallback {
36     private static final String TAG = "UserSwitchTransitionViewMediator";
37 
38     private final CarServiceProvider mCarServiceProvider;
39     private final CarDeviceProvisionedController mCarDeviceProvisionedController;
40     private final UserSwitchTransitionViewController mUserSwitchTransitionViewController;
41 
42     @Inject
UserSwitchTransitionViewMediator( CarServiceProvider carServiceProvider, CarDeviceProvisionedController carDeviceProvisionedController, UserSwitchTransitionViewController userSwitchTransitionViewController)43     public UserSwitchTransitionViewMediator(
44             CarServiceProvider carServiceProvider,
45             CarDeviceProvisionedController carDeviceProvisionedController,
46             UserSwitchTransitionViewController userSwitchTransitionViewController) {
47         mCarServiceProvider = carServiceProvider;
48         mCarDeviceProvisionedController = carDeviceProvisionedController;
49         mUserSwitchTransitionViewController = userSwitchTransitionViewController;
50     }
51 
52     @Override
registerListeners()53     public void registerListeners() {
54         mCarServiceProvider.addListener(car -> {
55             CarUserManager carUserManager =
56                     (CarUserManager) car.getCarManager(Car.CAR_USER_SERVICE);
57 
58             if (carUserManager != null) {
59                 carUserManager.setUserSwitchUiCallback(this);
60                 carUserManager.addListener(Runnable::run, this::handleUserLifecycleEvent);
61             } else {
62                 Log.e(TAG, "registerListeners: CarUserManager could not be obtained.");
63             }
64         });
65     }
66 
67     @Override
setupOverlayContentViewControllers()68     public void setupOverlayContentViewControllers() {
69         // no-op.
70     }
71 
72     @Override
showUserSwitchDialog(int userId)73     public void showUserSwitchDialog(int userId) {
74         mUserSwitchTransitionViewController.handleShow(userId);
75     }
76 
77     @VisibleForTesting
handleUserLifecycleEvent(CarUserManager.UserLifecycleEvent event)78     void handleUserLifecycleEvent(CarUserManager.UserLifecycleEvent event) {
79         if (event.getEventType() == CarUserManager.USER_LIFECYCLE_EVENT_TYPE_STARTING
80                 && mCarDeviceProvisionedController.getCurrentUser() == event.getUserId()) {
81             mUserSwitchTransitionViewController.handleShow(event.getUserId());
82         }
83 
84         if (event.getEventType() == CarUserManager.USER_LIFECYCLE_EVENT_TYPE_SWITCHING) {
85             mUserSwitchTransitionViewController.handleHide();
86         }
87     }
88 }
89