1 /*
2  * Copyright (C) 2021 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.hvac;
18 
19 import android.content.Context;
20 import android.content.res.Resources;
21 import android.view.KeyEvent;
22 import android.view.View;
23 import android.view.WindowInsets;
24 
25 import com.android.systemui.R;
26 import com.android.systemui.car.CarDeviceProvisionedController;
27 import com.android.systemui.car.window.OverlayPanelViewController;
28 import com.android.systemui.car.window.OverlayViewGlobalStateController;
29 import com.android.systemui.dagger.SysUISingleton;
30 import com.android.systemui.dagger.qualifiers.Main;
31 import com.android.wm.shell.animation.FlingAnimationUtils;
32 
33 import javax.inject.Inject;
34 
35 /**
36  *  An {@link OverlayPanelViewController} implementation for HvacPanelOverlayView.
37  */
38 @SysUISingleton
39 public class HvacPanelOverlayViewController extends OverlayPanelViewController {
40 
41     private final Resources mResources;
42     private final HvacController mHvacController;
43 
44     private HvacPanelView mHvacPanelView;
45 
46     @Inject
HvacPanelOverlayViewController(Context context, @Main Resources resources, HvacController hvacController, OverlayViewGlobalStateController overlayViewGlobalStateController, FlingAnimationUtils.Builder flingAnimationUtilsBuilder, CarDeviceProvisionedController carDeviceProvisionedController)47     public HvacPanelOverlayViewController(Context context,
48             @Main Resources resources,
49             HvacController hvacController,
50             OverlayViewGlobalStateController overlayViewGlobalStateController,
51             FlingAnimationUtils.Builder flingAnimationUtilsBuilder,
52             CarDeviceProvisionedController carDeviceProvisionedController) {
53         super(context, resources, R.id.hvac_panel_stub, overlayViewGlobalStateController,
54                 flingAnimationUtilsBuilder, carDeviceProvisionedController);
55         mResources = resources;
56         mHvacController = hvacController;
57     }
58 
59     @Override
onFinishInflate()60     protected void onFinishInflate() {
61         super.onFinishInflate();
62 
63         View closeButton = getLayout().findViewById(R.id.hvac_panel_close_button);
64         if (closeButton != null) {
65             closeButton.setOnClickListener(v -> toggle());
66         }
67 
68         mHvacPanelView = getLayout().findViewById(R.id.hvac_panel);
69         mHvacController.registerHvacViews(mHvacPanelView);
70 
71         mHvacPanelView.setKeyEventHandler((event) -> {
72             if (event.getKeyCode() != KeyEvent.KEYCODE_BACK) {
73                 return false;
74             }
75 
76             if (event.getAction() == KeyEvent.ACTION_UP && isPanelExpanded()) {
77                 toggle();
78             }
79             return true;
80         });
81     }
82 
83     @Override
getInsetTypesToFit()84     protected int getInsetTypesToFit() {
85         return WindowInsets.Type.systemBars();
86     }
87 
88     @Override
shouldShowStatusBarInsets()89     protected boolean shouldShowStatusBarInsets() {
90         return true;
91     }
92 
93     @Override
shouldShowNavigationBarInsets()94     protected boolean shouldShowNavigationBarInsets() {
95         return true;
96     }
97 
98     @Override
shouldAnimateCollapsePanel()99     protected boolean shouldAnimateCollapsePanel() {
100         return true;
101     }
102 
103     @Override
shouldAnimateExpandPanel()104     protected boolean shouldAnimateExpandPanel() {
105         return true;
106     }
107 
108     @Override
shouldAllowClosingScroll()109     protected boolean shouldAllowClosingScroll() {
110         return true;
111     }
112 
113     @Override
getHandleBarViewId()114     protected Integer getHandleBarViewId() {
115         return R.id.handle_bar;
116     }
117 
118     @Override
getFocusAreaViewId()119     protected int getFocusAreaViewId() {
120         return R.id.hvac_panel_container;
121     }
122 
123     @Override
getSettleClosePercentage()124     protected int getSettleClosePercentage() {
125         return mResources.getInteger(R.integer.hvac_panel_settle_close_percentage);
126     }
127 
128     @Override
onAnimateCollapsePanel()129     protected void onAnimateCollapsePanel() {
130         // no-op.
131     }
132 
133     @Override
onAnimateExpandPanel()134     protected void onAnimateExpandPanel() {
135         // no-op.
136     }
137 
138     @Override
onCollapseAnimationEnd()139     protected void onCollapseAnimationEnd() {
140         // no-op.
141     }
142 
143     @Override
onExpandAnimationEnd()144     protected void onExpandAnimationEnd() {
145         // no-op.
146     }
147 
148     @Override
onOpenScrollStart()149     protected void onOpenScrollStart() {
150         // no-op.
151     }
152 }
153