1d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park/*
2d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park * Copyright (C) 2016 The Android Open Source Project
3d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park *
4d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park * Licensed under the Apache License, Version 2.0 (the "License");
5d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park * you may not use this file except in compliance with the License.
6d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park * You may obtain a copy of the License at
7d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park *
8d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park *      http://www.apache.org/licenses/LICENSE-2.0
9d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park *
10d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park * Unless required by applicable law or agreed to in writing, software
11d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park * distributed under the License is distributed on an "AS IS" BASIS,
12d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park * See the License for the specific language governing permissions and
14d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park * limitations under the License.
15d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park */
16d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Parkpackage com.android.car;
17d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park
18d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Parkimport android.content.Context;
193cb891017933140b613cfaf5b8422c112c0f32dcKeun-young Parkimport android.content.res.Resources;
20d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park
21d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Parkimport com.android.car.CarPowerManagementService.PowerEventProcessingHandler;
22d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Parkimport com.android.car.CarPowerManagementService.PowerServiceEventListener;
23d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park
24d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Parkimport java.io.PrintWriter;
25d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park
26d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Parkpublic class SystemStateControllerService implements CarServiceBase,
27d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park    PowerServiceEventListener, PowerEventProcessingHandler {
28d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park
29d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park    private final CarPowerManagementService mCarPowerManagementService;
303cb891017933140b613cfaf5b8422c112c0f32dcKeun-young Park    private final CarAudioService mCarAudioService;
315ce1c8a623943dd92add6261b4828a1d358c6e0bKeun-young Park    private final ICarImpl mICarImpl;
323cb891017933140b613cfaf5b8422c112c0f32dcKeun-young Park    private final boolean mLockWhenMuting;
33d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park
34d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park    public SystemStateControllerService(Context context,
350d07c76bbc788fba8c77d8e932330ab22ec6ba27Pavel Maltsev            CarPowerManagementService carPowerManagementService,
363cb891017933140b613cfaf5b8422c112c0f32dcKeun-young Park            CarAudioService carAudioService, ICarImpl carImpl) {
370d07c76bbc788fba8c77d8e932330ab22ec6ba27Pavel Maltsev        mCarPowerManagementService = carPowerManagementService;
383cb891017933140b613cfaf5b8422c112c0f32dcKeun-young Park        mCarAudioService = carAudioService;
395ce1c8a623943dd92add6261b4828a1d358c6e0bKeun-young Park        mICarImpl = carImpl;
403cb891017933140b613cfaf5b8422c112c0f32dcKeun-young Park        Resources res = context.getResources();
413cb891017933140b613cfaf5b8422c112c0f32dcKeun-young Park        mLockWhenMuting = res.getBoolean(R.bool.displayOffMuteLockAllAudio);
42d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park    }
43d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park
44d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park    @Override
45d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park    public long onPrepareShutdown(boolean shuttingDown) {
46f9215209e0f425d2fc570bef37dad959c82d2e9eKeun-young Park        //TODO add state saving here for things to restore on power on. bug: 32096079
47d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park        return 0;
48d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park    }
49d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park
50d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park    @Override
51d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park    public void onPowerOn(boolean displayOn) {
5252d8f7d353c67d89f6a248a15fb893da8fdccbf6Hongwei Wang        // TODO may consider mute / unmute the system based on displayOn
53d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park    }
54d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park
55d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park    @Override
56d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park    public int getWakeupTime() {
57d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park        return 0;
58d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park    }
59d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park
60d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park    @Override
61d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park    public void onShutdown() {
62f9215209e0f425d2fc570bef37dad959c82d2e9eKeun-young Park        // TODO bug: 32096079
63d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park    }
64d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park
65d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park    @Override
66d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park    public void onSleepEntry() {
67f9215209e0f425d2fc570bef37dad959c82d2e9eKeun-young Park        // TODO bug: 32096079
68d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park    }
69d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park
70d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park    @Override
71d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park    public void onSleepExit() {
72f9215209e0f425d2fc570bef37dad959c82d2e9eKeun-young Park        // TODO bug: 32096079
73d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park    }
74d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park
75d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park    @Override
76d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park    public void init() {
77d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park        mCarPowerManagementService.registerPowerEventListener(this);
78d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park        mCarPowerManagementService.registerPowerEventProcessingHandler(this);
79d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park    }
80d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park
81d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park    @Override
82d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park    public void release() {
83d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park    }
84d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park
85d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park    @Override
86d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park    public void dump(PrintWriter writer) {
87d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park    }
88d73afaeb1c4c64ddad94e696a0fd88147888dee1Keun-young Park}
89