/*
 * Copyright (C) 2011 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
package android.speech.tts;

import android.os.ConditionVariable;
import android.speech.tts.TextToSpeechService.UtteranceProgressDispatcher;

class SilencePlaybackQueueItem extends PlaybackQueueItem {
    private final ConditionVariable mCondVar = new ConditionVariable();
    private final long mSilenceDurationMs;

    SilencePlaybackQueueItem(UtteranceProgressDispatcher dispatcher,
            Object callerIdentity, long silenceDurationMs) {
        super(dispatcher, callerIdentity);
        mSilenceDurationMs = silenceDurationMs;
    }

    @Override
    public void run() {
        getDispatcher().dispatchOnStart();
        boolean wasStopped = false;
        if (mSilenceDurationMs > 0) {
          wasStopped = mCondVar.block(mSilenceDurationMs);
        }
        if (wasStopped) {
            getDispatcher().dispatchOnStop();
        } else {
            getDispatcher().dispatchOnSuccess();
        }

    }

    @Override
    void stop(int errorCode) {
        mCondVar.open();
    }
}
