ProviderQueryUI.java
/*
* Copyright © 2012 Nokia Corporation. All rights reserved.
* Nokia and Nokia Connecting People are registered trademarks of Nokia Corporation.
* Oracle and Java are trademarks or registered trademarks of Oracle and/or its
* affiliates. Other product and company names mentioned herein may be trademarks
* or trade names of their respective owners.
* See LICENSE.TXT for license information.
*/
package com.nokia.example.location.touristroute.ui;
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.StringItem;
import com.nokia.example.location.touristroute.TouristMIDlet;
/**
* Viewer class that is responsible for all the UI actions when the application
* is seaching for the location provider.
*/
public class ProviderQueryUI
{
/** Status information Form */
private Form searchForm = new Form("Seaching location provider...");
/** StringItem showing the current status. */
private StringItem infoItem = new StringItem("Status:", "");
/** Provider cost selection command - Yes. */
private Command yesCmd = new Command("Yes", Command.OK, 1);
/** Provider cost selection command - No. */
private Command noCmd = new Command("No", Command.STOP, 1);
/** A boolean indicating may user allow location provider cost. */
private boolean result = false;
private static final String COST_QUERY_MESSAGE = "Cost free location providers can not be found. Do you with continue "
+ "search with providers that cost?";
private static final String OUT_OF_SERVICE_MESSAGE = "All Location providers are currently out of service. Please unsure "
+ "that location-providing module is properly connected.";
private static final String SEACHING_FREE_PROVIDERS = "Seaching for free location providers.";
private static final String SEACHING_COST_PROVIDERS = "Seaching for providers that may cost.";
private static final String NOT_FOUND_MESSAGE = "Try again after location-providing module is properly connected.";
private static final String NO_FREE_SERVICE_SERVICE_MESSAGE = "Cost free location providers can not be found. Please ensure "
+ "that location-providing module is properly connected.";
/**
* Construct the UI with default values.
*/
public ProviderQueryUI()
{
infoItem.setText(SEACHING_FREE_PROVIDERS);
searchForm.append(infoItem);
}
/**
* Show out of service error message.
*/
public void showOutOfService()
{
Alert alert = new Alert("Error", OUT_OF_SERVICE_MESSAGE, null,
AlertType.ERROR);
alert.setTimeout(Alert.FOREVER);
TouristMIDlet.getDisplay().setCurrent(alert, searchForm);
infoItem.setText(NOT_FOUND_MESSAGE);
}
/**
* Show no cost free location provider found error message.
*/
public void showNoFreeServiceFound()
{
Alert alert = new Alert("Error", NO_FREE_SERVICE_SERVICE_MESSAGE, null,
AlertType.ERROR);
alert.setTimeout(Alert.FOREVER);
TouristMIDlet.getDisplay().setCurrent(alert, searchForm);
infoItem.setText(NOT_FOUND_MESSAGE);
}
/**
* Query the user whether the use of location provider may cost. The use of
* this method is locked with synchronized keyword, so only one thread can
* access this method at once.
*
* @return a boolean indicating may user allow location provider cost.
*/
public synchronized boolean confirmCostProvider()
{
Alert alert = new Alert("Confimnation", COST_QUERY_MESSAGE, null,
AlertType.CONFIRMATION);
alert.addCommand(yesCmd);
alert.addCommand(noCmd);
alert.setTimeout(Alert.FOREVER);
// Set the monitoring object to be this instance.
final ProviderQueryUI hinstance = this;
// Add a CommandLister as anomynous inner class
alert.setCommandListener(new CommandListener()
{
/*
* Event indicating when a command button is pressed.
*
* @see javax.microedition.lcdui.CommandListener#commandAction(javax.microedition.lcdui.Command,
* javax.microedition.lcdui.Displayable)
*/
public void commandAction(Command command, Displayable d)
{
if (command == yesCmd)
{
infoItem.setText(SEACHING_COST_PROVIDERS);
result = true;
synchronized (hinstance)
{
// Wake up the monitoring object
hinstance.notifyAll();
}
}
else if (command == noCmd)
{
result = false;
infoItem.setText(NOT_FOUND_MESSAGE);
synchronized (hinstance)
{
// Wake up the monitoring object
hinstance.notifyAll();
}
}
}
});
TouristMIDlet.getDisplay().setCurrent(alert, searchForm);
// Wait indefinitely for notification.
try
{
wait();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
TouristMIDlet.getDisplay().setCurrent(searchForm);
return result;
}
}