Snooze.java Source code

Java tutorial

Introduction

Here is the source code for Snooze.java

Source

/*--------------------------------------------------
* Snooze.java
*
* Example from the book:     Core J2ME Technology
* Copyright John W. Muchow   http://www.CoreJ2ME.com
* You may use/modify for any non-commercial purpose
*-------------------------------------------------*/
import java.util.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.util.Timer;
import java.util.TimerTask;

public class Snooze extends MIDlet implements ItemStateListener, CommandListener {
    private Display display; // Reference to display object 
    private Form fmMain; // The main form
    private Command cmSnooze; // Start the timer
    private Command cmReset; // Reset to current date/time
    private Command cmExit; // Exit the MIDlet
    private DateField dfSnoozeTime; // How long to snooze
    private int dateIndex; // Index of the DateField on the Form
    private Date currentTime; // Current time...changes when pressing reset
    private Timer tmSnooze; // The timer - keeps track of system time
    private SnoozeTimer ttSnooze; // Called by the timer
    private boolean dateOK = false; // Was the user input valid?

    public Snooze() {
        display = Display.getDisplay(this);

        // The main form
        fmMain = new Form("When to sound the alarm:");

        // Save today's date
        currentTime = new Date();

        // DateField with todays date as a default
        dfSnoozeTime = new DateField("", DateField.DATE_TIME);
        dfSnoozeTime.setDate(currentTime);

        // All the commands/buttons
        cmSnooze = new Command("Snooze", Command.SCREEN, 1);
        cmReset = new Command("Reset", Command.SCREEN, 1);
        cmExit = new Command("Exit", Command.EXIT, 1);

        // Add to form and listen for events
        dateIndex = fmMain.append(dfSnoozeTime);
        fmMain.addCommand(cmSnooze);
        fmMain.addCommand(cmReset);
        fmMain.addCommand(cmExit);
        fmMain.setCommandListener(this);
        fmMain.setItemStateListener(this);
    }

    public void startApp() {
        display.setCurrent(fmMain);
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
    }

    public void itemStateChanged(Item item) {
        if (item == dfSnoozeTime) {
            // If the user selected date and/or time that is earlier 
            // than today, set a flag. We are using getTime() 
            // method of the Date  class, which returns the # of 
            // milliseconds since January 1, 1970
            if (dfSnoozeTime.getDate().getTime() < currentTime.getTime())
                dateOK = false;
            else
                dateOK = true;
        }
    }

    public void commandAction(Command c, Displayable s) {
        if (c == cmSnooze) {
            if (dateOK == false) {
                Alert al = new Alert("Unable to set alarm", "Please choose another date and time.", null, null);
                al.setTimeout(Alert.FOREVER);
                al.setType(AlertType.ERROR);
                display.setCurrent(al);
            } else {
                // Create a new timer
                tmSnooze = new Timer();
                ttSnooze = new SnoozeTimer();

                // Amount of time to delay
                long amount = dfSnoozeTime.getDate().getTime() - currentTime.getTime();
                tmSnooze.schedule(ttSnooze, amount);

                // Remove the commands
                fmMain.removeCommand(cmSnooze);
                fmMain.removeCommand(cmReset);

                // Remove the DateField
                fmMain.delete(dateIndex);

                // Change the Form message
                fmMain.setTitle("Snoozing...");
            }
        } else if (c == cmReset) {
            // Reset to the current date/time
            dfSnoozeTime.setDate(currentTime = new Date());
        } else if (c == cmExit) {
            destroyApp(false);
            notifyDestroyed();
        }
    }

    // Handle the timer task
    private class SnoozeTimer extends TimerTask {
        public final void run() {
            Alert al = new Alert("Time to wake up!");
            al.setTimeout(Alert.FOREVER);
            al.setType(AlertType.ALARM);
            AlertType.ERROR.playSound(display);
            display.setCurrent(al);

            // Cancel this timer task
            cancel();
        }
    }
}