package org.jetbrains.android.uipreview; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.progress.util.ProgressIndicatorBase; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; /** * @author Eugene.Kudelevsky */ class AndroidPreviewProgressIndicator extends ProgressIndicatorBase { private final Object myLock = new Object(); private final int myDelay; private @NotNull final AndroidLayoutPreviewToolWindowForm myForm; AndroidPreviewProgressIndicator(@NotNull AndroidLayoutPreviewToolWindowForm form, int delay) { myDelay = delay; myForm = form; } @Override public void start() { super.start(); UIUtil.invokeLaterIfNeeded(new Runnable() { @Override public void run() { final Timer timer = UIUtil.createNamedTimer("Android rendering progress timer", myDelay, new ActionListener() { @Override public void actionPerformed(ActionEvent e) { synchronized (myLock) { if (isRunning()) { myForm.getPreviewPanel().registerIndicator(AndroidPreviewProgressIndicator.this); } } } }); timer.setRepeats(false); timer.start(); } }); } @Override public void stop() { synchronized (myLock) { super.stop(); ApplicationManager.getApplication().invokeLater(new Runnable() { @Override public void run() { myForm.getPreviewPanel().unregisterIndicator(AndroidPreviewProgressIndicator.this); } }); } } }