[Libreoffice-commits] .: 4 commits - android/experiments bridges/source sal/osl sal/rtl

Tor Lillqvist tml at kemper.freedesktop.org
Mon Mar 26 07:58:47 PDT 2012


 android/experiments/DocumentLoader/Makefile                                                 |   36 +++++++---
 android/experiments/DocumentLoader/src/org/libreoffice/android/examples/DocumentLoader.java |    3 
 bridges/source/jni_uno/jni_data.cxx                                                         |   21 +++++
 bridges/source/jni_uno/jni_info.cxx                                                         |    5 +
 bridges/source/jni_uno/jni_info.h                                                           |    2 
 sal/osl/unx/file.cxx                                                                        |    2 
 sal/rtl/source/bootstrap.cxx                                                                |    8 +-
 7 files changed, 66 insertions(+), 11 deletions(-)

New commits:
commit d770275587f8c48b9ca1ae3905b296cf3dffe3b3
Author: Tor Lillqvist <tlillqvist at suse.com>
Date:   Mon Mar 26 17:52:25 2012 +0300

    More hacking

diff --git a/android/experiments/DocumentLoader/Makefile b/android/experiments/DocumentLoader/Makefile
index 0c31954..7aa3264 100644
--- a/android/experiments/DocumentLoader/Makefile
+++ b/android/experiments/DocumentLoader/Makefile
@@ -112,6 +112,14 @@ copy-stuff:
 #
 # Then other "assets". Let the directory structure under assets mimic
 # that under solver for now.
+#
+# Please note that I have no idea what all of this is really necessary and for
+# much of this stuff being copied, no idea whether it makes any sense at all.
+# Much of this is copy-pasted from android/qa/sc/Makefile (where a couple of
+# unit tests for sc are built, and those do seem to mostly work) and
+# android/qa/desktop/Makefile (mmeeks's desktop demo, also works to some
+# extent).
+#
 	mkdir -p assets/bin/ure assets/lib assets/program assets/xml/ure assets/ComponentTarget/i18npool/util
 	cp $(OUTDIR)/bin/udkapi.rdb assets/bin
 	cp $(OUTDIR)/bin/types.rdb assets/bin
@@ -124,14 +132,24 @@ copy-stuff:
 	cp $(SRC_ROOT)/odk/examples/java/DocumentHandling/test/test1.odt assets
 	cp $(WORKDIR)/ComponentTarget/i18npool/util/i18npool.component assets/ComponentTarget/i18npool/util
 #
-# Set up lofficerc, the "inifile" (see soffice_main())
-	echo '[Bootstrap]' > assets/program/lofficerc
-	echo 'Logo=1' >> assets/program/lofficerc
-	echo 'NativeProgress=1' >> assets/program/lofficerc
-	echo 'URE_BOOTSTRAP=file:///assets/program/fundamentalrc' >> assets/program/lofficerc
-#	echo 'RTL_LOGFILE=file:///dev/log/main' >> assets/program/lofficerc
-	echo "HOME=$(APP_DATA_PATH)/files" >> assets/program/lofficerc
-	echo "OSL_SOCKET_PATH=$(APP_DATA_PATH)/files" >> assets/program/lofficerc
+	mkdir -p assets/ure/share/misc assets/share/registry/res assets/share/config/soffice.cfg
+	cp -R $(OUTDIR)/xml/*.xcd assets/share/registry
+	mv assets/share/registry/fcfg_langpack_en-US.xcd assets/share/registry/res
+	cp -R $(OUTDIR)/xml/uiconfig/* assets/share/config/soffice.cfg
+	cp -R $(OUTDIR)/xml/registry/* assets/share/registry
+#
+# Set up rc, the "inifile". See BootstrapMap::getBaseIni(). As this app
+# doesn't use soffice_main() (at least I think it shouldn't), the
+# rtl::Bootstrap::setIniFilename() call there that hardcodes
+# /assets/program/lofficerc isn't executed. Instead the hardcoding of
+# /assets/rc in BootstrapMap::getBaseIni() gets used.
+	echo '[Bootstrap]' > assets/rc
+	echo 'Logo=1' >> assets/rc
+	echo 'NativeProgress=1' >> assets/rc
+	echo 'URE_BOOTSTRAP=file:///assets/program/fundamentalrc' >> assets/rc
+#	echo 'RTL_LOGFILE=file:///dev/log/main' >> assets/rc
+	echo "HOME=$(APP_DATA_PATH)/cache" >> assets/rc
+	echo "OSL_SOCKET_PATH=$(APP_DATA_PATH)/cache" >> assets/rc
 #
 # Set up fundamentalrc
 	echo '[Bootstrap]' > assets/program/fundamentalrc
@@ -151,7 +169,7 @@ copy-stuff:
 	echo '[Bootstrap]' > assets/program/bootstraprc
 	echo 'InstallMode=<installmode>' >> assets/program/bootstraprc
 	echo 'ProductKey=LibreOffice 3.6' >> assets/program/bootstraprc
-	echo "UserInstallation=file://$(APP_DATA_PATH)/files/.libreoffice" >> assets/program/bootstraprc
+	echo "UserInstallation=file://$(APP_DATA_PATH)/cache/.libreoffice" >> assets/program/bootstraprc
 
 # Set up versionrc
 	echo '[Version]' > assets/program/versionrc
diff --git a/android/experiments/DocumentLoader/src/org/libreoffice/android/examples/DocumentLoader.java b/android/experiments/DocumentLoader/src/org/libreoffice/android/examples/DocumentLoader.java
index f1e6ed5..882c73c 100644
--- a/android/experiments/DocumentLoader/src/org/libreoffice/android/examples/DocumentLoader.java
+++ b/android/experiments/DocumentLoader/src/org/libreoffice/android/examples/DocumentLoader.java
@@ -50,9 +50,12 @@ public class DocumentLoader
 
             Bootstrap.setup(this);
 
+            Bootstrap.putenv("SAL_LOG=yes");
+
             // Load a lot of shlibs here explicitly in advance because that
             // makes debugging work better, sigh
             Bootstrap.dlopen("libvcllo.so");
+            Bootstrap.dlopen("libmergedlo.so");
             
             com.sun.star.uno.XComponentContext xContext = null;
 
commit 10f5ab71a71ec8683e18d37b3b325beff9a5fd6a
Author: Tor Lillqvist <tlillqvist at suse.com>
Date:   Mon Mar 26 17:51:45 2012 +0300

    Hardcode default inifile as /assets/rc on Android

diff --git a/sal/rtl/source/bootstrap.cxx b/sal/rtl/source/bootstrap.cxx
index dc8d02d..a62f3f3 100644
--- a/sal/rtl/source/bootstrap.cxx
+++ b/sal/rtl/source/bootstrap.cxx
@@ -396,7 +396,7 @@ Bootstrap_Impl * BootstrapMap::getBaseIni() {
     if (baseIni_ == 0) {
         rtl::OUString uri;
         if (baseIniUri_.isEmpty()) {
-#ifdef IOS
+#if defined IOS
             // On iOS hardcode the inifile as "rc" in the .app
             // directory. Apps are self-contained anyway, there is no
             // possibility to have several "applications" in the same
@@ -404,6 +404,12 @@ Bootstrap_Impl * BootstrapMap::getBaseIni() {
             const char *inifile = [[@"vnd.sun.star.pathname:" stringByAppendingString: [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent: @"rc"]] UTF8String];
             uri = rtl::OUString(inifile, strlen(inifile), RTL_TEXTENCODING_UTF8);
             resolvePathnameUrl(&uri);
+#elif defined ANDROID
+            // Apps are self-contained on Android, too, can as well hardcode
+            // it as "rc" in the "/assets" directory, i.e.  inside the app's
+            // .apk (zip) archive as the /assets/rc file.
+            uri = rtl::OUString("vnd.sun.star.pathname:/assets/rc");
+            resolvePathnameUrl(&uri);
 #else
             if (CommandLineParameters::get().get(
                     rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("INIFILENAME")),
commit e56c5b511c84a032baecc6c67bb90f13646e939d
Author: Tor Lillqvist <tlillqvist at suse.com>
Date:   Mon Mar 26 17:50:52 2012 +0300

    Add an OSL_TRACE when opening Android /assets files

diff --git a/sal/osl/unx/file.cxx b/sal/osl/unx/file.cxx
index c513f60..5e59f7c 100644
--- a/sal/osl/unx/file.cxx
+++ b/sal/osl/unx/file.cxx
@@ -907,6 +907,8 @@ SAL_CALL osl_openFilePath( const char *cpFilePath, oslFileHandle* pHandle, sal_u
         void *address;
         size_t size;
         address = lo_apkentry(cpFilePath, &size);
+        OSL_TRACE("osl_openFile(%s): %p",
+                  cpFilePath, address);
         if (address == NULL)
         {
             errno = ENOENT;
commit b5ca34fa409bc4cbeb41a84b900612e302f5b0fb
Author: Tor Lillqvist <tlillqvist at suse.com>
Date:   Mon Mar 26 17:45:52 2012 +0300

    Field IDs on Dalvik are more unique than in JVMs

diff --git a/bridges/source/jni_uno/jni_data.cxx b/bridges/source/jni_uno/jni_data.cxx
index 9d77812..cabca76 100644
--- a/bridges/source/jni_uno/jni_data.cxx
+++ b/bridges/source/jni_uno/jni_data.cxx
@@ -1968,7 +1968,26 @@ void Bridge::map_to_java(
                         comp_td)->pParameterizedTypes != 0;
                 for ( sal_Int32 nPos = comp_td->nMembers; nPos--; )
                 {
-                    jfieldID field_id = linfo->m_fields[ nPos ];
+                    jfieldID field_id;
+
+                    // Handle com.sun.star.uno.RuntimeException::Context as a
+                    // special case. In (C++) UNO css::uno::RuntimeException
+                    // is simply a subclass of css::uno::Exception, which
+                    // contains the Context field. In the Java UNO mapping
+                    // css.uno.RuntimeException is a subclass of
+                    // java.lang.RuntimeException, and has a Context field of
+                    // its own, separate from that of css.uno.Exception.
+
+                    // In Dalvik the field IDs of these Context fields
+                    // differ. (In Java VMs they seem to be the same.)
+
+                    if (type_equals( comp_info->m_td.get()->pWeakRef,
+                                     m_jni_info->m_RuntimeException_type.getTypeLibType() )
+                        && nPos == 1)
+                        field_id = m_jni_info->m_field_css_uno_RuntimeException_m_Context;
+                    else
+                        field_id = linfo->m_fields[ nPos ];
+
                     if (0 != field_id)
                     {
                         void const * p =
diff --git a/bridges/source/jni_uno/jni_info.cxx b/bridges/source/jni_uno/jni_info.cxx
index a5ed28a..1d601cf 100644
--- a/bridges/source/jni_uno/jni_info.cxx
+++ b/bridges/source/jni_uno/jni_info.cxx
@@ -762,6 +762,11 @@ JNI_info::JNI_info(
     jni.ensure_no_exception();
     OSL_ASSERT( 0 != m_field_JNI_proxy_m_oid );
 
+    m_field_css_uno_RuntimeException_m_Context = jni->GetFieldID(
+        (jclass) jo_RuntimeException.get(), "Context", "Ljava/lang/Object;" );
+    jni.ensure_no_exception();
+    OSL_ASSERT( 0 != m_field_css_uno_RuntimeException_m_Context );
+
     // get java env
     OUString java_env_type_name( RTL_CONSTASCII_USTRINGPARAM(UNO_LB_JAVA) );
     JLocalAutoRef jo_java(
diff --git a/bridges/source/jni_uno/jni_info.h b/bridges/source/jni_uno/jni_info.h
index a356be2..9cdbbf4 100644
--- a/bridges/source/jni_uno/jni_info.h
+++ b/bridges/source/jni_uno/jni_info.h
@@ -204,6 +204,8 @@ public:
     jfieldID                    m_field_JNI_proxy_m_type;
     jfieldID                    m_field_JNI_proxy_m_oid;
 
+    jfieldID                    m_field_css_uno_RuntimeException_m_Context;
+
     //
     ::com::sun::star::uno::TypeDescription m_XInterface_queryInterface_td;
     ::com::sun::star::uno::Type const & m_Exception_type;


More information about the Libreoffice-commits mailing list