• 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 package com.android.systemui.car.systembar;
17 
18 import static com.android.systemui.car.systembar.CarSystemBarController.TOP;
19 
20 import android.annotation.LayoutRes;
21 import android.content.Context;
22 import android.view.Gravity;
23 import android.view.View;
24 import android.view.ViewGroup;
25 
26 import androidx.annotation.Nullable;
27 
28 import com.android.systemui.R;
29 import com.android.systemui.car.CarDeviceProvisionedController;
30 import com.android.systemui.car.statusicon.StatusIconPanelViewController;
31 import com.android.systemui.car.systembar.CarSystemBarController.SystemBarSide;
32 import com.android.systemui.car.systembar.element.CarSystemBarElementInitializer;
33 import com.android.systemui.car.window.OverlayVisibilityMediator;
34 import com.android.systemui.settings.UserTracker;
35 
36 import dagger.Lazy;
37 import dagger.assisted.Assisted;
38 import dagger.assisted.AssistedFactory;
39 import dagger.assisted.AssistedInject;
40 
41 import javax.inject.Provider;
42 
43 /**
44  * A controller for initializing the TOP CarSystemBarView.
45  * TODO(b/373710798): remove privacy chip related code when they are migrated to flexible ui.
46  */
47 public class CarTopSystemBarViewController extends CarSystemBarViewControllerImpl {
48 
49     private final CarDeviceProvisionedController mCarDeviceProvisionedController;
50     private final Provider<StatusIconPanelViewController.Builder> mPanelControllerBuilderProvider;
51 
52     private int mPrivacyChipXOffset;
53     private StatusIconPanelViewController mMicPanelController;
54     private StatusIconPanelViewController mCameraPanelController;
55 
56     @AssistedInject
CarTopSystemBarViewController(Context context, UserTracker userTracker, CarSystemBarElementInitializer elementInitializer, SystemBarConfigs systemBarConfigs, ButtonRoleHolderController buttonRoleHolderController, Lazy<CameraPrivacyChipViewController> cameraPrivacyChipViewControllerLazy, Lazy<MicPrivacyChipViewController> micPrivacyChipViewControllerLazy, CarDeviceProvisionedController deviceProvisionedController, Provider<StatusIconPanelViewController.Builder> panelControllerBuilderProvider, OverlayVisibilityMediator overlayVisibilityMediator, @Assisted ViewGroup systemBarView)57     public CarTopSystemBarViewController(Context context,
58             UserTracker userTracker,
59             CarSystemBarElementInitializer elementInitializer,
60             SystemBarConfigs systemBarConfigs,
61             ButtonRoleHolderController buttonRoleHolderController,
62             Lazy<CameraPrivacyChipViewController> cameraPrivacyChipViewControllerLazy,
63             Lazy<MicPrivacyChipViewController> micPrivacyChipViewControllerLazy,
64             CarDeviceProvisionedController deviceProvisionedController,
65             Provider<StatusIconPanelViewController.Builder> panelControllerBuilderProvider,
66             OverlayVisibilityMediator overlayVisibilityMediator,
67             @Assisted ViewGroup systemBarView) {
68         super(context,
69                 userTracker,
70                 elementInitializer,
71                 systemBarConfigs,
72                 buttonRoleHolderController,
73                 cameraPrivacyChipViewControllerLazy,
74                 micPrivacyChipViewControllerLazy,
75                 overlayVisibilityMediator,
76                 TOP,
77                 systemBarView);
78         mCarDeviceProvisionedController = deviceProvisionedController;
79         mPanelControllerBuilderProvider = panelControllerBuilderProvider;
80 
81         mPrivacyChipXOffset = -context.getResources()
82                 .getDimensionPixelOffset(R.dimen.privacy_chip_horizontal_padding);
83     }
84 
85     @Override
onInit()86     protected void onInit() {
87         super.onInit();
88 
89         if (isDeviceSetupForUser()) {
90             // We do not want the privacy chips or the profile picker to be clickable in
91             // unprovisioned mode.
92             mMicPanelController = setupSensorQcPanel(mMicPanelController, R.id.mic_privacy_chip,
93                     R.layout.qc_mic_panel);
94             mCameraPanelController = setupSensorQcPanel(mCameraPanelController,
95                     R.id.camera_privacy_chip, R.layout.qc_camera_panel);
96         }
97     }
98 
setupSensorQcPanel( @ullable StatusIconPanelViewController panelController, int chipId, @LayoutRes int panelLayoutRes)99     private StatusIconPanelViewController setupSensorQcPanel(
100             @Nullable StatusIconPanelViewController panelController, int chipId,
101             @LayoutRes int panelLayoutRes) {
102         if (panelController == null) {
103             View privacyChip = mView.findViewById(chipId);
104             if (privacyChip != null) {
105                 panelController = mPanelControllerBuilderProvider.get()
106                         .setXOffset(mPrivacyChipXOffset)
107                         .setGravity(Gravity.TOP | Gravity.END)
108                         .build(privacyChip, panelLayoutRes, R.dimen.car_sensor_qc_panel_width);
109                 panelController.init();
110             }
111         }
112         return panelController;
113     }
114 
isDeviceSetupForUser()115     private boolean isDeviceSetupForUser() {
116         return mCarDeviceProvisionedController.isCurrentUserSetup()
117                 && !mCarDeviceProvisionedController.isCurrentUserSetupInProgress();
118     }
119 
120     @AssistedFactory
121     public interface Factory extends CarSystemBarViewControllerImpl.Factory {
122         @Override
create(@ystemBarSide int side, ViewGroup view)123         default CarSystemBarViewControllerImpl create(@SystemBarSide int side, ViewGroup view) {
124             if (side == TOP) {
125                 return create(view);
126             }
127             throw new UnsupportedOperationException("Side not supported");
128         }
129 
130         /** Create instance of CarTopSystemBarViewController for system bar views */
create(ViewGroup view)131         CarTopSystemBarViewController create(ViewGroup view);
132     }
133 }
134