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