/** * Copyright (c) 2013 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 text file delivered with this project for more information. */ package com.nokia.example.statusshout; import java.util.Timer; import java.util.TimerTask; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; import com.nokia.example.statusshout.engine.ShareApiManager; import com.nokia.example.statusshout.engine.StatusShoutData; import com.nokia.example.statusshout.ui.MainView; /** * The main class of the application. */ public class StatusShout extends MIDlet implements CommandListener { // Constants private static final String SPLASH_SCREEN_IMAGE_URI = "/splash-screen-240x320.png"; private static final int SPLASH_SCREEN_BG_COLOR = 0x0066ca; private static final long SPLASH_SCREEN_DURATION = 2000; // Milliseconds // Members private MainView mainView; private Command exitCommand; private Timer splashScreenTimer; private TimerTask splashScreenTimerTask; private boolean wasLaunchedAsSharingDestination; /** * Constructor. */ public StatusShout() { // Create and show the splash screen. Since the splash screen is a // local variable, the resources it reserves will be released after // another Displayable is shown. SplashScreen splashScreen = new SplashScreen(SPLASH_SCREEN_IMAGE_URI, SPLASH_SCREEN_BG_COLOR); Display.getDisplay(this).setCurrent(splashScreen); // It is a good idea to enable exiting with back command during splash // screen too. exitCommand = new Command("Exit", Command.EXIT, 0x01); splashScreen.addCommand(exitCommand); splashScreen.setCommandListener(this); // Set the timer to show the main view splashScreenTimer = new Timer(); splashScreenTimerTask = new SplashScreenTimerTask(); splashScreenTimer.schedule(splashScreenTimerTask, SPLASH_SCREEN_DURATION); } /** * @see javax.microedition.midlet.MIDlet#startApp() */ protected void startApp() throws MIDletStateChangeException { System.out.println("StatusShout.startApp()"); if (mainView == null) { mainView = new MainView(this); } ShareApiManager shareApiManager = ShareApiManager.getInstance(this); shareApiManager.checkForInvocation(); wasLaunchedAsSharingDestination = shareApiManager.getWasLaunchedAsSharingDestination(); if (splashScreenTimer == null) { // No timer running. This might indicate that the app has been // resumed. Thus, show the main view immediately. showMainView(); } } /** * @see javax.microedition.midlet.MIDlet#destroyApp(boolean) */ protected void destroyApp(boolean arg0) throws MIDletStateChangeException { System.out.println("StatusShout.destroyApp()"); // Save app state StatusShoutData.getInstance().save(); } /** * @see javax.microedition.midlet.MIDlet#pauseApp() */ protected void pauseApp() { System.out.println("StatusShout.pauseApp()"); } /** * @see javax.microedition.lcdui.CommandListener#commandAction( * javax.microedition.lcdui.Command, javax.microedition.lcdui.Displayable) */ public void commandAction(Command command, Displayable displayable) { if (command == exitCommand) { try { destroyApp(true); } catch (MIDletStateChangeException e) { e.printStackTrace(); } finally { notifyDestroyed(); } } } /** * Quits the app. */ public void quit() { commandAction(exitCommand, null); } /** * @return The Display instance (required by SplashScreenTimerTask). */ public Display getDisplay() { return Display.getDisplay(this); } /** * Shows the main view. */ private void showMainView() { getDisplay().setCurrent(mainView); mainView.setCategoryBar(!wasLaunchedAsSharingDestination); // If there was an image URI in the invocation data, show it in the // main view final String imageUri = ShareApiManager.getInstance(this).getImageUriFromInvocation(); if (imageUri != null) { mainView.setImage(imageUri); } splashScreenTimer = null; splashScreenTimerTask = null; } /** * A task for showing the main view. */ private class SplashScreenTimerTask extends TimerTask { public void run() { System.out.println("SplashScreenTimerTask.run()"); if (mainView != null) { showMainView(); } } } }