package im.actor.core.modules.calls;
import im.actor.core.entity.Peer;
import im.actor.core.viewmodel.CallVM;
import im.actor.core.viewmodel.CommandCallback;
import im.actor.core.providers.CallsProvider;
import im.actor.core.modules.AbsModule;
import im.actor.core.modules.ModuleContext;
import im.actor.core.viewmodel.Command;
import im.actor.runtime.*;
import im.actor.runtime.actors.ActorRef;
import static im.actor.runtime.actors.ActorSystem.system;
public class CallsModule extends AbsModule {
public static final String TAG = "CALLS";
private ActorRef callManager;
private CallViewModels callViewModels;
public CallsModule(ModuleContext context) {
super(context);
if (context().getConfiguration().isVoiceCallsEnabled()) {
callViewModels = new CallViewModels(context());
}
}
public void run() {
if (context().getConfiguration().isVoiceCallsEnabled()) {
callManager = system().actorOf("calls/manager", CallManagerActor.CONSTRUCTOR(context()));
}
}
public CallViewModels getCallViewModels() {
return callViewModels;
}
public CallVM getCall(long id) {
return callViewModels.getCall(id);
}
public ActorRef getCallManager() {
return callManager;
}
public void checkCall(long callId, int attempt) {
callManager.send(new CallManagerActor.OnIncomingCallLocked(callId, attempt, im.actor.runtime.Runtime.makeWakeLock()));
}
public void probablyEndCall() {
callManager.send(new CallManagerActor.ProbablyEndCall());
}
public Command<Long> makeCall(final Peer peer, boolean enableVideoCall) {
return callback -> callManager.send(new CallManagerActor.DoCall(peer, callback, enableVideoCall));
}
public void muteCall(long callId) {
callManager.send(new CallManagerActor.AudioDisable(callId));
}
public void unmuteCall(long callId) {
callManager.send(new CallManagerActor.AudioEnable(callId));
}
public void disableVideo(long callId) {
callManager.send(new CallManagerActor.DisableVideo(callId));
}
public void enableVideo(long callId) {
callManager.send(new CallManagerActor.EnableVideo(callId));
}
public void endCall(long callId) {
callManager.send(new CallManagerActor.DoEndCall(callId));
}
public void answerCall(long callId) {
callManager.send(new CallManagerActor.DoAnswerCall(callId));
}
}