143c04a7c87404d078db60e09d2da0061d72357c2Steve Paik/* 243c04a7c87404d078db60e09d2da0061d72357c2Steve Paik * Copyright (C) 2016 The Android Open Source Project 343c04a7c87404d078db60e09d2da0061d72357c2Steve Paik * 443c04a7c87404d078db60e09d2da0061d72357c2Steve Paik * Licensed under the Apache License, Version 2.0 (the "License"); 543c04a7c87404d078db60e09d2da0061d72357c2Steve Paik * you may not use this file except in compliance with the License. 643c04a7c87404d078db60e09d2da0061d72357c2Steve Paik * You may obtain a copy of the License at 743c04a7c87404d078db60e09d2da0061d72357c2Steve Paik * 843c04a7c87404d078db60e09d2da0061d72357c2Steve Paik * http://www.apache.org/licenses/LICENSE-2.0 943c04a7c87404d078db60e09d2da0061d72357c2Steve Paik * 1043c04a7c87404d078db60e09d2da0061d72357c2Steve Paik * Unless required by applicable law or agreed to in writing, software 1143c04a7c87404d078db60e09d2da0061d72357c2Steve Paik * distributed under the License is distributed on an "AS IS" BASIS, 1243c04a7c87404d078db60e09d2da0061d72357c2Steve Paik * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1343c04a7c87404d078db60e09d2da0061d72357c2Steve Paik * See the License for the specific language governing permissions and 1443c04a7c87404d078db60e09d2da0061d72357c2Steve Paik * limitations under the License. 1543c04a7c87404d078db60e09d2da0061d72357c2Steve Paik */ 1643c04a7c87404d078db60e09d2da0061d72357c2Steve Paik 1743c04a7c87404d078db60e09d2da0061d72357c2Steve Paikpackage android.car.hardware.cabin; 1843c04a7c87404d078db60e09d2da0061d72357c2Steve Paik 1943c04a7c87404d078db60e09d2da0061d72357c2Steve Paikimport android.annotation.IntDef; 2043c04a7c87404d078db60e09d2da0061d72357c2Steve Paikimport android.annotation.SystemApi; 2143c04a7c87404d078db60e09d2da0061d72357c2Steve Paikimport android.car.Car; 2243c04a7c87404d078db60e09d2da0061d72357c2Steve Paikimport android.car.CarManagerBase; 2343c04a7c87404d078db60e09d2da0061d72357c2Steve Paikimport android.car.CarNotConnectedException; 2443c04a7c87404d078db60e09d2da0061d72357c2Steve Paikimport android.car.hardware.CarPropertyConfig; 2543c04a7c87404d078db60e09d2da0061d72357c2Steve Paikimport android.car.hardware.CarPropertyValue; 2643c04a7c87404d078db60e09d2da0061d72357c2Steve Paikimport android.car.hardware.property.CarPropertyManagerBase; 27af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Parkimport android.car.hardware.property.CarPropertyManagerBase.CarPropertyEventCallback; 2843c04a7c87404d078db60e09d2da0061d72357c2Steve Paikimport android.content.Context; 293ee334d8c220f631d2ea7fa225af148f41b43354Jason Tholstrupimport android.os.Handler; 3043c04a7c87404d078db60e09d2da0061d72357c2Steve Paikimport android.os.IBinder; 3143c04a7c87404d078db60e09d2da0061d72357c2Steve Paikimport android.os.Looper; 3243c04a7c87404d078db60e09d2da0061d72357c2Steve Paikimport android.util.ArraySet; 3343c04a7c87404d078db60e09d2da0061d72357c2Steve Paik 34af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Parkimport java.lang.annotation.Retention; 35af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Parkimport java.lang.annotation.RetentionPolicy; 3643c04a7c87404d078db60e09d2da0061d72357c2Steve Paikimport java.lang.ref.WeakReference; 3743c04a7c87404d078db60e09d2da0061d72357c2Steve Paikimport java.util.Collection; 3843c04a7c87404d078db60e09d2da0061d72357c2Steve Paikimport java.util.List; 3943c04a7c87404d078db60e09d2da0061d72357c2Steve Paik 4043c04a7c87404d078db60e09d2da0061d72357c2Steve Paik/** 41150d8de43e71a624106e90bcc04067414c42ef18Keun-young Park * API for controlling Cabin system in cars. 42af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * Most Car Cabin properties have both a MOVE and POSITION parameter associated with them. 43af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * 44af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * The MOVE parameter will start moving the device in the indicated direction. Magnitude 45af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * indicates relative speed. For instance, setting the WINDOW_MOVE parameter to +1 rolls 46af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * the window up. Setting it to +2 (if available) will roll it up faster. 47af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * 48af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * POSITION parameter will move the device to the desired position. For instance, if the 49af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * WINDOW_POS has a range of 0-100, setting this parameter to 50 will open the window 50af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * halfway. Depending upon the initial position, the window may move up or down to the 51af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * 50% value. 52af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * 53af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * One or both of the MOVE/POSITION parameters may be implemented depending upon the 54af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * capability of the hardware. 5543c04a7c87404d078db60e09d2da0061d72357c2Steve Paik * @hide 5643c04a7c87404d078db60e09d2da0061d72357c2Steve Paik */ 5743c04a7c87404d078db60e09d2da0061d72357c2Steve Paik@SystemApi 584cf6911619b9fe6ffeba7afeb05299aab165f184Keun-young Parkpublic final class CarCabinManager implements CarManagerBase { 591b1247b5648975dd41ee73c25425825abb256234Vitalii Tomkiv private final static boolean DBG = false; 6043c04a7c87404d078db60e09d2da0061d72357c2Steve Paik private final static String TAG = "CarCabinManager"; 6143c04a7c87404d078db60e09d2da0061d72357c2Steve Paik private final CarPropertyManagerBase mMgr; 62af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park private final ArraySet<CarCabinEventCallback> mCallbacks = new ArraySet<>(); 6343c04a7c87404d078db60e09d2da0061d72357c2Steve Paik private CarPropertyEventListenerToBase mListenerToBase = null; 6443c04a7c87404d078db60e09d2da0061d72357c2Steve Paik 65af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park /** Door properties are zoned by VehicleDoor */ 6643c04a7c87404d078db60e09d2da0061d72357c2Steve Paik /** 676817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * door position, int type 68af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * Max value indicates fully open, min value (0) indicates fully closed. 69af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * 70af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * Some vehicles (minivans) can open the door electronically. Hence, the ability 71af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * to write this property. 7243c04a7c87404d078db60e09d2da0061d72357c2Steve Paik */ 73af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public static final int ID_DOOR_POS = 0x0001; 746817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik /** door move, int type 756817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Positive values open the door, negative values close it. 766817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik */ 77af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public static final int ID_DOOR_MOVE = 0x0002; 786817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik /** door lock, bool type 796817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * 'true' indicates door is locked. 80af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park */ 81af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public static final int ID_DOOR_LOCK = 0x0003; 8243c04a7c87404d078db60e09d2da0061d72357c2Steve Paik 83af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park /** Mirror properties are zoned by VehicleMirror */ 84af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park /** 856817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * mirror z position, int type 866817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Positive value indicates tilt upwards, negative value tilt downwards. 87af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park */ 88af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public static final int ID_MIRROR_Z_POS = 0x1001; 896817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik /** mirror z move, int type 906817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Positive value tilts the mirror upwards, negative value tilts downwards. 916817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik */ 92af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public static final int ID_MIRROR_Z_MOVE = 0x1002; 93af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park /** 946817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * mirror y position, int type 956817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Positive value indicates tilt right, negative value tilt left 96af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park */ 97af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public static final int ID_MIRROR_Y_POS = 0x1003; 986817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik /** mirror y move, int type 996817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Positive value tilts the mirror right, negative value tilts left. 1006817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik */ 101af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public static final int ID_MIRROR_Y_MOVE = 0x1004; 102af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park /** 1036817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * mirror lock, bool type 1046817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * True indicates mirror positions are locked and not changeable. 105af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park */ 106af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public static final int ID_MIRROR_LOCK = 0x1005; 107af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park /** 1086817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * mirror fold, bool type 1096817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * True indicates mirrors are folded. 110af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park */ 111af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public static final int ID_MIRROR_FOLD = 0x1006; 11243c04a7c87404d078db60e09d2da0061d72357c2Steve Paik 113af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park /** Seat properties are zoned by VehicleSeat */ 114af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park /** 1156817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * seat memory select, int type 116af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * This parameter selects the memory preset to use to select the seat position. 1176817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * The minValue is always 1, and the maxValue determines the number of seat 118af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * positions available. 119af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * 120af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * For instance, if the driver's seat has 3 memory presets, the maxValue will be 3. 121af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * When the user wants to select a preset, the desired preset number (1, 2, or 3) 122af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * is set. 123af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park */ 124af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public static final int ID_SEAT_MEMORY_SELECT = 0x2001; 125af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park /** 1266817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * seat memory set, int type 127af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * This setting allows the user to save the current seat position settings into 128af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * the selected preset slot. The maxValue for each seat position shall match 129af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * the maxValue for VEHICLE_PROPERTY_SEAT_MEMORY_SELECT. 130af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park */ 131af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public static final int ID_SEAT_MEMORY_SET = 0x2002; 132af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park /** 1336817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * seat belt buckled, bool type 134af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * True indicates belt is buckled. 135af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park */ 136af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public static final int ID_SEAT_BELT_BUCKLED = 0x2003; 137af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park /** 1386817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * seat belt height position, int type 139af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * Adjusts the shoulder belt anchor point. 1406817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Max value indicates highest position. 1416817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Min value indicates lowest position. 142af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park */ 143af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public static final int ID_SEAT_BELT_HEIGHT_POS = 0x2004; 1446817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik /** seat belt height move, int type 1456817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Adjusts the shoulder belt anchor point. 1466817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Positive value moves towards highest point. 1476817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Negative value moves towards lowest point. 1486817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik */ 149af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public static final int ID_SEAT_BELT_HEIGHT_MOVE = 0x2005; 150af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park /** 1516817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * seat fore/aft position, int type 152af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * Sets the seat position forward (closer to steering wheel) and backwards. 1536817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Max value indicates closest to wheel, min value indicates most rearward position. 154af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park */ 155af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public static final int ID_SEAT_FORE_AFT_POS = 0x2006; 1566817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik /** 1576817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * seat fore/aft move, int type 1586817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Positive value moves seat forward (closer to steering wheel). 1596817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Negative value moves seat rearward. 1606817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik */ 161af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public static final int ID_SEAT_FORE_AFT_MOVE = 0x2007; 162af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park /** 1636817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * seat backrest angle #1 position, int type 164af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * Backrest angle 1 is the actuator closest to the bottom of the seat. 165af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * Max value indicates angling forward towards the steering wheel. 166af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * Min value indicates full recline. 167af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park */ 168af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public static final int ID_SEAT_BACKREST_ANGLE_1_POS = 0x2008; 1696817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik /** seat backrest angle #1 move, int type 1706817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Backrest angle 1 is the actuator closest to the bottom of the seat. 1716817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Positive value angles seat towards the steering wheel. 1726817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Negatie value angles away from steering wheel. 1736817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik */ 174af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public static final int ID_SEAT_BACKREST_ANGLE_1_MOVE = 0x2009; 175af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park /** 1766817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * seat backrest angle #2 position, int type 177af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * Backrest angle 2 is the next actuator up from the bottom of the seat. 178af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * Max value indicates angling forward towards the steering wheel. 179af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * Min value indicates full recline. 180af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park */ 181af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public static final int ID_SEAT_BACKREST_ANGLE_2_POS = 0x200A; 1826817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik /** seat backrest angle #2 move, int type 1836817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Backrest angle 2 is the next actuator up from the bottom of the seat. 1846817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Positive value tilts forward towards the steering wheel. 1856817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Negative value tilts backwards. 1866817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik */ 187af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public static final int ID_SEAT_BACKREST_ANGLE_2_MOVE = 0x200B; 188af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park /** 1896817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * seat height position, int type 190af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * Sets the seat height. 191af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * Max value indicates highest position. 192af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * Min value indicates lowest position. 193af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park */ 194af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public static final int ID_SEAT_HEIGHT_POS = 0x200C; 1956817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik /** seat height move, int type 1966817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Sets the seat height. 1976817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Positive value raises the seat. 1986817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Negative value lowers the seat. 1996817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * */ 200af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public static final int ID_SEAT_HEIGHT_MOVE = 0x200D; 201af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park /** 2026817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * seat depth position, int type 203af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * Sets the seat depth, distance from back rest to front edge of seat. 204af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * Max value indicates longest depth position. 205af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * Min value indicates shortest position. 206af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park */ 207af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public static final int ID_SEAT_DEPTH_POS = 0x200E; 2086817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik /** seat depth move, int type 2096817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Adjusts the seat depth, distance from back rest to front edge of seat. 2106817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Positive value increases the distance from back rest to front edge of seat. 2116817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Negative value decreases this distance. 2126817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik */ 213af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public static final int ID_SEAT_DEPTH_MOVE = 0x200F; 214af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park /** 2156817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * seat tilt position, int type 216af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * Sets the seat tilt. 217af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * Max value indicates front edge of seat higher than back edge. 218af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * Min value indicates front edge of seat lower than back edge. 219af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park */ 220af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public static final int ID_SEAT_TILT_POS = 0x2010; 2216817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik /** seat tilt move, int type 2226817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Adjusts the seat tilt. 2236817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Positive value lifts front edge of seat higher than back edge. 2246817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Negative value lowers front edge of seat in relation to back edge. 2256817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik */ 226af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public static final int ID_SEAT_TILT_MOVE = 0x2011; 227af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park /** 2286817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * seat lumbar fore/aft position, int type 2296817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Pushes the lumbar support forward and backwards. 230af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * Max value indicates most forward position. 231af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * Min value indicates most rearward position. 232af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park */ 233af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public static final int ID_SEAT_LUMBAR_FORE_AFT_POS = 0x2012; 2346817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik /** seat lumbar fore/aft move, int type 2356817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Adjusts the lumbar support forwards and backwards. 2366817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Positive value moves lumbar support forward. 2376817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Negative value moves lumbar support rearward. 2386817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik */ 239af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public static final int ID_SEAT_LUMBAR_FORE_AFT_MOVE = 0x2013; 240af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park /** 2416817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * seat lumbar side support position, int type 242af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * Sets the amount of lateral lumbar support. 243af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * Max value indicates widest lumbar setting (i.e. least support) 244af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * Min value indicates thinnest lumbar setting. 245af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park */ 246af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public static final int ID_SEAT_LUMBAR_SIDE_SUPPORT_POS = 0x2014; 2476817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik /** seat lumbar side support move, int type 2486817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Adjusts the amount of lateral lumbar support. 2496817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Positive value widens the lumbar area. 2506817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Negative value makes the lumbar area thinner. 2516817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik */ 252af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public static final int ID_SEAT_LUMBAR_SIDE_SUPPORT_MOVE = 0x2015; 253af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park /** 2546817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * seat headrest height position, int type 255af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * Sets the headrest height. 256af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * Max value indicates tallest setting. 257af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * Min value indicates shortest setting. 258af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park */ 259af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public static final int ID_SEAT_HEADREST_HEIGHT_POS = 0x2016; 2606817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik /** seat headrest height move, int type 2616817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Postive value moves the headrest higher. 2626817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Negative value moves the headrest lower. 2636817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik */ 264af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public static final int ID_SEAT_HEADREST_HEIGHT_MOVE = 0x2017; 265af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park /** 2666817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * seat headrest angle position, int type 267af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * Sets the angle of the headrest. 268af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * Max value indicates most upright angle. 269af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * Min value indicates shallowest headrest angle. 270af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park */ 271af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public static final int ID_SEAT_HEADREST_ANGLE_POS = 0x2018; 2726817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik /** seat headrest angle move, int type 2736817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Adjusts the angle of the headrest. 2746817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Positive value angles headrest towards most upright angle. 2756817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Negative value angles headrest towards shallowest headrest angle. 2766817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik */ 277af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public static final int ID_SEAT_HEADREST_ANGLE_MOVE = 0x2019; 278af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park /** 2796817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * seat headrest fore/aft position, int type 2806817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Sets the headrest forwards and backwards. 281af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * Max value indicates position closest to front of car. 282af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * Min value indicates position closest to rear of car. 283af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park */ 284af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public static final int ID_SEAT_HEADREST_FORE_AFT_POS = 0x201A; 2856817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik /** seat headrest fore/aft move, int type 2866817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Adjsuts the headrest forwards and backwards. 2876817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Positive value moves the headrest closer to front of car. 2886817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Negative value moves the headrest closer to rear of car. 2896817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik */ 290af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public static final int ID_SEAT_HEADREST_FORE_AFT_MOVE = 0x201B; 29143c04a7c87404d078db60e09d2da0061d72357c2Steve Paik 292af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park /** Window properties are zoned by VehicleWindow */ 293af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park /** 2946817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * window position, int type 2956817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Max = window up / closed. 2966817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Min = window down / open. 297af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park */ 298af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public static final int ID_WINDOW_POS = 0x3001; 2996817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik /** window move, int type 3006817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Positive value moves window up / closes window. 3016817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Negative value moves window down / opens window. 3026817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik */ 303af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public static final int ID_WINDOW_MOVE = 0x3002; 304af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park /** 3056817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * window vent position, int type 306af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * This feature is used to control the vent feature on a sunroof. 3076817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Max = vent open. 3086817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Min = vent closed. 309af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park */ 310af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public static final int ID_WINDOW_VENT_POS = 0x3003; 3116817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik /** window vent move, int type 3126817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * This feature is used to control the vent feature on a sunroof. 3136817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Positive value opens the vent. 3146817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Negative value closes the vent. 3156817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik */ 316af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public static final int ID_WINDOW_VENT_MOVE = 0x3004; 317af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park /** 3186817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * window lock, bool type 319af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park * True indicates windows are locked and can't be moved. 320af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park */ 321af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public static final int ID_WINDOW_LOCK = 0x3005; 32243c04a7c87404d078db60e09d2da0061d72357c2Steve Paik 323af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park /** @hide */ 324af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park @IntDef({ 325af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park ID_DOOR_POS, 326af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park ID_DOOR_MOVE, 327af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park ID_DOOR_LOCK, 328af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park ID_MIRROR_Z_POS, 329af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park ID_MIRROR_Z_MOVE, 330af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park ID_MIRROR_Y_POS, 331af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park ID_MIRROR_Y_MOVE, 332af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park ID_MIRROR_LOCK, 333af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park ID_MIRROR_FOLD, 334af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park ID_SEAT_MEMORY_SELECT, 335af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park ID_SEAT_MEMORY_SET, 336af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park ID_SEAT_BELT_BUCKLED, 337af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park ID_SEAT_BELT_HEIGHT_POS, 338af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park ID_SEAT_BELT_HEIGHT_MOVE, 339af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park ID_SEAT_FORE_AFT_POS, 340af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park ID_SEAT_FORE_AFT_MOVE, 341af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park ID_SEAT_BACKREST_ANGLE_1_POS, 342af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park ID_SEAT_BACKREST_ANGLE_1_MOVE, 343af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park ID_SEAT_BACKREST_ANGLE_2_POS, 344af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park ID_SEAT_BACKREST_ANGLE_2_MOVE, 345af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park ID_SEAT_HEIGHT_POS, 346af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park ID_SEAT_HEIGHT_MOVE, 347af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park ID_SEAT_DEPTH_POS, 348af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park ID_SEAT_DEPTH_MOVE, 349af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park ID_SEAT_TILT_POS, 350af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park ID_SEAT_TILT_MOVE, 351af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park ID_SEAT_LUMBAR_FORE_AFT_POS, 352af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park ID_SEAT_LUMBAR_FORE_AFT_MOVE, 353af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park ID_SEAT_LUMBAR_SIDE_SUPPORT_POS, 354af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park ID_SEAT_LUMBAR_SIDE_SUPPORT_MOVE, 355af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park ID_SEAT_HEADREST_HEIGHT_POS, 356af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park ID_SEAT_HEADREST_HEIGHT_MOVE, 357af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park ID_SEAT_HEADREST_ANGLE_POS, 358af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park ID_SEAT_HEADREST_ANGLE_MOVE, 359af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park ID_SEAT_HEADREST_FORE_AFT_POS, 360af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park ID_SEAT_HEADREST_FORE_AFT_MOVE, 361af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park ID_WINDOW_POS, 362af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park ID_WINDOW_MOVE, 363af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park ID_WINDOW_VENT_POS, 364af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park ID_WINDOW_VENT_MOVE, 365af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park ID_WINDOW_LOCK 366af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park }) 367af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park @Retention(RetentionPolicy.SOURCE) 368af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public @interface PropertyId {} 36943c04a7c87404d078db60e09d2da0061d72357c2Steve Paik 3706817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik /** 3716817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Application registers CarCabinEventCallback object to receive updates and changes to 3726817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * subscribed Car Cabin properties. 3736817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik */ 374af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public interface CarCabinEventCallback { 3756817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik /** 3766817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Called when a property is updated 3776817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * @param value Property that has been updated. 3786817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik */ 37943c04a7c87404d078db60e09d2da0061d72357c2Steve Paik void onChangeEvent(CarPropertyValue value); 38043c04a7c87404d078db60e09d2da0061d72357c2Steve Paik 3816817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik /** 3826817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Called when an error is detected with a property 3836817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * @param propertyId 3846817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * @param zone 3856817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik */ 386af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park void onErrorEvent(@PropertyId int propertyId, int zone); 38743c04a7c87404d078db60e09d2da0061d72357c2Steve Paik } 38843c04a7c87404d078db60e09d2da0061d72357c2Steve Paik 389af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park private static class CarPropertyEventListenerToBase implements CarPropertyEventCallback { 39043c04a7c87404d078db60e09d2da0061d72357c2Steve Paik private final WeakReference<CarCabinManager> mManager; 39143c04a7c87404d078db60e09d2da0061d72357c2Steve Paik 39243c04a7c87404d078db60e09d2da0061d72357c2Steve Paik public CarPropertyEventListenerToBase(CarCabinManager manager) { 39343c04a7c87404d078db60e09d2da0061d72357c2Steve Paik mManager = new WeakReference<>(manager); 39443c04a7c87404d078db60e09d2da0061d72357c2Steve Paik } 39543c04a7c87404d078db60e09d2da0061d72357c2Steve Paik 39643c04a7c87404d078db60e09d2da0061d72357c2Steve Paik @Override 39743c04a7c87404d078db60e09d2da0061d72357c2Steve Paik public void onChangeEvent(CarPropertyValue value) { 39843c04a7c87404d078db60e09d2da0061d72357c2Steve Paik CarCabinManager manager = mManager.get(); 39943c04a7c87404d078db60e09d2da0061d72357c2Steve Paik if (manager != null) { 40043c04a7c87404d078db60e09d2da0061d72357c2Steve Paik manager.handleOnChangeEvent(value); 40143c04a7c87404d078db60e09d2da0061d72357c2Steve Paik } 40243c04a7c87404d078db60e09d2da0061d72357c2Steve Paik } 40343c04a7c87404d078db60e09d2da0061d72357c2Steve Paik 40443c04a7c87404d078db60e09d2da0061d72357c2Steve Paik @Override 40543c04a7c87404d078db60e09d2da0061d72357c2Steve Paik public void onErrorEvent(int propertyId, int zone) { 40643c04a7c87404d078db60e09d2da0061d72357c2Steve Paik CarCabinManager manager = mManager.get(); 40743c04a7c87404d078db60e09d2da0061d72357c2Steve Paik if (manager != null) { 40843c04a7c87404d078db60e09d2da0061d72357c2Steve Paik manager.handleOnErrorEvent(propertyId, zone); 40943c04a7c87404d078db60e09d2da0061d72357c2Steve Paik } 41043c04a7c87404d078db60e09d2da0061d72357c2Steve Paik } 41143c04a7c87404d078db60e09d2da0061d72357c2Steve Paik } 41243c04a7c87404d078db60e09d2da0061d72357c2Steve Paik 4136817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik private void handleOnChangeEvent(CarPropertyValue value) { 414af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park Collection<CarCabinEventCallback> callbacks; 41543c04a7c87404d078db60e09d2da0061d72357c2Steve Paik synchronized (this) { 416af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park callbacks = new ArraySet<>(mCallbacks); 41743c04a7c87404d078db60e09d2da0061d72357c2Steve Paik } 418af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park for (CarCabinEventCallback l: callbacks) { 41943c04a7c87404d078db60e09d2da0061d72357c2Steve Paik l.onChangeEvent(value); 42043c04a7c87404d078db60e09d2da0061d72357c2Steve Paik } 42143c04a7c87404d078db60e09d2da0061d72357c2Steve Paik } 42243c04a7c87404d078db60e09d2da0061d72357c2Steve Paik 4236817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik private void handleOnErrorEvent(int propertyId, int zone) { 424af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park Collection<CarCabinEventCallback> listeners; 42543c04a7c87404d078db60e09d2da0061d72357c2Steve Paik synchronized (this) { 426af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park listeners = new ArraySet<>(mCallbacks); 42743c04a7c87404d078db60e09d2da0061d72357c2Steve Paik } 42843c04a7c87404d078db60e09d2da0061d72357c2Steve Paik if (!listeners.isEmpty()) { 429af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park for (CarCabinEventCallback l: listeners) { 43043c04a7c87404d078db60e09d2da0061d72357c2Steve Paik l.onErrorEvent(propertyId, zone); 43143c04a7c87404d078db60e09d2da0061d72357c2Steve Paik } 43243c04a7c87404d078db60e09d2da0061d72357c2Steve Paik } 43343c04a7c87404d078db60e09d2da0061d72357c2Steve Paik } 43443c04a7c87404d078db60e09d2da0061d72357c2Steve Paik 43543c04a7c87404d078db60e09d2da0061d72357c2Steve Paik /** 4366817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Get an instance of CarCabinManager 43743c04a7c87404d078db60e09d2da0061d72357c2Steve Paik * 43843c04a7c87404d078db60e09d2da0061d72357c2Steve Paik * Should not be obtained directly by clients, use {@link Car#getCarManager(String)} instead. 4396817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * @param service 4406817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * @param context 4416817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * @param handler 44243c04a7c87404d078db60e09d2da0061d72357c2Steve Paik * @hide 44343c04a7c87404d078db60e09d2da0061d72357c2Steve Paik */ 4443ee334d8c220f631d2ea7fa225af148f41b43354Jason Tholstrup public CarCabinManager(IBinder service, Context context, Handler handler) { 4453ee334d8c220f631d2ea7fa225af148f41b43354Jason Tholstrup mMgr = new CarPropertyManagerBase(service, handler, DBG, TAG); 44643c04a7c87404d078db60e09d2da0061d72357c2Steve Paik } 44743c04a7c87404d078db60e09d2da0061d72357c2Steve Paik 4486817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik /** 4496817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * All properties in CarCabinManager are zoned. 4506817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * @param propertyId 4516817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * @return true if property is a zoned type 4526817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik */ 453af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public static boolean isZonedProperty(@PropertyId int propertyId) { 45443c04a7c87404d078db60e09d2da0061d72357c2Steve Paik return true; 45543c04a7c87404d078db60e09d2da0061d72357c2Steve Paik } 45643c04a7c87404d078db60e09d2da0061d72357c2Steve Paik 4576817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik /** 4586817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Implement wrappers for contained CarPropertyManagerBase object 4596817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * @param callback 4606817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * @throws CarNotConnectedException 4616817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik */ 462af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public synchronized void registerCallback(CarCabinEventCallback callback) throws 46343c04a7c87404d078db60e09d2da0061d72357c2Steve Paik CarNotConnectedException { 464af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park if (mCallbacks.isEmpty()) { 46543c04a7c87404d078db60e09d2da0061d72357c2Steve Paik mListenerToBase = new CarPropertyEventListenerToBase(this); 466af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park mMgr.registerCallback(mListenerToBase); 46743c04a7c87404d078db60e09d2da0061d72357c2Steve Paik } 468af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park mCallbacks.add(callback); 46943c04a7c87404d078db60e09d2da0061d72357c2Steve Paik } 47043c04a7c87404d078db60e09d2da0061d72357c2Steve Paik 4716817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik /** 4726817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Stop getting property updates for the given callback. If there are multiple registrations for 4736817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * this listener, all listening will be stopped. 4746817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * @param callback 4756817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik */ 476150d8de43e71a624106e90bcc04067414c42ef18Keun-young Park public synchronized void unregisterCallback(CarCabinEventCallback callback) { 477af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park mCallbacks.remove(callback); 478af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park if (mCallbacks.isEmpty()) { 479af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park mMgr.unregisterCallback(); 48043c04a7c87404d078db60e09d2da0061d72357c2Steve Paik mListenerToBase = null; 48143c04a7c87404d078db60e09d2da0061d72357c2Steve Paik } 48243c04a7c87404d078db60e09d2da0061d72357c2Steve Paik } 48343c04a7c87404d078db60e09d2da0061d72357c2Steve Paik 4846817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik /** 4856817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Get list of properties available to Car Cabin Manager 4866817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * @return List of CarPropertyConfig objects available via Car Cabin Manager. 4876817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * @throws CarNotConnectedException if the connection to the car service has been lost. 4886817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik */ 48943c04a7c87404d078db60e09d2da0061d72357c2Steve Paik public List<CarPropertyConfig> getPropertyList() throws CarNotConnectedException { 49043c04a7c87404d078db60e09d2da0061d72357c2Steve Paik return mMgr.getPropertyList(); 49143c04a7c87404d078db60e09d2da0061d72357c2Steve Paik } 49243c04a7c87404d078db60e09d2da0061d72357c2Steve Paik 4936817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik /** 4946817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Get value of boolean property 4956817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * @param propertyId 4966817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * @param area 4976817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * @return value of requested boolean property 4986817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * @throws CarNotConnectedException 4996817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik */ 500af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public boolean getBooleanProperty(@PropertyId int propertyId, int area) 501af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park throws CarNotConnectedException { 502af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park return mMgr.getBooleanProperty(propertyId, area); 50343c04a7c87404d078db60e09d2da0061d72357c2Steve Paik } 50443c04a7c87404d078db60e09d2da0061d72357c2Steve Paik 5056817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik /** 5066817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Get value of float property 5076817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * @param propertyId 5086817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * @param area 5096817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * @return value of requested float property 5106817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * @throws CarNotConnectedException 5116817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik */ 512af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public float getFloatProperty(@PropertyId int propertyId, int area) 513af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park throws CarNotConnectedException { 514af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park return mMgr.getFloatProperty(propertyId, area); 51543c04a7c87404d078db60e09d2da0061d72357c2Steve Paik } 51643c04a7c87404d078db60e09d2da0061d72357c2Steve Paik 5176817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik /** 5186817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Get value of integer property 5196817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * @param propertyId 5206817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * @param area 5216817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * @return value of requested integer property 5226817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * @throws CarNotConnectedException 5236817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik */ 524af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public int getIntProperty(@PropertyId int propertyId, int area) 525af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park throws CarNotConnectedException { 526af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park return mMgr.getIntProperty(propertyId, area); 52743c04a7c87404d078db60e09d2da0061d72357c2Steve Paik } 52843c04a7c87404d078db60e09d2da0061d72357c2Steve Paik 5296817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik /** 5306817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Set the value of a boolean property 5316817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * @param propertyId 5326817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * @param area 5336817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * @param val 5346817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * @throws CarNotConnectedException 5356817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik */ 536af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public void setBooleanProperty(@PropertyId int propertyId, int area, boolean val) 53743c04a7c87404d078db60e09d2da0061d72357c2Steve Paik throws CarNotConnectedException { 538af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park mMgr.setBooleanProperty(propertyId, area, val); 53943c04a7c87404d078db60e09d2da0061d72357c2Steve Paik } 54043c04a7c87404d078db60e09d2da0061d72357c2Steve Paik 5416817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik /** 5426817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Set the value of a float property 5436817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * @param propertyId 5446817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * @param area 5456817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * @param val 5466817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * @throws CarNotConnectedException 5476817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik */ 548af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public void setFloatProperty(@PropertyId int propertyId, int area, float val) 549af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park throws CarNotConnectedException { 550af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park mMgr.setFloatProperty(propertyId, area, val); 55143c04a7c87404d078db60e09d2da0061d72357c2Steve Paik } 55243c04a7c87404d078db60e09d2da0061d72357c2Steve Paik 5536817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik /** 5546817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * Set the value of an integer property 5556817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * @param propertyId 5566817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * @param area 5576817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * @param val 5586817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik * @throws CarNotConnectedException 5596817797a17e4b5a2421a3b109538c4c1831a6b59Steve Paik */ 560af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public void setIntProperty(@PropertyId int propertyId, int area, int val) 561af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park throws CarNotConnectedException { 562af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park mMgr.setIntProperty(propertyId, area, val); 56343c04a7c87404d078db60e09d2da0061d72357c2Steve Paik } 56443c04a7c87404d078db60e09d2da0061d72357c2Steve Paik 56543c04a7c87404d078db60e09d2da0061d72357c2Steve Paik /** @hide */ 56643c04a7c87404d078db60e09d2da0061d72357c2Steve Paik @Override 56743c04a7c87404d078db60e09d2da0061d72357c2Steve Paik public void onCarDisconnected() { 56843c04a7c87404d078db60e09d2da0061d72357c2Steve Paik mMgr.onCarDisconnected(); 56943c04a7c87404d078db60e09d2da0061d72357c2Steve Paik } 57043c04a7c87404d078db60e09d2da0061d72357c2Steve Paik} 571