/**
* BlueCove - Java library for Bluetooth
* Copyright (C) 2006-2009 Vlad Skarzhevskyy
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
* @author vlads
* @version $Id$
*/
package org.bluecove.tester.me;
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import org.bluecove.tester.log.Logger;
import org.bluecove.tester.util.RuntimeDetect;
/**
*
*/
public abstract class BaseTestMIDlet extends MIDlet {
protected static BaseTestMIDlet instance;
protected static Display display;
private Displayable mainDisplayable;
/** The messages are shown in this app this amount of time. */
static final int ALERT_TIMEOUT = 10000;
protected abstract Displayable createMainDisplayable();
protected void startApp() throws MIDletStateChangeException {
RuntimeDetect.detectCLDC();
instance = this;
display = Display.getDisplay(this);
if (mainDisplayable == null) {
mainDisplayable = createMainDisplayable();
}
showMain();
}
protected void destroyApp(boolean unconditional) throws MIDletStateChangeException {
}
protected void pauseApp() {
}
public static void showMain() {
setCurrentDisplayable(instance.mainDisplayable);
}
public static void setCurrentDisplayable(Displayable nextDisplayable) {
display.setCurrent(nextDisplayable);
}
public static void exit() {
try {
instance.destroyApp(true);
} catch (MIDletStateChangeException e) {
}
instance.notifyDestroyed();
}
/** Show error message to user when something wrong with app */
public static void error(final String message) {
Logger.error(message);
Alert al = new Alert("Error", message, null, AlertType.ERROR);
al.setTimeout(ALERT_TIMEOUT);
showAlertLater(al);
}
public static void alert(final String title, final String message) {
Logger.debug(title + " " + message);
Alert al = new Alert(title, message, null, AlertType.INFO);
al.setTimeout(ALERT_TIMEOUT);
showAlertLater(al);
}
public static void alert(String message) {
alert("Message", message);
}
public static void message(final String title, final String message) {
Logger.debug(title + " " + message);
Alert al = new Alert(title, message, null, AlertType.INFO);
al.setTimeout(ALERT_TIMEOUT);
showAlertLater(al);
}
private static void showAlertLater(final Alert al) {
Runnable r = new Runnable() {
public void run() {
setCurrentDisplayable(al);
}
};
display.callSerially(r);
}
}