package im.actor.core.js.providers; import com.google.gwt.core.client.JavaScriptObject; import com.google.gwt.media.client.Audio; import im.actor.core.js.JsMessenger; import im.actor.core.providers.CallsProvider; import im.actor.core.viewmodel.CallState; public class JsCallsProvider implements CallsProvider { private Audio callBeep; private Audio callRingtone; public JsCallsProvider() { Audio callBeep = Audio.createIfSupported(); if (callBeep != null) { if (!"".equals(callBeep.canPlayType("audio/ogg;"))) { callBeep.setSrc("assets/sound/tone.ogg"); } else if (!"".equals(callBeep.canPlayType("audio/mpeg;"))) { callBeep.setSrc("assets/sound/tone.mp3"); } else { // Not Supported return; } callBeep.setLoop(true); this.callBeep = callBeep; } Audio callRingtone = Audio.createIfSupported(); if (callRingtone != null) { if (!"".equals(callRingtone.canPlayType("audio/ogg;"))) { callRingtone.setSrc("assets/sound/ringtone.ogg"); } else if (!"".equals(callRingtone.canPlayType("audio/mpeg;"))) { callRingtone.setSrc("assets/sound/ringtone.mp3"); } else { // Not Supported return; } callRingtone.setLoop(true); this.callRingtone = callRingtone; } } @Override public void onCallStart(long callId) { JsMessenger.getInstance().broadcastEvent("calls", callEvent("" + callId, "started")); if (!JsMessenger.getInstance().getCall(callId).isOutgoing()) { startRingtone(); } } @Override public void onCallAnswered(long callId) { stopRingtone(); } @Override public void onCallEnd(long callId) { JsMessenger.getInstance().broadcastEvent("calls", callEvent("" + callId, "ended")); stopRingtone(); } @Override public void startOutgoingBeep() { if (callBeep != null) { callBeep.setCurrentTime(0); callBeep.play(); } } @Override public void stopOutgoingBeep() { if (callBeep != null) { callBeep.pause(); callBeep.setCurrentTime(0); } } private void startRingtone() { if (callRingtone != null) { callRingtone.setCurrentTime(0); callRingtone.play(); } } private void stopRingtone() { if (callRingtone != null) { callRingtone.pause(); callRingtone.setCurrentTime(0); } } private final native JavaScriptObject callEvent(String id, String type)/*-{ return {id: id, type: type}; }-*/; }