| package com.googlecode.android_scripting.facade; |
| |
| import android.media.AudioManager; |
| import android.media.ToneGenerator; |
| |
| import com.googlecode.android_scripting.jsonrpc.RpcReceiver; |
| import com.googlecode.android_scripting.rpc.Rpc; |
| import com.googlecode.android_scripting.rpc.RpcDefault; |
| import com.googlecode.android_scripting.rpc.RpcParameter; |
| |
| /** |
| * Generate DTMF tones. |
| * |
| */ |
| public class ToneGeneratorFacade extends RpcReceiver { |
| |
| private final ToneGenerator mToneGenerator; |
| |
| public ToneGeneratorFacade(FacadeManager manager) { |
| super(manager); |
| mToneGenerator = new ToneGenerator(AudioManager.STREAM_MUSIC, 100); |
| } |
| |
| @Rpc(description = "Generate DTMF tones for the given phone number.") |
| public void generateDtmfTones( |
| @RpcParameter(name = "phoneNumber") String phoneNumber, |
| @RpcParameter(name = "toneDuration", description = "duration of each tone in milliseconds") @RpcDefault("100") Integer toneDuration) |
| throws InterruptedException { |
| try { |
| for (int i = 0; i < phoneNumber.length(); i++) { |
| switch (phoneNumber.charAt(i)) { |
| case '0': |
| mToneGenerator.startTone(ToneGenerator.TONE_DTMF_0); |
| Thread.sleep(toneDuration); |
| break; |
| case '1': |
| mToneGenerator.startTone(ToneGenerator.TONE_DTMF_1); |
| Thread.sleep(toneDuration); |
| break; |
| case '2': |
| mToneGenerator.startTone(ToneGenerator.TONE_DTMF_2); |
| Thread.sleep(toneDuration); |
| break; |
| case '3': |
| mToneGenerator.startTone(ToneGenerator.TONE_DTMF_3); |
| Thread.sleep(toneDuration); |
| break; |
| case '4': |
| mToneGenerator.startTone(ToneGenerator.TONE_DTMF_4); |
| Thread.sleep(toneDuration); |
| break; |
| case '5': |
| mToneGenerator.startTone(ToneGenerator.TONE_DTMF_5); |
| Thread.sleep(toneDuration); |
| break; |
| case '6': |
| mToneGenerator.startTone(ToneGenerator.TONE_DTMF_6); |
| Thread.sleep(toneDuration); |
| break; |
| case '7': |
| mToneGenerator.startTone(ToneGenerator.TONE_DTMF_7); |
| Thread.sleep(toneDuration); |
| break; |
| case '8': |
| mToneGenerator.startTone(ToneGenerator.TONE_DTMF_8); |
| Thread.sleep(toneDuration); |
| break; |
| case '9': |
| mToneGenerator.startTone(ToneGenerator.TONE_DTMF_9); |
| Thread.sleep(toneDuration); |
| break; |
| case '*': |
| mToneGenerator.startTone(ToneGenerator.TONE_DTMF_S); |
| Thread.sleep(toneDuration); |
| break; |
| case '#': |
| mToneGenerator.startTone(ToneGenerator.TONE_DTMF_P); |
| Thread.sleep(toneDuration); |
| break; |
| default: |
| throw new RuntimeException("Cannot generate tone for '" + phoneNumber.charAt(i) + "'"); |
| } |
| } |
| } finally { |
| mToneGenerator.stopTone(); |
| } |
| } |
| |
| @Override |
| public void shutdown() { |
| } |
| } |