package org.mobicents.sip.phone.views;
import java.net.URL;
import java.util.Iterator;
import net.java.sip.communicator.service.audionotifier.AudioNotifierService;
import net.java.sip.communicator.service.protocol.CallParticipant;
import net.java.sip.communicator.service.protocol.DTMFTone;
import net.java.sip.communicator.service.protocol.OperationFailedException;
import net.java.sip.communicator.service.protocol.OperationSetDTMF;
import net.java.sip.communicator.util.Logger;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
import org.mobicents.sip.phone.SipPhoneActivator;
public class Keypad extends Composite{
private static final Logger logger = Logger.getLogger(Keypad.class);
private String[] dtmfFiles = new String[] {
"one_1.wav",
"two_2.wav",
"three_3.wav",
"four_4.wav",
"five_5.wav",
"six_6.wav",
"seven_7.wav",
"eight_8.wav",
"nine_9.wav"
};
private Listener buttonListener;
private CallParticipant remoteSide;
public Keypad(Composite parent, int style) {
super(parent, style);
buttonListener = new Listener() {
@Override
public void handleEvent(Event event) {
if(event.widget instanceof Button) {
Button b = (Button) event.widget;
String digit = b.getText();
sendDtmfTone(new DTMFTone(digit));
AudioNotifierService audio = SipCommunicatorOSGIBootstrap.getAudioNotifier();
int buttonNumber = -1;
try {
buttonNumber = Integer.parseInt(digit);
} catch (Throwable t) {}
if(buttonNumber >= 0) {
URL url = SipPhoneActivator.getDefault().getBundle().getEntry(
"/resources/sounds/" + dtmfFiles[buttonNumber+1]);
audio.createAudio(url).play();
}
logger.info(digit);
}
}
};
Composite group = new Group(parent, SWT.NONE);
GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 3;
group.setLayout(gridLayout);
addButton(group, "1");
addButton(group, "2");
addButton(group, "3");
addButton(group, "4");
addButton(group, "5");
addButton(group, "6");
addButton(group, "7");
addButton(group, "8");
addButton(group, "9");
addButton(group, "#");
addButton(group, "0");
addButton(group, "*");
}
private void sendDtmfTone(DTMFTone dtmfTone)
{
if(remoteSide != null) {
CallParticipant participant
= remoteSide;
if (participant.getProtocolProvider()
.getOperationSet(OperationSetDTMF.class) != null)
{
OperationSetDTMF dtmfOpSet
= (OperationSetDTMF) participant.getProtocolProvider()
.getOperationSet(OperationSetDTMF.class);
try {
dtmfOpSet.sendDTMF(participant, dtmfTone);
} catch (Exception e) {
logger.error(e);
}
}
}
}
public Button addButton(Composite parent, String text) {
Button b = new Button(parent, SWT.PUSH);
b.setText(text);
b.addListener(SWT.Selection, buttonListener);
return b;
}
public CallParticipant getRemoteSide() {
return remoteSide;
}
public void setRemoteSide(CallParticipant remoteSide) {
this.remoteSide = remoteSide;
}
}