package com.mobilesorcery.sdk.ui.targetphone.iphoneos;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.net.URL;
import java.text.MessageFormat;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.PlatformUI;
import com.mobilesorcery.sdk.core.IBuildVariant;
import com.mobilesorcery.sdk.core.MoSyncProject;
import com.mobilesorcery.sdk.profiles.IVendor;
import com.mobilesorcery.sdk.profiles.ProfileDBManager;
import com.mobilesorcery.sdk.ui.MosyncUIPlugin;
import com.mobilesorcery.sdk.ui.ProgressAndStepDialog;
public class AwaitConnectionDialog extends ProgressAndStepDialog {
private static final class DialogIPhoneOSOTAServerListener implements
IPhoneOSOTAServerListener {
private MoSyncProject project;
private boolean appRequested;
public DialogIPhoneOSOTAServerListener(MoSyncProject project) {
this.project = project;
}
public boolean isAppRequested() {
return appRequested;
}
@Override
public void appRequested(MoSyncProject project) {
if (project.getName().equals(this.project.getName())) {
appRequested = true;
}
}
}
public AwaitConnectionDialog(Shell shell) {
super(shell);
}
public static int show(final MoSyncProject project, final IBuildVariant variant) {
final int[] result = new int[1];
PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() {
public void run() {
Shell shell = PlatformUI.getWorkbench()
.getModalDialogShellProvider().getShell();
final AwaitConnectionDialog dialog = new AwaitConnectionDialog(shell);
try {
dialog.run(true, true, new IRunnableWithProgress() {
@Override
public void run(IProgressMonitor monitor)
throws InvocationTargetException,
InterruptedException {
DialogIPhoneOSOTAServerListener listener =
new DialogIPhoneOSOTAServerListener(project);
try {
IPhoneOSOTAServer.getDefault().addListener(
listener);
monitor.beginTask(
"Waiting for device to connect...", -1);
boolean waiting = true;
while (!monitor.isCanceled() && waiting) {
Thread.sleep(500);
waiting = !listener.isAppRequested() && !dialog.shouldWaitInBackground();
}
} finally {
IPhoneOSOTAServer.getDefault().removeListener(
listener);
}
}
});
} catch (Exception e) {
dialog.close();
}
result[0] = dialog.getReturnCode();
}
});
return result[0];
}
protected void addMessages() {
IVendor vendor = ProfileDBManager.getInstance().getVendor("ios");
Image vendorImage = MosyncUIPlugin.getDefault().getPlatformImage(vendor, new Point(16, 16));
Image provImage = IPhoneOSTransportPlugin.getDefault().getImageRegistry().get(IPhoneOSTransportPlugin.PROV_IMAGE);
try {
URL url = IPhoneOSTransportPlugin.getDefault().getServerURL();
addMessage(MosyncUIPlugin.getDefault().getImageRegistry().get(MosyncUIPlugin.IMG_WIFI), "Make sure your device can connect to your computer.\nThe simplest way to do this is often to connect to the same WiFi network.");
addMessage(provImage, "Make sure that you have created an ad hoc provising profile that matches your device.\nIf not correct, the app will not install.");
addMessage(vendorImage,
MessageFormat.format("On your iPhone, go to this URL: {0}", url));
} catch (IOException e) {
addMessage(vendorImage, "Invalid server URL");
}
}
}