# HG changeset patch
# User hgs
# Date 1278682545 -10800
# Node ID 023eef975703de5e1893c183c4028ee50a6f5d89
# Parent 35baca0e7a2e686c7e8d00b1f4671f3042146b6f
v2.2.4_1
diff -r 35baca0e7a2e -r 023eef975703 build/Makefile.comp
--- a/build/Makefile.comp Tue Jul 06 20:36:19 2010 +0300
+++ b/build/Makefile.comp Fri Jul 09 16:35:45 2010 +0300
@@ -119,7 +119,7 @@
# Symbian ----------------------------------
ifeq ($(BUILDENV),symbian)
-all: qmake java native
+all: qmake java native codescanner
# Extract basename of current component
BASENAME = $(basename $(PRO_FILE))
@@ -151,11 +151,11 @@
echo #include "exports.inf" >> bld.inf
endif
+# Quick java releasables target
+RELEASABLE_PATH = $(EPOCROOT)epoc32/release/$(PLATFORM)/$(CFG)/z/resource/java/jvm/lib/jrt
javareleasables:
ifneq ($(ANT_FILE),)
- $(ANT) -q -Dtarget.platform=$(PLATFORM) -Dtarget.cfg=$(VARIANT) $(ANT_PROJECT_DEFINES) releasables > $(DEVNULL)
- $(call CATCOMMAND,java_releasables_$(PLATFORM)_$(VARIANT).tmp)
- $(call RMFILE,java_releasables_$(PLATFORM)_$(VARIANT).tmp)
+ echo $(RELEASABLE_PATH)/$(BASENAME).odc
endif
# Remove all generated build files
@@ -170,6 +170,12 @@
clean_qmake:
-$(call RMFILES,abld.bat bld.inf* Makefile* $(BASENAME).mmp $(BASENAME)_*.mmp $(BASENAME)_*.pkg $(BASENAME)_reg.rss eabi_stl4/*)
+# Use Carbide CodeScanner to list high-level issues
+codescanner:
+ifneq ($(call PATHSEARCH,codescanner.exe),)
+ $(call CODESCANNER,..)
+endif
+
# Symbian SBS ------------------------------
ifdef USESBS
diff -r 35baca0e7a2e -r 023eef975703 build/Makefile.defs
--- a/build/Makefile.defs Tue Jul 06 20:36:19 2010 +0300
+++ b/build/Makefile.defs Fri Jul 09 16:35:45 2010 +0300
@@ -57,6 +57,7 @@
MKDIR = if [ ! -d $(1)]; then mkdir $(1); fi
RMDIR = if [ -d $(1)]; then rmdir $(1); fi
DELTREE = if [ -d $(1)]; then rm -fr $(1); fi
+ PATHSEARCH = $(firstword $(wildcard $(addsuffix /$(1),$(subst :, ,$(PATH)))))
else
# CMD.exe definitions
@@ -74,6 +75,7 @@
MKDIR = if not exist $(1) mkdir $(1)
RMDIR = if exist $(1) rmdir $(1)
DELTREE = if exist $(1) rmdir /S/Q $(1)
+ PATHSEARCH = $(firstword $(wildcard $(addsuffix /$(1),$(subst ;, ,$(PATH)))))
endif
@@ -103,6 +105,7 @@
export ANT_OPTS=
BLDMAKE = perl -S bldmake.pl
ABLDMAKE = set MAKELEVEL=&&set MAKEFLAGS=&&set MFLAGS=&&make -r
+ CODESCANNER = codescanner -c $(JAVA_SRC_ROOT)/build/codescanner_high.xml -o std $(1) | perl -ne "print if /error:/;"
ifdef NODEP
# Makmake does not make dependency checks with this flag
@@ -259,10 +262,9 @@
endif
generatereleasefile:
-ifeq ($(origin RD_JAVA_S60_RELEASE),command line)
@echo Writing $(RD_JAVA_S60_RELEASE_FILE) ... \
+ $(shell $(call CATCOMMAND,$(JAVA_SRC_ROOT)/build/templates/generated_header_hash.txt) > $(RD_JAVA_S60_RELEASE_FILE)) \
$(shell echo RD_JAVA_S60_RELEASE=$(RD_JAVA_S60_RELEASE)>$(RD_JAVA_S60_RELEASE_FILE))
-endif
# Clean file on clean_generated
clean_configure: clean_conffiles
diff -r 35baca0e7a2e -r 023eef975703 build/Makefile.nonqt
--- a/build/Makefile.nonqt Tue Jul 06 20:36:19 2010 +0300
+++ b/build/Makefile.nonqt Fri Jul 09 16:35:45 2010 +0300
@@ -43,19 +43,24 @@
# Symbian ----------------------------------
ifeq ($(BUILDENV),symbian)
-all: native
+all: native codescanner
javareleasables:
makestubs:
+codescanner:
+ifneq ($(call PATHSEARCH,codescanner.exe),)
+ $(call CODESCANNER,..)
+endif
+
# Symbian SBS ------------------------------
ifdef USESBS
# BUILD combines commands EXPORT MAKEFILE BITMAP RESOURCE LIBRARY TARGET FINAL
native:
$(PHASEINFO)
- $(SBS) -c $(PLATFORM)_$(CFG) BUILD
+ $(SBS) -c $(PLATFORM)_$(CFG)
clean_java:
diff -r 35baca0e7a2e -r 023eef975703 build/bld.inf
--- a/build/bld.inf Tue Jul 06 20:36:19 2010 +0300
+++ b/build/bld.inf Fri Jul 09 16:35:45 2010 +0300
@@ -50,7 +50,7 @@
#else // RD_JAVA_UI_QT
-../rom/java_2_1.iby CORE_APP_LAYER_IBY_EXPORT_PATH(java.iby)
+../rom/java_2_2.iby CORE_APP_LAYER_IBY_EXPORT_PATH(java.iby)
// Export ODC list files
../rom/midpodclist /epoc32/release/winscw/udeb/z/resource/java/midpodclist
diff -r 35baca0e7a2e -r 023eef975703 build/codescanner_high.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/codescanner_high.xml Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+ .*\.au
+ .*\.avi
+ .*\.bmp
+ .*\.dll
+ .*\.doc
+ .*\.exe
+ .*\.gif
+ .*\.jpg
+ .*\.mbm
+ .*\.mp3
+ .*\.mpg
+ .*\.png
+ .*\.raw
+ .*\.rtf
+ .*\.tif
+ .*\.wav
+ .*\.wbmp
+ .*\.wmf
+ .*\.xls
+
+ .*\\ts_.*
+ .*\\tsrc\\.*
+ .*\\tsrc.s60\\.*
+ .*\\test\\.*
+ .*\\internal\\.*
+ .*\\Internal\\.*
+ .*\\.svn\\.*
+ \\tools\\.*
+
+
+
+
+
+
+
+
+
+
diff -r 35baca0e7a2e -r 023eef975703 build/exports.inf
--- a/build/exports.inf Tue Jul 06 20:36:19 2010 +0300
+++ b/build/exports.inf Fri Jul 09 16:35:45 2010 +0300
@@ -48,7 +48,7 @@
#else // RD_JAVA_UI_QT
-../rom/java_2_1.iby CORE_APP_LAYER_IBY_EXPORT_PATH(java.iby)
+../rom/java_2_2.iby CORE_APP_LAYER_IBY_EXPORT_PATH(java.iby)
// Export ODC list files
../rom/midpodclist /epoc32/release/winscw/udeb/z/resource/java/midpodclist
diff -r 35baca0e7a2e -r 023eef975703 build/loc/resources.jar
Binary file build/loc/resources.jar has changed
diff -r 35baca0e7a2e -r 023eef975703 build/makefile
--- a/build/makefile Tue Jul 06 20:36:19 2010 +0300
+++ b/build/makefile Fri Jul 09 16:35:45 2010 +0300
@@ -61,6 +61,9 @@
javatools \
javaextensions
+# Set order explicitly to get Java building as first
+SUBTARGETS = $(COMPONENTS) $(NONQTSUBSYSTEMS) $(SUBSYSTEMS)
+
# -------------------------------------------------------
include ${JAVA_SRC_ROOT}/build/Makefile.subsystem
diff -r 35baca0e7a2e -r 023eef975703 build/makefile.javaversion
--- a/build/makefile.javaversion Tue Jul 06 20:36:19 2010 +0300
+++ b/build/makefile.javaversion Fri Jul 09 16:35:45 2010 +0300
@@ -1,2 +1,2 @@
# Set Java version (must be dot separated, without spaces)
-JAVA_VERSION = 2.2.3
+JAVA_VERSION = 2.2.4
diff -r 35baca0e7a2e -r 023eef975703 build/nativejava.flm
--- a/build/nativejava.flm Tue Jul 06 20:36:19 2010 +0300
+++ b/build/nativejava.flm Fri Jul 09 16:35:45 2010 +0300
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 2009-2010 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"
@@ -23,23 +23,67 @@
# therefore the jrt-directory is found from finding first directory having
# subsystem.mk, going up to max. three directory levels)
-JAVABUILDDIR = $(dir $(firstword $(wildcard $(TO_BLDINF)/subsystem.mk $(TO_BLDINF)/../subsystem.mk $(TO_BLDINF)/../../subsystem.mk)))
+JAVABUILDDIR:= $(dir $(firstword $(wildcard $(TO_BLDINF)/subsystem.mk $(TO_BLDINF)/../subsystem.mk $(TO_BLDINF)/../../subsystem.mk)))
-JAVABUILDCMD = make -C $(JAVABUILDDIR) -f subsystem.mk EPOCROOT=$(EPOCROOT)/ \
+# General Java makefile command
+JAVACMD:= make -C $(JAVABUILDDIR) -f subsystem.mk EPOCROOT=$(EPOCROOT)/ \
PLATFORM=$(PLATFORM) CFG=$(CFG) BLD_INF_JAVA=1
-define java_build
-RESOURCE::
+# General build command, targetting armv5 urel files
+JAVABUILDCMD:= make -C $(JAVABUILDDIR) -f subsystem.mk EPOCROOT=$(EPOCROOT)/ \
+ PLATFORM=armv5 CFG=urel BLD_INF_JAVA=1 java finalactions
+
+# Marker file to prevent multiple Java compilations of the
+# same platform/cfg, when building e.g. device variants.
+NATIVEJAVAMARKER := $(EPOCBLD)/nativejavamarker_$(PLATFORM)_$(CFG).done
+
+# Java build artifact file source and target
+JAVABUILD_ARTIFACT_SRC := $(EPOCROOT)/epoc32/release/armv5/urel
+JAVABUILD_ARTIFACT_DST := $(EPOCROOT)/epoc32/release/$(PLATFORM)/$(CFG)
+
+define compilenativejava
+
+# This is the general Java compilation, done once for the component
+ifeq ($(GUARD_nativejavatarget),)
+GUARD_nativejavatarget:=1
+.PHONY:: nativejavatarget
+nativejavatarget:
$(call startrule,compilenativejava,,javasources) \
- $(JAVABUILDCMD) java finalactions\
+ $(JAVABUILDCMD) \
$(call endrule,compilenativejava)
+endif
+
+# Actual resource target, one for each platform/cfg variant
+ifeq ($(GUARD_$(call sanitise,$(NATIVEJAVAMARKER))),)
+GUARD_$(call sanitise,$(NATIVEJAVAMARKER)):=1
+
+RESOURCE:: $(NATIVEJAVAMARKER)
+
+# Copy the build artifacts to target
+$(NATIVEJAVAMARKER): nativejavatarget
+ifeq ($(filter armv5_urel ARMV5_urel ARMV5_UREL,$(PLATFORM)_$(CFG)),)
+ $(call makepath,$(JAVABUILD_ARTIFACT_DST)/z/resource/java/jvm/lib/jrt)
+ $(call makepath,$(JAVABUILD_ARTIFACT_DST)/z/resource/java/security)
+ $(call startrule,copynativejavaresults) \
+ $(foreach f,java_impl_cdc.jar java_impl_cldc.jar java_platform_api.jar java_public_api.jar java_signature_test.jar, $(GNUCP) -v $(JAVABUILD_ARTIFACT_SRC)/$f $(JAVABUILD_ARTIFACT_DST) &&) \
+ $(GNUCP) -Rv $(JAVABUILD_ARTIFACT_SRC)/z/resource/java/jvm/lib/jrt $(JAVABUILD_ARTIFACT_DST)/z/resource/java/jvm/lib && \
+ $(GNUCP) -Rv $(JAVABUILD_ARTIFACT_SRC)/z/resource/java/security $(JAVABUILD_ARTIFACT_DST)/z/resource/java \
+ $(call endrule,copynativejavaresults)
+endif
+endif
+
+# Use normal clean for all variants
CLEAN::
$(call startrule,cleannativejava,,javasources) \
- $(JAVABUILDCMD) clean_java \
+ $(JAVACMD) clean_java \
$(call endrule,cleannativejava)
endef
-$(eval $(java_build))
+$(eval $(compilenativejava))
-RELEASABLES = $(shell $(JAVABUILDCMD) -s javareleasables)
+RELEASABLES:= $(shell $(JAVACMD) -s javareleasables)
$(eval $(call whatmacro,$(RELEASABLES),WHATRESOURCES))
+
+$(eval $(call GenerateStandardCleanTarget,$(NATIVEJAVAMARKER)))
+
+
diff -r 35baca0e7a2e -r 023eef975703 build/properties.xml
--- a/build/properties.xml Tue Jul 06 20:36:19 2010 +0300
+++ b/build/properties.xml Fri Jul 09 16:35:45 2010 +0300
@@ -41,12 +41,23 @@
for reason why this property is defined"/> -->
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -60,13 +71,6 @@
-
-
-
-
-
diff -r 35baca0e7a2e -r 023eef975703 build/sis/incompatible_openc.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/build/sis/incompatible_openc.txt Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,3 @@
+OpenC version 1.5 or later is not found. Some Java applications may not work properly. Make sure that latest device firmware is used.
+
+Continue installation?
\ No newline at end of file
diff -r 35baca0e7a2e -r 023eef975703 build/sis/incompatible_platform.txt
--- a/build/sis/incompatible_platform.txt Tue Jul 06 20:36:19 2010 +0300
+++ b/build/sis/incompatible_platform.txt Fri Jul 09 16:35:45 2010 +0300
@@ -1,1 +1,1 @@
-Unfortunately Java Runtime 2.0 Alpha is not compatible with your device. Java Runtime 2.0 Alpha works only on S60 5.0 devices.
+Java Runtime is not compatible with your device. Java Runtime requires S60 5th Edition device.
\ No newline at end of file
diff -r 35baca0e7a2e -r 023eef975703 build/sis/java_2_0.pkg
--- a/build/sis/java_2_0.pkg Tue Jul 06 20:36:19 2010 +0300
+++ b/build/sis/java_2_0.pkg Fri Jul 09 16:35:45 2010 +0300
@@ -488,6 +488,7 @@
"\epoc32\release\armv5\urel\jvmnativeport.dll"-"c:\sys\bin\jvmnativeport.dll"
"\epoc32\release\armv5\urel\midp2backupplugin.dll"-"c:\sys\bin\midp2backupplugin.dll"
"\epoc32\release\armv5\urel\javadebugapi.dll"-"c:\sys\bin\javadebugapi.dll"
+"\epoc32\release\armv5\urel\javastarter.dll"-"c:\sys\bin\javastarter.dll"
#ifdef RD_JAVA_S60_RELEASE_5_0_IAD
"\epoc32\release\armv5\urel\midp2cenrep.dll"-"c:\sys\bin\midp2cenrep.dll"
@@ -826,3 +827,9 @@
; javaappbackconverter is ran after uninstallation
"\epoc32\release\armv5\urel\javaappbackconverter.exe"-"c:\sys\bin\javaappbackconverter.exe", FR, RR, RW
#endif // RD_JAVA_S60_RELEASE_5_0_IAD
+
+
+#ifndef RD_JAVA_S60_RELEASE_5_0_IAD
+"\epoc32\release\armv5\urel\javaiconsizenotifplugin.dll"-"c:\sys\bin\javaiconsizenotifplugin.dll"
+"\epoc32\data\z\resource\plugins\javaiconsizenotifplugin.rsc"-"c:\resource\plugins\javaiconsizenotifplugin.rsc"
+#endif // RD_JAVA_S60_RELEASE_5_0_IAD
diff -r 35baca0e7a2e -r 023eef975703 build/sis/java_3_1.pkg
--- a/build/sis/java_3_1.pkg Tue Jul 06 20:36:19 2010 +0300
+++ b/build/sis/java_3_1.pkg Fri Jul 09 16:35:45 2010 +0300
@@ -190,7 +190,9 @@
"\epoc32\release\armv5\urel\javadebugapi.dll"-"c:\sys\bin\javadebugapi.dll"
#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
"\epoc32\release\armv5\urel\javasifplugin.dll"-"c:\sys\bin\javasifplugin.dll"
+"\epoc32\release\armv5\urel\javainstallcopier.exe"-"c:\sys\bin\javainstallcopier.exe"
#endif
+"\epoc32\release\armv5\urel\javastarter.dll"-"c:\sys\bin\javastarter.dll"
; to enable JVM argument modifier - comment 1st line below and uncomment 2nd line below
"\epoc32\release\armv5\urel\javajvmargsmodifier.dll"-"c:\sys\bin\javajvmargsmodifier.dll"
@@ -350,3 +352,5 @@
"\epoc32\release\armv5\urel\z\resource\java\jvm\lib\jrt\openlcdui.odc"-"c:\resource\java\jvm\lib\jrt\openlcdui.odc"
"\epoc32\release\armv5\urel\z\resource\java\jvm\lib\jrt\javanokiaui.odc"-"c:\resource\java\jvm\lib\jrt\javanokiaui.odc"
+"\epoc32\release\armv5\urel\javaapplicationsettingsview.dll"-"c:\sys\bin\javaapplicationsettingsview.dll"
+"\epoc32\data\z\resource\qt\plugins\appsettings\javaapplicationsettingsview.qtplugin"-"c:\resource\qt\plugins\appsettings\javaapplicationsettingsview.qtplugin"
diff -r 35baca0e7a2e -r 023eef975703 build/templates/10.1.layers.sysdef.xml
--- a/build/templates/10.1.layers.sysdef.xml Tue Jul 06 20:36:19 2010 +0300
+++ b/build/templates/10.1.layers.sysdef.xml Fri Jul 09 16:35:45 2010 +0300
@@ -12,26 +12,12 @@
qmakeArgs="-r"
filter="!sf_build" />
-
-
-
-
-
-
-
-
-
diff -r 35baca0e7a2e -r 023eef975703 build/templates/9.2.layers.sysdef.xml
--- a/build/templates/9.2.layers.sysdef.xml Tue Jul 06 20:36:19 2010 +0300
+++ b/build/templates/9.2.layers.sysdef.xml Fri Jul 09 16:35:45 2010 +0300
@@ -10,22 +10,10 @@
-
-
-
-
-
-
-
-
-
diff -r 35baca0e7a2e -r 023eef975703 inc/build_defines.hrh
--- a/inc/build_defines.hrh Tue Jul 06 20:36:19 2010 +0300
+++ b/inc/build_defines.hrh Fri Jul 09 16:35:45 2010 +0300
@@ -15,7 +15,7 @@
*
*/
-#define RD_JAVA_VERSION 2,2,1
+#define RD_JAVA_VERSION 2,2,4
#define RD_JAVA_SYMBIAN_TARGET
#define RD_JAVA_S60_RELEASE_10_1
#define RD_JAVA_S60_RELEASE_10_1_ONWARDS
@@ -27,9 +27,6 @@
#define RD_JAVA_HTTP_EMC_ENABLED
#define RD_JAVA_NGA_ENABLED
#define SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-#define RD_JAVA_USIF_APP_REG
-#define RD_JAVA_USIF_NOTIFY_APP_ARC
-#define RD_JAVA_USIF_NOTIFY_PROGRESS
#define RD_JAVA_PROXIMITY_LISTENER_ENABLED
#define RD_JAVA_OPENC_BETA_PATCH
#define OPENLCDUI_ENABLED
diff -r 35baca0e7a2e -r 023eef975703 inc/build_defines.pri
--- a/inc/build_defines.pri Tue Jul 06 20:36:19 2010 +0300
+++ b/inc/build_defines.pri Fri Jul 09 16:35:45 2010 +0300
@@ -13,4 +13,4 @@
#
# Description: Generated file - do not edit manually
#
-PROJECT_DEFINES *= RD_JAVA_SYMBIAN_TARGET RD_JAVA_S60_RELEASE_10_1 RD_JAVA_S60_RELEASE_10_1_ONWARDS RD_JAVA_S60_RELEASE_9_2_ONWARDS RD_JAVA_S60_RELEASE_5_0_ONWARDS RD_JAVA_UI_QT RD_JAVA_STDCPPV5 RD_JAVA_EPOCALLOWDLLDATA_FIX RD_JAVA_HTTP_EMC_ENABLED RD_JAVA_NGA_ENABLED SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK RD_JAVA_USIF_APP_REG RD_JAVA_USIF_NOTIFY_APP_ARC RD_JAVA_USIF_NOTIFY_PROGRESS RD_JAVA_PROXIMITY_LISTENER_ENABLED RD_JAVA_OPENC_BETA_PATCH OPENLCDUI_ENABLED RD_JAVA_OPENLCDUI_ENABLED RD_JAVA_INSTALLERUI_ENABLED RD_JAVA_PREWARM RD_JAVA_ADVANCED_TACTILE_FEEDBACK RD_JAVA_APPLICATION_SETTINGS_QT RD_JAVA_MIDPRMS_DB
+PROJECT_DEFINES *= RD_JAVA_SYMBIAN_TARGET RD_JAVA_S60_RELEASE_10_1 RD_JAVA_S60_RELEASE_10_1_ONWARDS RD_JAVA_S60_RELEASE_9_2_ONWARDS RD_JAVA_S60_RELEASE_5_0_ONWARDS RD_JAVA_UI_QT RD_JAVA_STDCPPV5 RD_JAVA_EPOCALLOWDLLDATA_FIX RD_JAVA_HTTP_EMC_ENABLED RD_JAVA_NGA_ENABLED SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK RD_JAVA_PROXIMITY_LISTENER_ENABLED RD_JAVA_OPENC_BETA_PATCH OPENLCDUI_ENABLED RD_JAVA_OPENLCDUI_ENABLED RD_JAVA_INSTALLERUI_ENABLED RD_JAVA_PREWARM RD_JAVA_ADVANCED_TACTILE_FEEDBACK RD_JAVA_APPLICATION_SETTINGS_QT RD_JAVA_MIDPRMS_DB
diff -r 35baca0e7a2e -r 023eef975703 inc/java.txt
--- a/inc/java.txt Tue Jul 06 20:36:19 2010 +0300
+++ b/inc/java.txt Fri Jul 09 16:35:45 2010 +0300
@@ -1,1 +1,1 @@
-2.2.3
+2.2.4
diff -r 35baca0e7a2e -r 023eef975703 inc/project_defines.hrh
--- a/inc/project_defines.hrh Tue Jul 06 20:36:19 2010 +0300
+++ b/inc/project_defines.hrh Fri Jul 09 16:35:45 2010 +0300
@@ -26,9 +26,6 @@
MACRO RD_JAVA_HTTP_EMC_ENABLED
MACRO RD_JAVA_NGA_ENABLED
MACRO SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
-MACRO RD_JAVA_USIF_APP_REG
-MACRO RD_JAVA_USIF_NOTIFY_APP_ARC
-MACRO RD_JAVA_USIF_NOTIFY_PROGRESS
MACRO RD_JAVA_PROXIMITY_LISTENER_ENABLED
MACRO RD_JAVA_OPENC_BETA_PATCH
MACRO OPENLCDUI_ENABLED
diff -r 35baca0e7a2e -r 023eef975703 javacommons/comms/build/comms.pro
--- a/javacommons/comms/build/comms.pro Tue Jul 06 20:36:19 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,24 +0,0 @@
-#
-# Copyright (c) 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:
-#
-
-TEMPLATE=lib
-TARGET=javacomms
-CONFIG += omj java staticdata stl
-CONFIG -= qt
-LIBS += -ljavaipc
-
-
-include(../../../build/omj.pri)
diff -r 35baca0e7a2e -r 023eef975703 javacommons/comms/build/javacomms.pro
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javacommons/comms/build/javacomms.pro Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 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:
+#
+
+TEMPLATE=lib
+TARGET=javacomms
+CONFIG += omj java staticdata stl
+CONFIG -= qt
+LIBS += -ljavaipc
+
+
+include(../../../build/omj.pri)
diff -r 35baca0e7a2e -r 023eef975703 javacommons/comms/comms.pro
--- a/javacommons/comms/comms.pro Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/comms/comms.pro Fri Jul 09 16:35:45 2010 +0300
@@ -15,6 +15,6 @@
#
TEMPLATE = subdirs
SUBDIRS += ipclib/clientserver/build/ipc.pro
-SUBDIRS += build/comms.pro
+SUBDIRS += build/javacomms.pro
BLD_INF_RULES.prj_extensions += "$${LITERAL_HASH}include \"ipclib/build/bld.inf\""
BLD_INF_RULES.prj_extensions += "prj_extensions"
diff -r 35baca0e7a2e -r 023eef975703 javacommons/comms/src/commsendpoint.cpp
--- a/javacommons/comms/src/commsendpoint.cpp Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/comms/src/commsendpoint.cpp Fri Jul 09 16:35:45 2010 +0300
@@ -295,12 +295,13 @@
break;
case ETIMEDOUT:
+ default:
mSendReceiveListeners.erase(messageRef);
done = 1;
- break;
-
- default:
- ELOG2(EJavaComms, "pthread_cond_timedwait failed %d - %s", rc, strerror(rc));
+ if (rc != ETIMEDOUT)
+ {
+ ELOG2(EJavaComms, "pthread_cond_timedwait failed %d - %s", rc, strerror(rc));
+ }
break;
}
}
diff -r 35baca0e7a2e -r 023eef975703 javacommons/connectionmanager/inc.s60/connectionmanager.h
--- a/javacommons/connectionmanager/inc.s60/connectionmanager.h Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/connectionmanager/inc.s60/connectionmanager.h Fri Jul 09 16:35:45 2010 +0300
@@ -163,6 +163,7 @@
static HBufC8 * PromptUserSelectNetworkAccessPointL();
static HBufC8 * CreateDescriptorL(const int aType, const int id);
+ static bool checkIapDefaultL(TUint32 aMatchIapId, TUint32 aDestId, bool aDefault);
diff -r 35baca0e7a2e -r 023eef975703 javacommons/connectionmanager/src.s60/connectionmanager.cpp
--- a/javacommons/connectionmanager/src.s60/connectionmanager.cpp Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/connectionmanager/src.s60/connectionmanager.cpp Fri Jul 09 16:35:45 2010 +0300
@@ -65,7 +65,21 @@
EXPORT_C bool ConnectionManager::isIapDefault(TUint32 aMatchIapId, TUint32 aDestId, bool aDefault)
{
- LOG(ESOCKET,EInfo,"+ConnectionManager::getDefualtId");
+ LOG(ESOCKET,EInfo,"+ConnectionManager::isIapDefault");
+ bool retVal = false;
+ TRAPD(err,retVal = checkIapDefaultL(aMatchIapId,aDestId,aDefault));
+ if(err!=KErrNone)
+ {
+ // error occured
+ return false;
+ }
+ return retVal;
+}
+
+bool ConnectionManager::checkIapDefaultL(TUint32 aMatchIapId, TUint32 aDestId, bool aDefault)
+{
+
+ LOG(ESOCKET,EInfo,"+ConnectionManager::checkIapDefaultL");
TUint32 id = aDestId;
TUint32 tmpapId;
TCmDefConnType type;
@@ -79,7 +93,7 @@
mgr->ReadDefConnL(obj);
id = obj.iId;
type = obj.iType;
- if ((type ==ECmDefConnConnectionMethod) && (type == aMatchIapId))
+ if ((type ==ECmDefConnConnectionMethod) && (id == aMatchIapId))
{
return true;
}
@@ -104,8 +118,9 @@
return true;
}
}
- return false;
-
+ return false;
+
+
}
// ---------------------------------------------------------------------------
diff -r 35baca0e7a2e -r 023eef975703 javacommons/fileutils/build/fileutils.pro
--- a/javacommons/fileutils/build/fileutils.pro Tue Jul 06 20:36:19 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-#
-# Copyright (c) 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:
-#
-
-TARGET=javafileutils
-TEMPLATE=lib
-CONFIG += omj java staticdata stl
-CONFIG -= qt
-
-symbian : LIBS += -lefsrv -lPlatformEnv -lcaf
-
-LIBS+= -ljavautils -ljavacomms
-
-include(../../../build/omj.pri)
diff -r 35baca0e7a2e -r 023eef975703 javacommons/fileutils/build/javafileutils.pro
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javacommons/fileutils/build/javafileutils.pro Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,26 @@
+#
+# Copyright (c) 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:
+#
+
+TARGET=javafileutils
+TEMPLATE=lib
+CONFIG += omj java staticdata stl
+CONFIG -= qt
+
+symbian : LIBS += -lefsrv -lPlatformEnv -lcaf
+
+LIBS+= -ljavautils -ljavacomms
+
+include(../../../build/omj.pri)
diff -r 35baca0e7a2e -r 023eef975703 javacommons/fileutils/javasrc/com/nokia/mj/impl/fileutils/FileURL.java
--- a/javacommons/fileutils/javasrc/com/nokia/mj/impl/fileutils/FileURL.java Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/fileutils/javasrc/com/nokia/mj/impl/fileutils/FileURL.java Fri Jul 09 16:35:45 2010 +0300
@@ -23,7 +23,7 @@
* differences between URL and Absolute path and make it transparent to use
* from.
*/
-final class FileURL
+public final class FileURL
{
private static String FILE_PREFIX = "file://";
diff -r 35baca0e7a2e -r 023eef975703 javacommons/fileutils/tsrc/data/HelloWorld2.jar
Binary file javacommons/fileutils/tsrc/data/HelloWorld2.jar has changed
diff -r 35baca0e7a2e -r 023eef975703 javacommons/gcfbase/javasrc/com/nokia/mj/impl/gcf/PushRegistryPermissionImpl.java
--- a/javacommons/gcfbase/javasrc/com/nokia/mj/impl/gcf/PushRegistryPermissionImpl.java Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/gcfbase/javasrc/com/nokia/mj/impl/gcf/PushRegistryPermissionImpl.java Fri Jul 09 16:35:45 2010 +0300
@@ -115,7 +115,7 @@
*/
public String toString()
{
- return "javax.microedition.io.PushRegistryPermission";
+ return "javax.microedition.io.PushRegistry";
}
/**
diff -r 35baca0e7a2e -r 023eef975703 javacommons/gcfprotocols/file/javasrc/com/nokia/mj/impl/file/FileConnectionImpl.java
--- a/javacommons/gcfprotocols/file/javasrc/com/nokia/mj/impl/file/FileConnectionImpl.java Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/gcfprotocols/file/javasrc/com/nokia/mj/impl/file/FileConnectionImpl.java Fri Jul 09 16:35:45 2010 +0300
@@ -254,7 +254,7 @@
curUrl = curUrl.substring(0, curUrl.length() - 1);
}
String newUrl = curUrl.substring(0, curUrl.lastIndexOf('/') + 1);
- newUrl += iFileUtility.getName();
+ newUrl += FileUTF8Handler.encode(iFileUtility.getName());
iFileConnectionUrl = new FileConnectionURL(newUrl);
}
diff -r 35baca0e7a2e -r 023eef975703 javacommons/gcfprotocols/file/tsrc/mt/filetestinit/build/javafiletestinit.pro
--- a/javacommons/gcfprotocols/file/tsrc/mt/filetestinit/build/javafiletestinit.pro Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/gcfprotocols/file/tsrc/mt/filetestinit/build/javafiletestinit.pro Fri Jul 09 16:35:45 2010 +0300
@@ -21,7 +21,6 @@
symbian {
TARGET.CAPABILITY = all -tcb
- INCLUDEPATH += /epoc32/include/caf
LIBS += -lcaf -lcafutils -lefsrv -lDrmParsers -lDRMServerInterfaces
}
diff -r 35baca0e7a2e -r 023eef975703 javacommons/gcfprotocols/http/build/javahttp.pro
--- a/javacommons/gcfprotocols/http/build/javahttp.pro Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/gcfprotocols/http/build/javahttp.pro Fri Jul 09 16:35:45 2010 +0300
@@ -18,15 +18,14 @@
TARGET=javahttp
TEMPLATE=lib
CONFIG += omj java stl
+CONFIG -= qt
symbian {
LIBS += -leuser -lhttp -lecom -lbafl -linetprotutil -lhttpfiltercommon -lx509 -lx500 -lcrypto -lesock -lcommdb -lcentralrepository
contains(PROJECT_DEFINES,RD_JAVA_S60_RELEASE_10_1_ONWARDS) {
- QT += webkit
- QT -= gui
- LIBS += -lQtWebKit -lplatformEnv -ljavaenvinfo
+
}
else {
LIBS += -lwebutils
diff -r 35baca0e7a2e -r 023eef975703 javacommons/gcfprotocols/http/javasrc.s60/com/nokia/mj/impl/gcf/protocol/http/HttpPermissionImpl.java
--- a/javacommons/gcfprotocols/http/javasrc.s60/com/nokia/mj/impl/gcf/protocol/http/HttpPermissionImpl.java Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/gcfprotocols/http/javasrc.s60/com/nokia/mj/impl/gcf/protocol/http/HttpPermissionImpl.java Fri Jul 09 16:35:45 2010 +0300
@@ -45,7 +45,7 @@
public String toString()
{
- return "javax.microedition.io.HttpProtocolPermission";
+ return "javax.microedition.io.Connector.http";
}
public boolean implies(Permission p)
diff -r 35baca0e7a2e -r 023eef975703 javacommons/gcfprotocols/http/src.s60/javauseragent.cpp
--- a/javacommons/gcfprotocols/http/src.s60/javauseragent.cpp Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/gcfprotocols/http/src.s60/javauseragent.cpp Fri Jul 09 16:35:45 2010 +0300
@@ -17,38 +17,16 @@
#include "javauseragent.h"
#ifdef RD_JAVA_S60_RELEASE_10_1_ONWARDS
-#include
-#include "javaenvinfo.h"
#else
#include
#endif
-#ifdef RD_JAVA_S60_RELEASE_10_1_ONWARDS
-class Page: public QWebPage
-{
-public:
- QString userAgentForUrl ( const QUrl & url ) const;
-};
-
-QString Page::userAgentForUrl ( const QUrl & url ) const
-{
- return url.toString();
-}
-#endif
HBufC* JavaUserAgent::GetUserAgentL()
{
#ifdef RD_JAVA_S60_RELEASE_10_1_ONWARDS
- /*QApplication app();
- QUrl uri;
- Page page;
- QString webUserAgent = page.userAgentForUrl(uri);
- HBufC* agent = HBufC::NewMaxLC(webUserAgent.length());
- agent->Des().Copy(webUserAgent.utf16());
- agent->Des().Append(*(Java::JavaEnvInfo::GetUserAgentHeaderL()));
- return agent;
- */
+
_LIT(KString,"null");
HBufC* agent = HBufC::NewLC(5);
*agent = KString;
diff -r 35baca0e7a2e -r 023eef975703 javacommons/gcfprotocols/http/src.s60/nativehttptraansaction.cpp
--- a/javacommons/gcfprotocols/http/src.s60/nativehttptraansaction.cpp Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/gcfprotocols/http/src.s60/nativehttptraansaction.cpp Fri Jul 09 16:35:45 2010 +0300
@@ -135,7 +135,7 @@
narrowBuffer = HBufC8::NewLC(length);
TPtr8 narrowPtr = narrowBuffer->Des();
narrowPtr.Copy(rawHeader);
- rawHeaderArray.Append(narrowBuffer);
+ rawHeaderArray.AppendL(narrowBuffer);
CleanupStack::Pop(narrowBuffer);
}
aJni->DeleteLocalRef(jniString);
diff -r 35baca0e7a2e -r 023eef975703 javacommons/gcfprotocols/https/javasrc.s60/com/nokia/mj/impl/gcf/protocol/https/HttpsPermissionImpl.java
--- a/javacommons/gcfprotocols/https/javasrc.s60/com/nokia/mj/impl/gcf/protocol/https/HttpsPermissionImpl.java Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/gcfprotocols/https/javasrc.s60/com/nokia/mj/impl/gcf/protocol/https/HttpsPermissionImpl.java Fri Jul 09 16:35:45 2010 +0300
@@ -51,7 +51,7 @@
public String toString()
{
- return "javax.microedition.io.HttpsProtocolPermission";
+ return "javax.microedition.io.Connector.https";
}
public boolean implies(Permission p)
diff -r 35baca0e7a2e -r 023eef975703 javacommons/javacommons.pro
--- a/javacommons/javacommons.pro Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/javacommons.pro Fri Jul 09 16:35:45 2010 +0300
@@ -18,7 +18,7 @@
SUBDIRS += utils/build/javautils.pro
SUBDIRS += comms
SUBDIRS += javastorage
-SUBDIRS += fileutils/build/fileutils.pro
+SUBDIRS += fileutils/build/javafileutils.pro
SUBDIRS += security
SUBDIRS += gcfbase/build/javagcf.pro
SUBDIRS += connectionmanager/build/javaconnectionmanager.pro
diff -r 35baca0e7a2e -r 023eef975703 javacommons/javastorage/tsrc/storageclient/build/alltests.mmp
--- a/javacommons/javastorage/tsrc/storageclient/build/alltests.mmp Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/javastorage/tsrc/storageclient/build/alltests.mmp Fri Jul 09 16:35:45 2010 +0300
@@ -22,7 +22,7 @@
#include <../../../../../inc/java_stdcpp_support_for_exe.hrh>
#include
-SYSTEMINCLUDE /epoc32/include
+APP_LAYER_SYSTEMINCLUDE
USERINCLUDE ../../../inc
USERINCLUDE ../../../../../tools/cpputest/include/cpputest
diff -r 35baca0e7a2e -r 023eef975703 javacommons/security/build/build.xml
--- a/javacommons/security/build/build.xml Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/security/build/build.xml Fri Jul 09 16:35:45 2010 +0300
@@ -9,9 +9,9 @@
disclosed to others without the prior written consent of Nokia.
-->
-
+
- Builds OMJ security, generates the policy files in their internal format and copies the certificates and the metadata into right locations
+ Builds OMJ security and generates the policy files in their internal format
@@ -32,7 +32,6 @@
-
@@ -48,7 +47,7 @@
-
+
@@ -62,20 +61,10 @@
-
-
-
-
-
-
-
-
-
-
diff -r 35baca0e7a2e -r 023eef975703 javacommons/security/data/att_manufacturer.txt
--- a/javacommons/security/data/att_manufacturer.txt Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/security/data/att_manufacturer.txt Fri Jul 09 16:35:45 2010 +0300
@@ -36,5 +36,7 @@
grant assigned {
permission javax.microedition.PropertyPermission "mobinfo.msisdn" "read";
permission javax.microedition.PropertyPermission "mobinfo.cellid" "read";
+ permission javax.microedition.PropertyPermission "mobinfo.countrycode" "read";
+ permission javax.microedition.PropertyPermission "mobinfo.networkid" "read";
permission javax.microedition.midlet.AutoStartPermission;
}
diff -r 35baca0e7a2e -r 023eef975703 javacommons/security/data/att_operator.txt
--- a/javacommons/security/data/att_operator.txt Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/security/data/att_operator.txt Fri Jul 09 16:35:45 2010 +0300
@@ -35,8 +35,12 @@
}
grant user "Messaging" blanket,session,oneshot,no {
- permission javax.microedition.io.Connector.sms "sms://*" "send";
- permission javax.microedition.io.Connector.mms "mms://*" "send";
+ permission javax.microedition.io.Connector.sms "sms://*" "open,send,receive";
+ permission javax.microedition.io.Connector.mms "mms://*" "open,send,receive";
+}
+
+grant user "Restricted Messaging" blanket,no {
+ permission javax.microedition.io.Connector.cbs "cbs://*" "open,receive";
}
grant user "Multimedia Recording" blanket,session,oneshot,no {
@@ -52,12 +56,6 @@
permission javax.microedition.midlet.CmdLineArgsPermission;
}
-grant allowed {
- permission javax.microedition.io.Connector.sms "sms://*" "open,receive";
- permission javax.microedition.io.Connector.mms "mms://*" "open,receive";
- permission javax.microedition.io.Connector.cbs "cbs://*" "open,receive";
-}
-
grant assigned {
permission javax.microedition.midlet.AutoStartPermission;
}
diff -r 35baca0e7a2e -r 023eef975703 javacommons/security/data/att_trustedthirdparty.txt
--- a/javacommons/security/data/att_trustedthirdparty.txt Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/security/data/att_trustedthirdparty.txt Fri Jul 09 16:35:45 2010 +0300
@@ -13,8 +13,8 @@
}
grant user "Messaging" session,oneshot,no {
- permission javax.microedition.io.Connector.sms "sms://*" "send";
- permission javax.microedition.io.Connector.mms "mms://*" "send";
+ permission javax.microedition.io.Connector.sms "sms://*" "open,send,receive";
+ permission javax.microedition.io.Connector.mms "mms://*" "open,send,receive";
}
grant user "Multimedia Recording" session,oneshot,no {
@@ -25,8 +25,3 @@
grant user "Application Auto Invocation" session,oneshot,no {
permission javax.microedition.io.PushRegistryPermission "*" "staticregistration,dynamicregistration,autoinvocation";
}
-
-grant allowed {
- permission javax.microedition.io.Connector.sms "sms://*" "open,receive";
- permission javax.microedition.io.Connector.mms "mms://*" "open,receive";
-}
diff -r 35baca0e7a2e -r 023eef975703 javacommons/security/data/msa_trustedthirdparty.txt
--- a/javacommons/security/data/msa_trustedthirdparty.txt Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/security/data/msa_trustedthirdparty.txt Fri Jul 09 16:35:45 2010 +0300
@@ -71,6 +71,8 @@
permission javax.microedition.io.Connector.mms "mms://*" "open,receive";
permission javax.microedition.io.Connector.cbs "cbs://*" "open,receive";
}
-grant assigned {
+grant assigned "Location" {
permission javax.microedition.PropertyPermission "mobinfo.cellid" "read";
+ permission javax.microedition.PropertyPermission "mobinfo.countrycode" "read";
+ permission javax.microedition.PropertyPermission "mobinfo.networkid" "read";
}
diff -r 35baca0e7a2e -r 023eef975703 javacommons/security/data/msa_untrusted.txt
--- a/javacommons/security/data/msa_untrusted.txt Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/security/data/msa_untrusted.txt Fri Jul 09 16:35:45 2010 +0300
@@ -60,6 +60,8 @@
permission javax.microedition.io.Connector.mms "mms://*" "open,receive";
permission javax.microedition.io.Connector.cbs "cbs://*" "open,receive";
}
-grant assigned {
+grant assigned "Location" {
permission javax.microedition.PropertyPermission "mobinfo.cellid" "read";
+ permission javax.microedition.PropertyPermission "mobinfo.countrycode" "read";
+ permission javax.microedition.PropertyPermission "mobinfo.networkid" "read";
}
diff -r 35baca0e7a2e -r 023eef975703 javacommons/security/data/s60_operator.txt
--- a/javacommons/security/data/s60_operator.txt Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/security/data/s60_operator.txt Fri Jul 09 16:35:45 2010 +0300
@@ -36,5 +36,7 @@
grant assigned {
permission javax.microedition.PropertyPermission "mobinfo.msisdn" "read";
permission javax.microedition.PropertyPermission "mobinfo.cellid" "read";
+ permission javax.microedition.PropertyPermission "mobinfo.countrycode" "read";
+ permission javax.microedition.PropertyPermission "mobinfo.networkid" "read";
permission javax.microedition.midlet.AutoStartPermission;
}
diff -r 35baca0e7a2e -r 023eef975703 javacommons/security/data/s60_trustedthirdparty.txt
--- a/javacommons/security/data/s60_trustedthirdparty.txt Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/security/data/s60_trustedthirdparty.txt Fri Jul 09 16:35:45 2010 +0300
@@ -72,6 +72,9 @@
permission javax.microedition.io.Connector.mms "mms://*" "open,receive";
permission javax.microedition.io.Connector.cbs "cbs://*" "open,receive";
}
-grant assigned {
+
+grant assigned "Location" {
permission javax.microedition.PropertyPermission "mobinfo.cellid" "read";
+ permission javax.microedition.PropertyPermission "mobinfo.countrycode" "read";
+ permission javax.microedition.PropertyPermission "mobinfo.networkid" "read";
}
diff -r 35baca0e7a2e -r 023eef975703 javacommons/security/javasrc.cdc/com/nokia/mj/impl/security/midp/authorization/SecurityPolicy.java
--- a/javacommons/security/javasrc.cdc/com/nokia/mj/impl/security/midp/authorization/SecurityPolicy.java Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/security/javasrc.cdc/com/nokia/mj/impl/security/midp/authorization/SecurityPolicy.java Fri Jul 09 16:35:45 2010 +0300
@@ -132,13 +132,14 @@
int domainLength = buf[index];
index++;
protectionDomain = new String(buf, index, domainLength);
+ boolean activeSettings = true;
index+= domainLength;
int permissions = buf[index];
index++;
policyPermissions = new SecurityPolicyPermission[permissions];
for (int i=0; i hande it as deny
+ Logger.logWarning("User permission was denied by platform since it did not provide any security prompt question " + userPermission);
+ return handleDenyAnswer(settings);
+ }
// check if the two texts are equal
if ((mostPowerfulInteractionModeText != null
&& mostPowerfulInteractionModeText.equalsIgnoreCase(
diff -r 35baca0e7a2e -r 023eef975703 javacommons/security/javasrc/com/nokia/mj/impl/security/midp/common/NetworkRestrictionsAttribute.java
--- a/javacommons/security/javasrc/com/nokia/mj/impl/security/midp/common/NetworkRestrictionsAttribute.java Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/security/javasrc/com/nokia/mj/impl/security/midp/common/NetworkRestrictionsAttribute.java Fri Jul 09 16:35:45 2010 +0300
@@ -25,9 +25,8 @@
/**
* Specifies the allowed MCC (3 digits) and MNC (2 or 3 digits) tuples,
- * separated by a hyphen (Unicode U+002D), to limit the execution to certain
- * networks for any MIDlets within a MIDlet suite bound to the Operator
- * Protection Domain
+ * separated by a space. The tuples are used to limit the execution of
+ * Operator signed MIDlets
*/
public class NetworkRestrictionsAttribute
{
@@ -35,7 +34,7 @@
* The JAR attribute holding the network restriction info
*/
public static final String ATTRIBUTE_NAME
- = "MIDlet-Operator-Allowed";
+ = "Nokia-MIDlet-Operator-Allowed";
/* The network restrictions contained in the attribute */
private NetworkRestriction[] restrictions;
diff -r 35baca0e7a2e -r 023eef975703 javacommons/security/javasrc/com/nokia/mj/impl/security/midp/common/PermissionMappingTable.java
--- a/javacommons/security/javasrc/com/nokia/mj/impl/security/midp/common/PermissionMappingTable.java Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/security/javasrc/com/nokia/mj/impl/security/midp/common/PermissionMappingTable.java Fri Jul 09 16:35:45 2010 +0300
@@ -194,7 +194,6 @@
PERMISSION_MAPPING_TABLE.put(
"javax.microedition.io.Connector.vtag", new MIDPPermission(
"com.nokia.mj.impl.ccapi.utils.ContactlessCommunicationPermission", "vtag://*", "open"));
- // add name of MIDP3 class permissions
PERMISSION_MAPPING_TABLE.put(
"javax.microedition.io.SocketProtocolPermission", new MIDPPermission(
"com.nokia.mj.impl.gcf.protocol.socket.SocketPermissionImpl", "socket://*"));
@@ -229,6 +228,9 @@
"javax.microedition.midlet.AutoStartPermission", new MIDPPermission(
"com.nokia.mj.impl.installer.utils.AutoStartPermission", null));
PERMISSION_MAPPING_TABLE.put(
+ "AutoStartPermission", new MIDPPermission(
+ "com.nokia.mj.impl.installer.utils.AutoStartPermission", null));
+ PERMISSION_MAPPING_TABLE.put(
"javax.microedition.midlet.CmdLineArgsPermission", new MIDPPermission(
"com.nokia.mj.impl.rt.utils.CmdLineArgsPermission", null));
PERMISSION_MAPPING_TABLE.put(
diff -r 35baca0e7a2e -r 023eef975703 javacommons/security/javasrc/com/nokia/mj/impl/security/midp/storage/SecurityStorage.java
--- a/javacommons/security/javasrc/com/nokia/mj/impl/security/midp/storage/SecurityStorage.java Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/security/javasrc/com/nokia/mj/impl/security/midp/storage/SecurityStorage.java Fri Jul 09 16:35:45 2010 +0300
@@ -314,12 +314,13 @@
StorageNames.NAME);
String actionList = getStorageAttributeValue(permEntries[i],
StorageNames.ACTION);
- String fgName = getStorageAttributeValue(permEntries[i],
- StorageNames.FUNCTION_GROUP);
- if (fgName != null)
+ FunctionGroup fg = decodeFunctionGroup(
+ getStorageAttributeValue(permEntries[i],
+ StorageNames.FUNCTION_GROUP));
+ if (fg != null)
{
UserSecuritySettings cachedSettings =
- (UserSecuritySettings)fGroups.get(fgName);
+ (UserSecuritySettings)fGroups.get(fg.name);
if (cachedSettings != null)
{
permissions.addElement(
@@ -327,6 +328,7 @@
className,
target,
actionList,
+ fg.type,
cachedSettings));
}
else
@@ -338,7 +340,7 @@
appUID.getStringValue()));
fgQuery.addAttribute(new StorageAttribute(
StorageNames.FUNCTION_GROUP,
- fgName));
+ fg.name));
fgQuery.addAttribute(new StorageAttribute(
StorageNames.ALLOWED_SETTINGS,
""));
@@ -364,17 +366,19 @@
String blanketPrompt = getStorageAttributeValue(fgEntries[0],
StorageNames.BLANKET_PROMPT);
UserSecuritySettings settings = new UserSecuritySettingsImpl(
- fgName,
+ fg.name,
currentSetting,
decodeAllowedSettings(allowedSettings),
- ("1".equals(blanketPrompt) ? true : false));
+ ("1".equals(blanketPrompt) ? true : false),
+ fg.isActive);
permissions.addElement(
new PolicyBasedPermissionImpl(
className,
target,
actionList,
+ fg.type,
settings));
- fGroups.put(fgName, settings);
+ fGroups.put(fg.name, settings);
}
catch (NumberFormatException e)
{
@@ -394,7 +398,10 @@
null));
}
// cleanup the query, so it can be used at the next interation
- query.removeAttribute(fgName);
+ if (fg != null)
+ {
+ query.removeAttribute(fg.name);
+ }
}
}
// add the non user permissions into the set of returned permissions
@@ -483,7 +490,33 @@
StorageAttribute fgAttribute = new StorageAttribute(
StorageNames.FUNCTION_GROUP,
fgName);
- permEntry.addAttribute(fgAttribute);
+ if (p.getType() == PolicyBasedPermission.USER_ASSIGNED_TYPE
+ || !settings.isActive())
+ {
+ // the inactive settings or the settings of assigned
+ // permissions with user settings should be activated
+ // only after the first usage of the permission.
+ // Otherwise it creates confusion for the user,
+ // like in the following use cases:
+ // 1) the installation time dialog would include the assigned
+ // permissions even though the MIDlet did not request it
+ // 2) after installing a MIDlet suite and before accessing
+ // some protected functionality (which is guarder by
+ // assigned permission with user setting) the user sees
+ // the settings of the permissions in the MIDlet settings
+ // (even though the MIDlet might never access such
+ // functionality)
+ //
+ // disabling the settings = alter the name of the function
+ // group stored in PERMISSIONS table
+ permEntry.addAttribute(new StorageAttribute(
+ StorageNames.FUNCTION_GROUP,
+ encodeFunctionGroup(p.getType(),fgName)));
+ }
+ else
+ {
+ permEntry.addAttribute(fgAttribute);
+ }
// Do we need to check if the settings which already exist
// are equal to the ones which are to be inserted?
// This won't even happen, since all the settings are read
@@ -722,6 +755,10 @@
validCerts));
}
int securityWarningsMode = data.getSecurityWarningsMode();
+ if (update)
+ {
+ securityWarningsMode = readSecurityWarningsMode(appUID);
+ }
if (securityWarningsMode == GeneralSecuritySettings.DEFAULT_SECURITY_MODE
|| securityWarningsMode == GeneralSecuritySettings.USER_SECURITY_MODE)
{
@@ -1014,6 +1051,42 @@
}
}
}
+
+ /**
+ * Activates user security settings
+ *
+ * @param appUID the UID of the application whose user
+ settings are activatesversion is read
+ * @param settingsName the name of permission whose settings
+ * which are activated
+ */
+ public void activateUserSecuritySettings(
+ Uid msUID,
+ PolicyBasedPermission permission)
+ {
+ if (permission.getUserSecuritySettings() == null)
+ {
+ return;
+ }
+ StorageEntry oldEntry = new StorageEntry();
+ oldEntry.addAttribute(new StorageAttribute(
+ StorageAttribute.ID,
+ msUID.getStringValue()));
+ oldEntry.addAttribute(new StorageAttribute(
+ StorageNames.FUNCTION_GROUP,
+ encodeFunctionGroup(permission.getType(),
+ permission.getUserSecuritySettings().getName())));
+ StorageEntry newEntry = new StorageEntry();
+ newEntry.addAttribute(new StorageAttribute(
+ StorageAttribute.ID,
+ msUID.getStringValue()));
+ newEntry.addAttribute(new StorageAttribute(
+ StorageNames.FUNCTION_GROUP,
+ permission.getUserSecuritySettings().getName()));
+ doStorageUpdate(StorageNames.MIDP_PERMISSIONS_TABLE,
+ newEntry,
+ oldEntry);
+ }
/**
* Reads the value of the suite version attribute
@@ -1083,7 +1156,7 @@
appUID.getStringValue()));
query.addAttribute(new StorageAttribute(
StorageNames.NAME,
- "MIDlet-Operator-Allowed"));
+ "Nokia-MIDlet-Operator-Allowed"));
query.addAttribute(new StorageAttribute(
StorageNames.VALUE,
""));
@@ -1213,16 +1286,24 @@
if (oldSettings != null
&& newSettings != null)
{
+ boolean activeSettings = false;
+ if (oldSettings.isActive()
+ || newSettings.isActive())
+ {
+ activeSettings = true;
+ }
newGrantedPermissions.addElement(
new PolicyBasedPermissionImpl(
p.getName(),
p.getTarget(),
p.getActionList(),
+ p.getType(),
new UserSecuritySettingsImpl(
newSettings.getName(),
oldSettings.getCurrentInteractionMode(),
newSettings.getAllowedInteractionModes(),
- oldSettings.getBlanketPrompt())));
+ oldSettings.getBlanketPrompt(),
+ activeSettings)));
}
else
{
@@ -1792,4 +1873,46 @@
}
return NOT_FOUND;
}
+
+ private String encodeFunctionGroup(int type, String name)
+ {
+ return (type + ";" + name);
+ }
+
+ private FunctionGroup decodeFunctionGroup(String fg)
+ {
+ boolean isActive = true;
+ if (fg != null)
+ {
+ int sepIndex = fg.indexOf(";");
+ int type = PolicyBasedPermission.USER_TYPE;
+ if (sepIndex != -1)
+ {
+ isActive = false;
+ try
+ {
+ type = Integer.valueOf(
+ fg.substring(0, sepIndex)).intValue();
+ }
+ catch (NumberFormatException e)
+ {
+ }
+ }
+ return new FunctionGroup(type, fg.substring(sepIndex + 1), isActive);
+ }
+ return null;
+ }
+
+ private class FunctionGroup
+ {
+ FunctionGroup(int type, String name, boolean isActive)
+ {
+ this.type = type;
+ this.name = name;
+ this.isActive = isActive;
+ }
+ private boolean isActive;
+ private int type;
+ private String name;
+ }
}
diff -r 35baca0e7a2e -r 023eef975703 javacommons/security/javasrc/com/nokia/mj/impl/security/utils/SecurityDetailedErrorMessage.java
--- a/javacommons/security/javasrc/com/nokia/mj/impl/security/utils/SecurityDetailedErrorMessage.java Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/security/javasrc/com/nokia/mj/impl/security/utils/SecurityDetailedErrorMessage.java Fri Jul 09 16:35:45 2010 +0300
@@ -57,16 +57,32 @@
return iMessageTable;
}
Hashtable messageTable = new Hashtable();
- messageTable.put(new Integer(JAR_TAMPERED), "jar_tampered_details");
- messageTable.put(new Integer(CERT_DISABLED), "cert_disabled");
- messageTable.put(new Integer(CERT_DELETED), "cert_deleted");
- messageTable.put(new Integer(SIM_CHANGED), "sim_changed");
- messageTable.put(new Integer(UNIDENTIFIED_APPLICATION), "unidentified_application");
- messageTable.put(new Integer(NETWORK_RESTRICTION_VIOLATION), "net_restr_violation_details");
- messageTable.put(new Integer(OCSP_GENERAL_ERR), "ocsp_general_details");
- messageTable.put(new Integer(OCSP_SETTINGS_ERR), "ocsp_settings");
- messageTable.put(new Integer(OCSP_REVOKED_ERR), "ocsp_revoked");
- messageTable.put(new Integer(JAR_NOT_FOUND), "jar_not_found_details");
+ if (getLocaleIdQt() == null)
+ {
+ messageTable.put(new Integer(JAR_TAMPERED), "jar_tampered_details");
+ messageTable.put(new Integer(CERT_DISABLED), "cert_disabled");
+ messageTable.put(new Integer(CERT_DELETED), "cert_deleted");
+ messageTable.put(new Integer(SIM_CHANGED), "sim_changed");
+ messageTable.put(new Integer(UNIDENTIFIED_APPLICATION), "unidentified_application");
+ messageTable.put(new Integer(NETWORK_RESTRICTION_VIOLATION), "net_restr_violation_details");
+ messageTable.put(new Integer(OCSP_GENERAL_ERR), "ocsp_general_details");
+ messageTable.put(new Integer(OCSP_SETTINGS_ERR), "ocsp_settings");
+ messageTable.put(new Integer(OCSP_REVOKED_ERR), "ocsp_revoked");
+ messageTable.put(new Integer(JAR_NOT_FOUND), "jar_not_found_details");
+ }
+ else
+ {
+ messageTable.put(new Integer(JAR_TAMPERED), "jar_tampered_details");
+ messageTable.put(new Integer(CERT_DISABLED), "cert_disabled");
+ messageTable.put(new Integer(CERT_DELETED), "cert_deleted");
+ messageTable.put(new Integer(SIM_CHANGED), "sim_changed");
+ messageTable.put(new Integer(UNIDENTIFIED_APPLICATION), "unidentified_application");
+ messageTable.put(new Integer(NETWORK_RESTRICTION_VIOLATION), "net_restr_violation_details");
+ messageTable.put(new Integer(OCSP_GENERAL_ERR), "error_ocsp_general_details");
+ messageTable.put(new Integer(OCSP_SETTINGS_ERR), "error_ocsp_settings");
+ messageTable.put(new Integer(OCSP_REVOKED_ERR), "error_ocsp_revoked");
+ messageTable.put(new Integer(JAR_NOT_FOUND), "jar_not_found_details");
+ }
iMessageTable = messageTable;
return iMessageTable;
}
@@ -80,11 +96,37 @@
{
if (iRes == null)
{
- iRes = ResourceLoader.getInstance("javausermessages", "qtn_java_secur_error_");
+ if (getLocaleIdQt() == null)
+ {
+ iRes = ResourceLoader.getInstance(
+ "javausermessages", "qtn_java_secur_error_");
+ }
}
return iRes;
}
+ /**
+ * Method for retrieving the ResourceLoader instance that is used
+ * to localise error message for specified error code.
+ *
+ * @param errorCode error code for which ResourceLoader is returned
+ */
+ protected ResourceLoader getResourceLoader(int errorCode)
+ {
+ String resFilename = "javaapplicationsecuritymessages";
+ String resPrefix = "txt_java_secur_info_";
+ switch (errorCode)
+ {
+ case OCSP_GENERAL_ERR:
+ case OCSP_SETTINGS_ERR:
+ case OCSP_REVOKED_ERR:
+ resFilename = "javaapplicationinstaller";
+ resPrefix = "txt_java_secur_info_";
+ break;
+ }
+ return getResourceLoader(resFilename, resPrefix);
+ }
+
/*** ----------------------------- PACKAGE ---------------------------- */
/*** ----------------------------- PRIVATE ---------------------------- */
/*** ----------------------------- NATIVE ----------------------------- */
diff -r 35baca0e7a2e -r 023eef975703 javacommons/security/javasrc/com/nokia/mj/impl/security/utils/SecurityErrorMessage.java
--- a/javacommons/security/javasrc/com/nokia/mj/impl/security/utils/SecurityErrorMessage.java Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/security/javasrc/com/nokia/mj/impl/security/utils/SecurityErrorMessage.java Fri Jul 09 16:35:45 2010 +0300
@@ -49,12 +49,24 @@
return iMessageTable;
}
Hashtable messageTable = new Hashtable();
- messageTable.put(new Integer(JAR_TAMPERED), "jar_tampered");
- messageTable.put(new Integer(CERT_NOT_AVAILABLE), "cert_not_available");
- messageTable.put(new Integer(UNEXPECTED_ERR), "unexpected_err");
- messageTable.put(new Integer(NETWORK_RESTRICTION_VIOLATION), "net_restr_violation");
- messageTable.put(new Integer(OCSP_GENERAL_ERR), "ocsp_general");
- messageTable.put(new Integer(JAR_NOT_FOUND), "jar_not_found");
+ if (getLocaleIdQt() == null)
+ {
+ messageTable.put(new Integer(JAR_TAMPERED), "jar_tampered");
+ messageTable.put(new Integer(CERT_NOT_AVAILABLE), "cert_not_available");
+ messageTable.put(new Integer(UNEXPECTED_ERR), "unexpected_err");
+ messageTable.put(new Integer(NETWORK_RESTRICTION_VIOLATION), "net_restr_violation");
+ messageTable.put(new Integer(OCSP_GENERAL_ERR), "ocsp_general");
+ messageTable.put(new Integer(JAR_NOT_FOUND), "jar_not_found");
+ }
+ else
+ {
+ messageTable.put(new Integer(JAR_TAMPERED), "jar_tampered");
+ messageTable.put(new Integer(CERT_NOT_AVAILABLE), "cert_not_available");
+ messageTable.put(new Integer(UNEXPECTED_ERR), "unexpected_error");
+ messageTable.put(new Integer(NETWORK_RESTRICTION_VIOLATION), "net_restr_violation");
+ messageTable.put(new Integer(OCSP_GENERAL_ERR), "there_is_a_security_issue_with_this");
+ messageTable.put(new Integer(JAR_NOT_FOUND), "error_jar_not_found");
+ }
iMessageTable = messageTable;
return iMessageTable;
}
@@ -68,11 +80,39 @@
{
if (iRes == null)
{
- iRes = ResourceLoader.getInstance("javausermessages", "qtn_java_secur_error_");
+ // This method returns ResourceLoader only when Qt
+ // localisation is not in use. When Qt localisation
+ // is in use this method returns null and
+ // ResourceLoader is obtained with getResourceLoader(int)
+ // method variant.
+ if (getLocaleIdQt() == null)
+ {
+ iRes = ResourceLoader.getInstance("javausermessages", "qtn_java_secur_error_");
+ }
}
return iRes;
}
+ /**
+ * Method for retrieving the ResourceLoader instance that is used
+ * to localise error message for specified error code.
+ *
+ * @param errorCode error code for which ResourceLoader is returned
+ */
+ protected ResourceLoader getResourceLoader(int errorCode)
+ {
+ String resFilename = "javaapplicationsecuritymessages";
+ String resPrefix = "txt_java_secur_info_";
+ switch (errorCode)
+ {
+ case OCSP_GENERAL_ERR:
+ resFilename = "common_errors";
+ resPrefix = "txt_error_info_";
+ break;
+ }
+ return getResourceLoader(resFilename, resPrefix);
+ }
+
/*** ----------------------------- PACKAGE ---------------------------- */
/*** ----------------------------- PRIVATE ---------------------------- */
/*** ----------------------------- NATIVE ----------------------------- */
diff -r 35baca0e7a2e -r 023eef975703 javacommons/security/javaunicertstoreplugin/src.s60/200213A3.rss
--- a/javacommons/security/javaunicertstoreplugin/src.s60/200213A3.rss Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/security/javaunicertstoreplugin/src.s60/200213A3.rss Fri Jul 09 16:35:45 2010 +0300
@@ -18,7 +18,7 @@
// INCLUDES
-#include
+#include
#include
// Some defines of useful values for attributes to simplify
diff -r 35baca0e7a2e -r 023eef975703 javacommons/security/javaunicertstoreplugin/src.s60/javacertstoreimpl.cpp
--- a/javacommons/security/javaunicertstoreplugin/src.s60/javacertstoreimpl.cpp Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/security/javaunicertstoreplugin/src.s60/javacertstoreimpl.cpp Fri Jul 09 16:35:45 2010 +0300
@@ -175,7 +175,7 @@
case EPreDeleting:
SendDeleteMsg(status);
return;
-
+
default:
//Do nothing.
break;
@@ -250,7 +250,7 @@
User::RequestComplete(pRequestStatus,KErrArgument);
return;
}
-
+
mState = EPreDeleting;
mTempCertData = certData;
HandleDeleteDisableQuery(aStatus, false /* disableCertQuery */);
@@ -489,12 +489,13 @@
return;
}
+ TInt err = KErrNone;
if (!certData->mIsDisabled)
{
- aApplications.Append(KMidletInstallApplicabilityUid);
+ err = aApplications.Append(KMidletInstallApplicabilityUid);
}
- User::RequestComplete(pRequestStatus,KErrNone);
+ User::RequestComplete(pRequestStatus, err);
}
/**
@@ -835,7 +836,7 @@
User::RequestComplete(aRequestStatus,KErrCommsBreak);
return EFalse;
}
-
+
return ETrue;
}
@@ -971,7 +972,7 @@
//operation in the error situation.
return;
}
- aCertDataObj.mDeleted = ETrue;
+ aCertDataObj.mDeleted = ETrue;
User::RequestComplete(aRequestStatus,KErrNone);
}
diff -r 35baca0e7a2e -r 023eef975703 javacommons/security/legacysupport/midp2securitypolicyv2/plugins/securitypolicyV2/src/BlanketPermissionPolicy.cpp
--- a/javacommons/security/legacysupport/midp2securitypolicyv2/plugins/securitypolicyV2/src/BlanketPermissionPolicy.cpp Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/security/legacysupport/midp2securitypolicyv2/plugins/securitypolicyV2/src/BlanketPermissionPolicy.cpp Fri Jul 09 16:35:45 2010 +0300
@@ -61,9 +61,9 @@
}
-void CBlanketPermissionPolicy::Add(const CBlanketPermissionPolicyElement *aElement)
+void CBlanketPermissionPolicy::AddL(const CBlanketPermissionPolicyElement *aElement)
{
- iPolicyElements.Append(aElement);
+ iPolicyElements.AppendL(aElement);
}
diff -r 35baca0e7a2e -r 023eef975703 javacommons/security/legacysupport/midp2securitypolicyv2/plugins/securitypolicyV2/src/BlanketPermissionPolicy.h
--- a/javacommons/security/legacysupport/midp2securitypolicyv2/plugins/securitypolicyV2/src/BlanketPermissionPolicy.h Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/security/legacysupport/midp2securitypolicyv2/plugins/securitypolicyV2/src/BlanketPermissionPolicy.h Fri Jul 09 16:35:45 2010 +0300
@@ -49,7 +49,7 @@
static CBlanketPermissionPolicy* NewL();
- void Add(const CBlanketPermissionPolicyElement *);
+ void AddL(const CBlanketPermissionPolicyElement *);
// MBlanketPermissionPolicy
virtual TInt GetPolicyElementCount() const ;
diff -r 35baca0e7a2e -r 023eef975703 javacommons/security/legacysupport/midp2securitypolicyv2/plugins/securitypolicyV2/src/SimpleMapping.cpp
--- a/javacommons/security/legacysupport/midp2securitypolicyv2/plugins/securitypolicyV2/src/SimpleMapping.cpp Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/security/legacysupport/midp2securitypolicyv2/plugins/securitypolicyV2/src/SimpleMapping.cpp Fri Jul 09 16:35:45 2010 +0300
@@ -61,7 +61,7 @@
for (TInt i = 0; i < count; i++)
{
- iMapping.Append(aMapping[i]);
+ iMapping.AppendL(aMapping[i]);
}
}
diff -r 35baca0e7a2e -r 023eef975703 javacommons/security/legacysupport/midp2securitypolicyv2/plugins/securitypolicyV2/src/XPFParser.cpp
--- a/javacommons/security/legacysupport/midp2securitypolicyv2/plugins/securitypolicyV2/src/XPFParser.cpp Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/security/legacysupport/midp2securitypolicyv2/plugins/securitypolicyV2/src/XPFParser.cpp Fri Jul 09 16:35:45 2010 +0300
@@ -385,8 +385,8 @@
//Add the sets and permission downgrade policy to the
//CBlanketPermissionPolicy object for this domain
+ aBlanketPermissionPolicy->AddL(pe);
CleanupStack::Pop(pe);
- aBlanketPermissionPolicy->Add(pe);
DEBUG("CXPFParser::ExclusionSetL() - Exit");
}
diff -r 35baca0e7a2e -r 023eef975703 javacommons/security/legacysupport/midp2userpreferences/src/MIDP2UserPreferences.cpp
--- a/javacommons/security/legacysupport/midp2userpreferences/src/MIDP2UserPreferences.cpp Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/security/legacysupport/midp2userpreferences/src/MIDP2UserPreferences.cpp Fri Jul 09 16:35:45 2010 +0300
@@ -22,8 +22,8 @@
#include "UserPreferencesIterator.h"
#include "MIDletSuiteUserPreferences.h"
#include "MIDletSuiteCustomAttributes.h"
-#include
-#include
+#include "MUserSecurityPreferencesTable.h"
+#include "j2me/midp2/security/MSecurityPolicyV2.h"
#include "SecurityPreferences.h"
#include "javauid.h"
diff -r 35baca0e7a2e -r 023eef975703 javacommons/security/legacysupport/tsrc/build/securitylegacysupportunittests.mmp
--- a/javacommons/security/legacysupport/tsrc/build/securitylegacysupportunittests.mmp Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/security/legacysupport/tsrc/build/securitylegacysupportunittests.mmp Fri Jul 09 16:35:45 2010 +0300
@@ -22,11 +22,6 @@
#include <../../../../../inc/java_stdcpp_support_for_exe.hrh>
#include
-SYSTEMINCLUDE /epoc32/include
-SYSTEMINCLUDE ../../../../../inc/j2me/midp2/security
-SYSTEMINCLUDE ../../../../../inc/j2me/midp2/data
-SYSTEMINCLUDE ../../../../../inc/j2me/midp2/runtime
-
USERINCLUDE ../../../../../tools/cpputest/include/cpputest
USERINCLUDE ../../../../../tools/cpputest/include/platforms/symbian
USERINCLUDE ../../../../../inc
diff -r 35baca0e7a2e -r 023eef975703 javacommons/security/legacysupport/tsrc/src/testsecuritypolicy.cpp
--- a/javacommons/security/legacysupport/tsrc/src/testsecuritypolicy.cpp Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/security/legacysupport/tsrc/src/testsecuritypolicy.cpp Fri Jul 09 16:35:45 2010 +0300
@@ -20,7 +20,7 @@
#include "TestHarness.h"
-#include
+#include "j2me/midp2/security/msecuritypolicyv2.h"
using namespace MIDP;
diff -r 35baca0e7a2e -r 023eef975703 javacommons/security/tsrc/data/javasrc/invalidjars/ImplementProtectedInterface/myClass.java
--- a/javacommons/security/tsrc/data/javasrc/invalidjars/ImplementProtectedInterface/myClass.java Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/security/tsrc/data/javasrc/invalidjars/ImplementProtectedInterface/myClass.java Fri Jul 09 16:35:45 2010 +0300
@@ -32,6 +32,11 @@
return null;
}
+ public boolean isActive()
+ {
+ return true;
+ }
+
public int getCurrentInteractionMode()
{
return 0;
diff -r 35baca0e7a2e -r 023eef975703 javacommons/security/tsrc/data/policies/test_trustedthirdparty.txt
--- a/javacommons/security/tsrc/data/policies/test_trustedthirdparty.txt Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/security/tsrc/data/policies/test_trustedthirdparty.txt Fri Jul 09 16:35:45 2010 +0300
@@ -72,3 +72,9 @@
permission javax.microedition.io.Connector.mms "mms://*" "open,receive";
permission javax.microedition.io.Connector.cbs "cbs://*" "open,receive";
}
+
+grant assigned "Location" {
+ permission javax.microedition.PropertyPermission "mobinfo.cellid" "read";
+ permission javax.microedition.PropertyPermission "mobinfo.countrycode" "read";
+ permission javax.microedition.PropertyPermission "mobinfo.networkid" "read";
+}
diff -r 35baca0e7a2e -r 023eef975703 javacommons/security/tsrc/data/validpolicies/assigned_settings_only.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javacommons/security/tsrc/data/validpolicies/assigned_settings_only.txt Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,4 @@
+domain operator;
+grant assigned "Settings" oneshot {
+ permission assigned.permission.invalid.settings;
+}
diff -r 35baca0e7a2e -r 023eef975703 javacommons/security/tsrc/data/validpolicies/assigned_settings_orphaned.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javacommons/security/tsrc/data/validpolicies/assigned_settings_orphaned.txt Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,4 @@
+domain operator;
+grant assigned "Settings" {
+ permission assigned.permission.orphaned;
+}
diff -r 35baca0e7a2e -r 023eef975703 javacommons/security/tsrc/data/validpolicies/validators/assigned_and_user_settings.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javacommons/security/tsrc/data/validpolicies/validators/assigned_and_user_settings.txt Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,3 @@
+domain=mydomain
+user_assigned?Settings:blanket:no?assigned.user.permission
+user?Settings:blanket:no?user.permission
diff -r 35baca0e7a2e -r 023eef975703 javacommons/security/tsrc/data/validpolicies/validators/assigned_settings_only.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javacommons/security/tsrc/data/validpolicies/validators/assigned_settings_only.txt Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,2 @@
+domain=operator
+user_assigned?Settings:oneshot:no?assigned.permission.invalid.settings
diff -r 35baca0e7a2e -r 023eef975703 javacommons/security/tsrc/data/validpolicies/validators/assigned_settings_orphaned.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javacommons/security/tsrc/data/validpolicies/validators/assigned_settings_orphaned.txt Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,2 @@
+domain=operator
+assigned?assigned.permission.orphaned
diff -r 35baca0e7a2e -r 023eef975703 javacommons/security/tsrc/data/validpolicies/validators/domain_without_end_separator.txt
--- a/javacommons/security/tsrc/data/validpolicies/validators/domain_without_end_separator.txt Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/security/tsrc/data/validpolicies/validators/domain_without_end_separator.txt Fri Jul 09 16:35:45 2010 +0300
@@ -1,2 +1,2 @@
domain=operator
-allowed,javax.microedition.midlet.AutoStartPermission
+allowed?javax.microedition.midlet.AutoStartPermission
diff -r 35baca0e7a2e -r 023eef975703 javacommons/security/tsrc/data/validpolicies/validators/ignore_interaction_modes_for_allowed_group.txt
--- a/javacommons/security/tsrc/data/validpolicies/validators/ignore_interaction_modes_for_allowed_group.txt Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/security/tsrc/data/validpolicies/validators/ignore_interaction_modes_for_allowed_group.txt Fri Jul 09 16:35:45 2010 +0300
@@ -1,3 +1,3 @@
domain=Manufacturer
-allowed,javax.microedition.io.HttpProtocolPermission,http://*
+allowed?javax.microedition.io.HttpProtocolPermission,http://*
diff -r 35baca0e7a2e -r 023eef975703 javacommons/security/tsrc/data/validpolicies/validators/manufacturer_like_policy.txt
--- a/javacommons/security/tsrc/data/validpolicies/validators/manufacturer_like_policy.txt Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/security/tsrc/data/validpolicies/validators/manufacturer_like_policy.txt Fri Jul 09 16:35:45 2010 +0300
@@ -1,23 +1,23 @@
domain=Manufacturer
-allowed,javax.microedition.io.HttpProtocolPermission,http://*
-allowed,javax.microedition.io.HttpsProtocolPermission,https://*
-allowed,javax.microedition.io.DatagramProtocolPermission,datagram://*
-allowed,javax.microedition.io.DatagramProtocolPermission,datagram://
-allowed,javax.microedition.io.SocketProtocolPermission,socket://*
-allowed,javax.microedition.io.SocketProtocolPermission,socket://
-allowed,javax.microedition.io.SSLProtocolPermission,ssl://*
-allowed,javax.microedition.io.PushRegistryPermission,*
-allowed,javax.microedition.io.CommProtocolPermission,comm:*
-allowed,javax.microedition.media.PlayerPermission,*,record
-allowed,javax.microedition.media.PlayerPermission,*,snapshot
-allowed,java.util.PropertyPermission,*,read
-allowed,javax.microedition.event.EventPermission,*,read
-allowed,javax.microedition.event.EventPermission,*,register
-allowed,javax.microedition.event.EventPermission,*,post
-allowed,javax.microedition.midlet.ActionsDeniedPermission
-allowed,javax.microedition.midlet.AutoStartPermission
-assigned,java.util.PropertyPermission,microedition.*,read
-assigned,javax.microedition.event.EventPermission,*.*,read
-assigned,javax.microedition.event.EventPermission,*.*,register
-assigned,javax.microedition.event.EventPermission,*.*,post
+allowed?javax.microedition.io.HttpProtocolPermission,http://*
+allowed?javax.microedition.io.HttpsProtocolPermission,https://*
+allowed?javax.microedition.io.DatagramProtocolPermission,datagram://*
+allowed?javax.microedition.io.DatagramProtocolPermission,datagram://
+allowed?javax.microedition.io.SocketProtocolPermission,socket://*
+allowed?javax.microedition.io.SocketProtocolPermission,socket://
+allowed?javax.microedition.io.SSLProtocolPermission,ssl://*
+allowed?javax.microedition.io.PushRegistryPermission,*
+allowed?javax.microedition.io.CommProtocolPermission,comm:*
+allowed?javax.microedition.media.PlayerPermission,*,record
+allowed?javax.microedition.media.PlayerPermission,*,snapshot
+allowed?java.util.PropertyPermission,*,read
+allowed?javax.microedition.event.EventPermission,*,read
+allowed?javax.microedition.event.EventPermission,*,register
+allowed?javax.microedition.event.EventPermission,*,post
+allowed?javax.microedition.midlet.ActionsDeniedPermission
+allowed?javax.microedition.midlet.AutoStartPermission
+assigned?java.util.PropertyPermission,microedition.*,read
+assigned?javax.microedition.event.EventPermission,*.*,read
+assigned?javax.microedition.event.EventPermission,*.*,register
+assigned?javax.microedition.event.EventPermission,*.*,post
diff -r 35baca0e7a2e -r 023eef975703 javacommons/security/tsrc/data/validpolicies/validators/permission_without_end_terminator.txt
--- a/javacommons/security/tsrc/data/validpolicies/validators/permission_without_end_terminator.txt Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/security/tsrc/data/validpolicies/validators/permission_without_end_terminator.txt Fri Jul 09 16:35:45 2010 +0300
@@ -1,5 +1,5 @@
domain=operator
-allowed,javax.microedition.midlet.AutoStartPermission
-allowed,javax.microedition.midlet.OtherAutoStartPermission
+allowed?javax.microedition.midlet.AutoStartPermission
+allowed?javax.microedition.midlet.OtherAutoStartPermission
diff -r 35baca0e7a2e -r 023eef975703 javacommons/security/tsrc/javasrc/com/nokia/mj/impl/security/OMJSecurityTests.java
--- a/javacommons/security/tsrc/javasrc/com/nokia/mj/impl/security/OMJSecurityTests.java Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/security/tsrc/javasrc/com/nokia/mj/impl/security/OMJSecurityTests.java Fri Jul 09 16:35:45 2010 +0300
@@ -740,7 +740,27 @@
UserSecuritySettings.SESSION_INTERACTION_MODE})),
new PolicyBasedPermissionImpl("java.util.PropertyPermission", "microedition.*", "read", null),
new PolicyBasedPermissionImpl(p4.getName(), "mobinfo.publicinfo", "read", null),
- new PolicyBasedPermissionImpl(p4.getName(), "mobinfo.cellid", "read", null),
+ new PolicyBasedPermissionImpl(p4.getName(), "mobinfo.cellid", "read",
+ new UserSecuritySettingsImpl("Location",
+ UserSecuritySettings.SESSION_INTERACTION_MODE,
+ new int[]{UserSecuritySettings.BLANKET_INTERACTION_MODE,
+ UserSecuritySettings.NO_INTERACTION_MODE,
+ UserSecuritySettings.ONESHOT_INTERACTION_MODE,
+ UserSecuritySettings.SESSION_INTERACTION_MODE})),
+ new PolicyBasedPermissionImpl(p4.getName(), "mobinfo.countrycode", "read",
+ new UserSecuritySettingsImpl("Location",
+ UserSecuritySettings.SESSION_INTERACTION_MODE,
+ new int[]{UserSecuritySettings.BLANKET_INTERACTION_MODE,
+ UserSecuritySettings.NO_INTERACTION_MODE,
+ UserSecuritySettings.ONESHOT_INTERACTION_MODE,
+ UserSecuritySettings.SESSION_INTERACTION_MODE})),
+ new PolicyBasedPermissionImpl(p4.getName(), "mobinfo.networkid", "read",
+ new UserSecuritySettingsImpl("Location",
+ UserSecuritySettings.SESSION_INTERACTION_MODE,
+ new int[]{UserSecuritySettings.BLANKET_INTERACTION_MODE,
+ UserSecuritySettings.NO_INTERACTION_MODE,
+ UserSecuritySettings.ONESHOT_INTERACTION_MODE,
+ UserSecuritySettings.SESSION_INTERACTION_MODE})),
new PolicyBasedPermissionImpl("com.nokia.ext2.internal.Ext2Perm", "ext2.target4", "ext2.action4", null),
}));
// getBlanketPermissions: while installing V1 the permissions are not put to blanket, while installing V2 there are some blanket permissions returned
@@ -779,6 +799,8 @@
StorageNames.VALUE,
"MIICWDCCAcECBEhQwOgwDQYJKoZIhvcNAQEEBQAwczELMAkGA1UEBhMCZmkxEjAQBgNVBAgTCVBpcmthbm1hYTEQMA4GA1UEBxMHVGFtcGVyZTEOMAwGA1UEChMFTm9raWExDTALBgNVBAsTBEphdmExHzAdBgNVBAMMFkpQX1RoaXJkX1BhcnR5X1RydXN0ZWQwHhcNMDgwNjEyMDYyMzM2WhcNMTgwNjEwMDYyMzM2WjBzMQswCQYDVQQGEwJmaTESMBAGA1UECBMJUGlya2FubWFhMRAwDgYDVQQHEwdUYW1wZXJlMQ4wDAYDVQQKEwVOb2tpYTENMAsGA1UECxMESmF2YTEfMB0GA1UEAwwWSlBfVGhpcmRfUGFydHlfVHJ1c3RlZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEArAesh03rswICRUjexWMoIH9ZZqUtlx+tfhZhuzuYhiL6cLdhxNlU8yuIdw4f17XP3yxVIB8rz1EEagCMd0Y5ZleNFZ992ReLcf9VH13RxaZ88PRxBLLROm1jcwTknYSS6AxGMup77DMwwFSN8XPnOHWt4aLGUrecMeUyI2c5UbsCAwEAATANBgkqhkiG9w0BAQQFAAOBgQAylJ+3aSq6a7AAL7UM8V8JhGZlLneErF7A/BJGDi7Vmr5gmlGyf6RCJJIg4qCp+J3Tv3eCRNNuphQaSRdFpaulwCmtfCzSZNtvZg0VhMOVsZqTwQgmP6NzKoIbqqzlgm5U+yUJw8FmX17vgdeSEdJ/oL/WT4AKrWFJYl8MdQ9ZnQ=="));
session.write(StorageNames.APPLICATION_PACKAGE_ATTRIBUTES_TABLE, appPackageEntry);
+ permissionGranter.cleanup();
+ PermissionResolver.testClearCache();
allAttributes.clear();
allAttributes.put(MIDP_PROFILE_ATTRIBUTE_NAME,new Attribute("",MIDP2));
allAttributes.put(AuthenticationAttribute.MAIN_ATTRIBUTE_PREFIX + "1-1", new Attribute("", "MIICWDCCAcECBEhQwOgwDQYJKoZIhvcNAQEEBQAwczELMAkGA1UEBhMCZmkxEjAQBgNVBAgTCVBpcmthbm1hYTEQMA4GA1UEBxMHVGFtcGVyZTEOMAwGA1UEChMFTm9raWExDTALBgNVBAsTBEphdmExHzAdBgNVBAMMFkpQX1RoaXJkX1BhcnR5X1RydXN0ZWQwHhcNMDgwNjEyMDYyMzM2WhcNMTgwNjEwMDYyMzM2WjBzMQswCQYDVQQGEwJmaTESMBAGA1UECBMJUGlya2FubWFhMRAwDgYDVQQHEwdUYW1wZXJlMQ4wDAYDVQQKEwVOb2tpYTENMAsGA1UECxMESmF2YTEfMB0GA1UEAwwWSlBfVGhpcmRfUGFydHlfVHJ1c3RlZDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEArAesh03rswICRUjexWMoIH9ZZqUtlx+tfhZhuzuYhiL6cLdhxNlU8yuIdw4f17XP3yxVIB8rz1EEagCMd0Y5ZleNFZ992ReLcf9VH13RxaZ88PRxBLLROm1jcwTknYSS6AxGMup77DMwwFSN8XPnOHWt4aLGUrecMeUyI2c5UbsCAwEAATANBgkqhkiG9w0BAQQFAAOBgQAylJ+3aSq6a7AAL7UM8V8JhGZlLneErF7A/BJGDi7Vmr5gmlGyf6RCJJIg4qCp+J3Tv3eCRNNuphQaSRdFpaulwCmtfCzSZNtvZg0VhMOVsZqTwQgmP6NzKoIbqqzlgm5U+yUJw8FmX17vgdeSEdJ/oL/WT4AKrWFJYl8MdQ9ZnQ=="));
diff -r 35baca0e7a2e -r 023eef975703 javacommons/security/tsrc/javasrc/com/nokia/mj/impl/security/midp/authentication/AuthenticationModuleTests.java
--- a/javacommons/security/tsrc/javasrc/com/nokia/mj/impl/security/midp/authentication/AuthenticationModuleTests.java Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/security/tsrc/javasrc/com/nokia/mj/impl/security/midp/authentication/AuthenticationModuleTests.java Fri Jul 09 16:35:45 2010 +0300
@@ -1046,8 +1046,8 @@
}
catch (RuntimeSecurityException e)
{
- assertTrue(e.getShortMessage().equals(securityErrorMessage.get(SecurityErrorMessage.JAR_TAMPERED, null))
- && e.getDetailedMessage().equals(securityDetailedErrorMessage.get(SecurityDetailedErrorMessage.JAR_TAMPERED, null)));
+ assertTrue(e.getShortMessage().equals(securityErrorMessage.get(SecurityErrorMessage.JAR_NOT_FOUND, null))
+ && e.getDetailedMessage().equals(securityDetailedErrorMessage.get(SecurityDetailedErrorMessage.JAR_NOT_FOUND, null)));
}
// root not enabled
try
@@ -1105,7 +1105,7 @@
appUID.getStringValue()));
entry.addAttribute(new StorageAttribute(
StorageNames.NAME,
- "MIDlet-Operator-Allowed"));
+ "Nokia-MIDlet-Operator-Allowed"));
entry.addAttribute(new StorageAttribute(
StorageNames.VALUE,
"123-45 456-789 000-000"));
@@ -1126,7 +1126,7 @@
appUID.getStringValue()));
entry.addAttribute(new StorageAttribute(
StorageNames.NAME,
- "MIDlet-Operator-Allowed"));
+ "Nokia-MIDlet-Operator-Allowed"));
entry.addAttribute(new StorageAttribute(
StorageNames.VALUE,
"123-45"));
@@ -1147,7 +1147,7 @@
appUID.getStringValue()));
entry.addAttribute(new StorageAttribute(
StorageNames.NAME,
- "MIDlet-Operator-Allowed"));
+ "Nokia-MIDlet-Operator-Allowed"));
entry.addAttribute(new StorageAttribute(
StorageNames.VALUE,
"123-45"));
diff -r 35baca0e7a2e -r 023eef975703 javacommons/utils/inc/logger.h
--- a/javacommons/utils/inc/logger.h Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/utils/inc/logger.h Fri Jul 09 16:35:45 2010 +0300
@@ -116,6 +116,7 @@
EJavaAppMngrPlugin, // =35
EJavaBroadcast, // =36
EJavaAMMS, // =37
+ EJavaSettings, // =38
// add id of new components here
};
@@ -173,6 +174,7 @@
{"JavaAppMngrPlugin.log","[JavaAppMngrPlugin]"}, // EJavaAppMngrPlugin
{"JavaBroadcast.log", "[JavaBroadcast]"}, // EJavaBroadcast
{"JavaMMAPI.log", "[ MMAPPI ]"}, // EJavaAMMS
+ {"JavaSettings.log", "[ JavaSettings ]"}, // EJavaSettings
// add new component file name and nickname here
};
diff -r 35baca0e7a2e -r 023eef975703 javacommons/utils/javasrc/com/nokia/mj/impl/utils/ErrorMessageBase.java
--- a/javacommons/utils/javasrc/com/nokia/mj/impl/utils/ErrorMessageBase.java Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/utils/javasrc/com/nokia/mj/impl/utils/ErrorMessageBase.java Fri Jul 09 16:35:45 2010 +0300
@@ -62,7 +62,12 @@
{
return this.getClass().getName() + ": No message found for error " + errorCode;
}
- return getResourceLoader().format(msgId, errorMessageParameters);
+ ResourceLoader rl = getResourceLoader();
+ if (rl == null)
+ {
+ rl = getResourceLoader(errorCode);
+ }
+ return rl.format(msgId, errorMessageParameters);
}
/*** ---------------------------- PROTECTED --------------------------- */
@@ -76,11 +81,64 @@
/**
* Method for retrieving the ResourceLoader instance that is used
- * to localise error messages.
+ * to localise error messages. If this method returns null,
+ * the ResourceLoader is obtained with getResourceLoader(int)
+ * method variant which then must not return null.
+ *
* This method must be overriden in inheriting class.
*/
abstract protected ResourceLoader getResourceLoader();
+ /**
+ * Method for retrieving the ResourceLoader instance that is used
+ * to localise error message for specified error code.
+ * This method must be overriden in inheriting class if
+ * the getResourceLoader() method variant returns null.
+ *
+ * @param errorCode error code for which ResourceLoader is returned
+ */
+ protected ResourceLoader getResourceLoader(int errorCode)
+ {
+ return null;
+ }
+
+ /**
+ * Method for retrieving the ResourceLoader instance.
+ * This method is called from inheriting class
+ * getResourceLoader(int) method variant.
+ *
+ * @param textFilename name for text file
+ * @param textPrefix prefix for text ids
+ */
+ private static Hashtable iResourceLoaderTable = null;
+ protected static ResourceLoader getResourceLoader(String textFilename, String textPrefix)
+ {
+ String key = textFilename + "::" + textPrefix;
+ if (iResourceLoaderTable == null)
+ {
+ iResourceLoaderTable = new Hashtable();
+ }
+ ResourceLoader rl = (ResourceLoader)iResourceLoaderTable.get(key);
+ if (rl == null)
+ {
+ rl = ResourceLoader.getInstance(textFilename, textPrefix);
+ iResourceLoaderTable.put(key, rl);
+ }
+ return rl;
+ }
+
+ /**
+ * Gets the Qt locale ID currently being used on the phone.
+ *
+ * @return Qt locale ID as provided by the platform
+ */
+ protected static String getLocaleIdQt()
+ {
+ // Change this after Qt localisation files are taken into use.
+ //return ResourceLoader.getLocaleIdQt();
+ return null;
+ }
+
/*** ----------------------------- PACKAGE ---------------------------- */
/*** ----------------------------- PRIVATE ---------------------------- */
/*** ----------------------------- NATIVE ----------------------------- */
diff -r 35baca0e7a2e -r 023eef975703 javacommons/utils/javasrc/com/nokia/mj/impl/utils/InstallerDetailedErrorMessage.java
--- a/javacommons/utils/javasrc/com/nokia/mj/impl/utils/InstallerDetailedErrorMessage.java Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/utils/javasrc/com/nokia/mj/impl/utils/InstallerDetailedErrorMessage.java Fri Jul 09 16:35:45 2010 +0300
@@ -57,9 +57,7 @@
return iMessageTable;
}
Hashtable messageTable = new Hashtable();
- // Change this after Qt localisation files are in place.
- //if (ResourceLoader.getLocaleIdQt() == null)
- if (true)
+ if (getLocaleIdQt() == null)
{
messageTable.put(new Integer(NO_MEM), "no_mem_detail");
messageTable.put(new Integer(NO_MEM_MB), "no_mem_detail_mb");
@@ -108,9 +106,7 @@
{
if (iRes == null)
{
- // Change this after Qt localisation files are in place.
- //if (ResourceLoader.getLocaleIdQt() == null)
- if (true)
+ if (getLocaleIdQt() == null)
{
iRes = ResourceLoader.getInstance("javainstallation", "qtn_java_inst_error_");
}
diff -r 35baca0e7a2e -r 023eef975703 javacommons/utils/javasrc/com/nokia/mj/impl/utils/InstallerErrorMessage.java
--- a/javacommons/utils/javasrc/com/nokia/mj/impl/utils/InstallerErrorMessage.java Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/utils/javasrc/com/nokia/mj/impl/utils/InstallerErrorMessage.java Fri Jul 09 16:35:45 2010 +0300
@@ -63,9 +63,7 @@
return iMessageTable;
}
Hashtable messageTable = new Hashtable();
- // Change this after Qt localisation files are in place.
- //if (ResourceLoader.getLocaleIdQt() == null)
- if (true)
+ if (getLocaleIdQt() == null)
{
messageTable.put(new Integer(INST_NO_MEM), "no_mem");
messageTable.put(new Integer(INST_NO_NET), "no_net");
@@ -110,9 +108,7 @@
{
if (iRes == null)
{
- // Change this after Qt localisation files are in place.
- //if (ResourceLoader.getLocaleIdQt() == null)
- if (true)
+ if (getLocaleIdQt() == null)
{
iRes = ResourceLoader.getInstance("javainstallation", "qtn_java_inst_error_");
}
diff -r 35baca0e7a2e -r 023eef975703 javacommons/utils/javasrc/com/nokia/mj/impl/utils/Logger.java
--- a/javacommons/utils/javasrc/com/nokia/mj/impl/utils/Logger.java Tue Jul 06 20:36:19 2010 +0300
+++ b/javacommons/utils/javasrc/com/nokia/mj/impl/utils/Logger.java Fri Jul 09 16:35:45 2010 +0300
@@ -81,6 +81,7 @@
public static final int EJavaAppMngrPlugin = 35;
public static final int EJavaBroadcast = 36;
public static final int EJavaAMMS = 37;
+ public static final int EJavaSettings = 38;
// add name of new components here
@@ -138,6 +139,7 @@
false, //EJavaAppMngrPlugin = 35;
false, //EJavaBroadcast = 36;
false, //EJavaAMMS = 37;
+ false, //EJavaSettings = 38;
// add new components here
};
diff -r 35baca0e7a2e -r 023eef975703 javaextensions/comm/javasrc/com/nokia/mj/impl/gcf/protocol/comm/CommPermissionImpl.java
--- a/javaextensions/comm/javasrc/com/nokia/mj/impl/gcf/protocol/comm/CommPermissionImpl.java Tue Jul 06 20:36:19 2010 +0300
+++ b/javaextensions/comm/javasrc/com/nokia/mj/impl/gcf/protocol/comm/CommPermissionImpl.java Fri Jul 09 16:35:45 2010 +0300
@@ -47,7 +47,7 @@
public String toString()
{
- return "javax.microedition.io.CommProtocolPermission";
+ return "javax.microedition.io.Connector.comm";
}
public boolean implies(Permission p)
diff -r 35baca0e7a2e -r 023eef975703 javaextensions/javaextensions.pro
--- a/javaextensions/javaextensions.pro Tue Jul 06 20:36:19 2010 +0300
+++ b/javaextensions/javaextensions.pro Fri Jul 09 16:35:45 2010 +0300
@@ -15,7 +15,7 @@
#
TEMPLATE = subdirs
SUBDIRS += iapinfo/build/javaiapinfo.pro
-SUBDIRS += mobinfo/build/mobinfo.pro
+SUBDIRS += mobinfo/build/javamobinfo.pro
SUBDIRS += comm/build/javacomm.pro
SUBDIRS += globalindicators/build/javaglobalindicators.pro
SUBDIRS += webservices/build/javawebservices.pro
diff -r 35baca0e7a2e -r 023eef975703 javaextensions/location/landmarks/src/landmark.cpp
--- a/javaextensions/location/landmarks/src/landmark.cpp Tue Jul 06 20:36:19 2010 +0300
+++ b/javaextensions/location/landmarks/src/landmark.cpp Fri Jul 09 16:35:45 2010 +0300
@@ -457,6 +457,11 @@
return error;
}
+LOCAL_C void dispose(CBase* aLandmark)
+{
+ delete aLandmark;
+}
+
/*
* Class: javax_microedition_location_Landmark
* Method: _dispose
@@ -466,14 +471,15 @@
JNICALL Java_javax_microedition_location_Landmark__1dispose(
JNIEnv* /*aJniEnv*/,
jobject /*aPeer*/,
- jint /*aEventSourceHandle*/,
+ jint aEventSourceHandle,
jint aLandmarkHandle)
{
JELOG2(EJavaLocation);
-
+ LocationFunctionServer* eventSource =
+ reinterpret_cast< LocationFunctionServer*>(aEventSourceHandle);
+
CBase* object = reinterpret_cast< CBase*>(aLandmarkHandle);
-
- delete object;
+ eventSource->ExecuteTrap(dispose,object);
}
// End of file
diff -r 35baca0e7a2e -r 023eef975703 javaextensions/midprms_db/javasrc/com/nokia/mj/impl/rms/RmsFileInfo.java
--- a/javaextensions/midprms_db/javasrc/com/nokia/mj/impl/rms/RmsFileInfo.java Tue Jul 06 20:36:19 2010 +0300
+++ b/javaextensions/midprms_db/javasrc/com/nokia/mj/impl/rms/RmsFileInfo.java Fri Jul 09 16:35:45 2010 +0300
@@ -71,7 +71,7 @@
private long getSize()
{
- long size = 0;
+ long size = -1;
try
{
size = iFile.fileSize();
@@ -82,6 +82,7 @@
}
if (size < 0)
{
+ Logger.WLOG(Logger.EMidpRms, "fileSize = " + size);
size = 0;
}
return size;
@@ -102,18 +103,19 @@
private long getFreeSpace()
{
- long size = 0;
+ long size = -1;
try
{
size = iFile.availableSize();
}
catch (Exception e)
{
- Logger.ELOG(Logger.EMidpRms, "availableSize()" , e);
+ Logger.ELOG(Logger.EMidpRms, "availableSize() failed" , e);
}
if (size < 0)
{
- size = 0;
+ Logger.WLOG(Logger.EMidpRms, "availableSize = " + size);
+ size = MAX_RMS_SIZE;
}
return size;
}
diff -r 35baca0e7a2e -r 023eef975703 javaextensions/mobinfo/build/javamobinfo.pro
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javaextensions/mobinfo/build/javamobinfo.pro Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,26 @@
+#
+# Copyright (c) 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:
+#
+
+TARGET=javamobinfo
+TEMPLATE=lib
+CONFIG += omj java stl
+CONFIG -= qt
+
+symbian {
+ LIBS += -leuser -letel -letelmm -lesock -lconnmon -lcommdb -lcommsdat -lcmmanager -ljavaconnectionmanager
+}
+
+include(../../../build/omj.pri)
diff -r 35baca0e7a2e -r 023eef975703 javaextensions/mobinfo/build/mobinfo.pro
--- a/javaextensions/mobinfo/build/mobinfo.pro Tue Jul 06 20:36:19 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-#
-# Copyright (c) 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:
-#
-
-TARGET=javamobinfo
-TEMPLATE=lib
-CONFIG += omj java stl
-CONFIG -= qt
-
-symbian {
- LIBS += -leuser -letel -letelmm -lesock -lconnmon -lcommdb -lcommsdat -lcmmanager
-}
-
-include(../../../build/omj.pri)
diff -r 35baca0e7a2e -r 023eef975703 javaextensions/mobinfo/javasrc.s60/com/nokia/mj/impl/properties/mobinfo/MobileInfoPermission.java
--- a/javaextensions/mobinfo/javasrc.s60/com/nokia/mj/impl/properties/mobinfo/MobileInfoPermission.java Tue Jul 06 20:36:19 2010 +0300
+++ b/javaextensions/mobinfo/javasrc.s60/com/nokia/mj/impl/properties/mobinfo/MobileInfoPermission.java Fri Jul 09 16:35:45 2010 +0300
@@ -28,6 +28,8 @@
private static final String IMSI_TARGET_NAME = "mobinfo.imsi";
private static final String MSISDN_TARGET_NAME = "mobinfo.msisdn";
private static final String CELLID_TARGET_NAME = "mobinfo.cellid";
+ private static final String COUNTRYCODE_TARGET_NAME = "mobinfo.countrycode";
+ private static final String NETWORKID_TARGET_NAME = "mobinfo.networkid";
private static final String PUBLIC_INFO_TARGET_NAME = "mobinfo.publicinfo";
private String iTarget = null;
@@ -40,7 +42,9 @@
if (IMSI_TARGET_NAME.equals(aUri)
|| MSISDN_TARGET_NAME.equals(aUri)
|| CELLID_TARGET_NAME.equals(aUri)
- || PUBLIC_INFO_TARGET_NAME.equals(aUri))
+ || PUBLIC_INFO_TARGET_NAME.equals(aUri)
+ || COUNTRYCODE_TARGET_NAME.equals(aUri)
+ || NETWORKID_TARGET_NAME.equals(aUri))
{
// aUri contains a known target name -> save it as such
iTarget = aUri;
@@ -62,6 +66,14 @@
{
iTarget = CELLID_TARGET_NAME;
}
+ else if (MobileInfoProperties.COUNTRY_CODE.equals(aUri))
+ {
+ iTarget = COUNTRYCODE_TARGET_NAME;
+ }
+ else if (MobileInfoProperties.NETWORK_ID.equals(aUri))
+ {
+ iTarget = NETWORKID_TARGET_NAME;
+ }
else
{
iTarget = PUBLIC_INFO_TARGET_NAME;
@@ -78,6 +90,14 @@
*/
public String getSecurityPromptQuestion(int aInteractionMode)
{
+ if (CELLID_TARGET_NAME.equals(iTarget)
+ || COUNTRYCODE_TARGET_NAME.equals(iTarget)
+ || NETWORKID_TARGET_NAME.equals(iTarget))
+ {
+ return SecurityPromptMessage.getInstance().getText(
+ SecurityPromptMessage.QUESTION_ID_READING_LOCATION_DATA,
+ null);
+ }
return null;
}
@@ -91,6 +111,18 @@
{
return "com.nokia.mid.Mobinfo.MSISDN";
}
+ else if (CELLID_TARGET_NAME.equals(iTarget))
+ {
+ return "com.nokia.mid.Mobinfo.cellid";
+ }
+ else if (COUNTRYCODE_TARGET_NAME.equals(iTarget))
+ {
+ return "com.nokia.mid.Mobinfo.countrycode";
+ }
+ else if (NETWORKID_TARGET_NAME.equals(iTarget))
+ {
+ return "com.nokia.mid.Mobinfo.networkid";
+ }
return null;
}
diff -r 35baca0e7a2e -r 023eef975703 javaextensions/mobinfo/javasrc.s60/com/nokia/mj/impl/properties/mobinfo/MobileInfoProperties.java
--- a/javaextensions/mobinfo/javasrc.s60/com/nokia/mj/impl/properties/mobinfo/MobileInfoProperties.java Tue Jul 06 20:36:19 2010 +0300
+++ b/javaextensions/mobinfo/javasrc.s60/com/nokia/mj/impl/properties/mobinfo/MobileInfoProperties.java Fri Jul 09 16:35:45 2010 +0300
@@ -51,7 +51,7 @@
private static final String BATTERY_LEVEL = "com.nokia.mid.batterylevel";
- private static final String COUNTRY_CODE = "com.nokia.mid.countrycode";
+ static final String COUNTRY_CODE = "com.nokia.mid.countrycode";
private static final String IMEI = "com.nokia.mid.imei";
@@ -59,7 +59,7 @@
private static final String NETWORK_AVAILABILITY = "com.nokia.mid.networkavailability";
- private static final String NETWORK_ID = "com.nokia.mid.networkid";
+ static final String NETWORK_ID = "com.nokia.mid.networkid";
private static final String NETWORK_SIGNAL = "com.nokia.mid.networksignal";
@@ -140,6 +140,9 @@
int value = ((Integer)iPropertyKeys.get(aKey)).intValue();
Uid appSuiteUid;
+ int apId = APP_DEFAULT_APN_NOT_SPECIFIED; // access point id
+ int apType = APP_DEFAULT_APN_NOT_SPECIFIED; // MIDlet access point type, can be SNAP or IAP
+
ConnectionManager CmInstance = null;
String result = null;
// Only network access seems to have another way to handle it.
@@ -160,29 +163,25 @@
AccessPoint apn = CmInstance.getApplicationDefault(appSuiteUid);
if (apn != null)
{
- if (apn.getType() == AccessPoint.NAP_IAP) // IAP ID
+ apId = apn.getNapId();
+ apType = apn.getType();
+
+
+ if ((apType!=AccessPoint.NAP_SNAP) && (apType!=AccessPoint.NAP_IAP))
{
- result = _getPropertyApn(NETWORK_ACCESS_V, apn.getNapId());
+ apType = APP_DEFAULT_APN_NOT_SPECIFIED;
+ apId = APP_DEFAULT_APN_NOT_SPECIFIED;
}
- else
- {
- result = _getPropertyApn(NETWORK_ACCESS_V, APP_DEFAULT_APN_NOT_SPECIFIED);
- }
+
}
- else
- {
- result = _getPropertyApn(NETWORK_ACCESS_V, APP_DEFAULT_APN_NOT_SPECIFIED);
- }
+
}
- else
- {
- result = _getPropertyApn(NETWORK_ACCESS_V, APP_DEFAULT_APN_NOT_SPECIFIED);
- }
+ result = _getPropertyApn(NETWORK_ACCESS_V, apId,apType);
}
catch (Exception e)
{
Logger.LOG(Logger.ESOCKET, Logger.EInfo,"MobilInfoProperties :: getSuiteUid exception ");
- result = _getPropertyApn(NETWORK_ACCESS_V, APP_DEFAULT_APN_NOT_SPECIFIED);
+ result = _getPropertyApn(NETWORK_ACCESS_V, apId,apType);
}
return result;
}
@@ -202,6 +201,6 @@
}
private native String _getProperty(int value);
- private static native String _getPropertyApn(int property, int aAppDefaultApn);
+ private static native String _getPropertyApn(int property, int aAppDefaultApn, int apType);
}
\ No newline at end of file
diff -r 35baca0e7a2e -r 023eef975703 javaextensions/mobinfo/src.s60/javamobinfo.cpp
--- a/javaextensions/mobinfo/src.s60/javamobinfo.cpp Tue Jul 06 20:36:19 2010 +0300
+++ b/javaextensions/mobinfo/src.s60/javamobinfo.cpp Fri Jul 09 16:35:45 2010 +0300
@@ -29,6 +29,8 @@
#include
#include
#include
+#include "connectionmanager.h"
+
using namespace CMManager;
#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
@@ -75,14 +77,15 @@
// ---------------------------------------------------------------------------
// forward declarations
// ---------------------------------------------------------------------------
-HBufC* GetProperty(const TInt aProperty, const TUint32 aAppDefaultApn);
+HBufC* GetProperty(const TInt aProperty, const TUint32 aAppDefaultApn, const TUint32 aAppDefaultApType);
HBufC* GetTelephonyPropertyL(const TInt aProperty);
HBufC* GetDateTimePropertyL(const TInt aProperty);
-HBufC* GetNetworkAccessL(const TUint32 aAppDefaultApn);
+HBufC* GetNetworkAccessL(const TUint32 aAppDefaultApn, const TUint32 aAppDefaultApType);
TUint32 GetUsedIapL();
HBufC* GetBearerTypeL(TUint32 aIapId);
+HBufC* GetIapBearerTypeL(const TUint32 aAppDefaultApn, const TUint32 aAppDefaultApType);
HBufC* TranslateBearerInfoToNetworkAccessL(TConnMonBearerInfo aBearerInfo);
-HBufC* GetDefIapBearerTypeL(TUint32 aMidSuiteId);
+HBufC* GetAppDefIapBearerTypeL(const TUint32 aAppDefaultApn);
/*
* Class: com_nokia_mj_impl_properties_mobinfo_MobileInfoProperties
@@ -95,16 +98,18 @@
// Each mobinfo java property implementation calls the getPropertyMsid()
// function of the MobileInfoProperties class.
// @param aProperty name of the actual property
+// @param aAppDefaultApn application default access point id
+// @param aAppDefaultApType application default access point type ( SNAP, IAP)
// @param aAppDefaultApn Application default apn
// -----------------------------------------------------------------------------
JNIEXPORT jstring JNICALL
Java_com_nokia_mj_impl_properties_mobinfo_MobileInfoProperties__1getPropertyApn
-(JNIEnv* aJni, jclass, jint aProperty, jint aAppDefaultApn)
+(JNIEnv* aJni, jclass, jint aProperty, jint aAppDefaultApn, jint aAppDefaultApType)
{
LOG1(ESOCKET, EInfo, "MOBINFO + getPropertyMsid(), msid: %D", aAppDefaultApn);
HBufC* property = NULL;
jstring str = NULL;
- property = GetProperty(aProperty, aAppDefaultApn);
+ property = GetProperty(aProperty, aAppDefaultApn,aAppDefaultApType);
if (NULL != property)
{
LOG(ESOCKET,EInfo,"_getPropertyApn, property is not null");
@@ -124,7 +129,7 @@
HBufC* property = NULL;
jstring str = NULL;
- property = GetProperty(aKey,NULL);
+ property = GetProperty(aKey,NULL,0);
if (NULL != property)
{
TPtrC data(property->Des());
@@ -134,7 +139,7 @@
return str;
}
-HBufC* GetProperty(const TInt aProperty, const TUint32 aAppDefaultApn)
+HBufC* GetProperty(const TInt aProperty, const TUint32 aAppDefaultApn, const TUint32 aAppDefaultApType)
{
JELOG2(ESOCKET);
LOG(ESOCKET, EInfo, "MOBINFO + GetProperty()");
@@ -148,7 +153,7 @@
TRAP(err, property = GetDateTimePropertyL(aProperty));
break;
case NETWORK_ACCESS:
- TRAP(err, property = GetNetworkAccessL(aAppDefaultApn));
+ TRAP(err, property = GetNetworkAccessL(aAppDefaultApn,aAppDefaultApType));
LOG(ESOCKET, EInfo,"after GetNetworkAccessL");
break;
@@ -785,21 +790,178 @@
// Get type network access of currently used active connection
// @return network access, ownership hand over
// ---------------------------------------------------------------------------
-HBufC* GetNetworkAccessL(TUint32 aAppDefaultApn)
+HBufC* GetNetworkAccessL(TUint32 aAppDefaultApn, const TUint32 aAppDefaultApType)
{
LOG(ESOCKET, EInfo, "MOBINFO + GetNetworkAccessL");
HBufC* bearerType = NULL;
TUint32 iapId = GetUsedIapL();
- if (iapId == 0)
+ if (iapId != 0)
+ {
+ // active connection present, opened by MIDlet.
+ bearerType = GetBearerTypeL(iapId);
+
+ }
+ else
{
- bearerType = GetDefIapBearerTypeL(aAppDefaultApn);
+ // if there is no active connection by the application, return the app default bearer type.
+ if (aAppDefaultApType == 3)
+ {
+ // app default is IAP
+ bearerType = GetAppDefIapBearerTypeL(aAppDefaultApn);
+
+ }
+ else
+ {
+ bearerType = GetIapBearerTypeL(aAppDefaultApn,aAppDefaultApType);
+ }
+
+ }
+ LOG(ESOCKET, EInfo, "MOBINFO - GetNetworkAccessL");
+ return bearerType;
+}
+
+
+//// ---------------------------------------------------------------------------
+//// Check if device default is set (SNAP or IAP)
+//// @return true if device default defined, else false
+//// ---------------------------------------------------------------------------
+
+bool isDeviceDefaultPresentL()
+{
+ TCmDefConnType type;
+ RCmManager * mgr = new(ELeave) RCmManager();
+ mgr->OpenL();
+
+ TCmDefConnValue obj;
+ mgr->ReadDefConnL(obj);
+ type = obj.iType;
+
+ if ((type!=ECmDefConnConnectionMethod) && (type!=ECmDefConnDestination))
+ {
+ // device default is other than SNAP or IAP
+ return false;
}
else
{
- bearerType = GetBearerTypeL(iapId);
+ return true;
+
}
- LOG(ESOCKET, EInfo, "MOBINFO - GetNetworkAccessL");
+
+
+
+}
+
+//// ---------------------------------------------------------------------------
+//// Get bearer type of Access point ID
+//// @return bearer type Acess point ID
+//// ---------------------------------------------------------------------------
+
+HBufC* GetIapBearerTypeL(const TUint32 aAppDefaultApn, const TUint32 aAppDefaultApType)
+{
+
+ LOG(ESOCKET, EInfo, "MOBINFO + GetIapBearerTypeL()");
+ RConnectionMonitor monitor;
+ TUint connectionCount(0);
+ TUint iapId(0);
+ TRequestStatus status(KErrNone);
+ HBufC* bearerType(NULL);
+ TUint connectionId(0);
+ TUint subConnectionCount(0);
+ TConnMonBearerInfo bearerInfo(EBearerInfoUnknown);
+ bool flag = false;
+ TUint connIdx = 1;
+
+ User::LeaveIfError(monitor.ConnectL());
+ CleanupClosePushL(monitor);
+
+ status = KRequestPending;
+ monitor.GetConnectionCount(connectionCount, status);
+ User::WaitForRequest(status);
+ User::LeaveIfError(status.Int());
+ LOG1(ESOCKET, EInfo, "MOBINFO: GetIapBearerTypeL: Count of active connections: %D", connectionCount);
+
+ // Go through all connections
+ for (connIdx = 1; connIdx <= connectionCount; ++connIdx)
+ {
+
+ connectionId = 0;
+ subConnectionCount = 0;
+ flag = false;
+
+ // Get connection ID
+ monitor.GetConnectionInfo(connIdx, connectionId, subConnectionCount);
+ User::LeaveIfError(connectionId);
+ // Get connection IAP ID
+ status = KRequestPending;
+ monitor.GetUintAttribute(connectionId, 0, KIAPId, iapId, status);
+ User::WaitForRequest(status);
+ User::LeaveIfError(status.Int());
+ LOG1(ESOCKET, EInfo, "MOBINFO: GetIapBearerTypeL Connection 's IAP ID found: %D", iapId);
+ if (aAppDefaultApType == 2)
+ {
+ LOG(ESOCKET, EInfo, "MOBINFO: Matching MIDlet defined SNAP to active IAP ID ");
+ // Midlet has a SNAP defined, so check if the active IAP is under this SNAP.
+ flag = ConnectionManager::isIapDefault(iapId, aAppDefaultApn,false);
+ if (!flag)
+ {
+ continue; // active access point doesn't belong to MIDlet SNAP, check the next active access point.
+ }
+ else
+ {
+ break;
+ }
+ }
+ else
+ {
+ // No SNAP defined for the MIDlet, check for system default SNAP/IAP.
+ if (isDeviceDefaultPresentL())
+ {
+ LOG(ESOCKET, EInfo, "MOBINFO: Matching device default to active IAP ID ");
+ flag = ConnectionManager::isIapDefault(iapId, 0, true);
+ if (!flag)
+ {
+ continue; // active access point doesn't belong to MIDlet SNAP, check the next active access point.
+ }
+ else
+ {
+ break;
+ }
+ }
+ else
+ {
+ LOG(ESOCKET, EInfo, "MOBINFO: Returning the bearer type of first active IAP ");
+ flag = true;
+ break; // no MIDlet SNAP, no device default, select this access point and return the bearer type
+
+ }
+ }
+
+ } // end of for loop
+
+ if (flag)
+ {
+ // we did not reach end of active connections, one of the conditions matched , find the bearer type
+ status = KRequestPending;
+ monitor.GetIntAttribute(connectionId,
+ 0,
+ KBearerInfo,
+ (TInt&)bearerInfo,
+ status);
+ User::WaitForRequest(status);
+ User::LeaveIfError(status.Int());
+
+ // Translate bearer type to type of network access
+ bearerType = TranslateBearerInfoToNetworkAccessL(bearerInfo);
+ }
+ CleanupStack::PopAndDestroy(&monitor);
+ if (bearerType == NULL)
+ {
+ // No active connection (or) active IAP didn't match the conditions
+ bearerType = KNetworkAccessNa().AllocL();
+ }
return bearerType;
+
+
}
//// ---------------------------------------------------------------------------
@@ -1047,26 +1209,24 @@
// --------------------------------------------------------------------
// Get network access type of default access point set in MIDlet settings
-// @param aAppDefaultApn MIDlet suite ID
+// @param aAppDefaultApn MIDlet default IAP
// @return network access type, ownership hand over
-HBufC* GetDefIapBearerTypeL(TUint32 aAppDefaultApn)
+HBufC* GetAppDefIapBearerTypeL(const TUint32 aAppDefaultApn)
{
- LOG(ESOCKET, EInfo, "MOBINFO + GetDefIapBearerTypeL");
- ELOG1(ESOCKET, "GetDefIapBearerTypeL %d", aAppDefaultApn);
+ LOG1(ESOCKET, EInfo, "MOBINFO + GetAppDefIapBearerTypeL aId = %d ", aAppDefaultApn);
HBufC* bearerType(NULL);
- // MAPNSettings* apnTable = GetAPNSettingsLC(KAPNSettingsVersion);
- //TUint32 apn = apnTable->GetAPNIdL( aMidSuiteId );
- //CleanupStack::PopAndDestroy(); //apnTable
- LOG1(ESOCKET, EInfo, "MIDlet specific IAP ID gotten: %D", aAppDefaultApn);
+
if (aAppDefaultApn == 0 || aAppDefaultApn == (TUint32)-1)
{
bearerType = KNetworkAccessNa().AllocL();
}
else
{
+
RCmManager localCmManager;
localCmManager.OpenL();
- TUint32 tmpval = localCmManager.GetConnectionMethodInfoIntL(aAppDefaultApn,ECmBearerType);
+ TUint32 iap = aAppDefaultApn;
+ TUint32 tmpval = localCmManager.GetConnectionMethodInfoIntL(iap,ECmBearerType);
ELOG1(ESOCKET, "GetConnectionMethodInfoIntL: %d", tmpval);
switch (tmpval)
{
@@ -1084,11 +1244,8 @@
default :
bearerType = KNetworkAccessNa().AllocL();
break;
-
-
}
-
}
- LOG(ESOCKET, EInfo, "MOBINFO - GetDefIapBearerTypeL");
+ LOG(ESOCKET, EInfo, "MOBINFO - GetAppDefIapBearerTypeL");
return bearerType;
}
diff -r 35baca0e7a2e -r 023eef975703 javaextensions/satsa/build/javasatsa.pro
--- a/javaextensions/satsa/build/javasatsa.pro Tue Jul 06 20:36:19 2010 +0300
+++ b/javaextensions/satsa/build/javasatsa.pro Fri Jul 09 16:35:45 2010 +0300
@@ -16,8 +16,8 @@
TARGET=javasatsa
TEMPLATE=lib
-CONFIG += omj java stl
-CONFIG -= qt
+CONFIG += hb omj java stl
+# CONFIG -= qt
symbian {
INCLUDEPATH += ../framework/inc \
@@ -35,6 +35,8 @@
LIBS += -ljavastorage \
+ -lHbCore \
+ -lHbWidgets \
-lCommonUI \
-lrandom \
-lx509 \
@@ -62,6 +64,7 @@
-lWimClient \
-lestlib \
-lcryptography \
+
}
diff -r 35baca0e7a2e -r 023eef975703 javaextensions/satsa/pki/src.s60/cstscredentialmanager.cpp
--- a/javaextensions/satsa/pki/src.s60/cstscredentialmanager.cpp Tue Jul 06 20:36:19 2010 +0300
+++ b/javaextensions/satsa/pki/src.s60/cstscredentialmanager.cpp Fri Jul 09 16:35:45 2010 +0300
@@ -36,7 +36,6 @@
#include
-
// CONSTANTS
_LIT(KSTSSymbianKeyStoreLabel, "Software key store");
_LIT(KSTSSymbianCertificateStoreLabel, "Software certificate store");
@@ -67,10 +66,7 @@
{
delete iEncodedCert;
delete iIssuerAndSerialNumber;
- if (iPKIDialog)
- {
- iPKIDialog->Release();
- }
+
delete iDistinguishedName;
delete iDisplayName;
delete iRequestEncoded;
@@ -533,8 +529,7 @@
//
void CSTSCredentialManager::ConstructL()
{
- iPKIDialog = PKIDialogFactory::CreateNoteL();
-
+
User::LeaveIfError(iFileServer.Connect());
iWait = new(ELeave) CActiveSchedulerWait;
iStore = CUnifiedCertStore::NewL(iFileServer, ETrue);
@@ -619,8 +614,7 @@
{
// not found, ok to add
iState = EAddDialog;
- iPKIDialog->SaveCertificate(EX509Certificate, EUserCertificate,
- iSubject, iStatus);
+
SetActive();
return;
}
@@ -720,7 +714,8 @@
CCTCertInfo* certInfo = (*iCertInfoArray)[ 0 ];
iState = ERemoveDialog;
iHandle = certInfo->Handle();
- iPKIDialog->DeleteCertificate(iHandle, iStatus);
+
+
SetActive();
}
@@ -783,7 +778,7 @@
iState = ECSRDialog;
iHandle = iKeyInfo->Handle();
- iPKIDialog->CreateCSR(*iDisplayName, iHandle, iStatus);
+
SetActive();
}
diff -r 35baca0e7a2e -r 023eef975703 javaextensions/satsa/pki/src.s60/cstscredentialmanager.h
--- a/javaextensions/satsa/pki/src.s60/cstscredentialmanager.h Tue Jul 06 20:36:19 2010 +0300
+++ b/javaextensions/satsa/pki/src.s60/cstscredentialmanager.h Fri Jul 09 16:35:45 2010 +0300
@@ -31,7 +31,7 @@
// FORWARD DECLARATIONS
class CCTKeyInfo;
-class MPKIDialog;
+
class CUnifiedCertStore;
class CUnifiedKeyStore;
class CX500DistinguishedName;
@@ -349,8 +349,6 @@
// internal error variable
TInt iError;
- // PKI Dialog, owned
- MPKIDialog* iPKIDialog;
// The actual store, owned
CUnifiedCertStore* iStore;
diff -r 35baca0e7a2e -r 023eef975703 javaextensions/satsa/pki/src.s60/cstssignatureservice.cpp
--- a/javaextensions/satsa/pki/src.s60/cstssignatureservice.cpp Tue Jul 06 20:36:19 2010 +0300
+++ b/javaextensions/satsa/pki/src.s60/cstssignatureservice.cpp Fri Jul 09 16:35:45 2010 +0300
@@ -15,8 +15,6 @@
*
*/
-
-// INCLUDE FILES
#include "cstssignatureservice.h"
#include "tstsdistinguishednameconverter.h"
#include "secdlg.h"
@@ -32,7 +30,7 @@
#include
#include
#include
-#include
+
#include "cstsseprompt.h"
#include
@@ -42,7 +40,10 @@
#include "logger.h"
#include "jstringutils.h"
-// CONSTANTS
+#include
+#include
+
+
const TInt KDefaultGranularity = 1;
const TInt KOptionIncludeContent = 1;
@@ -80,10 +81,7 @@
{
iDialog->Release(); // Release deletes the object
}
- if (iPKIDialog)
- {
- iPKIDialog->Release();
- }
+
iCertificateArray.Close();
iCertInfos.Close();
delete iFilter;
@@ -126,14 +124,12 @@
TInt aOptions, const CDesCArray& aCaNames,
const TDesC& asecurityElementPrompt, TBool aShowData)
{
- LOG(ESATSA, EInfo, "+ CSTSSignatureService::AuthenticateL");
if (iState != EReady)
{
ELOG(ESATSA, "CSTSSignatureService::AuthenticateL: Not Ready");
User::Leave(KErrNotReady);
}
- LOG(ESATSA, EInfo, "CSTSSignatureService::AuthenticateL:After convertions");
// First we need to convert the data to unicode, if we have to display it
HBufC* textToDisplay = NULL;
if (aShowData)
@@ -155,14 +151,9 @@
iOptions = aOptions;
iShowNotes = EFalse;
-
- LOG(ESATSA, EInfo, "CSTSSignatureService::AuthenticateL:Going to call CreateSignatureL");
// get handles to applicable certificates
HBufC8* retVal = CreateSignatureL(aCaNames, EX509UsageDigitalSignature,
asecurityElementPrompt);
- LOG(ESATSA, EInfo, "CSTSSignatureService::AuthenticateL:After call to CreateSignatureL");
-
- LOG(ESATSA, EInfo, "-- CSTSSignatureService::AuthenticateL");
return retVal;
}
@@ -171,7 +162,6 @@
jint aOptions, jobjectArray aCaNames, jstring aSecurityElementPrompt,
jboolean aShowData, HBufC8** aRetVal)
{
- LOG(ESATSA, EInfo, "+ CSTSSignatureService::StaticAuthenticateL");
const TInt byteArrayLength = aJniEnv->GetArrayLength(
aByteArrayToAuthenticate);
jbyte* bytesToAuthenticate = aJniEnv->GetByteArrayElements(
@@ -189,20 +179,15 @@
CDesCArrayFlat* nativeCaNames = STSCreateNativeStringArrayL(aJniEnv,
aCaNames);
- LOG(ESATSA, EInfo, "CSTSSignatureService::StaticAuthenticateL: prepare se prompt");
const JStringUtils securityElementPrompt(*aJniEnv, aSecurityElementPrompt);
- LOG(ESATSA, EInfo, "CSTSSignatureService::StaticAuthenticateL: start convertions to TInt");
TBool ShowData = static_cast(aShowData);
const TDesC* sec = static_cast(&securityElementPrompt);
- LOG(ESATSA, EInfo, "CSTSSignatureService::StaticAuthenticateL: After convertions,going to call CallMethodL");
TRAPD(err, CallMethodL(*aRetVal, service,
&CSTSSignatureService::AuthenticateL, desToAuthenticate, aOptions,
*nativeCaNames, *sec, ShowData, service));
- LOG(ESATSA, EInfo, "+ CSTSSignatureService::StaticAuthenticateL:After CallmethodL");
- LOG(ESATSA, EInfo, "-- return CSTSSignatureService::StaticAuthenticateL");
return err;
}
@@ -216,15 +201,12 @@
HBufC8* CSTSSignatureService::SignL(const TDesC8& aBytesToSign, TInt aOptions,
const CDesCArray& aCaNames, const TDesC& aSecurityElementPrompt)
{
- LOG(ESATSA, EInfo, "+ CSTSSignatureService::SignL");
if (iState != EReady)
{
ELOG(ESATSA, "CSTSSignatureService::SignL: Not Ready");
User::Leave(KErrNotReady);
}
- LOG(ESATSA, EInfo, "CSTSSignatureService::SignL: start convertions!");
- LOG(ESATSA, EInfo, "CSTSSignatureService::SignL: After convertions");
// convert text from UTF8
HBufC* textToDisplay = ConvertUTF8ToUnicodeL(aBytesToSign);
delete iTextToDisplay;
@@ -238,12 +220,10 @@
iShowNotes = ETrue;
- LOG(ESATSA, EInfo, "CSTSSignatureService::SignL: Before call to CreateSignatureL");
// get handles to applicable certificates
HBufC8* retVal = CreateSignatureL(aCaNames, EX509UsageNonRepudiation,
aSecurityElementPrompt);
- LOG(ESATSA, EInfo, "-- return CSTSSignatureService::SignL");
return retVal;
}
@@ -256,13 +236,12 @@
CSTSSignatureService* service, jbyteArray aBytesToSign, jint aOptions,
jobjectArray aCaNames, jstring aSecurityElementPrompt, HBufC8** aRetVal)
{
- LOG(ESATSA, EInfo, "+ CSTSSignatureService::StaticSignL");
const TInt byteArrayLength = aJniEnv->GetArrayLength(aBytesToSign);
jbyte* bytesToSign = aJniEnv->GetByteArrayElements(aBytesToSign, NULL);
if (!bytesToSign)
{
- LOG(ESATSA, EInfo, "CSTSSignatureService::StaticSignL: No memory");
+ ELOG(ESATSA, "CSTSSignatureService::StaticSignL: No memory");
return NULL;
}
@@ -273,15 +252,12 @@
const JStringUtils securityElementPrompt(*aJniEnv, aSecurityElementPrompt);
- LOG(ESATSA, EInfo, "CSTSSignatureService::StaticSignL: Start convertions");
- LOG(ESATSA, EInfo, "CSTSSignatureService::StaticSignL: Before callmethodl");
-
+
const TDesC* sec = static_cast(&securityElementPrompt);
TRAPD(err, CallMethodL(*aRetVal, service, &CSTSSignatureService::SignL,
desToSign, aOptions, *nativeCaNames, *sec, service));
- LOG(ESATSA, EInfo, "-- ret CSTSSignatureService::StaticSignL");
return err;
}
@@ -292,28 +268,50 @@
//
void CSTSSignatureService::RunL()
{
- LOG(ESATSA, EInfo, "+ CSTSSignatureService::RunL");
if (iStatus == KErrCancel)
{
- LOG(ESATSA, EInfo, "CSTSSignatureService::RunL: KErrCancel");
if (iShowNotes)
{
- LOG(ESATSA, EInfo, "CSTSSignatureService::RunL: ShowNote");
iState = EFinalNote;
iStatus = KErrNone;
- iPKIDialog->Note(MPKIDialog::ESigningCancelled, iStatus);
+
+ // Using Orbit API
+ CHbDeviceMessageBoxSymbian* messageBox
+ = CHbDeviceMessageBoxSymbian::NewL(CHbDeviceMessageBoxSymbian::EWarning);
+ CleanupStack::PushL(messageBox);
+
+ _LIT(KQuestion, "Do you want to sign the data?");
+ messageBox->SetTextL(KQuestion);
+ messageBox->SetTimeout(HbPopup::NoTimeout);
+
+ // Read localised versions instead of hard coded values.
+ _LIT(KAllowButtonText, "Allow");
+ _LIT(KDenyButtonText, "Deny");
+
+ messageBox->SetButtonTextL(CHbDeviceMessageBoxSymbian::EAcceptButton, KAllowButtonText);
+ messageBox->SetButton(CHbDeviceMessageBoxSymbian::EAcceptButton, ETrue);
+ messageBox->SetButtonTextL(CHbDeviceMessageBoxSymbian::ERejectButton, KDenyButtonText);
+ messageBox->SetButton(CHbDeviceMessageBoxSymbian::ERejectButton, ETrue);
+
+ // by default the answer is Allow
+ if (messageBox->ExecL() == CHbDeviceMessageBoxSymbian::ERejectButton)
+ {
+
+ }
+
+ messageBox->Close();
+ CleanupStack::PopAndDestroy(messageBox);
+
SetActive();
- LOG(ESATSA, EInfo, "CSTSSignatureService::RunL: Done ShowNote");
- }
+ }
else
{
- LOG(ESATSA, EInfo, "CSTSSignatureService::RunL: Complete");
- Complete(KErrNone);
+ Complete(KErrNone);
}
}
else if (iStatus != KErrNone)
{
- LOG(ESATSA, EInfo, "CSTSSignatureService::RunL: Error occured");
+ ELOG(ESATSA, "CSTSSignatureService::RunL: Error occured");
// Error has occured; inform java
Complete(iStatus.Int());
}
@@ -323,29 +321,23 @@
{
case EInitialising:
{
- LOG(ESATSA, EInfo, "CSTSSignatureService::RunL: case EInitialising");
iState = EKeyStoreInit;
iKeyStore->Initialize(iStatus);
SetActive();
- LOG(ESATSA, EInfo, "CSTSSignatureService::RunL: over case EInitialising");
break;
}
case EKeyStoreInit:
{
- LOG(ESATSA, EInfo, "CSTSSignatureService::RunL: case EKeyStoreInit");
Complete(KErrNone);
break;
}
case EListing:
{
- LOG(ESATSA, EInfo, "CSTSSignatureService::RunL: case EListing");
HandlesFromCertInfosL();
- LOG(ESATSA, EInfo, "CSTSSignatureService::RunL: over case EListing");
break;
}
case EDialog:
{
- LOG(ESATSA, EInfo, "CSTSSignatureService::RunL: case EDialog");
iState = EGetCert;
if (iCertificate)
{
@@ -360,12 +352,10 @@
iCertStore->GetCert(iCertificate, iCertificateHandle, iStatus);
SetActive();
- LOG(ESATSA, EInfo, "CSTSSignatureService::RunL: over case EDialog");
break;
}
case EGetCert:
{
- LOG(ESATSA, EInfo, "CSTSSignatureService::RunL: case EGetCert");
if (iX509Certificate)
{
delete iX509Certificate;
@@ -374,44 +364,35 @@
iState = ERetrieveCert;
iCertStore->Retrieve(*iCertificate, iX509Certificate, iStatus);
SetActive();
- LOG(ESATSA, EInfo, "CSTSSignatureService::RunL: over case EGetCert");
break;
}
case ERetrieveCert:
{
- LOG(ESATSA, EInfo, "CSTSSignatureService::RunL: case ERetrieveCert");
FindKeyL();
break;
}
case EFindKey:
{
- LOG(ESATSA, EInfo, "CSTSSignatureService::RunL: case EFindKey");
OpenSignerL();
break;
}
case EOpenSigner:
{
- LOG(ESATSA, EInfo, "CSTSSignatureService::RunL: case EOpenSigner");
SignL();
break;
}
case ESign:
{
- LOG(ESATSA, EInfo, "CSTSSignatureService::RunL: case ESign");
CreateSignedDataL();
- LOG(ESATSA, EInfo, "CSTSSignatureService::RunL: over case ESign");
break;
}
case EFinalNote:
{
- LOG(ESATSA, EInfo, "CSTSSignatureService::RunL: case EFinalNote");
Complete(KErrNone);
- LOG(ESATSA, EInfo, "CSTSSignatureService::RunL: over case EFinalNote");
break;
}
default:
{
- LOG(ESATSA, EInfo, "CSTSSignatureService::RunL: case default");
Complete(KErrGeneral);
}
}
@@ -425,7 +406,6 @@
//
TInt CSTSSignatureService::RunError(TInt aError)
{
- LOG(ESATSA, EInfo, "+ CSTSSignatureService::RunError");
Complete(aError);
return KErrNone;
}
@@ -524,8 +504,7 @@
{
User::LeaveIfError(iFileServer.Connect());
iDialog = SecurityDialogFactory::CreateL();
- iPKIDialog = PKIDialogFactory::CreateNoteL();
-
+
iFilter = CCertAttributeFilter::NewL();
iWait = new(ELeave) CActiveSchedulerWait;
@@ -542,7 +521,6 @@
//
void CSTSSignatureService::Complete(TInt aError)
{
- LOG(ESATSA, EInfo, "+ CSTSSignatureService::Complete");
if (KErrNone == aError)
{
iState = EReady;
@@ -553,7 +531,7 @@
iError = aError;
}
iWait->AsyncStop();
- LOG(ESATSA, EInfo, "-- ret CSTSSignatureService::Complete");
+
}
// -----------------------------------------------------------------------------
@@ -563,17 +541,14 @@
//
void CSTSSignatureService::WaitForCompletionL()
{
- LOG(ESATSA, EInfo, "+ CSTSSignatureService::WaitForCompletionL");
SetActive();
iWait->Start();
if (iState != EReady)
{
// we need to be ready for the next request
iState = EReady;
-
User::Leave(iError);
}
- LOG(ESATSA, EInfo, "- ret CSTSSignatureService::WaitForCompletionL");
}
// -----------------------------------------------------------------------------
@@ -584,7 +559,6 @@
HBufC8* CSTSSignatureService::CreateSignatureL(const CDesCArray& aCaNames,
const TKeyUsageX509 aUsage, const TDesC& aSecurityElementPrompt)
{
- LOG(ESATSA, EInfo, "+ CSTSSignatureService::CreateSignatureL");
HBufC* sePrompt = NULL;
if (aSecurityElementPrompt != KNullDesC())
{
@@ -592,14 +566,10 @@
}
delete iSecurityElementPrompt;
iSecurityElementPrompt = sePrompt;
- LOG(ESATSA, EInfo, "CSTSSignatureService::CreateSignatureL: call findcertificates");
FindCertificatesL(aCaNames, aUsage);
- LOG(ESATSA, EInfo, "CSTSSignatureService::CreateSignatureL: After call to findcertificates");
WaitForCompletionL();
- LOG(ESATSA, EInfo, "CSTSSignatureService::CreateSignatureL: call WaitForCompletion");
HBufC8* retVal = iSignature;
iSignature = NULL;
- LOG(ESATSA, EInfo, "-- ret CSTSSignatureService::CreateSignatureL");
return retVal;
}
// -----------------------------------------------------------------------------
@@ -611,7 +581,6 @@
const TKeyUsageX509 aUsage)
{
- LOG(ESATSA, EInfo, "+ CSTSSignatureService::FindCertificatesL");
iFilter->SetKeyUsage(aUsage);
iFilter->SetOwnerType(EUserCertificate);
iFilter->SetFormat(EX509Certificate);
@@ -654,7 +623,7 @@
iState = EListing;
iCertStore->List(iCertInfos, *iFilter, iDERNames, iStatus);
}
- LOG(ESATSA, EInfo, "-- ret CSTSSignatureService::FindCertificatesL");
+
}
// -----------------------------------------------------------------------------
@@ -664,7 +633,6 @@
//
void CSTSSignatureService::HandlesFromCertInfosL()
{
- LOG(ESATSA, EInfo, "+ CSTSSignatureService::HandlesFromCertInfosL");
TInt certificateCount = iCertInfos.Count();
if (certificateCount == 0)
{
@@ -675,7 +643,6 @@
iCertificateArray.Reset();
for (TInt i = 0; i < certificateCount; i++)
{
- LOG(ESATSA, EInfo, "+ CSTSSignatureService::HandlesFromCertInfosL: No Certificates");
User::LeaveIfError(iCertificateArray.Append(iCertInfos[i]->Handle()));
}
@@ -684,18 +651,60 @@
{
case EAuthWithoutText:
{
- LOG(ESATSA, EInfo, "CSTSSignatureService::HandlesFromCertInfosL: case EAuthWithoutText");
- iPKIDialog->UserAuthentication(iCertificateArray, iCertificateHandle,
- iStatus);
- LOG(ESATSA, EInfo, "CSTSSignatureService::HandlesFromCertInfosL: over case EAuthWithoutText");
+ // Use Orbit API
+ CHbDeviceMessageBoxSymbian* messageBox
+ = CHbDeviceMessageBoxSymbian::NewL(CHbDeviceMessageBoxSymbian::EWarning);
+ CleanupStack::PushL(messageBox);
+
+ _LIT(KQuestion, "Do you want to sign the data?");
+ messageBox->SetTextL(KQuestion);
+ messageBox->SetTimeout(HbPopup::NoTimeout);
+
+ // Read localised versions instead of hard coded values.
+ _LIT(KAllowButtonText, "Allow");
+ _LIT(KDenyButtonText, "Deny");
+
+ messageBox->SetButtonTextL(CHbDeviceMessageBoxSymbian::EAcceptButton, KAllowButtonText);
+ messageBox->SetButton(CHbDeviceMessageBoxSymbian::EAcceptButton, ETrue);
+ messageBox->SetButtonTextL(CHbDeviceMessageBoxSymbian::ERejectButton, KDenyButtonText);
+ messageBox->SetButton(CHbDeviceMessageBoxSymbian::ERejectButton, ETrue);
+
+ // by default the answer is Allow
+ if (messageBox->ExecL() == CHbDeviceMessageBoxSymbian::ERejectButton)
+ {
+
+ }
+ messageBox->Close();
+ CleanupStack::PopAndDestroy(messageBox);
break;
}
case EAuthWithText:
{
- LOG(ESATSA, EInfo, "CSTSSignatureService::HandlesFromCertInfosL: case EAuthWithText");
- iPKIDialog->UserAuthenticationText(*iTextToDisplay, iCertificateArray,
- iCertificateHandle, iStatus);
- LOG(ESATSA, EInfo, "CSTSSignatureService::HandlesFromCertInfosL: over case EAuthWithText");
+ // Use Orbit API
+ CHbDeviceMessageBoxSymbian* messageBox
+ = CHbDeviceMessageBoxSymbian::NewL(CHbDeviceMessageBoxSymbian::EWarning);
+ CleanupStack::PushL(messageBox);
+
+ _LIT(KQuestion, "Do you want to sign the data?");
+ messageBox->SetTextL(KQuestion);
+ messageBox->SetTimeout(HbPopup::NoTimeout);
+
+ // Read localised versions instead of hard coded values.
+ _LIT(KAllowButtonText, "Allow");
+ _LIT(KDenyButtonText, "Deny");
+
+ messageBox->SetButtonTextL(CHbDeviceMessageBoxSymbian::EAcceptButton, KAllowButtonText);
+ messageBox->SetButton(CHbDeviceMessageBoxSymbian::EAcceptButton, ETrue);
+ messageBox->SetButtonTextL(CHbDeviceMessageBoxSymbian::ERejectButton, KDenyButtonText);
+ messageBox->SetButton(CHbDeviceMessageBoxSymbian::ERejectButton, ETrue);
+
+ // by default the answer is Allow
+ if (messageBox->ExecL() == CHbDeviceMessageBoxSymbian::ERejectButton)
+ {
+
+ }
+ messageBox->Close();
+ CleanupStack::PopAndDestroy(messageBox);
break;
}
case ESignWithText:
@@ -721,7 +730,6 @@
//
void CSTSSignatureService::FindKeyL()
{
- LOG(ESATSA, EInfo, "+ CSTSSignatureService::FindKeyL");
iKeyFilter.iKeyAlgorithm = CKeyInfoBase::EInvalidAlgorithm;
iKeyFilter.iKeyId = iCertificate->SubjectKeyId();
@@ -740,7 +748,6 @@
//
void CSTSSignatureService::OpenSignerL()
{
- LOG(ESATSA, EInfo, "+ CSTSSignatureService::OpenSignerL");
// if key is not found, display security element prompt and search again
if (iKeys.Count() == 0)
{
@@ -803,8 +810,6 @@
//
void CSTSSignatureService::SignL()
{
- LOG(ESATSA, EInfo, "+ CSTSSignatureService::SignL");
-
// first we create a digest of the message
CSHA1* sha = CSHA1::NewL();
@@ -892,7 +897,6 @@
//
void CSTSSignatureService::CreateSignedDataL()
{
- LOG(ESATSA, EInfo, "+ CSTSSignatureService::CreateSignedDataL");
CCTKeyInfo* keyInfo = iKeys[0];
HBufC8* signature = NULL;
@@ -987,14 +991,39 @@
if (iShowNotes)
{
iState = EFinalNote;
- iPKIDialog->Note(MPKIDialog::ESignatureDone, iStatus);
+
+ //proper string for user prompt
+ CHbDeviceMessageBoxSymbian* messageBox
+ = CHbDeviceMessageBoxSymbian::NewL(CHbDeviceMessageBoxSymbian::EWarning);
+ CleanupStack::PushL(messageBox);
+
+ _LIT(KQuestion, "Do you want to sign the data?");
+ messageBox->SetTextL(KQuestion);
+ messageBox->SetTimeout(HbPopup::NoTimeout);
+
+ // Read localised versions instead of hard coded values.
+ _LIT(KAllowButtonText, "Allow");
+ _LIT(KDenyButtonText, "Deny");
+
+ messageBox->SetButtonTextL(CHbDeviceMessageBoxSymbian::EAcceptButton, KAllowButtonText);
+ messageBox->SetButton(CHbDeviceMessageBoxSymbian::EAcceptButton, ETrue);
+ messageBox->SetButtonTextL(CHbDeviceMessageBoxSymbian::ERejectButton, KDenyButtonText);
+ messageBox->SetButton(CHbDeviceMessageBoxSymbian::ERejectButton, ETrue);
+
+ // by default the answer is Allow
+ if (messageBox->ExecL() == CHbDeviceMessageBoxSymbian::ERejectButton)
+ {
+
+ }
+ messageBox->Close();
+ CleanupStack::PopAndDestroy(messageBox);
SetActive();
}
else
{
Complete(KErrNone);
}
- LOG(ESATSA, EInfo, "-- ret CSTSSignatureService::CreateSignedDataL");
+
}
// -----------------------------------------------------------------------------
diff -r 35baca0e7a2e -r 023eef975703 javaextensions/satsa/pki/src.s60/cstssignatureservice.h
--- a/javaextensions/satsa/pki/src.s60/cstssignatureservice.h Tue Jul 06 20:36:19 2010 +0300
+++ b/javaextensions/satsa/pki/src.s60/cstssignatureservice.h Fri Jul 09 16:35:45 2010 +0300
@@ -19,19 +19,17 @@
#ifndef CSTSSIGNATURESERVICE_H
#define CSTSSIGNATURESERVICE_H
-// INCLUDES
+
+#include "javaosheaders.h"
+#include
+
#include
#include
#include
#include "functionserver.h"
-// CONSTANTS
-
-
-
// FORWARD DECLARATIONS
class MSecurityDialog;
-class MPKIDialog;
class CUnifiedCertStore;
class CUnifiedKeyStore;
class CCTCertInfo;
@@ -266,9 +264,6 @@
// security dialog, owned
MSecurityDialog* iDialog;
- // PKI Dialog, owned
- MPKIDialog* iPKIDialog;
-
// certificate store, owned
CUnifiedCertStore* iCertStore;
diff -r 35baca0e7a2e -r 023eef975703 javaextensions/sensor/src.s60/csensorbase.cpp
--- a/javaextensions/sensor/src.s60/csensorbase.cpp Tue Jul 06 20:36:19 2010 +0300
+++ b/javaextensions/sensor/src.s60/csensorbase.cpp Fri Jul 09 16:35:45 2010 +0300
@@ -139,7 +139,14 @@
void CSensorBase::AsyncCallback(TMethod aMethod)
{
JELOG2(ESensor);
- iMethodArray.Append(aMethod);
+ TInt err = iMethodArray.Append(aMethod);
+ // if there was error when adding the method to array then just return
+ if ( err )
+ {
+ ELOG2(ESensor, "CSensorBase::AsyncCallback - Error (code = %d) when "
+ "adding method (type = %d) to method buffer.", err, aMethod.iMethodType);
+ return;
+ }
// If there is old request ongoing, wait it for completion
if (iMethodArray.Count() > 1)
diff -r 35baca0e7a2e -r 023eef975703 javaextensions/wma/sms_cbs/pushplugin/cbs/src.s60/cbsserverconnection.cpp
--- a/javaextensions/wma/sms_cbs/pushplugin/cbs/src.s60/cbsserverconnection.cpp Tue Jul 06 20:36:19 2010 +0300
+++ b/javaextensions/wma/sms_cbs/pushplugin/cbs/src.s60/cbsserverconnection.cpp Fri Jul 09 16:35:45 2010 +0300
@@ -524,7 +524,7 @@
}
// Store the received page number, such that the message can
// be reconstructed in the correct order later
- mCbsMessagePagesRef.Append(currentPage);
+ mCbsMessagePagesRef.AppendL(currentPage);
// Store the actual content of the message
mCbsMessagePagesData->AppendL(messageData);
diff -r 35baca0e7a2e -r 023eef975703 javaextensions/wma/sms_cbs/pushplugin/sms/src.s60/smsserverconnection.cpp
--- a/javaextensions/wma/sms_cbs/pushplugin/sms/src.s60/smsserverconnection.cpp Tue Jul 06 20:36:19 2010 +0300
+++ b/javaextensions/wma/sms_cbs/pushplugin/sms/src.s60/smsserverconnection.cpp Fri Jul 09 16:35:45 2010 +0300
@@ -211,6 +211,7 @@
mIoctlBuf() = KSockSelectRead;
mSocket.Ioctl(KIOctlSelect, iStatus, &mIoctlBuf, KSOLSocket);
SetActive();
+ pthread_mutex_unlock(&mMutex);
return;
}
switch (mState)
@@ -276,6 +277,7 @@
pthread_cond_signal(&mCondVar);
mIsRunning = EFalse;
CActiveScheduler::Stop();
+ break;
}
default:
{
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javabackup/javabackupcore/build/javabackup.mmp
--- a/javamanager/javabackup/javabackupcore/build/javabackup.mmp Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javabackup/javabackupcore/build/javabackup.mmp Fri Jul 09 16:35:45 2010 +0300
@@ -43,12 +43,14 @@
SOURCE jsbcactive.cpp
SOURCE jsbcdataowner.cpp
+#ifdef RD_JAVA_S60_RELEASE_5_0
+SYSTEMINCLUDE /epoc32/include/connect // Due to abclient.h in S60 5.0
+#endif
+
USERINCLUDE ../src.s60
USERINCLUDE ../../inc.s60
USERINCLUDE ../../../../inc
-SYSTEMINCLUDE /epoc32/include/connect
-
LIBRARY ecom.lib
LIBRARY abclient.lib
LIBRARY javastorage.lib
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javabackup/javabackupcore/src.s60/jsbcdataowner.h
--- a/javamanager/javabackup/javabackupcore/src.s60/jsbcdataowner.h Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javabackup/javabackupcore/src.s60/jsbcdataowner.h Fri Jul 09 16:35:45 2010 +0300
@@ -19,7 +19,7 @@
#ifndef JSBCDATAOWNER_H
#define JSBCDATAOWNER_H
-#include
+#include
namespace java
{
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javacaptain/extensionplugins/javacertstore/src.s60/smartcardcryptotokenreader.cpp
--- a/javamanager/javacaptain/extensionplugins/javacertstore/src.s60/smartcardcryptotokenreader.cpp Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javacaptain/extensionplugins/javacertstore/src.s60/smartcardcryptotokenreader.cpp Fri Jul 09 16:35:45 2010 +0300
@@ -59,7 +59,7 @@
NextState(Initialize());
break;
case EListTokenTypes:
- NextState(ListTokenTypes());
+ NextState(ListTokenTypesL());
break;
case EOpenTokenType:
NextState(OpenTokenType());
@@ -132,11 +132,11 @@
return true;
}
-bool SmartCardCryptoTokenReader::ListTokenTypes()
+bool SmartCardCryptoTokenReader::ListTokenTypesL()
{
TCTTokenTypeAttribute att = { KCTRemovable , 1 };
- iSmartCardTokensAttributes.Append(att);
- iSmartCardTokensInterfaces.Append(TUid::Uid(KInterfaceCertStore));
+ iSmartCardTokensAttributes.AppendL(att);
+ iSmartCardTokensInterfaces.AppendL(TUid::Uid(KInterfaceCertStore));
TCTFindTokenTypesByInterfaceAndAttribute findByIAndA(
iSmartCardTokensInterfaces.Array(), iSmartCardTokensAttributes.Array());
CCTTokenTypeInfo::ListL(iSmartCardTokenTypes, findByIAndA);
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javacaptain/extensionplugins/javacertstore/src.s60/smartcardcryptotokenreader.h
--- a/javamanager/javacaptain/extensionplugins/javacertstore/src.s60/smartcardcryptotokenreader.h Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javacaptain/extensionplugins/javacertstore/src.s60/smartcardcryptotokenreader.h Fri Jul 09 16:35:45 2010 +0300
@@ -61,7 +61,7 @@
SmartCardCryptoTokenReader();
void ConstructL();
bool Initialize();
- bool ListTokenTypes();
+ bool ListTokenTypesL();
bool OpenTokenType();
bool OpenToken();
bool GetTokenInterface();
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javacaptain/extensionplugins/javacertstore/tsrc.s60/build/testsmartcardtokenplugin.mmp
--- a/javamanager/javacaptain/extensionplugins/javacertstore/tsrc.s60/build/testsmartcardtokenplugin.mmp Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javacaptain/extensionplugins/javacertstore/tsrc.s60/build/testsmartcardtokenplugin.mmp Fri Jul 09 16:35:45 2010 +0300
@@ -29,9 +29,6 @@
CAPABILITY CAP_ECOM_PLUGIN
VENDORID VID_DEFAULT
-systeminclude /epoc32/include
-systeminclude /epoc32/include/ecom
-
sourcepath ../src
source testsmartcardtokenplugin.cpp
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javacaptain/extensionplugins/javacertstore/tsrc.s60/src/101F5B72.rss
--- a/javamanager/javacaptain/extensionplugins/javacertstore/tsrc.s60/src/101F5B72.rss Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javacaptain/extensionplugins/javacertstore/tsrc.s60/src/101F5B72.rss Fri Jul 09 16:35:45 2010 +0300
@@ -14,7 +14,7 @@
* Description:
*
*/
-#include
+#include
#include
// True
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javacaptain/extensionplugins/preinstallerstarter/inc/preinstallerstarter.h
--- a/javamanager/javacaptain/extensionplugins/preinstallerstarter/inc/preinstallerstarter.h Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javacaptain/extensionplugins/preinstallerstarter/inc/preinstallerstarter.h Fri Jul 09 16:35:45 2010 +0300
@@ -59,7 +59,9 @@
private:
void startPreinstaller(TBool aIadBoot);
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
void registerMidletApplicationTypeHandler();
+#endif
CoreInterface* mCore;
RProcess* mPreinstaller;
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javacaptain/extensionplugins/preinstallerstarter/src.s60/preinstallerstarter.cpp
--- a/javamanager/javacaptain/extensionplugins/preinstallerstarter/src.s60/preinstallerstarter.cpp Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javacaptain/extensionplugins/preinstallerstarter/src.s60/preinstallerstarter.cpp Fri Jul 09 16:35:45 2010 +0300
@@ -19,7 +19,9 @@
#include
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
#include // for RApaLsSession
+#endif
#include
#include
#include
@@ -320,6 +322,7 @@
* Register 'javalauncher.exe' as the midlet application type handler
* in AppArc. If necessary unregister old handler first.
*/
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
void PreinstallerStarter::registerMidletApplicationTypeHandler()
{
_LIT(KMidpAppArcPlugin, "javalauncher.exe");
@@ -381,6 +384,7 @@
err);
}
}
+#endif
void PreinstallerStarter::RunL()
{
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javacaptain/extensionplugins/settingslistener/build/exports.inf
--- a/javamanager/javacaptain/extensionplugins/settingslistener/build/exports.inf Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javacaptain/extensionplugins/settingslistener/build/exports.inf Fri Jul 09 16:35:45 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2010 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"
@@ -16,4 +16,4 @@
*/
PRJ_EXPORTS
-../inc/settingschangeeventsprovidermessages.h |../../../inc/settingschangeeventsprovidermessages.h
+../inc/settingschangeeventsprovidermessages.h |../../../inc/settingschangeeventsprovidermessages.h
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javacaptain/extensionplugins/settingslistener/build/javacaptain_ext_settingslistener.pro
--- a/javamanager/javacaptain/extensionplugins/settingslistener/build/javacaptain_ext_settingslistener.pro Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javacaptain/extensionplugins/settingslistener/build/javacaptain_ext_settingslistener.pro Fri Jul 09 16:35:45 2010 +0300
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 2010 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"
@@ -20,16 +20,10 @@
CONFIG -= qt
symbian {
- SOURCES += ../src/*.cpp ../src.s60/*.cpp
LIBS += -lcommonengine \
-lcentralrepository \
-lcenrepnotifhandler \
-ljavacomms
}
-!symbian {
- SOURCES += ../src/*.cpp ../src.linux/*.cpp
-}
-
-
include(../../../../../build/omj.pri)
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javacaptain/extensionplugins/settingslistener/inc/settingschangeeventsprovidermessages.h
--- a/javamanager/javacaptain/extensionplugins/settingslistener/inc/settingschangeeventsprovidermessages.h Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javacaptain/extensionplugins/settingslistener/inc/settingschangeeventsprovidermessages.h Fri Jul 09 16:35:45 2010 +0300
@@ -11,7 +11,8 @@
*
* Contributors:
*
-* Description: BootEventProviderMessages
+* Description: Definition of comms messages used for reporting chages in system
+* settings.
*
*/
@@ -35,21 +36,21 @@
typedef enum
{
- UNDEFINED_CHANGE = 0x00,
- MIDP_CLASS_PATH_CHANGE = 0x01,
+ UNDEFINED_CHANGE = 0x00,
+ MIDP_CLASS_PATH_CHANGE = 0x01,
} SettingsChangeEventType_t;
inline void setSettingsChangeEventMessageParams(CommsMessage& aMessage,
- const int& aChangeEventType)
+ const int& aChangeEventType)
{
aMessage.setMessageId(SETTINGS_CHANGE_EVENT_MESSAGE_ID_C);
aMessage << aChangeEventType;
}
inline void getSettingsChangeEventMessageParams(CommsMessage& aMessage,
- int& aChangeEventType)
+ int& aChangeEventType)
{
if (aMessage.getMessageId() == SETTINGS_CHANGE_EVENT_MESSAGE_ID_C)
{
@@ -59,7 +60,7 @@
{
ELOG2(EJavaCaptain, "Received Settings Change Event with wrong MessageId!: %d should be %d",
aMessage.getMessageId(), SETTINGS_CHANGE_EVENT_MESSAGE_ID_C);
- aChangeEventType = 0;
+ aChangeEventType = UNDEFINED_CHANGE;
}
}
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javacaptain/extensionplugins/settingslistener/inc/settingslistenerextension.h
--- a/javamanager/javacaptain/extensionplugins/settingslistener/inc/settingslistenerextension.h Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javacaptain/extensionplugins/settingslistener/inc/settingslistenerextension.h Fri Jul 09 16:35:45 2010 +0300
@@ -11,7 +11,8 @@
*
* Contributors:
*
-* Description: Sample
+* Description: Extension plugin which is used for monitoring changes in various
+* system settings.
*
*/
@@ -23,8 +24,6 @@
#include "extensionplugininterface.h"
#include "settingslistenerinterface.h"
-using namespace java::comms;
-
namespace java
{
namespace captain
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javacaptain/extensionplugins/settingslistener/inc/settingslistenerinterface.h
--- a/javamanager/javacaptain/extensionplugins/settingslistener/inc/settingslistenerinterface.h Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javacaptain/extensionplugins/settingslistener/inc/settingslistenerinterface.h Fri Jul 09 16:35:45 2010 +0300
@@ -11,7 +11,8 @@
*
* Contributors:
*
-* Description: ExtensionPluginInterface
+* Description: Definition of interface, which is used for listening changes in
+* in system settings.
*
*/
@@ -24,15 +25,13 @@
namespace captain
{
-class CoreInterface;
-
class SettingsListenerInterface
{
public:
virtual ~SettingsListenerInterface() {}
- virtual void StartListening() = 0;
- virtual void StopListening() = 0;
+ virtual void startListening() = 0;
+ virtual void stopListening() = 0;
};
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javacaptain/extensionplugins/settingslistener/src.s60/cenreplistener.cpp
--- a/javamanager/javacaptain/extensionplugins/settingslistener/src.s60/cenreplistener.cpp Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javacaptain/extensionplugins/settingslistener/src.s60/cenreplistener.cpp Fri Jul 09 16:35:45 2010 +0300
@@ -15,6 +15,9 @@
*
*/
+#include
+#include
+
#include "coreinterface.h"
#include "eventconsumerinterface.h"
@@ -22,160 +25,91 @@
#include "cenreplistener.h"
#include "settingschangeeventsprovidermessages.h"
-#include
-#include
-
namespace java
{
namespace captain
{
- // General listener used as a base value indicating that whole repository is being
- // listened instead of individual key.
- CenRepListener::CenRepListener() : mKeyType(CenRepListener::GENERAL_LISTENER)
- {
- JELOG2(EJavaCaptain);
- }
+// General listener used as a base value indicating that whole repository is being
+// listened instead of individual key.
+CenRepListener::CenRepListener() : mKeyType(CenRepListener::GENERAL_LISTENER)
+{
+}
- CenRepListener::~CenRepListener()
- {
- JELOG2(EJavaCaptain);
- Close();
- }
+CenRepListener::~CenRepListener()
+{
+ close();
+}
- void CenRepListener::Close()
+void CenRepListener::close()
+{
+ if (mNotifyHandler)
{
- JELOG2(EJavaCaptain);
- if (mNotifyHandler ) {
- mNotifyHandler->StopListening();
- delete mNotifyHandler;
- mNotifyHandler = 0;
- }
- if ( mCenRepSession ) {
- delete mCenRepSession;
- mCenRepSession = 0;
- }
+ mNotifyHandler->StopListening();
+ delete mNotifyHandler;
+ mNotifyHandler = 0;
}
-
- CenRepListener* CenRepListener::NewLC(CoreInterface* aCore, TUid aRepoId, TUint32 aKeyId,
- CCenRepNotifyHandler::TCenRepKeyType aKeyType)
+ if (mCenRepSession)
{
- JELOG2(EJavaCaptain);
- CenRepListener* crListener = new (ELeave) CenRepListener();
- CleanupStack::PushL(crListener);
- crListener->ConstructL(aCore, aRepoId, aKeyId, aKeyType);
- return (crListener);
- }
-
- CenRepListener* CenRepListener::NewL(CoreInterface* aCore, TUid aRepoId, TUint32 aKeyId,
- CCenRepNotifyHandler::TCenRepKeyType aKeyType)
- {
- JELOG2(EJavaCaptain);
- CenRepListener* crListener = CenRepListener::NewLC(aCore, aRepoId, aKeyId, aKeyType);
- CleanupStack::Pop(crListener);
- return (crListener);
+ delete mCenRepSession;
+ mCenRepSession = 0;
}
+}
- CenRepListener* CenRepListener::NewLC(CoreInterface* aCore, TUid aRepoId)
- {
- JELOG2(EJavaCaptain);
- CenRepListener* crListener = new (ELeave) CenRepListener();
- CleanupStack::PushL(crListener);
- crListener->ConstructL(aCore, aRepoId);
- return (crListener);
- }
+CenRepListener* CenRepListener::NewL(CoreInterface* aCore, TUid aRepoId, TUint32 aKeyId,
+ CCenRepNotifyHandler::TCenRepKeyType aKeyType)
+{
+ CenRepListener* crListener = new(ELeave) CenRepListener();
+ CleanupStack::PushL(crListener);
+ crListener->ConstructL(aCore, aRepoId, aKeyId, aKeyType);
+ CleanupStack::Pop(crListener);
+ return (crListener);
+}
- CenRepListener* CenRepListener::NewL(CoreInterface* aCore, TUid aRepoId)
- {
- JELOG2(EJavaCaptain);
- CenRepListener* crListener = CenRepListener::NewLC(aCore, aRepoId);
- CleanupStack::Pop(crListener);
- return (crListener);
- }
+void CenRepListener::ConstructL(CoreInterface* aCore, TUid aRepoId, TUint32 aKeyId,
+ CCenRepNotifyHandler::TCenRepKeyType aKeyType)
+{
+ mCore = aCore;
+ mRepoId = aRepoId;
+ mKeyType = aKeyType;
+ mCenRepSession = CRepository::NewL(mRepoId);
+ mNotifyHandler = CCenRepNotifyHandler::NewL(*this, *mCenRepSession,
+ aKeyType, aKeyId);
+ mNotifyHandler->StartListeningL();
+}
- void CenRepListener::ConstructL(CoreInterface* aCore, TUid aRepoId, TUint32 aKeyId,
- CCenRepNotifyHandler::TCenRepKeyType aKeyType)
+void CenRepListener::HandleNotifyString(TUint32 aKeyId, const TDesC16& /*aNewValue*/)
+{
+ if (KCRUidJavaRuntime == mRepoId && KJavaRuntimeMIDPClasspath == aKeyId)
{
- JELOG2(EJavaCaptain);
- mCore = aCore;
- mRepoId = aRepoId;
- mKeyType = aKeyType;
- mCenRepSession = CRepository::NewL(mRepoId);
- mNotifyHandler = CCenRepNotifyHandler::NewL(*this, *mCenRepSession,
- aKeyType, aKeyId);
- mNotifyHandler->StartListeningL();
+ ILOG(EJavaCaptain, "CenRepListener::HandleNotifyString: change notified "
+ "in key KJavaRuntimeMIDPClasspath");
+ dispatchEvent(SETTINGS_CHANGE_EVENT_PROVIDER,
+ MIDP_CLASS_PATH_CHANGE);
}
-
- void CenRepListener::ConstructL(CoreInterface* aCore, TUid aRepoId)
+ else
{
- JELOG2(EJavaCaptain);
- mCore = aCore;
- mRepoId = aRepoId;
- mCenRepSession = CRepository::NewL(mRepoId);
- mNotifyHandler = CCenRepNotifyHandler::NewL(*this, *mCenRepSession);
- mNotifyHandler->StartListeningL();
- }
-
- void CenRepListener::HandleNotifyInt(TUint32 aKeyId, TInt /*aNewValue*/)
- {
- JELOG2(EJavaCaptain);
- WLOG1(EJavaCaptain, "Change in Unrecognised cenrep TInt key noticed! "
+ WLOG1(EJavaCaptain, "Change in Unrecognised cenrep string key noticed! "
"CR Key= %0x", aKeyId);
}
-
- void CenRepListener::HandleNotifyReal( TUint32 aKeyId, TReal /*aNewValue*/ )
- {
- JELOG2(EJavaCaptain);
- WLOG1(EJavaCaptain, "Change in Unrecognised cenrep TReal key noticed! "
- "CR Key= %0x", aKeyId);
- }
+}
- void CenRepListener::HandleNotifyBinary( TUint32 aKeyId, const TDesC8& /*aNewValue*/ )
- {
- JELOG2(EJavaCaptain);
- WLOG1(EJavaCaptain, "Change in Unrecognised cenrep Binary key noticed! "
- "CR Key= %0x", aKeyId);
- }
-
- void CenRepListener::HandleNotifyGeneric(TUint32 aKeyId)
- {
- JELOG2(EJavaCaptain);
- WLOG1(EJavaCaptain, "Change in Unrecognised cenrep key noticed! "
- "CR Key= %0x", aKeyId);
- }
+void CenRepListener::HandleNotifyError(TUint32 aKeyId, TInt aError, CCenRepNotifyHandler* /* aHandler */)
+{
+ ELOG2(EJavaCaptain, "Error (code: %d) occured when listening changes on "
+ "Cenrep key (Key ID: %0x). Listening stopped!", aError, aKeyId);
+ close();
+}
- void CenRepListener::HandleNotifyString( TUint32 aKeyId, const TDesC16& /*aNewValue*/ )
- {
- JELOG2(EJavaCaptain);
- if ( KCRUidJavaRuntime == mRepoId && KJavaRuntimeMIDPClasspath == aKeyId ) {
- ILOG(EJavaCaptain, "CenRepListener::HandleNotifyString: change notified "
- "in key KJavaRuntimeMIDPClasspath");
- dispatchEvent(SETTINGS_CHANGE_EVENT_PROVIDER,
- MIDP_CLASS_PATH_CHANGE);
- } else {
- WLOG1(EJavaCaptain, "Change in Unrecognised cenrep string key noticed! "
- "CR Key= %0x", aKeyId);
- }
- }
-
- void CenRepListener::HandleNotifyError(TUint32 aKeyId, TInt error, CCenRepNotifyHandler* /* aHandler */)
- {
- JELOG2(EJavaCaptain);
- ELOG2(EJavaCaptain, "Error (code: %d) occured when listening changes on "
- "Cenrep key (Key ID: %0x). Listening stopped!", error, aKeyId);
- Close();
- }
-
- void CenRepListener::dispatchEvent(const std::string& aEvent,
- const SettingsChangeEventType_t& aType) const
- {
- JELOG2(EJavaCaptain);
- ILOG2(EJavaCaptain, "CenRepListener::dispatchEvent: dispatching event=%s "
- "type=%d", aEvent.c_str(), aType);
- CommsMessage eventMsg;
- setSettingsChangeEventMessageParams(eventMsg, aType);
- mCore->getEventDispatcher()->event(aEvent, eventMsg);
- }
+void CenRepListener::dispatchEvent(const std::string& aEvent,
+ const SettingsChangeEventType_t& aType) const
+{
+ ILOG2(EJavaCaptain, "CenRepListener::dispatchEvent: dispatching event=%s "
+ "type=%d", aEvent.c_str(), aType);
+ CommsMessage eventMsg;
+ setSettingsChangeEventMessageParams(eventMsg, aType);
+ mCore->getEventDispatcher()->event(aEvent, eventMsg);
+}
} // namespace captain
} // namespace java
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javacaptain/extensionplugins/settingslistener/src.s60/cenreplistener.h
--- a/javamanager/javacaptain/extensionplugins/settingslistener/src.s60/cenreplistener.h Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javacaptain/extensionplugins/settingslistener/src.s60/cenreplistener.h Fri Jul 09 16:35:45 2010 +0300
@@ -16,58 +16,39 @@
*
*/
-#ifndef CENREP_LISTENER_H
-#define CENREP_LISTENER_H
+#ifndef CENREPLISTENER_H
+#define CENREPLISTENER_H
+
+#include
+#include
#include "javaosheaders.h"
#include "settingschangeeventsprovidermessages.h"
-
-#include
-#include
+#include "javaruntimeprivatecrkeys.h"
namespace java
{
namespace captain
{
-/**
- * Java Runtime environment Central Repository UID
- */
-const TUid KCRUidJavaRuntime = { 0x10282DFD };
-
-/**
- * Indicates classpath for MIDP runtimes. This key value is generated
- * from the values defined by extension libraries.
- */
-const TUint32 KJavaRuntimeMIDPClasspath = 0x00000001;
-
-
class CoreInterface;
OS_NONSHARABLE_CLASS(CenRepListener) :
-public CBase, public MCenRepNotifyHandlerCallback
+ public CBase, public MCenRepNotifyHandlerCallback
{
public:
enum TListenerType {GENERAL_LISTENER = -1};
- static CenRepListener* NewLC(CoreInterface* aCore, TUid aRepoId, TUint32 aKeyId,
- CCenRepNotifyHandler::TCenRepKeyType aKeyType);
static CenRepListener* NewL(CoreInterface* aCore, TUid aRepoId, TUint32 aKeyId,
- CCenRepNotifyHandler::TCenRepKeyType aKeyType);
- static CenRepListener* NewLC(CoreInterface* aCore, TUid aRepoId);
- static CenRepListener* NewL(CoreInterface* aCore, TUid aRepoId);
+ CCenRepNotifyHandler::TCenRepKeyType aKeyType);
virtual ~CenRepListener();
- // MCenRepNotifyHandlerCallback
+ // MCenRepNotifyHandlerCallback (only partial implementation needed here for now)
// These handler methods must know what to do in each case, i.e
// how to handle the change in each particular key.
- virtual void HandleNotifyString( TUint32 aKeyId, const TDesC16& aNewValue );
- virtual void HandleNotifyInt(TUint32 aKeyId, TInt aNewValue);
- virtual void HandleNotifyReal( TUint32 aId, TReal aNewValue );
- virtual void HandleNotifyBinary( TUint32 aId, const TDesC8& aNewValue );
- virtual void HandleNotifyGeneric(TUint32 aKeyId);
- virtual void HandleNotifyError(TUint32 aKeyId, TInt error,
+ virtual void HandleNotifyString(TUint32 aKeyId, const TDesC16& aNewValue);
+ virtual void HandleNotifyError(TUint32 aKeyId, TInt aError,
CCenRepNotifyHandler* aHandler);
protected:
CenRepListener();
@@ -76,10 +57,9 @@
const SettingsChangeEventType_t& aType) const;
private:
- void ConstructL(CoreInterface* aCore, TUid aRepoId);
void ConstructL(CoreInterface* aCore, TUid aRepoId, TUint32 aKeyId,
CCenRepNotifyHandler::TCenRepKeyType aKeyType);
- void Close();
+ void close();
TInt mKeyType;
CoreInterface* mCore;
TUid mRepoId;
@@ -90,5 +70,5 @@
} // namespace captain
} // namespace java
-#endif // CENREP_LISTENER_H
+#endif // CENREPLISTENER_H
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javacaptain/extensionplugins/settingslistener/src.s60/settingslistenerimpl.cpp
--- a/javamanager/javacaptain/extensionplugins/settingslistener/src.s60/settingslistenerimpl.cpp Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javacaptain/extensionplugins/settingslistener/src.s60/settingslistenerimpl.cpp Fri Jul 09 16:35:45 2010 +0300
@@ -24,74 +24,62 @@
namespace captain
{
- SettingsListenerImpl::SettingsListenerImpl(CoreInterface* aCore) :
+SettingsListenerImpl::SettingsListenerImpl(CoreInterface* aCore) :
mCore(aCore)
- {
- JELOG2(EJavaCaptain);
-
- }
-
- SettingsListenerImpl::~SettingsListenerImpl()
- {
- JELOG2(EJavaCaptain);
- cleanUp();
- }
+{
+}
- void SettingsListenerImpl::StartListening()
- {
- JELOG2(EJavaCaptain);
- // All "listeners" must be created&started here.
+SettingsListenerImpl::~SettingsListenerImpl()
+{
+ cleanUp();
+}
- // Currently there is just this one CenRep key to be listened
- std::auto_ptr cRMidpClassPathChangeListener;
- int error = createCenRepKeyListener(KCRUidJavaRuntime, KJavaRuntimeMIDPClasspath,
- CCenRepNotifyHandler::EStringKey,
- cRMidpClassPathChangeListener);
- if ( KErrNone == error ) {
- mCenRepListeners.push_back(cRMidpClassPathChangeListener.release());
- } else {
- ELOG4(EJavaCaptain, "Error (code: %d) occured when starting "
- "CenRepListener (repo=%0x, key=%0x, keytype=%d)",
- error, KCRUidJavaRuntime.iUid, KJavaRuntimeMIDPClasspath,
- CCenRepNotifyHandler::EStringKey);
- }
- }
+void SettingsListenerImpl::startListening()
+{
+ // All "listeners" must be created&started here.
- void SettingsListenerImpl::StopListening()
+ // Currently there is just this one CenRep key to be listened
+ TInt error = KErrNone;
+ CenRepListener* crMidpClassPathChangeListener =
+ createCenRepKeyListener(KCRUidJavaRuntime, KJavaRuntimeMIDPClasspath,
+ CCenRepNotifyHandler::EStringKey, error);
+ if (crMidpClassPathChangeListener)
{
- JELOG2(EJavaCaptain);
- cleanUp();
+ mCenRepListeners.push_back(crMidpClassPathChangeListener);
}
-
- int SettingsListenerImpl::createCenRepKeyListener(TUid aRepoId, TUint32 aKeyId,
- CCenRepNotifyHandler::TCenRepKeyType aKeyType,
- std::auto_ptr& aListener)
- {
- JELOG2(EJavaCaptain);
- TRAPD( error, aListener.reset(CenRepListener::NewL(mCore, aRepoId, aKeyId, aKeyType)) );
- return error;
- }
-
- int SettingsListenerImpl::createCenRepListener(TUid aRepoId, CenRepListener*& aListener)
+ else
{
- JELOG2(EJavaCaptain);
- TRAPD( error, aListener = CenRepListener::NewL(mCore, aRepoId));
- return error;
+ ELOG4(EJavaCaptain, "Error (code: %d) occured when starting "
+ "CenRepListener (repo=%0x, key=%0x, keytype=%d)",
+ error, KCRUidJavaRuntime.iUid, KJavaRuntimeMIDPClasspath,
+ CCenRepNotifyHandler::EStringKey);
}
+}
- // Clean up owned resources
- void SettingsListenerImpl::cleanUp()
+void SettingsListenerImpl::stopListening()
+{
+ cleanUp();
+}
+
+CenRepListener* SettingsListenerImpl::createCenRepKeyListener(TUid aRepoId, TUint32 aKeyId,
+ CCenRepNotifyHandler::TCenRepKeyType aKeyType, TInt& aErrorCode)
+{
+ CenRepListener* listener = NULL;
+ TRAP(aErrorCode, listener = CenRepListener::NewL(mCore, aRepoId, aKeyId, aKeyType));
+ return listener; // Possible error propagated as a function parameter
+}
+
+// Clean up owned resources
+void SettingsListenerImpl::cleanUp()
+{
+ for (crListeners_t::iterator listenersIter = mCenRepListeners.begin();
+ listenersIter != mCenRepListeners.end(); ++listenersIter)
{
- JELOG2(EJavaCaptain);
-
- for ( crListeners_t::iterator listenersIter = mCenRepListeners.begin();
- listenersIter != mCenRepListeners.end(); ++listenersIter )
- {
- delete *listenersIter;
- *listenersIter = 0;
- }
- mCenRepListeners.clear();
+ delete *listenersIter;
+ *listenersIter = 0;
}
+ mCenRepListeners.clear();
+}
} // namespace captain
} // namespace java
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javacaptain/extensionplugins/settingslistener/src.s60/settingslistenerimpl.h
--- a/javamanager/javacaptain/extensionplugins/settingslistener/src.s60/settingslistenerimpl.h Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javacaptain/extensionplugins/settingslistener/src.s60/settingslistenerimpl.h Fri Jul 09 16:35:45 2010 +0300
@@ -20,14 +20,13 @@
#ifndef SETTINGSLISTENERIMPL_H
#define SETTINGSLISTENERIMPL_H
-#include "javaosheaders.h"
-
-#include "settingslistenerinterface.h"
-
#include
#include
#include
+#include "javaosheaders.h"
+#include "settingslistenerinterface.h"
+
namespace java
{
namespace captain
@@ -43,15 +42,14 @@
virtual ~SettingsListenerImpl();
// SystemSettingsChangeListenerInterface
- virtual void StartListening();
- virtual void StopListening();
+ virtual void startListening();
+ virtual void stopListening();
private:
void cleanUp();
- int createCenRepKeyListener(TUid aRepoId, TUint32 aKeyId,
- CCenRepNotifyHandler::TCenRepKeyType aKeyType,
- std::auto_ptr& aListener);
- int createCenRepListener(TUid aRepoId, CenRepListener*& aListener);
+ CenRepListener* createCenRepKeyListener(TUid aRepoId, TUint32 aKeyId,
+ CCenRepNotifyHandler::TCenRepKeyType aKeyType,
+ TInt& aErrorCode);
CoreInterface* mCore; // resource not owned
typedef std::vector crListeners_t;
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javacaptain/extensionplugins/settingslistener/src/settingslistenerextension.cpp
--- a/javamanager/javacaptain/extensionplugins/settingslistener/src/settingslistenerextension.cpp Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javacaptain/extensionplugins/settingslistener/src/settingslistenerextension.cpp Fri Jul 09 16:35:45 2010 +0300
@@ -11,12 +11,11 @@
*
* Contributors:
*
-* Description: Sample
+* Description: Implementation for creating system settings listener plugin
*
*/
#include "logger.h"
-
#include "settingslistenerextension.h"
#include "settingslistenerimpl.h"
@@ -35,40 +34,32 @@
namespace captain
{
- SettingsListenerExtension::SettingsListenerExtension() : mCore(0), mSettingsListenerImpl(0)
+SettingsListenerExtension::SettingsListenerExtension() : mCore(0), mSettingsListenerImpl(0)
{
- JELOG2(EJavaCaptain);
- ILOG(EJavaCaptain, "SettingsListenerExtension::SettingsListenerExtension()");
}
SettingsListenerExtension::~SettingsListenerExtension()
{
- JELOG2(EJavaCaptain);
- ILOG(EJavaCaptain, "SettingsListenerExtension::~SettingsListenerExtension()");
}
void SettingsListenerExtension::startPlugin(CoreInterface* core)
{
- JELOG2(EJavaCaptain);
- ILOG(EJavaCaptain, "SettingsListenerExtension::startPlugin()");
- if ( mSettingsListenerImpl || mCore )
+ if (mSettingsListenerImpl || mCore)
{
WLOG(EJavaCaptain, "Settingslistener plugin already running, terminating previous instance first!");
stopPlugin();
}
mCore = core;
mSettingsListenerImpl = new SettingsListenerImpl(mCore);
- mSettingsListenerImpl->StartListening();
+ mSettingsListenerImpl->startListening();
}
void SettingsListenerExtension::stopPlugin()
{
- JELOG2(EJavaCaptain);
- ILOG(EJavaCaptain, "SettingsListenerExtension::stopPlugin()");
mCore = 0;
- if ( mSettingsListenerImpl )
+ if (mSettingsListenerImpl)
{
- mSettingsListenerImpl->StopListening();
+ mSettingsListenerImpl->stopListening();
delete mSettingsListenerImpl;
mSettingsListenerImpl = 0;
}
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javacaptain/inc.s60/tickerprovider.h
--- a/javamanager/javacaptain/inc.s60/tickerprovider.h Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javacaptain/inc.s60/tickerprovider.h Fri Jul 09 16:35:45 2010 +0300
@@ -43,7 +43,7 @@
virtual void cancel();
// Helpers
-// virtual long long getCurrentJavaTime();
+ virtual long long getPlatformCurrentJavaTime();
protected:
// CActive
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javacaptain/inc/settingschangeeventsprovidermessages.h
--- a/javamanager/javacaptain/inc/settingschangeeventsprovidermessages.h Tue Jul 06 20:36:19 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,69 +0,0 @@
-/*
-* Copyright (c) 2010 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: BootEventProviderMessages
-*
-*/
-
-#ifndef SETTINGSCHANGEEVENTSPROVIDERMESSAGES_H
-#define SETTINGSCHANGEEVENTSPROVIDERMESSAGES_H
-
-#include "commsmessage.h"
-#include "logger.h"
-
-namespace java
-{
-namespace captain
-{
-
-using namespace java::util;
-using namespace java::comms;
-
-const int SETTINGS_CHANGE_EVENT_MESSAGE_ID_C = 1;
-
-const char* const SETTINGS_CHANGE_EVENT_PROVIDER = "settingslistener";
-
-typedef enum
-{
- UNDEFINED_CHANGE = 0x00,
- MIDP_CLASS_PATH_CHANGE = 0x01,
-
-} SettingsChangeEventType_t;
-
-
-inline void setSettingsChangeEventMessageParams(CommsMessage& aMessage,
- const int& aChangeEventType)
-{
- aMessage.setMessageId(SETTINGS_CHANGE_EVENT_MESSAGE_ID_C);
- aMessage << aChangeEventType;
-}
-
-inline void getSettingsChangeEventMessageParams(CommsMessage& aMessage,
- int& aChangeEventType)
-{
- if (aMessage.getMessageId() == SETTINGS_CHANGE_EVENT_MESSAGE_ID_C)
- {
- aMessage >> aChangeEventType;
- }
- else
- {
- ELOG2(EJavaCaptain, "Received Settings Change Event with wrong MessageId!: %d should be %d",
- aMessage.getMessageId(), SETTINGS_CHANGE_EVENT_MESSAGE_ID_C);
- aChangeEventType = 0;
- }
-}
-
-} // namespace captain
-} // namespace java
-
-#endif // SETTINGSCHANGEEVENTSPROVIDERMESSAGES_H
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javacaptain/src.s60/tickerprovider.cpp
--- a/javamanager/javacaptain/src.s60/tickerprovider.cpp Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javacaptain/src.s60/tickerprovider.cpp Fri Jul 09 16:35:45 2010 +0300
@@ -91,8 +91,8 @@
}
mNextTickAt = 0LL;
}
-/*
-long long TickerProvider::getCurrentJavaTime()
+
+long long TickerProvider::getPlatformCurrentJavaTime()
{
JELOG2(EJavaCaptain);
TTime currentTime;
@@ -101,7 +101,7 @@
// Current time - javaEpoc && uSeconds -> mSeconds
return (currentTime.Int64()- TTime(TDateTime(1970,EJanuary,0,0,0,0,0)).Int64()) / 1000LL;
}
-*/
+
void TickerProvider::RunL()
{
JELOG2(EJavaCaptain);
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javacaptain/src/tickerproviderinterface.h
--- a/javamanager/javacaptain/src/tickerproviderinterface.h Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javacaptain/src/tickerproviderinterface.h Fri Jul 09 16:35:45 2010 +0300
@@ -64,6 +64,19 @@
// Helpers
/**
* Returns milliseconds from EPOCH.
+ * This can be overridden with the platform specific implementation. Use case for
+ * overriding is that in some platforms gettimeofday implementation can't handle
+ * correctly times after 2038.
+ * @param[in] -
+ * @return - milliseconds from EPOCH in success, -1 if fails
+ */
+ virtual long long getPlatformCurrentJavaTime()
+ {
+ return -1LL;
+ }
+
+ /**
+ * Returns milliseconds from EPOCH.
* @param[in] -
* @return - milliseconds from EPOCH in success, -1 if fails
*/
@@ -73,7 +86,8 @@
int err = gettimeofday(&tim, NULL);
if (-1 == err)
{
- return -1LL;
+ WLOG(EJavaCaptain, "getCurrentJavaTime: gettimeofday returned -1");
+ return getPlatformCurrentJavaTime();
}
return (tim.tv_sec * 1000LL) +
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javacaptain/systemams/src/certificatesmanager.cpp
--- a/javamanager/javacaptain/systemams/src/certificatesmanager.cpp Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javacaptain/systemams/src/certificatesmanager.cpp Fri Jul 09 16:35:45 2010 +0300
@@ -231,7 +231,7 @@
LazyInit();
iCurrentCertInfo = getTrustRootL(aId);
RArray applications;
- applications.Append(KMidletInstallApplicabilityUid);
+ applications.AppendL(KMidletInstallApplicabilityUid);
iCertStore->SetApplicability(*iCurrentCertInfo, applications, iStatus);
User::WaitForRequest(iStatus);
if (iStatus.Int() == KErrNone)
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/appinstuiplugin/src/javainstalllauncher.cpp
--- a/javamanager/javainstaller/appinstuiplugin/src/javainstalllauncher.cpp Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javainstaller/appinstuiplugin/src/javainstalllauncher.cpp Fri Jul 09 16:35:45 2010 +0300
@@ -228,7 +228,7 @@
// Do NOT close rJavaInstaller now -> the caller gets notification when the
// process actually closes.
- iHandlesToClose.Append(rJavaInstaller);
+ iHandlesToClose.AppendL(rJavaInstaller);
}
void CJavaInstallLauncher::SilentInstallL(RFile& aFile,
@@ -410,7 +410,7 @@
// Do NOT close rJavaInstaller now -> the caller gets notification when the
// process actually closes.
- iHandlesToClose.Append(rJavaInstaller);
+ iHandlesToClose.AppendL(rJavaInstaller);
}
void CJavaInstallLauncher::UninstallL(const TUid& aUid, const TDesC8&, /*aMIME*/
@@ -451,7 +451,7 @@
// Do NOT close rJavaInstaller now -> the caller gets notification when the
// process actually closes.
- iHandlesToClose.Append(rJavaInstaller);
+ iHandlesToClose.AppendL(rJavaInstaller);
}
void CJavaInstallLauncher::SilentUninstallL(const TUid& aUid, const TDesC8&, /*aMIME*/
@@ -539,7 +539,7 @@
// Do NOT close rJavaInstaller now -> the caller gets notification when the
// process actually closes.
- iHandlesToClose.Append(rJavaInstaller);
+ iHandlesToClose.AppendL(rJavaInstaller);
}
TBool CJavaInstallLauncher::IsAppShellUpdate()
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/iconsizenotifplugin/build/bld.inf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/iconsizenotifplugin/build/bld.inf Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,19 @@
+/*
+* Copyright (c) 2010 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: Build information file for Java Icon Size Notifier Plugin
+*
+*/
+
+PRJ_MMPFILES
+javaiconsizenotifplugin.mmp
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/iconsizenotifplugin/build/javaiconsizenotifplugin.mmp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/iconsizenotifplugin/build/javaiconsizenotifplugin.mmp Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2010 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: Java notifier ecom plugin used to access the UI env
+* from non UI context.
+*/
+
+
+#include
+
+
+TARGET javaiconsizenotifplugin.dll
+TARGETTYPE PLUGIN
+UID 0x10009D8D 0x101FD689
+
+CAPABILITY CAP_ECOM_PLUGIN
+VENDORID VID_DEFAULT
+
+PAGED
+
+APP_LAYER_SYSTEMINCLUDE
+
+START RESOURCE ../data/javaiconsizenotifplugin.rss
+TARGET javaiconsizenotifplugin.rsc
+END
+
+SOURCEPATH ../src
+SOURCE iconsizenotifier.cpp
+
+USERINCLUDE .
+USERINCLUDE ../inc
+USERINCLUDE ../../../../inc
+
+LIBRARY euser.lib
+LIBRARY eiksrv.lib // MEikSrvNotifierBase2
+LIBRARY cdlengine.lib // AknLayoutScalable_Avkon
+LIBRARY aknlayout2scalable.lib // TAknWindowComponentLayout
+LIBRARY avkon.lib // TAknLayoutRect
+LIBRARY eikcore.lib // TAknLayoutRect
+
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/iconsizenotifplugin/data/javaiconsizenotifplugin.rss
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/iconsizenotifplugin/data/javaiconsizenotifplugin.rss Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2010 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: ECOM resource definition
+*
+*/
+
+#include
+#include
+
+RESOURCE REGISTRY_INFO r_registry
+ {
+ resource_format_version = RESOURCE_FORMAT_VERSION_2;
+ dll_uid = 0x101FD689;
+ interfaces =
+ {
+ INTERFACE_INFO
+ {
+ interface_uid = KUikonUidPluginInterfaceNotifiers;
+ implementations =
+ {
+ IMPLEMENTATION_INFO
+ {
+ implementation_uid = 0x101FD68A;
+ version_no = 1;
+ display_name = "JavaIconSizeNotifPlugin";
+ default_data = "";
+ opaque_data = "0";
+ rom_only = 0; // This is not a ROM only plugin
+ }
+ };
+ }
+ };
+ }
+
+// End of File
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/iconsizenotifplugin/inc/iconsizenotifier.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/iconsizenotifplugin/inc/iconsizenotifier.h Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2010 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:
+*
+*/
+
+
+#ifndef ICONSIZENOTIFIER_H
+#define ICONSIZENOTIFIER_H
+
+
+#include // MEikSrvNotifierBase2
+
+
+const TInt KIdIconSizeNotifPlugin = 0x101FD68B;
+const TUid KUidIconSizeNotifPlugin = {KIdIconSizeNotifPlugin};
+
+
+class CIconSizeNotifier : public CBase, public MEikSrvNotifierBase2
+{
+public:
+ static CIconSizeNotifier* NewLC();
+ ~CIconSizeNotifier();
+
+private:
+ CIconSizeNotifier();
+ void ConstructL();
+
+// From MEikSrvNotifierBase2
+public:
+ void Release();
+ TNotifierInfo RegisterL();
+ TNotifierInfo Info() const;
+ void StartL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage);
+ TPtrC8 StartL(const TDesC8& aBuffer);
+ void Cancel();
+ TPtrC8 UpdateL(const TDesC8& aBuffer);
+ void UpdateL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage);
+ TInt NotifierCapabilites();
+private:
+ TNotifierInfo iInfo;
+};
+
+#endif // ICONSIZENOTIFIER_H
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/iconsizenotifplugin/inc/iconsizeutils.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/iconsizenotifplugin/inc/iconsizeutils.h Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,85 @@
+/*
+* Copyright (c) 2010 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:
+*
+*/
+
+#ifndef ICONSIZEUTILS_H
+#define ICONSIZEUTILS_H
+
+#include
+#include
+
+/**
+ * Fallback value of expected size of raster icons in Menu & Home Screen.
+ * Copy of KJavaIconWidth in Menu's mcsmenuiconutility.cpp.
+ */
+const TInt KIconInMenuFallbackSize = 88;
+
+/**
+ * Fallback value of expected size of raster icons in App Mgr.
+ */
+const TInt KIconInAppMgrFallbackSize = 46;
+
+/**
+ * Utility class packing all Java icon sizes needed troughout the system.
+ */
+class TIconSizes
+{
+public:
+ TSize iMenuIconSize;
+ TSize iAppMgrIconSize;
+};
+
+/**
+ * Utility class dealing with Java icon sizes.
+ */
+class IconSizeUtils
+{
+public:
+ /**
+ * Helper for getting the ideal sizes for Java raster icons.
+ * Accesses Akn layouts, therefore a Ui context is required
+ * (CEikonEnv present in the calling thread).
+ * This function has been inlined so that the Java App Mgr plugin
+ * does not have to statically link against the ecom plugin dll.
+ */
+ static TIconSizes GetIconSizes()
+ {
+ TIconSizes res;
+
+ // Menu & Home Screen icons size.
+ // No api to get it so just use the fallback value for now.
+ res.iMenuIconSize = TSize(KIconInMenuFallbackSize, KIconInMenuFallbackSize);
+
+ // App manager icon size.
+ // list_double_large_graphic_pane_vc_g1 = the icon of the app mgr list in landscape
+ TAknLayoutRect layoutRect;
+ layoutRect.LayoutRect(TRect(),
+ AknLayoutScalable_Avkon::list_double_large_graphic_pane_vc_g1(0).LayoutLine());
+ TRect rect(layoutRect.Rect());
+ TInt w(rect.Width());
+ TInt h(rect.Height());
+ if (w < 0 || h < 0)
+ {
+ w = KIconInAppMgrFallbackSize;
+ h = KIconInAppMgrFallbackSize;
+ }
+ res.iAppMgrIconSize = TSize(w, h);
+
+ return res;
+ }
+};
+
+#endif // ICONSIZEUTILS_H
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/iconsizenotifplugin/src/iconsizenotifier.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/iconsizenotifplugin/src/iconsizenotifier.cpp Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,135 @@
+/*
+* Copyright (c) 2010 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:
+*
+*/
+
+#include
+#include
+#include
+#include
+
+#include "iconsizenotifier.h"
+#include "iconsizeutils.h"
+
+const TUid KUidScreenOutput = { 0x10009D48 };
+
+CIconSizeNotifier* CIconSizeNotifier::NewLC()
+{
+ CIconSizeNotifier* self = new(ELeave) CIconSizeNotifier();
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ return self;
+}
+
+CIconSizeNotifier::~CIconSizeNotifier()
+{
+}
+
+CIconSizeNotifier::CIconSizeNotifier()
+{
+}
+
+void CIconSizeNotifier::ConstructL()
+{
+}
+
+void CIconSizeNotifier::Release()
+{
+ delete this;
+}
+
+CIconSizeNotifier::TNotifierInfo CIconSizeNotifier::RegisterL()
+{
+ iInfo.iUid = KUidIconSizeNotifPlugin;
+ iInfo.iChannel = KUidScreenOutput;
+ iInfo.iPriority = ENotifierPriorityHigh;
+ return iInfo;
+}
+
+CIconSizeNotifier::TNotifierInfo CIconSizeNotifier::Info() const
+{
+ return iInfo;
+}
+
+void CIconSizeNotifier::StartL(const TDesC8& /*aBuffer*/, TInt aReplySlot, const RMessagePtr2& aMessage)
+{
+ TPckgBuf res(IconSizeUtils::GetIconSizes());
+ aMessage.WriteL(aReplySlot, res);
+ aMessage.Complete(KErrNone);
+}
+
+TPtrC8 CIconSizeNotifier::StartL(const TDesC8& /*aBuffer*/)
+{
+ return KNullDesC8();
+}
+
+void CIconSizeNotifier::Cancel()
+{
+}
+
+TPtrC8 CIconSizeNotifier::UpdateL(const TDesC8& /*aBuffer*/)
+{
+ return KNullDesC8();
+}
+
+void CIconSizeNotifier::UpdateL(const TDesC8& /*aBuffer*/, TInt /*aReplySlot*/, const RMessagePtr2& aMessage)
+{
+ aMessage.Complete(KErrNotSupported);
+}
+
+void CreateNotifiersL(CArrayPtrFlat& aNotifiers)
+{
+ CIconSizeNotifier* notifier1 = CIconSizeNotifier::NewLC();
+ aNotifiers.AppendL(notifier1);
+ CleanupStack::Pop(notifier1);
+}
+
+CArrayPtr* NotifierArray()
+{
+ CArrayPtrFlat* notifiers = new CArrayPtrFlat(1);
+ if (notifiers)
+ {
+ TRAPD(err, CreateNotifiersL(*notifiers));
+ if (err)
+ {
+ TInt count = notifiers->Count();
+ while (count--)
+ {
+ (*notifiers)[count]->Release();
+ }
+ delete notifiers;
+ notifiers = NULL;
+ }
+ }
+ return notifiers;
+}
+
+TInt CIconSizeNotifier::NotifierCapabilites()
+{
+ return ENoSpecialCapabilities;
+}
+
+// ECom plugin entry point
+const TImplementationProxy ImplementationTable[] =
+{
+ IMPLEMENTATION_PROXY_ENTRY(0x101FD68A, NotifierArray)
+};
+
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+{
+ aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+ return ImplementationTable;
+}
+
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installcopier/build/javainstallcopier.pro
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installcopier/build/javainstallcopier.pro Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,31 @@
+#
+# Copyright (c) 2010 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:
+#
+
+TEMPLATE=app
+TARGET=javainstallcopier
+CONFIG += omj no_icon stl
+CONFIG -= qt
+
+symbian {
+ TARGET.UID2 = 0x20031612
+ TARGET.UID3 = 0x20031612
+
+ TARGET.CAPABILITY = AllFiles
+
+ LIBS += -lefsrv -lcharconv
+}
+
+include(../../../../build/omj.pri)
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installcopier/src/javainstallcopier.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installcopier/src/javainstallcopier.cpp Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,153 @@
+/*
+* Copyright (c) 2010 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:
+*
+* JavaInstallCopier.exe is a utility for copying Java installation
+* files from other processes private data cages to JavaInstaller's
+* private data cage. JavaSifPlugin calls JavaInstallCopier if
+* installation is started from a file which resides in a private
+* data cage which JavaInstaller cannot access.
+*
+*/
+
+
+#ifdef __SYMBIAN32__
+#include
+#include
+#endif // __SYMBIAN32__
+
+#include "exceptionbase.h"
+#include "javaoslayer.h"
+#include "logger.h"
+#include "runtimeexception.h"
+
+using namespace java::runtime;
+using namespace java::util;
+
+int isCopyAllowed()
+{
+ int result = 0;
+#ifdef __SYMBIAN32__
+ // Only SifServer (0x10285BCB) is allowed to launch JavaInstallCopier.
+ TSecureId creatorSecId(User::CreatorSecureId());
+ if (0x10285BCB != creatorSecId.iId)
+ {
+ ELOG1(EJavaInstaller,
+ "INSTALLCOPIER: Process 0x%x is not allowed to "
+ "launch JavaInstallCopier", creatorSecId.iId);
+ result = KErrPermissionDenied;
+ }
+#endif // __SYMBIAN32__
+ return result;
+}
+
+int copyToInstallerDir(int argc, char *argv[])
+{
+ int result = 0;
+
+#ifdef __SYMBIAN32__
+ RFs rfs;
+ result = rfs.Connect();
+ if (KErrNone != result)
+ {
+ ELOG1(EJavaInstaller,
+ "INSTALLCOPIER: Connecting to RFs failed, err=%d", result);
+ return result;
+ }
+
+ CFileMan* fm = NULL;
+ TRAP(result, fm = CFileMan::NewL(rfs));
+ if (KErrNone != result)
+ {
+ ELOG1(EJavaInstaller,
+ "INSTALLCOPIER: Creating CFileMan failed, err=%d", result);
+ return result;
+ }
+
+ _LIT(KJavaInstallerTmp, "\\private\\102033E6\\installer\\tmp\\");
+ for (int i = 1; i < argc && KErrNone == result; i++)
+ {
+ TPtrC8 srcPtr((const TText8*)argv[i]);
+ TFileName srcPath;
+ CnvUtfConverter::ConvertToUnicodeFromUtf8(srcPath, srcPtr);
+ // Get the drive from the srcPath...
+ TParse fp;
+ rfs.Parse(srcPath, fp);
+ // ...and prefix it to KJavaInstallerTmp path.
+ TFileName dstPath = fp.Drive();
+ dstPath.Append(KJavaInstallerTmp);
+
+ result = fm->Copy(srcPath, dstPath, CFileMan::ERecurse|CFileMan::EOverWrite);
+
+ std::wstring srcWs((wchar_t*)srcPath.Ptr(), srcPath.Length());
+ std::wstring dstWs((wchar_t*)dstPath.Ptr(), dstPath.Length());
+ if (KErrNone == result)
+ {
+ ILOG2(EJavaInstaller, "INSTALLCOPIER: Copied %S to %S",
+ srcWs.c_str(), dstWs.c_str());
+ }
+ else
+ {
+ ELOG3(EJavaInstaller,
+ "INSTALLCOPIER: Copying %S to %S failed, err=%d",
+ srcWs.c_str(), dstWs.c_str(), result);
+ }
+ }
+
+ delete fm;
+ fm = NULL;
+ rfs.Close();
+#else // __SYMBIAN32__
+ for (int i = 1; i < argc && result == 0; i++)
+ {
+ WLOG1(EJavaInstaller, "INSTALLCOPIER: Ignored %s", argv[i]);
+ }
+#endif // __SYMBIAN32__
+
+ return result;
+}
+
+int main(int argc, char *argv[])
+{
+ //ILOG(EJavaInstaller, "INSTALLCOPIER main()");
+ JavaOsLayer::startUpTrace("INSTALLCOPIER main() start", -1, -1);
+
+ int result = 0;
+ try
+ {
+ result = isCopyAllowed();
+ if (0 == result)
+ {
+ result = copyToInstallerDir(argc, argv);
+ }
+ }
+ catch (RuntimeException& e)
+ {
+ ELOG1(EJavaInstaller, "INSTALLCOPIER main() RuntimeException caught: %s",
+ e.toString().c_str());
+ }
+ catch (ExceptionBase& e)
+ {
+ ELOG1(EJavaInstaller, "INSTALLCOPIER main() ExceptionBase caught: %s",
+ e.toString().c_str());
+ }
+ catch (std::exception& e)
+ {
+ ELOG1(EJavaInstaller, "INSTALLCOPIER main() Exception %s caught", e.what());
+ }
+
+ //ILOG1(EJavaInstaller, "INSTALLCOPIER main() exit %d", result);
+ JavaOsLayer::startUpTrace("INSTALLCOPIER main() end", -1, -1);
+ return result;
+}
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/build/javainstaller.pro
--- a/javamanager/javainstaller/installer/build/javainstaller.pro Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javainstaller/installer/build/javainstaller.pro Fri Jul 09 16:35:45 2010 +0300
@@ -37,7 +37,8 @@
INCLUDEPATH += ../src.s60/applicationregistrator \
../src.s60/iconconverter \
../src.s60/jadjarmatcher \
- ../src.s60/utils
+ ../src.s60/utils \
+ ../../iconsizenotifplugin/inc
SOURCES += ../src.s60/applicationregistrator/applicationregistrator.cpp \
../src.s60/applicationregistrator/sifnotifier.cpp \
@@ -53,7 +54,7 @@
LIBS += -lapgrfx -lbafl -lcentralrepository -lcharconv -lefsrv -lestor \
-lezip -lfbscli -limageconversion -lmsgs \
-lsysutil -lplatformenv -lws32 -lapparc -lcentralrepository \
- -lhal -lcaf -lcafutils
+ -lhal -lcaf -lcafutils -lbitmaptransforms
contains(PROJECT_DEFINES,RD_JAVA_S60_50_REL2) {
LIBS += -lmcsmenu
@@ -61,11 +62,7 @@
contains(PROJECT_DEFINES,RD_JAVA_S60_RELEASE_10_1_ONWARDS) {
CONFIG += hb
- LIBS += -lxqservice
- }
-
- contains(PROJECT_DEFINES,RD_JAVA_USIF_NOTIFY_PROGRESS) {
- LIBS += -lsifnotification
+ LIBS += -lsifnotification -lxqservice
}
MMP_RULES += \
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/javasrc.s60/com/nokia/mj/impl/installer/applicationregistrator/ApplicationRegistrator.java
--- a/javamanager/javainstaller/installer/javasrc.s60/com/nokia/mj/impl/installer/applicationregistrator/ApplicationRegistrator.java Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javainstaller/installer/javasrc.s60/com/nokia/mj/impl/installer/applicationregistrator/ApplicationRegistrator.java Fri Jul 09 16:35:45 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 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"
@@ -355,6 +355,8 @@
String aJarFilename,
StringBuffer aIconSuffix)
{
+ Log.log("ApplicationRegistrator.convertIcon: " + aInputIconFilename +
+ " --> " + aOutputIconFilename + ", from jar " + aJarFilename);
return _convertIcon(aInputIconFilename, aOutputIconFilename,
aJarFilename, aIconSuffix);
}
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/javasrc.s60/com/nokia/mj/impl/installer/applicationregistrator/SifRegistrator.java
--- a/javamanager/javainstaller/installer/javasrc.s60/com/nokia/mj/impl/installer/applicationregistrator/SifRegistrator.java Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javainstaller/installer/javasrc.s60/com/nokia/mj/impl/installer/applicationregistrator/SifRegistrator.java Fri Jul 09 16:35:45 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -60,6 +60,14 @@
}
/**
+ * Returns SIF specific error category from given error id.
+ */
+ public static int getErrorCategory(int aErrorId)
+ {
+ return _getErrorCategory(aErrorId);
+ }
+
+ /**
* Launches the application view. If launching application view
* fails this method does not throw exception but produces an
* error log entry.
@@ -157,7 +165,7 @@
if (ret < 0)
{
InstallerException.internalError(
- "Creating session failed with code " + ret);
+ "Creating SIF session failed with code " + ret);
}
//Log.log("SifRegistrator session started");
iSessionHandle = ret;
@@ -176,36 +184,18 @@
*/
public void registerSuite(SuiteInfo aSuiteInfo, boolean aIsUpdate)
{
- if (0 == iSessionHandle)
- {
- InstallerException.internalError("No valid SIF session.");
- }
+ checkSession();
Log.log("SifRegistrator registering application suite " +
aSuiteInfo.getGlobalId());
- if (_getUsifMode() > 0)
+ // Register suite as a component.
+ registerComponent(aSuiteInfo, aIsUpdate);
+ registerLocalizedComponentName(aSuiteInfo, -1);
+ // Register applications within the component.
+ Vector apps = aSuiteInfo.getApplications();
+ for (int i = 0; i < apps.size(); i++)
{
- // USIF Phase 2 registration.
- // Register suite as a component.
- registerComponent(aSuiteInfo, aIsUpdate);
- registerLocalizedComponentName(aSuiteInfo, -1);
- // Register applications within the component.
- Vector apps = aSuiteInfo.getApplications();
- for (int i = 0; i < apps.size(); i++)
- {
- registerApplication(aSuiteInfo, i);
- }
- }
- else
- {
- // USIF Phase 1 registration.
- // Register each application in the suite.
- Vector apps = aSuiteInfo.getApplications();
- for (int i = 0; i < apps.size(); i++)
- {
- registerComponent(aSuiteInfo, i, aIsUpdate);
- registerLocalizedComponentName(aSuiteInfo, i);
- }
+ registerApplication(aSuiteInfo, i);
}
registerLocalizedProperties(aSuiteInfo);
}
@@ -221,29 +211,12 @@
*/
public void unregisterSuite(SuiteInfo aSuiteInfo)
{
- if (0 == iSessionHandle)
- {
- InstallerException.internalError("No valid SIF session.");
- }
+ checkSession();
Log.log("SifRegistrator unregistering application suite " +
aSuiteInfo.getGlobalId());
- if (_getUsifMode() > 0)
- {
- // USIF Phase 2 unregistration.
- // Unregister suite as a component.
- unregisterComponent(aSuiteInfo);
- }
- else
- {
- // USIF Phase 1 unregistration.
- // Unregister each application in the suite.
- Vector apps = aSuiteInfo.getApplications();
- for (int i = 0; i < apps.size(); i++)
- {
- unregisterComponent(aSuiteInfo, i);
- }
- }
+ // Unregister suite as a component.
+ unregisterComponent(aSuiteInfo);
}
/**
@@ -256,15 +229,11 @@
*/
public void commitSession()
{
- if (0 == iSessionHandle)
- {
- InstallerException.internalError("No valid SIF session.");
- }
-
+ checkSession();
int err = _commitSession(iSessionHandle);
if (err < 0)
{
- InstallerException.internalError("Commiting session failed with code " + err);
+ InstallerException.internalError("Commiting SIF session failed with code " + err);
}
// Current session has been closed
iSessionHandle = 0;
@@ -279,17 +248,13 @@
*/
public void rollbackSession()
{
- if (0 == iSessionHandle)
- {
- InstallerException.internalError("No valid SIF session.");
- }
-
+ checkSession();
int err = _rollbackSession(iSessionHandle);
// Session is closed always when rollback is called
iSessionHandle = 0;
if (err < 0)
{
- InstallerException.internalError("Rolling back the session failed with code " + err);
+ InstallerException.internalError("Rolling back SIF session failed with code " + err);
}
//Log.log("SifRegistrator session rolled back");
}
@@ -305,7 +270,6 @@
{
return;
}
-
_closeSession(iSessionHandle);
// Current session has been closed
iSessionHandle = 0;
@@ -322,11 +286,7 @@
*/
public ComponentId getComponentId(String aGlobalId)
{
- if (0 == iSessionHandle)
- {
- InstallerException.internalError("No valid SIF session.");
- }
-
+ checkSession();
ComponentId result = new ComponentId();
int ret = _getComponentId(iSessionHandle, aGlobalId, result);
if (-1 == ret)
@@ -354,11 +314,7 @@
*/
public ComponentId getComponentId(Uid aAppUid)
{
- if (0 == iSessionHandle)
- {
- InstallerException.internalError("No valid SIF session.");
- }
-
+ checkSession();
ComponentId result = new ComponentId();
int ret = _getComponentIdForApp(
iSessionHandle, ((PlatformUid)aAppUid).getIntValue(), result);
@@ -384,15 +340,12 @@
*/
public void logComponent(String aGlobalId)
{
- if (0 == iSessionHandle)
- {
- InstallerException.internalError("No valid SIF session.");
- }
-
+ checkSession();
int ret = _logComponent(iSessionHandle, aGlobalId);
if (ret < -1)
{
- Log.logError("SifRegistrator logComponent failed with code " + ret);
+ Log.logError("SifRegistrator logComponent for " + aGlobalId +
+ " failed with code " + ret);
}
}
@@ -400,120 +353,19 @@
/*** ----------------------------- PRIVATE ---------------------------- */
/**
- * Registers one Java application to S60 USIF as a component.
- * Used with USIF Phase 1.
- *
- * @param aSuiteInfo Information needed to register the application
- * @param aIndex index of the application in the suite
- * @param aIsUpdate true in case of an update, false in case of a new
- * installation
- * @throws InstallerException if registration cannot done or
- * startSession has not been called successfully
- * @see startSession
- * @see SuiteInfo
+ * Checks if SifRegistrator session has been started.
+ * @throws InstallerException if SifRegistrator session has not been started
*/
- private void registerComponent(
- SuiteInfo aSuiteInfo, int aIndex, boolean aIsUpdate)
+ private void checkSession()
{
- String globalId = aSuiteInfo.getGlobalId(aIndex);
- if (globalId == null)
- {
- Log.logWarning("SifRegistrator: Application with index " + aIndex +
- " not found from " + aSuiteInfo.getGlobalId());
- return;
- }
- ApplicationInfo appInfo =
- (ApplicationInfo)aSuiteInfo.getApplications().elementAt(aIndex);
- String suiteName = aSuiteInfo.getName();
- String vendor = aSuiteInfo.getVendor();
- String version = aSuiteInfo.getVersion().toString();
- String name = appInfo.getName();
- int uid = ((PlatformUid)appInfo.getUid()).getIntValue();
- String[] componentFiles = getComponentFiles(aSuiteInfo);
- long componentSize = aSuiteInfo.getInitialSize();
- String attrValue = aSuiteInfo.getAttributeValue("Nokia-MIDlet-Block-Uninstall");
- boolean isRemovable = !(attrValue != null && attrValue.equalsIgnoreCase("true"));
- boolean isDrmProtected = (aSuiteInfo.getContentInfo() == aSuiteInfo.CONTENT_INFO_DRM);
- boolean isOriginVerified = aSuiteInfo.isTrusted();
- String midletInfoUrl = aSuiteInfo.getAttributeValue("MIDlet-Info-URL");
- String midletDescription = aSuiteInfo.getAttributeValue("MIDlet-Description");
- String downloadUrl = aSuiteInfo.getAttributeValue("Nokia-MIDlet-Download-URL");
- ComponentId componentId = new ComponentId();
- int err = _registerComponent(
- iSessionHandle, uid,
- getScrString(suiteName), getScrString(vendor),
- getScrString(version), getScrString(name),
- getScrString(globalId), componentFiles,
- componentSize, isRemovable, isDrmProtected,
- isOriginVerified, aIsUpdate, aSuiteInfo.getMediaId(),
- getScrString(midletInfoUrl),
- getScrString(midletDescription),
- getScrString(downloadUrl),
- componentId);
- if (err < 0)
+ if (iSessionHandle == 0)
{
- InstallerException.internalError(
- "Registering component " + globalId +
- " failed with code " + err);
- }
- else
- {
- appInfo.setComponentId(componentId);
- Log.log("SifRegistrator registered component " + globalId +
- " with id " + componentId.getId());
- }
- }
-
- /**
- * Unregisters one Java application from being S60 USIF component.
- * Used with USIF Phase 1.
- *
- * @param aSuiteInfo Information needed to unregister the application,
- * @param aIndex index of the application in the suite
- * @throws InstallerException if unregistration cannot done or
- * startSession has not been called successfully
- * @see startSession
- * @see SuiteInfo
- */
- private void unregisterComponent(SuiteInfo aSuiteInfo, int aIndex)
- {
- String globalId = aSuiteInfo.getGlobalId(aIndex);
- if (globalId == null)
- {
- Log.logWarning("SifRegistrator: Application with index " + aIndex +
- " not found from " + aSuiteInfo.getGlobalId());
- return;
- }
- ComponentId componentId = getComponentId(globalId);
- if (componentId == null)
- {
- Log.logWarning(
- "SifRegistrator unregistration failed, application " +
- globalId + " does not exist");
- return;
- }
- // Save component id to ApplicationInfo.
- ApplicationInfo appInfo =
- (ApplicationInfo)aSuiteInfo.getApplications().elementAt(aIndex);
- appInfo.setComponentId(componentId);
- // Unregister application.
- int err = _unregisterComponent(iSessionHandle, componentId.getId());
- if (err < 0)
- {
- InstallerException.internalError(
- "Unregistering component " + globalId +
- " failed with code " + err);
- }
- else
- {
- Log.log("SifRegistrator unregistered component " + globalId +
- " with id " + componentId.getId());
+ InstallerException.internalError("No valid SIF session.");
}
}
/**
* Registers Java application suite to S60 USIF as a component.
- * Used with USIF Phase 2.
*
* @param aSuiteInfo Suite information
* @param aIsUpdate true in case of an update, false in case of a new
@@ -529,7 +381,6 @@
String suiteName = aSuiteInfo.getName();
String vendor = aSuiteInfo.getVendor();
String version = aSuiteInfo.getVersion().toString();
- String name = null; // Set name to null so that suite name will be used.
int uid = ((PlatformUid)aSuiteInfo.getUid()).getIntValue();
String[] componentFiles = getComponentFiles(aSuiteInfo);
long componentSize = aSuiteInfo.getInitialSize();
@@ -540,17 +391,20 @@
String midletInfoUrl = aSuiteInfo.getAttributeValue("MIDlet-Info-URL");
String midletDescription = aSuiteInfo.getAttributeValue("MIDlet-Description");
String downloadUrl = aSuiteInfo.getAttributeValue("Nokia-MIDlet-Download-URL");
+ String updateUrl = aSuiteInfo.getAttributeValue("Nokia-Update");
ComponentId componentId = new ComponentId();
int err = _registerComponent(
iSessionHandle, uid,
getScrString(suiteName), getScrString(vendor),
- getScrString(version), getScrString(name),
- getScrString(globalId), componentFiles,
- componentSize, isRemovable, isDrmProtected,
- isOriginVerified, aIsUpdate, aSuiteInfo.getMediaId(),
+ getScrString(version), getScrString(globalId),
+ componentFiles, componentSize,
+ isRemovable, isDrmProtected,
+ isOriginVerified, aIsUpdate,
+ aSuiteInfo.getMediaId(),
getScrString(midletInfoUrl),
getScrString(midletDescription),
getScrString(downloadUrl),
+ getScrString(updateUrl),
componentId);
if (err < 0)
{
@@ -568,7 +422,6 @@
/**
* Unregisters Java application suite from being S60 USIF component.
- * Used with USIF Phase 2.
*
* @param aSuiteInfo suite information
* @throws InstallerException if unregistration cannot done or
@@ -610,7 +463,6 @@
* from given SuiteInfo object. The SuiteInfo must already have
* been registered to USIF as a component with registerComponent()
* method before this method is called.
- * Used with USIF Phase 2.
*
* @param aSuiteInfo information needed to register the application
* @param aIndex index of the application in the suite
@@ -797,7 +649,7 @@
" failed with code " + err + " (" + nonlocalizedAttrValue + ")");
}
LocalizedName[] localizedAttrValues =
- getLocalizedNames(aSuite, attrName + "-");
+ getLocalizedNames(aSuite, "Nokia-" + attrName + "-");
for (int i = 0; i < localizedAttrValues.length; i++)
{
err = _setLocalizedComponentProperty(
@@ -816,51 +668,41 @@
// Register Domain-Category property.
String protectionDomainProperty = "Domain-Category";
String protectionDomainName = aSuite.getProtectionDomainName();
- if (protectionDomainName != null)
+ err = _setLocalizedComponentProperty(
+ iSessionHandle, cid, protectionDomainProperty,
+ getProtectionDomainPropertyValue(protectionDomainName),
+ UNSPECIFIED_LOCALE);
+ if (err < 0)
{
- err = _setLocalizedComponentProperty(
- iSessionHandle, cid, protectionDomainProperty,
- getProtectionDomainPropertyValue(protectionDomainName),
- UNSPECIFIED_LOCALE);
- if (err < 0)
- {
- InstallerException.internalError(
- "Adding property " + protectionDomainProperty +
- " value " + protectionDomainName + " for component " +
- cid + " failed with code " + err);
- }
- }
- else
- {
- Log.logWarning(
- "SifRegistrator.registerLocalizedProperties: " +
- protectionDomainProperty + " not set");
+ InstallerException.internalError(
+ "Adding property " + protectionDomainProperty +
+ " value " + protectionDomainName + " for component " +
+ cid + " failed with code " + err);
}
}
/**
* Returns the "Domain-Category" property value which contains
* the text id and text file name for the localized domain category
- * text.
+ * text. This method must never return null.
*/
private String getProtectionDomainPropertyValue(String aProtectionDomain)
{
- String textId = null;
- if (aProtectionDomain.equals("Manufacturer"))
- {
- textId = "txt_java_inst_setlabel_cert_domain_val_manufacturer";
- }
- else if (aProtectionDomain.equals("Operator"))
+ String textId = "txt_java_inst_setlabel_cert_domain_val_untrusted_third_party";
+ if (aProtectionDomain != null)
{
- textId = "txt_java_inst_setlabel_cert_domain_val_operator";
- }
- else if (aProtectionDomain.equals("IdentifiedThirdParty"))
- {
- textId = "txt_java_inst_setlabel_cert_domain_val_trusted_third_party";
- }
- else if (aProtectionDomain.equals("UnidentifiedThirdParty"))
- {
- textId = "txt_java_inst_setlabel_cert_domain_val_untrusted_third_party";
+ if (aProtectionDomain.equals("Manufacturer"))
+ {
+ textId = "txt_java_inst_setlabel_cert_domain_val_manufacturer";
+ }
+ else if (aProtectionDomain.equals("Operator"))
+ {
+ textId = "txt_java_inst_setlabel_cert_domain_val_operator";
+ }
+ else if (aProtectionDomain.equals("IdentifiedThirdParty"))
+ {
+ textId = "txt_java_inst_setlabel_cert_domain_val_trusted_third_party";
+ }
}
return textId + ",javaapplicationinstaller";
}
@@ -894,6 +736,13 @@
"SifRegistrator ignored unknown locale: " +
name + ": " + localizedName);
}
+ else if (localizedName.getName() == null ||
+ localizedName.getName().length() == 0)
+ {
+ Log.logWarning(
+ "SifRegistrator ignored empty localized text: " +
+ name + ": " + localizedName);
+ }
else
{
Log.log("SifRegistrator found localized text " +
@@ -1015,7 +864,6 @@
* @param aSuiteName
* @param aVendor
* @param aVersion
- * @param aName
* @param aGlobalId
* @param aComponentFiles
* @param aComponentSize
@@ -1027,17 +875,19 @@
* @param aMidletInfoUrl
* @param aMidletDescription
* @param aDownloadUrl
+ * @param aUpdateUrl
* @param aComponentId upon successful execution contains the
* component id for the registered component
* @return 0 if registration succeeded or Symbian error code
*/
private static native int _registerComponent(
int aSessionHandle, int aUid, String aSuiteName, String aVendor,
- String aVersion, String aName, String aGlobalId,
+ String aVersion, String aGlobalId,
String[] aComponentFiles, long aComponentSize,
boolean aIsRemovable, boolean aIsDrmProtected,
boolean aIsOriginVerified, boolean aIsUpdate, int aMediaId,
- String aMidletInfoUrl, String aMidletDescription, String aDownloadUrl,
+ String aMidletInfoUrl, String aMidletDescription,
+ String aDownloadUrl, String aUpdateUrl,
ComponentId aComponentId);
/**
@@ -1145,4 +995,9 @@
* @return 1 if application data should be registered to USIF, 0 otherwise
*/
private static native int _getUsifMode();
+
+ /**
+ * Returns SIF specific error category from given error id.
+ */
+ private static native int _getErrorCategory(int aErrorId);
}
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/javasrc.s60/com/nokia/mj/impl/installer/utils/SysUtil.java
--- a/javamanager/javainstaller/installer/javasrc.s60/com/nokia/mj/impl/installer/utils/SysUtil.java Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javainstaller/installer/javasrc.s60/com/nokia/mj/impl/installer/utils/SysUtil.java Fri Jul 09 16:35:45 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 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"
@@ -359,11 +359,12 @@
" drives failed with code " + ret);
}
// Save the drives so that next time they are not fetched again.
- iUserVisibleDrives = new Vector();
+ Vector drivesVector = new Vector();
for (int i = 0; i < aVisibleDrives.size(); i++)
{
- iUserVisibleDrives.addElement(aVisibleDrives.elementAt(i));
+ drivesVector.addElement(aVisibleDrives.elementAt(i));
}
+ iUserVisibleDrives = drivesVector;
}
/**
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/install/steps/CheckJarPackages.java
--- a/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/install/steps/CheckJarPackages.java Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/install/steps/CheckJarPackages.java Fri Jul 09 16:35:45 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 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"
@@ -73,7 +73,7 @@
// Application touch support detection is not needed
// if Nokia-MIDlet-On-Screen-Keypad has been defined.
boolean touchDetection = true;
- if (ball.getAttributeValue("Nokia-MIDlet-On-Screen-Keypad") != null)
+ if (ball.iSuite.getOnScreenKeypad() != SuiteInfo.OSK_UNDEFINED)
{
touchDetection = false;
}
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/install/steps/ConvertIcons.java
--- a/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/install/steps/ConvertIcons.java Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/install/steps/ConvertIcons.java Fri Jul 09 16:35:45 2010 +0300
@@ -258,10 +258,11 @@
// the attribute MIDlet-
iconName = newApp.getIconPath();
}
- if (iconName.length() == 0)
+ if (iconName.length() == 0 || iconName.equals(suiteIconName))
{
- // No MIDlet icon defined, use already converted suite
- // icon if it exists
+ // No MIDlet icon defined or MIDlet icon defined to be
+ // the same as suite icon, use already converted suite
+ // icon if it exists.
if (suiteIconFile.length() > 0)
{
// Must make separate copy of the suite icon for each
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/install/steps/HandleCustomAttributes.java
--- a/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/install/steps/HandleCustomAttributes.java Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/install/steps/HandleCustomAttributes.java Fri Jul 09 16:35:45 2010 +0300
@@ -56,7 +56,7 @@
{
if (aBall.iApplicationRegistrator.isOnDeviceKeypadNeeded())
{
- // default value when on-screen-keypad is needed
+ // Default value when on-screen-keypad is needed.
aBall.iSuite.setOnScreenKeypad(SuiteInfo.OSK_GAMEACTIONS);
String attrName = "Nokia-MIDlet-On-Screen-Keypad";
@@ -77,13 +77,16 @@
}
else
{
- Log.logWarning("Invalid " + attrName + " value " + attrValue);
+ // Ignore on-screen-keypad attribute with invalid value.
+ aBall.iSuite.setOnScreenKeypad(SuiteInfo.OSK_UNDEFINED);
+ Log.logWarning("Ignoring invalid " + attrName +
+ " value " + attrValue);
}
}
}
else
{
- // If the device does not need on-screen-keypad, the value is not set at all
+ // If the device does not need on-screen-keypad, the value is not set at all.
aBall.iSuite.setOnScreenKeypad(SuiteInfo.OSK_UNDEFINED);
}
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/install/steps/PrepareInstallation.java
--- a/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/install/steps/PrepareInstallation.java Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/install/steps/PrepareInstallation.java Fri Jul 09 16:35:45 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 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"
@@ -37,6 +37,7 @@
import com.nokia.mj.impl.installer.utils.SysUtil;
import com.nokia.mj.impl.security.midp.authentication.AuthenticationModule;
import com.nokia.mj.impl.security.midp.authentication.OcspSettings;
+import com.nokia.mj.impl.fileutils.FileURL;
import com.nokia.mj.impl.utils.Uid;
public class PrepareInstallation extends ExeStep
@@ -170,6 +171,11 @@
{
aBall.iJarUrl = jarArg;
}
+ else if (isFileUrl(jarArg))
+ {
+ aBall.iJarFilename = getFileFromUrl(jarArg);
+ Log.log("Jar " + aBall.iJarFilename + " from URL " + jarArg);
+ }
else
{
aBall.iJarFilename = jarArg;
@@ -181,6 +187,11 @@
{
aBall.iJadUrl = jadArg;
}
+ else if (isFileUrl(jadArg))
+ {
+ aBall.iJadFilename = getFileFromUrl(jadArg);
+ Log.log("Jad " + aBall.iJadFilename + " from URL " + jadArg);
+ }
else
{
aBall.iJadFilename = jadArg;
@@ -346,4 +357,36 @@
Log.log("ocspSettings: " + ocspSettings);
return ocspSettings;
}
+
+ /**
+ * Returns true if given URL is a file URL, false otherwise.
+ */
+ private static boolean isFileUrl(String aUrl)
+ {
+ if (aUrl == null || aUrl.length() == 0)
+ {
+ return false;
+ }
+ return aUrl.toLowerCase().startsWith("file://");
+ }
+
+ /**
+ * Returns a file path from file URL.
+ *
+ * @throws InstallerException if URL is invalid.
+ */
+ private static String getFileFromUrl(String aUrl)
+ {
+ String filePath = null;
+ try
+ {
+ FileURL fileUrl = new FileURL(aUrl);
+ filePath = fileUrl.getFullPath();
+ }
+ catch (Throwable t)
+ {
+ InstallerException.internalError("Invalid file URL: " + aUrl, t);
+ }
+ return filePath;
+ }
}
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/install/steps/PrepareSplashScreen.java
--- a/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/install/steps/PrepareSplashScreen.java Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/install/steps/PrepareSplashScreen.java Fri Jul 09 16:35:45 2010 +0300
@@ -38,7 +38,7 @@
/**
* Installation step PrepareSplashScreen prepares splash
- * screen images from MIDlet-Splash-Screen-Image attribute.
+ * screen images from Nokia-MIDlet-Splash-Screen-Image attribute.
*/
public class PrepareSplashScreen extends ExeStep
{
@@ -70,7 +70,7 @@
return;
}
- String attrName = "MIDlet-Splash-Screen-Image";
+ String attrName = "Nokia-MIDlet-Splash-Screen-Image";
String attrValue = ball.getAttributeValue(attrName);
if (attrValue != null && attrValue.length() > 0)
{
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/uninstall/steps/ConfirmUninstallation.java
--- a/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/uninstall/steps/ConfirmUninstallation.java Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/uninstall/steps/ConfirmUninstallation.java Fri Jul 09 16:35:45 2010 +0300
@@ -76,8 +76,9 @@
int idxMinus = -1;
do
{
- attrValue = ball.iSuite.getAttributeValue(attrName + "-" + locale);
- Log.log(attrName + "-" + locale + ": " + attrValue);
+ String localizedAttrName = "Nokia-" + attrName + "-" + locale;
+ attrValue = ball.iSuite.getAttributeValue(localizedAttrName);
+ Log.log(localizedAttrName + ": " + attrValue);
idxMinus = locale.lastIndexOf('-');
// If attribute is not found using full locale, e.g. 'en-GB',
// strip the most specific part of the locale out
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/uninstall/steps/GetFromStorage.java
--- a/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/uninstall/steps/GetFromStorage.java Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/midp2/uninstall/steps/GetFromStorage.java Fri Jul 09 16:35:45 2010 +0300
@@ -54,6 +54,15 @@
// Check if debug attribute has been defined for this suite.
ball.setDebug(ball.iSuite.getAttributeValue("Nokia-MIDlet-Install-Debug"));
+ // Check from arguments if preinstall state should be reset.
+ String arg = ball.iArgs.get("resetpreinstall");
+ if (arg != null)
+ {
+ ball.iSuite.setResetPreinstall(true);
+ ball.log("ResetPreinstall set");
+ }
+
+
// Log all suite info.
//ball.log(ball.iSuite.toString());
}
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/storagehandler/SuiteInfo.java
--- a/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/storagehandler/SuiteInfo.java Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/storagehandler/SuiteInfo.java Fri Jul 09 16:35:45 2010 +0300
@@ -73,6 +73,9 @@
private String iAccessPoint = null;
// Flag telling if application suite is trusted
private boolean iTrusted = false;
+ // Flag telling if preinstallation state should be
+ // reseted in uninstallation.
+ private boolean iResetPreinstall = false;
/** Flag telling if default icon should be used. */
private boolean iUseDefaultIcon = false;
@@ -783,6 +786,24 @@
}
/**
+ * Get the flag telling if preinstallation state should be reset.
+ * Used only in uninstallation.
+ */
+ public boolean getResetPreinstall()
+ {
+ return iResetPreinstall;
+ }
+
+ /**
+ * Set the flag telling if preinstallation state should be reset.
+ * Used only in uninstallation.
+ */
+ public void setResetPreinstall(boolean aResetPreinstall)
+ {
+ iResetPreinstall = aResetPreinstall;
+ }
+
+ /**
* Calculates initial size from MIDlet-Data-Size and
* MIDlet-Jar-Size attributes, or if they are not present
* from jar file size.
@@ -865,6 +886,7 @@
buf.append(" MediaId: ").append(getMediaId()).append("\n");
buf.append(" InitialSize: ").append(getInitialSize()).append("\n");
buf.append(" PreinstallState: ").append(iPreinstallState).append("\n");
+ buf.append(" ResetPreinstall: ").append(getResetPreinstall()).append("\n");
buf.append(" OnScreenKeypad: ").append(getOnScreenKeypad()).append("\n");
buf.append(" ConvertedIcon: ").append(getConvertedIconPath()).append("\n");
buf.append(" Group: ").append(getInstallationGroup()).append("\n");
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/utils/AutoStartPermission.java
--- a/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/utils/AutoStartPermission.java Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/utils/AutoStartPermission.java Fri Jul 09 16:35:45 2010 +0300
@@ -67,7 +67,7 @@
*/
public String toString()
{
- return "javax.microedition.midlet.AutoStartPermission";
+ return "AutoStartPermission";
}
/**
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/src.s60/applicationregistrator/applicationregistrator.cpp
--- a/javamanager/javainstaller/installer/src.s60/applicationregistrator/applicationregistrator.cpp Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javainstaller/installer/src.s60/applicationregistrator/applicationregistrator.cpp Fri Jul 09 16:35:45 2010 +0300
@@ -51,6 +51,7 @@
// NAMESPACE DECLARATION
using namespace java;
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
/**
* MIDP Stub SIS file UID. The application type Uid for MIDlets in S60
*/
@@ -66,6 +67,13 @@
*/
_LIT(KAppPostfix, ".fakeapp");
+
+#ifdef RD_JAVA_S60_RELEASE_9_2
+const TInt KAppIconCount = 2;
+#else
+const TInt KAppIconCount = 1;
+#endif
+
// ------------------------
/**
@@ -80,14 +88,6 @@
jboolean aBackground);
/**
- * Internal helper method for checking whether Application Shell is already running
- * Used JNI method ...1startAppShellUi
- *
- * @return ETrue if AppShell is running
- */
-TBool isAppShellUiRunning();
-
-/**
* Internal helper method for checking whether this code is executing in
* a device that has correctly working version of
* RApaLsSession::ForceCommitNonNativeApplicationsUpdatesL()
@@ -95,6 +95,15 @@
* @return ETrue if force commit works well
*/
TBool isForceCommitSupported();
+#endif // !SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
+
+/**
+ * Internal helper method for checking whether Application Shell is already running
+ * Used JNI method ...1startAppShellUi
+ *
+ * @return ETrue if AppShell is running
+ */
+TBool isAppShellUiRunning();
/**
* Internal helper method for starting menu application
@@ -129,7 +138,7 @@
return err;
}
-#ifndef RD_JAVA_USIF_APP_REG
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
// Delete any pending (un)registrations (possible if
// e.g. device rebooted before commit).
// This call does nothing if there is no pending registrations.
@@ -144,7 +153,7 @@
pApaSession->Close();
return err;
}
-#endif // RD_JAVA_USIF_APP_REG
+#endif // !SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
// Return handle to session. Utilize the fact that in Symbian
// all pointer addresses are MOD 4 so the last 2 bits are 0
@@ -168,7 +177,7 @@
* @param[in] aBackground
* @return 0 if registration succeeded or Symbian error code
*/
-#ifdef RD_JAVA_USIF_APP_REG
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_ApplicationRegistrator__1registerApplication
(JNIEnv */*aEnv*/, jclass /*aClass*/, jint /*aSessionHandle*/, jint /*aUid*/, jstring /*aGroupName*/,
jstring /*aMIDletName*/, jstring /*aTargetDrive*/, jstring /*aIconFileName*/,
@@ -176,7 +185,7 @@
{
return KErrNone;
}
-#else
+#else // SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_ApplicationRegistrator__1registerApplication
(JNIEnv *aEnv, jclass aClass, jint aSessionHandle, jint aUid, jstring aGroupName,
jstring aMIDletName, jstring aTargetDrive, jstring aIconFileName,
@@ -343,7 +352,6 @@
return err;
}
-#endif // RD_JAVA_USIF_APP_REG
/**
@@ -359,7 +367,7 @@
RFile appArcIcon;
TUid midletUid;
TInt err;
- TInt numberOfIcons = 1; // Conversion results always one icon in mbm.
+ TInt numberOfIcons = KAppIconCount; // number of icons stored in MBM
// Also default mbm has one icon.
midletUid.iUid = aUid;
@@ -475,6 +483,7 @@
return err;
}
+#endif // SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
/**
@@ -484,13 +493,13 @@
* @param[in] aUid The Uid of the application to be unregistered..
* @return 0 if unregistration succeeded or Symbian error code
*/
-#ifdef RD_JAVA_USIF_APP_REG
+#ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_ApplicationRegistrator__1unregisterApplication
(JNIEnv *, jclass, jint /*aSessionHandle*/, jint /*aUid*/)
{
return KErrNone;
}
-#else
+#else // SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_installer_applicationregistrator_ApplicationRegistrator__1unregisterApplication
(JNIEnv *, jclass, jint aSessionHandle, jint aUid)
{
@@ -503,7 +512,7 @@
TRAPD(err, pApaSession->DeregisterNonNativeApplicationL(appUid));
return err;
}
-#endif // RD_JAVA_USIF_APP_REG
+#endif // SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
/**
@@ -524,7 +533,7 @@
TInt err = KErrNone;
-#ifndef RD_JAVA_USIF_APP_REG
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
if (aSynchronous)
{
// Make synchronous commit
@@ -552,12 +561,12 @@
// Use always this synchronous commit when running in emulator
// to make writing autotest cases easier.
TRAP(err, pApaSession->CommitNonNativeApplicationsUpdatesL());
-#else
+#else // __WINS__
// asynchronous commit
TRAP(err, pApaSession->ForceCommitNonNativeApplicationsUpdatesL());
#endif // __WINS__
}
-#endif // RD_JAVA_USIF_APP_REG
+#endif // !SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
if (KErrNone == err)
{
@@ -582,9 +591,9 @@
reinterpret_cast(aSessionHandle<<2);
TInt err = KErrNone;
-#ifndef RD_JAVA_USIF_APP_REG
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
err = pApaSession->RollbackNonNativeApplicationsUpdates();
-#endif // RD_JAVA_USIF_APP_REG
+#endif // !SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
pApaSession->Close();
delete pApaSession;
@@ -925,6 +934,7 @@
}
+#ifndef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
/**
* Internal helper method for checking whether this code is executing in
* a device that has correctly working version of
@@ -969,3 +979,4 @@
return EFalse;
}
}
+#endif // !SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/src.s60/iconconverter/iconconverter.cpp
--- a/javamanager/javainstaller/installer/src.s60/iconconverter/iconconverter.cpp Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javainstaller/installer/src.s60/iconconverter/iconconverter.cpp Fri Jul 09 16:35:45 2010 +0300
@@ -20,11 +20,14 @@
#include
#include
+#include
#include "javacommonutils.h"
#include "logger.h"
#include "mifconverter.h"
#include "iconconverter.h"
+#include "iconsizeutils.h" // TIconSizes
+#include "iconsizenotifier.h" // KUidIconSizeNotifPlugin
namespace java
{
@@ -32,12 +35,13 @@
/**
* The icon in S60 temporary drive
*/
-_LIT(KTempIconName, "D:\\micon.mbm");
+_LIT(KTempIconName1, "D:\\micon1.mbm");
+_LIT(KTempMaskName1, "D:\\mmask1.mbm");
-/**
- * The mask in S60 temporary drive
- */
-_LIT(KTempMaskName, "D:\\mmask.mbm");
+#ifdef RD_JAVA_S60_RELEASE_9_2
+_LIT(KTempIconName2, "D:\\micon2.mbm");
+_LIT(KTempMaskName2, "D:\\mmask2.mbm");
+#endif // RD_JAVA_S60_RELEASE_9_2
// MIF file constants
@@ -51,13 +55,11 @@
const TInt KMifIconHeaderAnimated = 0;
-
CIconConverter* CIconConverter::NewL(RFs& aRFs)
{
return new(ELeave) CIconConverter(aRFs);
}
-
CIconConverter::CIconConverter(RFs &aRFs)
{
iRFs = aRFs;
@@ -79,6 +81,8 @@
// Do NOT close file server session
delete iBitmapMask;
delete iBitmap;
+ delete iBitmapMaskScaledCopy;
+ delete iBitmapScaledCopy;
delete iImageDecoder;
RFbsSession::Disconnect();
@@ -246,34 +250,77 @@
*iBitmapMask);
CActiveScheduler::Start();
- err = iActiveListener->iStatus.Int();
+ User::LeaveIfError(iActiveListener->iStatus.Int());
+
+ // Scale icons
+ TIconSizes sizes(GetIdealIconSizes());
+ CBitmapScaler* scaler = CBitmapScaler::NewL();
+ CleanupStack::PushL(scaler);
+ scaler->SetQualityAlgorithm(CBitmapScaler::EMaximumQuality);
+
+ // Scale for Menu
+ ILOG2(EJavaInstaller, "Scaling Menu icon to (%d, %d)",
+ sizes.iMenuIconSize.iWidth, sizes.iMenuIconSize.iHeight);
+ iBitmapScaledCopy = new(ELeave) CFbsBitmap;
+ iBitmapMaskScaledCopy = new(ELeave) CFbsBitmap;
+ ScaleL(*scaler, sizes.iMenuIconSize);
+ User::LeaveIfError(iBitmapScaledCopy->Save(KTempIconName1));
+ User::LeaveIfError(iBitmapMaskScaledCopy->Save(KTempMaskName1));
+ iBitmapScaledCopy->Reset();
+ iBitmapMaskScaledCopy->Reset();
+
+#ifdef RD_JAVA_S60_RELEASE_9_2
+ // Scale for App Manager
+ ILOG2(EJavaInstaller, "Scaling App Mgr icon to (%d, %d)",
+ sizes.iMenuIconSize.iWidth, sizes.iMenuIconSize.iHeight);
+ ScaleL(*scaler, sizes.iAppMgrIconSize);
+ User::LeaveIfError(iBitmapScaledCopy->Save(KTempIconName2));
+ User::LeaveIfError(iBitmapMaskScaledCopy->Save(KTempMaskName2));
+ iBitmapScaledCopy->Reset();
+ iBitmapMaskScaledCopy->Reset();
+#endif // RD_JAVA_S60_RELEASE_9_2
+
+ CleanupStack::PopAndDestroy(scaler);
delete iActiveListener;
iActiveListener = NULL;
- if (err != KErrNone)
- {
- User::Leave(err);
- }
- // store bitmap to two temp files
- User::LeaveIfError(iBitmap->Save(KTempIconName));
- User::LeaveIfError(iBitmapMask->Save(KTempMaskName));
-
- // construct multi bitmap file from bitmap and mask files (2 files)
+ // Construct multi bitmap file from bitmap and mask files (2 files)
+#ifdef RD_JAVA_S60_RELEASE_9_2
+ const TInt KBmpCount = 4;
+ TInt32 sourceIds[] = {0, 0, 0, 0};
+#else
+ const TInt KBmpCount = 2;
TInt32 sourceIds[] = {0, 0};
- TFileName** filenames = new(ELeave) TFileName*[2];
+#endif // RD_JAVA_S60_RELEASE_9_2
+
+ TFileName** filenames = new(ELeave) TFileName*[KBmpCount];
CleanupStack::PushL(filenames);
- filenames[0] = new(ELeave) TFileName(KTempIconName);
+ filenames[0] = new(ELeave) TFileName(KTempIconName1);
CleanupStack::PushL(filenames[0]);
- filenames[1] = new(ELeave) TFileName(KTempMaskName);
+ filenames[1] = new(ELeave) TFileName(KTempMaskName1);
CleanupStack::PushL(filenames[1]);
-
- CFbsBitmap::StoreL(aOutputFile, 2, (const TDesC**)filenames, sourceIds);
+
+#ifdef RD_JAVA_S60_RELEASE_9_2
+ filenames[2] = new(ELeave) TFileName(KTempIconName2);
+ CleanupStack::PushL(filenames[2]);
+ filenames[3] = new(ELeave) TFileName(KTempMaskName2);
+ CleanupStack::PushL(filenames[3]);
+#endif // RD_JAVA_S60_RELEASE_9_2
+
+ CFbsBitmap::StoreL(aOutputFile, KBmpCount, (const TDesC**)filenames, sourceIds);
// Now try to delete the temp icon and mask files,
// ignore possible errors
- (void)iRFs.Delete(KTempIconName);
- (void)iRFs.Delete(KTempMaskName);
-
+ (void)iRFs.Delete(KTempIconName1);
+ (void)iRFs.Delete(KTempMaskName1);
+
+#ifdef RD_JAVA_S60_RELEASE_9_2
+ (void)iRFs.Delete(KTempIconName2);
+ (void)iRFs.Delete(KTempMaskName2);
+ CleanupStack::PopAndDestroy(filenames[3]);
+ CleanupStack::PopAndDestroy(filenames[2]);
+#endif // RD_JAVA_S60_RELEASE_9_2
+
CleanupStack::PopAndDestroy(filenames[1]);
CleanupStack::PopAndDestroy(filenames[0]);
CleanupStack::PopAndDestroy(filenames);
@@ -371,4 +418,64 @@
mimeTypes.ResetAndDestroy();
}
+void CIconConverter::ScaleL(CBitmapScaler& aScaler, const TSize aSize)
+{
+ ASSERT(iBitmapScaledCopy);
+ ASSERT(iBitmapMaskScaledCopy);
+
+ User::LeaveIfError(iBitmapScaledCopy->Create(aSize, EColor16M));
+ User::LeaveIfError(iBitmapMaskScaledCopy->Create(aSize, EGray256));
+
+ iActiveListener->InitialiseActiveListener();
+ aScaler.Scale(&iActiveListener->iStatus, *iBitmap, *iBitmapScaledCopy, ETrue);
+ CActiveScheduler::Start();
+ User::LeaveIfError(iActiveListener->iStatus.Int());
+
+ iActiveListener->InitialiseActiveListener();
+ aScaler.Scale(&iActiveListener->iStatus, *iBitmapMask, *iBitmapMaskScaledCopy, ETrue);
+ CActiveScheduler::Start();
+ User::LeaveIfError(iActiveListener->iStatus.Int());
+}
+
+TIconSizes CIconConverter::GetIdealIconSizes()
+{
+ TIconSizes fallbackSizes;
+ fallbackSizes.iMenuIconSize = TSize(KIconInMenuFallbackSize, KIconInMenuFallbackSize);
+ fallbackSizes.iAppMgrIconSize = TSize(KIconInAppMgrFallbackSize, KIconInAppMgrFallbackSize);
+
+#ifdef RD_JAVA_S60_RELEASE_9_2
+ RNotifier notifier;
+ TInt err = notifier.Connect();
+ if (KErrNone != err)
+ {
+ ELOG1(EJavaInstaller, "CIconConverter::GetIdealIconSizes #1 err = %d", err);
+ return fallbackSizes;
+ }
+
+ CleanupClosePushL(notifier);
+
+ TPckgBuf des;
+ iActiveListener->InitialiseActiveListener();
+ notifier.StartNotifierAndGetResponse(iActiveListener->iStatus,
+ KUidIconSizeNotifPlugin, des, des);
+ CActiveScheduler::Start();
+ notifier.CancelNotifier(KUidIconSizeNotifPlugin);
+ err = iActiveListener->iStatus.Int();
+
+ CleanupStack::PopAndDestroy(¬ifier);
+
+ if (KErrNone != err)
+ {
+ ELOG1(EJavaInstaller, "CIconConverter::GetIdealIconSizes #2 err = %d", err);
+ return fallbackSizes;
+ }
+ else
+ {
+ return des();
+ }
+#else
+ return fallbackSizes;
+#endif
+}
+
} // namespace java
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/src.s60/iconconverter/iconconverter.h
--- a/javamanager/javainstaller/installer/src.s60/iconconverter/iconconverter.h Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javainstaller/installer/src.s60/iconconverter/iconconverter.h Fri Jul 09 16:35:45 2010 +0300
@@ -26,6 +26,10 @@
#include
+class CBitmapScaler;
+class TIconSizes;
+
+
namespace java
{
@@ -161,6 +165,15 @@
HBufC8* apIconBuf,
const TDesC &aOutputFile);
+ /**
+ * Scale the original icon into the current temporary icon.
+ */
+ void ScaleL(CBitmapScaler& aScaler, const TSize aSize);
+
+ /**
+ * Get the ideal icon sizes from UI, trough the ecom plugin notifier.
+ */
+ TIconSizes GetIdealIconSizes();
private:
/**
@@ -176,16 +189,25 @@
CBufferedImageDecoder* iImageDecoder;
/**
- * Pointer to bitmap generated from the icon
+ * Pointer to bitmap generated from the icon.
*/
CFbsBitmap* iBitmap;
/**
* Pointer to the bitmap mask generated from the icon.
- * May be NULL if the original icon not not have mask.
*/
CFbsBitmap* iBitmapMask;
+ /**
+ * Scaled copy of the original icon bitmap.
+ */
+ CFbsBitmap* iBitmapScaledCopy;
+
+ /**
+ * Scaled copy of the original icon mask.
+ */
+ CFbsBitmap* iBitmapMaskScaledCopy;
+
CActiveListener *iActiveListener;
};
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/src.s60/jadjarmatcher/jadjarmatcherscanfrominbox.cpp
--- a/javamanager/javainstaller/installer/src.s60/jadjarmatcher/jadjarmatcherscanfrominbox.cpp Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javainstaller/installer/src.s60/jadjarmatcher/jadjarmatcherscanfrominbox.cpp Fri Jul 09 16:35:45 2010 +0300
@@ -143,7 +143,7 @@
TRAP(err, atta = iAttaMan->GetAttachmentFileL(attaInfo->Id()));
if (KErrNone == err)
{
- aResultArray.Insert(atta, 0);
+ aResultArray.InsertL(atta, 0);
}
}
}
@@ -206,7 +206,7 @@
TMsvEntry index = (*entry)[loop];
if (KUidMsgTypePOP3 == index.iMtm || KUidMsgTypeIMAP4 == index.iMtm)
{
- aRootEntryArray.Insert((*entry)[loop].Id(), 0);
+ aRootEntryArray.InsertL((*entry)[loop].Id(), 0);
}
}
}
@@ -245,7 +245,7 @@
if (index.Visible() && index.Complete() &&
!index.InPreparation() && !index.Deleted())
{
- aEntryArray.Insert(aId, 0);
+ aEntryArray.InsertL(aId, 0);
}
}
}
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/javasrc/com/nokia/mj/impl/installer/GetComponentInfoTest.java
--- a/javamanager/javainstaller/installer/tsrc/javasrc/com/nokia/mj/impl/installer/GetComponentInfoTest.java Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javainstaller/installer/tsrc/javasrc/com/nokia/mj/impl/installer/GetComponentInfoTest.java Fri Jul 09 16:35:45 2010 +0300
@@ -856,15 +856,11 @@
try
{
String value = aMsg.getStringValue(aName);
- assertTrue("Unexpected value " + aName + "=" + value, false);
- }
- catch (IllegalArgumentException iae)
- {
- // Expected exception.
+ assertTrue("Unexpected value " + aName + "=" + value, value == null);
}
catch (Throwable t)
{
- assertTrue("Incorrect exception for string value " + aName +
+ assertTrue("Unexpected exception for string value " + aName +
": " + t, false);
}
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/javasrc/com/nokia/mj/impl/installer/InstallerEngineTest.java
--- a/javamanager/javainstaller/installer/tsrc/javasrc/com/nokia/mj/impl/installer/InstallerEngineTest.java Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javainstaller/installer/tsrc/javasrc/com/nokia/mj/impl/installer/InstallerEngineTest.java Fri Jul 09 16:35:45 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 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"
@@ -52,6 +52,8 @@
{
TestSuite suite = new TestSuite(this.getClass().getName());
+ String runIndex = System.getProperty("com.nokia.mj.impl.installer.test.param1");
+
if (Platform.isLinux())
{
// In S60 this would be interactive test, so disable it there.
@@ -64,6 +66,8 @@
}));
}
+ if (runIndex == null || runIndex.equalsIgnoreCase("run1"))
+ {
// Run 1
suite.addTest(new InstallerEngineTest("testMidletMessageOk", new TestMethod()
{
@@ -104,7 +108,11 @@
((InstallerEngineTest)tc).test3AppsOk();
}
}));
+ }
+ if (runIndex == null || runIndex.equalsIgnoreCase("run2"))
+ {
+ // Run 2
suite.addTest(new InstallerEngineTest("testDownloadJadOk", new TestMethod()
{
public void run(TestCase tc)
@@ -113,7 +121,6 @@
}
}));
- // Run 2
suite.addTest(new InstallerEngineTest("testDownloadJarOk", new TestMethod()
{
public void run(TestCase tc)
@@ -217,7 +224,11 @@
((InstallerEngineTest)tc).testNoJavaBinRoot();
}
}));
+ }
+ if (runIndex == null || runIndex.equalsIgnoreCase("run3"))
+ {
+ // Run 3
suite.addTest(new InstallerEngineTest("testBlockUninstall", new TestMethod()
{
public void run(TestCase tc)
@@ -241,8 +252,11 @@
((InstallerEngineTest)tc).testApplicationInfo();
}
}));
+ }
- // Run 3
+ if (runIndex == null || runIndex.equalsIgnoreCase("run4"))
+ {
+ // Run 4
suite.addTest(new InstallerEngineTest("testInstallOptions", new TestMethod()
{
public void run(TestCase tc)
@@ -258,6 +272,7 @@
((InstallerEngineTest)tc).testInstallAuthAndBig();
}
}));
+ }
com.nokia.mj.impl.utils.OmjTestRunner.run(suite);
}
@@ -313,6 +328,15 @@
}
/**
+ */
+ public String getTestServer()
+ {
+ String server = System.getProperty("com.nokia.mj.impl.installer.test.server");
+ assertNotNull("-server=: argument required.", server);
+ return server;
+ }
+
+ /**
* Makes installation, update and uninstallation for given application.
* Does the following steps:
* install with cancellation and check that app is not installed,
@@ -413,12 +437,12 @@
assertNoIsDir();
// List.
- Log.logOut("InstallerEngineTest.doInstallUninstall: list -v");
- result = Installer.mainWithResult(new String[] { "list", "-v" });
- assertResult(result, Installer.ERR_NONE);
- Log.logOut("InstallerEngineTest.doInstallUninstall: list -otastatus");
- result = Installer.mainWithResult(new String[] { "list", "-otastatus" });
- assertResult(result, Installer.ERR_NONE);
+ //Log.logOut("InstallerEngineTest.doInstallUninstall: list -v");
+ //result = Installer.mainWithResult(new String[] { "list", "-v" });
+ //assertResult(result, Installer.ERR_NONE);
+ //Log.logOut("InstallerEngineTest.doInstallUninstall: list -otastatus");
+ //result = Installer.mainWithResult(new String[] { "list", "-otastatus" });
+ //assertResult(result, Installer.ERR_NONE);
// Update with cancellation.
Log.logOut("InstallerEngineTest.doInstallUninstall: update with cancellation " + aFilename);
@@ -573,38 +597,38 @@
public void testDownloadJadOk()
{
Log.logOut("InstallerEngineTest.testDownloadJadOk begins");
- SuiteInfo suite = new SuiteInfo("JBenchmark2", "Kishonti LP");
- doInstallUninstall(suite, "http://195.134.231.83:7070/omjserver/resources/omj/T00000900_JBenchmark2_gcf.jsp", true, iDefaultOptions);
+ SuiteInfo suite = new SuiteInfo("HelloWorld", "Nokia");
+ doInstallUninstall(suite, "http://" + getTestServer() + "/installertest/HelloWorld_ota.jad", true, iDefaultOptions);
}
public void testDownloadJarOk()
{
Log.logOut("InstallerEngineTest.testDownloadJarOk begins");
- SuiteInfo suite = new SuiteInfo("JBenchmark2", "Kishonti LP");
- doInstallUninstall(suite, "http://195.134.231.83:7070/omjserver/resources/omj/JBenchmark2.jar", false, iDefaultOptions);
+ SuiteInfo suite = new SuiteInfo("HelloWorld", "Nokia");
+ doInstallUninstall(suite, "http://" + getTestServer() + "/installertest/HelloWorld.jar", false, iDefaultOptions);
}
public void testDownloadJadHttpRedirectOk()
{
Log.logOut("InstallerEngineTest.testDownloadJadHttpRedirectOk begins");
- SuiteInfo suite = new SuiteInfo("JBenchmark2", "Kishonti LP");
- doInstallUninstall(suite, "http://195.134.231.83:7070/RedirectServlet/redirect?name=JBenchmark2.jad&count=5", true, iDefaultOptions);
+ SuiteInfo suite = new SuiteInfo("HelloWorld_redirect", "Nokia");
+ doInstallUninstall(suite, "http://" + getTestServer() + "/installertest/redirect?name=HelloWorld_redirect.jad&count=5", true, iDefaultOptions);
}
public void testDownloadJarHttpRedirectOk()
{
Log.logOut("InstallerEngineTest.testDownloadJarHttpRedirectOk begins");
- SuiteInfo suite = new SuiteInfo("JBenchmark2", "Kishonti LP");
- doInstallUninstall(suite, "http://195.134.231.83:7070/RedirectServlet/redirect?name=JBenchmark2.jar", false, iDefaultOptions);
+ SuiteInfo suite = new SuiteInfo("HelloWorld_redirect", "Nokia");
+ doInstallUninstall(suite, "http://" + getTestServer() + "/installertest/redirect?name=HelloWorld_redirect.jar", false, iDefaultOptions);
}
public void testDownloadJadHttpAuthOk()
{
Log.logOut("InstallerEngineTest.testDownloadJadHttpAuthOk begins");
- SuiteInfo suite = new SuiteInfo("DS_Snow_http_auth", "DS_Effects");
+ SuiteInfo suite = new SuiteInfo("HelloWorld_http_auth", "Nokia");
iDefaultOptions.addElement("-username=guest");
iDefaultOptions.addElement("-password=guest");
- doInstallUninstall(suite, "http://195.134.231.83:7070/httpauth/DS_Snow_http_auth.jad", true, iDefaultOptions);
+ doInstallUninstall(suite, "http://" + getTestServer() + "/installertest/httpauth/HelloWorld_http_auth.jad", true, iDefaultOptions);
}
public void testDownloadJadHttpAuthNok()
@@ -614,7 +638,7 @@
{
"install",
"-silent",
- "-jad=http://195.134.231.83:7070/httpauth/DS_Snow_http_auth.jad",
+ "-jad=http://" + getTestServer() + "/installertest/httpauth/HelloWorld_http_auth.jad",
};
int result = Installer.mainWithResult(args);
// Check result code.
@@ -625,7 +649,7 @@
iItu.isExceptionReason
(Installer.getExecuteException(),
InstallerErrorMessage.INST_CANCEL,
- InstallerDetailedErrorMessage.NO_MSG,
+ InstallerDetailedErrorMessage.INST_CANCEL,
OtaStatusCode.USER_CANCELLED));
assertTrue("installed app uid should not exist", Installer.iInstalledApps.length == 0);
}
@@ -637,7 +661,7 @@
{
"install",
"-silent",
- "-jad=http://195.134.231.83:7070/RedirectServlet/redirect?name=JBenchmark2.jad&count=6",
+ "-jad=http://" + getTestServer() + "/installertest/redirect?name=HelloWorld_redirect.jad&count=6",
};
int result = Installer.mainWithResult(args);
// Check result code.
@@ -680,7 +704,7 @@
{
"install",
"-silent",
- "-jad=http://195.134.231.83:7070/omjserver/resources/omj/T00000900_JBenchmark2_8mb_gcf.jsp",
+ "-jad=http://" + getTestServer() + "/installertest/HelloWorld_8mb.jad",
};
Log.log("InstallerEngineTest.testDownloadJadCancel: installation starts");
int result = Installer.mainWithResult(args);
@@ -693,7 +717,7 @@
iItu.isExceptionReason
(Installer.getExecuteException(),
InstallerErrorMessage.INST_CANCEL,
- InstallerDetailedErrorMessage.NO_MSG,
+ InstallerDetailedErrorMessage.INST_CANCEL,
OtaStatusCode.USER_CANCELLED));
assertTrue("installed app uid should not exist", Installer.iInstalledApps.length == 0);
Log.log("InstallerEngineTest.testDownloadJadCancel: end");
@@ -1109,10 +1133,10 @@
{
Log.logOut("InstallerEngineTest.testInstallAuthAndBig begins");
// Do first installation with doInstallUninstall helper
- SuiteInfo suite = new SuiteInfo("DS_Snow_http_auth", "DS_Effects");
+ SuiteInfo suite = new SuiteInfo("HelloWorld_http_auth", "Nokia");
iDefaultOptions.addElement("-username=guest");
iDefaultOptions.addElement("-password=guest");
- doInstallUninstall(suite, "http://195.134.231.83:7070/httpauth/DS_Snow_http_auth.jad", true, iDefaultOptions);
+ doInstallUninstall(suite, "http://" + getTestServer() + "/installertest/httpauth/HelloWorld_http_auth.jad", true, iDefaultOptions);
// Then start installation which downloads a large file.
Log.log("InstallerEngineTest.testInstallAuthAndBig begin to install big app");
@@ -1120,7 +1144,7 @@
{
"install",
"-silent",
- "-jad=http://195.134.231.83:7070/omjserver/resources/omj/T00000900_JBenchmark2_8mb_gcf.jsp",
+ "-jad=http://" + getTestServer() + "/installertest/HelloWorld_8mb.jad",
};
int result = Installer.mainWithResult(args);
// Check result code.
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/javasrc/com/nokia/mj/impl/installer/customisationproperties/CustomisationPropertiesTest.java
--- a/javamanager/javainstaller/installer/tsrc/javasrc/com/nokia/mj/impl/installer/customisationproperties/CustomisationPropertiesTest.java Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javainstaller/installer/tsrc/javasrc/com/nokia/mj/impl/installer/customisationproperties/CustomisationPropertiesTest.java Fri Jul 09 16:35:45 2010 +0300
@@ -212,18 +212,18 @@
String drive = (String)value.firstElement();
assertTrue("PossibleInstallationDrives is null", (drive != null));
- assertTrue("First PossibleInstallationDrive is not C:", drive.equals("C:"));
+ assertTrue("First PossibleInstallationDrive is not C:, it is " + drive, drive.equals("C:"));
// second possible drive
drive = (String)value.get(1);
assertTrue("PossibleInstallationDrives is null", (drive != null));
- assertTrue("Second PossibleInstallationDrive is not E:", drive.equals("E:"));
+ assertTrue("Second PossibleInstallationDrive is not E:, it is " + drive, drive.equals("E:"));
value = cust.getIntegerProperty(CustomisationProperties.PossibleInstallationDrives);
assertTrue("PossibleInstallationDrives value is null", (value != null));
assertTrue("PossibleInstallationDrives value does not contain any integers", (value.size() > 0));
Integer idrive = (Integer)value.get(1);
- assertTrue("Second PossibleInstallationDrive is E:", idrive.intValue() == 4);
+ assertTrue("Second PossibleInstallationDrive is not E:, it is " + idrive, idrive.intValue() == 4);
}
public void testTypesOfPossibleInstallationDrives()
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/javasrc/com/nokia/mj/impl/installer/utils/SysUtilTest.java
--- a/javamanager/javainstaller/installer/tsrc/javasrc/com/nokia/mj/impl/installer/utils/SysUtilTest.java Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javainstaller/installer/tsrc/javasrc/com/nokia/mj/impl/installer/utils/SysUtilTest.java Fri Jul 09 16:35:45 2010 +0300
@@ -167,6 +167,41 @@
}
}));
+ if (Platform.isS60())
+ {
+ suite.addTest(new SysUtilTest("testGetProcessState", new TestMethod()
+ {
+ public void run(TestCase tc)
+ {
+ ((SysUtilTest)tc).testGetProcessState();
+ }
+ }));
+
+ suite.addTest(new SysUtilTest("testDriveGetters", new TestMethod()
+ {
+ public void run(TestCase tc)
+ {
+ ((SysUtilTest)tc).testDriveGetters();
+ }
+ }));
+
+ suite.addTest(new SysUtilTest("testGetScreenSize", new TestMethod()
+ {
+ public void run(TestCase tc)
+ {
+ ((SysUtilTest)tc).testGetScreenSize();
+ }
+ }));
+
+ suite.addTest(new SysUtilTest("testIsoToLang", new TestMethod()
+ {
+ public void run(TestCase tc)
+ {
+ ((SysUtilTest)tc).testIsoToLang();
+ }
+ }));
+ }
+
com.nokia.mj.impl.utils.OmjTestRunner.run(suite);
}
@@ -198,11 +233,11 @@
{
try
{
- // Test PS keys defined in ScreensaverInternalPSKeys.h
- Uid uid = PlatformUid.createUid("0x101F8771"); // KPSUidScreenSaver
- int key = 0x00000001; // KScreenSaverPreviewMode
+ // Test PS keys defined in hwrmpowerstatesdkpskey.h
+ Uid uid = PlatformUid.createUid("0x10205041"); // KPSUidHWRMPowerState
+ int key = 0x00000003; // KHWRMChargingStatus
int value = SysUtil.getPropertyValue(uid, key);
- assertTrue("KScreenSaverPreviewMode(!=0): " + value, value == 0);
+ assertTrue("KHWRMChargingStatus(!=0): " + value, value == 0);
}
catch (InstallerException ie)
{
@@ -215,8 +250,8 @@
{
try
{
- // Test PS keys defined in ScreensaverInternalPSKeys.h
- Uid uid = PlatformUid.createUid("0x101F8771"); // KPSUidScreenSaver
+ // Test PS keys defined in hwrmpowerstatesdkpskey.h
+ Uid uid = PlatformUid.createUid("0x10205041"); // KPSUidHWRMPowerState
int key = 0x00000010; // Undefined key
int value = SysUtil.getPropertyValue(uid, key);
assertTrue("Getting undefined property value did not fail", false);
@@ -573,4 +608,51 @@
// OK, expected exception.
}
}
+
+ public void testGetProcessState()
+ {
+ int state = SysUtil.getProcessState(PlatformUid.createUid("[102033e6]"));
+ assertTrue("installer process state is " + state +
+ ", not " + SysUtil.PROC_STATE_ALIVE,
+ SysUtil.PROC_STATE_ALIVE == state);
+ state = SysUtil.getProcessState(PlatformUid.createUid("[e0001001]"));
+ assertTrue("nonexisting process state is " + state + ", not 0",
+ 0 == state);
+ }
+
+ public void testDriveGetters()
+ {
+ int defMem = SysUtil.getDefaultPhoneMemory();
+ int defMassStorage = SysUtil.getDefaultMassStorage();
+ Log.log("testDriveGetter: defaultPhoneMemory = " + defMem);
+ Log.log("testDriveGetter: defaultMassStorage = " + defMassStorage);
+ }
+
+ public void testGetScreenSize()
+ {
+ int screenWidth = SysUtil.getScreenWidth();
+ int screenHeight = SysUtil.getScreenHeight();
+ Log.log("testGetScreenSize: screenWidth = " + screenWidth);
+ Log.log("testGetScreenSize: screenHeight = " + screenHeight);
+ assertTrue("screenWidth <= 0", screenWidth > 0);
+ assertTrue("screenHeight <= 0", screenHeight > 0);
+ }
+
+ public void testIsoToLang()
+ {
+ testIsoToLang("unknown", -1); // unknown locale is indicated with -1
+ testIsoToLang("fi", 9); // ELangFinnish, Finnish
+ testIsoToLang("fi_FI", 9); // ELangFinnish, Finnish
+ testIsoToLang("sv", 6); // ELangSwedish, Swedish
+ testIsoToLang("sv_FI", 85); // ELangFinlandSwedish, Finland Swedish
+ testIsoToLang("en", 1); // ELangEnglish, UK English
+ testIsoToLang("en_US", 10); // ELangAmerican, American
+ testIsoToLang("en_AU", 20); // ELangAustralian, Australian English
+ }
+
+ private void testIsoToLang(String aLocale, int aLang)
+ {
+ assertTrue("SysUtil.isoToLang " + aLocale + " != " + aLang,
+ SysUtil.isoToLang(aLocale) == aLang);
+ }
}
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/00000019.jar
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/00000019.jar has changed
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/00000046.jar
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/00000046.jar has changed
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/00000058.jar
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/00000058.jar has changed
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/00000070.jar
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/00000070.jar has changed
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/00000090.jar
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/00000090.jar has changed
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/00000150.jar
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/00000150.jar has changed
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/00000172.jar
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/00000172.jar has changed
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/00000175.jar
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/00000175.jar has changed
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/00000182.jar
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/00000182.jar has changed
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/00000189.jar
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/00000189.jar has changed
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/00000250.jar
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/00000250.jar has changed
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/00000305.jar
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/00000305.jar has changed
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/00000390.jar
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/00000390.jar has changed
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/00000500.jar
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/00000500.jar has changed
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/00000582.jar
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/00000582.jar has changed
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/00000618.jar
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/00000618.jar has changed
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/00000703.jar
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/00000703.jar has changed
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/3DSpaceShooter.jad
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/3DSpaceShooter.jad Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,18 @@
+
+MIDlet-1: 3DSpaceShooter, /icon.png, Sapce3D
+
+
+MIDlet-Jar-Size: 240229
+
+
+MIDlet-Jar-URL: 3DSpaceShooter.jar
+MIDlet-Name: 3DSpaceShooter
+MIDlet-Vendor: Innovative Ideas From Outer Space Ltd.
+
+
+
+
+
+MIDlet-Version: 1.0.4
+Nokia-MIDlet-Original-Display-Size: 176,208
+Nokia-MIDlet-On-Screen-Keypad: navigationkeys
\ No newline at end of file
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/800_x_N97_64GB_fr_speed_v5_32_01.jad
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/800_x_N97_64GB_fr_speed_v5_32_01.jad Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,99 @@
+RepositoryContentType: text/plain
+UserAgent: NokiaN95/J2ME-IMPS
+ShowStatusTextInCL: 0
+SpaceBetweenFriendsNameAndHisIcon: 3
+ShowDomain: 0
+MIDlet-Icon: /img/App.png
+NormalPollRate: 12000
+TCPCIREnabled: 1
+Images: http://download.ko.mysite.fr/koi/j2me/enc/1111/
+SpecialKeys: -12
+Host: koi.ko.mysite.fr
+TCPPingRate: 1560000
+EnableCommunitySelector: 1
+BackgoundImgPos: 0
+ScrollBarWidth: 5
+MIDlet-Vendor: Vodafone
+BillingURL: http://koi.ko.mysite.fr/koi/sq.dll/awo_buy
+UseTemplate: 1
+MaxFriendsNumber: 150
+StopTCPCIR: 1
+MIDlet-Version: 4.5.27
+SelectCommand: 1
+KeepAlive: 1500000
+SMSCIREnabled: 1
+MultiTrans: 5
+DefaultDomain: gmaeam1.com
+EnableBackgroundImage: 0
+MicroEdition-Profile: MIDP-2.0
+TermsAndConditions: 1
+SeamlessLogin: 0
+GlobalMsgLength: 600
+MIDlet-Push-1: sms://:3716, ui.Main, *
+RegisterConnection: 1
+ViewType: 0
+HTTPCIREnabled: 1
+IsTabFontBold: 1
+AboutNaming: PrerryLake_h_N97_fr_speed_v4_5_27
+InitMessage: 1
+MicroEdition-Configuration: CLDC-1.0
+MIDlet-Jar-URL: 800€_x_N97_64GB_fr_speed_v5_32_01.jar
+AnimationRate: 300
+Multitask: 0
+EnableSemitransparentHighlight: 0
+CheckContentType: 1
+MaxMsgNumber: 30
+Port: 80
+LoginURL: http:/koi.ko.mysite.fr/koi/sq.dll/dsw_daas
+UseKeepAlive: 0
+MIDlet-Install-Notify: http://download.ko.mysite.fr/InstallNotify?c=
+SelfUpgrade: 1
+MIDlet-Data-Size: 500
+AnimationEnabled: 1
+TitleUpdateRate: 7000
+EnableRenameFriend: 0
+SystemMessageUserTimeout: 25000
+Help: http://download.ko.mysite.fr/koi/j2me/enc/help/fr/
+UseDeviceTimeForIncomingMsg: 1
+TCPCIRReconnectCount: 3
+DefaultLanguage: de
+MIDlet-1: Messenger,/img/App.png,ui.Main
+MsgListHeightTuner: 8
+MIDlet-Name: Messenger
+FontSize: 0
+WVExtension: /web/wv.dll/msn_imgw
+RefreshChoiceOnStateChange: 0
+MIDlet-Permissions: javax.microedition.io.Connector.http,javax.microedition.io.Connector.https,javax.microedition.io.Connector.socket,javax.microedition.io.Connector.sms,javax.wireless.messaging.sms.receive,javax.microedition.io.PushRegistry,javax.microedition.media.control.VideoControl.getSnapshot,javax.microedition.io.Connector.file.read,javax.microedition.io.Connector.file.write
+MaxConversations: 20
+SubscribePresence: 1
+PersistencyEnabled: 1
+RepositoryAlertMessage: Error loading application data. Please try again later.
+GlobalMaxCharCount: 5000
+EnableEmoticonsSelector: 1
+IdleMode: 1
+SpacerHeight: 5
+TCPCIRReconnectRate: 3000
+MIDlet-Jar-Size: 502719
+BackgroundEnabled: 1
+IsCaseInsensitive: 1
+AlertToneMsg: http://download.ko.mysite.fr/koi/j2me/enc/dingdong.mp3
+NormalNoPollTransition: 1800000
+AlertToneContact: http://download.ko.mysite.fr/koi/j2me/enc/alalal.mp3
+NoPollStateEnabled: 0
+Device: 3
+SupportCustomUTF8: 0
+MIDlet-Info-URL: www.koikoikoi.com
+MsgListWidthTuner: 15
+CommandsType: 1;4;2;4;3;8;5;4;6;2;8;2;9;7;10;4;11;8;23;4;24;3;37;2;68;2;69;7;76;4;80;2;86;6;87;1
+IdleModeTimeOut: 900000
+ShowAboutLogo: 1
+TopMarginFriendName: 2
+ContentLanguage: fr
+FastPollRate: 7000
+NokiaTimeOut: 100
+FastNormalTransition: 20000
+EnableShortProfile: 1
+RepositoryVersion: 1
+MIDlet-Jar-RSA-SHA1: QhSjP7F1q3TGmmNC45cUGclVWB537GtcMLpplIJGe+TyDwJ1Mx5VssNHpp3Qs3C1WHLycvcfOkDT0CscStI0lV/5Xy33z192qEHIT5lkGVz1Rd1nfBHqrIBqv77H7dHW1tdU6RiVajx8jrYYXz+Yh/7U2kskmGXd0bLSYq2cuZZgkiT9YDOLa8OJ1Xn2U4/AYzonM1tjGQvkOniCvwqv0DXDW3GAial5w7hzB4txSopBgWiCO7sEPgkssJIvWQ2dsuLnwb3nU8gsUYWuRqidSI5Dm8mSOEA0zjRoREjTJjkqRZXX3r27rtp+omYh+VNCkXDneiNcaihWpkW5TgMhVg==
+MIDlet-Certificate-1-1: MIIEOTCCAyGgAwIBAgILAQAAAAABFIeLkAEwCQYJKoZIhvcNAQEFBQAwUDELNAkGA1UEBhMCVVsxFzAVBgNVBAoIDlZvZGFmb25lIEdyb3VwMSgwJgYDVQQDEx9Wb2RhZm9uZSAoVHJ1c3RlZCBBcHBsaWNhdGlvbnMpMB4XDTA3MDgyMTA4MzA0NFoXDTEyMDgyMTA4MzA0NFowTzELMAkGA1UEBhMCU0cxFDASBgNVBAoTC05ldXN0YXIgTkdNMSowKAYDVQQDEyFNb2JpbGUgSW5zdGFudCBNZXNzYWdpbmcgMjEuMDguMDcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCFfdEngntebK38dtsdODIkNzMiYsngpTwgnDPqV23m/OtsCX1+1E3+ns9v7EPQVqeTuPYUbUiQRXAYE2NpnUjzNd4bKIXBlk18YpXftMxKv4XRvtVa273O/nbKigtR9IuJx2Pz/x/zWbDpc4ZitRQaRTHy0oA1W+htVI1BBzO8cFC3kf4DTNEXjeYHGF5U7deGp/KuN8qfN7QPJ5gtYyUcwYtrV9imc7P2idLFfYGejm7/s/R3qh9o3bIvqLSHUQbwTQNz7bA7QzpBYkSgaQqzif8+ZYRZuLApjbhpoM5XRFUwQCu6KXx7ZPMKoCKVjof20LWlilUiBrVIXMIwHq0tAgMBAAGjggETMIIBDzAOBgNVHQ8BAf8EBAMCB4AwEwYDVR0lBAwwCgYIKwYBBQUHAwMwUgYDVR0fBEswSTBHoEWgQ4ZBaHR0cDovL2NybC52b2RhZm9uZS1wa2kuY29tL2NybC52L1ZvZGFmb25lVHJ1c3RlZEFwcGxpY2F0aW9ucy5jcmwwOAYIKwYBBQUHAQEELDAqMCgGCCsGAQUFBzABhhxodHRwOi8vb2NzcC52b2RhZm9uZS1wa2kuY29tMBoGA1UdIAQTMBEwDwYNKoY6AAHv9U8BAQMBAzAfBgNVHSMEGDAWgBQ7En6Wl4emCf8AlmWvsw/TeSSR9DAdBgNVHQ4EFgQUadzkP7g69+F/NQGoOfvOG1PC6YowDQYJKoZIhvcNAQEFBQADggEBAK2Z4qE4EFlXYL3ELnsbV/Ri6igPgdXgSZalaw8IKorw19TX7ERpL2tCiyDqisEJygNLW2iok9Nn3DUsmJTr0CoSZFGZc88hkJ9mlDTCQnNa9Hx9XQhp3Ig0uo1Eoei+12kF9j1kVlQJl6QkOPrbdmBbGpv7NFTM29zkPN/4wt3uUvoLZ/ZlbB4NjufZ6gVL77Bt2+UNwKLM4wF39Dy3zTD6qcJPuitGGSss0X4SYX6AzTtNRM+CtTPkFby10pHmmr4ClSfGtOZnXmbGizOIUh/lgOgv/nG9Q+dRDUGDTkhnDwMs1b0reQ0rGE1jFayCJ6Rmn/03FIN5N1SKfgkSeBE=
+MIDlet-Certificate-1-2: MIIECjCCAvKgAwIBAgIFAwEAAzANBgkqhkiG9w0BAQUF8DBLMQswCQYDVQQGEwJVSzEXNBUGA1UEChMOVm9kYWXvbmUgR3JvdXAxIzAhBgNVBAMTGlZvZGFmb25lIChPcGVyYXRvciBEb21haW4pMB4XDTA1MDYxMzExMDAwMFoXDTIxMTIzMTEyMDAwMFowUDELMAkGA1UEBhMCVUsxFzAVBgNVBAoTDlZvZGFmb25lIEdyb3VwMSgwJgYDVQQDEx9Wb2RhZm9uZSAoVHJ1c3RlZCBBcHBsaWNhdGlvbnMpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvfev7oXJy+WKdRjmc2i+Y8vMI3ey/LggGtOhGhY7w1oH1puYttgAjwPP7Ff2qObaJyfFnX81aCopQWeymGzpJtcIv/Z5sZRayBw9ceNIqI7WrwS3Ht//4uqUIH0p6VtPuRukNAnJewbFGgImowwZI4sizQ5Idqxx14lUoOTw8EaE0ygwXSJefS1w/5vuShyujd22F3wHpQnjo/lf05y14x43Uf+PpfFoVzvKm8q/n4VMtzMwi04vkgPjkflT2yay8WWtEpxU6rw8j32EWM/A2+kd4YbTE50I9/XFmIitHajaPVB3piwsChSt4d89UyIP/a+xGkPMultznEdH23SptQIDAQABo4HwMIHtMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQ7En6Wl4emCf8AlmWvsw/TeSSR9DAZBgNVHSAEEjAQMA4GDCqGOgAB7/VPAQEDATBNBgNVHR8ERjBEMEKgQKA+hjxodHRwOi8vY3JsLnZvZGFmb25lLXBraS5jb20vY3JsLnYvVm9kYWZvbmVPcGVyYXRvckRvbWFpbi5jcmwwHQYDVR0lBBYwFAYIKwYBBQUHAwMGCCsGAQUFBwMJMB8GA1UdIwQYMBaAFEjdPe/gPJzfErEw/ZHhwen7l9wIMA0GCSqGSIb3DQEBBQUAA4IBAQCaehJEHzna6onjE8bCCsi7A5NxcQ2Cx85PYs67yxQZ0wMQq1khzxsOJPB7H4SoXlceNMvIxpgPFm/ZcLNdeyjoYOQccH+aS6GRSerYX3COdbtWA4Gjq/sB6ghoUZ74+VbXD3t9Rhrnt7fOMe1llWOcf/eoMmvOrJOrBPrC3ZxZEwyHAgyqEJDn2Z8KXTMUr41jge3KyhxRehflRcYhdXzwmE+8LOHaN7xLEZauOuafyBEVpjVN5UaaOm/v8mTn0TymV2j9R7D8Nycbz1gVeMrOhNW2GODxjvu5IoEHQh/myul28EecKGx05Xprcodr0a8Q6LKJg+ihJMxMrS3YEylp
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/BCExchanger.jad
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/BCExchanger.jad Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,10 @@
+MIDlet-Jar-URL: https://uljava.gjmptw.de/midlets/harmonized/Local%20Connectivity%20(BT%20and%20IrDa)/BCExchanger/BCExchanger.jar
+MIDlet-Install-Notify: https://uljava.gjmptw.de/Index/Index.php/BCExchanger.jad?installed=BCExchanger_harmony
+MIDlet-1: BCExchangerMIDlet, /icon.png, bcexchanger.BCExchangerMIDlet
+MIDlet-Description: Demonstrates the usage of the JSR-82 Bluetooth OBEX API by exchanging business cards between devices.
+MIDlet-Jar-Size: 29967
+MIDlet-Name: BCExchanger
+MIDlet-Vendor: Forum Nokia
+MIDlet-Version: 1.0.0
+MicroEdition-Configuration: CLDC-1.1
+MicroEdition-Profile: MIDP-2.0
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/BCExchanger.jar
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/BCExchanger.jar has changed
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/BCExchanger.zip
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/BCExchanger.zip has changed
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/DevCertTestMIDlet.jad
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/DevCertTestMIDlet.jad Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,14 @@
+MIDlet-1: DevCertTestMIDlet, , com.nokia.midp.test.devcerttests.DevCertTestMIDlet
+MIDlet-Jar-Size: 3152
+MIDlet-Jar-URL: DevCertTestMIDlet.jar
+MIDlet-Name: DevCertTestMIDlet
+MIDlet-Permissions: javax.microedition.pim.ContactList.read,javax.microedition.pim.ContactList.write,javax.microedition.io.Connector.http
+MIDlet-Permissions-Opt: javax.microedition.io.Connector.https
+MIDlet-Vendor: Nokia
+MIDlet-Version: 1.0
+MicroEdition-Configuration: CLDC-1.0
+MicroEdition-Profile: MIDP-2.0
+httpUrl: http://www.google.com
+httpsUrl: https://www.google.com
+MIDlet-Certificate-1-1: MIJs7jCCbFegAwIBAgIJAPNUaScSr5cxMA0GCSqGSIb3DQEBBQUAMHMxCzAJBgNVBAYTAmZpMRIwEAYDVQQIEwlQaXJrYW5tYWExEDAOBgNVBAcTB1RhbXBlcmUxDjAMBgNVBAoTBU5va2lhMQ0wCwYDVQQLEwRKYXZhMR8wHQYDVQQDDBZKUF9EZXZpY2VfTWFudWZhY3R1cmVyMB4XDTA5MDkxNjExNDk1M1oXDTEwMDkxNjExNDk1M1owNTELMAkGA1UEBhMCRkkxEDAOBgNVBAcTB1RhbXBlcmUxFDASBgNVBAMTC0phdmFEZXZDZXJ0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCXZ/GCV/N8foAkCQJfoiwGlwHO+f1lV9zloo0r0zosGtVqItLXKrvXEKylpOVWBygRVVrkl30Y1Cxess4aS1UmZ1rcvwL0jcvwlkZGacJazjtHE4UQuYJz9WRbYOaQxR2SVS/wU2Ptu/mr0ZgqFhgaJ1FzCuBdNaWzx2mGV9az/QIDAQABo4JqxjCCasIwKQYDVR0gBCIwIDAOBgwrBgEEAV4BMQEBAwQwDgYMKwYBBAEqAm4CAgICMA4GA1UdDwEB/wQEAwIHgDAXBgNVHSUEEDAOBgwrBgEEAV4BMQECAgMwgmpqBgwrBgEEAV4BMQECAgcBAf8EgmpVMIJqUQwPMDA0NDAxMDE1MDc2OTU5DA8xNDM3MjU3ODc0MDc3MzAMDzAwNDQwMTEwNDIzNjk4NQwPODUxODA4MzAxNzgwMzcwDA84MzYwMTU2MDMxNDY4MjgMDzM2ODYxNzM4NzAzNzM4MAwPNzY2NjI2NTYyMDM3MzI4DA84NjgwMjIwNjUxODczMTgMDzQ3NTEzNTQ0MzEwMzQwNAwPNDY0NTI4NzEzODY1MDY1DA84NjEyMTU3NzIwMDczODUMDzQwNzQ3NTAzMTI1NjYxOAwPNzQxMDY1MDUxNDE1ODI2DA81MzI1MTM4NTc4MzM1NTMMDzA4ODQ1NDM0Mjg4ODg2NQwPMTY1MTEwMDA3ODE1NTE2DA83NzYwMTU4NDUzNDgyODgMDzIyNTUzNTY4NjA4ODYwNQwPNDUzNTUyMTc2Mzc2MjcyDA8zNTAwNTM1MjQxMzMyMDYMDzg4NzU3ODg4NzM2MTM0NwwPNzgxODA1MjY0ODE0MzQyDA8yNTM4ODg2NzUzNzUxMjgMDzMyODczMzE2Nzc1MDg1OAwPMjA2Mzg1NDYyMTM4MjUyDA82NTA1NTIwNDcyMjIzNDMMDzA2MjQ4NzM2NTAxMzMyNgwPMzM4NjAxODY2NTcwMzcwDA8yNzcwMTgyMTEyODYzMzYMDzA3MDE2MzQ1MzQ3MzExMwwPMDM3MDI1ODcxMzE3ODc3DA81MjMyNDMzODgyMDA0NDIMDzg1NTcwODIzMzAyNjQzMQwPNTQzNDU4MzEzMzc1ODI1DA80MDgwMzUwNTQxODIxNzcMDzcxNjYyMjEzMzMzMjEzNAwPMTAzNzY1NTEwNDcwODQ3DA80NjAxNzgwODEwMTQ0NjYMDzMxMDYxMTQzNzY2NDUyMAwPMDQwMjM1MTMxMDE3NjI0DA8xNTIyMzUzNjA1MDg1NDQMDzc1NjU3Mjc2NDI1ODE3NQwPNjcwNjcyMTIyMzAzMjU3DA83NzUyNjU0NzQ3MjgwMjMMDzQyMTgwMzg1MjE0MjE2NQwPODE0MTcxODU0NjQ4MjcyDA80Mzg2MTIwNDczMDY2MzUMDzY2ODA4ODQ1MjM3NDAxNAwPMjMwMDgyNjEzNDYzNTM2DA8yODA4MTYyMjMyMTExMTYMDzc4MjM3MzE2NzgwMTgwMwwPMDYyNjU3NTgwODMxODMxDA82NzI0Njg2NDc0NTUwNTYMDzgyNTUyODAzMjY0NzQ0MwwPNDU2MzAxNTA4NzEwMDMzDA8xODgzMTg4MjAzNjI0NTcMDzQ4NDM3NjExMDUzNDQyMgwPMjMyMzU0MTQzNDE1NTU4DA84NDc2NzAxNzc3MDI0MTAMDzc4NDIzMTY3MDE3NDY1NQwPNDc2Nzg0NDI1MDE1MTMyDA81MTEzMTU3ODA1NjcxNDMMDzA1MDUxNjgyNDg1Mzc3NQwPNDUxNTA1NjA0MTE3NjQ3DA8wNzc3MzU0MTc0NzcwNzcMDzQ4ODQ3NzYzNTE3MTU1NgwPMTQ4NjM0MzM1MDgzNTgzDA8yMjMxMzE0NzI1Mzc0NzcMDzY1ODQ4ODQ2NzI0MjA1NQwPMzYwMTU2NDYwODU1ODM1DA8zNDc1MTczMjM2NDMwNDYMDzMwNTE3MDA0NDQyNjQ4MQwPMDg4NzMzMjAyMzUzNzQwDA8zNDY2NzY1MjY4MDA1MDMMDzUwODQ1MDEwNjM3MzY1NgwPMjAxNzM2NzEyMDUwNDg3DA80MDMwMDg1ODMwMzE1NTIMDzM4NTUyMDQ2ODA2ODAxMgwPNzIwNDc3Njc4NjM2NDg3DA84MTM4MTc1NDQzNTY3MzAMDzgyNzIyMzc3MzY1NTEzNQwPNjQ3MDEwNTUyMDA3ODY2DA8xODAzMjExMTg4ODY2NzIMDzc0MjEzMzg4MzgxNDIzNQwPNTc1MzU1NzQ4NTMwODgwDA8zMTAzNzAxMTY1NDcyNDMMDzQ0NDQ4NTU1Mzg0NTE3NQwPNzQzNzc1NzA4MjM2NDM3DA8yMzc1MjQxNTg3MTUxMTMMDzI3NzQwNTUzMDE2MzAyMAwPMTgyMzA3MTU2Mzg3MzM2DA8xMDMwMzA2NjIyNjA0NzAMDzE0MTYyMTU3MDI1MzI0NAwPNDY0MDcyMjc2NjQ1ODM3DA80NTUxNzc3NDczMDQ1NTcMDzI2NzYwODgyNjY3ODY0NgwPMzQwNjM1NjMyNTc3NDg0DA8wMTUxNzcwMzI2NjM4MDUMDzgwNzI2ODcwNzY3NjQwNQwPMjA1NzQ2NTE1NTQzMDIzDA82NDU3MzA4MTUxNjcwMzUMDzAzNDEzNjM0Mjc3NTAxNwwPNTc4ODAyODAyNDYzMzYyDA84NDA1MDUzMjE4MjM2MjcMDzA3NzEyNzYxMTEyNjUyNgwPMDE4NzU0NDgwMDM3NDM4DA8wMjEyNTgwNzAzNDE1NzgMDzg2MzAyNjcxNDcwMDYyNAwPMDU2NjQ0MjQ2NjA1MTEzDA8xMjIyMDMxNTcwNTg2MjEMDzgxMDY3NjQ2MjU0MDU1MwwPMTUxMzM1NzUyNTI3NDc0DA8wNjA3MzQyODg0MTgzNTQMDzEyNzYxMjI2NjE0MjUxMAwPODY2MTI0NDU3NzE2NDQxDA8zNDAwNjI0ODY3ODE2NjYMDzA1NzcyMjMwNTE4MzQ4MgwPODMzMzU2NTI3NDI3ODc2DA8zMTA2MjI0NjI0MTM0MzQMDzQ3NDYwODY1MzEyNjA2NAwPMDQzMzIyNzg1MDgxNzM2DA8zNzY0MTAzNzcyODQ2NTIMDzYxNDg3MzQxNDY4MTA3NQwPNjM2NDc1NTgzMDgxNTE4DA8zNzIzODAxMjgzNDAwMzUMDzcxMzEwNzAyNzIwNDcwMQwPNTU2MDA4MTY1MDg4MDMzDA83MjQ4MzQ4MTgyNjY2NTcMDzA2ODA2MTMwNDcyMzg0NgwPMTMzMzY1MjMwODQ1MDUyDA81NDQ2MDI1NjQzNzU0MjgMDzQ4MTM0ODQ3ODAwMjEwMAwPNDExMzA0MTUzMDA0NjcyDA83NTYyMzUxNzc3MDEzNTAMDzIwMTI3NTg3ODMzMTc0NwwPNTg2MTQ4NTYyMzM2NjgzDA84MDQ3Mzc1MjM0NTgzMjYMDzMyODYxNjI3NzQwMjAwOAwPNjU1ODMwNTExNTEwNTA4DA8wNDgwMDc1Nzg2NzIyODUMDzM1ODM2MTM4NDEyMDcwNQwPNTg1MzA2NzU1MjUwMDI3DA81MDU3NjQ3MjQ2MTExNjcMDzQ2NjU2MTc0NTMxMDU3NAwPNDU1MTUwMjI4NjQ3MTc3DA8yNDM1NDY0NTY1MDI4MzAMDzUyMDI4NjUzNDE0MTQ0MQwPMTUzNDA4MDc0NzAzMDE0DA81NjUwNjE1MTEwMjM2MTAMDzQ4MDExNDMwNzIwMTc1MwwPMjQ1Mjc2ODc3MTg3ODY2DA80MDY3MDgxMjM1NzExODQMDzQxMzU2MTA4NTY2MTAxNgwPNDIyMjI2NjEwMDcyMzgwDA8yMTEwNDE3MjU1MjM2MzYMDzU3ODM1NDE2MjQ3MzIzMwwPMDU4MTExMDQ3NzQxMjEwDA82NDUyMTAyMDAxNzI2NDgMDzA0MzEzMTc1MDE0NDA4MgwPODc3NTIxODg2NjE3NzU4DA80NjYxNTgyNTA2MTUzNjgMDzg3NTY4MzA4NjE2MjExMQwPMDQ4NjQzNjM1NzEwODUwDA8wNzg1NzY2NTYzODE4MzUMDzE4NTQzNTU4NTE3MjU3NAwPNDMxNjYxMjc4NTUwNDU0DA8yNTgwNzQ4NjU3MjM1MzAMDzM0MDc4ODYzODA2NzQ2NQwPNjE4NDIzNjMwMTM0NzczDA8yNjgwODQyNzQ0NzAzMjAMDzI4MDgxNDMxMjA2NzM1NQwPNDEyNjUxMTA4MzAxMTYzDA80NTE4ODIxODc4NTcyMjAMDzQ3NTYwODc2ODE0NzY2NgwPMDU3MDAzMjcxMTUyODI3DA8yNjAwMDYzODg2MjExNjYMDzM1MDg3NDQxMDUyMTMwOAwPODM1MDAwMzUzNTcxMTQwDA81MTU3MjAzMDYxMjg3NTYMDzA1ODgzNzY0ODQwNDg1NQwPNDA4NDg2NjQ0NDMzNDM2DA82NTg0ODM0MTIxMjM2NzcMDzU4ODA0NzA1NTM0MDYzOAwPNTA3NDMzMTMwMDY3MDY1DA8yNjQwNjcxNzc3NDc4NTgMDzQ4NTEwMTM4MTY1NjE1MAwPMzEwNzYzMzY2MjIxNDU1DA83NzIzMjMyMTEyMTQyMjQMDzU0ODg4MTU0Mzg4MTY0NwwPNDc2NTYyNTE3NzIzMTE2DA8wMTAwMTQ0NjEyODE4MDYMDzUwNzM1NzA3MDM4MDUyNwwPNTg3NDQ3ODIyMTExNTA2DA81MzY2NTExMjI2ODc0NzIMDzIxNDc0NTAwNjU0NTcyOAwPMjg2MTY2NzUxMTA2MzA4DA8xNjg3NzA1NDQ1MTIyMTcMDzM1MjU3MzcwMzQxMzU0MwwPMzAxNDEwODc4NDI2MjE1DA8zNDY2ODQxODUwNjgxMjMMDzUzMzA2NTMyMzEzNjI0NQwPNjA1MDE3ODUyNzU1NDM1DA80NzcxMzg3NTc0MjM2NjgMDzY2NzA4Mjc1NDUwNTUyMgwPODczMjQ1MTM4MTAwNDAwDA81NTc1MDI0ODczMjQ1NzEMDzI1MTEwNDAzMTcyNjI1NAwPNjI4MTA0NTEyMTU0MDAxDA80NzQzMDM1MTExMjI1NDUMDzQ4NDY4ODc1MDg2MTI4MgwPNTMxNjY0ODAxMjA3NjY0DA80NDc3NjA0MDUzMjM1NDcMDzgxODA2NjQ0MjgyMzQxMQwPNDg0NzQ1NzUzNTcxNTAyDA83MDM1NDE4Mjg3NjUwNzgMDzA0NDAwODczMTEyNTY0NAwPNTM0NTAzNjE4NTA3MDczDA83MDQ0NzE4NTE4MzQ1NDYMDzM0ODEwNjMzMTUyMDg0MgwPNzY0MDY3NTYyMjM1MjA0DA80NzQwMzEyNTI1ODE3NDUMDzU2NzQzNzQ4MzY2MjQ0NgwPNTIyNzM0NTg4MTY2NjE4DA8zNDU1NTQ0NzA0ODgwMjIMDzAzMjMzMjAyMzYyNjQzMAwPNjUwMDg0NDc1NTU1ODYyDA82ODE0ODA1NTM3NzM0NzcMDzM0NzMyMDI1NjE3NDg3MgwPMTA0NTIxNjY2Njg2NjI4DA81Njc2NDg1MTM3MjMzNzMMDzU4NzUxNzg4NDA2MzAzNAwPMjI1NTI3MDAxMTYyNDU1DA8zNTc2MjQzNDc1Nzc0NTAMDzY3NjQyNjQzODc2NzI0MAwPNDg2ODM0MTAwODA4NzU3DA8xNTg1NjY0NDM3MDA2ODUMDzY0NDY2ODE4MDU0NzY0MwwPMDQyMzU3MTQ3MTgyNjY0DA80NTA3NTQzODQyMzA2MzEMDzA1ODA3Mjc4MjIyODI4MwwPNTY1NjE1NjEwMzQxNzYwDA84NzIzNzIyODc0ODIzNTIMDzYzMDE2NzY0ODE1Njg4NgwPNjEwNDAzMzg2MDUzMTY4DA8zODA1ODQyMTE0ODEwNjUMDzExMzg0NTM0NDY3MjI1NgwPMjY2NDY1MzEzNTUzMjg4DA80MDExNTc2NzMyODAyMDcMDzc2NzI3NTQ2NjM0MzA3MgwPNDczMjY2NDY3MTU3NjA3DA8wMjY2NTQ2MzA1MzEyMjUMDzYxMzU2NjgxNjExMzg0MgwPNzE1MTE2MjE2NDI1NzcxDA8wMjY4MzcyMTQ2MDMyMzMMDzE2NjM2MzY1MzE3ODUwNAwPNjgyNDAwNjExMzQ0NTM3DA80MDE3NDM0MzMwNDI1NDYMDzY0MDc0MDMyNDg4MDgzNQwPNDU2MTQ0ODM1MTg2MTYyDA8xODI0NTYyNjI0NTcwMjQMDzQwMzEzNjc4ODY1NzI0NgwPNzUyMjE3NjI3NTQxMTIxDA8zMTcyMTQxNTgyMTYxMzgMDzM2MDI3ODA3MjA3MTA0OAwPMDU4MjA4MDgzMjg4NzIwDA80MTgxNDgwMDUyNzc2NTgMDzM0MTg1ODQyMjgwODYzNwwPNTU1MzIxMDI3MjMyNTE3DA83MjYyNjY3NTQ2Mjc2MzUMDzQwODc2NTg0NDExMzQ1NAwPMzAzMzc2ODIyODg0MTc4DA80MDE3MDI0NTMyMDYyNzQMDzIxMTcwNDc2NTE3MTIzNAwPMTg0NzEwMDY3NzgyMjAzDA8yNjIwMDAyMDQ1MjI1NjQMDzg4NDI0Nzg4NDI3Mzg4MAwPMTIzODAyMTI0Njc1NDA4DA8zMTczMDYyMjY4ODIwODQMDzQxMzc2NzQ4MzEyMjQ2MwwPMjc3MDU0NDI0MDQ3MzgyDA8xMTYwODA4NzU2NjE0NzEMDzE2MzY3MTIzNzg4NzIyMwwPODc0ODI1NjYxMTczNTU2DA80MjU1MTg0NjA2NTI2NzIMDzA1NzMyNzU0NTgxNTE2MAwPNDIwMzU0MzA3MzI2MzQwDA83NjQzMjYxMTc0MTQxMzcMDzQxNDEzODIyNzQ1MTc3OAwPNDE0MjE4MjQ3MzI4NzEzDA81NTAwNzE0MjIyMTE1MTAMDzE2MjcxODUwNzQ1NjYyMQwPNzE0NDc3MjI4MjAzMzE0DA80NzgwODAwMDAwNTg0MzcMDzI1NjQ4MTY1ODQzMzQ0MAwPNjYyODU0MzU2NjY4MzQ1DA8yNDE2ODY2NzY1NzI1NzgMDzUwMzIxNDE1MDU1MTU1MgwPNjAwNDU0MTI1MDU4MTc3DA83MjYxNjQ2NzY3MjMyMTgMDzUyNjMxMDMwMjMyNDA4MgwPNjgwNTEwMzE1NzI3ODgyDA80MjY4NzgzODE1MTcxMjgMDzQ3MzQ3NzI2MzM1NjAyNwwPNDgxODE4MDg3NTMxNjE4DA82NTIzMTY3NjY1MDg1MzIMDzM0NjgxNTI1NTcxNjc4MgwPNTcyNTY1ODQ4ODM2MzA2DA81MzMzNjQ3MzAyNjM3MzcMDzAwNTI1MjQ2ODEyODA2MAwPNzYxODIzNjM0NjA2NTQ0DA8yMDY4NDA1MzQ1MDE2MjUMDzgyNjg3MDExMTA4NzQ1MAwPNzcwNjUzNDE4MjE3NDU4DA83NjM0MzY4MTI4NDg3MjgMDzA2MjYzMjQyNjM1NTI0MAwPNTUzMDY1MzQ2NTU0MjQ2DA8zMDE3NjQyMjQ3MzA2MDEMDzM3MTUxMTM2MjQxMjA3MwwPMDgyMDg3MTc0MDA2NjA4DA8zMTg1NzQwNjA4NjA1MTgMDzQ4MjQ1MjIxMTUwNzIxMQwPNTQwNTAwNTQ2NzcyMDI2DA8xNjczNTAwMDQ2NzAzNDYMDzQzNTExMzIyMjE2NTExNgwPNjY3ODMzMTY0MTM0MTYwDA81MTI2MzYxNDEyNjIyNjcMDzcxMjA2ODA3NzUyMzMzNQwPNjY4MDMxMDc1MzU1NzU2DA82NTM3ODgxMzI1MDUxNjgMDzg2NjIyNTgxNzI3ODMzNgwPMjg2NTg3NDc2NjM0NzMzDA80NTQ2MTQ0MzU2MzY2NjIMDzQxMzU3ODEzMjMyNzgyMAwPNjMxMzQ1MzA2Nzc1NTQ0DA81ODA0NDczNDUzMjgzNTgMDzY1NTI1NTU4NzYxMzQ4NwwPMjUwMjAzODUyMTM3Mjg0DA81Mjg3NDYzNjg1MjAwNDgMDzIxNjE1NzQzODM0ODA3NgwPMjEzMzAzMTE1MzEwNzM0DA8zNzUwNzg0NDgwNDcwODAMDzM3Nzc1MTE3MzExMDc3NQwPODE0MDAyNjIxMjIyNDUyDA81NzY0MzM2NjAyNjMyNTAMDzIzNDAyMTI0MDExODA1NgwPODg3NjE1Nzg3NzEyMTAzDA84NTUzNTYxODA3NDE2NjgMDzc3NjA4NzgwNzgyMjE3MwwPNjU3MTg1NjcxMjIwMTI4DA8wNTU2NDAyNTQ4NzU3MTEMDzcyMDMyMDE0MjI3NjU1MAwPNjE2NTgzMDcxODIyNTc0DA81MTEwNDQ0MzEwNjg0MTAMDzgzMDg1NTM2MTAwMTQ1NwwPODAwMjA0NDAzMzAxMDI2DA8wNDM0NjIxNjg3NTE3NzUMDzI2MjYyMTc4NzgxNjQzMgwPNTc1NTU1MTQ2MTIwODY4DA8zNDEzODI1MTYwMjI0MzUMDzE2NTgzNzE2NDM2ODAyMgwPNzY3Njg0NzI2MTE3NDA1DA8yNjM1MzU4NDExNTEzNzAMDzAyMzAyMDE3NjM4MTI2NwwPNTg1MTI2MjgyMzgwMDQ3DA81MzgxNDI2MTgyMDM2MzQMDzczNDM1NjA1NTEwODIwNwwPNjA2NTA3MzE1MTE2NjE3DA8xMTgyMjA2MzYxNjEzODUMDzQ2NjY4MjE1NzIzNjg4MQwPNDUwNTc3MzI0Nzc4NzQ3DA80NjE1MzAwNTIxMDAzMjUMDzM1MTc4NjY1MzQ2NTYyOAwPNjIwMDE0NDM4NzMzNTM0DA8yODQ1MjA2NTE4NjM3MjAMDzUwODA1NTQwMzM3MDEzMgwPMzIzMjI2NzM3NzY4MTY1DA8wMTQyNDcyMTM2NDA0ODEMDzI0MDYxNzgzMDc4MjU3NQwPNDc2Mzc2NTY4NTQ4MDcwDA8yMzY4MzI4ODMwMTYzMDcMDzIzODYzODI3NjIzNzA2OAwPNTA3NzYxNDc1NDQ4MzUwDA83MjgxMDAwMzAzNzY3NzgMDzU2NjMxNDU3MDU1NTA2MAwPODY4NzExNjIzMTc0MzMwDA84MTQxMDgxNzU2NTI3MjMMDzIyMTc0MjQzMjY1NzM2MQwPNjA3NjgxMzYxNTgxMDU1DA83MzMwMDE0MDE2NzQ4MzgMDzY0MDQwMDUwMzA2MjI1NwwPMTI3NDI0MjQ0NTc4MzMwDA8xMDcwNjM1MTc3NzIwMjUMDzQ1MDUyODE3MzU1Mzg4NwwPNzE1NTExNDYyMDE2NzczDA8zNjQ4NzcxMzAzODExMjgMDzEzNDAwMTQ3MDI0MTE2MAwPODAzNjQ2NTE1NTIzMTUwDA8wODcxNDI3ODc1MTA3NjAMDzM0MjI3ODcxMjM3MjEwNgwPMzc0MDA3ODMwNjcxNzU2DA83NDY1MzE1MDAzMDU4NjcMDzEyNjM2MjQ4MzUzMzA1OAwPMjMzMjIwMDI3MTE1NTE1DA80MTQzNjMwMzc3NzA1NjYMDzM1NTE1MjEyNDAwMDg2MgwPODQwNzczNDU1Nzg1MTgwDA80NTc2NDQyMDExMjIzNDYMDzEzMzg3ODMyMjgyODU4MQwPNzM0NDQ3NTMyNTAzNTIwDA8zMTAwNDQyODYyNzczMTEMDzI4MTY3MDY2MTIyMzE0OAwPNTAyMDI2ODE1NzE4NDI3DA8wMzA3Njg1ODE1ODI2NDEMDzI4MjQ4MDYxNDU1NzMxMwwPNDU3Njc0NTU0MzI0NDA1DA84MTc0MTc2ODI4NTcwODEMDzMwNDE0ODI1MjEyMDY2NQwPNTEzMzExNDMzNzA1Njc2DA83NzUzNDI0Njg0MTI3ODEMDzM0NzgyNTczODc3NzA0OAwPNzIzODQ3NDYzMDQwNTI4DA8zNTI0MzA3MDc2MDYxNTIMDzc3ODgzNDU4MTI0NzQxMQwPMzQwNjIyMjMxMDg1MjM4DA83MzQyODIwMzU1NjA4MjEMDzgxMzgxMjY2NTI4NzQwMQwPMjI4MDI4NTExODUwMzI1DA8yNzgwNzE0ODE4MDIzODAMDzM4ODg0NTU0NTcwMzIzMgwPMDgwMDE0MzUxNDM1NTEzDA8wNzQzODUxNjcwNTUwMDcMDzQ2MzQxODM0MTUyNzAwMgwPODAzMDcyMTM2NDI0ODg3DA80NjAxMjMwNjgzNTIyMTcMDzMxNzAwNjU1MDE0Njg1MwwPMTcwMzIyODAxMTY2NTgwDA83MTM2NDU4MjI2Mjg4ODMMDzA3NTA0ODc2NzgyNjg3OAwPMDQ2MjA2ODYyNDY4NTgzDA8wMjc3ODM2MjgzMzgyNDYMDzIzMTY3MjA0NzAzNjc1NQwPMTUzMzIxMTQ1MzAwODQwDA83MTIyNTMyODQyNTExNTMMDzYzMDMyNjcyMjU3MzQzNwwPNzY0MTIwMjEyNTc2NzUwDA82MzUyMjczNzYxMTU2ODYMDzI3NDc2NDYzMzc3MTcyMAwPMzM0ODIzMjM0NTY2MjE4DA8yODYwNTg1NDAyNzM4NjQMDzA3NTg2MDMxODE3ODIyNgwPMTE3MzY3MzIzNTg0NjgwDA80MjI2ODg0MDc2NTE0MjQMDzQyODgxNjA2MjE0MzI0NQwPNjEyMDY3NTU1NzUxMjMzDA8yMTcyODM3MDg4NDY4NDYMDzc4MzgwMDI2NzcyMzE0MwwPNTc3NzY1MTI2MDI3ODU2DA8wODAwMDM3ODIzMjA3MDcMDzM3MzM3NTA1MzY1MDQzMAwPMzg1MjI0MDY0MDU3MzUzDA84ODQ4MjMxMzg0MDA4NzAMDzA3NzQ0NjYwNDEwMjMwNgwPNzM4MjgwMjM1NzYxNjg4DA83NzM2ODAxODU1NjIzMzMMDzU3MDY1MjYwMDQyNTMzMQwPMjQyNjQxNTcwMjg3MTMwDA8wNTc0NjczNDc3NDc1NjUMDzczODIzNjU3MzgwNDU0MAwPMDU1MzIxMzE3ODgzNDgzDA8zNTEzMjc1MDMwMzQwNDYMDzA2MjMxNTQ4NjY3NzI1NwwPMDc0MDEwNDMwMTI2MTY0DA83MDQ4MDE1NDI1ODI1NDQMDzE2Mjc3MjQyNTg2MTgzOAwPNTY4ODgyNzI1NzY3MTcxDA8wNzgyNTQ1NDE2NDM2NDYMDzY3MzE3NzI3ODM4MTgyNwwPNzEwNzU0Mzg0Mzg3MDg1DA8yMzEyNjg1NjA0NzIzNTYMDzIzMDYyNjgzODQxNTg2OAwPODcxMjIyMzI4MDY4NTQwDA80NTg3ODUxMTIyMzY4MjAMDzQxMjQyMzYyNTE1MDYyMAwPMjUwODUzNzExMjAzNDQ3DA82MDExNTcwMzg3NzUzMjcMDzM2NTQ2NDM3MjE2Nzg4NAwPMTU2MjAyMDgyMjQyMTQzDA84MjYwMDQwMzc3NTcyODAMDzIxNTQ1MDIzMjA4NjE1NAwPNTY3MDE4NTI3MDc2NjI1DA8yNDUyMjc0NjUxNjYzMDQMDzc4ODI4MTAyMDQ0MDQ1MQwPNDc2ODQ3MDI4ODg0MTYwDA83NzE0NDY1MjY1NTA3MzUMDzc1NDIyMzg1NTYzNjAxNwwPMTQ0NjE1NTA4MzQwMjA4DA83MjcxNjUwODMwNzgwMDUMDzEyNjQ1MzIyMjMwNjY3NwwPMjU3NTExNzY3ODQwMjgwDA8yNTg4MTA3MzYzNTAwNjAMDzE1Mjg1MjM0ODcxNjU0MgwPMzE0NDE1NzcyODc1NzA0DA83NjE3NzU3MDUwNjg4MzgMDzA0MzU2NzE4NjI0ODI4OAwPMDMzNTc0MjI3NzE3Mzc0DA81MDIyMDY4NjM1NTY0MzcMDzgxODM3ODMzNzE2NDQzMwwPMzExNDI4ODQyNTQxNDEwDA83ODYxNzQyNTE0MDc1NDMMDzM1NDg2ODQxNTAwNzQyNAwPNzg4Njg0Njc4Nzc4NTc0DA8wODc3MjAyMDUyMjA2NzQMDzIzNzQyMTcxODA2NTU2NAwPNjQzNjIwNzU1Mjc0MzM1DA81MTg0MDMyMDY0NzIxNzgMDzA1NzIzMzQ3MjUwNDQyNQwPNTgxMzI2NDY1MjY3NjYxDA8yNzc3ODM1NzM1MDc3NTUMDzg4NTAwMjA0ODc3MDAxMAwPNDczNzIzNjcxMjgzMzE3DA8yMTQzMTgxMjcwODE4MTAMDzA4NDU2ODg2NTAwMjcxMAwPNDc2NjE1MTg4NjAzNjMxDA83MDcwMDcxNzQ1ODM3MTAMDzYxMTUyNjcwMTEzNzEwMwwPMjEyMTczNzM1MDI3ODA2DA8wODgyMzgzMzEzMjA1NDUMDzU1NjEzODEyMjYyNjU4NgwPNTU4NDQyNzQ1ODI4NDI4DA8wNDQwMDIxNDUzMTAwNDMMDzU4MjQ1NzM0Mzc3MTY0NgwPMDg3NTM3NTY4NTMyNTQ4DA81MDI0NjU3NjA4ODg0NDcMDzE1MTUwMzYyMjE2NjM4NwwPMzQ0NzQxMjI2NDU3MTIyDA8yODIzMDU3ODI0NjY2MzQMDzYyNDMwNjE1NTAxMTU2MAwPMzA2NTE2NDUyNjI3NzUyDA81NDMxODc4MTg0Mjc1NDgMDzQwMTE4NzA2NTgxMDcxMgwPODc4MTgzNjE3NDUyMDE3DA8xNTI0NzgzMjY3NjUyNTUMDzEwNDIzNjgyMDY3NzEyMgwPMjM2MDM4MDczNTU3ODU1DA84NjAwMDI2NTczODQ1MzcMDzcxMjQ2NjAzMzAxMzI0NgwPNjU4NDcyMzM0NzgyNDUyDA82Mzg3ODY0MjMzMzg1NDIMDzUyODA4NzA0NjYxNzQxNAwPMjM4NjMwMTM2NzY1ODczDA80NjM1NTc0MTM2Nzg1MjUMDzAxMTQzODU3NzQxMTUxMgwPODYwNzQwMTg0Mjg0MDc1DA8xNzQyNTgzMDEwMzU0MDMMDzc0NzYyNjI3NDg2MzA2MwwPMTcxMDY2NTMwNTg1NjEzDA8zMDYyNDU0MTcwMzUyNDUMDzQ2ODUwMTA2MjEwNzUxNwwPODQ3Mzc1NjUxNzcwNTMxDA8zMDM2NjM3MzY4MzAxNjYMDzc3MDQ2MjY0MTMwNzg4MAwPMDcxNTUxNTMxNDYzMzIwDA81NzAxNTgyMjMyODcwMzgMDzE4NzA4NDUyNTUyNjM4MAwPMjY2NTE1MzAxODgzNTc2DA8yNDc2ODY4NjcxMzYzNjEMDzcxODM2ODAyMTIzNjQwMAwPMDIyNzUzMjcwMDAyODg1DA82MDMxMTgxNjA2NzY2ODQMDzY1Nzg2Njc1NDU2NTM2OAwPMDgyMjE1MjQyMDcyMzEwDA8wMDYwMDM1NDQyMDA1MzcMDzMwNzU2NTUxMzEzNzYxMAwPNTY0MjIyMTA3MjI1MzE1DA82ODQyODIxODg0NTYzNzIMDzQ4NzY1MDYwMTQ4NDMwMAwPNTU4MDYyMjgwMzE4NzQ1DA82NDM0ODMzNjE0NjI0MzIMDzY4MTY4MDExODUwNzg2NAwPMjU3MDMwMjQxNTA0ODY4DA82ODg0MDQ2NDU0NDEyMjMMDzMyMjQ4ODIyMzI1MTA1NAwPMTQ1MzcxODMyMDUxMDQ0DA8yNjQ2MDYzMDMzNjAxMDEMDzg4NDgyMzQ0ODM0ODgwNAwPMTQxMzgzODEyNDU0NTIwDA8wNjA2MTU3NzUwNTM2MjUMDzc3NDQwNjAzMzQ1NjI0NgwPMTQ4MzM3MzE2MTQwNTA0DA81MDU0MzI3NDU3MzY1ODMMDzQwMjEzNzU1MTI0NzY2MgwPNzQwNjI1NDg4NDcwNjYxDA80NDIxMjc2MjQ4ODc2MTgMDzA4NDgxNDgxODMyMTg1MgwPMTg1MDg2MjEwNTY3ODE2DA8xMjUwMjQxMzUwNTcxNzEMDzQwMzg2ODQ2NzMyNjQ0NgwPMjY1MTgyNzQyNjM1ODU4DA80ODczODUxNDczNjA4NTcMDzIwMzU2MjQzMTQ3NzQ1NgwPMzA3NzA2NTg3MTY2ODU0DA80NzQ3NTI3MzE3MzEzNjUMDzQzNjQwNzgxNTgwNTI1OAwPNjYxNjI0MTQ2NDI4NDMxDA80MTI2MjE0NjU2MTMyNTgMDzQ1ODc1NTI2NDY1MDM3MAwPMjcxODczNDE3MTU0NTMwDA83NjM0NTMyMzE2NTA0MTMMDzU3ODYxMzM2MjM1NDI3NQwPMDcyMjc1MzUyNjcyMDU0DA83NzM0NjE1MTQ1NzQyMzQMDzI3MDQ4Njg2MjIyNzI3MAwPNjE3NTYxNDA2NzcyNjQ0DA83NDc3MDc3NjIyMzg1NjEMDzA3NDYwMzA4NzE0NzA0MgwPODU1Njg1NDA1MjQ0NTQ0DA80NTM0NzMyODM1NDU3NzgMDzQ4NTU2Mzc0NTIxNTI0MAwPODEyMDg4MTM2NTY3NDA3DA8xMTU2NzEyMDgzODcwNzUMDzgxMTI0MjE0ODczMDA1MAwPODIyNzU4MTEwNjYxMzUwDA8xNzcxNjU0NTIxNzIyMDEMDzczODM3MjIxMDYyNDc1NgwPMzUzNzY4NjE1NzY3NDM0DA84NTg4NzMwMzU0MTA4NTYMDzcxMDYwMTc1MzczNzMwNAwPMTU4ODAzMTA2NjU4MTIzDA84NTc3MDY4MzQwNzc3MjAMDzI2ODI2Nzc1NjQ2Mzg2NgwPODgxMzUyNjE0NzU4MDgwDA80ODc2MzQwNDE3NTg3NDgMDzQ2MzAxODU2MjQwNzEwNAwPNzg2NTA1ODQ3MzY0NDM2DA8wNzg4MTE3MzEwNTUwNTEMDzQwMjYxNjQyNDAzNzg3NQwPMjMzMDMxNTMzMDE3NDA2DA8xNzMxNTE4NjYzNzc2ODIMDzE1MTc0MzE1MzExNjc0NwwPNTIyNjE2NzM1MzMwMTMzDA82NTQ3MjAwODc2NjA1MTgMDzQ3NTgwMDM1MTIyNzMwNwwPNzExMjYxNTgwMjAxMjQzDA80ODYwODMwMjAyNjQ4NjAMDzE1NjIyMTAzNTIxMDc3NAwPNjEyNjMyNTgxMDQyMDY2DA84MDU2NjM3MzUwMTQ0MDMMDzc2MTQ1MzcwODU0MzI2NgwPMTI4NjE1NDg1NzI0NDIxDA81MjExNDY3NDU1Mzg2NTMMDzAwODM1MzAxNzE2NDgwNgwPNTgxNDQyMTIzMTAyODU0DA8zNjIxMTYxNTcxNjAyMTAMDzMwMzg3MzUxNTAzODc0NQwPNDU4NDU3NzQ2MjIxNjQ0DA81NTIyMjA0NDAxMDY1MzcMDzgxNDI3NDcwNTI4MDMzNAwPMDQ4NjA1NjI2NjU3MDg3DA82NjMwNTUyNzc1MTg0NDIMDzg3NTAxNDA3MTc2NzYwMwwPMzI3ODUyMTgyNzc0NTQ1DA8wNDQ4NzU0MjM2NTE4MTcMDzI4MTExNTcxNDMwNjAzNQwPNDgxNTY1MzU3NTE3NjgwDA8wMTEyMzE3NDI3NTQzMDgMDzIyMTg0MjY4MTUzNTEwMAwPMDYyNzQyMDMzODgwNzUzDA81ODUxMzAzMDUwNzEwNjcMDzM1MTI4Nzg1MDA1NjcwNQwPMjcyODEwODQ1MzI4MDYyDA8zNTg1MzQ4MTAzMzgyMjMMDzQzMDM1NjY2MjAyMzIxNAwPMzY1NjM1NDY4ODM1NjM2DA81MDA0MzY3NjMwMzQ2NTQMDzAyMTE0MDg0MDQwMDYwOAwPMzEzMTMzNjg0ODM1NDgyDA81MTA0NjI3MTgyMjU3NzQMDzc3NTE2MjMzMTY4MTIwNwwPNjQ2MTU0NDQzNzU1ODM4DA8wODUzNzAzMTAzODI0NTUMDzU3Nzc2ODM1NDc2ODg3NwwPMjQ4ODQyNzIzNDU2Mjc0DA8yMDU4NjY2NjE4ODA2MjYMDzE3NTI4ODQxMzU3MjE2MAwPNTA0MzQyMTU1NjIyMzcxDA81ODY2MDE4NzY4MjY1NjYMDzEzMjUxODYyNTgxMTUxMwwPNDIzMDc4NDIzNjcyMzUyDA8xMTQ0NzczMTI1ODY2NDEMDzU2NDU4NTM0MTgyNDgyOAwPMjU0MTE4NzY1NjQzNjI0DA81NjA1MjAxNDUwNTUwNzAMDzg4ODQyODI0NTcwODIwNgwPNDM1NzY2MTE0MTc3NTQxDA8zNjY4MDQwODQ3Njc0MzMMDzE2NTgzODY2NTU2NDU0OAwPNzA1NjgzMTg4NzU1MTczDA84Njc3MzEwODMwNDAwMDIMDzA0MTg2MTg2MTQ3NDA4MwwPODIxODQ1NDAzNDA3MTUzDA81MzExNTQ4NTcxNDMzNjEMDzA0MTgwMTUwNDQ1MTAxNgwPMDAzNDUyNDc2MDYyNzc2DA82ODE1MjMwMTAwODYwODYMDzMyNTAzMTUyNDM1NTY1MgwPMTczMTI2NDAyODQ3MzAzDA8yMDMzNzc2MTU0ODM0NjEMDzUzMDIzODA3MDQ3NTQwNwwPNjYwNDUxODIwNTMwNDE4DA83Mzc0NzQ1NTQ2NjQyNzgMDzAyNjAzNjc2ODgzMzMzMgwPNjA1NDIxNjg2MDYzODAxDA8wMTYwNzI3MjUyNTIyNDQMDzg3MDYzMDQ3MjMwNTQzNAwPMDMyODAwMzQ3MzE0MTgzDA8wNDg0NzY3Njc2NDY4MTIMDzM1MDMxMjEwMDE2MDA0NgwPMTU3MzM0NTg3NTQzNjUwDA8zMjExMTExNjQxODQ0MDUMDzI3NTU3MDA1MzI1MjA2NAwPMjU3NjMwMTAyNDg1NjE3DA82NDU3NDYzNTgxMDYwNzAMDzM3NzgzMjIxMjM3NjQ2MAwPMjE2MTc2MTE0MTUyNjM1DA80NjgyNDMwNTQ4NTM4MTMMDzc4MTM2MDEzNTI1NTU2NQwPODcwNDEzMTcwMjg1NzU2DA83MTE3NDQ0NDE2MzQwNzEMDzEzNjE0MDAwNDU2MDIxNgwPNDA4MjQ4MjEyNDg4MTUwDA8yMjY1MDU3NTE1MjgyODgMDzY0NzU4MzcwNTAzMjYyNwwPNjUzMjQ1NDMwMzg4MDUzDA8wMTQ4NjUwMDMwNDUxMjAMDzIwNDA2MDA0MjY0NDAzNAwPMDM0MjM4MTUzMTg4MjQ0DA8yMjg1MjQyNjcyMTU4NjAMDzQ0MzE4MDgwNDI2ODUxMAwPMzM0ODA1NzUxMzg4MjU3DA81ODAyNDA1NzY2MDY4ODcMDzg0MzAwMDQ1ODY4NTA1MAwPNTY4Nzc4NjY3ODExMjcyDA8zMTUxMTcxNTIxMzQ2NjEMDzg0NTQ3NDMxMjQyMTYxNwwPNDYxMDIzNjQyMDgzODMyDA8yMTQ3MDM2MTg0NjM2NTIMDzM0NTQyNTIyMDU1MjQ3NwwPODMwMDUzODczMTA2NjcyDA8wMDUyMjEwMjc4NTE2NDgMDzE1MjY0Nzc1MTE1MTM2NAwPNzI2NDQxNjM2MDYwNzMzDA82ODU3MTgzMTIwNTA1MzEMDzI2NDM1MDIzODI0NjI4MAwPNTA0NDU0MzYwMTMyNDUyDA84Mzg0Mzc1NDI1NzA2MjQMDzQyNzQ2MDQ2NTE1NDAwMwwPMDQzODExMjEzNTM3NzYxDA84MTE4NDc3MzA4NjE0NjgMDzUxNTI1Mzc0ODEzMTQwOAwPMDQ1NDU0MDg4NDYyMTUwDA82MzE2Nzc4MTYwNTE2MjUMDzU4MzI4MjcwMTEyMTY0NAwPMzgzNTg0NzQ3NTM0MDE2DA8xMDIwNDY0MjUwMjU0MjQMDzU3MDA2NjIxNDQ4NTE1NwwPNDU4ODY4MTg1NjI4NDA4DA81ODUyNTg4NjYzNDY3NzgMDzUyNzQwNTYxODY2NDc0MAwPMjc0MjY4MTczODA3MTE3DA83NzY2MzcwNDY2NDA3NTQMDzUzNTEzMzMzMTM2NDA1MwwPMTA1MDYzMDAxMjIxNjUwDA81ODMzMTY2MjA2NDc3NzcMDzQzMzM3NDYzMDMyMTU2NAwPNDcxMjA0MzgzODAxODg3DA81NjUwNTIxMjU1MzUxMDYMDzM2NTMxODEzNzA2NzMwNgwPMjQzMjg4NzgzMjY3NzI3DA8zNzQxMDg2MjYxMDAxMjQMDzc4MjA4NDIyNzUwMDM3MQwPMzU0NzU3MjYzNjAzMzg1DA83NDM3MTU2MzAwODAwODYMDzM4MzIzNzc3NzMzMTE3NwwPMzU2MjIyMzUwMDc2MTE3DA84MDIwMzQxNjcwMjU1NzcMDzU1ODE1NTI1MjM0NDQzMwwPODE4ODcxMTQ0MDQxNDY3DA8yODQzNDI1NjAyMjg1NzcMDzA0NTQyMDcxNjEzODAwMAwPNzQ4MzgxMDQyMzIxMzgxDA8zNzE1MjA4NjI3MzMyODgMDzMxMjgzMjQwNjYxMzA1NQwPODA1ODgzMDUzNDIzMzUzDA8zODEzNzQ0NzI1MDQ4MjYMDzU2Mzc0ODE0NDI3MjU0NgwPNjE2MTA3Nzg1MTcwMjg1DA8wODQ4NjY2MzI1MTEyODAMDzMxNjEyNzE4NjUxNzgzMwwPMTAwMjQ2MTE1MDU0NzgzDA84NzQ3MTgwNzEzMzc0NDcMDzA1MzQ3NzgwMTEyNDEzNQwPNzcwNjM0MjQ1MzM4MTM0DA82MTQ2NzUyMjY1MzcwNDYMDzU1NjA4MTM4MDMzMTQ0NgwPNTgyMzI1NzU1MjU0MjM2DA8zMzAyMTI1NDcyNjQ0MTMMDzE1NDg3MDE0ODcwNzMyMQwPNTI3Njc3ODIyNTUxNjE1DA82ODY0MDgzNDE2MTQzNTAMDzQyNTAyNzM4NjAxMTc4OAwPMDg0MDExNDg4NzQ4ODY1DA81NTgxMjUyNjg0MzYwNzYMDzE0NzEyODE3NjczNzUwNgwPMzEwNzAzMjI2MTQwODE3DA8yNjA2NjAwODQ0NzQ2MjYMDzEyMjMxNjgzNjUwODE4MQwPNTAzMjA2ODI0MTc1NDY1DA8xMDY3MzIzNDE1NTg0ODcMDzgyMzI4NDcxMjIwMjg0NgwPNTIwMjUxMTIyMTU0MDM3DA80NzE2NTIyMTMxMTgyMTEMDzYwNzAzMjU4MzAxNTM4NQwPNzM4NjU2NjUwMzYyNTQwDA81NjQyNzUwMTg0MTI4MzUMDzU4MDIwNDM4NDg2NzM1MQwPMzYxNjA2NTgxNDU4NzczDA84MTAwNTg0NjA0MDY3MzgMDzA1ODA0MDAyMzMxMjE0MgwPNjg0NDY0MzQzNzg0MjQ3DA8xNjU1NTgxNjIzODQwNzEMDzU0ODA1MDgzMTY0NDczNQwPODU1NjY2NTI4ODM2NTUyDA82NjE0NjcyNjMwNDYwNDgMDzYwMzUzNTMxODEyNjAxOAwPMDE0MjM2MjU1MDM2NzEzDA84NDQ1MjQyNzYzNDc1MTQMDzY3MDc4MzY3MjYyMzYxMAwPMjY4MjU1NjgzMDcyNDc3DA8xNzUyMTY1MzgyODg4MDEMDzg2NjQxMTI0MDc1MzM4MgwPNDg1Mzc4MDgyNTQ4NTY3DA84ODU3Nzc2NTcxNzc1MzAMDzgxNzQyMjcwMjQwNDYyMwwPMzI2MzcxMzYwODcxNDAwDA8yNDcyNDg1MDA0MDY4MzcMDzA2MDE1NzIwNTQwMTIzMgwPNjgxNDMwNDEyMTA4MDE3DA82ODQwNzM0Mzg4MjgxNTgMDzU0MTI4MzQ3ODQyMTE4OAwPNjM2NDI1ODYyNTgxODg0DA84NzM4NjQ4MTc2MDA3NDcMDzM2MTg4MTcyNjQwMTUwNAwPMTM4NTY3ODI4ODAwNjEzDA8wNDE2NDI1MDM2MjUzNzUMDzUxODEzMTQwODg3MDgxMgwPMjcxNTM4ODc2NTEzNzM4DA8xODY4Mjc2MzU0MTEyODEMDzUyMzU4MjQ0ODU4MDUwOAwPMzg1MTg1MTg2ODE1NTMxDA84MjU4MzUzMTc2NDMwNDIMDzU4MzAzNTY0NTgwMzg2NwwPODQ1NTMxMzQ3MTg4ODMxDA84MDUyNzYyODA0MzI0ODIMDzQyMzcwMjAxMDQ4NjUyOAwPMjEwODIwMDA1ODU4MTQ4DA83MzQ3MTA3MjMzNTAwNTYMDzc1NjA2NDYyNTA3NDQzNwwPMjcwMjY1MDMyMTQzMDcyDA8wNjY2NDcxNTQ4MjA2NzQMDzU2NTAxNTE3MzQ3NTMxNQwPNjQ1MjQ3NDEyNTM3NTUwDA81MDY3MjAwODY2NTY4MjgMDzc2MTEwNTQ3NTUxMDYyMgwPNjY4NjMyODg2NzMxNTA4DA82NDE2NzI1ODQxNDUzNjAMDzY2NjcxMjIxODQwNzQ2NQwPNTg0MTIyMTM3MDAxMzIxDA84NDgyMzc1NTQzODgwMjcMDzc1NTg4NzI3MzYxMzI4NgwPMjY1MjI0NDAyNDM2ODExDA83MzMyNjMwMzg3NzAxMzUMDzE4Mjc1MDExMDE0Njc3MwwPNTgwNTUzMzA2MDgxMjA1DA80NzQ2MzMwNTIyMzUzNTYMDzg4NTgxMDYyMjIxNjQzMQwPMjQ1Mzc4ODQ2MzE0MjgwDA8zMzEwODIzNjg2MTM3MDYMDzA4MzQzMTA0NjYyNzE0OAwPMTc3NzgwNTQ2MjQyNzI1DA84NTIyNjYyMDU3MjI0NzYMDzM2NTgxMjg3ODMyMzQ1MQwPNzAzNDA3MTU1MzEzMDcyDA84NzgyODIxMjQwMTAwNjMMDzI1MjU4ODA0Mjc2NDYwNQwPMDIzODAyNjg2NzUyNjI1DA82NDQyMDI4MDUxMjA2ODEMDzE1NzAxMjU1ODU4NjU2MQwPMDM4ODAzNDUyNTU1MTI4DA82Mzc1MjMzNTUxNjUwMTAMDzQ2MjQxNjg3NTI2MjI3MQwPMDEzNjUzODAzODc0MjI0DA8wMTUyNzE0NDI0MzQ4MDcMDzI3NTc4NjcxNjc3MzYwMgwPODA2NDM0MTQ0MzEzMDczDA81NjMzMDEzNTY3NTIwMjMMDzcyMTc3NDI4NzAwMjIzNgwPMTg4ODQzNjEwMzQ2MDEyDA8zNTMyMTE1ODYxNTA2MDMMDzQxMDQyMDA0MzcxNTg2NAwPNTAzODY0NDIxMTg4MDEzDA83NTUwNDI3ODE4MTA2MTQMDzAxODQ4NzI0NjYyMzQwMgwPMDg2MDUxMzIwNDI4MTM1DA84ODcyMDc1NDU1NjA3NDMMDzg4NDQwNTIxMjExNzA2OAwPMDg2MjY4NDY0Mzg3NjA2DA8zODIwMzY2MzQ4NDEyNDYMDzI0NzI1MDExMTI2NTQ2NAwPNDA0ODQzNTIxNjg3NzAwDA8zNjg3MDEwNjcxNDM0ODMMDzgwODA3MjY0NDI2MTE4MwwPNTYzNTEzMDgwNTIzODI3DA82ODExMjczODg0NzY1NzUMDzY3MjI3MTcwMzQxNTcyMAwPMTA3NzcxNzAyMjU1NDY4DA8yMzc1MTQxNzY0MjMwMjYMDzQ4ODgxMzM2MjcyNjMwMgwPMzYwMDAyNTUyNzYwMzE4DA8yMTA0MzgxMDAwNzM0ODYMDzUzNjU2NDY2MDIyNTEwMwwPNDU3NjcxMjM0MDUwNjYxDA84Njg2NjY3Nzc3MDAyNjUMDzI2NzExNTEwMzQ0MjY4NgwPODc2MjYwMzUwNDExNzE2DA8wNjY2MjUxNTExNDMyMTcMDzIzNTI3MTMyMzM0MzUwOAwPMjg1MTgxNjI2NTU2NDAyDA82MDA0NzAwNzE2NzcxMzYMDzE3NDc3Njg0MDA1MTc3MgwPODY4ODczODUyNDI4NjgyDA81NjE2ODQ3ODYyNjczODYMDzMzNTI4MDA0NzMxNjg4MgwPMDM4Mzg3ODMzMzY1NjU4DA8wMzc1MDMxMjc3NTU3NzcMDzc4NzA2NTAwNzE1MDI0NAwPMzcyMjUxMzEyNzYwNjI3DA8wMTcxMjIxMTc0Mzc3MjIMDzM3ODMwMjA0NDU0MDc3NQwPNDgyNzY2NDYyNTYxNzE3DA8xMDY4MDY4MTE3MTg2NjgMDzEyODM3NzQ4NDA3MDE2MgwPMzE1ODUwNDYzMDY1MzIxDA84MjAxNTEwMzQxNjcyNTcMDzY3NzQ0NTQ1NjAzNTcxNAwPNTY0MTQwMjY2Mzc4NzM2DA84ODc3NTc4MzU1NTMxMTQMDzQzMTUyNTcxODI0MjYxNAwPMTAxNTIyNjEzMTIwNTg4DA83MzUyNTczODcyMzIwMzQMDzAyMzQ4NTg2MDQyNzE2OAwPMjUyNDUwNDgzNzU4NjU0DA83MzQ4MjE4MTQzNzcwNjUMDzg4MDgzMTA3ODU3Mjg1MwwPNzUyMDE1MDgxMTQxNTcwDA8zNzc4ODYxMTU4NzMzNTcMDzEwNTgzODcxNDI4NjY0MQwPMjg3NzEzMzE4ODE4NzEyDA8wMzUwODg3NDU4MDI1MTAMDzc2NTU4NTMxMzM0MzI4MAwPNzg1NzAzNjExMjczNjgzDA80MjQ2ODcxMDc0NTM4NTcMDzQ3MTc2MTQ3NzUyMjQwOAwPMTIxODY4NzM3NzY2MTAxDA8zNzg2NzAwMTY1MTQ2NjQMDzg4MDE1MDY2ODIyNzA2MwwPMzQ3NjM2MzI1NzI2MDYxDA83NzUzMTY0ODQ0MzU3ODAMDzU3MjMxODI1ODY2NTcyMAwPNzQzODI2MzIxODg0NjE1DA84ODU4MjQ1NjQ0ODczNDYMDzc1NjA0NjYwODU3NDE2OAwPMjIzNTI2Nzg0MDI0ODM2DA82NjQzMDA3NzQxODA1ODYMDzYwNDAxMDcyNTUwNDQ2NQwPNzY0MDE4Nzg3NjAyNTUxDA8xNDI1MzMyNTQyODczMjAMDzEzNDU3ODYxMTgzODU0MAwPNzM3NDU1MDcxMzEwMDU1DA8zMDMwMDg4MTI0MjU3MzMMDzc0ODU3MzU3MDIwNjcwMAwPNDIxNTAxMjA2MjU0MTE2DA80ODMzNjg0Njc1NDgwNjQMDzUyMTIyMzU4ODYwNzAzMgwPNTUyNjg3NTAxODI2MTY1DA80MTM2MjQwMjUwNzYyNDUMDzU2NjI3NzYwNjMwNzUzMgwPNzgwNTc4MzMzMjgwODA2DA84ODIxNjMwODc1MzIwMjUMDzI1ODI0NTc4NjU3NTcyNQwPNjMwNjIxNzEzMzQxNDU4DA83MjQxMjA1NTU2MzY2ODgMDzUwNzE4MDUwODU1NzA1NwwPNDQzMTY1MTc4ODA2ODMyDA84NDYzNTE2NTc1MDgzMTgMDzM0MDEyNTIwMDQ4ODY2NgwPNzg4MjcwODE2MDEwNjQ4DA82ODEyMjczMDQ2MzE2NTcMDzU0ODYxMDEzODMxNDgyMAwPNDI4NjA0Mzg2MTc2MTIyDA8wNDU2ODQ2MzU1NzcyNTgMDzU3MTEzNTMyMjg4NzIzNAwPNTQ2MzMzMjYzMzU3ODc4DA8zMDgyNzY2NTY0NzM0MDUMDzU0ODQ3MTMzNTM2NTYxOAwPNjY3NjM0MjIyMDE0MTQzDA8yNTMwNTcwMDI2ODY2MDcMDzc0NDUxNDgzNDc3NTA0NAwPNzMxODY2MzA0MDgxNTc1DA82MjU3NjcxNDgwNTc2MjcMDzY4NjQ2NzI4NDI4Mjc3MwwPNDAzMDUwMDM4NTQwMjAzDA8xNTQ3NDYzNzIyNzY1ODcMDzEzMTY1NTc3Nzg2MTE0NgwPMzY4Njc2MDMwMjQyMDMyDA8zMDY2MjM4MzYzNDY1MzMMDzUzNDgxMDc2NzI4MjI2NQwPNjYwMDEyNDA0MjI1NDU0DA8zMTg0MDc1ODYwNzgwMzYMDzMzMjQzMzc1MDg0NDUxMgwPNTA1MjMyMTE0NjgyMDA0DA8xMjYyNjcyNDM2NzQ0NTIMDzQ3NDQzNDYyNjAwMDA4NgwPNTY1MzI1NjMzNjcyNTQyDA8zMjc3MjMwNjUxNDcyMTgMDzcxNjQ2NzEzMDg2Mzg1MwwPMDQ1MDI3ODgzMzQ0NDYwDA8wNDQ3Mjg1MTA0MDE2MzUMDzU4ODgxNDYwNDg1Mjc1MwwPNDgzMzY0ODIzMzYyNjUwDA82NDMzMTUzMTcwMDgxNjQMDzAzNzQwNjEzNjM3Njc1MwwPODYzMjg2MjQ0MzgwMzQzDA80NjMyNzUzODMxNDMwMzcMDzM2NTQ3MzU2MDc0NjMyMgwPODc4MzM2NjY3NzI3NTQ3DA8zMDU2NDYzMzcwNjczNzEMDzM3MDA4MzE1MjY4NjE1NwwPODg4NTM1NzY3ODg3MzAwDA8zMzYwNzUyMTIxMjI3NjIMDzUwMDgzNTM0MTExMTQwNAwPMDQzNjg4NDg4Njc3MTE3DA82NDY0MzIyODM2MTAyNzQMDzE3MTIyMjA3ODIyNDgwMAwPMjUzMDEyMjg0NTg2MjUyDA80MzYyODIxMTg0NzU3MDQMDzgzMDQxNDU4NDM2MjQzMAwPNzY2ODIzNjYzMTI1MDI4DA8xMjAzODEyNjI3ODE3MTEMDzAxNjM1Nzg2NTg3MTQ3MQwPMDMyNzM3Nzg2MjgyMzY4DA8wMjYzMzAwMzcxNDUzMjEMDzgwODcyMzU1ODQ0MTgxMgwPNDI4MjMzMzI1MjQ1MDgyDA8xODgwMzAyMTczODA4MjcMDzI1MjYwMzI0NzcxNjg0MgwPMDE4MzM1MjA4NDAyMDczDA8zODgzNDQxMzMwNjU4ODgMDzAxODUxMjAwMTE1MTY2MQwPMDgzMjgzMTM2NjY1NjcyDA84NjMzODU3ODU0MTIwODgMDzgxNzg0MjQ2MjUxNTA3MQwPNTM2ODA1ODIyNzgxODU1DA8xNDA0NjYzNzY3MzQyMjQMDzMxNDUxMjgwODQzNjEzNgwPNzUzNjY3NTAxMjgzNTE1DA8zMjQ4MzM1MTMyMzEyMDcMDzc0NTMwMTY4NjI1MTg2NwwPMjE2NjMwNzM3NjEzNjM2DA81NzgxODUxNjY2Nzg1NzUMDzc0MjI0MDQ1NjI2MzU3NQwPODA2NDUyMDQyMzI1NDg2DA81NTAwMTExMDgyNzg4MjMMDzQxNTIwNzM3MjM4NDc1NAwPNjIwNTA4NTUxNTMyNDEwDA80NTM4NTYwNzA1NjgyNDAMDzE1NzY1MDIwNDM2NjUyOAwPMjcwNDUyNjc3Mjc1MDc1DA8wMTgyNzE2NTIwMDU1MjMMDzU2Nzg0NjA0NDI0MDEyNQwPNDYwNTgxMDUwNDg1MjM3DA80NjM1NTQwNzgxNjMxMzYMDzQ3ODAwMTAyNTAxMzU4NAwPNDc3NzUwMzEyMDg4NzYwDA84MDU1MzQwMTYwNzUyMDEMDzg1Mjg2MTcxNjQyNzExOAwPNzU2NjA3MzEyMzcwNTg2DA81NTQ3MTQ4NTAwNTQ2NTAMDzEzMzI2ODQ2MzMwMDMwNQwPMjYyNTU0MTYyNTU3NTMyDA80Mjg3NjI4NTc2NDE0MDMMDzg1MzQ1MzEyMTgzNDY0MAwPNDAzMTgyMjU4MDU0NDQ2DA84MzYzODAwNTczODY4MjgMDzIzNDAwODQxMzIzMDIzMQwPNDg4MzE1NzA2MDQ0ODAyDA82MzY4MjI3ODQzMTczNjUMDzg2ODg1MTU3NTA1Njg3NgwPNjY0NDAzMzA4NDIxNzMwDA8zMzI4MTQyNjA0NDExNTEMDzYyNTY3NjcyMjI4MjM1NwwPNTc1NzYwNDAyNjE2NzQyDA8xODQ1NTg4MzE4MzI4MzYMDzg3MDIxMDMxNjM0MjczMwwPNjg1NzQyMDg1MjYwNDExDA83NTY4ODU3NjUzMjczMzYMDzA0NjU3MzQ4MzU2MzYwOAwPNjE3MDQyMTU1ODEwMDgyDA84NTU4NDU4NzIxMjExNTgMDzc1MzYzNzI4MDgyNDIyNwwPNTM3MzAzNzU0MzYzMTI3DA81MzYyNjU4NjQ0MzcwMjIMDzc3MjcxODU4ODcxNDI0MwwPMDUwNjY2MDAwNTgyMzE3DA81MjE1NDY3MDYwMzYzMTAMDzczODQ1ODcyNzU1NTY1MgwPMTE1NTUwNzYxNjcwNzQ4DA82NzcwMDcyNjgwMTQzNTEMDzI4ODU3NTgzNTA1NzI1NwwPMzcxNjIzMjQyMjgwNzQ3DA8zNTU2Njg2NDAwMzgwNzQMDzQxNzExMzQ4ODQ0MDc1NAwPNzY2MzAwMjU4MTI2NzcyDA8xODU1ODE0NDUwMTM2NzMMDzg1ODIzMDY1NjYxNzY2NQwPMzIyNjQ2NzA3Njc3NjU3DA83ODg4ODU2MTAxODczNzIMDzc2MDgyNDcyMDI4NzcxNwwPNTc4Mjc0MTMzNDM3MTgwDA8yNDEyMzMzNDE4NzEyNTIMDzcyMjg3MjQ4MzY4MjA1MwwPNTQ0MDQyNDIzMzU2NDQ3DA83MjI2MDg3NTUwNjQ4MTEMDzM1NTE2NDU4NTcxMzcyNQwPNTE1NDI4NTQwNTQ0NzU0DA8yODUyNzU4NTE3MDc4NDcMDzY0Njc0NjUwMTEwNzQ2MAwPMDA3MDczMTQ1NjU1NTgwDA8wNTIzMTc1ODA0MDQ2NjQMDzUwNTAwMTY3NTg2MjU2MAwPMzEwMzQ4ODA0NDQxNzM1DA8wNzE0NzI1NzA4MTYyNTAMDzYzMjA4Mjg0NDY4MzE3NQwPNjUxNjY2MTgzNDY3MDI4DA8zNDgxMjA0ODI1NzM2NDgMDzE3MjUwODIxMDUxMTg2NgwPMzg2MTI2NTYxMzM3NzMzDA81NjAxMzU2MDYwMjE2ODcMDzI4MjY2NzgzNDUwMTI1MgwPMDIzMjY4NzIxODYxNDEwDA8xNDE4NjgyODg1MTQyNjgMDzcwNjMyMDQ4MDYyNTQ2NQwPNTA0NDMwNzE1MTA4NzQxDA8xNTQ4MTAwMjU4NDMzNTAMDzgxMTY4NjYyMTEwNTY0NwwPODY4NDM0MzU4MDY0MTA2DA82MzE2ODQ2MjMzMDA3NjgMDzgxODc0MzgxMDc2NjY3OAwPMTE0MzQyNDI0NTYwMzE2DA8wODU0MDQ3NjM4NTc4NjEMDzM1MTAyMjcyMjE4NzI0NgwPNzc2Njc4MzE3NDMyNDAwDA82MzIwNDE4Mjc2NzEyMzEMDzc2NDA3MjEzODMxNjEyMAwPNjMxNTUxODMzMTc2NjA2DA8yMzIwNDA4NzQ1NDc1MzcMDzI2NTA2MjExMjEyNjEyOAwPMjc0NDM1MDgyNzIzODYyDA80MDI0NjA0MjAwMzIyNzgMDzgwODg0MTI0ODExODYwMwwPMzAxMDM0NDE0NjUwNjcxDA8wNTc4NTM0ODc1NTg2MDIMDzc2MDYxNTMxNjU4MzAxNgwPNzgxMTgyNDIxNzUwNTA4DA8yMTEzNzY3MDczNDExNjYMDzc0MzM0NzQxNDgxNzI4NwwPMjg4NjE3NTM4MDQ0MjY2DA80MDMwODExMjE0MzE2MDEMDzc3NDU1MDgxNDQwMjYzNwwPNjc2NDQ2NDEyMjUzMzUxDA80NjE4ODQwNDgyMjI0MTMMDzQ2ODcwNDc1MDEyMzM1MwwPNTA4MzM0Njc3NjI1ODYyDA82NTY2MzEzNjQzMDE3MzIMDzcxMzI2NTgyNTUyMDIwMgwPNjIzMTQ2ODM0Mjg3NzI0DA8zODIwNTg3Mjc2Njg4NjcMDzA3MjcwNjYwNzc1MTUyMAwPNDg1NzY3NDI2NDU0MDE4DA84NTI0MDAzNTE2NDY1MjIMDzIyODEwNTgzMDY0MTM3NgwPMDAzNDczMTIzNTYwODcyDA8yMDA1ODA0Njg1NzY0NDIMDzc2MDg3MTc2NzUzNDUyNAwPNzg2MDI4Mzg2NTAyNDE4DA8xMzY4NTAwMTg1NDA4MzMMDzIyMzY1MzA3Nzg0MjQ1OAwPMTI4NzM4MDg3MjcxMzQyDA8xMjA4Mzc2MjQwMjQ0MzIMDzA3NTE3NTgxMzA2MDc0NAwPNjM4NTY0MTAyNTEyMzMzDA8wMjE4MjcyMzA3NDQ3MzUMDzAzMjAyNTQzMjc1ODUwMgwPMDY3Nzc1MTc1MDAzMjMwDA8wNzc1NDc0ODgwMTg0NzIMDzc0NjcwNjczNTAwMzMyMQwPODQ4MzgwODA0MjAxNDExDA8zMTQ4NTYwNTI0MzQ4NjAMDzI4ODAzNDUyNDI4MjQ0NQwPMDIyNTI4NTExNzg2NDQwDA82MDQwNjgxMDg1NzA1MjMMDzY1NTYyMjY3ODcwNTE2MgwPNTY0NDIxMDIyNTI3NzQzDA8wMjE1MjE3MDI1MDI4ODQMDzYzNzgwMTY1NTA0MDc2NwwPMzA3MTE4NDExMTc2NTU3DA8wMDYxNzI3NTM0NDQxMjAMDzU1MzgxNzI4Nzg4MDA3OAwPMzI2MjU2NjQ0MTIyNDc3DA8zNTgyNjQ0NDI2NzQ1NzcMDzQyMTg3MDg3MjMyNDIwNQwPNTE3NTMzMzE4ODY1NTE1DA81MDQ1Mjc3NjI1ODQ3NzAMDzcxNDAyNDQxMjEyNzgzOAwPNTIzMTYxODE4Mzg1NTEwDA8wMDI3Nzg2MzEyMDQ0ODQMDzMzNTUxMDcxMTYxODAwOAwPNDU1MDYwODMzMzMyMjM4DA80NTM4NzExNjE1MDg1MDMMDzQ0MzQ3MjUxNzM4MDU2NwwPNjIwMDM1MDg1MzU0NDcxDA81NjE4NjMzNTE2MjU0MDUMDzE1Mzc4NjYwMDgxNDM2NAwPNzgwMDgyNjEzODc2MzgzDA81Njc0Nzg1NTg0ODczMjcMDzM1NTIwNDg4NTMwMTM3NAwPNDA4MDAwNzU3MDQzODYxDA81NjgxNjQ1ODcyMzIwMTgMDzQ4MTUzMjMxODUyNzM0MAwPMzE0NDI0NjY4Mjc4NDg2DA81NDc3NzIwODcwMDU4NjMMDzMzMjExMTUwODMzODI2MgwPNDU3MjI4MzM3NjAzNzAwDA80ODQyODAzODQyNjg1NTYMDzEzMjMxMjQ3Nzc3ODQ2NAwPNjI3NjQyMDY2NTA0MzUzDA82NTAwNjEyMTIxNjY2MzcMDzE1MTA3ODY0MTc3NDUwMAwPNDEwODIyNDIwNzcyMDg0DA83NjEyMjY3ODYxODU4MjcMDzcxMDMyNTE1MjcwNDIxNAwPODY2NjU4MzA4MjEwMjcyDA80MjI3ODc4NDg1NTg3NDcMDzgzNzcxNDQ4MTI2MTg1NwwPNjM1ODY2MTA1MTIxMTcxDA83NDU2MDExNTM2MzAzNzUMDzg1MjUyNjE3MjM1MDUyOAwPNjI1MDM3NzY2MTc1MDc0DA84NzAyNDIyMjMyMjAyMzUMDzQ0MzQwMDMxNTYyNTY0NAwPODUzNDUyNzgyODAwMzcxDA8xMDM1MTY3NTY0NDgzNTYMDzQyMzUxMzYwNjcwMjUzOAwPMTcyMTAxNDg2MjcyNDUxDA80MzIzNDI0NDg3NjUwMDUMDzc1NjI4MDAxNDU1ODQxNAwPMTE1NjU2ODE2NzAwMDM0DA8wMjc4MjQ0MDc3MzU4NTIMDzM1NzYxNTgxMDYyNTA4MAwPMTIwNTQ4NjUzNTgwNTgxDA80MTI2MDg3NzAzMjI4NzMMDzYwMzgwNjQ4NjIxNTY0NQwPODQxNzE1NjIyMzQ4NjczDA82ODI0MjQ0MDIzNjUwMzcMDzQ0NzQwNTU0ODI1NjI3MgwPMTEwNDQwMTMwMjIyODM0DA8xNTQ0NDMzNzU1NjgzMTYMDzI3MTExNDU4MTYwNjM3OAwPNDIyNjU0MzI0MzM2NjA3DA83NjQ0MTQ1MDcyNDg0NDYMDzE3MzU3NzgxMjE1NDQ2MwwPNzcwNjAwMzAxMzgwNzAxDA80NTM0MzYzNjQwNzIwMjEMDzgzNzIyNTQ1NTUyMjAyMgwPNjAyMzQ2MjIwMjUyODA3DA84MzAyMDExMDQwNjA2MjIMDzUyODQ4NTgzMzg2MDI4MwwPMTc1NDc2NTA0NDQxMDQwDA83MTM1NDE2Njc3NDE2NzYMDzIwODU2NDcwMzYyNDU3NwwPMDA4NDcwMDIxMjg4MDU3DA8zMDAwMDA1ODIwODQ4NzYMDzE4MzI0NzEwNDIwNTQxNQwPMzEzODY2NTA3NTM0NjI1DA8zNzcwMDcyMDgxMjgzMTMMDzIyNzQ2ODIyMjE0MDIzMAwPODE2MjU3MDEyMDI0MjE3DA83NjAyMDMwMDY4MTM3MTEMDzQxMjgyNTE0NTQzMzIzOAwPMzI2MzU2MTE4Njg2NjQ3DA82NTM2NDIwMTcwMzI0MzMMDzEwODQ3MjYzMDAxODc1MAwPNzM3MDI3ODI4NDUzNzQzDA8xODQ4NzI1MjI1NDg1NzIMDzgxNTQ3NTA1MzYxNDEzNwwPNzUyMTg2ODY3MzYzMzMwDA82NTM0MzgyNjU0MTQyODUMDzIwMjQyMjI1MTA1NzQ1MQwPNzE1MzQ1MDI2MDY0MTIwDA8xNTcwNjc0MzM4MzA1NjUMDzcxNDcyNjIzODQ4MTA2NwwPMjg0NjM4NTY3MjM1MDYwDA8yNzQ3NjAzNDc3NTMwMzEMDzIyMTYzNjgwNTE3NDAzNQwPNjgzMjI2MTEzMTUxODA1DA82NTgwMzE2NDIyMzU0NzQMDzYyNjQwNzYyODAyMjAzMwwPMjIxMzgxNDgzMTMyMzI3DA8xNjU2NzEwNTI3ODI1NDgMDzY1ODgyMTU2ODU2ODY2NAwPMzY3MTU3NDUxMjIxNzU3DA8zNzMzMzUyNTE0MDgzODYMDzcwNDYwNjYwNTEyNzA3MwwPMjgzODg0ODU2ODI1MzA3DA8wODQzNzIyMzgwMTYxNzMMDzM3ODAyODExNzgyMjE3MgwPMzU3MjQ1MDI3MDQ1MDM2DA82NDUxNzAzNjg2NDQ3NzUMDzE1MDQyNTY0MDAxMTUwMQwPODYyMDMzNDQwNDgxNDcwDA82NzE4MDgwMTU1MDUxNDUMDzQ0NDI1NjQ3MjA1MTQ1MQwPNTU0MjM1MzI1NTg2MTIzDA84MzQ1NDUwODgyMjA3MjEMDzc4NjU1MjIxODYwODIxNQwPMzgyMDU1NjIyNTE0ODMwDA81MDMyNTMzMzExNDcyNjcMDzAxNDc2ODA4MzA0MDgzMQwPNTE0MzY4ODgxNDQxNTI0DA84ODMyMTUzMDMyNTQxMjUMDzAyNDQyNzE2MTIyMjg0MQwPNjI1NTYyMTQ3NDc2NDA2DA84NzM4NTA2MTgxNzc3MTMMDzIyNjM2NzU0MDczNjAxMQwPMzYzNjA4NDQ0Njg4MDEyDA80NzMzNzYzNTAwNzc2ODUMDzY3NTA1ODUxMDY3NDgwOAwPNTc1MDM1NDYxMzg2NDEyDA80NjU4Mjg0Mzg0NjY4MTgMDzIwNjE2NTg4NjU1NTczMAwPMjUzNjQxNDQzMTEyMjA0DA8xODE1MTE0MDI3NTA4MzMMDzU2NDYxNDQ1MTAxNTM3MgwPMDEyODQ2MzI2NjM2MjUxDA8zNjUzMDg2ODgwNTY3MjYMDzg4Njg2NjA2ODEzNDQ1MwwPNjM4ODMwMzEyNDA4MzgwDA81NTUzNzA4MDc2NTI0MDcMDzE2NDY0MTI3NzE1MjM2MwwPMzg3MTA2NTg4NDQ2NjEwDA8xNTIxMTc4ODY2NjI1MjYMDzU0MTU3ODIyMzQ1MjEwNAwPMDQ3MTMwODYwMzU0NDA2DA84MzQ2NDA3NTI4MDQ1NTcMDzExMDc4NjcxNDQ0NjI1NwwPMzUwMjEyMzAzNjgwMTQ0DA8xODc4ODI4ODQ3NDIyNzYMDzg1MzU1NDg4NTg0NTMxMgwPMTQ2NzY3MjI0Njc1MTY1DA84MTY1MjEwMjU0MjIwMTUMDzM1Nzg2NzMzNTczMTc1OAwPNzQwMjUwNTgyMDI3MzM0DA84MDcwNzA0NzUyNDA3MTQMDzcyMDA0MDI1MTgwMzczNwwPMDMyMjI4NzU1ODA3NDcwDA8zNDY0NTQyNzA1NDIxNTEMDzQ0MTMxODAyNzA4NzMzMAwPNjg2NjEyMDgyNjEwODg3DA8wMzUwNTY4NDQwNjA4NzMMDzUzMTc1NTQ4NDg4MTQ2MwwPNTc0ODA4NDUyMzU0MjU0DA8zODQyMDUwMjU1MTUwNTEMDzgxNTU1NDAwMjg4ODgyMwwPNjg0MDMzMDYwMTc4MzYzDA8yNTE3NDc3MjU2MTEwMTIMDzUzODQ0NDcwNDgzMjUwNAwPMDY2MzUyNTQzNjQwNTI2DA8xNjY0NzU1MTAzNjAwMjIMDzMwODE3ODA0NjI3MDQ2NgwPNTEyODQwMTI2MzUzMjYzDA82NTU3NjY3NzE0NDU2NDYMDzIyNDc3NjQ4MDE3NTc1NQwPNDc2MTAwMjYyMDMwNzQzDA8xMjE1NTExMDc3MjYxNDcMDzExNDc2NTMyMDU0MDEyNQwPNzY1Mjc2Njg0MTE1MjQ1DA80NDc1Nzg1NDgwMzEwODAMDzQ0MzgyMDY0ODQ0MDYwNgwPMDg3MDAwMDgzNjIyMDMwDA8yNjg4NDM3MzYxNDM2MDUMDzgzMjMxNTM4MTQ3MzE0NgwPMzI2Njg1MjI4MjYzNDM3DA81ODgxODAxMzUwNTEwNTAMDzQ0NTEzNDYwMDUxMDA1OAwPMzI3NzQxNjUxNjU3MTU1DA80MTYwMTgyNTQwMjg1NDUMDzQ3MDE2MDE3MTE0Mzc3OAwPNzYwNjAxMjU3NzgwNjgwDA80NjE1MzQ4NDU1NTU3NjcMDzU2MjIzMzYxMzAxMTcyNgwPMTQzNzE2ODMxMTg4MjI0DA8wNDM3ODQ3MzU2NDYzMzEMDzg1MDU3MzQ4ODEyMTYwMAwPMzEzMTA3MjIwMjM0MjMxDA83NTczMDcyNjE2NTMzODIMDzE2MTEwODYyNjY1Nzg2NAwPNTUyNzUxMzAyNDA3ODg1DA8yNDA2MTg2MDc1NjEwMzgMDzA0NTA2MzcwNzQyODQ0MgwPODUzNzA1NTIwNTYwNzY2DA8yNTI4NTI3NDU2NTQ4NDUMDzMyNzE3ODIxMjMwMjc1NAwPMjMxMzA4MTE0MzU3MjE3DA8zNDQ3NDU3ODY4MzIxNzQMDzI0NzM0NDc3MTI4ODE4NwwPMzM2ODEzODAxMTUxMzg3DA8xMTU4MjU1MDAxMzg2MjIMDzQxMTcxNDQ4MjAwMjAyNQwPMjQ0NDU1MjYyNjA4NjIyDA8wMDUzNDgzMzg3MjI1NzYMDzY1NzM2NzExMTc4NjYyMQwPMDE2MDU0MTIxODY3NDcwDA8xNDU2ODcwNDY4MDEzMjAMDzIwNTg1MjYyODE1NzA4NwwPNTIyNDY4MjQxMTQ2MTU1DA8zMzY2MjMyNTY4MzczMjUMDzAxMTMzNzg3Nzc0ODU3MgwPMTE0ODU4MDEzMjE4NTIzDA84Nzg1MDc0MjYwMDgwMTIMDzQ2MzM2NDE4NzE1NjYyMQwPNTcwMzMyMDYxMzI1MDUzDA83Nzg1MzA4ODQ2NTMyNjgMDzMzNjgxMjIxNDQ0Mjg3NwwPNjIxODI1MjYxMzMxODQzDA8yNTc1NzU3MTc3MzI1MDIMDzYyNDQ4MjU3NTI4NTAyMAwPMzQ4NDA1NjU2MTUyMjI3DA83NjY3MDAxMzU1MTQ1NzIMDzYzODM0NDE1MjUzMTcyNgwPNjAzMjEwODA1NzIyNzU1DA84NzAxNjcxMTM2ODU3MzYMDzYyMjI4NjQ0NjIyNTM4NgwPODcwNTgyNzYyNTg1MzUzDA8wNDMzNTg2MzAzMjU2ODcMDzc1ODI2NTA4NDQzNTA0MQwPMDM4MjM4NzI3ODUwNTQ2DA83MjYxMzQyMDgzMzYyMTEMDzU2ODM3NTIxMjU1MDgxMwwPNzM0MDQyMzExNDMwNzQ2DA83MDU3NDIwNTcyODU3MDQMDzg4NTA3NzAxNDYxMDc0MQwPODExNDI3NTA4NDgxMTIyDA80MzM2MzQ0NjQxNDU3NjQMDzc0MDAxMzY3NTc4MzE2MwwPODg1MzUwMzI2MTcwMDc4DA84NDQwMzY3MDI4MzYxMzQMDzc0ODA4NzY4NjA2NTcxMAwPODA3NDg3MTU2NzcyNjg3DA82NDY4NzIzNzU1MDU2NjcMDzI4NTE2Nzc0NTgyMDY1MwwPNDY2ODczNDUxODI0MzE4DA81NDg2NzIzMzA3MDgxODQMDzcyNjQ1NjgwMzI2MDI3NwwPMzE1MDM4ODAyMDY1NDgzDA83NjEzMjczNjM2NjM4ODEMDzQ2NjUzMzYyMzg1MjcwNAwPMTQ4ODE4MTQ4ODcxODE1DA82ODQzMDIzNDc2ODU4MDYMDzUzNjEyODQzMzMwMDgzNwwPNDAxMzQ4Njc0ODg3NzE0DA84NjQ1NzU4MDI4MTg4ODYMDzc2NTQ3NzIwMzIzMDEwMQwPMDA4MTI2MjA1Mzc2NzA0DA8wNjM4NjAwNTI4MjY0MTQMDzY4MDg0MTc0Mzc3MTQ2MwwPNDUyMzg3ODU4NjEzNzA4DA80MjYyMjA2NTMwNTIwNTMMDzc3NzM1NDE1ODQzMzg1NQwPODcyNDc2ODQyMzY4NjI3DA82NTQ3NDQ3NjMwNTMyNzUMDzg0NjU2MjMxMTYxNjYwOAwPNzEzMTUzNzM3MTE1MDMwDA8yMDQ2Nzg2MjczMTEzNjUMDzU4MTYwNDcxNzIwNjY0MQwPMTYxODIzMDIzMTUzNjEyDA83MTgwMDM4MDEwMzc4NjAMDzA2ODQyNDc0NTQwNjIzMQwPMzU0NzQyMzc2NDQ4MDU4DA8wODc4MzUyMjc4MTc3MTcMDzQ4ODYzNDEyNjExNjMxNAwPMDA0NDAxMDE1MDc2OTc1DA8wMDQ0MDEwMTE0Mzg0MDEMDzAwNDQwMTAxMTQxOTc0MAwPNjUxODAxNjc4NjQ1MDA0DA8zNjgyMDMwMDY0MDIzMjgMDzAwMDAwNTA2MTY2NTYwMAwPMzczNjczMTAyMjE1ODY3DA81NTAwNjE2NjQzNDcxNzAMDzI3MjgzODQ4NDUzNjcxNgwPMTUyMTM4MDIxNTg0MTAxDA8yMDMxMTA1NjM2MzM3MTgMDzQzNDI3MDYyNzMzODEwOAwPMzY4MTUxODcyMjE0Mzg0DA80NzI3MjI4NzExNTg4ODQMDzYxMzMxMjMwNjQ2MTA1MAwPODgxODgxNzEwNjI2NzI0DA8xNTIxNTE3MjA2MzEyMTcMDzA0MzUwNzIyNzU1NjQyNQwPMTY3ODAxMzIwNjIwMDQ4DA83MDQwMzU4MzEyNTQzMjIMDzQ3Mzg4MDM2MDg3ODE2MgwPMTE3NTQxODEwMDM2NTg1DA83NDIxMjQyMDUxNzYxMzIMDzEzMzg4MTI4NDM1MTUxMQwPNDE1ODcyMjUwNDg4MjYwDA8yMzUwNjIzNjcyODMzMzYMDzQyMTU3Mzc4MjMxMzcxNwwPODU2MjIxNjM2NTQyODM4DA82Mzc1NDI2MTI3MDUxMTcMDzg4ODU2NDAyODYzMTA3MQwPNzg4NDc3MjM1Njg0MjEzDA8zMzA0MjQxMjQ0ODM0MTgMDzI3NTQzNzExMTQ0NzIzNgwPNTMwNjQwNjM3ODIzMjQyDA8xMjExNDIzMjE1ODI0NDUMDzMxNDY2MzMzNjQxMDUzMgwPNzI1NzE2NDI4NDIzNTIwDA8zNjM4NTYyMDI0MjYxMTQMDzIzNTUxNTY2MzI0NDMwMwwPNjI4NzYxMjE4MDA4MjY4DA8xMzg0MDcxNzM0ODY3MTYMDzYzNjYxMzI2MTM3NjU4MgwPNTg3MTE2MjcyMDcxMTEwDA8yNDA1NDAzMDQzMjc3NDgMDzM0MTYxNDI2MDMxMDI3NAwPNDQwNTc4NzE0NDM1NjI0DA82MTc3NzY0MTYwNzUwMTMMDzA1NDE1MTAzNzI3NzYxNgwPNjMzNDU2MzM0NTQ0NjE2DA8wNjU3NzY1NTE4NDQzODIMDzIxMzMzMTU4NTY2ODE1NgwPNTgxNTAwMjY2ODY3NTIwDA81NDMzNDI4NDYwNzc0MzcMDzAzNjM3NTcyNzgwNjc1MAwPMDcyMzQ2ODg0NTU3MDg0DA8yMjcyNzYzNzIzODcyODYMDzEwNDg3NjUwNzUxNTU4MAwPODIxMDY1MTIzNjM4MjU1DA83MjMwNzc1ODA2MTE1MzEMDzI2MDYxNjMzNDIwNzU0NAwPMzU2NTY0NjM4MDYxNzQxDA8yNDY4NzMzNTA3MjgyODAMDzIyNTgwMjIwODI0NzcxMwwPNDQ4MTQ3MzEzNzAwODM0DA82MTYwMzg4NTgzODYxMDMMDzc4NjcyODgzODg2MjA3NQwPNjgwMTczNTYxNzgwMjg0DA81NjA4MzA4NDcyMDgxMDAMDzYyMjM0ODI0NjIzNTY3NAwPNDA3NDc4Mzg0MTExMzQxDA8xNDgxMDI1NzU3MzA3MjEMDzY1MDY1ODI2MTQ1MzE3MQwPMDgyMzU0MjIwNzQ2NzU3DA82MjQ4MjY2NDc4MTE1ODIMDzI3MjI2MTI3Mjc0NDA0NAwPNTIwMjIwNzgwMTc2MTY2DA81MDE1MzI4MDE0MDgxMjUMDzI1NDMwMzcwMDQyODgyOAwPNjc0NDc4ODY4MzQ4MjgxDA80NjMzMTY3NDU1MjcyNzUMDzQ3MTE4NTQ1MDIwMzEyMgwPNjM1NDgwMjg2MTEzNjUyDA82MTM0MzE4MjI4NTI3NzMMDzIyMTYzNDczNDg2MTA4NgwPNjE4NjU3NDcxNzUyMTE0DA8zMjg1MjU1MTIzMTgwNzAMDzQ2MTAzMTQ0NDAzMDMyNAwPNTc2ODU4NDI3MjE0MTg2DA82NjU0MDAwNjgwMjgxMzEMDzMwNTcyMzIxODQ0MTgxMwwPNTQ1MTg0NDYwMDg4NTQ2DA82ODExMDczNDM4Njg3MzgwDQYJKoZIhvcNAQEFBQADgYEAQq6zHN8SP8w71Yyq+cwwNQ2VZ4UMPRw/9JkW8ZUJWC4gae2lOfeyyjtN3akXaT+p+vETtfoPuCpPjvzPYoN1RZieyJnpSVzUrNw/lM6kSP5DjGg5K/WKWYad0VkQg56Kynp2YVX4yKUhBydd7iBeSGP900LAHRWCR++xq+r98mI=
+MIDlet-Jar-RSA-SHA1: PRpjLFh81oAjHdPSZ/9lTe64ICSSHOk/MQMdRSqwsoGMSPID91mBRFEYOIQ/5nocEscacSi81o089Y0gMpEIP8V/EWBD7WDP6xqjC0gSyac+QjZm1Bu7Pzav+JC5J3KEkKOGy4wgQKJx02bArR/P9LhYAe7T6LVVFbfFyw2lhJA=
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/Empty.jad
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/EmptyLines.jad
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/EmptyLines.jad Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/FL_Rocks.jad
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/FL_Rocks.jad Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,6 @@
+MIDlet-Version: 1.0
+MIDlet-Vendor: Standing Still Limited
+MIDlet-Jar-URL: http://195.114.231.97:7001/dls/delivery/ds/01AAvJ1WX3jmZsurMwoC/1/FL_Rocks.dm
+MIDlet-Install-Notify: http://195.114.231.97:7001/dls/delivery/ds/01AAvJ1WX3jmZsurMwoC/2/FL_Rocks/status
+MIDlet-Name: Rocks
+MIDlet-Jar-Size: 28196
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/NDRM.jad
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/NDRM.jad Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,10 @@
+MIDlet-Jar-URL: NDRM.jar
+MIDlet-Install-Notify: http://uljava.gjmptw.de:8080/Index/Index/NDRM.jad?nstalled=NDRM_harmony
+MIDlet-Name: DRMonitor
+MIDlet-Vendor: m-internet.com Limited
+MIDlet-Version: 1.0
+MIDlet-Jar-Size: 24472
+MIDlet-Icon: /icon.png
+MIDlet-1: NDRM, /icon.png, ndrm.NDRMMIDlet
+
+
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/PlatformReqHTTP.jad
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/PlatformReqHTTP.jad Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,11 @@
+MIDlet-1: PlatformReqHTTP, , com.nokia.midp.test.securitytests.PlatformReqHTTP
+MIDlet-Jar-Size: 2272
+MIDlet-Jar-URL: PlatformReqHTTP.jar
+MIDlet-Name: PlatformReqHTTP
+MIDlet-Vendor: Nokia
+MIDlet-Version: 1.0
+MicroEdition-Configuration: CLDC-1.0
+MicroEdition-Profile: MIDP-2.0
+URL: http://tcktest3.extra.wirelessfuture.com:8080/axis/servlet/marika.GetServlet
+MIDlet-Certificate-1-1: MIICPDCCAaUCBD+zblMwDQYJKoZIhvcNAQEEBQAwZTELMAkGA1UEBhMCZmkxEDAOBgNVBAgTB1Vua25vd24xEDAOBgNVBAcTB1RhbXBlcmUxDjAMBgNVBAoTBU5va2lhMQwwCgYDVQQLEwNKQ0YxFDASBgNVBAMTC01hcmlrYSBGYWJlMB4XDTAzMTExMzExNDMxNVoXDTEzMTExMDExNDMxNVowZTELMAkGA1UEBhMCZmkxEDAOBgNVBAgTB1Vua25vd24xEDAOBgNVBAcTB1RhbXBlcmUxDjAMBgNVBAoTBU5va2lhMQwwCgYDVQQLEwNKQ0YxFDASBgNVBAMTC01hcmlrYSBGYWJlMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDsUJbYMb9GlP99Ax9n6m2AIAg+b2zC0u6h7OuLP+ls9OpI0sLtE1uBABCePloS0uKwmjtsdFc1zLyA/bpbi644xDw3PMIEhppeuKbLrog5uMk5wD1bFk5kJXYwYEorWVrFpLDmqFwEMig2a+Uhf7eTq1Ze/JgMHoUDXRo0eVsnFwIDAQABMA0GCSqGSIb3DQEBBAUAA4GBACuTqh37N34NnVzziuj66gmiE3rt7fKDTUCiqoHGfv7dpr4M0e8+y6FvtXtUXEajxX/DZbZuy0E9mZqmXsYyP2DDKbCg4cBJ23uOCffuYYVQFSnv4RQFVrQr4jMUHgX7wT5Ox4Ee8xcpsvWWfOgTY4zyEznOBUj6Uw4Xj7F+1yk8
+MIDlet-Jar-RSA-SHA1: UfQMdprNMMmJOk9INrJXe+Y06tnuL+zOJz4gJNEKnLPOzb6UwR2zczNddwfdBxENKbhw2RVp3GBQD2OZjB6UEU4kiw2S956RMlk5OVfqwXB5wvYPCePX6/8qgKSUmsBjNiEpXBGE2UT7MqbRApxmsf/OaDnzzd9Tlr9jUw+YU3w=
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/SimpleRMS8.jad
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/SimpleRMS8.jad Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,9 @@
+Manifest-Version: 1.0
+MicroEdition-Configuration: CLDC-1.0
+MIDlet-Name: SimpleRMS
+Created-By: 1.5.0_12 (Sun Microsystems Inc.)
+MIDlet-Vendor: Unknown
+MIDlet-1: SimpleRMS, SimpleRMS.png, SimpleRMS
+MIDlet-Version: 1.0
+MicroEdition-Profile: MIDP-2.0
+
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/SimpleRMS8.jar
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/SimpleRMS8.jar has changed
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/SunShines3D_DEMO_nokia_N900_EN_IGP_ATandT_901.jad
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/SunShines3D_DEMO_nokia_N900_EN_IGP_ATandT_901.jad Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,24 @@
+IGP-BS: MP3D=MP3D_BS;SCDA=SCDA_BS;ASP3=ASP3_BS;PSDK=PSDK_BS;
+IGP-CATEGORIES: WN=WN;BS=BS;PROMO=0;OP=OP;
+IGP-DEMOS: DEMOPG=DEL;
+IGP-PROMOS: MB3D=MB3D;PB07=PB07;BBRK=BBRK;
+IGP-VERSION: 2.5.0
+IGP-WN: RBPF=RBPF_WN;MMN=MMN_WN;BRBO=BRBO_WN;ASCR=ASCR_WN;
+MIDLET-FULLVERSION-URL: http://advers.bestgamfts.com/redir/?from=D725&game=MD3D&op=GONG&game_type=DM&lg=EN
+MIDlet-1: Sun Shines 3D Demo, /icon.png, HightS3D
+MIDlet-Data-Size: 8192
+MIDlet-Description: Sun Shines 3D, Emulated sun shine in full 3D!
+MIDlet-Icon: /icon.png
+MIDlet-Jar-Size: 754864
+MIDlet-Jar-URL: SunShines3D_DEMO_nokia_N900_EN_IGP_ATandT_901.jar
+MIDlet-Name: Sun Shines 3D Demo
+MIDlet-Vendor: Celedons Two
+MIDlet-Version: 1.0.4
+Nokia-MIDlet-Block-Uninstall: true
+Nokia-MIDlet-Category: Applications
+Nokia-MIDlet-UID-1: 0x20012293
+Nokia-Scalable-Icon: /icon.svg
+Nokia-Scalable-Icon-MIDlet-1: /icon.svg
+URL-OPERATOR: http://bestgamfts.hereis.com/redir/?from=D725&op=GONG&game_type=DM&lg=EN&ver=2.5.0
+URL-PT: 0
+URL-TEMPLATE-GAME: http://bestgamfts.hereis.com/redir/?from=D725&op=GONG&game=XXXX&game_type=DM&lg=EN&emb=1&ver=2.5.0
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/SunShines3D_DEMO_nokia_N900_EN_IGP_ATandT_901.zip
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/SunShines3D_DEMO_nokia_N900_EN_IGP_ATandT_901.zip has changed
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/TestMidlet.jad
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/TestMidlet.jad Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,14 @@
+MIDlet-1: TestMidlet, TestMidlet.png, TestMidlet
+MIDlet-Jar-Size: 3674
+MIDlet-Jar-URL: TestMidlet.jar
+MIDlet-Name: TestMidlet
+MIDlet-Vendor: Nokia
+MIDlet-Version: 1.0
+MicroEdition-Configuration: CLDC-1.0
+MicroEdition-Profile: MIDP-2.0
+: Empty attribute name
+ : White space only attribute name
+ : White space only attribute name 2
+a<>: separators in attribute name
+bo: control characters in attribute name
+c:
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/TestMidlet2.jad
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/TestMidlet2.jad Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,3 @@
+a<>: separators in attribute name
+bo: control characters in attribute name
+c:
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/TestMidlet3.jad
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/TestMidlet3.jad Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,9 @@
+MIDlet-1: TestMidlet, TestMidlet.png, TestMidlet
+MIDlet-Jar-Size: 3674
+MIDlet-Jar-URL: TestMidlet.jar
+MIDlet-Name: TestMidlet
+MIDlet-Vendor: Nokia
+MicroEdition-Configuration: CLDC-1.0
+MicroEdition-Profile: MIDP-2.0
+o: attribute name starts with CTL characters
+MIDlet-Version: 1.0
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/calc2_en_de_es_ES_fr_it_tr_TR_nl_NL_pt_PT.jad
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/calc2_en_de_es_ES_fr_it_tr_TR_nl_NL_pt_PT.jad Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,32 @@
+MIDlet-1: Calculator, i.png,common.control.CalculatorMIDlet
+MIDlet-Name: Calculator
+MIDlet-Vendor: Nokia
+MIDlet-Version: 1.5
+MIDlet-Jar-Size: 123
+Nokia-MIDlet-Category: Application
+Nokia-UI-Enhancement: CanvasHasBackground
+MIDlet-Data-Size: 150
+Vertical-Move-Delta: 10
+Vertical-Move-Period: 2
+Inline-Editing-Supported: true
+Nokia-Platform: Nokia*
+Nokia-MIDlet-Category: Games
+Nokia-MIDlet-Name-en: Calculator
+Nokia-MIDlet-Name-de: Rechner
+Nokia-MIDlet-Name-es-ES: Calculadora
+Nokia-MIDlet-Name-fr: Calculatrice
+Nokia-MIDlet-Name-it: Calcolatrice
+Nokia-MIDlet-Name-tr-TR: Hesaplamalar
+Nokia-MIDlet-Name-nl-NL: Rekenmachine
+Nokia-MIDlet-Name-pt-PT: Calculadora
+Nokia-MIDlet-1-en: Calculator
+Nokia-MIDlet-1-de: Rechner
+Nokia-MIDlet-1-es-ES: Calculadora
+Nokia-MIDlet-1-fr: Calculatrice
+Nokia-MIDlet-1-it: Calcolatrice
+Nokia-MIDlet-1-tr-TR: Hesaplamalar
+Nokia-MIDlet-1-nl-NL: Rekenmachine
+Nokia-MIDlet-1-pt-PT: Calculadora
+MIDlet-Jar-Size: 84713
+MIDlet-Jar-URL: calc2_en_de_es_ES_fr_it_tr_TR_nl_NL_pt_PT.jar
+Nokia-MIDlet-Category: Best-Sellers
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/calc2_en_de_es_ES_fr_it_tr_TR_nl_NL_pt_PT.zip
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/calc2_en_de_es_ES_fr_it_tr_TR_nl_NL_pt_PT.zip has changed
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/ceac00.jad
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/ceac00.jad Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,12 @@
+MIDlet-Name: ASCII
+MIDlet-Vendor: Nokia
+MIDlet-Version: 1.0
+MIDlet-Jar-URL: http://195.134.231.83:7070/java-server/resources/man_jam/ceac00/bin/CEAC00.jar
+MIDlet-Jar-Size: 1494
+MicroEdition-Profile: MIDP-2.0
+MicroEdition-Configuration: CLDC-1.0
+MIDlet-1: ASCII,,USASCII.CEAC00_01
+MIDlet-Install-Notify: http://195.134.231.83:7070/java-server/getresult.jsp?phone=9F732D83F3B6AF98EB6577EA92366D95&tID=ceac00
+
+
+
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/cecn02.jad
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/cecn02.jad Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,12 @@
+MIDlet-Name: ùÓùÔùÕ
+MIDlet-Vendor: Nokia
+MIDlet-Version: 1.0
+MIDlet-Jar-URL: http://195.134.231.83:7070/java-server/resources/man_jam/cecn02/bin/CECN02.jar
+MIDlet-Jar-Size: 1417
+MicroEdition-Profile: MIDP-2.0
+MicroEdition-Configuration: CLDC-1.0
+MIDlet-1: ùÓùÔùÕ, ,Big5.CECN02_01
+MIDlet-Install-Notify: http://195.134.231.83:7070/java-server/getresult.jsp?phone=C9EABB544D0A47788C684D71A5A1C8C9&tID=cecn02
+
+
+
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/cecn06.jad
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/cecn06.jad Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,12 @@
+MIDlet-Name: ‚X‚Y‚Z‚[
+MIDlet-Vendor: Nokia
+MIDlet-Version: 1.0
+MIDlet-Jar-URL: http://195.134.231.83:7070/java-server/resources/man_jam/cecn06/bin/CECN06.jar
+MIDlet-Jar-Size: 1415
+MicroEdition-Profile: MIDP-2.0
+MicroEdition-Configuration: CLDC-1.0
+MIDlet-1: ‚X‚Y‚Z‚[,,GBK.CECN06_01
+MIDlet-Install-Notify: http://195.134.231.83:7070/java-server/getresult.jsp?phone=79CD95B6352F8388513D6DDB699817CF&tID=cecn06
+
+
+
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/ceis00.jad
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/ceis00.jad Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,19 @@
+MIDlet-Name: ÷ùø
+
+MIDlet-Vendor: Nokia
+
+MIDlet-Version: 1.0
+
+MIDlet-Jar-URL: http://195.134.231.83:7070/java-server/resources/man_jam/ceis00/bin/CEIS00.jar
+
+MIDlet-Jar-Size: 1450
+
+MIDlet-1: ÷ùø, , ISO8859_1.CEIS00_01
+
+MicroEdition-Configuration: CLDC-1.0
+
+MicroEdition-Profile: MIDP-2.0
+
+MIDlet-Install-Notify: http://195.134.231.83:7070/java-server/getresult.jsp?phone=1D11AB7B2A1E2BC200165EB4CF554232&tID=ceis00
+
+
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/ceis09.jad
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/ceis09.jad Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,11 @@
+MIDlet-Name: ¢£¤
+MIDlet-Vendor: Nokia
+MIDlet-Version: 1.0
+MIDlet-Jar-URL: http://195.134.231.83:7070/java-server/resources/man_jam/ceis09/bin/CEIS09.jar
+MIDlet-Jar-Size: 1457
+MicroEdition-Profile: MIDP-2.0
+MicroEdition-Configuration: CLDC-1.0
+MIDlet-1: ¢£¤, ,ISO8859_15.CEIS09_01
+MIDlet-Install-Notify: http://195.134.231.83:7070/java-server/getresult.jsp?phone=7F914DE931B9D04E5F731F1ADCD163F6&tID=ceis09
+
+
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/ceis14.jad
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/ceis14.jad Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,12 @@
+MIDlet-Name: ??»
+MIDlet-Vendor: Nokia
+MIDlet-Version: 1.0
+MIDlet-Jar-URL: http://195.134.231.83:7070/java-server/resources/man_jam/ceis14/bin/CEIS14.jar
+MIDlet-Jar-Size: 1456
+MIDlet-1: ??», ,ISO8859_16.CEIS14_01
+MicroEdition-Configuration: CLDC-1.0
+MicroEdition-Profile: MIDP-2.0
+MIDlet-Install-Notify: http://195.134.231.83:7070/java-server/getresult.jsp?phone=336AA79A2E085DC20583865B841DBE6B&tID=ceis14
+
+
+
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/cejp04.jad
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/cejp04.jad Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,4 @@
+MIDlet"DNa"De:"D"D@!"D"D"D"D"D"D"DMIDlet"DVe"Ddo"D"D"DNoki"D"D"DMIDlet"DVe"D"Dio"D"D"D1."D"D"DMIDlet"DJa"D"DURL:"DCEJP04"Dja"D"D"DMIDlet"DJa"D"DSi"De:"D1439"D"DMIDlet"D1:"D"D@!"D"D"D"D"D"D"D"DJISX0208"DCEJP04_0"D"D"DMicr"DEditio"D"DCo"Dfigu"Datio"D"D"DCLDC"D1."D"D"DMicr"DEditio"D"DPr"Dfile"D"DMIDP"D2."D"D"D
+MIDlet-Install-Notify: http://195.134.231.83:7070/java-server/getresult.jsp?phone=CF0B99F53572032690A4D26E0CB83D02&tID=cejp04
+
+
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/ceko01.jad
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/ceko01.jad Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,11 @@
+MIDlet-Name: ÍÎÏÐ
+MIDlet-Vendor: Nokia
+MIDlet-Version: 1.0
+MIDlet-Jar-URL: http://195.134.231.83:7070/java-server/resources/man_jam/ceko01/bin/CEKO01.jar
+MIDlet-Jar-Size: 1429
+MIDlet-1: ÍÎÏÐ, ,KOI8_R.CEKO01_01
+MicroEdition-Configuration: CLDC-1.0
+MicroEdition-Profile: MIDP-2.0
+MIDlet-Install-Notify: http://195.134.231.83:7070/java-server/getresult.jsp?phone=64E5A88BE41622497EDF05039C15F26C&tID=ceko01
+
+
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/cems01.jad
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/cems01.jad Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,12 @@
+MIDlet-Name: ýþ€
+MIDlet-Vendor: Nokia
+MIDlet-Version: 1.0
+MIDlet-Jar-URL: http://195.134.231.83:7070/java-server/resources/man_jam/cems01/bin/CEMS01.jar
+MIDlet-Jar-Size: 1465
+MicroEdition-Profile: MIDP-2.0
+MicroEdition-Configuration: CLDC-1.0
+MIDlet-1: ýþ€, ,windows_1250.CEMS01_01
+MIDlet-Install-Notify: http://195.134.231.83:7070/java-server/getresult.jsp?phone=3F627BEFBC6E8A0FB9510BA4EB42AE6F&tID=cems01
+
+
+
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/cems11.jad
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/cems11.jad Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,12 @@
+MIDlet-Name: ýþÿ
+MIDlet-Vendor: Nokia
+MIDlet-Version: 1.0
+MIDlet-Jar-URL: http://195.134.231.83:7070/java-server/resources/man_jam/cems11/bin/CEMS11.jar
+MIDlet-Jar-Size: 1467
+MicroEdition-Profile: MIDP-2.0
+MicroEdition-Configuration: CLDC-1.0
+MIDlet-1: ýþÿ, ,windows_1256.CEMS11_01
+MIDlet-Install-Notify: http://195.134.231.83:7070/java-server/getresult.jsp?phone=3EBDFC736561D6876CF9ED93D3BF1B36&tID=cems11
+
+
+
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/ceut03.jad
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/ceut03.jad has changed
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/ceut04.jad
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/ceut04.jad has changed
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/ceut08.jad
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/ceut08.jad has changed
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/ceut09.jad
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/ceut09.jad has changed
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/einstein_EN_FR_IT_DE_ES_N97_v2942.jar
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/einstein_EN_FR_IT_DE_ES_N97_v2942.jar has changed
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/javahelper.mif
Binary file javamanager/javainstaller/installer/tsrc/testdata/utils/javahelper.mif has changed
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/mine_en_fr_de_it_es_ES_pt_PT.jad
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/mine_en_fr_de_it_es_ES_pt_PT.jad Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,33 @@
+MIDlet-Name: HecticMine
+MIDlet-1: HecticMine,/images/icon.png,com.nokia.mid.appl.mine.common.MineMIDlet
+Nokia-MIDlet-Category: Game
+MIDlet-Icon: /images/icon.png
+MIDlet-Vendor: Nokia
+MIDlet-Version: 3.0.4
+MIDlet-Description: HecticMine
+Period-Speed-ms: 100
+Vertical-Text-Offset: -2
+Nokia-Platform: Nokia*
+Nokia-MIDlet-Name-en:
+Nokia-MIDlet-Name-fr: Hectic Mine
+Nokia-MIDlet-Name-de: Hectic Mine
+Nokia-MIDlet-Name-it: Hectic Mine
+Nokia-MIDlet-Name-es-ES: Hectic Mine
+Nokia-MIDlet-Name-pt-PT: Hectic Mine
+MIDlet-Jar-Size: 233616
+MIDlet-Jar-URL: mine_en_fr_de_it_es-ES_pt-PT.jar
+MIDlet-Certificate-1-1: MIIDhDCCAmygAwIBAgIEQhnyeTANBgkqhkiG9w0BAQUFADAzMQ4wDAYDVQQKEwVOb2tpYTEhMB8
+ GA1UEAxMYTm9raWEgQ29udGVudCBTaWduaW5nIENBMB4XDTA1MDIyMTE0Mzg0OVoXDTE2MDEwMjExMDUwNFowKDEOMAwGA1UEC
+ hMFTm9raWExFjAUBgNVBAMTDU5va2lhIENvbnRlbnQwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAK2PV8KLVSZ9OePe4k
+ 78GeQ0MiujbMd1wU9/xqhUFPst50drxhKzH+fMxvXgQOJ7viReolqWyq+ZmKpikGa+6SdqHysnVBhAqo9SLMNjlMfoOXVJ/lvM
+ gOk9k5oyVhBqFonw/FDDHmINC6w9o83e3gRq1C1m2T368yHbZtKifiVdAgMBAAGjggEtMIIBKTAOBgNVHQ8BAf8EBAMCB4AwEw
+ YDVR0lBAwwCgYIKwYBBQUHAwMwggEABgNVHSAEgfgwgfUwgfIGCysGAQQBXgExAQMBMIHiMIHRBggrBgEFBQcCAjCBxBqBwVJl
+ bGlhbmNlIG9uIHRoaXMgY2VydGlmaWNhdGUgYnkgYW55IHBhcnR5IGFzc3VtZXMgYWNjZXB0YW5jZSBvZiB0aGUgc3RhbmRhcm
+ QgdGVybXMgYW5kIGNvbmRpdGlvbnMgYW5kIGxpbWl0YXRpb25zIG9mIHVzZSwgYXMgZGV0YWlsZWQgaW4gdGhlIENlcnRpZmlj
+ YXRlIFByYWN0aWNlIFN0YXRlbWVudCBhdmFpbGFibGUgZnJvbSBOb2tpYS4wDAYIKwYBBQUHAgEWADANBgkqhkiG9w0BAQUFAA
+ OCAQEAvXtgKSffVjD52zHgUEFBBmXFq3QjgWNh8+cQTD23wnPYgfA4GBomMmznLiV3X03SOOI42DUUenQ9baPb78iU8AngF6xd
+ oOpFYlNtVka9YdD9mA0jtkoe4YEmykxPabSKDS50xVYgQG+5Y9H8nO9EyIiviP6drFmpRv635mf8Trlao63XIx4geoCMb9v8vS
+ dfs0louKB9DrjwFki/uHAQvRcVYnFNtAwHdri22UMx+GMppuY4/oPVvQqxgzfP+1AX/w2lgG7pi3lbVVUB4MLhG36kZIk8/J7B
+ lmATAL1/G5t19HR3+9doz5H94y3WQG7ClWN1eoQtjLlvLfZO/iu20g==
+MIDlet-Jar-RSA-SHA1: ncuy0soEPUB4OPGHNyLn1ldXU2FvKvs0bUKGn/aPQefKI15aOlrczlapIWreUukE3ArQImU/xwxWh0
+ Q8LROEULJKXRIYyoGCCblM6o6EPYn+YT+CDd/HV8JlHS6OO+sAV//9vWuo9orIwSwdKN8wGl0g1JmPl8LF8V5/MjSmyh8=
\ No newline at end of file
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testdata/utils/utf8bom.jad
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testdata/utils/utf8bom.jad Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,8 @@
+MIDlet-Name: ışÿ
+MIDlet-Vendor: Nokia
+MIDlet-Version: 1.0
+MIDlet-Jar-URL: utf8bom.jar
+MIDlet-Jar-Size: 1417
+MicroEdition-Profile: MIDP-2.0
+MicroEdition-Configuration: CLDC-1.0
+MIDlet-1: ışÿ, ,UTF8BOM.UTF8BOM
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testserver/build/build.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testserver/build/build.xml Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testserver/build/readme.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testserver/build/readme.txt Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,41 @@
+Building
+--------
+
+Requirements:
+ * Apache Ant.
+ * Apache Tomcat. (Tested with 6.0.26)
+
+Change "catalina.home" property in build.xml file to match your Tomcat
+installation directory. Default is as follows:
+
+
+
+To compile the project and to create .war archive just use either of following
+commands:
+
+ ant
+ ant dist
+
+To compile only use:
+
+ ant compile
+
+And to clean all build artifacts use:
+
+ ant clean
+
+Deployment
+----------
+
+After build is complete, "installertest.war" file is created into the "build"
+directory. Deploy it to Tomcat instance as any other .war file. For HTTP
+authentication tests it is assumed that user named "guest" with password
+"guest" and with role "guest" exits.
+
+Running the tests
+-----------------
+
+Before running tests add option "-server=server_ip_address:port" to
+NotificationPosterTest, DownloaderTest and InstallerEngineTest
+test suites in jiut.bat (for S60) or in build.xml (for Linux)
+in "javainstaller\installer\tsrc\build" directory.
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testserver/content/HelloWorld.jad
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testserver/content/HelloWorld.jad Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,8 @@
+MIDlet-1: HelloWorld, , helloworld.HelloWorld
+MIDlet-Jar-Size: 1511
+MIDlet-Jar-URL: HelloWorld.jar
+MIDlet-Name: HelloWorld
+MIDlet-Vendor: Nokia
+MIDlet-Version: 1.0
+MicroEdition-Configuration: CLDC-1.0
+MicroEdition-Profile: MIDP-2.0
\ No newline at end of file
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testserver/content/HelloWorld.jar
Binary file javamanager/javainstaller/installer/tsrc/testserver/content/HelloWorld.jar has changed
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testserver/content/HelloWorld_8mb.jad
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testserver/content/HelloWorld_8mb.jad Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,10 @@
+MIDlet-1: HelloWorld, , helloworld.HelloWorld
+MIDlet-Jar-Size: 7867927
+MIDlet-Jar-URL: HelloWorld_8mb.jar
+MIDlet-Name: HelloWorld_8mb
+MIDlet-Vendor: Nokia
+MIDlet-Version: 1.0
+MicroEdition-Configuration: CLDC-1.0
+MicroEdition-Profile: MIDP-2.0
+MIDlet-Install-Notify: http:///notify?tID=900_success
+MIDlet-Delete-Notify: http:///notify?tID=912_deletion
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testserver/content/HelloWorld_8mb.jar
Binary file javamanager/javainstaller/installer/tsrc/testserver/content/HelloWorld_8mb.jar has changed
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testserver/content/HelloWorld_ota.jad
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testserver/content/HelloWorld_ota.jad Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,10 @@
+MIDlet-1: HelloWorld, , helloworld.HelloWorld
+MIDlet-Jar-Size: 1511
+MIDlet-Jar-URL: HelloWorld.jar
+MIDlet-Name: HelloWorld
+MIDlet-Vendor: Nokia
+MIDlet-Version: 1.0
+MicroEdition-Configuration: CLDC-1.0
+MicroEdition-Profile: MIDP-2.0
+MIDlet-Install-Notify: http:///notify?tID=900_success
+MIDlet-Delete-Notify: http:///notify?tID=912_deletion
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testserver/content/HelloWorld_redirect.jad
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testserver/content/HelloWorld_redirect.jad Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,9 @@
+MIDlet-1: HelloWorld, , helloworld.HelloWorld
+MIDlet-Jar-Size: 1719
+MIDlet-Jar-URL: http:///redirect?name=HelloWorld_redirect.jar
+MIDlet-Name: HelloWorld_redirect
+MIDlet-Vendor: Nokia
+MIDlet-Version: 1.0
+MicroEdition-Configuration: CLDC-1.0
+MicroEdition-Profile: MIDP-2.0
+MIDlet-Install-Notify: http:///notify?tID=900_success
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testserver/content/HelloWorld_redirect.jar
Binary file javamanager/javainstaller/installer/tsrc/testserver/content/HelloWorld_redirect.jar has changed
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testserver/content/META-INF/MANIFEST.MF
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testserver/content/META-INF/MANIFEST.MF Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Class-Path:
+
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testserver/content/META-INF/context.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testserver/content/META-INF/context.xml Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,20 @@
+
+
+
+
\ No newline at end of file
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testserver/content/WEB-INF/web.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testserver/content/WEB-INF/web.xml Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,73 @@
+
+
+
+ installertest
+
+
+
+ redirect
+ redirect
+ com.nokia.mj.impl.installer.testserver.RedirectServlet
+
+
+ redirect
+ /redirect
+
+
+
+
+ jad
+ jad
+ com.nokia.mj.impl.installer.testserver.JadServlet
+
+
+ jad
+ *.jad
+
+
+
+
+ notify
+ notify
+ com.nokia.mj.impl.installer.testserver.NotifyServlet
+
+
+ notify
+ /notify
+
+
+
+
+
+ /httpauth/*
+
+
+ guest
+
+
+
+ BASIC
+ httpauth
+
+
+
+ guest
+
+
+
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testserver/content/httpauth/HelloWorld_http_auth.jad
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testserver/content/httpauth/HelloWorld_http_auth.jad Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,8 @@
+MIDlet-1: HelloWorld, , helloworld.HelloWorld
+MIDlet-Jar-Size: 1721
+MIDlet-Jar-URL: HelloWorld_http_auth.jar
+MIDlet-Name: HelloWorld_http_auth
+MIDlet-Vendor: Nokia
+MIDlet-Version: 1.0
+MicroEdition-Configuration: CLDC-1.0
+MicroEdition-Profile: MIDP-2.0
\ No newline at end of file
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testserver/content/httpauth/HelloWorld_http_auth.jar
Binary file javamanager/javainstaller/installer/tsrc/testserver/content/httpauth/HelloWorld_http_auth.jar has changed
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testserver/javasrc/com/nokia/mj/impl/installer/testserver/JadServlet.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testserver/javasrc/com/nokia/mj/impl/installer/testserver/JadServlet.java Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,104 @@
+/*
+* Copyright (c) 2010 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.testserver;
+
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * Servlet implementation class JadServlet
+ */
+public class JadServlet extends HttpServlet
+{
+ private static final long serialVersionUID = 1L;
+
+ protected void processRequest(HttpServletRequest request,
+ HttpServletResponse response)
+ throws ServletException, IOException
+ {
+ ServletContext context = getServletContext();
+ String localPath = context.getRealPath(request.getServletPath());
+
+ response.setContentType("text/vnd.sun.j2me.app-descriptor");
+
+ BufferedReader in = null;
+ ServletOutputStream out = null;
+
+ try
+ {
+ in = new BufferedReader(new FileReader(localPath));
+ out = response.getOutputStream();
+
+ String line = in.readLine();
+ while (line != null)
+ {
+ if (line.startsWith("MIDlet-Jar-URL:")
+ || line.startsWith("MIDlet-Install-Notify:")
+ || line.startsWith("MIDlet-Delete-Notify:"))
+ {
+ line = line.replaceAll("", request.getServerName()
+ + ":" + request.getServerPort());
+ line = line.replaceAll("",
+ request.getContextPath());
+ }
+ out.println(line);
+ line = in.readLine();
+ }
+ }
+ catch (FileNotFoundException e)
+ {
+ response.sendError(HttpServletResponse.SC_NOT_FOUND,
+ request.getServletPath());
+ }
+ finally
+ {
+ if (out != null)
+ {
+ out.close();
+ }
+ if (in != null)
+ {
+ in.close();
+ }
+ }
+ }
+
+ protected void doGet(HttpServletRequest request,
+ HttpServletResponse response)
+ throws ServletException, IOException
+ {
+ processRequest(request, response);
+ }
+
+ protected void doPost(HttpServletRequest request,
+ HttpServletResponse response)
+ throws ServletException, IOException
+ {
+ processRequest(request, response);
+ }
+
+}
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testserver/javasrc/com/nokia/mj/impl/installer/testserver/NotifyServlet.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testserver/javasrc/com/nokia/mj/impl/installer/testserver/NotifyServlet.java Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,54 @@
+/*
+* Copyright (c) 2010 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.testserver;
+
+import java.io.IOException;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * Servlet implementation class NotifyServlet
+ */
+public class NotifyServlet extends HttpServlet
+{
+ private static final long serialVersionUID = 1L;
+
+ protected void processRequest(HttpServletRequest request,
+ HttpServletResponse response)
+ throws ServletException, IOException
+ {
+ response.setStatus(HttpServletResponse.SC_OK);
+ }
+
+ protected void doGet(HttpServletRequest request,
+ HttpServletResponse response)
+ throws ServletException, IOException
+ {
+ processRequest(request, response);
+ }
+
+ protected void doPost(HttpServletRequest request,
+ HttpServletResponse response)
+ throws ServletException, IOException
+ {
+ processRequest(request, response);
+ }
+
+}
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installer/tsrc/testserver/javasrc/com/nokia/mj/impl/installer/testserver/RedirectServlet.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/installer/tsrc/testserver/javasrc/com/nokia/mj/impl/installer/testserver/RedirectServlet.java Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,84 @@
+/*
+* Copyright (c) 2010 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.testserver;
+
+import java.io.IOException;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * Servlet implementation class RedirectServlet
+ */
+public class RedirectServlet extends HttpServlet
+{
+ private static final long serialVersionUID = 1L;
+
+ protected void processRequest(HttpServletRequest request,
+ HttpServletResponse response)
+ throws ServletException, IOException
+ {
+ int redirectCount = 1;
+ String redirectUrl = "http://" + request.getServerName() + ":"
+ + request.getServerPort()
+ + request.getContextPath();
+
+ String countParam = request.getParameter("count");
+ String nameParam = request.getParameter("name");
+
+ if (countParam != null)
+ {
+ try
+ {
+ redirectCount = Integer.parseInt(countParam);
+ }
+ catch (NumberFormatException nfe)
+ {
+ }
+ }
+
+ if (redirectCount > 1)
+ {
+ redirectUrl += request.getServletPath() + "?count="
+ + (redirectCount - 1) + "&name=";
+ }
+ else
+ {
+ redirectUrl += "/";
+ }
+
+ redirectUrl += nameParam;
+ response.sendRedirect(redirectUrl);
+ }
+
+ protected void doGet(HttpServletRequest request,
+ HttpServletResponse response)
+ throws ServletException, IOException
+ {
+ processRequest(request, response);
+ }
+
+ protected void doPost(HttpServletRequest request,
+ HttpServletResponse response)
+ throws ServletException, IOException
+ {
+ processRequest(request, response);
+ }
+
+}
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/InstallerUi.java
--- a/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/InstallerUi.java Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/InstallerUi.java Fri Jul 09 16:35:45 2010 +0300
@@ -385,6 +385,13 @@
}
/**
+ * Executes given Runnable synchronously in the UI thread.
+ */
+ public void syncExec(Runnable aRunnable)
+ {
+ }
+
+ /**
* Writes an info log entry to JavaInstaller log.
*
* @param aMsg message to be logged
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/InstallerUiFactory.java
--- a/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/InstallerUiFactory.java Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/InstallerUiFactory.java Fri Jul 09 16:35:45 2010 +0300
@@ -50,9 +50,9 @@
installerUi = (InstallerUi)clazz.newInstance();
installerUi.init(aMode, aListener);
}
- catch (Exception ex)
+ catch (Throwable t)
{
- logError("Instantiating " + className + " failed", ex);
+ logError("Instantiating " + className + " failed", t);
}
return installerUi;
}
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/javainstaller.pro
--- a/javamanager/javainstaller/javainstaller.pro Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javainstaller/javainstaller.pro Fri Jul 09 16:35:45 2010 +0300
@@ -16,5 +16,6 @@
TEMPLATE = subdirs
SUBDIRS += installerui/build/javainstallerui.pro
SUBDIRS += installer/build/javainstaller.pro
+SUBDIRS += installcopier/build/javainstallcopier.pro
BLD_INF_RULES.prj_extensions += "$${LITERAL_HASH}include \"javasifplugin/build/bld.inf\""
BLD_INF_RULES.prj_extensions += "prj_extensions"
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/javasifplugin/build/javasifplugin.mmp
--- a/javamanager/javainstaller/javasifplugin/build/javasifplugin.mmp Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javainstaller/javasifplugin/build/javasifplugin.mmp Fri Jul 09 16:35:45 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 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"
@@ -42,6 +42,7 @@
// Sources
SOURCEPATH ../src
+SOURCE asyncwaitcallback.cpp
SOURCE javasifplugin.cpp
SOURCE proxy.cpp
SOURCE resultsserver.cpp
@@ -52,14 +53,14 @@
USERINCLUDE ../inc
USERINCLUDE ../../../../inc
-SYSTEMINCLUDE ../../../../inc
-SYSTEMINCLUDE /epoc32/include/mw/usif
+SYSTEMINCLUDE /epoc32/include/mw/hb/hbwidgets
// Libraries
LIBRARY apgrfx.lib
LIBRARY apmime.lib
LIBRARY ecom.lib
LIBRARY efsrv.lib
+LIBRARY hbwidgets.lib
LIBRARY sif.lib
LIBRARY javacomms.lib
-LIBRARY javaruntimestarterutils.lib
\ No newline at end of file
+LIBRARY javaruntimestarterutils.lib
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/javasifplugin/inc/asyncwaitcallback.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/javasifplugin/inc/asyncwaitcallback.h Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,78 @@
+/*
+* Copyright (c) 2005-2010 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: This class implements general wait object for calling a desired
+* callback function after asynchronous notification
+*
+*/
+
+#ifndef ASYNCWAITCALLBACK_H
+#define ASYNCWAITCALLBACK_H
+
+#include
+
+namespace java
+{
+namespace installer
+{
+
+/**
+ * This class implements wait object for calling a desired
+ * callback function after rendezvous returns specified
+ * reason code from the process that this object is listening to.
+ */
+NONSHARABLE_CLASS(CAsyncWaitCallBack) : public CActive
+{
+public: // Constructors and destructor
+
+ static CAsyncWaitCallBack* NewL(TCallBack aCallBack);
+
+ // Destructor.
+ virtual ~CAsyncWaitCallBack();
+
+public: // From base classes
+
+ // from base class CActive
+
+ void RunL();
+
+ void DoCancel();
+
+public:
+
+ void Wait(RProcess aProcessToListen, TInt aActivatingReasonCode);
+
+private:
+
+ // Constructor.
+ CAsyncWaitCallBack();
+
+ // 2nd phase constructor.
+ void ConstructL(TCallBack aCallBack);
+
+private: // Data
+
+ // Callback member
+ TCallBack iCallBack;
+
+ // When request completes with this status code,
+ // callback is called.
+ TInt iActivatingReasonCode;
+
+ RProcess iProcessToListen;
+};
+
+} // installer
+} // java
+
+#endif // ASYNCWAITCALLBACK_H
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/javasifplugin/inc/javasifplugin.h
--- a/javamanager/javainstaller/javasifplugin/inc/javasifplugin.h Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javainstaller/javasifplugin/inc/javasifplugin.h Fri Jul 09 16:35:45 2010 +0300
@@ -22,8 +22,10 @@
#define JAVASIFPLUGIN_H
#include
+#include
#include
+#include "asyncwaitcallback.h"
#include "f32file.h"
class ResultsServer;
@@ -196,6 +198,11 @@
virtual void CancelOperation();
+ /**
+ * Hides 'preparing installation' dialog.
+ */
+ void HidePrepInstDialogL();
+
private:
/**
@@ -296,6 +303,11 @@
COpaqueNamedParams& aResults,
TRequestStatus& aStatus);
+ /**
+ * Creates 'preparing installation' dialog.
+ */
+ void CreatePrepInstDialogL();
+
private: // Data
RFs mRFs;
@@ -304,6 +316,9 @@
COpaqueNamedParams* mDummyResults;
CComponentInfo* mDummyInfo;
+
+ CHbDeviceNotificationDialogSymbian* mPrepInstDialog;
+ CAsyncWaitCallBack* mWaitToHideDialog;
};
} // Installer
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/javasifplugin/src/asyncwaitcallback.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javainstaller/javasifplugin/src/asyncwaitcallback.cpp Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,84 @@
+/*
+* Copyright (c) 2009-2010 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: This class implements general wait object for calling a desired
+ * callback function after asynchronous notification
+ *
+*/
+
+#include "asyncwaitcallback.h"
+#include "logger.h"
+
+using namespace java::installer;
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+CAsyncWaitCallBack* CAsyncWaitCallBack::NewL(TCallBack aCallBack)
+{
+ CAsyncWaitCallBack* self = new(ELeave) CAsyncWaitCallBack();
+ CleanupStack::PushL(self);
+ self->ConstructL(aCallBack);
+ CleanupStack::Pop(self);
+ return self;
+}
+
+CAsyncWaitCallBack::CAsyncWaitCallBack():
+ CActive(CActive::EPriorityStandard), iActivatingReasonCode(0)
+{
+}
+
+CAsyncWaitCallBack::~CAsyncWaitCallBack()
+{
+}
+
+void CAsyncWaitCallBack::ConstructL(TCallBack aCallBack)
+{
+ iCallBack = aCallBack;
+ CActiveScheduler::Add(this);
+}
+
+void CAsyncWaitCallBack::RunL()
+{
+ // Execute callback only if the request completed with correct
+ // status code
+ if (iStatus == iActivatingReasonCode)
+ {
+ ILOG1(EJavaInstaller,
+ "CAsyncWaitCallBack called with notif code %d",
+ iStatus.Int());
+ iCallBack.CallBack();
+ }
+ else
+ {
+ WLOG1(EJavaInstaller,
+ "CAsyncWaitCallBack was called with unexpected notif code %d, reactivate",
+ iStatus.Int());
+ // Reactivate wait
+ iProcessToListen.Rendezvous(iStatus);
+ SetActive();
+ }
+}
+
+void CAsyncWaitCallBack::DoCancel()
+{
+ iProcessToListen.RendezvousCancel(iStatus);
+}
+
+void CAsyncWaitCallBack::Wait(RProcess aProcessToListen, TInt aActivatingReasonCode)
+{
+ iActivatingReasonCode = aActivatingReasonCode;
+ iProcessToListen = aProcessToListen;
+ iProcessToListen.Rendezvous(iStatus);
+ SetActive();
+}
+
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/javasifplugin/src/javasifplugin.cpp
--- a/javamanager/javainstaller/javasifplugin/src/javasifplugin.cpp Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javainstaller/javasifplugin/src/javasifplugin.cpp Fri Jul 09 16:35:45 2010 +0300
@@ -49,6 +49,7 @@
_LIT(KPrivateDataCage, "\\private\\");
_LIT(KInboxDataCage, "\\private\\1000484b\\");
_LIT(KJavaInstallerProcess, "Installer*");
+_LIT(KJavaInstallCopierProcess, "javainstallcopier.exe");
_LIT(KJavaInstallerDataCage, "\\private\\102033e6\\");
_LIT(KJavaInstallerTmp, "\\private\\102033E6\\installer\\tmp\\");
_LIT(KAnyExtension, ".*");
@@ -93,7 +94,18 @@
// Java Installer is executed with same Uid as Java Runtime
_LIT_SECURE_ID(KJavaInstallerSecureID, KJavaMidpSecureId);
-
+/**
+ * This function is called to hide the 'Preparing Installation' dialog.
+ */
+LOCAL_C TInt HidePrepInstDialog(TAny* aPlugin)
+{
+ CJavaSifPlugin *pPlugin = (CJavaSifPlugin *)aPlugin;
+ if (NULL != pPlugin)
+ {
+ TRAP_IGNORE(pPlugin->HidePrepInstDialogL());
+ }
+ return KErrNone;
+}
// ============================ MEMBER FUNCTIONS ===============================
@@ -126,6 +138,15 @@
delete mDummyInfo;
mDummyInfo = NULL;
+
+ delete mPrepInstDialog;
+ mPrepInstDialog = NULL;
+
+ if (mWaitToHideDialog)
+ {
+ delete mWaitToHideDialog;
+ mWaitToHideDialog = NULL;
+ }
}
CJavaSifPlugin::CJavaSifPlugin()
@@ -139,6 +160,7 @@
mResultsServer = NULL;
mDummyResults = COpaqueNamedParams::NewL(); // codescanner::forgottoputptroncleanupstack
mDummyInfo = CComponentInfo::NewL();
+ mWaitToHideDialog = NULL;
}
void CJavaSifPlugin::GetComponentInfo(
@@ -277,7 +299,16 @@
// Do NOT close rJavaInstaller now -> the caller gets notification when the
// process actually closes.
- mHandlesToClose.Append(rJavaInstaller);
+ err = mHandlesToClose.Append(rJavaInstaller);
+ if ( err )
+ {
+ rJavaInstaller.Close();
+ ELOG1(EJavaInstaller, "CJavaSifPlugin::GetComponentInfo mHandles"
+ "ToClose.Append failed with error %d", err);
+ TRequestStatus *statusPtr(&aStatus);
+ User::RequestComplete(statusPtr, err);
+ return;
+ }
}
void CJavaSifPlugin::Install(
@@ -352,6 +383,17 @@
commandLine.Append(KSilent);
}
+ else
+ {
+ // Uncomment this to enable 'preparing installation' dialog.
+ //TRAP(err, CreatePrepInstDialogL());
+ //if (KErrNone != err)
+ //{
+ // WLOG1(EJavaInstaller,
+ // "CJavaSifPlugin::Install Creating preparing installation dialog failed, err=%d",
+ // err);
+ //}
+ }
BuildInstallCommandLine(commandLine, aArguments);
@@ -440,11 +482,41 @@
return;
}
+ if (!silentInstall)
+ {
+ TRAP(err, mWaitToHideDialog =
+ CAsyncWaitCallBack::NewL(TCallBack(HidePrepInstDialog, this)));
+ if (KErrNone == err)
+ {
+ // The active object will wait until JavaInstaller process calls Rendezvous.
+ // If JavaInstaller specifies reason code EJavaInstaller, then
+ // the active object will call callback function that will hide the
+ // 'Preparing installation' dialog. If reason code is not EJavaInstaller,
+ // the wait object will automatically wait for the next rendezvous.
+ mWaitToHideDialog->Wait( rJavaInstaller, EJavaInstaller );
+ }
+ else
+ {
+ ELOG1(EJavaInstaller, "CJavaSifPlugin::Install: Creating "
+ "mWaitToHideDialog failed, err %d", err);
+ }
+ }
rJavaInstaller.Resume();
// Do NOT close rJavaInstaller now -> the caller gets notification when the
// process actually closes.
- mHandlesToClose.Append(rJavaInstaller);
+ err = mHandlesToClose.Append(rJavaInstaller);
+ if ( err )
+ {
+ rJavaInstaller.Close();
+ ELOG1(EJavaInstaller, "CJavaSifPlugin::Install mHandles"
+ "ToClose.Append failed with error %d", err);
+ TRAP_IGNORE(aResults.AddIntL(KSifOutParam_ErrCategory, ELowMemory));
+ TRequestStatus *statusPtr(&aStatus);
+ User::RequestComplete(statusPtr, err);
+ return;
+ }
+
}
void CJavaSifPlugin::Uninstall(
@@ -539,7 +611,17 @@
// Do NOT close rJavaInstaller now -> the caller gets notification when the
// process actually closes.
- mHandlesToClose.Append(rJavaInstaller);
+ err = mHandlesToClose.Append(rJavaInstaller);
+ if ( err )
+ {
+ rJavaInstaller.Close();
+ ELOG1(EJavaInstaller, "CJavaSifPlugin::Uninstall mHandles"
+ "ToClose.Append failed with error %d", err);
+ TRAP_IGNORE(aResults.AddIntL(KSifOutParam_ErrCategory, ELowMemory));
+ TRequestStatus *statusPtr(&aStatus);
+ User::RequestComplete(statusPtr, err);
+ return;
+ }
}
void CJavaSifPlugin::Activate(
@@ -659,18 +741,36 @@
// to Java Installer tmp dir.)
TParse fp;
mRFs.Parse(aFileName, fp);
-
- CFileMan* fm = CFileMan::NewL(mRFs);
TFileName filesToCopy = fp.DriveAndPath();
filesToCopy.Append(fp.Name());
filesToCopy.Append(KAnyExtension);
- TInt err = fm->Copy(filesToCopy, KJavaInstallerTmp, CFileMan::ERecurse);
- delete fm;
- if (KErrNone != err)
+
+ // Use JavaInstallCopier.exe to copy the files.
+ RProcess rJavaInstallCopier;
+ TInt err = rJavaInstallCopier.Create(
+ KJavaInstallCopierProcess, filesToCopy);
+ if (KErrNone == err)
{
+ TRequestStatus status;
+ rJavaInstallCopier.Logon(status);
+ rJavaInstallCopier.Resume();
+ User::WaitForRequest(status); // codescanner::userWaitForRequest
+ err = rJavaInstallCopier.ExitReason();
+ rJavaInstallCopier.Close();
+ if (KErrNone != err)
+ {
+ ELOG1(EJavaInstaller,
+ "CJavaSifPlugin::CopyFilesIfNeededL: copying files "
+ "to JavaInstaller data cage failed, err=%d", err);
+ User::Leave(err);
+ }
+ }
+ else
+ {
+ rJavaInstallCopier.Close();
ELOG1(EJavaInstaller,
- "CJavaSifPlugin::CopyFilesIfNeededL: copying files "
- "to Java Installer data cage failed, err=%d", err);
+ "CJavaSifPlugin::CopyFilesIfNeededL: starting "
+ "JavaInstallCopier failed, err=%d", err);
User::Leave(err);
}
@@ -803,13 +903,8 @@
}
// AskUser is not supported
-
-
- // TODO: activate this code block when KSifInParam_UpgradeData has been
- // defined in sifcommon.h
-/*
- // KSifInParam_UpgradeData Yes/No/AskUser -> -upgrade_data=yes|no
- intValue = GetPositiveIntParam(KSifInParam_UpgradeData, aArguments);
+ // KSifInParam_AllowUpgradeData Yes/No/AskUser -> -upgrade_data=yes|no
+ intValue = GetPositiveIntParam(KSifInParam_AllowUpgradeData, aArguments);
if (intValue == 0) // Yes
{
aCommandLine.Append(KUpgradeData);
@@ -821,7 +916,6 @@
aCommandLine.Append(KNo);
}
// AskUser is not supported
-*/
// KSifInParam_AllowUntrusted Yes/No/AskUser -> -untrusted=yes|no
intValue = GetPositiveIntParam(KSifInParam_AllowUntrusted, aArguments);
@@ -1101,5 +1195,34 @@
return EFalse;
}
+/**
+ * Creates 'preparing installation' dialog.
+ */
+void CJavaSifPlugin::CreatePrepInstDialogL()
+{
+ ILOG(EJavaInstaller, "CJavaSifPlugin::CreatePrepInstDialogL creating dialog");
+ mPrepInstDialog = CHbDeviceNotificationDialogSymbian::NewL();
+ _LIT(KPrepInstText, "Preparing installation...");
+ mPrepInstDialog->SetTitleL(KPrepInstText);
+ mPrepInstDialog->SetTimeout(20*1000); // ms
+ mPrepInstDialog->ShowL();
+ ILOG(EJavaInstaller, "CJavaSifPlugin::CreatePrepInstDialogL dialog created");
+}
+
+void CJavaSifPlugin::HidePrepInstDialogL()
+{
+ ILOG(EJavaInstaller, "CJavaSifPlugin::HidePrepInstDialogL hiding dialog");
+ // Stop further timed calls
+ if (mWaitToHideDialog)
+ {
+ mWaitToHideDialog->Cancel();
+ }
+ // Close wait dialog.
+ if (mPrepInstDialog)
+ {
+ mPrepInstDialog->Close();
+ }
+ ILOG(EJavaInstaller, "CJavaSifPlugin::HidePrepInstDialogL dialog hidden");
+}
// End of File
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/javasifplugin/tsrc/src.s60/main.cpp
--- a/javamanager/javainstaller/javasifplugin/tsrc/src.s60/main.cpp Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javainstaller/javasifplugin/tsrc/src.s60/main.cpp Fri Jul 09 16:35:45 2010 +0300
@@ -591,7 +591,13 @@
// TEMP TEST
// This thread does not have active scheduler,
// create and install it
- CActiveScheduler* as = new(ELeave) CActiveScheduler();
+ CActiveScheduler* as = new CActiveScheduler();
+ if (NULL == as)
+ {
+ ELOG(EJavaConverters,
+ "testsifapi: cancelFunction: Cannot create active scheduler");
+ return 1;
+ }
CActiveScheduler::Install(as);
// Wait for 6 seconds so that the operation to be cancelled
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javainstaller/subsystem.mk
--- a/javamanager/javainstaller/subsystem.mk Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javainstaller/subsystem.mk Fri Jul 09 16:35:45 2010 +0300
@@ -23,9 +23,14 @@
ifdef SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK
NONQTSUBSYSTEMS = javasifplugin/build
SYMBIAN_ONLY = javasifplugin/build
+ COMPONENTS += installcopier/build
else
NONQTSUBSYSTEMS = appinstuiplugin/build
SYMBIAN_ONLY = appinstuiplugin/build
+ifndef RD_JAVA_S60_RELEASE_5_0_IAD
+ NONQTSUBSYSTEMS += iconsizenotifplugin/build
+ SYMBIAN_ONLY += iconsizenotifplugin/build
+endif
endif
LINUX_ONLY =
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javamanager.pro
--- a/javamanager/javamanager.pro Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javamanager.pro Fri Jul 09 16:35:45 2010 +0300
@@ -18,6 +18,7 @@
SUBDIRS += debugapi/build/debugapi.pro
SUBDIRS += javalauncher/build/javalauncher.pro
SUBDIRS += javaupgradeapp/build/javaupgradeapp.pro
+SUBDIRS += javasettings_qt/build/javaapplicationsettingsview.pro
SUBDIRS += javacaptain
SUBDIRS += javainstaller
SUBDIRS += javaregistry
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javarecognizer/build/recjar.mmp
--- a/javamanager/javarecognizer/build/recjar.mmp Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javarecognizer/build/recjar.mmp Fri Jul 09 16:35:45 2010 +0300
@@ -32,7 +32,11 @@
// Use bytepair compression to enable code paging
PAGED
+APP_LAYER_SYSTEMINCLUDE
+
USERINCLUDE ../inc
+USERINCLUDE ../../../inc
+
SOURCEPATH ../src
SOURCE recjar.cpp
@@ -40,9 +44,6 @@
TARGET recjar.rsc
END
-SYSTEMINCLUDE ../../../inc
-APP_LAYER_SYSTEMINCLUDE
-SYSTEMINCLUDE /epoc32/include/ecom
LIBRARY euser.lib apmime.lib efsrv.lib
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javaregistry/build/eabi/javaregistryclientu.def
--- a/javamanager/javaregistry/build/eabi/javaregistryclientu.def Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javaregistry/build/eabi/javaregistryclientu.def Fri Jul 09 16:35:45 2010 +0300
@@ -209,4 +209,12 @@
_ZNK4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry17UsedUserDiskSpaceEv @ 208 NONAME
_ZNK4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry14IsPreinstalledEv @ 209 NONAME
_ZNK4Java25CJavaRegistryPackageEntry14IsPreinstalledEv @ 210 NONAME
+ _ZN4Java14CJavaAttributeD0Ev @ 211 NONAME
+ _ZN4Java14CJavaAttributeD1Ev @ 212 NONAME
+ _ZN4Java14CJavaAttributeD2Ev @ 213 NONAME
+ _ZN4Java18CJavaRegistryEntryD0Ev @ 214 NONAME
+ _ZN4Java18CJavaRegistryEntryD1Ev @ 215 NONAME
+ _ZN4Java18CJavaRegistryEntryD2Ev @ 216 NONAME
+ _ZThn4_N4Java14CJavaAttributeD0Ev @ 217 NONAME
+ _ZThn4_N4Java14CJavaAttributeD1Ev @ 218 NONAME
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javaregistry/client/src/writeablejavaregistry.cpp
--- a/javamanager/javaregistry/client/src/writeablejavaregistry.cpp Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javaregistry/client/src/writeablejavaregistry.cpp Fri Jul 09 16:35:45 2010 +0300
@@ -363,9 +363,17 @@
if (KErrNotFound == err)
{
+ // reset the error flag
+ err = KErrNone;
if (IsPresent((*iter)))
{
- aUids.Append(uid);
+ err = aUids.Append(uid);
+ }
+ if (err)
+ {
+ ELOG1(EJavaStorage, "Failed to add Uid to container. "
+ "( error code = %d )", err);
+
}
}
}
@@ -414,7 +422,7 @@
}
}
}
- catch (ExceptionBase)
+ catch (ExceptionBase& ee)
{
ELOG1WSTR(EJavaStorage, "MediaId conversion failed: '%s'", value);
}
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javaregistry/client/src/writeablejavaregistryentry.cpp
--- a/javamanager/javaregistry/client/src/writeablejavaregistryentry.cpp Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javaregistry/client/src/writeablejavaregistryentry.cpp Fri Jul 09 16:35:45 2010 +0300
@@ -379,7 +379,7 @@
regAttr = CJavaAttribute::NewL(
nameBuf->Des(), valueBuf->Des(), trusted);
- iAttributes.Append(regAttr);
+ iAttributes.AppendL(regAttr);
nameBuf.reset(0);
valueBuf.reset(0);
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javaregistry/legacy/server/src/javaregstore.cpp
--- a/javamanager/javaregistry/legacy/server/src/javaregstore.cpp Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javaregistry/legacy/server/src/javaregstore.cpp Fri Jul 09 16:35:45 2010 +0300
@@ -543,7 +543,7 @@
{
if (IsPresentL((*iter)))
{
- aUids.Append(uid);
+ aUids.AppendL(uid);
}
}
}
@@ -765,7 +765,7 @@
TInt err = uidToTUid(appUid, converted);
if (KErrNone == err)
{
- uids.Append(converted);
+ uids.AppendL(converted);
}
else
{
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javaregistry/tsrc/data/HelloWorld2.jar
Binary file javamanager/javaregistry/tsrc/data/HelloWorld2.jar has changed
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javasettings/appsettingsview_qt/build/javaapplicationsettingsview.pro
--- a/javamanager/javasettings/appsettingsview_qt/build/javaapplicationsettingsview.pro Tue Jul 06 20:36:19 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-#
-# Copyright (c) 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:
-#
-TEMPLATE = lib
-TARGET = javaapplicationsettingsview
-CONFIG += qt hb stl plugin
-LIBS += -ljavastorage -lcmapplsettingsui -ljavaconnectionmanager -lqtbearer -ljavautils
-TRANSLATIONS = javaruntimeapplicationsettings.ts
-
-INCLUDEPATH += ../inc ../../../../inc
-SOURCES += ..\src\javaapplicationsettingsview.cpp ..\src\javaapplicationsettingsview_p.cpp ..\src\javaapplicationsettings.cpp
-HEADERS += ..\src\javaapplicationsettingsview.h ..\src\javaapplicationsettingsview_p.h ..\src\javaapplicationsettings.h
-
-symbian : plugin {
- TARGET.EPOCALLOWDLLDATA = 1
- TARGET.CAPABILITY = ALL -TCB
- PLUGIN_STUB_PATH = /resource/qt/plugins/appsettings
- pluginstub.sources = $${TARGET}.dll
- pluginstub.path = $$PLUGIN_STUB_PATH
- DEPLOYMENT += pluginstub
- qtplugins.path = $$PLUGIN_STUB_PATH
- qtplugins.sources += qmakepluginstubs/$${TARGET}.qtplugin
- for(qtplugin, qtplugins.sources):BLD_INF_RULES.prj_exports += "./$$qtplugin z:$$qtplugins.path/$$basename(qtplugin)"
-
- include(../../../../build/symbian_uids.pri)
-
-}
-
-# Workaround for RVCT 4.0 QT/Symbian incmpatibility
-MMP_RULES -= $$MMP_RULES_DONT_EXPORT_ALL_CLASS_IMPEDIMENTA
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javasettings/appsettingsview_qt/inc/applicationsettingsview.h
--- a/javamanager/javasettings/appsettingsview_qt/inc/applicationsettingsview.h Tue Jul 06 20:36:19 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
-/*
-* Copyright (c) 2008 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:
-*
-*/
-#ifndef APPLICATIONSETTINGSVIEW_H
-#define APPLICATIONSETTINGSVIEW_H
-
-#include
-#include
-
-class ApplicationSettingsView: public HbView
-{
-public:
-
- /*
- * Base constructor
- */
- explicit ApplicationSettingsView() : HbView() {}
-
- /*
- * Destructor
- */
- virtual ~ApplicationSettingsView() {}
-
-public slots:
- /*
- * Initializas the view with application specific info
- *
- * @param aAppUid Identifier for the application
- *
- */
- void initialize(const QString& aAppUid);
-
-};
-
-Q_DECLARE_INTERFACE(ApplicationSettingsView,
- "com.nokia.ApplicationLibrary.ApplicationSettingsView/1.0");
-
-#endif // APPLICATIONSETTINGSVIEW_H
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javasettings/appsettingsview_qt/src/javaapplicationsettings.cpp
--- a/javamanager/javasettings/appsettingsview_qt/src/javaapplicationsettings.cpp Tue Jul 06 20:36:19 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,212 +0,0 @@
-/*
-* Copyright (c) 2008 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:
-*
-*/
-#include "javaapplicationsettings.h"
-
-JavaApplicationSettings::JavaApplicationSettings():
- iName(QString("")),
- iValues(QStringList()),
- iId(0), iCurrentValue(0),
- iColumnName(L""),
- iTableName(""),
- iStorageValuesFilter(L""),
- iValuesColumnName(L""),
- iFilterColumnName(L""),
- iFilterColumnValue(L""),
- connectedToUi(false)
-{
-}
-
-JavaApplicationSettings::JavaApplicationSettings(const QString& aName, const QStringList& aValues):
- iName(aName),
- iValues(aValues),
- iId(0),
- iCurrentValue(0),
- iColumnName(L""),
- iTableName(""),
- iStorageValuesFilter(L""),
- iValuesColumnName(L""),
- iFilterColumnName(L""),
- iFilterColumnValue(L""),
- connectedToUi(false)
-{
-}
-
-JavaApplicationSettings::JavaApplicationSettings(const QString& aName, const QStringList& aValues, const std::wstring& aColumnName, const std::string& aTableName, const std::vector& aStorageValues):
- iName(aName),
- iValues(aValues),
- iId(0),
- iCurrentValue(0),
- iColumnName(aColumnName),
- iTableName(aTableName),
- iStorageValues(aStorageValues),
- iStorageValuesFilter(L""),
- iValuesColumnName(L""),
- iFilterColumnName(L""),
- iFilterColumnValue(L""),
- connectedToUi(false)
-{
-}
-
-JavaApplicationSettings::JavaApplicationSettings(const QString& aName, const QStringList& aValues, const std::wstring& aColumnName, const std::string& aTableName, const std::vector& aStorageValues, const std::wstring& aFilterColumnName, const std::wstring& aFilterColumnValue, const std::wstring& aValuesColumnName):
- iName(aName),
- iValues(aValues),
- iId(0),
- iCurrentValue(0),
- iColumnName(aColumnName),
- iTableName(aTableName),
- iStorageValues(aStorageValues),
- iStorageValuesFilter(L""),
- iValuesColumnName(aValuesColumnName),
- iFilterColumnName(aFilterColumnName),
- iFilterColumnValue(aFilterColumnValue),
- connectedToUi(false)
-{
-}
-
-void JavaApplicationSettings::setCurrentValue(int aCurrentValue)
-{
- iCurrentValue = aCurrentValue;
-}
-
-void JavaApplicationSettings::connectToUi()
-{
- connectedToUi = true;
-}
-
-void JavaApplicationSettings::disconnectFromUi()
-{
- connectedToUi = false;
-}
-
-bool JavaApplicationSettings::isConnectedToUi()
-{
- return connectedToUi;
-}
-
-int JavaApplicationSettings::getCurrentValue()
-{
- return iCurrentValue;
-}
-
-const QString& JavaApplicationSettings::getValue(int aValueIndex)
-{
- static const QString null;
- if (aValueIndex >= 0 && aValueIndex < iValues.size())
- return iValues[aValueIndex];
- return null;
-}
-
-void JavaApplicationSettings::removeValue(int aValueIndex)
-{
- if (aValueIndex >= 0 && aValueIndex < iStorageValues.size())
- iStorageValues.erase(iStorageValues.begin() + aValueIndex);
- if (aValueIndex >= 0 && aValueIndex < iValues.size())
- iValues.erase(iValues.begin() + aValueIndex);
-}
-
-int JavaApplicationSettings::getValue(const QString& aValue)
-{
- int value = -1;
- for (int i = 0; i < iValues.size(); i++)
- {
- if (iValues[i] == aValue)
- {
- return i;
- }
- }
- return value;
-}
-
-void JavaApplicationSettings::setId(HbDataFormModelItem * aId)
-{
- iId = aId;
-}
-
-HbDataFormModelItem * JavaApplicationSettings::getId()
-{
- return iId;
-}
-
-const QString& JavaApplicationSettings::getName() const
-{
- return iName;
-}
-
-const QStringList& JavaApplicationSettings::getValues() const
-{
- return iValues;
-}
-
-const QList& JavaApplicationSettings::getHighRiskList() const
-{
- return iHighRiskList;
-}
-
-void JavaApplicationSettings::setHighRiskList(const QList& aHighRiskList)
-{
- iHighRiskList = aHighRiskList;
-}
-
-const QList& JavaApplicationSettings::getMutuallyExclusiveList() const
-{
- return iMutuallyExclusiveList;
-}
-
-void JavaApplicationSettings::setMutuallyExclusiveList(const QList& aMutuallyExclusiveList)
-{
- iMutuallyExclusiveList = aMutuallyExclusiveList;
-}
-
-const std::wstring& JavaApplicationSettings::getColumnName()
-{
- return iColumnName;
-}
-
-const std::wstring& JavaApplicationSettings::getValuesColumnName()
-{
- return iValuesColumnName;
-}
-
-const std::string& JavaApplicationSettings::getTableName()
-{
- return iTableName;
-}
-
-const std::vector& JavaApplicationSettings::getStorageValues()
-{
- return iStorageValues;
-}
-
-void JavaApplicationSettings::setStorageValuesFilter(const std::wstring& aStorageValuesFilter)
-{
- iStorageValuesFilter = aStorageValuesFilter;
-}
-
-const std::wstring& JavaApplicationSettings::getStorageValuesFilter()
-{
- return iStorageValuesFilter;
-}
-
-const std::wstring& JavaApplicationSettings::getFilterColumnName()
-{
- return iFilterColumnName;
-}
-
-const std::wstring& JavaApplicationSettings::getFilterColumnValue()
-{
- return iFilterColumnValue;
-}
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javasettings/appsettingsview_qt/src/javaapplicationsettings.h
--- a/javamanager/javasettings/appsettingsview_qt/src/javaapplicationsettings.h Tue Jul 06 20:36:19 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,97 +0,0 @@
-/*
-* Copyright (c) 2008 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:
-*
-*/
-#ifndef JAVAAPPLICATIONSETTINGS_H
-#define JAVAAPPLICATIONSETTINGS_H
-
-#include
-#include
-#include
-#include
-#include
-#include
-
-class JavaApplicationSettings
-{
-public:
-
- struct NetworkConnection
- {
- QString name;
- uint id;
- CmApplSettingsUi::SelectionType type;
- };
-
- JavaApplicationSettings(const QString&,
- const QStringList&);
- JavaApplicationSettings(const QString&,
- const QStringList&,
- const std::wstring&,
- const std::string&,
- const std::vector&);
- JavaApplicationSettings(const QString&,
- const QStringList&,
- const std::wstring&,
- const std::string&,
- const std::vector&,
- const std::wstring&,
- const std::wstring&,
- const std::wstring&);
- JavaApplicationSettings();
-
- const QString& getName() const;
- const QStringList& getValues() const;
- void setCurrentValue(int);
- int getCurrentValue();
- const QString& getValue(int);
- int getValue(const QString&);
- void removeValue(int);
- void setId(HbDataFormModelItem *);
- HbDataFormModelItem * getId();
- const QList& getHighRiskList() const;
- void setHighRiskList(const QList&);
- const QList& getMutuallyExclusiveList() const;
- void setMutuallyExclusiveList(const QList&);
- const std::wstring& getColumnName();
- const std::string& getTableName();
- const std::wstring& getValuesColumnName();
- const std::wstring& getFilterColumnName();
- const std::wstring& getFilterColumnValue();
- const std::vector& getStorageValues();
- void setStorageValuesFilter(const std::wstring&);
- const std::wstring& getStorageValuesFilter();
- void connectToUi();
- void disconnectFromUi();
- bool isConnectedToUi();
-
-private:
- QString iName;
- QStringList iValues;
- HbDataFormModelItem * iId;
- QList iHighRiskList;
- QList iMutuallyExclusiveList;
- int iCurrentValue;
- std::wstring iColumnName;
- std::string iTableName;
- std::vector iStorageValues;
- std::wstring iStorageValuesFilter;
- std::wstring iValuesColumnName;
- std::wstring iFilterColumnName;
- std::wstring iFilterColumnValue;
- bool connectedToUi;
-};
-
-#endif // JAVAAPPLICATIONSETTINGS_H
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javasettings/appsettingsview_qt/src/javaapplicationsettingsview.cpp
--- a/javamanager/javasettings/appsettingsview_qt/src/javaapplicationsettingsview.cpp Tue Jul 06 20:36:19 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-/*
-* Copyright (c) 2008 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:
-*
-*/
-#include "javaapplicationsettingsview.h"
-#include "javaapplicationsettingsview_p.h"
-
-JavaApplicationSettingsView::JavaApplicationSettingsView() :
- ApplicationSettingsView()
-{
-}
-
-void JavaApplicationSettingsView::initialize(const QString& aApplication)
-{
- d_ptr = new JavaApplicationSettingsViewPrivate(aApplication);
- d_ptr->init(this);
-}
-
-JavaApplicationSettingsView::~JavaApplicationSettingsView()
-{
- delete d_ptr;
-}
-
-Q_EXPORT_PLUGIN2(javaapplicationsettingsview, JavaApplicationSettingsView);
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javasettings/appsettingsview_qt/src/javaapplicationsettingsview.h
--- a/javamanager/javasettings/appsettingsview_qt/src/javaapplicationsettingsview.h Tue Jul 06 20:36:19 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
-/*
-* Copyright (c) 2008 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:
-*
-*/
-#ifndef JAVAAPPLICATIONSETTINGSVIEW_H
-#define JAVAAPPLICATIONSETTINGSVIEW_H
-
-#include "applicationsettingsview.h"
-
-class JavaApplicationSettingsViewPrivate;
-
-class JavaApplicationSettingsView: public ApplicationSettingsView
-{
- Q_OBJECT
- Q_INTERFACES(ApplicationSettingsView)
-
-public:
- explicit JavaApplicationSettingsView();
- virtual ~JavaApplicationSettingsView();
-
-public slots:
- void initialize(const QString&);
-
-signals:
- void aboutToClose();
-
-private:
- Q_DISABLE_COPY(JavaApplicationSettingsView)
- Q_DECLARE_PRIVATE_D(d_ptr, JavaApplicationSettingsView)
- Q_PRIVATE_SLOT(d_func(), void _q_settingsChanged(const QString &newValue))
- Q_PRIVATE_SLOT(d_func(), void _q_settingsChanged(bool))
- Q_PRIVATE_SLOT(d_func(), void _q_dataItemDisplayed(const QModelIndex))
-
-private:
- JavaApplicationSettingsViewPrivate * d_ptr;
-};
-
-
-#endif // JAVAAPPLICATIONSETTINGSVIEW_H
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javasettings/appsettingsview_qt/src/javaapplicationsettingsview_p.cpp
--- a/javamanager/javasettings/appsettingsview_qt/src/javaapplicationsettingsview_p.cpp Tue Jul 06 20:36:19 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1104 +0,0 @@
-/*
-* Copyright (c) 2008 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:
-*
-*/
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-#include "javaapplicationsettings.h"
-#include "javaapplicationsettingsview.h"
-#include "javaapplicationsettingsview_p.h"
-#include "connectionmanager.h"
-#include "javacommonutils.h"
-
-#include "securitystoragedatadefs.h"
-#include "javastoragenames.h"
-
-QTM_USE_NAMESPACE
-
-using namespace java::storage;
-using namespace java::util;
-using namespace std;
-
-const wchar_t ON_SCREEN_KEYPAD_VALUE_NO[] = L"0";
-const wchar_t ON_SCREEN_KEYPAD_VALUE_GAMEACTIONS[] = L"1";
-const wchar_t ON_SCREEN_KEYPAD_VALUE_NAVIGATION[] = L"2";
-
-JavaApplicationSettingsViewPrivate::JavaApplicationSettingsViewPrivate(const QString& aJavaAppUid):
- mainForm(0), model(0), generalSettingsGroup(0), securitySettingsGroup(0), netConnSettingsUi(0), asyncToSyncCallEventLoop(0), secWarningAccepted(false), defaultConnId(0)
-{
- // init storage
- iStorage.reset(JavaStorage::createInstance());
- try
- {
- iStorage->open();
- }
- catch (JavaStorageException& aJse) {}
-
- QTranslator translator;
- // load the correct translation of the localized strings for the cmmanager.
- // Load this one first since it contains the smallest amount of strings
- // (so it's ok to be searched last)
- installTranslator("cmapplsettingsui");
- installTranslator("cmmanager");
- // load the correct translation of the localized strings for the java settings
- // Current solution reads it from Z only (this does not work with IAD)
- // -> check if translator can handle path without drive letter (e.g. the resource
- // is loaded from the same drive where the DLL is loaded)
- installTranslator("javaruntimeapplicationsettings");
- // init strings
- BLANKET = QString(hbTrId("txt_java_sett_setlabel_permission_val_blanket"));
- SESSION = QString(hbTrId("txt_java_sett_setlabel_permission_val_session"));
- ONESHOT = QString(hbTrId("txt_java_sett_setlabel_permission_val_oneshot"));
- DENIED = QString(hbTrId("txt_java_sett_setlabel_permission_val_no"));
- SECURITY_LEVEL = QString(hbTrId("txt_java_sett_setlabel_security_level"));
- USER_DEFINED = QString(hbTrId("txt_java_sett_setlabel_security_level_val_user_defined"));
- SENSITIVE_SETTINGS = QString(hbTrId("txt_java_sett_info_query_perm_sec"));
- SENSITIVE_SETTINGS_NET_USAGE = QString(hbTrId("txt_java_sett_info_query_perm_net"));
- MUTUALLY_EXCLUSIVE_SETTINGS = QString(hbTrId("txt_java_sett_info_query_perm_warn"));
- OK = QString(hbTrId("txt_java_sett_button_settings_ok"));
- CANCEL = QString(hbTrId("txt_java_sett_button_settings_cancel"));
- SECURITY_WARNING_TITLE = QString(hbTrId("txt_java_sett_title_note_security_warn"));
- NET_ACCESS = QString(hbTrId("txt_java_sett_setlabel_net_access"));
- LOW_LEVEL_NET_ACCESS = QString(hbTrId("txt_java_sett_setlabel_low_level_net_access"));
- NETWORK_CONNECTION = QString(hbTrId("txt_occ_title_network_connection"));
- SETTINGS_TITLE = QString(hbTrId("txt_java_sett_title_settings"));
- SETTINGS_NOT_AVAILABLE = QString(hbTrId("txt_java_sett_info_settings_not_available"));
-
- // init the suite UID from the application UID
- readSuiteUid(aJavaAppUid);
- if (iSuiteUid.size() <= 0)
- {
- return;
- }
-
- // init access point settings ui
- netConnSettingsUi = new CmApplSettingsUi(this);
- asyncToSyncCallEventLoop = new QEventLoop();
-
- // read all settings
- readAllSettings();
-
- // init form
- mainForm = new HbDataForm();
- mainForm->setHeading(QString::fromStdWString(readFromStorage(PACKAGE_NAME, L"", L"", APPLICATION_PACKAGE_TABLE)));
- model = new HbDataFormModel();
-
- // init settings
- generalSettingsGroup = model->appendDataFormGroup(
- QString(hbTrId("txt_java_sett_subtitle_general")), model->invisibleRootItem());
- initSettings(generalSettings, generalSettingsGroup);
- // append the security settings only if there are any user settings
- if (extraSettings.size() > 0)
- {
- securitySettingsGroup = model->appendDataFormGroup(
- QString(hbTrId("txt_java_sett_subtitle_security")), model->invisibleRootItem());
- initSettings(securitySettings, securitySettingsGroup);
-
- // if security warnings is user defined -> add the extra settings, expand
- if (securitySettings[0].getCurrentValue() == 1)
- {
- securityWarningsChanged(USER_DEFINED);
- }
- }
-
- // link form and model
- mainForm->setModel(model);
- mainForm->setExpanded(model->indexFromItem(generalSettingsGroup), true);
- if (extraSettings.size() > 0)
- {
- mainForm->setExpanded(model->indexFromItem(securitySettingsGroup), (securitySettings[0].getCurrentValue() == 1));
- }
-}
-
-void JavaApplicationSettingsViewPrivate::init(JavaApplicationSettingsView* aPublicView)
-{
- iPublicView = aPublicView;
-
- if (mainForm)
- {
- // do the connect for the main form
- iPublicView->connect(mainForm, SIGNAL(itemShown(const QModelIndex)),
- iPublicView, SLOT(_q_dataItemDisplayed(const QModelIndex)));
-
- // set the form as view's widget
- iPublicView->setWidget(mainForm);
- }
- else
- {
- // no settings available
- HbLabel* label = new HbLabel(SETTINGS_NOT_AVAILABLE, iPublicView);
- label->setAlignment(Qt::AlignVCenter);
- }
-
- // set title
- iPublicView->setTitle(SETTINGS_TITLE);
-}
-
-JavaApplicationSettingsViewPrivate::~JavaApplicationSettingsViewPrivate()
-{
- delete mainForm;
- delete model;
- delete netConnSettingsUi;
- delete asyncToSyncCallEventLoop;
- foreach (QTranslator *translator, translators) {
- qApp->removeTranslator(translator);
- }
- qDeleteAll(translators);
- translators.clear();
-}
-
-void JavaApplicationSettingsViewPrivate::readAllSettings()
-{
- // general settings
- QStringList settingsValues;
- vector storageValues;
- if (!findFromStorage(VALUE, NAME, L"Nokia-MIDlet-On-Screen-Keypad", APPLICATION_PACKAGE_ATTRIBUTES_TABLE))
- {
- // if the on screen keypad is predefined, it should not be changable by user
- // -> right now it is not added to settings list. It should be changed so that
- // the setting should not be editable by user
- settingsValues< localizedSettingsNames;
- localizedSettingsNames[QString::fromStdWString(NET_ACCESS_SETTINGS)] = NET_ACCESS;
- localizedSettingsNames[QString::fromStdWString(LOW_LEVEL_NET_ACCESS_SETTINGS)] = LOW_LEVEL_NET_ACCESS;
- localizedSettingsNames[QString::fromStdWString(MESSAGING_SETTINGS)] = QString(hbTrId("txt_java_sett_setlabel_messaging"));
- localizedSettingsNames[QString::fromStdWString(RESTRICTED_MESSAGING_SETTINGS)] = QString(hbTrId("txt_java_sett_setlabel_restricted_messaging"));
- localizedSettingsNames[QString::fromStdWString(CALL_CONTROL_SETTINGS)] = QString(hbTrId("txt_java_sett_setlabel_call_control"));
- localizedSettingsNames[QString::fromStdWString(LOCAL_CONNECTIVITY_SETTINGS)] = QString(hbTrId("txt_java_sett_setlabel_local_conn"));
- localizedSettingsNames[QString::fromStdWString(MULTIMEDIA_RECORDING_SETTINGS)] = QString(hbTrId("txt_java_sett_setlabel_mm_record"));
- localizedSettingsNames[QString::fromStdWString(WRITE_USER_DATA_ACCESS_SETTINGS)] = QString(hbTrId("txt_java_sett_setlabel_write_data"));
- localizedSettingsNames[QString::fromStdWString(READ_USER_DATA_ACCESS_SETTINGS)] = QString(hbTrId("txt_java_sett_setlabel_read_data"));
- localizedSettingsNames[QString::fromStdWString(LOCATION_SETTINGS)] = QString(hbTrId("txt_java_sett_setlabel_location"));
- localizedSettingsNames[QString::fromStdWString(LANDMARK_SETTINGS)] = QString(hbTrId("txt_java_sett_setlabel_landmarks"));
- localizedSettingsNames[QString::fromStdWString(AUTHENTICATION_SETTINGS)] = QString(hbTrId("txt_java_sett_setlabel_auth"));
- localizedSettingsNames[QString::fromStdWString(SMART_CARD_COMMUNICATION_SETTINGS)] = QString(hbTrId("txt_java_sett_setlabel_smartcard"));
- localizedSettingsNames[QString::fromStdWString(APPLICATION_AUTO_INVOCATION_SETTINGS)] = QString(hbTrId("txt_java_sett_setlabel_app_auto_invoc"));
- localizedSettingsNames[QString::fromStdWString(BROADCAST_SETTINGS)] = QString(hbTrId("txt_java_sett_setlabel_broadcast"));
- localizedSettingsNames[QString::fromStdWString(NFC_WRITE_ACCESS_SETTINGS)] = QString(hbTrId("txt_java_sett_setlabel_nfc_write_access"));
- localizedSettingsNames[QString::fromStdWString(URL_START_SETTINGS)] = QString(hbTrId("txt_java_sett_setlabel_url_start"));
- vector allSecuritySettings = readFromStorage(FUNCTION_GROUP, MIDP_FUNC_GRP_SETTINGS_TABLE, MIDP_PERMISSIONS_TABLE);
- // sort the security settings according to how they should be displayed
- std::sort(allSecuritySettings.begin(), allSecuritySettings.end(), AscendingSort());
- QHash settingsIndexes;
- for(int i=0; i highRiskList;
- QStringList highRiskSettingsNames;
- highRiskSettingsNames
- < mutuallyExclusiveList;
- QStringList mutuallyExclusiveSettingsNames;
- mutuallyExclusiveSettingsNames
- <& settings, HbDataFormModelItem * parent)
-{
- for (int i=0; iappendDataFormItem(
- HbDataFormModelItem::ToggleValueItem,
- settings[i].getName(), parent);
- appSettings->setContentWidgetData(QString("text"), settings[i].getValues()[0]);
- appSettings->setContentWidgetData(QString("additionalText"), settings[i].getValues()[0]);
- break;
- case 2:
- appSettings = model->appendDataFormItem(
- HbDataFormModelItem::ToggleValueItem,
- settings[i].getName(), parent);
- currentValue = settings[i].getCurrentValue();
- if (currentValue < 0)
- {
- currentValue = 0;
- }
- // make it a toogle button (-> get rid of the "pressed" ui effect)
- appSettings->setContentWidgetData(QString("text"), settings[i].getValues()[currentValue]);
- appSettings->setContentWidgetData(QString("additionalText"),settings[i].getValues()[1 - currentValue]);
- break;
- default:
- appSettings = model->appendDataFormItem(
- HbDataFormModelItem::ComboBoxItem,
- settings[i].getName(), parent);
- appSettings->setContentWidgetData(QString("items"), settings[i].getValues());
- appSettings->setContentWidgetData(QString("currentIndex"),settings[i].getCurrentValue());
- }
- settings[i].setId(appSettings);
- }
-}
-
-void JavaApplicationSettingsViewPrivate::writeSettings(JavaApplicationSettings& settings, const QString &aNewValue)
-{
- QStringList values = settings.getValues();
- int currentValue = settings.getCurrentValue();
- int newValue = settings.getValue(aNewValue);
- if (newValue != -1 && currentValue != newValue)
- {
- // handle blanket settings
- if (aNewValue == BLANKET)
- {
- // check blanket settings
- if (!blanketAllowed(settings))
- {
- // change back to the old value
- HbComboBox * settingsCombo = static_cast(itemToWidget(settings.getId()));
- settingsCombo->setCurrentIndex(currentValue);
- return;
- }
- }
- settings.setCurrentValue(newValue);
- writeToStorage(settings);
- }
-}
-
-bool JavaApplicationSettingsViewPrivate::blanketAllowed(const JavaApplicationSettings &settings)
-{
- // handle the high risk items
- QList highRiskList = settings.getHighRiskList();
- if (highRiskList.size() > 0)
- {
- // go through the list and see if any of the setings are in blanket
- for (int i=0; igetValue(highRiskList[i]->getCurrentValue())
- == BLANKET)
- {
- QString secWarning = SENSITIVE_SETTINGS;
- QString LOCAL_CONNECTIVITY = QString(hbTrId("txt_java_sett_setlabel_local_conn"));
- if (settings.getName() != LOCAL_CONNECTIVITY
- && highRiskList[i]->getName() != LOCAL_CONNECTIVITY)
- {
- secWarning = SENSITIVE_SETTINGS_NET_USAGE;
- }
- if (!securityWarningAccepted(
- secWarning,OK,CANCEL ,SECURITY_WARNING_TITLE))
- {
- return false;
- }
- break;
- }
- }
- }
- // handle the mutually exclusive rules
- QList mutuallyExclusiveList = settings
- .getMutuallyExclusiveList();
- if (mutuallyExclusiveList.size() > 0)
- {
- // go through the list and see if any of the setings are in blanket
- for (int i=0; igetValue(
- mutuallyExclusiveList[i]->getCurrentValue()) == BLANKET)
- {
- bool isBlanketAllowed = securityWarningAccepted(
- MUTUALLY_EXCLUSIVE_SETTINGS, OK, CANCEL, SECURITY_WARNING_TITLE);
- if (isBlanketAllowed)
- {
- // change the current value to the maximum allowed
- bool isBlanket = true;
- do
- {
- if (isBlanket)
- {
- QStringList allowedValues = mutuallyExclusiveList[i]->getValues();
- int selectedValue = mutuallyExclusiveList[i]->getCurrentValue();
- // select the maximum allowed value
- for (int j=0; jsetCurrentValue(selectedValue);
- HbComboBox * settingsCombo = static_cast(itemToWidget(
- mutuallyExclusiveList[i]->getId()));
- settingsCombo->setCurrentIndex(selectedValue);
- writeToStorage(*mutuallyExclusiveList[i]);
- }
- i++;
- // end of list?
- if (i >= mutuallyExclusiveList.size())
- {
- break;
- }
- // move on into the list
- isBlanket = (mutuallyExclusiveList[i]->getValue(
- mutuallyExclusiveList[i]->getCurrentValue()) == BLANKET);
- }
- while (true);
- }
- return isBlanketAllowed;
- }
- }
- }
- return true;
-}
-
-void JavaApplicationSettingsViewPrivate::_q_settingsChanged(bool)
-{
- HbPushButton * sender = static_cast(iPublicView->sender());
- if (sender)
- {
- JavaApplicationSettings* settings = findSettings(sender);
- if (settings->getName() == SECURITY_LEVEL)
- {
- QString newValue = settings->getValue(1 - settings->getCurrentValue());
- securityWarningsChanged(newValue);
- writeSettings(*settings, newValue);
- }
- else if (settings->getName() == NETWORK_CONNECTION)
- {
- handleNetworkSettings();
- }
- }
-}
-void JavaApplicationSettingsViewPrivate::_q_settingsChanged(const QString &newValue)
-{
- HbComboBox * sender = static_cast(iPublicView->sender());
- if (sender)
- {
- JavaApplicationSettings* settings = findSettings(sender);
- if (settings != NULL)
- {
- // any other settings are treated same
- writeSettings(*settings, newValue);
- }
- }
-}
-
-void JavaApplicationSettingsViewPrivate::securityWarningsChanged(const QString &newValue)
-{
- if (newValue == USER_DEFINED)
- {
- // append the extra settings and values
- for (int i=0; i= 0 && extraSettings[i].getId() == 0)
- {
- HbDataFormModelItem * appSettings = model->appendDataFormItem(
- HbDataFormModelItem::ComboBoxItem,
- extraSettings[i].getName(), securitySettingsGroup);
- extraSettings[i].setId(appSettings);
- // when settings the items, the settingsChanged signal gets emitted with the first value
- // as being the current value. This signal should be discarded (the first value is just
- // an intermediate value towards the actual current value which gets set shortly).
- // Therefore set the first value as the current value (this way the settingsChanged
- // signal gets discarded) and change the current value back to the real current value
- int currentValue = extraSettings[i].getCurrentValue();
- extraSettings[i].setCurrentValue(0);
- appSettings->setContentWidgetData(QString("items"), extraSettings[i].getValues());
- extraSettings[i].setCurrentValue(currentValue);
- appSettings->setContentWidgetData(QString("currentIndex"),extraSettings[i].getCurrentValue());
- }
- }
- }
- else
- {
- // remove the extra settings
- for (int i=0; i(itemToWidget(extraSettings[i].getId()));
- if (extraSettingsId)
- {
- iPublicView->disconnect(extraSettingsId, 0, 0, 0);
- model->removeItem(model->indexFromItem(extraSettings[i].getId()));
- extraSettings[i].setId(0);
- extraSettings[i].disconnectFromUi();
- }
- }
- }
- }
-}
-
-void JavaApplicationSettingsViewPrivate::handleNetworkSettings()
-{
- // init flags to show destinations and connection methods
- QFlags listItems;
- listItems |= CmApplSettingsUi::ShowDestinations;
- listItems |= CmApplSettingsUi::ShowConnectionMethods;
-
- // empty filter -> all bearer types included
- QSet filter;
- // reset the result
- netConnSelection.result = netConn.type;
- netConnSelection.id = netConn.id;
- // init settings ui with destinations, filter and initial selection
- netConnSettingsUi->setOptions(listItems, filter);
- netConnSettingsUi->setSelection(netConnSelection);
- // Connect the setting ui's signal with own slot where the netConnSelection is stored
- connect(netConnSettingsUi, SIGNAL(finished(uint)), this, SLOT(netConnSelected(uint)));
- // launch the setting ui
- netConnSettingsUi->open();
-}
-
-void JavaApplicationSettingsViewPrivate::_q_dataItemDisplayed(const QModelIndex dataItemIndex)
-{
- HbDataFormModelItem *item = static_cast(
- mainForm->model())->itemFromIndex(dataItemIndex);
- int itemType = item->data(HbDataFormModelItem::ItemTypeRole).toInt();
- HbComboBox * comboBox = NULL;
- HbPushButton * pushButton = NULL;
- HbWidget * widget = (qobject_cast
- (mainForm->itemByIndex(dataItemIndex)))->dataItemContentWidget();
- JavaApplicationSettings* settings = findSettings(widget);
- if (settings == NULL)
- {
- // stop right here
- return;
- }
- switch(HbDataFormModelItem::DataItemType(itemType))
- {
- case HbDataFormModelItem::ComboBoxItem:
- comboBox = static_cast(widget);
- if (settings->isConnectedToUi())
- {
- // need to do a reconnect: disconnect followed by a connect
- iPublicView->disconnect(comboBox,
- SIGNAL(currentIndexChanged(const QString &)),
- iPublicView,
- SLOT(_q_settingsChanged(const QString &)));
- }
- iPublicView->connect(comboBox,
- SIGNAL(currentIndexChanged(const QString &)),
- iPublicView, SLOT(_q_settingsChanged(const QString &)),
- Qt::UniqueConnection);
- break;
- case HbDataFormModelItem::ToggleValueItem:
- pushButton = static_cast< HbPushButton*>(widget);
- if (settings->isConnectedToUi())
- {
- // need to do a reconnect: disconnect followed by a connect
- iPublicView->disconnect(pushButton,
- SIGNAL(clicked(bool)),
- iPublicView,
- SLOT(_q_settingsChanged(bool)));
- }
- iPublicView->connect(pushButton,
- SIGNAL(clicked(bool)),
- iPublicView, SLOT(_q_settingsChanged(bool)),
- Qt::UniqueConnection);
- break;
- }
- settings->connectToUi();
-}
-
-void JavaApplicationSettingsViewPrivate::netConnSelected(uint netConnSelectionStatus)
-{
- if (netConnSelectionStatus == CmApplSettingsUi::ApplSettingsErrorNone)
- {
- netConnSelection = netConnSettingsUi->selection();
- // store the selection
- if (netConnSelection.id != netConn.id
- && netConnSelection.id != defaultConnId)
- {
- TRAPD(err,
- switch(netConnSelection.result)
- {
- case CmApplSettingsUi::SelectionTypeDestination:
- ConnectionManager::setDestinationNetworkIdL(iSuiteUid, netConnSelection.id);
- break;
- case CmApplSettingsUi::SelectionTypeConnectionMethod:
- ConnectionManager::setApnIdL(iSuiteUid, netConnSelection.id);
- break;
- }
- );
- if (err == KErrNone)
- {
- netConn.id = netConnSelection.id;
- netConn.type = netConnSelection.result;
- readNetworkConnectionName();
- generalSettings[netSettIndex].getId()->setContentWidgetData(QString("text"), netConn.name);
- generalSettings[netSettIndex].getId()->setContentWidgetData(QString("additionalText"), netConn.name);
- }
- }
- }
-}
-
-void JavaApplicationSettingsViewPrivate::securityWarningDismissed(HbAction* action)
-{
- HbMessageBox *dlg = static_cast(sender());
- secWarningAccepted = (action == dlg->actions().at(0));
- asyncToSyncCallEventLoop->exit();
-}
-
-void JavaApplicationSettingsViewPrivate::initNetworkConnection()
-{
- TRAP_IGNORE(
- netConn.id = ConnectionManager::getDestinationNetworkIdL(iSuiteUid);
- if (netConn.id == (uint)KJavaNetworkAccessNotSpecified)
- {
- netConn.id = ConnectionManager::getApnIdL(iSuiteUid);
- }
- );
- QNetworkConfigurationManager manager;
- QNetworkConfiguration defaultCfg = manager.defaultConfiguration();
- defaultConnId = defaultCfg.identifier().toInt();
- QNetworkConfiguration cfg = manager.configurationFromIdentifier(
- QString::number(netConn.id));
- if (!cfg.isValid())
- {
- cfg = defaultCfg;
- }
- netConn.name = QString(hbTrId(cfg.name().toUtf8()));
-}
-
-void JavaApplicationSettingsViewPrivate::readNetworkConnectionName()
-{
- QNetworkConfigurationManager manager;
- QNetworkConfiguration cfg = manager.configurationFromIdentifier(
- QString::number(netConn.id));
- if (!cfg.isValid())
- {
- cfg = manager.defaultConfiguration();
- }
- netConn.name = QString(hbTrId(cfg.name().toUtf8()));
-}
-
-JavaApplicationSettings* JavaApplicationSettingsViewPrivate::findSettings(HbWidget* id)
-{
- JavaApplicationSettings* settings = findSettings(id, generalSettings);
- if (settings == NULL)
- {
- settings = findSettings(id, securitySettings);
- if (settings == NULL)
- {
- settings = findSettings(id, extraSettings);
- }
- }
- return settings;
-}
-
-JavaApplicationSettings* JavaApplicationSettingsViewPrivate::findSettings(HbWidget* id, QVector& allSettings)
-{
- for (int i=0; i (mainForm->itemByIndex(
- model->indexFromItem(item)));
- if (viewItem)
- {
- return static_cast(viewItem->dataItemContentWidget());
- }
- return NULL;
-}
-
-bool JavaApplicationSettingsViewPrivate::securityWarningAccepted(const QString& text, const QString& acceptActionLabel, const QString& rejectActionLabel, const QString& headingText)
-{
- HbMessageBox securityWarning(HbMessageBox::MessageTypeQuestion);
- securityWarning.setDismissPolicy(HbDialog::NoDismiss);
- securityWarning.setTimeout(HbDialog::NoTimeout);
- securityWarning.setIconVisible(false);
- securityWarning.setText(text);
- securityWarning.addAction(new HbAction(
- acceptActionLabel, &securityWarning));
- securityWarning.addAction(new HbAction(
- rejectActionLabel, &securityWarning));
- securityWarning.setHeadingWidget(new HbLabel(headingText));
- securityWarning.open(this, SLOT(securityWarningDismissed(HbAction*)));
- asyncToSyncCallEventLoop->exec();
- return secWarningAccepted;
-}
-
-void JavaApplicationSettingsViewPrivate::configureList(QList& list, const QStringList& settingsNames, const QHash& settingsIndexes)
-{
- for(int i=0; i& list, const QHash& settingsIndexes, bool isHighRiskList)
-{
- if (settingsIndexes.contains(settingsName))
- {
- if (isHighRiskList)
- {
- extraSettings[settingsIndexes.value(settingsName)].setHighRiskList(list);
- }
- else
- {
- extraSettings[settingsIndexes.value(settingsName)].setMutuallyExclusiveList(list);
- }
- }
-}
-
-void JavaApplicationSettingsViewPrivate::installTranslator(const QString& translationFileName)
-{
- QTranslator* translator = new QTranslator;
-
- // load the correct translation of the localized strings for the java settings
- // Current solution reads it from Z only (this does not work with IAD)
- // -> check if translator can handle path without drive letter (e.g. the resource
- // is loaded from the same drive where the DLL is loaded)
- if (translator->load("z:/resource/qt/translations/"
- + translationFileName + "_" + QLocale::system().name()))
- {
- translators.append(translator);
- qApp->installTranslator(translator);
- }
- else
- {
- delete translator;
- translator = NULL;
- }
-}
-
-void JavaApplicationSettingsViewPrivate::readFromStorage(JavaApplicationSettings& settings)
-{
- if (settings.getColumnName().size() > 0
- && settings.getTableName().size() > 0)
- {
- wstring value = L"";
-
- JavaStorageApplicationEntry_t query;
- JavaStorageApplicationList_t queryResult;
- JavaStorageEntry attr;
- attr.setEntry(ID, iSuiteUid);
- query.insert(attr);
- if (settings.getFilterColumnName().size() > 0)
- {
- attr.setEntry(settings.getFilterColumnName(), settings.getFilterColumnValue());
- query.insert(attr);
- }
- attr.setEntry(settings.getColumnName(), L"");
- query.insert(attr);
- if (settings.getValuesColumnName().size() > 0)
- {
- attr.setEntry(settings.getValuesColumnName(), L"");
- query.insert(attr);
- }
-
- try
- {
- iStorage->search(settings.getTableName(), query, queryResult);
- }
- catch (JavaStorageException& aJse)
- {
- // Don't leave. Set defaults.
- }
-
- if (settings.getValuesColumnName().size() > 0)
- {
- findEntry(queryResult, settings.getValuesColumnName(), value);
- if (value.size() > 0)
- {
- settings.setStorageValuesFilter(value);
- filterSecuritySettings(settings);
- }
- }
-
- value = L"";
- findEntry(queryResult, settings.getColumnName(), value);
-
- if (value.size() > 0)
- {
- vector storageValues = settings.getStorageValues();
- for (int i=0; i no point in going further
- return;
- }
- JavaStorageApplicationEntry_t oldEntry;
- JavaStorageEntry attr;
- attr.setEntry(ID, iSuiteUid);
- oldEntry.insert(attr);
- JavaStorageApplicationEntry_t entry;
- if (settings.getFilterColumnName().size() > 0)
- {
- attr.setEntry(settings.getFilterColumnName(), settings.getFilterColumnValue());
- oldEntry.insert(attr);
- }
- attr.setEntry(settings.getColumnName(), settings.getStorageValues()[settings.getCurrentValue()]);
- entry.insert(attr);
-
- try
- {
- iStorage->update(settings.getTableName(), entry, oldEntry);
- }
- catch (JavaStorageException& aJse)
- {
- }
-}
-
-void JavaApplicationSettingsViewPrivate::findEntry(const JavaStorageApplicationList_t& queryResult,
- const std::wstring& eName,
- std::wstring& eValue)
-{
- if (queryResult.size() > 0)
- {
- JavaStorageApplicationEntry_t entry = queryResult.front();
- JavaStorageEntry findPattern;
- findPattern.setEntry(eName, L"");
- JavaStorageApplicationEntry_t::const_iterator findIterator =
- entry.find(findPattern);
- if (findIterator != entry.end())
- {
- eValue = findIterator->entryValue();
- }
- }
-}
-
-bool JavaApplicationSettingsViewPrivate::findFromStorage(const std::wstring& aColumnName, const std::wstring& aColumnFilterName, const std::wstring& aColumnFilterValue, const std::string& aTableName)
-{
- wstring value = readFromStorage(aColumnName, aColumnFilterName, aColumnFilterValue, aTableName);
-
- return (value.size() > 0);
-}
-
-wstring JavaApplicationSettingsViewPrivate::readFromStorage(const std::wstring& aColumnName, const std::wstring& aColumnFilterName, const std::wstring& aColumnFilterValue, const std::string& aTableName)
-{
- wstring value = L"";
-
- JavaStorageApplicationEntry_t query;
- JavaStorageApplicationList_t queryResult;
- JavaStorageEntry attr;
- attr.setEntry(ID, iSuiteUid);
- query.insert(attr);
- if (aColumnFilterName.size() > 0)
- {
- attr.setEntry(aColumnFilterName, aColumnFilterValue);
- query.insert(attr);
- }
- attr.setEntry(aColumnName, L"");
- query.insert(attr);
-
- try
- {
- iStorage->search(aTableName, query, queryResult);
- }
- catch (JavaStorageException& aJse)
- {
- // Don't leave. Set defaults.
- }
-
- findEntry(queryResult, aColumnName, value);
-
- return value;
-}
-
-vector JavaApplicationSettingsViewPrivate::readFromStorage(const std::wstring& aColumnName, const std::string& aPrimaryTableName, const std::string& aSecondaryTableName)
-{
- vector values;
-
- // hash for associating settings names with display indexes:
- // a settings with lower index is shown before a settings
- // with a higher index
- QHash settingsNamesIndexes;
- settingsNamesIndexes[QString::fromStdWString(NET_ACCESS_SETTINGS)] = 0;
- settingsNamesIndexes[QString::fromStdWString(LOW_LEVEL_NET_ACCESS_SETTINGS)] = 1;
- settingsNamesIndexes[QString::fromStdWString(MESSAGING_SETTINGS)] = 2;
- settingsNamesIndexes[QString::fromStdWString(RESTRICTED_MESSAGING_SETTINGS)] = 3;
- settingsNamesIndexes[QString::fromStdWString(CALL_CONTROL_SETTINGS)] = 4;
- settingsNamesIndexes[QString::fromStdWString(LOCAL_CONNECTIVITY_SETTINGS)] = 5;
- settingsNamesIndexes[QString::fromStdWString(MULTIMEDIA_RECORDING_SETTINGS)] = 6;
- settingsNamesIndexes[QString::fromStdWString(WRITE_USER_DATA_ACCESS_SETTINGS)] = 7;
- settingsNamesIndexes[QString::fromStdWString(READ_USER_DATA_ACCESS_SETTINGS)] = 8;
- settingsNamesIndexes[QString::fromStdWString(LOCATION_SETTINGS)] = 9;
- settingsNamesIndexes[QString::fromStdWString(LANDMARK_SETTINGS)] = 10;
- settingsNamesIndexes[QString::fromStdWString(AUTHENTICATION_SETTINGS)] = 11;
- settingsNamesIndexes[QString::fromStdWString(SMART_CARD_COMMUNICATION_SETTINGS)] = 12;
- settingsNamesIndexes[QString::fromStdWString(APPLICATION_AUTO_INVOCATION_SETTINGS)] = 13;
- settingsNamesIndexes[QString::fromStdWString(BROADCAST_SETTINGS)] = 14;
- settingsNamesIndexes[QString::fromStdWString(NFC_WRITE_ACCESS_SETTINGS)] = 15;
- settingsNamesIndexes[QString::fromStdWString(URL_START_SETTINGS)] = 16;
- int last_index = 16;
-
- JavaStorageApplicationEntry_t query;
- JavaStorageApplicationList_t queryResult;
- JavaStorageEntry attr;
- attr.setEntry(ID, iSuiteUid);
- query.insert(attr);
- attr.setEntry(aColumnName, L"");
- query.insert(attr);
-
- try
- {
- iStorage->search(aPrimaryTableName, query, queryResult);
-
- JavaStorageApplicationList_t::const_iterator iterator;
- JavaStorageApplicationList_t secondaryQueryResult;
- for (iterator = queryResult.begin(); iterator != queryResult.end(); iterator++)
- {
- std::wstring name = L"";
- JavaStorageApplicationEntry_t entry = (*iterator);
- JavaStorageEntry findPattern;
- findPattern.setEntry(aColumnName, L"");
- JavaStorageApplicationEntry_t::const_iterator findIterator =
- entry.find(findPattern);
- if (findIterator != entry.end())
- {
- name = findIterator->entryValue();
- }
- if (name.size() > 0)
- {
- entry.clear();
- query.clear();
- attr.setEntry(ID, iSuiteUid);
- query.insert(attr);
- attr.setEntry(aColumnName, name);
- query.insert(attr);
- secondaryQueryResult.clear();
- iStorage->search(aSecondaryTableName, query, secondaryQueryResult);
- if (secondaryQueryResult.size() > 0)
- {
- IndexedSettingsName value;
- value.name = name;
- value.index = last_index + 1;
- if (settingsNamesIndexes.contains(QString::fromStdWString(name)))
- {
- value.index = settingsNamesIndexes.value(QString::fromStdWString(name));
- }
- values.push_back(value);
- }
- }
- }
- }
- catch (JavaStorageException& aJse)
- {
- // Don't leave. Set defaults.
- }
-
- return values;
-}
-
-void JavaApplicationSettingsViewPrivate::readSuiteUid(const QString& aAppUid)
-{
- iSuiteUid = L"";
- bool ok;
- int tmp = aAppUid.toInt( &ok, 10 );
- if (!ok)
- {
- return;
- }
- wstring appUid = L"";
- appUid.append(L"[").append(QString("%1").arg(tmp, 0, 16).toStdWString()).append(L"]");
-
- JavaStorageApplicationEntry_t query;
- JavaStorageApplicationList_t queryResult;
- JavaStorageEntry attr;
- attr.setEntry(ID, appUid);
- query.insert(attr);
- attr.setEntry(PACKAGE_ID, L"");
- query.insert(attr);
- try
- {
- iStorage->search(APPLICATION_TABLE, query, queryResult);
- }
- catch (JavaStorageException& aJse)
- {
- // Don't leave. Set defaults.
- }
- findEntry(queryResult, PACKAGE_ID, iSuiteUid);
-}
-
-
-#ifdef WIN32
-#include "./moc/moc_javaapplicationsettingsview.cpp"
-#else
-#include "moc_javaapplicationsettingsview.cpp"
-#endif
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javasettings/appsettingsview_qt/src/javaapplicationsettingsview_p.h
--- a/javamanager/javasettings/appsettingsview_qt/src/javaapplicationsettingsview_p.h Tue Jul 06 20:36:19 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,118 +0,0 @@
-/*
-* Copyright (c) 2008 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:
-*
-*/
-#ifndef JAVAAPPLICATIONSETTINGSVIEW_P_H
-#define JAVAAPPLICATIONSETTINGSVIEW_P_H
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include "javaapplicationsettings.h"
-#include "javastorage.h"
-
-class HbWidget;
-class HbPushButton;
-class HbDataForm;
-class HbDataFormModel;
-class HbDataFormModelItem;
-class JavaApplicationSettingsView;
-class HbAction;
-
-struct IndexedSettingsName
-{
- std::wstring name;
- int index;
-};
-
-struct AscendingSort
-{
- bool operator()(const IndexedSettingsName& i1, const IndexedSettingsName& i2)
- {
- return i1.index < i2.index;
- }
-};
-
-class JavaApplicationSettingsViewPrivate: public QObject
-{
- Q_OBJECT
-
-public:
- JavaApplicationSettingsViewPrivate(const QString& aApplication);
- virtual ~JavaApplicationSettingsViewPrivate();
- void init(JavaApplicationSettingsView*);
-
- // slots
- void _q_settingsChanged(const QString &newValue);
- void _q_settingsChanged(bool);
- void _q_dataItemDisplayed(const QModelIndex);
-
-private slots:
- void netConnSelected(uint netConnSelectionStatus);
- void securityWarningDismissed(HbAction*);
-
-private:
- void readAllSettings();
- void initSettings(QVector& settings, HbDataFormModelItem * parent);
- void writeSettings(JavaApplicationSettings& settings, const QString &newValue);
- void securityWarningsChanged(const QString &);
- bool blanketAllowed(const JavaApplicationSettings &settings);
- HbWidget * itemToWidget(const HbDataFormModelItem *);
- JavaApplicationSettings* findSettings(HbWidget* id);
- JavaApplicationSettings* findSettings(HbWidget* id, QVector& settings);
- void readFromStorage(JavaApplicationSettings& settings);
- void writeToStorage(JavaApplicationSettings& settings);
- bool findFromStorage(const std::wstring&, const std::wstring&, const std::wstring&, const std::string&);
- std::wstring readFromStorage(const std::wstring&, const std::wstring&, const std::wstring&, const std::string&);
- std::vector readFromStorage(const std::wstring& aColumnName, const std::string& aTableName);
- void filterSecuritySettings(JavaApplicationSettings& settings);
- void findEntry(const java::storage::JavaStorageApplicationList_t&, const std::wstring&, std::wstring& eValue);
- void readSuiteUid(const QString& aAppUid);
- bool securityWarningAccepted(const QString& text, const QString& acceptActionLabel, const QString& rejectActionLabel, const QString& headingText);
- void handleNetworkSettings();
- void readNetworkConnectionName();
- void initNetworkConnection();
- void configureList(QList&, const QStringList&, const QHash&);
- void attachList(const QString& settingsName, const QList&, const QHash&, bool isHighRiskList = true);
- void installTranslator(const QString& translationFileName);
-
-private:
- HbDataForm * mainForm;
- HbDataFormModel *model;
- HbDataFormModelItem * generalSettingsGroup;
- HbDataFormModelItem * securitySettingsGroup;
- QVector generalSettings;
- QVector securitySettings;
- QVector extraSettings;
- JavaApplicationSettingsView* iPublicView;
- std::auto_ptr iStorage;
- std::wstring iSuiteUid;
- QString BLANKET,SESSION,ONESHOT,DENIED,SECURITY_LEVEL,USER_DEFINED,SENSITIVE_SETTINGS,SENSITIVE_SETTINGS_NET_USAGE,MUTUALLY_EXCLUSIVE_SETTINGS,OK,CANCEL,SECURITY_WARNING_TITLE,NET_ACCESS,LOW_LEVEL_NET_ACCESS,NETWORK_CONNECTION,NETWORK_CONNECTION_CHANGE,SETTINGS_TITLE,SETTINGS_NOT_AVAILABLE;
- CmApplSettingsUi* netConnSettingsUi;
- CmApplSettingsUi::SettingSelection netConnSelection;
- JavaApplicationSettings::NetworkConnection netConn;
- int netSettIndex;
- QEventLoop* asyncToSyncCallEventLoop;
- bool secWarningAccepted;
- int defaultConnId;
- QList translators;
-};
-
-
-#endif // JAVAAPPLICATIONSETTINGSVIEW_P_H
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javasettings/javasettings.pro
--- a/javamanager/javasettings/javasettings.pro Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javasettings/javasettings.pro Fri Jul 09 16:35:45 2010 +0300
@@ -14,5 +14,4 @@
# Description: Generated file - do not edit manually
#
TEMPLATE = subdirs
-SUBDIRS += appsettingsview_qt/build/javaapplicationsettingsview.pro
BLD_INF_RULES.prj_extensions += "prj_extensions"
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javasettings/subsystem.mk
--- a/javamanager/javasettings/subsystem.mk Tue Jul 06 20:36:19 2010 +0300
+++ b/javamanager/javasettings/subsystem.mk Fri Jul 09 16:35:45 2010 +0300
@@ -17,10 +17,7 @@
include $(JAVA_SRC_ROOT)/build/Makefile.defs
-ifdef RD_JAVA_APPLICATION_SETTINGS_QT
-COMPONENTS += appsettingsview_qt/build
-SYMBIAN_ONLY += appsettingsview_qt/build
-else
+ifndef RD_JAVA_APPLICATION_SETTINGS_QT
ifndef RD_JAVA_S60_RELEASE_5_0_IAD
NONQTSUBSYSTEMS += appmngrplugin/build
SYMBIAN_ONLY += appmngrplugin/build
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javasettings_qt/build/javaapplicationsettingsview.pro
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javasettings_qt/build/javaapplicationsettingsview.pro Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,43 @@
+#
+# Copyright (c) 2010 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:
+#
+TEMPLATE = lib
+TARGET = javaapplicationsettingsview
+CONFIG += qt hb stl plugin mobility
+MOBILITY += bearer
+LIBS += -ljavastorage -lcmapplsettingsui -ljavaconnectionmanager -ljavautils
+TRANSLATIONS = javaruntimeapplicationsettings.ts
+
+INCLUDEPATH += ../../../inc
+SOURCES += ..\src\javaapplicationsettingsview.cpp ..\src\javaapplicationsettingsview_p.cpp ..\src\javaapplicationsettings.cpp
+HEADERS += ..\src\javaapplicationsettingsview.h ..\src\javaapplicationsettingsview_p.h ..\src\javaapplicationsettings.h
+
+symbian : plugin {
+ TARGET.EPOCALLOWDLLDATA = 1
+ TARGET.CAPABILITY = ALL -TCB
+ PLUGIN_STUB_PATH = /resource/qt/plugins/appsettings
+ pluginstub.sources = $${TARGET}.dll
+ pluginstub.path = $$PLUGIN_STUB_PATH
+ DEPLOYMENT += pluginstub
+ qtplugins.path = $$PLUGIN_STUB_PATH
+ qtplugins.sources += qmakepluginstubs/$${TARGET}.qtplugin
+ for(qtplugin, qtplugins.sources):BLD_INF_RULES.prj_exports += "./$$qtplugin z:$$qtplugins.path/$$basename(qtplugin)"
+
+ include(../../../build/symbian_uids.pri)
+
+}
+
+# Workaround for RVCT 4.0 QT/Symbian incmpatibility
+MMP_RULES -= $$MMP_RULES_DONT_EXPORT_ALL_CLASS_IMPEDIMENTA
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javasettings_qt/src/applicationsettingsview.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javasettings_qt/src/applicationsettingsview.h Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,51 @@
+/*
+* Copyright (c) 2010 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:
+*
+*/
+#ifndef APPLICATIONSETTINGSVIEW_H
+#define APPLICATIONSETTINGSVIEW_H
+
+#include
+#include
+
+class ApplicationSettingsView: public HbView
+{
+public:
+
+ /*
+ * Base constructor
+ */
+ explicit ApplicationSettingsView() : HbView() {}
+
+ /*
+ * Destructor
+ */
+ virtual ~ApplicationSettingsView() {}
+
+public slots:
+ /*
+ * Initializas the view with application specific info
+ *
+ * @param aAppUid Identifier for the application
+ *
+ */
+ void initialize(const QString& aAppUid);
+
+};
+
+Q_DECLARE_INTERFACE(ApplicationSettingsView,
+ "com.nokia.ApplicationLibrary.ApplicationSettingsView/1.0");
+
+#endif // APPLICATIONSETTINGSVIEW_H
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javasettings_qt/src/javaapplicationsettings.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javasettings_qt/src/javaapplicationsettings.cpp Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,214 @@
+/*
+* Copyright (c) 2010 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:
+*
+*/
+#include "javaapplicationsettings.h"
+
+using namespace java::settings;
+
+JavaApplicationSettings::JavaApplicationSettings():
+ mName(),
+ mValues(),
+ mId(0),
+ mCurrentValue(0),
+ mColumnName(),
+ mTableName(),
+ mStorageValuesFilter(),
+ mValuesColumnName(),
+ mFilterColumnName(),
+ mFilterColumnValue(),
+ mConnectedToUi(false)
+{
+}
+
+JavaApplicationSettings::JavaApplicationSettings(const QString& aName, const QStringList& aValues):
+ mName(aName),
+ mValues(aValues),
+ mId(0),
+ mCurrentValue(0),
+ mColumnName(),
+ mTableName(),
+ mStorageValuesFilter(),
+ mValuesColumnName(),
+ mFilterColumnName(),
+ mFilterColumnValue(),
+ mConnectedToUi(false)
+{
+}
+
+JavaApplicationSettings::JavaApplicationSettings(const QString& aName, const QStringList& aValues, const std::wstring& aColumnName, const std::string& aTableName, const std::vector& aStorageValues):
+ mName(aName),
+ mValues(aValues),
+ mId(0),
+ mCurrentValue(0),
+ mColumnName(aColumnName),
+ mTableName(aTableName),
+ mStorageValues(aStorageValues),
+ mStorageValuesFilter(),
+ mValuesColumnName(),
+ mFilterColumnName(),
+ mFilterColumnValue(),
+ mConnectedToUi(false)
+{
+}
+
+JavaApplicationSettings::JavaApplicationSettings(const QString& aName, const QStringList& aValues, const std::wstring& aColumnName, const std::string& aTableName, const std::vector& aStorageValues, const std::wstring& aFilterColumnName, const std::wstring& aFilterColumnValue, const std::wstring& aValuesColumnName):
+ mName(aName),
+ mValues(aValues),
+ mId(0),
+ mCurrentValue(0),
+ mColumnName(aColumnName),
+ mTableName(aTableName),
+ mStorageValues(aStorageValues),
+ mStorageValuesFilter(),
+ mValuesColumnName(aValuesColumnName),
+ mFilterColumnName(aFilterColumnName),
+ mFilterColumnValue(aFilterColumnValue),
+ mConnectedToUi(false)
+{
+}
+
+void JavaApplicationSettings::setCurrentValue(int aCurrentValue)
+{
+ mCurrentValue = aCurrentValue;
+}
+
+void JavaApplicationSettings::connectToUi()
+{
+ mConnectedToUi = true;
+}
+
+void JavaApplicationSettings::disconnectFromUi()
+{
+ mConnectedToUi = false;
+}
+
+bool JavaApplicationSettings::isConnectedToUi()
+{
+ return mConnectedToUi;
+}
+
+int JavaApplicationSettings::getCurrentValue()
+{
+ return mCurrentValue;
+}
+
+const QString JavaApplicationSettings::getValue(int aValueIndex)
+{
+ if (aValueIndex >= 0 && aValueIndex < mValues.size())
+ return mValues[aValueIndex];
+ return QString::null;
+}
+
+void JavaApplicationSettings::removeValue(int aValueIndex)
+{
+ if (aValueIndex >= 0 && aValueIndex < mStorageValues.size())
+ mStorageValues.erase(mStorageValues.begin() + aValueIndex);
+ if (aValueIndex >= 0 && aValueIndex < mValues.size())
+ mValues.erase(mValues.begin() + aValueIndex);
+}
+
+int JavaApplicationSettings::getValueIndex(const QString& aValue)
+{
+ int value = -1;
+ for (int i = 0; i < mValues.size(); i++)
+ {
+ if (mValues[i] == aValue)
+ {
+ return i;
+ }
+ }
+ return value;
+}
+
+void JavaApplicationSettings::setId(HbDataFormModelItem * aId)
+{
+ mId = aId;
+}
+
+HbDataFormModelItem * JavaApplicationSettings::getId()
+{
+ return mId;
+}
+
+const QString& JavaApplicationSettings::getName() const
+{
+ return mName;
+}
+
+const QStringList& JavaApplicationSettings::getValues() const
+{
+ return mValues;
+}
+
+const QList& JavaApplicationSettings::getHighRiskList() const
+{
+ return mHighRiskList;
+}
+
+void JavaApplicationSettings::setHighRiskList(const QList& aHighRiskList)
+{
+ mHighRiskList = aHighRiskList;
+}
+
+const QList& JavaApplicationSettings::getMutuallyExclusiveList() const
+{
+ return mMutuallyExclusiveList;
+}
+
+void JavaApplicationSettings::setMutuallyExclusiveList(const QList& aMutuallyExclusiveList)
+{
+ mMutuallyExclusiveList = aMutuallyExclusiveList;
+}
+
+const std::wstring& JavaApplicationSettings::getColumnName()
+{
+ return mColumnName;
+}
+
+const std::wstring& JavaApplicationSettings::getValuesColumnName()
+{
+ return mValuesColumnName;
+}
+
+const std::string& JavaApplicationSettings::getTableName()
+{
+ return mTableName;
+}
+
+const std::vector& JavaApplicationSettings::getStorageValues()
+{
+ return mStorageValues;
+}
+
+void JavaApplicationSettings::setStorageValuesFilter(const std::wstring& aStorageValuesFilter)
+{
+ mStorageValuesFilter = aStorageValuesFilter;
+}
+
+const std::wstring& JavaApplicationSettings::getStorageValuesFilter()
+{
+ return mStorageValuesFilter;
+}
+
+const std::wstring& JavaApplicationSettings::getFilterColumnName()
+{
+ return mFilterColumnName;
+}
+
+const std::wstring& JavaApplicationSettings::getFilterColumnValue()
+{
+ return mFilterColumnValue;
+}
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javasettings_qt/src/javaapplicationsettings.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javasettings_qt/src/javaapplicationsettings.h Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,120 @@
+/*
+* Copyright (c) 2010 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:
+*
+*/
+#ifndef JAVAAPPLICATIONSETTINGS_H
+#define JAVAAPPLICATIONSETTINGS_H
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+namespace java
+{
+namespace settings
+{
+
+/**
+ * Encapsulation of java settings:
+ * - name (as localized string displayed to user)
+ * - values (as a list of localized strings displayed to user)
+ * - current value (one of the values)
+ * - storage details (name of table, name of column, storage values)
+ * MIDP spec sets requirements for some combinations of settings:
+ * - some combinations of settings values are considered as sensitive,
+ * since they can cause privacy exposure or network costs. Whenever
+ * such a combination is about to be set, the user needs to be
+ * notified about possible consequences
+ * - such combinations of settings values are forbidden (mutually exclusive)
+ * Each setting is initialized with a list of sensitive settings counterparts
+ * and mutually exclusive counterparts respectively
+ */
+class JavaApplicationSettings
+{
+public:
+
+ struct NetworkConnection
+ {
+ QString name;
+ uint id;
+ CmApplSettingsUi::SelectionType type;
+ };
+
+ JavaApplicationSettings(const QString& aName,
+ const QStringList& aValues);
+ JavaApplicationSettings(const QString& aName,
+ const QStringList& aValues,
+ const std::wstring& aColumnName,
+ const std::string& aTableName,
+ const std::vector& aStorageValues);
+ JavaApplicationSettings(const QString& aName,
+ const QStringList& aValues,
+ const std::wstring& aColumnName,
+ const std::string& aTableName,
+ const std::vector& aStorageValues,
+ const std::wstring& aFilterColumnName,
+ const std::wstring& aFilterColumnValue,
+ const std::wstring& aValuesColumnName);
+ JavaApplicationSettings();
+
+ const QString& getName() const;
+ const QStringList& getValues() const;
+ void setCurrentValue(int aCurrentValue);
+ int getCurrentValue();
+ const QString getValue(int aValueIndex);
+ int getValueIndex(const QString& aValue);
+ void removeValue(int aValueIndex);
+ void setId(HbDataFormModelItem * aId);
+ HbDataFormModelItem * getId();
+ const QList& getHighRiskList() const;
+ void setHighRiskList(const QList& aHighRiskList);
+ const QList& getMutuallyExclusiveList() const;
+ void setMutuallyExclusiveList(const QList& aMutuallyExclusiveList);
+ const std::wstring& getColumnName();
+ const std::string& getTableName();
+ const std::wstring& getValuesColumnName();
+ const std::wstring& getFilterColumnName();
+ const std::wstring& getFilterColumnValue();
+ const std::vector& getStorageValues();
+ void setStorageValuesFilter(const std::wstring& aStorageValuesFilter);
+ const std::wstring& getStorageValuesFilter();
+ void connectToUi();
+ void disconnectFromUi();
+ bool isConnectedToUi();
+
+private:
+ QString mName;
+ QStringList mValues;
+ HbDataFormModelItem * mId;
+ QList mHighRiskList;
+ QList mMutuallyExclusiveList;
+ int mCurrentValue;
+ std::wstring mColumnName;
+ std::string mTableName;
+ std::vector mStorageValues;
+ std::wstring mStorageValuesFilter;
+ std::wstring mValuesColumnName;
+ std::wstring mFilterColumnName;
+ std::wstring mFilterColumnValue;
+ bool mConnectedToUi;
+};
+
+} // namespace settings
+} // namespace java
+
+#endif // JAVAAPPLICATIONSETTINGS_H
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javasettings_qt/src/javaapplicationsettingsview.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javasettings_qt/src/javaapplicationsettingsview.cpp Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2010 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:
+*
+*/
+#include "javaapplicationsettingsview.h"
+#include "javaapplicationsettingsview_p.h"
+
+using namespace java::settings;
+
+JavaApplicationSettingsView::JavaApplicationSettingsView() :
+ ApplicationSettingsView()
+{
+}
+
+void JavaApplicationSettingsView::initialize(const QString& aApplication)
+{
+ d_ptr = new JavaApplicationSettingsViewPrivate(aApplication);
+ d_ptr->init(this);
+}
+
+JavaApplicationSettingsView::~JavaApplicationSettingsView()
+{
+ delete d_ptr;
+}
+
+Q_EXPORT_PLUGIN2(javaapplicationsettingsview, JavaApplicationSettingsView);
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javasettings_qt/src/javaapplicationsettingsview.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javasettings_qt/src/javaapplicationsettingsview.h Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,67 @@
+/*
+* Copyright (c) 2010 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:
+*
+*/
+#ifndef JAVAAPPLICATIONSETTINGSVIEW_H
+#define JAVAAPPLICATIONSETTINGSVIEW_H
+
+#include "applicationsettingsview.h"
+
+namespace java
+{
+namespace settings
+{
+
+/**
+ * Realization of the p-impl pattern: settings view consists of a public part (
+ * implementing the ApplicationSettingsView interface) and the private part
+ * (containing the private details). The public part simply maintains a pointer
+ * to the private part thus enabling further changes into the private part without
+ * any risk of breaking the public part
+ */
+class JavaApplicationSettingsViewPrivate;
+
+class JavaApplicationSettingsView: public ApplicationSettingsView
+{
+ Q_OBJECT
+ Q_INTERFACES(ApplicationSettingsView)
+
+public:
+ explicit JavaApplicationSettingsView();
+ virtual ~JavaApplicationSettingsView();
+
+public slots:
+ void initialize(const QString&);
+
+signals:
+ void aboutToClose();
+
+private:
+ Q_DISABLE_COPY(JavaApplicationSettingsView)
+ Q_DECLARE_PRIVATE_D(d_ptr, JavaApplicationSettingsView)
+ Q_PRIVATE_SLOT(d_func(), void _q_settingsChanged(const QString & aNewValue))
+ Q_PRIVATE_SLOT(d_func(), void _q_settingsChanged(bool aNewValue))
+ Q_PRIVATE_SLOT(d_func(), void _q_dataItemDisplayed(const QModelIndex aDataItemIndex))
+
+private:
+ // the pointer to the private counterpart
+ JavaApplicationSettingsViewPrivate * d_ptr;
+};
+
+} // namespace settings
+} // namespace java
+
+
+#endif // JAVAAPPLICATIONSETTINGSVIEW_H
diff -r 35baca0e7a2e -r 023eef975703 javamanager/javasettings_qt/src/javaapplicationsettingsview_p.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javasettings_qt/src/javaapplicationsettingsview_p.cpp Fri Jul 09 16:35:45 2010 +0300
@@ -0,0 +1,1158 @@
+/*
+* Copyright (c) 2010 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:
+*
+*/
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "javaapplicationsettings.h"
+#include "javaapplicationsettingsview.h"
+#include "javaapplicationsettingsview_p.h"
+#include "connectionmanager.h"
+#include "javacommonutils.h"
+
+#include "securitystoragedatadefs.h"
+#include "javastoragenames.h"
+
+#include "logger.h"
+
+QTM_USE_NAMESPACE
+
+using namespace java::settings;
+using namespace java::storage;
+using namespace java::util;
+using namespace std;
+
+const wchar_t ON_SCREEN_KEYPAD_VALUE_NO[] = L"0";
+const wchar_t ON_SCREEN_KEYPAD_VALUE_GAMEACTIONS[] = L"1";
+const wchar_t ON_SCREEN_KEYPAD_VALUE_NAVIGATION[] = L"2";
+
+JavaApplicationSettingsViewPrivate::JavaApplicationSettingsViewPrivate(const QString& aJavaAppUid):
+ mMainForm(0), mModel(0), mGeneralSettingsGroup(0), mSecuritySettingsGroup(0), mNetConnSettingsUi(0), mAsyncToSyncCallEventLoop(0), mSecWarningAccepted(false), mDefaultConnId(0)
+{
+ // init common values
+ init();
+
+ // init the suite UID from the application UID
+ readSuiteUid(aJavaAppUid);
+ if (mSuiteUid.size() <= 0)
+ {
+ ELOG1(EJavaSettings, "No suite found with uid %S", aJavaAppUid.toStdWString().c_str());
+ return;
+ }
+ ELOG1(EJavaSettings, "Initializing settings for suite %S", mSuiteUid.c_str());
+
+ // init access point settings ui
+ mNetConnSettingsUi = new CmApplSettingsUi(this);
+ mAsyncToSyncCallEventLoop = new QEventLoop();
+
+ // read all settings
+ readAllSettings();
+
+ // init form
+ mMainForm = new HbDataForm();
+ mMainForm->setHeading(QString::fromStdWString(readFromStorage(PACKAGE_NAME, L"", L"", APPLICATION_PACKAGE_TABLE)));
+ mModel = new HbDataFormModel();
+
+ // init settings
+ mGeneralSettingsGroup = mModel->appendDataFormGroup(
+ QString(hbTrId(ID_GENERAL_GROUP_TITLE)), mModel->invisibleRootItem());
+ initSettings(mGeneralSettings, mGeneralSettingsGroup);
+ // append the security settings only if there are any user settings
+ if (mExtraSettings.size() > 0)
+ {
+ mSecuritySettingsGroup = mModel->appendDataFormGroup(
+ QString(hbTrId(ID_SECURITY_GROUP_TITLE)), mModel->invisibleRootItem());
+ initSettings(mSecuritySettings, mSecuritySettingsGroup);
+
+ // if security warnings is user defined -> add the extra settings, expand
+ if (mSecuritySettings[0].getCurrentValue() == 1)
+ {
+ securityWarningsChanged(TXT_USER_DEFINED);
+ }
+ }
+
+ // link form and model
+ mMainForm->setModel(mModel);
+ mMainForm->setExpanded(mModel->indexFromItem(mGeneralSettingsGroup), true);
+ if (mExtraSettings.size() > 0)
+ {
+ mMainForm->setExpanded(mModel->indexFromItem(mSecuritySettingsGroup), (mSecuritySettings[0].getCurrentValue() == 1));
+ }
+}
+
+void JavaApplicationSettingsViewPrivate::init(JavaApplicationSettingsView* aPublicView)
+{
+ mPublicView = aPublicView;
+
+ if (mMainForm)
+ {
+ // do the connect for the main form
+ mPublicView->connect(mMainForm, SIGNAL(itemShown(const QModelIndex)),
+ mPublicView, SLOT(_q_dataItemDisplayed(const QModelIndex)));
+
+ // set the form as view's widget
+ mPublicView->setWidget(mMainForm);
+ }
+ else
+ {
+ // no settings available
+ HbLabel* label = new HbLabel(TXT_SETTINGS_NOT_AVAILABLE, mPublicView);
+ label->setAlignment(Qt::AlignVCenter);
+ }
+
+ // set title
+ mPublicView->setTitle(TXT_SETTINGS_TITLE);
+}
+
+JavaApplicationSettingsViewPrivate::~JavaApplicationSettingsViewPrivate()
+{
+ delete mMainForm;
+ delete mModel;
+ delete mNetConnSettingsUi;
+ delete mAsyncToSyncCallEventLoop;
+ foreach (QTranslator *translator, mTranslators) {
+ qApp->removeTranslator(translator);
+ }
+ qDeleteAll(mTranslators);
+ mTranslators.clear();
+}
+
+void JavaApplicationSettingsViewPrivate::readAllSettings()
+{
+ // general settings
+ initGeneralSettings();
+
+ // security settings
+ initSecuritySettings();
+}
+
+void JavaApplicationSettingsViewPrivate::init()
+{
+ // init storage
+ try
+ {
+ mStorage.reset(JavaStorage::createInstance());
+ mStorage->open();
+ }
+ catch (JavaStorageException& aJse)
+ {
+ ELOG1(EJavaSettings, "Error while opening the storage %S", aJse.toString().c_str());
+ }
+
+ QTranslator translator;
+ // load the correct translation of the localized strings for the cmmanager.
+ // Load this one first since it contains the smallest amount of strings
+ // (so it's ok to be searched last)
+ installTranslator("cmapplsettingsui");
+ installTranslator("cmmanager");
+ // load the correct translation of the localized strings for the java settings
+ // Current solution reads it from Z only (this does not work with IAD)
+ // -> check if translator can handle path without drive letter (e.g. the resource
+ // is loaded from the same drive where the DLL is loaded)
+ installTranslator("javaruntimeapplicationsettings");
+ // init strings
+ TXT_BLANKET = QString(hbTrId(ID_BLANKET));
+ TXT_SESSION = QString(hbTrId(ID_SESSION));
+ TXT_ONESHOT = QString(hbTrId(ID_ONESHOT));
+ TXT_DENIED = QString(hbTrId(ID_DENIED));
+ TXT_SECURITY_LEVEL = QString(hbTrId(ID_SECURITY_LEVEL));
+ TXT_USER_DEFINED = QString(hbTrId(ID_USER_DEFINED));
+ TXT_SENSITIVE_SETTINGS = QString(hbTrId(ID_SENSITIVE_SETTINGS));
+ TXT_SENSITIVE_SETTINGS_NET_USAGE = QString(hbTrId(ID_SENSITIVE_SETTINGS_NET_USAGE));
+ TXT_MUTUALLY_EXCLUSIVE_SETTINGS = QString(hbTrId(ID_MUTUALLY_EXCLUSIVE_SETTINGS));
+ TXT_OK = QString(hbTrId(ID_OK));
+ TXT_CANCEL = QString(hbTrId(ID_CANCEL));
+ TXT_SECURITY_WARNING_TITLE = QString(hbTrId(ID_SECURITY_WARNING_TITLE));
+ TXT_NET_ACCESS = QString(hbTrId(ID_NET_ACCESS));
+ TXT_LOW_LEVEL_NET_ACCESS = QString(hbTrId(ID_LOW_LEVEL_NET_ACCESS));
+ TXT_NETWORK_CONNECTION = QString(hbTrId(ID_NETWORK_CONNECTION));
+ TXT_SETTINGS_TITLE = QString(hbTrId(ID_SETTINGS_TITLE));
+ TXT_SETTINGS_NOT_AVAILABLE = QString(hbTrId(ID_SETTINGS_NOT_AVAILABLE));
+
+ // init the known localized settings names
+ mLocalizedSettingsNames[QString::fromStdWString(NET_ACCESS_SETTINGS)] = TXT_NET_ACCESS;
+ mLocalizedSettingsNames[QString::fromStdWString(LOW_LEVEL_NET_ACCESS_SETTINGS)] = TXT_LOW_LEVEL_NET_ACCESS;
+ mLocalizedSettingsNames[QString::fromStdWString(MESSAGING_SETTINGS)] = QString(hbTrId(ID_MESSAGING));
+ mLocalizedSettingsNames[QString::fromStdWString(RESTRICTED_MESSAGING_SETTINGS)] = QString(hbTrId(ID_RESTRICTED_MESSAGING));
+ mLocalizedSettingsNames[QString::fromStdWString(CALL_CONTROL_SETTINGS)] = QString(hbTrId(ID_CALL_CONTROL));
+ mLocalizedSettingsNames[QString::fromStdWString(LOCAL_CONNECTIVITY_SETTINGS)] = QString(hbTrId(ID_LOCAL_CONNECTIVITY));
+ mLocalizedSettingsNames[QString::fromStdWString(MULTIMEDIA_RECORDING_SETTINGS)] = QString(hbTrId(ID_MULTIMEDIA_RECORDING));
+ mLocalizedSettingsNames[QString::fromStdWString(WRITE_USER_DATA_ACCESS_SETTINGS)] = QString(hbTrId(ID_WRITE_USER_DATA_ACCESS));
+ mLocalizedSettingsNames[QString::fromStdWString(READ_USER_DATA_ACCESS_SETTINGS)] = QString(hbTrId(ID_READ_USER_DATA_ACCESS));
+ mLocalizedSettingsNames[QString::fromStdWString(LOCATION_SETTINGS)] = QString(hbTrId(ID_LOCATION));
+ mLocalizedSettingsNames[QString::fromStdWString(LANDMARK_SETTINGS)] = QString(hbTrId(ID_LANDMARK));
+ mLocalizedSettingsNames[QString::fromStdWString(AUTHENTICATION_SETTINGS)] = QString(hbTrId(ID_AUTHENTICATION));
+ mLocalizedSettingsNames[QString::fromStdWString(SMART_CARD_COMMUNICATION_SETTINGS)] = QString(hbTrId(ID_SMART_CARD_COMMUNICATION));
+ mLocalizedSettingsNames[QString::fromStdWString(APPLICATION_AUTO_INVOCATION_SETTINGS)] = QString(hbTrId(ID_APPLICATION_AUTO_INVOCATION));
+ mLocalizedSettingsNames[QString::fromStdWString(BROADCAST_SETTINGS)] = QString(hbTrId(ID_BROADCAST));
+ mLocalizedSettingsNames[QString::fromStdWString(NFC_WRITE_ACCESS_SETTINGS)] = QString(hbTrId(ID_NFC_WRITE_ACCESS));
+ mLocalizedSettingsNames[QString::fromStdWString(URL_START_SETTINGS)] = QString(hbTrId(ID_URL_START));
+ // init the display indexes associated with each settings
+ mSettingsNamesIndexes[QString::fromStdWString(NET_ACCESS_SETTINGS)] = NET_ACCESS_SETTINGS_INDEX;
+ mSettingsNamesIndexes[QString::fromStdWString(LOW_LEVEL_NET_ACCESS_SETTINGS)] = LOW_LEVEL_NET_ACCESS_SETTINGS_INDEX;
+ mSettingsNamesIndexes[QString::fromStdWString(MESSAGING_SETTINGS)] = MESSAGING_SETTINGS_INDEX;
+ mSettingsNamesIndexes[QString::fromStdWString(RESTRICTED_MESSAGING_SETTINGS)] = RESTRICTED_MESSAGING_SETTINGS_INDEX;
+ mSettingsNamesIndexes[QString::fromStdWString(CALL_CONTROL_SETTINGS)] = CALL_CONTROL_SETTINGS_INDEX;
+ mSettingsNamesIndexes[QString::fromStdWString(LOCAL_CONNECTIVITY_SETTINGS)] = LOCAL_CONNECTIVITY_SETTINGS_INDEX;
+ mSettingsNamesIndexes[QString::fromStdWString(MULTIMEDIA_RECORDING_SETTINGS)] = MULTIMEDIA_RECORDING_SETTINGS_INDEX;
+ mSettingsNamesIndexes[QString::fromStdWString(WRITE_USER_DATA_ACCESS_SETTINGS)] = WRITE_USER_DATA_ACCESS_SETTINGS_INDEX;
+ mSettingsNamesIndexes[QString::fromStdWString(READ_USER_DATA_ACCESS_SETTINGS)] = READ_USER_DATA_ACCESS_SETTINGS_INDEX;
+ mSettingsNamesIndexes[QString::fromStdWString(LOCATION_SETTINGS)] = LOCATION_SETTINGS_INDEX;
+ mSettingsNamesIndexes[QString::fromStdWString(LANDMARK_SETTINGS)] = LANDMARK_SETTINGS_INDEX;
+ mSettingsNamesIndexes[QString::fromStdWString(AUTHENTICATION_SETTINGS)] = AUTHENTICATION_SETTINGS_INDEX;
+ mSettingsNamesIndexes[QString::fromStdWString(SMART_CARD_COMMUNICATION_SETTINGS)] = SMART_CARD_COMMUNICATION_SETTINGS_INDEX;
+ mSettingsNamesIndexes[QString::fromStdWString(APPLICATION_AUTO_INVOCATION_SETTINGS)] = APPLICATION_AUTO_INVOCATION_SETTINGS_INDEX;
+ mSettingsNamesIndexes[QString::fromStdWString(BROADCAST_SETTINGS)] = BROADCAST_SETTINGS_INDEX;
+ mSettingsNamesIndexes[QString::fromStdWString(NFC_WRITE_ACCESS_SETTINGS)] = NFC_WRITE_ACCESS_SETTINGS_INDEX;
+ mSettingsNamesIndexes[QString::fromStdWString(URL_START_SETTINGS)] = URL_START_SETTINGS_INDEX;
+}
+
+
+void JavaApplicationSettingsViewPrivate::initGeneralSettings()
+{
+ QStringList settingsValues;
+ vector storageValues;
+ if (!isInStorage(VALUE, NAME, L"Nokia-MIDlet-On-Screen-Keypad", APPLICATION_PACKAGE_ATTRIBUTES_TABLE))
+ {
+ // if the on screen keypad is predefined, it should not be changable by user
+ // -> right now it is not added to settings list. It should be changed so that
+ // the setting should not be editable by user
+ settingsValues< storageValues;
+ settingsValues = QStringList();
+ storageValues.clear();
+ settingsValues< allSecuritySettings = readFromStorage(FUNCTION_GROUP, MIDP_FUNC_GRP_SETTINGS_TABLE, MIDP_PERMISSIONS_TABLE);
+ // sort the security settings according to how they should be displayed
+ std::sort(allSecuritySettings.begin(), allSecuritySettings.end(), AscendingSort());
+ for(int i=0; i highRiskList;
+ QStringList highRiskSettingsNames;
+ highRiskSettingsNames
+ < mutuallyExclusiveList;
+ QStringList mutuallyExclusiveSettingsNames;
+ mutuallyExclusiveSettingsNames
+ <& aSettings, HbDataFormModelItem * aParent)
+{
+ for (int i=0; iappendDataFormItem(
+ HbDataFormModelItem::ToggleValueItem,
+ aSettings[i].getName(), aParent);
+ // make it a toogle button (-> get rid of the "pressed" ui effect)
+ if (appSettings)
+ {
+ appSettings->setContentWidgetData(QString("text"), aSettings[i].getValues()[0]);
+ appSettings->setContentWidgetData(QString("additionalText"), aSettings[i].getValues()[0]);
+ }
+ break;
+ case 2:
+ appSettings = mModel->appendDataFormItem(
+ HbDataFormModelItem::ToggleValueItem,
+ aSettings[i].getName(), aParent);
+ if (appSettings)
+ {
+ currentValue = aSettings[i].getCurrentValue();
+ if (currentValue < 0)
+ {
+ currentValue = 0;
+ }
+ appSettings->setContentWidgetData(QString("text"), aSettings[i].getValues()[currentValue]);
+ appSettings->setContentWidgetData(QString("additionalText"),aSettings[i].getValues()[1 - currentValue]);
+ }
+ break;
+ default:
+ appSettings = mModel->appendDataFormItem(
+ HbDataFormModelItem::ComboBoxItem,
+ aSettings[i].getName(), aParent);
+ if (appSettings)
+ {
+ appSettings->setContentWidgetData(QString("items"), aSettings[i].getValues());
+ appSettings->setContentWidgetData(QString("currentIndex"),aSettings[i].getCurrentValue());
+ }
+ }
+ aSettings[i].setId(appSettings);
+ }
+}
+
+void JavaApplicationSettingsViewPrivate::writeSettings(JavaApplicationSettings& aSettings, const QString &aNewValue)
+{
+ QStringList values = aSettings.getValues();
+ int currentValue = aSettings.getCurrentValue();
+ int newValue = aSettings.getValueIndex(aNewValue);
+ if (newValue != -1 && currentValue != newValue)
+ {
+ // handle blanket settings
+ if (aNewValue == TXT_BLANKET)
+ {
+ // check blanket settings
+ if (!isBlanketAllowed(aSettings))
+ {
+ // change back to the old value
+ HbComboBox * settingsCombo = static_cast(itemToWidget(aSettings.getId()));
+ if (settingsCombo)
+ {
+ settingsCombo->setCurrentIndex(currentValue);
+ }
+ return;
+ }
+ }
+ aSettings.setCurrentValue(newValue);
+ writeToStorage(aSettings);
+ }
+}
+
+bool JavaApplicationSettingsViewPrivate::isBlanketAllowed(const JavaApplicationSettings& aSettings)
+{
+ // handle the high risk items
+ QList highRiskList = aSettings.getHighRiskList();
+ // go through the list and see if any of the setings are in blanket
+ for (int i=0; igetValue(highRiskList[i]->getCurrentValue())
+ == TXT_BLANKET)
+ {
+ QString secWarning = TXT_SENSITIVE_SETTINGS;
+ QString LOCAL_CONNECTIVITY = QString(hbTrId(ID_LOCAL_CONNECTIVITY));
+ if (aSettings.getName() != LOCAL_CONNECTIVITY
+ && highRiskList[i]->getName() != LOCAL_CONNECTIVITY)
+ {
+ secWarning = TXT_SENSITIVE_SETTINGS_NET_USAGE;
+ }
+ if (!isSecurityWarningAccepted(
+ secWarning,TXT_OK,TXT_CANCEL ,TXT_SECURITY_WARNING_TITLE))
+ {
+ LOG3(EJavaSettings, EInfo,"User did not accept the high risk due to having both \"%S\" and \"%S\" set to \"%S\"", aSettings.getName().toStdWString().c_str(), highRiskList[i]->getName().toStdWString().c_str(), TXT_BLANKET.toStdWString().c_str());
+ return false;
+ }
+ LOG3(EJavaSettings, EInfo,"User accepted the high risk due to having both \"%S\" and \"%S\" set to \"%S\"", aSettings.getName().toStdWString().c_str(), highRiskList[i]->getName().toStdWString().c_str(), TXT_BLANKET.toStdWString().c_str());
+ break;
+ }
+ }
+ // handle the mutually exclusive rules
+ QList mutuallyExclusiveList = aSettings
+ .getMutuallyExclusiveList();
+ // go through the list and see if any of the setings are in blanket
+ for (int i=0; igetValue(
+ mutuallyExclusiveList[i]->getCurrentValue()) == TXT_BLANKET)
+ {
+ bool isBlanketAllowed = isSecurityWarningAccepted(
+ TXT_MUTUALLY_EXCLUSIVE_SETTINGS, TXT_OK, TXT_CANCEL, TXT_SECURITY_WARNING_TITLE);
+ if (isBlanketAllowed)
+ {
+ // change the current value to the maximum allowed
+ bool isBlanket = true;
+ do
+ {
+ if (isBlanket)
+ {
+ QStringList allowedValues = mutuallyExclusiveList[i]->getValues();
+ int selectedValue = mutuallyExclusiveList[i]->getCurrentValue();
+ // select the maximum allowed value
+ for (int j=0; jsetCurrentValue(selectedValue);
+ HbComboBox * settingsCombo = static_cast(itemToWidget(
+ mutuallyExclusiveList[i]->getId()));
+ if (settingsCombo)
+ {
+ settingsCombo->setCurrentIndex(selectedValue);
+ }
+ writeToStorage(*mutuallyExclusiveList[i]);
+ LOG4(EJavaSettings, EInfo,"Changing \"%S\" to \"%S\" led to changing \"%S\" to \"%S\" due to mutually exclusive rules", aSettings.getName().toStdWString().c_str(), TXT_BLANKET.toStdWString().c_str(), mutuallyExclusiveList[i]->getName().toStdWString().c_str(), allowedValues[selectedValue].toStdWString().c_str());
+ }
+ i++;
+ // end of list?
+ if (i >= mutuallyExclusiveList.size())
+ {
+ break;
+ }
+ // move on into the list
+ isBlanket = (mutuallyExclusiveList[i]->getValue(
+ mutuallyExclusiveList[i]->getCurrentValue()) == TXT_BLANKET);
+ }
+ while (true);
+ }
+ else
+ {
+ LOG1(EJavaSettings, EInfo,"User did not accept changes in \"%S\" due to mutually exclusive rules", mutuallyExclusiveList[i]->getName().toStdWString().c_str());
+ }
+ return isBlanketAllowed;
+ }
+ }
+ return true;
+}
+
+void JavaApplicationSettingsViewPrivate::_q_settingsChanged(bool)
+{
+ HbPushButton * sender = static_cast(mPublicView->sender());
+ if (sender)
+ {
+ JavaApplicationSettings* settings = findSettings(sender);
+ if (settings == NULL)
+ {
+ return;
+ }
+ if (settings->getName() == TXT_SECURITY_LEVEL)
+ {
+ QString newValue = settings->getValue(1 - settings->getCurrentValue());
+ securityWarningsChanged(newValue);
+ writeSettings(*settings, newValue);
+ }
+ else if (settings->getName() == TXT_NETWORK_CONNECTION)
+ {
+ handleNetworkSettings();
+ }
+ }
+}
+void JavaApplicationSettingsViewPrivate::_q_settingsChanged(const QString& aNewValue)
+{
+ HbComboBox * sender = static_cast(mPublicView->sender());
+ if (sender)
+ {
+ JavaApplicationSettings* settings = findSettings(sender);
+ if (settings != NULL)
+ {
+ // any other settings are treated same
+ writeSettings(*settings, aNewValue);
+ }
+ }
+}
+
+void JavaApplicationSettingsViewPrivate::securityWarningsChanged(const QString& aNewValue)
+{
+ if (aNewValue == TXT_USER_DEFINED)
+ {
+ // append the extra settings and values
+ for (int i=0; i= 0 && mExtraSettings[i].getId() == 0)
+ {
+ HbDataFormModelItem * appSettings = mModel->appendDataFormItem(
+ HbDataFormModelItem::ComboBoxItem,
+ mExtraSettings[i].getName(), mSecuritySettingsGroup);
+ if (appSettings)
+ {
+ mExtraSettings[i].setId(appSettings);
+ // when settings the items, the settingsChanged signal gets emitted with the first value
+ // as being the current value. This signal should be discarded (the first value is just
+ // an intermediate value towards the actual current value which gets set shortly).
+ // Therefore set the first value as the current value (this way the settingsChanged
+ // signal gets discarded) and change the current value back to the real current value
+ int currentValue = mExtraSettings[i].getCurrentValue();
+ mExtraSettings[i].setCurrentValue(0);
+ appSettings->setContentWidgetData(QString("items"), mExtraSettings[i].getValues());
+ mExtraSettings[i].setCurrentValue(currentValue);
+ appSettings->setContentWidgetData(QString("currentIndex"),mExtraSettings[i].getCurrentValue());
+ }
+ }
+ }
+ }
+ else
+ {
+ // remove the extra settings
+ for (int i=0; i