| /* | |
| * Copyright 2017 The WebRTC project authors. All Rights Reserved. | |
| * | |
| * Use of this source code is governed by a BSD-style license | |
| * that can be found in the LICENSE file in the root of the source | |
| * tree. An additional intellectual property rights grant can be found | |
| * in the file PATENTS. All contributing project authors may | |
| * be found in the AUTHORS file in the root of the source tree. | |
| */ | |
| package org.webrtc; | |
| /** Java wrapper for a C++ DtmfSenderInterface. */ | |
| public class DtmfSender { | |
| private long nativeDtmfSender; | |
| public DtmfSender(long nativeDtmfSender) { | |
| this.nativeDtmfSender = nativeDtmfSender; | |
| } | |
| /** | |
| * @return true if this DtmfSender is capable of sending DTMF. Otherwise false. | |
| */ | |
| public boolean canInsertDtmf() { | |
| checkDtmfSenderExists(); | |
| return nativeCanInsertDtmf(nativeDtmfSender); | |
| } | |
| /** | |
| * Queues a task that sends the provided DTMF tones. | |
| * <p> | |
| * If insertDtmf is called on the same object while an existing task for this | |
| * object to generate DTMF is still running, the previous task is canceled. | |
| * | |
| * @param tones This parameter is treated as a series of characters. The characters 0 | |
| * through 9, A through D, #, and * generate the associated DTMF tones. The | |
| * characters a to d are equivalent to A to D. The character ',' indicates a | |
| * delay of 2 seconds before processing the next character in the tones | |
| * parameter. Unrecognized characters are ignored. | |
| * @param duration Indicates the duration in ms to use for each character passed in the tones | |
| * parameter. The duration cannot be more than 6000 or less than 70. | |
| * @param interToneGap Indicates the gap between tones in ms. Must be at least 50 ms but should be | |
| * as short as possible. | |
| * @return true on success and false on failure. | |
| */ | |
| public boolean insertDtmf(String tones, int duration, int interToneGap) { | |
| checkDtmfSenderExists(); | |
| return nativeInsertDtmf(nativeDtmfSender, tones, duration, interToneGap); | |
| } | |
| /** | |
| * @return The tones remaining to be played out | |
| */ | |
| public String tones() { | |
| checkDtmfSenderExists(); | |
| return nativeTones(nativeDtmfSender); | |
| } | |
| /** | |
| * @return The current tone duration value in ms. This value will be the value last set via the | |
| * insertDtmf() method, or the default value of 100 ms if insertDtmf() was never called. | |
| */ | |
| public int duration() { | |
| checkDtmfSenderExists(); | |
| return nativeDuration(nativeDtmfSender); | |
| } | |
| /** | |
| * @return The current value of the between-tone gap in ms. This value will be the value last set | |
| * via the insertDtmf() method, or the default value of 50 ms if insertDtmf() was never | |
| * called. | |
| */ | |
| public int interToneGap() { | |
| checkDtmfSenderExists(); | |
| return nativeInterToneGap(nativeDtmfSender); | |
| } | |
| public void dispose() { | |
| checkDtmfSenderExists(); | |
| JniCommon.nativeReleaseRef(nativeDtmfSender); | |
| nativeDtmfSender = 0; | |
| } | |
| private void checkDtmfSenderExists() { | |
| if (nativeDtmfSender == 0) { | |
| throw new IllegalStateException("DtmfSender has been disposed."); | |
| } | |
| } | |
| private static native boolean nativeCanInsertDtmf(long dtmfSender); | |
| private static native boolean nativeInsertDtmf( | |
| long dtmfSender, String tones, int duration, int interToneGap); | |
| private static native String nativeTones(long dtmfSender); | |
| private static native int nativeDuration(long dtmfSender); | |
| private static native int nativeInterToneGap(long dtmfSender); | |
| }; |