1/*
2 * Copyright (c) 2016, 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 */
16package com.android.car.hvac.controllers;
17
18import com.android.car.hvac.HvacController;
19import com.android.car.hvac.ui.SeatWarmerButton;
20
21/**
22 * A controller to handle changes in the heated seat levels.
23 */
24public class SeatWarmerController {
25    private final SeatWarmerButton mPassengerSeatButton;
26    private final SeatWarmerButton mDriverSeatButton;
27
28    private final HvacController mHvacController;
29
30    public SeatWarmerController(SeatWarmerButton passengerSeatButton,
31            SeatWarmerButton driverSeatButton, HvacController hvacController) {
32        mDriverSeatButton = driverSeatButton;
33        mPassengerSeatButton = passengerSeatButton;
34
35        mHvacController = hvacController;
36        mHvacController.registerCallback(mCallback);
37
38        mPassengerSeatButton.setSeatWarmerClickListener(mPassengerSeatListener);
39        mDriverSeatButton.setSeatWarmerClickListener(mDriverSeatListener);
40    }
41
42    private final HvacController.Callback mCallback = new HvacController.Callback() {
43        @Override
44        public void onPassengerSeatWarmerChange(int level) {
45            // If the value of the heating is less than HEAT_OFF, it means the seats are
46            // being cooled, show heated seat button as off.
47            if (level < SeatWarmerButton.HEAT_OFF) {
48                mPassengerSeatButton.setHeatLevel(SeatWarmerButton.HEAT_OFF);
49            } else {
50                mPassengerSeatButton.setHeatLevel(level);
51            }
52        }
53
54        @Override
55        public void onDriverSeatWarmerChange(int level) {
56            // If the value of the heating is less than HEAT_OFF, it means the seats are
57            // being cooled, show heated seat button as off.
58            if (level < SeatWarmerButton.HEAT_OFF) {
59                mDriverSeatButton.setHeatLevel(SeatWarmerButton.HEAT_OFF);
60            } else {
61                mDriverSeatButton.setHeatLevel(level);
62            }
63        }
64    };
65
66    private final SeatWarmerButton.SeatWarmerButtonClickListener mPassengerSeatListener
67            = new SeatWarmerButton.SeatWarmerButtonClickListener() {
68        @Override
69        public void onSeatWarmerButtonClicked(@SeatWarmerButton.HeatingLevel int level) {
70            mHvacController.setPassengerSeatWarmerLevel(level);
71        }
72    };
73
74    private final SeatWarmerButton.SeatWarmerButtonClickListener mDriverSeatListener
75            = new SeatWarmerButton.SeatWarmerButtonClickListener() {
76        @Override
77        public void onSeatWarmerButtonClicked(@SeatWarmerButton.HeatingLevel int level) {
78            mHvacController.setDriverSeatWarmerLevel(level);
79        }
80    };
81}
82