MVMManagerpublic class MVMManager extends MIDlet implements ApplicationManager, MIDletProxyListListener, DisplayControllerListenerThis is an implementation of the ApplicationManager interface
for the MVM mode of the VM capable of running with
more than 1 midlet concurrently.
Application manager controls midlet life cycle:
- installs, updates and removes midlets/midlet suites
- launches, moves to foreground and terminates midlets
- displays info about a midlet/midlet suite
- shuts down the AMS system |
Fields Summary |
---|
private static final String | DISCOVERY_APPConstant for the discovery application class name. | private static final String | INSTALLERConstant for the graphical installer class name. | private static final String | CA_MANAGERConstant for the CA manager class name. | private static boolean | firstTrue until constructed for the first time. | private MIDletSuiteStorage | midletSuiteStorageMIDlet Suite storage object. | private AppManagerUI | appManagerUIScreen that displays all installed midlets and installer | private MIDletProxyList | midletProxyListMIDlet proxy list reference. | private DisplayError | displayErrorUI to display error alerts. |
Constructors Summary |
---|
public MVMManager()Create and initialize a new MVMManager MIDlet.
MIDletProxy thisMidlet;
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);
// The proxy for this MIDlet may not have been create yet.
for (; ; ) {
thisMidlet = midletProxyList.findMIDletProxy(
MIDletSuite.INTERNAL_SUITE_ID, this.getClass().getName());
if (thisMidlet != null) {
break;
}
try {
Thread.sleep(10);
} catch (InterruptedException ie) {
// ignore
}
}
MVMDisplayController dc = new MVMDisplayController(
midletProxyList, thisMidlet);
midletProxyList.setDisplayController(dc);
dc.addListener(this);
IndicatorManager.init(midletProxyList);
GraphicalInstaller.initSettings();
first = (getAppProperty("logo-displayed") == null);
Display display = Display.getDisplay(this);
displayError = new DisplayError(display);
// AppManagerUI 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 void | destroyApp(boolean unconditional)Destroy midlet. Cleans up the resources used.
/*
* Save user settings such as currently selected MIDlet
* This may not be needed since we are always running
* IMPL_NOTE: remove this
*/
GraphicalInstaller.saveSettings(null, MIDletSuite.UNUSED_SUITE_ID);
// Ending the MIDlet ends all others.
midletProxyList.shutdown();
| public void | exitMidlet(RunningMIDletSuiteInfo suiteInfo)Exit the midlet with the passed in midlet suite info.
try {
if (suiteInfo != null) {
suiteInfo.proxy.destroyMidlet();
}
} catch (Exception ex) {
displayError.showErrorAlert(suiteInfo.displayName, ex, null, null);
}
| public void | installSuite()Discover and install a suite.
try {
MIDletSuiteUtils.execute(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 void | launchCaManager()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 void | launchSuite(RunningMIDletSuiteInfo suiteInfo, java.lang.String midletToRun)Launches a suite.
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
MIDletSuiteUtils.execute(suiteInfo.suiteId, midletToRun, null);
} catch (Exception ex) {
displayError.showErrorAlert(suiteInfo.displayName, ex, null, null);
}
| public void | midletAdded(MIDletProxy midlet)Called when a MIDlet is added to the list.
appManagerUI.notifyMidletStarted(midlet);
| public void | midletRemoved(MIDletProxy midlet)Called when a MIDlet is removed from the list.
appManagerUI.notifyMidletExited(midlet);
| public void | midletStartError(int externalAppId, int suiteId, java.lang.String className, int errorCode, java.lang.String errorDetails)Called when error occurred while starting a MIDlet object.
appManagerUI.notifyMidletStartError(suiteId, className,
errorCode, errorDetails);
| public void | midletUpdated(MIDletProxy midlet, int fieldId)Called when the state of a MIDlet in the list is updated.
appManagerUI.notifyMidletStateChanged(midlet);
| public void | moveToForeground(RunningMIDletSuiteInfo suiteInfo)Bring the midlet with the passed in midlet suite info to the
foreground.
try {
if (Constants.MEASURE_STARTUP) {
System.err.println("Switch To Foreground Time: Begin at " +
System.currentTimeMillis());
}
if (suiteInfo != null) {
midletProxyList.setForegroundMIDlet(suiteInfo.proxy);
}
} catch (Exception ex) {
displayError.showErrorAlert(suiteInfo.displayName, ex, null, null);
}
| public void | pauseApp()Pause; there are no resources that need to be released.
| public void | selectForeground(boolean onlyFromLaunchedList)Called when going to select midlet to
bring it to foreground.
appManagerUI.showMidletSwitcher(onlyFromLaunchedList);
| public void | shutDown()Shut down the system
midletProxyList.shutdown();
| public void | startApp()Start app; there is nothing that needs to be done at start up.
| public void | updateSuite(RunningMIDletSuiteInfo suiteInfo)Update a suite.
/*
* Setting arg 0 to "U" signals that arg 1 is a suite ID for updating.
*/
try {
MIDletSuiteUtils.executeWithArgs(MIDletSuite.INTERNAL_SUITE_ID,
INSTALLER,
suiteInfo.displayName,
"U", String.valueOf(suiteInfo.suiteId),
null);
} catch (Exception ex) {
displayError.showErrorAlert(suiteInfo.displayName, ex, null, null);
}
|
|