package com.github.xsavikx.androidscreencast.app; import com.android.ddmlib.IDevice; import com.github.xsavikx.androidscreencast.api.adb.AndroidDebugBridgeWrapper; import com.github.xsavikx.androidscreencast.api.injector.Injector; import com.github.xsavikx.androidscreencast.configuration.ApplicationConfiguration; import com.github.xsavikx.androidscreencast.ui.JFrameMain; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.inject.Inject; import javax.inject.Singleton; import javax.swing.*; import java.awt.*; @Singleton public class AndroidScreencastApplication extends SwingApplication { private static final Logger LOGGER = LoggerFactory.getLogger(AndroidScreencastApplication.class); private final JFrameMain jFrameMain; private final Injector injector; private final IDevice iDevice; private final AndroidDebugBridgeWrapper wrapper; private transient boolean isStopped = false; @Inject public AndroidScreencastApplication(final Injector injector, final IDevice iDevice, final JFrameMain jFrameMain, final ApplicationConfiguration applicationConfiguration, AndroidDebugBridgeWrapper wrapper) { super(applicationConfiguration); this.injector = injector; this.iDevice = iDevice; this.jFrameMain = jFrameMain; this.wrapper = wrapper; } @Override public void stop() { LOGGER.info("Stopping application"); if (isStopped) { LOGGER.debug("Application is already stopped."); return; } injector.stop(); wrapper.stop(); for (final Frame frame : Frame.getFrames()) { frame.dispose(); } isStopped = true; } @Override public void start() { LOGGER.info("Starting application"); if (iDevice == null) { LOGGER.warn("No valid device was chosen. Please try to chose correct one."); stop(); } SwingUtilities.invokeLater(() -> { jFrameMain.initialize(); // Start showing the iDevice screen jFrameMain.setTitle(iDevice.getSerialNumber()); // Show window jFrameMain.setVisible(true); jFrameMain.launchInjector(); }); } }