SystemProperties.java

/*
 * Copyright © 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.TXT for license information.
 */
package com.nokia.example.systemproperties;

import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet;

public class SystemProperties extends MIDlet implements CommandListener {
    protected static final String[] SYSPROPLISTS = {
        "CLDC&MIDP", "Optional packages", "MMAPI (JSR-135)", "Bluetooth API (JSR-82)", "FileConnection API (JSR-75)", 
        "WMA (JSR-120/205)", "SATSA API (JSR-177)", "Web Services API (JSR-172)", "AMMS API (JSR-234)", 
        "Scalable 2D Vector Graphics API (JSR-226)", "Mobile 3D Graphics API (JSR-184)", 
        "Nokia-specific (network)", "Nokia-specific (system)", "Nokia-specific (UI)",
        "Nokia-specific (Canvas UI)", "Nokia-specific (protected)", "Nokia-specific (dual-SIM)", "Touch Properties"
    };
    protected static final String[] CLDC_MIDPPROPS = {
        "microedition.profiles", "microedition.configuration", "microedition.locale", "microedition.platform", 
        "microedition.encoding", "microedition.commports", "microedition.hostname", "microedition.jtwi.version", 
        "microedition.msa.version"
    };
    protected static final String[] OPT_SYSPROPS = {
        "microedition.media.version", "microedition.pim.version", "microedition.m3g.version", "microedition.location.version", 
        "bluetooth.api.version", "microedition.io.file.FileConnection.version", "microedition.global.version", 
        "microedition.chapi.version", "microedition.sip.version", "wireless.messaging.version", "microedition.amms.version",
        "microedition.m2g.version", "microedition.payment.version", "microedition.contactless.version", "microedition.sensor.version", 
        "obex.api.version", "microedition.broadcast.version", "com.nokia.mid.ui.version"
    };
    protected static final String[] MMAPI_SYSPROPS = {
        "supports.mixing", "supports.audio.capture", "supports.video.capture", "supports.recording", "audio.encodings", 
        "video.encodings", "video.snapshot.encodings", "streamable.contents"
    };
    protected static final String[] BT_SYSPROPS = {
        "bluetooth.l2cap.receiveMTU.max", "bluetooth.connected.devices.max", "bluetooth.connected.inquiry", 
        "bluetooth.connected.page", "bluetooth.connected.inquiry.scan", "bluetooth.connected.page.scan", 
        "bluetooth.master.switch", "bluetooth.sd.trans.max", "bluetooth.sd.attr.retrievable.max"
    };
    protected static final String[] FILE_API_SYSPROPS = {
        "fileconn.dir.photos", "fileconn.dir.photos.name", "fileconn.dir.videos", "fileconn.dir.videos.name", "fileconn.dir.graphics",
        "fileconn.dir.graphics.name", "fileconn.dir.tones", "fileconn.dir.tones.name","fileconn.dir.music", "fileconn.dir.music.name",
        "fileconn.dir.recordings", "fileconn.dir.recordings.name", "fileconn.dir.landmarks", "fileconn.dir.landmarks.name",
        "fileconn.dir.memorycard", "fileconn.dir.memorycard.name", "fileconn.dir.private", "fileconn.dir.private.name",
        "fileconn.dir.themes", "fileconn.dir.themes.name", "fileconn.dir.received", "fileconn.dir.received.name",
        "fileconn.dir.roots.names", "file.separator", "fileconn.dir.cache", "fileconn.dir.bookmarks", "fileconn.dir.applications.bookmarks",
        "fileconn.dir.games.bookmarks"
    };
    protected static final String[] WMA_SYSPROPS = {
        "wireless.messaging.sms.smsc", "wireless.messaging.mms.mmsc"
    };
    protected static final String[] SATSA_SYSPROPS = {
        "microedition.satsa.crypto.version", "microedition.satsa.apdu.version", "microedition.satsa.pki.version",
        "microedition.smartcardslots"
    };
    protected static final String[] WEB_SERVICES_SYSPROPS = {
        "xml.jaxp.subset.version", "xml.rpc.subset.version"
    };
    protected static final String[] AMMS_SYSPROPS = {
        "tuner.modulations", "audio.samplerates", "audio3d.simultaneouslocations", "camera.orientations",
        "camera.resolutions", "supports.mediacapabilities"
    };
    protected static final String[] M2G_SYSPROPS = {
        "microedition.m2g.svg.baseProfile", "microedition.m2g.svg.version"
    };
    protected static final String[] M3G_SYSPROPS = {
        "supportAntialiasing", "supportTrueColor", "supportDithering", "supportMipmapping", 
        "supportPerspectiveCorrection", "supportLocalCameraLighting", "maxLights", 
        "maxViewportWidth", "maxViewportHeight", "maxViewportDimension", "maxTextureDimension", 
        "m3gRelease", "maxSpriteCropDimension", "numTextureUnits", "maxTransformsPerVertex"
    };
    protected static final String[] NOKIA_NETWORK = {
        "com.nokia.mid.networkid", "com.nokia.mid.networksignal", "com.nokia.mid.networkavailability",
        "com.nokia.mid.networkstatus", "com.nokia.network.access", "com.nokia.midp.impl.isa.network.databearer"
    };
    protected static final String[] NOKIA_SYSTEM = {
        "com.nokia.mid.batterylevel", "com.nokia.mid.countrycode", "com.nokia.mid.calendars", "com.nokia.memoryramfree", 
        "com.nokia.mid.dateformat", "com.nokia.mid.timeformat", "com.nokia.gpu.memory.total", 
        "com.nokia.gpu.memory.used", "com.nokia.gpu.memory.shared", "com.nokia.gpu.memory.private", "com.nokia.mid.cmdline", 
        "com.nokia.mid.cmdline.instance", "param1"
    };
    protected static final String[] NOKIA_UI = {
        "com.nokia.mid.impl.nativeDigitSupport", "com.nokia.mid.ui.layout", "com.nokia.mid.ui.joystick_event",
        "com.nokia.mid.ui.softnotification", "com.nokia.keyboard.type", "com.nokia.key.scancode", "com.nokia.key.modifier",
        "com.nokia.mid.settings.ombActive", "com.nokia.mid.ui.customfontsize", "com.nokia.mid.ui.screensaverprevention",
        "com.nokia.mid.ui.tactilefeedback", "com.nokia.mid.ui.frameanimator.fps", "com.nokia.mid.ui.frameanimator.pps"
    };
    protected static final String[] NOKIA_CANVAS_UI = {
        "com.nokia.canvas.net.indicator.location", "com.nokia.softkey1.label.location",
        "com.nokia.softkey2.label.location", "com.nokia.softkey3.label.location", "com.nokia.softkey1.label.anchor",
        "com.nokia.softkey2.label.anchor", "com.nokia.softkey3.label.anchor"
    };
    protected static final String[] NOKIA_PROTECTED = {
        "com.nokia.mid.imei", "Cell-ID", "com.nokia.mid.imsi", "com.nokia.mid.spn", "com.nokia.mid.mnc", "com.nokia.mid.ons",
        "com.nokia.mid.networkID", "com.nokia.mid.cellid", "com.nokia.mid.lac", "com.nokia.mid.gid1", "com.nokia.mid.gid2",
        "com.nokia.mid.msisdn", "com.nokia.mid.productcode"
    };
    protected static final String[] NOKIA_DUAL_SIM = {
        "com.nokia.multisim.cellid.sim1", "com.nokia.multisim.cellid.sim2", "com.nokia.multisim.lac.sim1", "com.nokia.multisim.lac.sim2",
        "com.nokia.multisim.mnc.sim1", "com.nokia.multisim.mnc.sim2", "com.nokia.multisim.networkavailability.sim1", 
        "com.nokia.multisim.networkavailability.sim2", "com.nokia.multisim.networkid.sim1", "com.nokia.multisim.networkid.sim2",
        "com.nokia.multisim.networksignal.sim1", "com.nokia.multisim.networksignal.sim2", "com.nokia.multisim.networkstatus.sim1", 
        "com.nokia.multisim.networkstatus.sim2", "com.nokia.multisim.smsc.sim1", "com.nokia.multisim.smsc.sim2", 
        "com.nokia.multisim.imsi.sim1", "com.nokia.multisim.imsi.sim2", "com.nokia.multisim.spn.sim1", "com.nokia.multisim.spn.sim2",
        "com.nokia.multisim.ons.sim1", "com.nokia.multisim.ons.sim2", "com.nokia.multisim.gid1.sim1", "com.nokia.multisim.gid1.sim2",
        "com.nokia.multisim.gid2.sim1", "com.nokia.multisim.gid2.sim2", "com.nokia.multisim.msisdn.sim1", "com.nokia.multisim.msisdn.sim2",
        "com.nokia.multisim.countrycode.sim1", "com.nokia.multisim.countrycode.sim2", "com.nokia.multisim.mmsc.sim1", "com.nokia.multisim.mmsc.sim2"
    };
    protected static final String[] TOUCH_SYSPROPS = {
        "com.nokia.mid.ui.screensaverprevention", "com.nokia.mid.ui.tactilefeedback",
        "com.nokia.mid.ui.multipointtouch.version", "com.nokia.mid.ui.gestures.version", "com.nokia.mid.ui.theme.version", 
        "com.nokia.mid.ui.orientation.version", "com.nokia.mid.ui.locale.version"
    };	
    private List list;
    private SysPropForm form;
    private Command exitCommand;
    private Command memCommand;
    protected int index;
    protected boolean bt = false;
    protected boolean m3g = false;
    // MIDlet porting from 2.0 to 3.0
	public static final String PLATFORM_UI = "com.nokia.mid.ui.version";
    public static final String PLATFORM_2_0 = "1.6";
    
    public SystemProperties() {
        list = new List("System properties", List.IMPLICIT, SYSPROPLISTS, null);
        form = new SysPropForm(SYSPROPLISTS[0], this, CLDC_MIDPPROPS);
        // MIDlet porting from 2.0 to 3.0
        if(System.getProperty(PLATFORM_UI).startsWith(PLATFORM_2_0)){
        	memCommand = new Command("Memory status", Command.SCREEN, 2);
        }else{
        	memCommand = new Command("Memory status", Command.ITEM, 2);
        }
        exitCommand = new Command("Exit", Command.EXIT, 1);
        list.addCommand(memCommand);
        list.addCommand(exitCommand);
        list.setCommandListener(this);
        Display.getDisplay(this).setCurrent(list);
    }

    protected void startApp() {
    }

    protected void pauseApp() {
    }

    protected void destroyApp(boolean p1) {
    }

    public void commandAction(Command c, Displayable d) {
        if (c == List.SELECT_COMMAND) {
            index = list.getSelectedIndex();
            if (index == 0) {
                form.update(SYSPROPLISTS[0], CLDC_MIDPPROPS);
            }
            if (index == 1) {
                form.update(SYSPROPLISTS[1], OPT_SYSPROPS);
            }
            if (index == 2) {
                form.update(SYSPROPLISTS[2], MMAPI_SYSPROPS);
            }
            if (index == 3) {
                bt = true;
                form.update(SYSPROPLISTS[3], BT_SYSPROPS);
            }
            if (index == 4) {
                form.update(SYSPROPLISTS[4], FILE_API_SYSPROPS);
            }
            if (index == 5) {
                form.update(SYSPROPLISTS[5], WMA_SYSPROPS);
            }
            if (index == 6) {
                form.update(SYSPROPLISTS[6], SATSA_SYSPROPS);
            }
            if (index == 7) {
                form.update(SYSPROPLISTS[7], WEB_SERVICES_SYSPROPS);
            }
            if (index == 8) {
                form.update(SYSPROPLISTS[8], AMMS_SYSPROPS);
            }
            if (index == 9) {
                form.update(SYSPROPLISTS[9], M2G_SYSPROPS);
            }
            if (index == 10) {
                m3g = true;
                form.update(SYSPROPLISTS[10], M3G_SYSPROPS);
            }
            if (index == 11) {
                form.update(SYSPROPLISTS[11], NOKIA_NETWORK);
            }
            if (index == 12) {
                form.update(SYSPROPLISTS[12], NOKIA_SYSTEM);
            }
            if (index == 13) {
                form.update(SYSPROPLISTS[13], NOKIA_UI);
            }
            if (index == 14) {
                SysPropFullCanvas canvas = new SysPropFullCanvas(this);
                Display.getDisplay(this).setCurrent(canvas);
                return;
            }
            else if (index == 15) {
                form.update(SYSPROPLISTS[15], NOKIA_PROTECTED);
            }
            else if (index == 16) {
                form.update(SYSPROPLISTS[16], NOKIA_DUAL_SIM);            
            }
            else if (index == 17) {
                form.update(SYSPROPLISTS[17], TOUCH_SYSPROPS);
            }
            Display.getDisplay(this).setCurrent(form);
        }
        if (c == memCommand) {
            showMemory();
        }        
        if (c == exitCommand) {
            this.notifyDestroyed();
        }
    }
    
    protected void showList() {
        Display.getDisplay(this).setCurrent(list);
    }
    
    private void showMemory() {
        Alert alert = new Alert("Memory status");
        String freemem = "" + Runtime.getRuntime().freeMemory();
        String totalmem = "" + Runtime.getRuntime().totalMemory();
        alert.setString("Free memory/Total memory: " + freemem + "/" + totalmem);
        alert.setType(AlertType.INFO);
        alert.setTimeout(Alert.FOREVER);
        Display.getDisplay(this).setCurrent(alert, list);
    }    

}