package com.github.xsavikx.androidscreencast.ui.interaction;
import com.github.xsavikx.androidscreencast.api.command.KeyCommand;
import com.github.xsavikx.androidscreencast.api.command.executor.CommandExecutor;
import com.github.xsavikx.androidscreencast.api.command.factory.InputCommandFactory;
import com.github.xsavikx.androidscreencast.api.injector.KeyCodeConverter;
import com.github.xsavikx.androidscreencast.dagger.MainComponentProvider;
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
public class KeyEventDispatcherImpl implements KeyEventDispatcher {
private final Window window;
private CommandExecutor commandExecutor;
private InputCommandFactory inputCommandFactory;
public KeyEventDispatcherImpl(Window frame) {
this.window = frame;
}
@Override
public boolean dispatchKeyEvent(final KeyEvent e) {
if (!window.isActive())
return false;
if (e.getID() == KeyEvent.KEY_TYPED) {
final int code = KeyCodeConverter.getKeyCode(e);
SwingUtilities.invokeLater(() -> {
final KeyCommand command = getInputCommandFactory().getKeyCommand(code);
getCommandExecutor().execute(command);
});
}
return false;
}
private InputCommandFactory getInputCommandFactory() {
if (inputCommandFactory == null) {
inputCommandFactory = MainComponentProvider.mainComponent().inputCommandFactory();
}
return inputCommandFactory;
}
private CommandExecutor getCommandExecutor() {
if (commandExecutor == null) {
commandExecutor = MainComponentProvider.mainComponent().commandExecutor();
}
return commandExecutor;
}
}