SystemAudioActionFromAvr.java revision 16321b80077815eebeceee249ff7a29e336e04a4
163a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo/* 263a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo * Copyright (C) 2014 The Android Open Source Project 363a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo * 463a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo * Licensed under the Apache License, Version 2.0 (the "License"); 563a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo * you may not use this file except in compliance with the License. 663a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo * You may obtain a copy of the License at 763a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo * 863a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo * http://www.apache.org/licenses/LICENSE-2.0 963a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo * 1063a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo * Unless required by applicable law or agreed to in writing, software 1163a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo * distributed under the License is distributed on an "AS IS" BASIS, 1263a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1363a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo * See the License for the specific language governing permissions and 1463a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo * limitations under the License. 1563a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo */ 1663a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo 1763a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heopackage com.android.server.hdmi; 1863a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo 1963a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heoimport android.hardware.hdmi.HdmiCec; 2063a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo 2163a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo/** 2263a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo * Feature action that handles System Audio initiated by AVR devices. 2363a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo */ 2463a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heofinal class SystemAudioActionFromAvr extends SystemAudioAction { 2563a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo /** 2663a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo * Constructor 2763a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo * 2879c58a4b97f27ede6a1b680d2fece9c2a0edf7b7Jungshik Jang * @param source {@link HdmiCecLocalDevice} instance 2963a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo * @param avrAddress logical address of AVR device 3063a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo * @param targetStatus Whether to enable the system audio mode or not 3163a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo * @throw IllegalArugmentException if device type of tvAddress and avrAddress is invalid 3263a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo */ 3379c58a4b97f27ede6a1b680d2fece9c2a0edf7b7Jungshik Jang SystemAudioActionFromAvr(HdmiCecLocalDevice source, int avrAddress, 3463a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo boolean targetStatus) { 3579c58a4b97f27ede6a1b680d2fece9c2a0edf7b7Jungshik Jang super(source, avrAddress, targetStatus); 3679c58a4b97f27ede6a1b680d2fece9c2a0edf7b7Jungshik Jang HdmiUtils.verifyAddressType(getSourceAddress(), HdmiCec.DEVICE_TV); 3763a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo } 3863a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo 3963a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo @Override 4063a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo boolean start() { 4163a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo removeSystemAudioActionInProgress(); 4263a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo handleSystemAudioActionFromAvr(); 4363a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo return true; 4463a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo } 4563a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo 4663a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo private void handleSystemAudioActionFromAvr() { 4779c58a4b97f27ede6a1b680d2fece9c2a0edf7b7Jungshik Jang if (mTargetAudioStatus == tv().getSystemAudioMode()) { 4863a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo finish(); 4963a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo return; 5063a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo } 5179c58a4b97f27ede6a1b680d2fece9c2a0edf7b7Jungshik Jang if (tv().isInPresetInstallationMode()) { 5263a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo sendCommand(HdmiCecMessageBuilder.buildFeatureAbortCommand( 5379c58a4b97f27ede6a1b680d2fece9c2a0edf7b7Jungshik Jang getSourceAddress(), mAvrLogicalAddress, 5463a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo HdmiCec.MESSAGE_SET_SYSTEM_AUDIO_MODE, HdmiConstants.ABORT_REFUSED)); 5563a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo mTargetAudioStatus = false; 5663a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo sendSystemAudioModeRequest(); 5763a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo return; 5863a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo } 5963a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo // TODO: Stop the action for System Audio Mode initialization if it is running. 6063a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo if (mTargetAudioStatus) { 6163a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo setSystemAudioMode(true); 6216321b80077815eebeceee249ff7a29e336e04a4Jungshik Jang startAudioStatusAction(); 6363a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo } else { 6463a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo setSystemAudioMode(false); 6563a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo finish(); 6663a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo } 6763a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo } 6863a2e0696ce2a04fbe0f1f00cfe9c93189f944daYuncheol Heo} 69