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 static com.android.systemui.car.window.OverlayPanelViewController.OVERLAY_FROM_BOTTOM_BAR;
20 
21 import android.content.BroadcastReceiver;
22 import android.content.Context;
23 import android.content.Intent;
24 import android.content.IntentFilter;
25 import android.os.UserHandle;
26 import android.util.Log;
27 
28 import androidx.annotation.VisibleForTesting;
29 
30 import com.android.systemui.broadcast.BroadcastDispatcher;
31 import com.android.systemui.car.systembar.CarSystemBarController;
32 import com.android.systemui.car.window.OverlayViewMediator;
33 import com.android.systemui.dagger.SysUISingleton;
34 
35 import javax.inject.Inject;
36 
37 /**
38  *  Registers events that cause the HvacPanelOverlayView to appear or disappear and determines the
39  *  direction of its animations.
40  */
41 @SysUISingleton
42 public class HvacPanelOverlayViewMediator implements OverlayViewMediator {
43     private static final boolean DEBUG = false;
44     private static final String TAG = "HvacPanelViewMediator";
45 
46     private final CarSystemBarController mCarSystemBarController;
47     private final HvacPanelOverlayViewController mHvacPanelOverlayViewController;
48     private final BroadcastDispatcher mBroadcastDispatcher;
49 
50     @VisibleForTesting
51     final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
52         @Override
53         public void onReceive(Context context, Intent intent) {
54             if (DEBUG) Log.v(TAG, "onReceive: " + intent);
55             String action = intent.getAction();
56 
57             if (Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(action)
58                     && mHvacPanelOverlayViewController.isPanelExpanded()) {
59                 mHvacPanelOverlayViewController.toggle();
60             }
61         }
62     };
63 
64     @Inject
HvacPanelOverlayViewMediator( CarSystemBarController carSystemBarController, HvacPanelOverlayViewController hvacPanelOverlayViewController, BroadcastDispatcher broadcastDispatcher)65     public HvacPanelOverlayViewMediator(
66             CarSystemBarController carSystemBarController,
67             HvacPanelOverlayViewController hvacPanelOverlayViewController,
68             BroadcastDispatcher broadcastDispatcher) {
69         mCarSystemBarController = carSystemBarController;
70         mHvacPanelOverlayViewController = hvacPanelOverlayViewController;
71         mBroadcastDispatcher = broadcastDispatcher;
72     }
73 
74     @Override
registerListeners()75     public void registerListeners() {
76         mCarSystemBarController.registerTopBarTouchListener(
77                 mHvacPanelOverlayViewController.getDragCloseTouchListener());
78         mCarSystemBarController.registerBottomBarTouchListener(
79                 mHvacPanelOverlayViewController.getDragCloseTouchListener());
80         mCarSystemBarController.registerLeftBarTouchListener(
81                 mHvacPanelOverlayViewController.getDragCloseTouchListener());
82         mCarSystemBarController.registerRightBarTouchListener(
83                 mHvacPanelOverlayViewController.getDragCloseTouchListener());
84 
85         mCarSystemBarController.registerHvacPanelController(
86                 new CarSystemBarController.HvacPanelController() {
87                     @Override
88                     public void togglePanel() {
89                         mHvacPanelOverlayViewController.toggle();
90                     }
91 
92                     @Override
93                     public boolean isHvacPanelOpen() {
94                         return mHvacPanelOverlayViewController.isPanelExpanded();
95                     }
96                 });
97 
98         mCarSystemBarController.registerHvacPanelOverlayViewController(
99                 mHvacPanelOverlayViewController);
100 
101         mBroadcastDispatcher.registerReceiver(mBroadcastReceiver,
102                 new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS), /* executor= */ null,
103                 UserHandle.ALL);
104     }
105 
106     @Override
setUpOverlayContentViewControllers()107     public void setUpOverlayContentViewControllers() {
108         mHvacPanelOverlayViewController.setOverlayDirection(OVERLAY_FROM_BOTTOM_BAR);
109     }
110 }
111