--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/javasrc.s60/com/nokia/mj/impl/installer/utils/SysUtil.java Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,684 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+package com.nokia.mj.impl.installer.utils;
+
+import com.nokia.mj.impl.installer.utils.InstallerException;
+import com.nokia.mj.impl.installer.utils.Log;
+import com.nokia.mj.impl.installer.utils.PlatformUid;
+import com.nokia.mj.impl.utils.Uid;
+
+import java.util.Vector;
+
+/**
+ * SysUtil provides system utility services.
+ *
+ * @author Nokia Corporation
+ * @version $Rev: 9041 $
+ */
+public final class SysUtil
+{
+ /*** ----------------------------- PUBLIC ------------------------------ */
+
+ // Property categories.
+ public static final Uid PROP_CATEGORY_SYSTEM =
+ PlatformUid.createUid("0x101f75b6");
+
+ // Property keys.
+ public static final long PROP_KEY_JAVA_LATEST_INSTALLATION = 0x10282567;
+ public static final long PROP_KEY_JAVA_LATEST_INSTALLATION_PROGRESS = 0x20019546;
+ public static final long PROP_KEY_JAVA_LATEST_INSTALLATION_STATE = 0x20019547;
+
+ // Repository ids.
+ public static final Uid REPO_ID_JAVA_INST_VARIATION =
+ PlatformUid.createUid("0x102824CE");
+
+ // Repository keys.
+ public static final long REPO_KEY_JAVA_INST_SHELL_FOLDER_ATTR = 0x00000001;
+ public static final long REPO_KEY_JAVA_INST_SHELL_FOLDER_VALUE = 0x00000002;
+ //public static final long REPO_KEY_JAVA_PREINST_DEF_DRIVE = 0x00000003;
+ public static final long REPO_KEY_JAVA_INST_DEF_INST_DRIVE = 0x00000004;
+
+ // Process states.
+ public static final int PROC_STATE_ALIVE = 1;
+
+ /**
+ * Define property. Property must be defined before it
+ * can be used. It is enough to define property once.
+ * If property has already been defined, this method does
+ * not have any effect.
+ *
+ * @param aCategory uid that defines the property category
+ * @param aKey key that identifies the specific property within the category
+ * @throws InstallerException if error occurs
+ */
+ public static void defineProperty(Uid aCategory, long aKey)
+ {
+ int ret = _defineProperty(PlatformUid.getIntValue(aCategory), aKey);
+ if (ret < 0)
+ {
+ InstallerException.internalError("Defining property (" +
+ format(aCategory, aKey) + ") failed with code " + ret);
+ }
+ }
+
+ /**
+ * Delete property. After deletion property cannot be used
+ * before it is defined again. If property has not been defined,
+ * this method does not have any effect.
+ *
+ * @param aCategory uid that defines the property category
+ * @param aKey key that identifies the specific property within the category
+ * @throws InstallerException if error occurs
+ */
+ public static void deleteProperty(Uid aCategory, long aKey)
+ {
+ int ret = _deleteProperty(PlatformUid.getIntValue(aCategory), aKey);
+ if (ret < 0)
+ {
+ InstallerException.internalError("Deleting property (" +
+ format(aCategory, aKey) + ") failed with code " + ret);
+ }
+ }
+
+ /**
+ * Get property value.
+ *
+ * @param aCategory uid that defines the property category
+ * @param aKey key that identifies the specific property within the category
+ * @return property value
+ * @throws InstallerException if error occurs
+ */
+ public static int getPropertyValue(Uid aCategory, long aKey)
+ {
+ IntValue value = new IntValue();
+ int ret = _getPropertyValue(PlatformUid.getIntValue(aCategory),
+ aKey, value);
+ if (ret < 0)
+ {
+ InstallerException.internalError("Getting property (" +
+ format(aCategory, aKey) + ") value failed with code " + ret);
+ }
+ return value.getValue();
+ }
+
+ /**
+ * Set property value.
+ *
+ * @param aCategory uid that defines the property category
+ * @param aKey key that identifies the specific property within the category
+ * @param aValue property value
+ * @throws InstallerException if error occurs
+ */
+ public static void setPropertyValue(Uid aCategory, long aKey, int aValue)
+ {
+ int ret = _setPropertyValue(PlatformUid.getIntValue(aCategory),
+ aKey, aValue);
+ if (ret < 0)
+ {
+ InstallerException.internalError("Setting property (" +
+ format(aCategory, aKey, aValue) + ") value failed with code " + ret);
+ }
+ }
+
+ /**
+ * Set property value from given Uid.
+ *
+ * @param aCategory uid that defines the property category
+ * @param aKey key that identifies the specific property within the category
+ * @param aValue property value
+ * @throws InstallerException if error occurs
+ */
+ public static void setPropertyValue(Uid aCategory, long aKey, Uid aValue)
+ {
+ setPropertyValue(aCategory, aKey,
+ (aValue != null? PlatformUid.getIntValue(aValue): 0));
+ }
+
+ /**
+ * Get repository value.
+ *
+ * @param aRepository uid that defines the repository
+ * @param aKey key that identifies the setting in the repository
+ * @return repository value
+ * @throws InstallerException if error occurs
+ */
+ public static int getRepositoryValue(Uid aRepository, long aKey)
+ {
+ IntValue value = new IntValue();
+ int ret = _getRepositoryValue(PlatformUid.getIntValue(aRepository),
+ aKey, value);
+ if (ret < 0)
+ {
+ InstallerException.internalError("Getting repository (" +
+ format(aRepository, aKey) +
+ ") value failed with code " + ret);
+ }
+ return value.getValue();
+ }
+
+ /**
+ * Get repository string value.
+ *
+ * @param aRepository uid that defines the repository
+ * @param aKey key that identifies the setting in the repository
+ * @return repository value
+ * @throws InstallerException if error occurs
+ */
+ public static String getRepositoryStringValue(Uid aRepository, long aKey)
+ {
+ String[] value = new String[1];
+ int ret = _getRepositoryStringValue(
+ PlatformUid.getIntValue(aRepository), aKey, value);
+ if (ret < 0)
+ {
+ InstallerException.internalError("Getting repository (" +
+ format(aRepository, aKey) +
+ ") string value failed with code " + ret);
+ }
+ return value[0];
+ }
+
+ /**
+ * Set repository value.
+ *
+ * @param aCategory uid that defines the repository
+ * @param aKey key that identifies the setting in the repository
+ * @param aValue repository value
+ * @throws InstallerException if error occurs
+ */
+ public static void setRepositoryValue(Uid aCategory, long aKey, int aValue)
+ {
+ int ret = _setRepositoryValue(PlatformUid.getIntValue(aCategory),
+ aKey, aValue);
+ if (ret < 0)
+ {
+ InstallerException.internalError("Setting repository (" +
+ format(aCategory, aKey, aValue) + ") value failed with code " + ret);
+ }
+ }
+
+ /**
+ * Set repository string value.
+ *
+ * @param aCategory uid that defines the repository
+ * @param aKey key that identifies the setting in the repository
+ * @param aValue repository value
+ * @throws InstallerException if error occurs
+ */
+ public static void setRepositoryStringValue(Uid aCategory, long aKey, String aValue)
+ {
+ int ret = _setRepositoryStringValue(PlatformUid.getIntValue(aCategory),
+ aKey, aValue);
+ if (ret < 0)
+ {
+ InstallerException.internalError(
+ "Setting repository (" + format(aCategory, aKey, aValue) +
+ ") string value failed with code " + ret);
+ }
+ }
+
+ /**
+ * Get drive's unique identifying number.
+ *
+ * @param aDrive drive for which unique id is requested (0 = A, 1 = B, etc.)
+ * @return drive unique id
+ * @throws InstallerException if error occurs
+ */
+ public static int getDriveUniqId(int aDrive)
+ {
+ IntValue value = new IntValue();
+ int ret = _getDriveUniqId(aDrive, value);
+ if (ret < 0)
+ {
+ InstallerException.internalError("Getting drive " + aDrive +
+ " unique id failed with code " + ret);
+ }
+ return value.getValue();
+ }
+
+ /**
+ * Checks if drive is present.
+ *
+ * @param aDrive drive for which presence is requested (0 = A, 1 = B, etc.)
+ * @return true if drive is present, false otherwise
+ * @throws InstallerException if error occurs
+ */
+ public static boolean isDrivePresent(int aDrive)
+ {
+ BooleanValue value = new BooleanValue();
+ int ret = _isDrivePresent(aDrive, value);
+ if (ret < 0)
+ {
+ InstallerException.internalError("Getting drive " + aDrive +
+ " presence failed with code " + ret);
+ }
+ return value.getValue();
+ }
+
+ /**
+ * Checks if drive is read only drive.
+ *
+ * @param aDrive drive for which R/O state is requested (0 = A, 1 = B, etc.)
+ * @return true if drive is read only, false otherwise
+ * @throws InstallerException if error occurs
+ */
+ public static boolean isDriveReadOnly(int aDrive)
+ {
+ int ret = _isDriveReadOnly(aDrive);
+ if (ret < 0)
+ {
+ InstallerException.internalError("Getting drive " + aDrive +
+ " read only state failed with code " + ret);
+ }
+
+ if (0 == ret)
+ {
+ return false;
+ }
+ else
+ {
+ return true;
+ }
+ }
+
+ /**
+ * Returns the drive number of the default phone memory drive.
+ *
+ * @return drive number (0..25)
+ * @throws InstallerException if error occurs
+ */
+ public static int getDefaultPhoneMemory()
+ {
+ int ret = _getDefaultPhoneMemory();
+ if (ret < 0)
+ {
+ InstallerException.internalError("Getting default phone memory " +
+ " drive failed with code " + ret);
+ }
+ return ret;
+ }
+
+ /**
+ * Returns the drive number of the default mass storage drive.
+ *
+ * @return drive number (0..25)
+ * @throws InstallerException if error occurs
+ */
+ public static int getDefaultMassStorage()
+ {
+ int ret = _getDefaultMassStorage();
+ if (ret < 0)
+ {
+ InstallerException.internalError("Getting default mass storage " +
+ " drive failed with code " + ret);
+ }
+ return ret;
+ }
+
+ /**
+ * Returns the drives that are visible to the user and where
+ * the user can install java applications to. This means that
+ * substed and remote drives are not returned.
+ *
+ * @param aVisibleDrives After return contains the user visible
+ * drives as DriveInfo objects
+ * @throws InstallerException if error occurs
+ * @see DriveInfo
+ */
+ public static void getUserVisibleDrives(Vector aVisibleDrives)
+ {
+ // Make sure the vector does not contain any old values
+ aVisibleDrives.removeAllElements();
+ if (iUserVisibleDrives != null)
+ {
+ // Drives have already been fetched, just return them.
+ for (int i = 0; i < iUserVisibleDrives.size(); i++)
+ {
+ aVisibleDrives.addElement(iUserVisibleDrives.elementAt(i));
+ }
+ return;
+ }
+ // Fetch the drives.
+ int ret = _getUserVisibleDrives(aVisibleDrives);
+ if (ret < 0)
+ {
+ InstallerException.internalError("Getting user visible " +
+ " drives failed with code " + ret);
+ }
+ // Save the drives so that next time they are not fetched again.
+ iUserVisibleDrives = new Vector();
+ for (int i = 0; i < aVisibleDrives.size(); i++)
+ {
+ iUserVisibleDrives.addElement(aVisibleDrives.elementAt(i));
+ }
+ }
+
+ /**
+ * Checks if disk space is below critical level.
+ *
+ * @param aBytesToWrite Number of bytes the caller is about to write to
+ * disk. If value 0 is given, this method checks if the current
+ * disk space is already below critical level.
+ * @param aDrive drive for which disk space is requested (0 = A, 1 = B, etc.)
+ * @return true if disk space is below critical level, false otherwise
+ * @throws InstallerException if error occurs
+ */
+ public static boolean isDiskSpaceBelowCriticalLevel(
+ int aBytesToWrite, int aDrive)
+ {
+ BooleanValue value = new BooleanValue();
+ int ret = _isDiskSpaceBelowCriticalLevel(aBytesToWrite, aDrive, value);
+ if (ret < 0)
+ {
+ InstallerException.internalError("Checking disk " + aDrive +
+ " space failed with code " + ret);
+ }
+ return value.getValue();
+ }
+
+ /**
+ * Returns state of the process with given uid.
+ *
+ * @param aUid process uid
+ * @return PROC_STATE_ALIVE if process is alive, 0 otherwise.
+ * @throws InstallerException if error occurs
+ */
+ public static int getProcessState(Uid aUid)
+ {
+ int ret = _getProcessState(PlatformUid.getIntValue(aUid));
+ if (ret < 0)
+ {
+ InstallerException.internalError("Getting process " + aUid +
+ " state failed with code " + ret);
+ }
+ return ret;
+ }
+
+ /**
+ * Get screen width in pixels.
+ *
+ * @return screen width in pixels
+ * @throws InstallerException if error occurs
+ */
+ public static int getScreenWidth()
+ {
+ int ret = _getScreenWidth();
+ if (ret < 0)
+ {
+ InstallerException.internalError(
+ "Getting screen width failed with code " + ret);
+ }
+ return ret;
+ }
+
+ /**
+ * Get screen heigth in pixels.
+ *
+ * @return screen height in pixels
+ * @throws InstallerException if error occurs
+ */
+ public static int getScreenHeight()
+ {
+ int ret = _getScreenHeight();
+ if (ret < 0)
+ {
+ InstallerException.internalError(
+ "Getting screen height failed with code " + ret);
+ }
+ return ret;
+ }
+
+ /*** ---------------------------- PROTECTED --------------------------- */
+ /*** ----------------------------- PACKAGE ---------------------------- */
+ /*** ----------------------------- PRIVATE ---------------------------- */
+
+ /** User visible drives. Contains DriveInfo objects. */
+ private static Vector iUserVisibleDrives = null;
+
+ /**
+ * Returns string presentation of given uid and key.
+ */
+ private static String format(Uid aUid, long aKey)
+ {
+ return "Uid: " + aUid.toString() + ", key: 0x" + Long.toString(aKey, 16);
+ }
+
+ /**
+ * Returns string presentation of given uid, key and value.
+ */
+ private static String format(Uid aUid, long aKey, int aValue)
+ {
+ return format(aUid, aKey) + ", value: " + aValue;
+ }
+
+ /**
+ * Returns string presentation of given uid, key and value.
+ */
+ private static String format(Uid aUid, long aKey, String aValue)
+ {
+ return format(aUid, aKey) + ", value: " + aValue;
+ }
+
+ /*** ----------------------------- NATIVE ----------------------------- */
+
+ /**
+ * Define property.
+ *
+ * @param aCategory uid that defines the property category
+ * @param aKey key that identifies the specific property within the category
+ * @return Symbian error code (negative number)
+ */
+ private static native int _defineProperty(int aUid, long aKey);
+
+ /**
+ * Delete property.
+ *
+ * @param aCategory uid that defines the property category
+ * @param aKey key that identifies the specific property within the category
+ * @return Symbian error code (negative number)
+ */
+ private static native int _deleteProperty(int aUid, long aKey);
+
+ /**
+ * Get property value.
+ *
+ * @param aCategory uid that defines the property category
+ * @param aKey key that identifies the specific property within the category
+ * @param aValue returned property value
+ * @return Symbian error code (negative number)
+ */
+ private static native int _getPropertyValue(
+ int aUid, long aKey, IntValue aValue);
+
+ /**
+ * Set property value.
+ *
+ * @param aCategory uid that defines the property category
+ * @param aKey key that identifies the specific property within the category
+ * @param aValue property value
+ * @return Symbian error code (negative number)
+ */
+ private static native int _setPropertyValue(
+ int aUid, long aKey, int aValue);
+
+ /**
+ * Get repository value.
+ *
+ * @param aRepository uid that defines the repository
+ * @param aKey key that identifies the setting in the repository
+ * @param aValue returned repository value
+ * @return Symbian error code (negative number)
+ */
+ private static native int _getRepositoryValue(
+ int aRepository, long aKey, IntValue aValue);
+
+ /**
+ * Get repository string value.
+ *
+ * @param aRepository uid that defines the repository
+ * @param aKey key that identifies the setting in the repository
+ * @param aValueArray array of length one for holding the repository value
+ * @return Symbian error code (negative number)
+ */
+ private static native int _getRepositoryStringValue(
+ int aRepository, long aKey, String[] aValueArray);
+
+ /**
+ * Set repository value.
+ *
+ * @param aRepository uid that defines the repository
+ * @param aKey key that identifies the setting in the repository
+ * @param aValue repository value
+ * @return Symbian error code (negative number)
+ */
+ private static native int _setRepositoryValue(
+ int aRepository, long aKey, int aValue);
+
+ /**
+ * Set repository string value.
+ *
+ * @param aRepository uid that defines the repository
+ * @param aKey key that identifies the setting in the repository
+ * @param aValue repository value
+ * @return Symbian error code (negative number)
+ */
+ private static native int _setRepositoryStringValue(
+ int aRepository, long aKey, String aValue);
+
+ /**
+ * Get drive's unique identifying number.
+ *
+ * @param aDrive drive for which unique id is requested (0 = A, 1 = B, etc.)
+ * @param aValue returned drive unique id
+ * @return Symbian error code (negative number)
+ */
+ private static native int _getDriveUniqId(int aDrive, IntValue aValue);
+
+ /**
+ * Checks if drive is present.
+ *
+ * @param aDrive drive for which presence is requested (0 = A, 1 = B, etc.)
+ * @params aValue true if drive is present, false otherwise
+ * @return Symbian error code (negative number)
+ */
+ private static native int _isDrivePresent(int aDrive, BooleanValue aValue);
+
+ /**
+ * Checks if drive is read only drive.
+ *
+ * @param aDrive drive for which R/O state is requested (0 = A, 1 = B, etc.)
+ * @return negative number (Symbian error code) if case of error,
+ * 0 if drive is not read only, >0 if drive is read only
+ */
+ private static native int _isDriveReadOnly(int aDrive);
+
+ /**
+ * Get the drive number of the default phone memory drive.
+ *
+ * @return the drive number (0..25) or Symbian error code (negative number)
+ */
+ private static native int _getDefaultPhoneMemory();
+
+ /**
+ * Get the drive number of the default mass storage drive.
+ *
+ * @return the drive number (0..25) or Symbian error code (negative number)
+ */
+ private static native int _getDefaultMassStorage();
+
+ /**
+ * Get list of all drives visible to the user.
+ *
+ * @param aVisibleDrives after return this vector of integers contains
+ * the user visible drives in Integer form (0 == 'A' drive etc)
+ * @return 0 or Symbian error code (negative number)
+ */
+ private static native int _getUserVisibleDrives(Vector aVisibleDrives);
+
+ /**
+ * Checks if disk space is below critical level.
+ *
+ * @param aBytesToWrite Number of bytes the caller is about to write to
+ * disk. If value 0 is given, this method checks if the current
+ * disk space is already below critical level.
+ * @param aDrive drive for which disk space is requested (0 = A, 1 = B, etc.)
+ * @param aValue true if disk space is below critical level, false otherwise
+ * @return Symbian error code (negative number)
+ */
+ private static native int _isDiskSpaceBelowCriticalLevel(
+ int aBytesToWrite, int aDrive, BooleanValue aValue);
+
+ /**
+ * Get process state.
+ *
+ * @param aUid process uid
+ * @return PROC_STATE_ALIVE if process is alive, 0 if process is
+ * not alive and Symbian error code (negative number) in case of
+ * an error.
+ */
+ private static native int _getProcessState(int aUid);
+
+ /**
+ * Get screen width in pixels.
+ *
+ * @return screen width in pixels, or Symbian error code
+ * (negative number) in case of an error
+ */
+ private static native int _getScreenWidth();
+
+ /**
+ * Get screen height in pixels.
+ *
+ * @return screen heigth in pixels, or Symbian error code
+ * (negative number) in case of an error
+ */
+ private static native int _getScreenHeight();
+
+ /**
+ * Class for holding return value from native side.
+ */
+ private static class IntValue
+ {
+ private int iValue = 0;
+ int getValue()
+ {
+ return iValue;
+ }
+ void setValue(int aValue)
+ {
+ iValue = aValue;
+ }
+ }
+
+ /**
+ * Class for holding return value from native side.
+ */
+ private static class BooleanValue
+ {
+ private boolean iValue = false;
+ boolean getValue()
+ {
+ return iValue;
+ }
+ void setValue(boolean aValue)
+ {
+ iValue = aValue;
+ }
+ }
+}