summaryrefslogtreecommitdiff
path: root/android/experiments/DocumentLoader/src
diff options
context:
space:
mode:
authorTor Lillqvist <tlillqvist@suse.com>2011-11-30 21:39:18 +0200
committerTor Lillqvist <tlillqvist@suse.com>2011-11-30 21:52:52 +0200
commit5510127e89d6971a219ce3664e4631d6c6dda2b1 (patch)
tree7e2d7d06892e086700d5b6bddc8a3ec99c476f6b /android/experiments/DocumentLoader/src
parenta7fe1a0a088b2d3d68e3fc4b0d3e8d5a34f3e203 (diff)
Android code refactorig and hacking
Sorry for the large unstructured commit. But hey, the Android code is experimental so far. Extract the native lo-bootstrap code into a fairly normal library built in sal. (Previously it was the JNI part of the "Bootstrap" app.) Just linkink normally to liblo-bootstrap from C++ code that uses it works fine, no need to do a dlsym lookup. Bootstrap is still a subclass of NativeActivity and can thus still be used as an "app" (to start unit tests, or whatever), but can also be used from some other app's Java code to just get access to the lo-bootstrap native methods. Introduce a new top-level "module", android, for Bootstrap and the experiments with DocumentLoader. Note that the experimental DocumentLoader app still crashes. It can't create the com.sun.star.frame.Desktop instance. I spent lots of time debugging in the painfully inadequate ndk-gdb. (Even the newer gdb build from the "mingw-and-ndk" project is quite crappy in many ways.) I should really experiment with corresponding code on a normal platform first before even trying on Android. Basically, I think that if I just can get the concept of Java code that instantiates and uses LO components *in-process* working on a normal desktop platform, it should work on Android, too.
Diffstat (limited to 'android/experiments/DocumentLoader/src')
-rw-r--r--android/experiments/DocumentLoader/src/org/libreoffice/android/examples/DocumentLoader.java113
1 files changed, 113 insertions, 0 deletions
diff --git a/android/experiments/DocumentLoader/src/org/libreoffice/android/examples/DocumentLoader.java b/android/experiments/DocumentLoader/src/org/libreoffice/android/examples/DocumentLoader.java
new file mode 100644
index 000000000000..819cf82ccaba
--- /dev/null
+++ b/android/experiments/DocumentLoader/src/org/libreoffice/android/examples/DocumentLoader.java
@@ -0,0 +1,113 @@
+// -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+
+// Version: MPL 1.1 / GPLv3+ / LGPLv3+
+//
+// The contents of this file are subject to the Mozilla Public License Version
+// 1.1 (the "License"); you may not use this file except in compliance with
+// the License or as specified alternatively below. You may obtain a copy of
+// the License at http://www.mozilla.org/MPL/
+//
+// Software distributed under the License is distributed on an "AS IS" basis,
+// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+// for the specific language governing rights and limitations under the
+// License.
+//
+// Major Contributor(s):
+// Copyright (C) 2011 Tor Lillqvist <tml@iki.fi> (initial developer)
+// Copyright (C) 2011 SUSE Linux http://suse.com (initial developer's employer)
+//
+// All Rights Reserved.
+//
+// For minor contributions see the git repository.
+//
+// Alternatively, the contents of this file may be used under the terms of
+// either the GNU General Public License Version 3 or later (the "GPLv3+"), or
+// the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"),
+// in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable
+// instead of those above.
+
+package org.libreoffice.android.examples;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.util.Log;
+
+import com.sun.star.uno.UnoRuntime;
+
+import org.libreoffice.android.Bootstrap;
+
+public class DocumentLoader
+ extends Activity {
+
+ private static String TAG = "DocumentLoader";
+
+ @Override
+ public void onCreate(Bundle savedInstanceState)
+ {
+ super.onCreate(savedInstanceState);
+
+ try {
+
+ Bootstrap.setup(this);
+
+ Bootstrap.dlopen("libjuh.so");
+
+ // Load more shlibs here explicitly in advance because
+ // that makes debugging work better, sigh
+ Bootstrap.dlopen("libuno_cppu.so");
+ Bootstrap.dlopen("libuno_salhelpergcc3.so");
+ Bootstrap.dlopen("libuno_cppuhelpergcc3.so");
+ Bootstrap.dlopen("libbootstrap.uno.so");
+ Bootstrap.dlopen("libgcc3_uno.so");
+ Bootstrap.dlopen("libjava_uno.so");
+
+ Bootstrap.putenv("UNO_TYPES=file:///assets/bin/udkapi.rdb file:///assets/bin/types.rdb");
+ Bootstrap.putenv("UNO_SERVICES=file:///assets/xml/ure/services.rdb");
+ // Bootstrap.putenv("INIFILENAME=vnd.sun.star.pathname:/assets/uno.ini");
+
+ com.sun.star.uno.XComponentContext xContext = null;
+
+ xContext = com.sun.star.comp.helper.Bootstrap.defaultBootstrap_InitialComponentContext();
+
+ Log.i(TAG, "xContext is" + (xContext!=null ? " not" : "") + " null");
+
+ com.sun.star.lang.XMultiComponentFactory xMCF =
+ xContext.getServiceManager();
+
+ Object oDesktop = xMCF.createInstanceWithContext(
+ "com.sun.star.frame.Desktop", xContext);
+
+ Log.i(TAG, "oDesktop is" + (oDesktop!=null ? " not" : "") + " null");
+
+ com.sun.star.frame.XComponentLoader xCompLoader =
+ (com.sun.star.frame.XComponentLoader)
+ UnoRuntime.queryInterface(
+ com.sun.star.frame.XComponentLoader.class, oDesktop);
+
+ Log.i(TAG, "xCompLoader is" + (xCompLoader!=null ? " not" : "") + " null");
+
+ String input = getIntent().getStringExtra("input");
+ if (input == null)
+ input = "/assets/test1.odt";
+
+ String sUrl = "file://" + input;
+
+ // Loading the wanted document
+ com.sun.star.beans.PropertyValue propertyValues[] =
+ new com.sun.star.beans.PropertyValue[1];
+ propertyValues[0] = new com.sun.star.beans.PropertyValue();
+ propertyValues[0].Name = "Hidden";
+ propertyValues[0].Value = new Boolean(true);
+
+ Object oDoc =
+ xCompLoader.loadComponentFromURL
+ (sUrl, "_blank", 0, propertyValues);
+ }
+ catch (Exception e) {
+ e.printStackTrace(System.err);
+ System.exit(1);
+ }
+ }
+}
+
+// vim:set shiftwidth=4 softtabstop=4 expandtab: