001: /*
002: *
003: *
004: * Copyright 1990-2007 Sun Microsystems, Inc. All Rights Reserved.
005: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
006: *
007: * This program is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU General Public License version
009: * 2 only, as published by the Free Software Foundation.
010: *
011: * This program is distributed in the hope that it will be useful, but
012: * WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * General Public License version 2 for more details (a copy is
015: * included at /legal/license.txt).
016: *
017: * You should have received a copy of the GNU General Public License
018: * version 2 along with this work; if not, write to the Free Software
019: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA
021: *
022: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
023: * Clara, CA 95054 or visit www.sun.com if you need additional
024: * information or have any questions.
025: */
026:
027: package com.sun.midp.appmanager;
028:
029: import javax.microedition.lcdui.*;
030: import com.sun.midp.installer.*;
031:
032: import java.util.Timer;
033: import java.util.TimerTask;
034:
035: /** Implements the splash screen */
036: class SplashScreen extends Canvas {
037:
038: /** Splash screen image */
039: private Image splashScreen;
040:
041: /** The displayable to be displayed after SplashScreen is dismissed. */
042: private Displayable nextScreen;
043:
044: /** The display associated with Manager midlet. */
045: private Display display;
046:
047: /**
048: * A TimerTask which will be set to switch to the App Manager Screen
049: * after its timeout period has elapsed.
050: */
051: TimerTask timerTask;
052:
053: /**
054: * A Timer which serves this Splash Screen object to schedule
055: * its timeout task
056: */
057: Timer timeoutTimer;
058:
059: /**
060: * Creates a Splash screen.
061: * @param display - the display associated wit the Manager midlet
062: * @param nextScreen - the screen to be displayed after timeout
063: */
064: SplashScreen(Display display, Displayable nextScreen) {
065: this .nextScreen = nextScreen;
066: this .display = display;
067:
068: setFullScreenMode(true);
069: }
070:
071: /**
072: * Paint splash screen.
073: *
074: * @param g Graphics instance to paint on
075: */
076: public void paint(Graphics g) {
077:
078: // White background
079: g.setColor(255, 255, 255);
080: g.fillRect(0, 0, getWidth(), getHeight());
081:
082: if (splashScreen != null) {
083: g.drawImage(splashScreen, 0, 0, Graphics.LEFT
084: | Graphics.TOP);
085: }
086: }
087:
088: /**
089: * Override showNotify to set a timer task so that Splash screen
090: * automatically switches to the App Manager Screen.
091: */
092: public void showNotify() {
093: if (timerTask != null) {
094: timerTask.cancel();
095: }
096:
097: if (timeoutTimer == null) {
098: timeoutTimer = new Timer();
099: }
100: splashScreen = GraphicalInstaller
101: .getImageFromInternalStorage("splash_screen_"
102: + getWidth() + "x" + getHeight());
103:
104: timerTask = new TimeoutTask();
105: timeoutTimer.schedule(timerTask, 2000);
106: }
107:
108: /**
109: * Override hideNotify to cancel timer task.
110: */
111: public void hideNotify() {
112: if (timerTask != null) {
113: timerTask.cancel();
114: }
115: timerTask = null;
116:
117: timeoutTimer = null;
118: }
119:
120: // *****************************************************
121: // Internal Class
122: // *****************************************************
123:
124: /**
125: * A TimerTask subclass which will switch to the App Manager after
126: * a time out time set.
127: */
128: private class TimeoutTask extends TimerTask {
129:
130: /**
131: * Create a new timeout task
132: */
133: TimeoutTask() {
134: }
135:
136: /**
137: * Switch to the the App Manager Screen.
138: */
139: public void run() {
140: display.setCurrent(nextScreen);
141: }
142: } // TimeoutTask
143: }
|