| /* | 
 |  *  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); | 
 | }; |