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