FileDocCategorySizeDatePackage
SMMManager.javaAPI DocphoneME MR2 API (J2ME)12002Wed May 02 18:00:02 BST 2007com.sun.midp.appmanager

SMMManager

public class SMMManager extends MIDlet implements ApplicationManager, MIDletProxyListListener, Runnable
This is an implementation of the ApplicationManager interface for the MVM mode of the VM running with only one midlet at time. Application manager controls midlet life cycle: - installs, updates and removes midlets/midlet suites - launches and terminates midlets - displays info about a midlet/midlet suite - shuts down the AMS system

Fields Summary
private static final String
DISCOVERY_APP
Constant for the discovery application class name.
private static final String
INSTALLER
Constant for the graphical installer class name.
private static final String
CA_MANAGER
Constant for the CA manager class name.
private static boolean
first
True until constructed for the first time.
private MIDletSuiteStorage
midletSuiteStorage
MIDlet Suite storage object.
private AppManagerUI
appManagerUI
Screen that displays all installed midlets and installer
private MIDletProxyList
midletProxyList
MIDlet proxy list reference.
private boolean
allowMidletLaunch
If true, MIDlet can be launched.
int
suiteId
ID of the suite to run.
String
className
Class name of the MIDlet to run.
String
displayName
Display name of the MIDlet to run.
String
arg0
If not null, this string will be available to the MIDlet as application property arg-0
String
arg1
If not null, this string will be available to the MIDlet as application property arg-1
String
arg2
If not null, this string will be available to the MIDlet as application property arg-2
DisplayError
displayError
UI to display error alerts.
Constructors Summary
public SMMManager()
Create and initialize a new Manager MIDlet.


                
      
        midletSuiteStorage = MIDletSuiteStorage.getMIDletSuiteStorage();

        /*
         * Listen to the MIDlet proxy list.
         * this allows us to notify the Application Selector
         * of any changes whenever switch back to the AMS.
         */
        midletProxyList = MIDletProxyList.getMIDletProxyList();
        midletProxyList.addListener(this);
        midletProxyList.setDisplayController(
            new SMMDisplayController(midletProxyList,
                MIDletSuite.INTERNAL_SUITE_ID, this.getClass().getName()));

        PushRegistryInternal.setMvmSingleMidletMode();

        GraphicalInstaller.initSettings();

	first = (getAppProperty("logo-displayed") == null);

	Display display = Display.getDisplay(this);
	displayError = new DisplayError(display);

	// AppSelector will be set to be current at the end of its constructor
        appManagerUI = new AppManagerUI(this, display, displayError, first, null);

        if (first) {
            first = false;
        }
    
Methods Summary
public voiddestroyApp(boolean unconditional)
Destroy cleans up.

param
unconditional is ignored; this object always destroys itself when requested.

        // IMPL_NOTE: remove this:
        GraphicalInstaller.saveSettings(null, MIDletSuite.UNUSED_SUITE_ID);

        // Ending this MIDlet ends all others.
        midletProxyList.shutdown();
    
public voidexitMidlet(RunningMIDletSuiteInfo suiteInfo)
Exit the midlet with the passed in midlet suite info.

param
suiteInfo information for the midlet to be terminated

public voidinstallSuite()
Discover and install a suite.

        try {
            runMidlet(MIDletSuite.INTERNAL_SUITE_ID, DISCOVERY_APP,
                Resource.getString(ResourceConstants.INSTALL_APPLICATION));

        } catch (Exception ex) {
            displayError.showErrorAlert(Resource.getString(
                                  ResourceConstants.INSTALL_APPLICATION),
                        ex, null, null);
        }
    
public voidlaunchCaManager()
Launch the CA manager.

        try {
            MIDletSuiteUtils.execute(MIDletSuite.INTERNAL_SUITE_ID, CA_MANAGER,
                Resource.getString(ResourceConstants.CA_MANAGER_APP));
        } catch (Exception ex) {
            displayError.showErrorAlert(Resource.getString(
                ResourceConstants.CA_MANAGER_APP), ex, null, null);
        }
    
public voidlaunchSuite(RunningMIDletSuiteInfo suiteInfo, java.lang.String midletToRun)
Launches a suite.

param
suiteInfo information for suite to launch
param
midletToRun class name of the MIDlet to launch


        if (Constants.MEASURE_STARTUP) {
            System.err.println("Application Startup Time: Begin at "
                        +System.currentTimeMillis());
        }

        try {
            // Create an instance of the MIDlet class
            // All other initialization happens in MIDlet constructor
            runMidlet(suiteInfo.suiteId, midletToRun,
                      suiteInfo.displayName);

        } catch (Exception ex) {
            displayError.showErrorAlert(suiteInfo.displayName, ex, null, null);
        }
    
public voidmidletAdded(MIDletProxy midlet)
Called when a MIDlet is added to the list.

param
midlet The proxy of the MIDlet being added

        appManagerUI.notifyMidletStarted(midlet);
    
public voidmidletRemoved(MIDletProxy midlet)
Called when a MIDlet is removed from the list.

param
midlet The proxy of the removed MIDlet

        appManagerUI.notifyMidletExited(midlet);
    
public voidmidletStartError(int externalAppId, int suiteId, java.lang.String className, int errorCode, java.lang.String errorDetails)
Called when error occurred while starting a MIDlet object.

param
externalAppId ID assigned by the external application manager
param
suiteId Suite ID of the MIDlet
param
className Class name of the MIDlet
param
errorCode start error code
param
errorDetails start error code

        allowMidletLaunch = true;
        appManagerUI.notifyMidletStartError(suiteId, className,
                errorCode, errorDetails);
    
public voidmidletUpdated(MIDletProxy midlet, int fieldId)
Called when the state of a MIDlet in the list is updated.

param
midlet The proxy of the MIDlet that was updated
param
fieldId code for which field of the proxy was updated

        appManagerUI.notifyMidletStateChanged(midlet);
    
public voidmoveToForeground(RunningMIDletSuiteInfo suiteInfo)
Bring the midlet with the passed in midlet suite info to the foreground.

param
suiteInfo information for the midlet to be put to foreground

public voidpauseApp()
Pause; there are no resources that need to be released.

    
public voidrun()
Launches an application Isolate and waits for it to end.

        try {
            Isolate appIsolate = AmsUtil.startMidletInNewIsolate(suiteId,
                                     className, displayName,
                                     arg0, arg1, arg2);

            appIsolate.waitForExit();
        } finally {
            suiteId = MIDletSuite.UNUSED_SUITE_ID;
            className = null;
            displayName = null;
            arg0 = null;
            arg1 = null;
            arg2 = null;
            allowMidletLaunch = true;
        }
    
private voidrunMidlet(int id, java.lang.String midlet, java.lang.String displayName)
Starts a MIDlet in a new Isolate.

param
id ID of an installed suite
param
midlet class name of MIDlet to invoke
param
displayName name to display to the user

        runMidlet(id, midlet, displayName, null, null, null);
    
private voidrunMidlet(int id, java.lang.String midlet, java.lang.String displayName, java.lang.String arg0, java.lang.String arg1, java.lang.String arg2)
Starts a MIDlet in a new Isolate with the given arguments.

param
id ID of an installed suite
param
midlet class name of MIDlet to invoke
param
displayName name to display to the user
param
arg0 if not null, this parameter will be available to the MIDlet as application property arg-0
param
arg1 if not null, this parameter will be available to the MIDlet as application property arg-1
param
arg2 if not null, this parameter will be available to the MIDlet as application property arg-2

        if (!allowMidletLaunch) {
            return;
        }

        this.suiteId = id;
        this.className = midlet;
        this.displayName = displayName;
        this.arg0 = arg0;
        this.arg1 = arg1;
        this.arg2 = arg2;

        new Thread(this).start();

        allowMidletLaunch = false;
    
public voidshutDown()
Shut downt the system

        midletProxyList.shutdown();
    
public voidstartApp()
Start app; there is nothing that needs to be done at start up.

    
public voidupdateSuite(RunningMIDletSuiteInfo suiteInfo)
Update a suite.

param
suiteInfo information for suite to update

        try {
            runMidlet(MIDletSuite.INTERNAL_SUITE_ID, INSTALLER,
                      null, "U", String.valueOf(suiteInfo.suiteId), null);

        } catch (Exception ex) {
            displayError.showErrorAlert(suiteInfo.displayName, ex, null, null);
        }