[Libreoffice-commits] core.git: 3 commits - android/experimental android/qa desktop/source vcl/android

Tor Lillqvist tml at iki.fi
Fri Feb 22 08:16:43 PST 2013


 android/experimental/desktop/AndroidManifest.xml                                           |   21 
 android/experimental/desktop/Makefile                                                      |  159 +++++
 android/experimental/desktop/ant.properties                                                |   17 
 android/experimental/desktop/build.xml                                                     |   84 ++
 android/experimental/desktop/fonts.conf                                                    |  154 ++++
 android/experimental/desktop/jni/Android.mk                                                |   19 
 android/experimental/desktop/native-code.cxx                                               |  123 +++
 android/experimental/desktop/project.properties                                            |   14 
 android/experimental/desktop/res/layout/main.xml                                           |   12 
 android/experimental/desktop/res/values/strings.xml                                        |    4 
 android/experimental/desktop/src/org/libreoffice/android/experimental/desktop/Desktop.java |  317 ++++++++++
 android/qa/desktop/AndroidManifest.xml                                                     |   21 
 android/qa/desktop/Makefile                                                                |  164 -----
 android/qa/desktop/ant.properties                                                          |   17 
 android/qa/desktop/build.xml                                                               |   84 --
 android/qa/desktop/fonts.conf                                                              |  154 ----
 android/qa/desktop/jni/Android.mk                                                          |   23 
 android/qa/desktop/native-code.cxx                                                         |  123 ---
 android/qa/desktop/project.properties                                                      |   14 
 android/qa/desktop/res/layout/main.xml                                                     |   12 
 android/qa/desktop/res/values/strings.xml                                                  |    4 
 android/qa/desktop/src/org/libreoffice/android/examples/LODesktop.java                     |  312 ---------
 desktop/source/app/app.cxx                                                                 |    2 
 desktop/source/app/sofficemain.cxx                                                         |    4 
 vcl/android/androidinst.cxx                                                                |    6 
 25 files changed, 931 insertions(+), 933 deletions(-)

New commits:
commit 5f3dacaeef60bec80689ed7b529b3c8bf7823139
Author: Tor Lillqvist <tml at iki.fi>
Date:   Fri Feb 22 18:14:08 2013 +0200

    Try ignoring IPC pipe errors on Android
    
    Change-Id: I906df7fb65226422973e11ad69abdcc4fbd980c9

diff --git a/desktop/source/app/app.cxx b/desktop/source/app/app.cxx
index a07f2bb..eaee30c 100644
--- a/desktop/source/app/app.cxx
+++ b/desktop/source/app/app.cxx
@@ -610,6 +610,8 @@ void Desktop::Init()
             // the normal OS X mechanism that prevents multiple
             // instances of an app from being started should work
             // fine. I hope.
+#elif defined ANDROID
+            // Ignore crack pipe errors on Android, too
 #else
             // Keep using this oddly named BE_PATHINFO_MISSING value
             // for pipe-related errors on other platforms. Of course
commit b7777dbf8e84976e0bc77aa1122f3964c29a575a
Author: Tor Lillqvist <tml at iki.fi>
Date:   Fri Feb 22 17:28:16 2013 +0200

    Rename the package and .apk of the "desktop" test app to avoid confusion
    
    It used the same package name as DocumentLoader and the same .apk name as the
    eary sc cppunit test app. Probably having two unrelated apps with the same
    package name causes some confusion somewhere.
    
    Change-Id: I11414b9cd59694eb97d39bfaeac4ed1066ae3aab

diff --git a/android/experimental/desktop/AndroidManifest.xml b/android/experimental/desktop/AndroidManifest.xml
index c5a6cc0..9e3b4ac 100644
--- a/android/experimental/desktop/AndroidManifest.xml
+++ b/android/experimental/desktop/AndroidManifest.xml
@@ -1,16 +1,16 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-      package="org.libreoffice.android.examples"
+      package="org.libreoffice.experimental.desktop"
       android:versionCode="1"
       android:versionName="1.0">
     <uses-sdk android:minSdkVersion="9"
               android:targetSdkVersion="14"/>
-    <application android:label="LO Desktop App"
+    <application android:label="LibreOffice Desktop"
                  android:debuggable="true"
                  android:largeHeap="true"
                  android:hardwareAccelerated="true">
-        <activity android:name=".LODesktop"
-                  android:label="LO Desktop App"
+        <activity android:name=".Desktop"
+                  android:label="LibreOffice Desktop"
                   android:configChanges="keyboardHidden">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
diff --git a/android/experimental/desktop/Makefile b/android/experimental/desktop/Makefile
index 5ea6f35..7069cb3 100644
--- a/android/experimental/desktop/Makefile
+++ b/android/experimental/desktop/Makefile
@@ -4,7 +4,7 @@ include ../../../config_host.mk
 all: build-ant
 
 # The package of this app
-APP_PACKAGE=org.libreoffice.android.examples
+APP_PACKAGE=org.libreoffice.experimental.desktop
 
 BOOTSTRAPDIR=../../Bootstrap
 include $(BOOTSTRAPDIR)/Makefile.shared
@@ -18,12 +18,8 @@ copy-stuff:
 # Then "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).
+# Please note that some of thses files being set up to be present in
+# the .apk and/or unpacked at install time might be unnecessary.
 #
 	mkdir -p assets/gz.unpack/program/ure assets/lib assets/program assets/xml/ure assets/ComponentTarget/i18npool/util
 	gzip -9 <$(OUTDIR)/bin/offapi.rdb >assets/gz.unpack/program/offapi.rdb
@@ -160,5 +156,4 @@ build-ant: android_version_setup copy-stuff link-so properties setup-jars
 	unset JAVA_HOME && $(ANT) debug
 
 run:
-	$(ANDROID_SDK_HOME)/platform-tools/adb shell am start -n org.libreoffice.android.examples/.LODesktop -e input /asset/test1.odt
-# -e lo-main-delay 20  -e lo-strace yes
\ No newline at end of file
+	$(ANDROID_SDK_HOME)/platform-tools/adb shell am start -n $(APP_PACKAGE)/.Desktop
diff --git a/android/experimental/desktop/build.xml b/android/experimental/desktop/build.xml
index 4aac2f5..7f9cbeb 100644
--- a/android/experimental/desktop/build.xml
+++ b/android/experimental/desktop/build.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<project name="LibreOfficeQA-SC" default="help">
+<project name="LibreOfficeExperimentalDesktop" default="help">
 
     <!-- The local.properties file is created and updated by the 'android' tool.
          It contains the path to the SDK. It should *NOT* be checked into
diff --git a/android/experimental/desktop/fonts.conf b/android/experimental/desktop/fonts.conf
index 699e9d1..e092541 100644
--- a/android/experimental/desktop/fonts.conf
+++ b/android/experimental/desktop/fonts.conf
@@ -74,7 +74,7 @@
 	     later to patch in proper code in fontonfig on Android to
 	     find out a good place.
 	-->
-	<cachedir>/data/data/org.libreoffice.android.examples/fontconfig</cachedir>
+	<cachedir>/data/data/org.libreoffice.experimental.desktop/fontconfig</cachedir>
 
 	<config>
 <!--
diff --git a/android/experimental/desktop/jni/Android.mk b/android/experimental/desktop/jni/Android.mk
index c5c2ed3..9a30878 100644
--- a/android/experimental/desktop/jni/Android.mk
+++ b/android/experimental/desktop/jni/Android.mk
@@ -16,8 +16,4 @@ LOCAL_PATH := $(call my-dir)
 
 include $(CLEAR_VARS)
 
-LOCAL_MODULE    := dummy
-LOCAL_SRC_FILES := dummy.c
-LOCAL_LDLIBS    := 
-
 include $(BUILD_SHARED_LIBRARY)
diff --git a/android/experimental/desktop/native-code.cxx b/android/experimental/desktop/native-code.cxx
index 4f54ccd..e6e4143 100644
--- a/android/experimental/desktop/native-code.cxx
+++ b/android/experimental/desktop/native-code.cxx
@@ -109,13 +109,13 @@ lo_get_libmap(void)
         { NULL, NULL }
     };
 
-    // We need to pull this in, too, as it isn't in any of the libs we
+    // We need to pull these in, too, as they aren't in any of the libs we
     // link with -Wl,--whole-archive.
-    extern void Java_org_libreoffice_android_examples_LODesktop_spawnMain();
-    volatile void *p = (void *) Java_org_libreoffice_android_examples_LODesktop_spawnMain;
+    extern void Java_org_libreoffice_experimental_desktop_Desktop_spawnMain();
+    volatile void *p = (void *) Java_org_libreoffice_experimental_desktop_Desktop_spawnMain;
 
-    extern void Java_org_libreoffice_android_examples_LODesktop_renderVCL();
-    volatile void *q = (void *) Java_org_libreoffice_android_examples_LODesktop_renderVCL;
+    extern void Java_org_libreoffice_experimental_desktop_Desktop_renderVCL();
+    p = (void *) Java_org_libreoffice_experimental_desktop_Desktop_renderVCL;
 
     return map;
 }
diff --git a/android/experimental/desktop/src/org/libreoffice/android/examples/LODesktop.java b/android/experimental/desktop/src/org/libreoffice/android/examples/LODesktop.java
deleted file mode 100644
index bf370e6..0000000
--- a/android/experimental/desktop/src/org/libreoffice/android/examples/LODesktop.java
+++ /dev/null
@@ -1,312 +0,0 @@
-// -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
-//
-// This file is part of the LibreOffice project.
-//
-// This Source Code Form is subject to the terms of the Mozilla Public
-// License, v. 2.0. If a copy of the MPL was not distributed with this
-// file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-// This is just a testbed for ideas and implementations. (Still, it might turn
-// out to be somewhat useful as such while waiting for "real" apps.)
-
-// Important points:
-
-// Everything that might take a long time should be done asynchronously:
-//  - loading the document (loadComponentFromURL())
-//  - counting number of pages (getRendererCount())
-//  - rendering a page (render())
-
-// Unclear whether pages can be rendered in parallel. Probably best to
-// serialize all the above in the same worker thread. We use
-// AsyncTask.SERIAL_EXECUTOR below.
-
-// While a page is loading ideally should display some animated spinner (but
-// for now just a static "please wait" text).
-
-// ===
-
-// How should we handle re-rendering at higher resolution when zooming in, and
-// then panning around?
-
-// Hopefully when LO is asked to render just a part of a page (i.e. the
-// MapMode of the device rendered to causes significant parts of the page to
-// be outside the device) the code is clever enough to quickly skip stuff that
-// will be clipped. But I don't hold my breath.
-
-// How could we do it?
-
-// 1/ Re-render just the zoomed-in area. Probably not a good idea, as probably
-// the user will almost immediately also pan a bit or zoom out a bit, which
-// would cause a re-render.
-
-// 2/ Some kind of tiled approach. Initially just one tile for the whole
-// page. When zooming in, at some point (2x?) split the currently visible
-// tiles into four sub-tiles, each initially displaying the same resolution as
-// the parent tile. Start asynchronous rendering of visible sub-tiles at
-// double resolution. Keep the "parent" rendered bitmap but don't keep bitmaps
-// that go out of view. (Except perhaps for some caching.) When zooming out,
-// at some point (0.5x?) merge four sub-tiles back into one. Hmm. Is this the
-// right approach?
-
-// In any case, also this rendering at higher resolution should be done
-// asynchronously, of course. If the user zooms in and pans around, the
-// existing bitmap will be shown scaled (and ugly) until required rendering
-// has finished and then the affected tiles are replaced with
-// higher-resolution ones.
-
-package org.libreoffice.android.examples;
-
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.ColorFilter;
-import android.graphics.Matrix;
-import android.graphics.PixelFormat;
-import android.graphics.Paint;
-import android.graphics.Point;
-import android.graphics.Rect;
-import android.graphics.drawable.BitmapDrawable;
-import android.graphics.drawable.ColorDrawable;
-import android.graphics.drawable.Drawable;
-import android.os.AsyncTask;
-import android.os.Bundle;
-import android.util.Log;
-import android.view.GestureDetector;
-import android.view.Gravity;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-import android.view.MotionEvent;
-import android.view.ViewGroup;
-import android.view.animation.Animation;
-import android.view.animation.AnimationSet;
-import android.view.animation.TranslateAnimation;
-import android.widget.ImageView;
-import android.widget.NumberPicker;
-import android.widget.TextView;
-import android.widget.ViewFlipper;
-import android.widget.ViewSwitcher;
-
-import junit.framework.Assert;
-
-import com.sun.star.awt.Size;
-import com.sun.star.awt.XBitmap;
-import com.sun.star.awt.XControl;
-import com.sun.star.awt.XDevice;
-import com.sun.star.awt.XToolkitExperimental;
-import com.sun.star.beans.PropertyValue;
-import com.sun.star.frame.XComponentLoader;
-import com.sun.star.frame.XController;
-import com.sun.star.frame.XFrame;
-import com.sun.star.frame.XModel;
-import com.sun.star.lang.XEventListener;
-import com.sun.star.lang.XMultiComponentFactory;
-import com.sun.star.lang.XTypeProvider;
-import com.sun.star.uno.Type;
-import com.sun.star.uno.UnoRuntime;
-import com.sun.star.uno.XComponentContext;
-import com.sun.star.view.XRenderable;
-
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.util.ArrayList;
-
-import org.libreoffice.android.Bootstrap;
-
-public class LODesktop
-    extends Activity
-{
-    private static final String TAG = "LODesktop";
-
-    /* implementend by desktop */
-    private static native void spawnMain();
-
-    /* implementend by vcl */
-    public static native void renderVCL(Bitmap bitmap);
-
-    /**
-     * This class contains the state that is initialized once and never changes
-     * (not specific to a document or a view).
-     */
-    class BootstrapContext
-    {
-        public long timingOverhead;
-        public XComponentContext componentContext;
-        public XMultiComponentFactory mcf;
-        public XComponentLoader componentLoader;
-        public XToolkitExperimental toolkit;
-        public XDevice dummySmallDevice;
-    }
-
-    BootstrapContext bootstrapContext;
-    Bundle extras;
-
-    class MyXController
-        implements XController
-    {
-
-        XFrame frame;
-        XModel model;
-
-        public void attachFrame(XFrame frame)
-        {
-            Log.i(TAG, "attachFrame");
-            this.frame = frame;
-        }
-
-        public boolean attachModel(XModel model)
-        {
-            Log.i(TAG, "attachModel");
-            this.model = model;
-            return true;
-        }
-
-        public boolean suspend(boolean doSuspend)
-        {
-            Log.i(TAG, "suspend");
-            return false;
-        }
-
-        public Object getViewData()
-        {
-            Log.i(TAG, "getViewData");
-            return null;
-        }
-
-        public void restoreViewData(Object data)
-        {
-            Log.i(TAG, "restoreViewData");
-        }
-
-        public XModel getModel()
-        {
-            Log.i(TAG, "getModel");
-            return model;
-        }
-
-        public XFrame getFrame()
-        {
-            Log.i(TAG, "getFrame");
-            return frame;
-        }
-
-        public void dispose()
-        {
-            Log.i(TAG, "dispose");
-        }
-
-        public void addEventListener(XEventListener listener)
-        {
-            Log.i(TAG, "addEventListener");
-        }
-
-        public void removeEventListener(XEventListener listener)
-        {
-            Log.i(TAG, "removeEventListener");
-        }
-    }
-
-    // FIXME: we should prolly manage a bitmap buffer here and give it to
-    // VCL to render into ... and pull the WM/stacking pieces up into the Java ...
-    // [ perhaps ;-]
-    // how can we get an event to "create a window" - need a JNI callback I guess ...
-
-    private void initBootstrapContext()
-    {
-        try
-        {
-            bootstrapContext = new BootstrapContext();
-
-            long t0 = System.currentTimeMillis();
-            long t1 = System.currentTimeMillis();
-            bootstrapContext.timingOverhead = t1 - t0;
-
-            Bootstrap.setup(this);
-
-            // Avoid all the old style OSL_TRACE calls especially in vcl
-            Bootstrap.putenv("SAL_LOG=+WARN+INFO");
-
-            // Log.i(TAG, "Sleeping NOW");
-            // Thread.sleep(20000);
-
-            bootstrapContext.componentContext = com.sun.star.comp.helper.Bootstrap.defaultBootstrap_InitialComponentContext();
-
-            Log.i(TAG, "context is" + (bootstrapContext.componentContext!=null ? " not" : "") + " null");
-
-            bootstrapContext.mcf = bootstrapContext.componentContext.getServiceManager();
-
-            Log.i(TAG, "mcf is" + (bootstrapContext.mcf!=null ? " not" : "") + " null");
-        }
-        catch (Exception e)
-        {
-            e.printStackTrace(System.err);
-            finish();
-        }
-    }
-
-    @Override
-    public void onCreate(Bundle savedInstanceState)
-    {
-        super.onCreate(savedInstanceState);
-
-        Log.i(TAG, "onCreate - added here\n");
-
-        try {
-            String input;
-//            input = getIntent().getStringExtra("input");
-//            if (input == null)
-//            input = "/assets/test1.odt";
-            input = "-writer";
-
-            // We need to fake up an argv, and the argv[0] even needs to
-            // point to some file name that we can pretend is the "program".
-            // setCommandArgs() will prefix argv[0] with the app's data
-            // directory.
-
-            String[] argv = { "lo-document-loader", input };
-
-            Bootstrap.setCommandArgs(argv);
-
-            if (bootstrapContext == null)
-                initBootstrapContext();
-
-            spawnMain();
-        }
-        catch (Exception e) {
-            e.printStackTrace(System.err);
-            finish();
-        }
-
-        Log.i(TAG, "onCreate - set content view\n");
-        setContentView(new BitmapView(this, this));
-    }
-}
-
-    class BitmapView extends android.view.View
-    {
-        LODesktop mDesktop;
-        Bitmap mBitmap;
-
-        public BitmapView(Context context, LODesktop desktop)
-        {
-            super(context);
-            mDesktop = desktop;
-            mBitmap = Bitmap.createBitmap(1000, 600, Bitmap.Config.ARGB_8888);
-        }
-
-        @Override protected void onDraw(Canvas canvas) {
-//            canvas.drawColor(0xFF1ABCDD);
-
-            mDesktop.renderVCL(mBitmap);
-            canvas.drawBitmap(mBitmap, 0, 0, null);
-
-            // re-call ourselves a bit later ...
-            invalidate();
-        }
-    }
-
-// vim:set shiftwidth=4 softtabstop=4 expandtab:
diff --git a/android/experimental/desktop/src/org/libreoffice/android/experimental/desktop/Desktop.java b/android/experimental/desktop/src/org/libreoffice/android/experimental/desktop/Desktop.java
new file mode 100644
index 0000000..6087528
--- /dev/null
+++ b/android/experimental/desktop/src/org/libreoffice/android/experimental/desktop/Desktop.java
@@ -0,0 +1,317 @@
+// -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+//
+// This file is part of the LibreOffice project.
+//
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this
+// file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+// This is just a testbed for ideas and implementations. (Still, it might turn
+// out to be somewhat useful as such while waiting for "real" apps.)
+
+// ================ NOTE ================
+// Note that these comments are copy-pasted from another test app,
+// DocumentLoader, and might or might not be much relevant for this
+// source file and how it will evolve.
+
+// Important points:
+
+// Everything that might take a long time should be done asynchronously:
+//  - loading the document (loadComponentFromURL())
+//  - counting number of pages (getRendererCount())
+//  - rendering a page (render())
+
+// Unclear whether pages can be rendered in parallel. Probably best to
+// serialize all the above in the same worker thread. We use
+// AsyncTask.SERIAL_EXECUTOR below.
+
+// While a page is loading ideally should display some animated spinner (but
+// for now just a static "please wait" text).
+
+// ===
+
+// How should we handle re-rendering at higher resolution when zooming in, and
+// then panning around?
+
+// Hopefully when LO is asked to render just a part of a page (i.e. the
+// MapMode of the device rendered to causes significant parts of the page to
+// be outside the device) the code is clever enough to quickly skip stuff that
+// will be clipped. But I don't hold my breath.
+
+// How could we do it?
+
+// 1/ Re-render just the zoomed-in area. Probably not a good idea, as probably
+// the user will almost immediately also pan a bit or zoom out a bit, which
+// would cause a re-render.
+
+// 2/ Some kind of tiled approach. Initially just one tile for the whole
+// page. When zooming in, at some point (2x?) split the currently visible
+// tiles into four sub-tiles, each initially displaying the same resolution as
+// the parent tile. Start asynchronous rendering of visible sub-tiles at
+// double resolution. Keep the "parent" rendered bitmap but don't keep bitmaps
+// that go out of view. (Except perhaps for some caching.) When zooming out,
+// at some point (0.5x?) merge four sub-tiles back into one. Hmm. Is this the
+// right approach?
+
+// In any case, also this rendering at higher resolution should be done
+// asynchronously, of course. If the user zooms in and pans around, the
+// existing bitmap will be shown scaled (and ugly) until required rendering
+// has finished and then the affected tiles are replaced with
+// higher-resolution ones.
+
+package org.libreoffice.experimental.desktop;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.ColorFilter;
+import android.graphics.Matrix;
+import android.graphics.PixelFormat;
+import android.graphics.Paint;
+import android.graphics.Point;
+import android.graphics.Rect;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.ColorDrawable;
+import android.graphics.drawable.Drawable;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.GestureDetector;
+import android.view.Gravity;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import android.view.MotionEvent;
+import android.view.ViewGroup;
+import android.view.animation.Animation;
+import android.view.animation.AnimationSet;
+import android.view.animation.TranslateAnimation;
+import android.widget.ImageView;
+import android.widget.NumberPicker;
+import android.widget.TextView;
+import android.widget.ViewFlipper;
+import android.widget.ViewSwitcher;
+
+import junit.framework.Assert;
+
+import com.sun.star.awt.Size;
+import com.sun.star.awt.XBitmap;
+import com.sun.star.awt.XControl;
+import com.sun.star.awt.XDevice;
+import com.sun.star.awt.XToolkitExperimental;
+import com.sun.star.beans.PropertyValue;
+import com.sun.star.frame.XComponentLoader;
+import com.sun.star.frame.XController;
+import com.sun.star.frame.XFrame;
+import com.sun.star.frame.XModel;
+import com.sun.star.lang.XEventListener;
+import com.sun.star.lang.XMultiComponentFactory;
+import com.sun.star.lang.XTypeProvider;
+import com.sun.star.uno.Type;
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.uno.XComponentContext;
+import com.sun.star.view.XRenderable;
+
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.util.ArrayList;
+
+import org.libreoffice.android.Bootstrap;
+
+public class Desktop
+    extends Activity
+{
+    private static final String TAG = "LODesktop";
+
+    /* implementend by desktop */
+    private static native void spawnMain();
+
+    /* implementend by vcl */
+    public static native void renderVCL(Bitmap bitmap);
+
+    /**
+     * This class contains the state that is initialized once and never changes
+     * (not specific to a document or a view).
+     */
+    class BootstrapContext
+    {
+        public long timingOverhead;
+        public XComponentContext componentContext;
+        public XMultiComponentFactory mcf;
+        public XComponentLoader componentLoader;
+        public XToolkitExperimental toolkit;
+        public XDevice dummySmallDevice;
+    }
+
+    BootstrapContext bootstrapContext;
+    Bundle extras;
+
+    class MyXController
+        implements XController
+    {
+
+        XFrame frame;
+        XModel model;
+
+        public void attachFrame(XFrame frame)
+        {
+            Log.i(TAG, "attachFrame");
+            this.frame = frame;
+        }
+
+        public boolean attachModel(XModel model)
+        {
+            Log.i(TAG, "attachModel");
+            this.model = model;
+            return true;
+        }
+
+        public boolean suspend(boolean doSuspend)
+        {
+            Log.i(TAG, "suspend");
+            return false;
+        }
+
+        public Object getViewData()
+        {
+            Log.i(TAG, "getViewData");
+            return null;
+        }
+
+        public void restoreViewData(Object data)
+        {
+            Log.i(TAG, "restoreViewData");
+        }
+
+        public XModel getModel()
+        {
+            Log.i(TAG, "getModel");
+            return model;
+        }
+
+        public XFrame getFrame()
+        {
+            Log.i(TAG, "getFrame");
+            return frame;
+        }
+
+        public void dispose()
+        {
+            Log.i(TAG, "dispose");
+        }
+
+        public void addEventListener(XEventListener listener)
+        {
+            Log.i(TAG, "addEventListener");
+        }
+
+        public void removeEventListener(XEventListener listener)
+        {
+            Log.i(TAG, "removeEventListener");
+        }
+    }
+
+    // FIXME: we should prolly manage a bitmap buffer here and give it to
+    // VCL to render into ... and pull the WM/stacking pieces up into the Java ...
+    // [ perhaps ;-]
+    // how can we get an event to "create a window" - need a JNI callback I guess ...
+
+    private void initBootstrapContext()
+    {
+        try
+        {
+            bootstrapContext = new BootstrapContext();
+
+            long t0 = System.currentTimeMillis();
+            long t1 = System.currentTimeMillis();
+            bootstrapContext.timingOverhead = t1 - t0;
+
+            Bootstrap.setup(this);
+
+            // Avoid all the old style OSL_TRACE calls especially in vcl
+            Bootstrap.putenv("SAL_LOG=+WARN+INFO");
+
+            // Log.i(TAG, "Sleeping NOW");
+            // Thread.sleep(20000);
+
+            bootstrapContext.componentContext = com.sun.star.comp.helper.Bootstrap.defaultBootstrap_InitialComponentContext();
+
+            Log.i(TAG, "context is" + (bootstrapContext.componentContext!=null ? " not" : "") + " null");
+
+            bootstrapContext.mcf = bootstrapContext.componentContext.getServiceManager();
+
+            Log.i(TAG, "mcf is" + (bootstrapContext.mcf!=null ? " not" : "") + " null");
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace(System.err);
+            finish();
+        }
+    }
+
+    @Override
+    public void onCreate(Bundle savedInstanceState)
+    {
+        super.onCreate(savedInstanceState);
+
+        Log.i(TAG, "onCreate - added here\n");
+
+        try {
+            String input;
+//            input = getIntent().getStringExtra("input");
+//            if (input == null)
+//            input = "/assets/test1.odt";
+            input = "-writer";
+
+            // We need to fake up an argv, and the argv[0] even needs to
+            // point to some file name that we can pretend is the "program".
+            // setCommandArgs() will prefix argv[0] with the app's data
+            // directory.
+
+            String[] argv = { "lo-document-loader", input };
+
+            Bootstrap.setCommandArgs(argv);
+
+            if (bootstrapContext == null)
+                initBootstrapContext();
+
+            spawnMain();
+        }
+        catch (Exception e) {
+            e.printStackTrace(System.err);
+            finish();
+        }
+
+        Log.i(TAG, "onCreate - set content view\n");
+        setContentView(new BitmapView(this, this));
+    }
+}
+
+    class BitmapView extends android.view.View
+    {
+        Desktop mDesktop;
+        Bitmap mBitmap;
+
+        public BitmapView(Context context, Desktop desktop)
+        {
+            super(context);
+            mDesktop = desktop;
+            mBitmap = Bitmap.createBitmap(1000, 600, Bitmap.Config.ARGB_8888);
+        }
+
+        @Override protected void onDraw(Canvas canvas) {
+//            canvas.drawColor(0xFF1ABCDD);
+
+            mDesktop.renderVCL(mBitmap);
+            canvas.drawBitmap(mBitmap, 0, 0, null);
+
+            // re-call ourselves a bit later ...
+            invalidate();
+        }
+    }
+
+// vim:set shiftwidth=4 softtabstop=4 expandtab:
diff --git a/desktop/source/app/sofficemain.cxx b/desktop/source/app/sofficemain.cxx
index 327d9f3..cc40648 100644
--- a/desktop/source/app/sofficemain.cxx
+++ b/desktop/source/app/sofficemain.cxx
@@ -103,8 +103,8 @@ public:
 };
 
 extern "C" SAL_JNI_EXPORT void JNICALL
-Java_org_libreoffice_android_examples_LODesktop_spawnMain(JNIEnv* /* env */,
-                                                          jobject /* dummy */)
+Java_org_libreoffice_experimental_desktop_Desktop_spawnMain(JNIEnv* /* env */,
+                                                            jobject /* dummy */)
 {
     fprintf(stderr, "Spawn main!\n");
     new MainThread();
diff --git a/vcl/android/androidinst.cxx b/vcl/android/androidinst.cxx
index 7daae4e..b55701b 100644
--- a/vcl/android/androidinst.cxx
+++ b/vcl/android/androidinst.cxx
@@ -889,9 +889,9 @@ int AndroidSalSystem::ShowNativeDialog( const rtl::OUString& rTitle,
 
 // Render everything
 extern "C" SAL_JNI_EXPORT void JNICALL
-Java_org_libreoffice_android_examples_LODesktop_renderVCL(JNIEnv *env,
-                                                          jobject /* dummy */,
-                                                          jobject bitmap)
+Java_org_libreoffice_experimental_desktop_Desktop_renderVCL(JNIEnv *env,
+                                                            jobject /* dummy */,
+                                                            jobject bitmap)
 {
     if (!bHitIdle)
         return;
commit b02c075a16ff0b198053cf36828056c6e7ab45e7
Author: Tor Lillqvist <tml at iki.fi>
Date:   Fri Feb 22 15:08:23 2013 +0200

    Rename android/qa/desktop to android/experimenmtal/desktop
    
    It's not really a "QA" thing.
    
    Change-Id: I85f7b5610ecd409972b7d504bfc567707d35556e

diff --git a/android/experimental/desktop/AndroidManifest.xml b/android/experimental/desktop/AndroidManifest.xml
new file mode 100644
index 0000000..c5a6cc0
--- /dev/null
+++ b/android/experimental/desktop/AndroidManifest.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+      package="org.libreoffice.android.examples"
+      android:versionCode="1"
+      android:versionName="1.0">
+    <uses-sdk android:minSdkVersion="9"
+              android:targetSdkVersion="14"/>
+    <application android:label="LO Desktop App"
+                 android:debuggable="true"
+                 android:largeHeap="true"
+                 android:hardwareAccelerated="true">
+        <activity android:name=".LODesktop"
+                  android:label="LO Desktop App"
+                  android:configChanges="keyboardHidden">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+    </application>
+</manifest>
diff --git a/android/experimental/desktop/Makefile b/android/experimental/desktop/Makefile
new file mode 100644
index 0000000..5ea6f35
--- /dev/null
+++ b/android/experimental/desktop/Makefile
@@ -0,0 +1,164 @@
+include ../../../config_host.mk
+
+# The default target just builds.
+all: build-ant
+
+# The package of this app
+APP_PACKAGE=org.libreoffice.android.examples
+
+BOOTSTRAPDIR=../../Bootstrap
+include $(BOOTSTRAPDIR)/Makefile.shared
+
+# The name of the Bootstrap activity class
+BOOTSTRAP=org.libreoffice.android.Bootstrap
+
+# The default target just builds.
+
+copy-stuff:
+# Then "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/gz.unpack/program/ure assets/lib assets/program assets/xml/ure assets/ComponentTarget/i18npool/util
+	gzip -9 <$(OUTDIR)/bin/offapi.rdb >assets/gz.unpack/program/offapi.rdb
+	gzip -9 <$(OUTDIR)/bin/oovbaapi.rdb >assets/gz.unpack/program/oovbaapi.rdb
+	gzip -9 <$(OUTDIR)/bin/types.rdb >assets/gz.unpack/program/types.rdb
+	gzip -9 <$(OUTDIR)/bin/ure/types.rdb >assets/gz.unpack/program/ure/types.rdb
+# For some reason the vnd.sun.star.expand:$LO_LIB_DIR doesn't seem to work, it expands to empty!?
+# So just hardcode the known APP_DATA_PATH for now...
+	for F in xml/services xml/ure/services; do \
+		sed -e 's!uri="vnd.sun.star.expand:$$LO_LIB_DIR/!uri="file://$(APP_DATA_PATH)/lib/!g' <$(OUTDIR)/$$F.rdb >assets/$$F.rdb; \
+	done
+	cp $(SRC_ROOT)/odk/examples/java/DocumentHandling/test/test1.odt \
+	   $(SRC_ROOT)/sc/qa/unit/data/xls/border.xls \
+	   $(SRC_ROOT)/sw/qa/core/data/odt/test.odt \
+	   $(SRC_ROOT)/sw/qa/core/data/doc/testVba.doc \
+		assets
+	cp $(WORKDIR)/ComponentTarget/i18npool/util/i18npool.component assets/ComponentTarget/i18npool/util
+#
+	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
+	echo "LO_LIB_DIR=file://$(APP_DATA_PATH)/lib/" >> assets/program/fundamentalrc
+	echo "URE_LIB_DIR=file://$(APP_DATA_PATH)/lib/" >> assets/program/fundamentalrc # checkme - is this used to find configs ?
+	echo 'BRAND_BASE_DIR=file:///assets' >> assets/program/fundamentalrc
+	echo 'CONFIGURATION_LAYERS=xcsxcu:$${BRAND_BASE_DIR}/share/registry module:$${BRAND_BASE_DIR}/share/registry/modules res:$${BRAND_BASE_DIR}/share/registry' >> assets/program/fundamentalrc
+	echo 'URE_BIN_DIR=file:///assets/ure/bin/dir/not-here/can-we/exec-anyway' >> assets/program/fundamentalrc
+	echo 'URE_MORE_TYPES=file://$(APP_DATA_PATH)/program/offapi.rdb file://$(APP_DATA_PATH)/program/oovbaapi.rdb' >> assets/program/fundamentalrc
+	echo 'URE_MORE_SERVICES=file:///assets/xml/services.rdb <$$BRAND_BASE_DIR/program/services>*' >> assets/program/fundamentalrc
+#
+# Set up unorc
+	echo '[Bootstrap]' > assets/program/unorc
+	echo "URE_INTERNAL_LIB_DIR=file://$(APP_DATA_PATH)/lib/" >> assets/program/unorc
+	echo 'UNO_TYPES=file://$(APP_DATA_PATH)/program/ure/types.rdb file://$(APP_DATA_PATH)/program/types.rdb $${URE_MORE_TYPES}' >> assets/program/unorc
+	echo 'UNO_SERVICES=file:///assets/xml/ure/services.rdb $${URE_MORE_SERVICES}' >> assets/program/unorc
+#
+# Set up bootstraprc
+	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)" >> assets/program/bootstraprc
+#
+# Set up versionrc
+	echo '[Version]' > assets/program/versionrc
+	echo 'AllLanguages=en-US' >> assets/program/versionrc
+	echo 'BuildVersion=' >> assets/program/versionrc
+	echo 'buildid=dead-beef' >> assets/program/versionrc
+	echo 'ProductMajor=360' >> assets/program/versionrc
+	echo 'ProductMinor=1' >> assets/program/versionrc
+	echo 'ReferenceOOoMajorMinor=3.6' >> assets/program/versionrc
+#
+# .res files
+	mkdir -p assets/program/resource
+	cp $(OUTDIR)/bin/*en-US.res assets/program/resource
+#
+# Assets that are unpacked at run-time into the app's data directory. These
+# are files read by non-LO code, fontconfig and freetype for now, that doesn't
+# understand "/assets" paths.
+	mkdir -p assets/unpack/etc/fonts
+	cp fonts.conf assets/unpack/etc/fonts
+# $UserInstallation/user/fonts is added to the fontconfig path in
+# vcl/generic/fontmanager/helper.cxx: psp::getFontPath(). UserInstallation is
+# set to the app's data dir above.
+	mkdir -p assets/gz.unpack/user/fonts
+	for F in $(OUTDIR)/pck/Liberation*.ttf $(OUTDIR)/pck/Gen*.ttf $(OUTDIR)/pck/opens___.ttf; do \
+		gzip -9 <$$F >assets/gz.unpack/user/fonts/`basename $$F`; \
+	done
+#
+# Then gdbserver and gdb.setup so that we can debug with ndk-gdb.
+#
+	mkdir -p $(SODEST)
+	cp $(ANDROID_NDK_GDBSERVER) $(SODEST)
+	echo set solib-search-path ./obj/local/$(ANDROID_APP_ABI) >$(SODEST)/gdb.setup
+# ------------ Pieces not from DocumentLoader ------------
+# tango artwork / icons
+	mkdir -p assets/share/config
+	cp -R $(OUTDIR)/bin/images_tango.zip assets/share/config/images.zip
+# shell / splash images
+	mkdir -p assets/program
+	cp -r $(SRC_ROOT)/icon-themes/galaxy/brand/* assets/program
+# presets - becomes the users home directory, .stamp forces .zip dir creation
+	for D in $(strip autocorr autotext backup basic config gallery \
+	         psprint/driver psprint/fontmetric template \
+		 uno_packages/cache wordbook); do \
+		mkdir -p assets/presets/$$D ; \
+		echo "content" > assets/presets/$$D/stamp; \
+	done
+# lofficerc
+	mkdir -p assets/program/
+	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
+# - this looks useful but breaks more than it fixes ...
+#	echo "DISABLE_EXTENSION_SYNCHRONIZATION=1" >> assets/program/lofficerc
+
+
+setup-jars:
+#
+# Copy jar files we need
+#
+	for F in $(strip \
+		   java_uno \
+		   juh \
+		   jurt \
+		   ridl \
+		   unoil \
+		   unoloader \
+		  ); do \
+	    $(call COPYJAR,$(OUTDIR)/bin/$${F}.jar); \
+	done
+
+build-ant: android_version_setup copy-stuff link-so properties setup-jars
+	unset JAVA_HOME && $(ANT) debug
+
+run:
+	$(ANDROID_SDK_HOME)/platform-tools/adb shell am start -n org.libreoffice.android.examples/.LODesktop -e input /asset/test1.odt
+# -e lo-main-delay 20  -e lo-strace yes
\ No newline at end of file
diff --git a/android/experimental/desktop/ant.properties b/android/experimental/desktop/ant.properties
new file mode 100644
index 0000000..ee52d86
--- /dev/null
+++ b/android/experimental/desktop/ant.properties
@@ -0,0 +1,17 @@
+# This file is used to override default values used by the Ant build system.
+#
+# This file must be checked in Version Control Systems, as it is
+# integral to the build system of your project.
+
+# This file is only used by the Ant script.
+
+# You can use this to override default values such as
+#  'source.dir' for the location of your java source folder and
+#  'out.dir' for the location of your output folder.
+
+# You can also use it define how the release builds are signed by declaring
+# the following properties:
+#  'key.store' for the location of your keystore and
+#  'key.alias' for the name of the key to use.
+# The password will be asked during the build when you use the 'release' target.
+
diff --git a/android/experimental/desktop/build.xml b/android/experimental/desktop/build.xml
new file mode 100644
index 0000000..4aac2f5
--- /dev/null
+++ b/android/experimental/desktop/build.xml
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="LibreOfficeQA-SC" default="help">
+
+    <!-- The local.properties file is created and updated by the 'android' tool.
+         It contains the path to the SDK. It should *NOT* be checked into
+         Version Control Systems. -->
+    <loadproperties srcFile="local.properties" />
+
+    <!-- The ant.properties file can be created by you. It is only edited by the
+         'android' tool to add properties to it.
+         This is the place to change some Ant specific build properties.
+         Here are some properties you may want to change/update:
+
+         source.dir
+             The name of the source directory. Default is 'src'.
+         out.dir
+             The name of the output directory. Default is 'bin'.
+
+         For other overridable properties, look at the beginning of the rules
+         files in the SDK, at tools/ant/build.xml
+
+         Properties related to the SDK location or the project target should
+         be updated using the 'android' tool with the 'update' action.
+
+         This file is an integral part of the build system for your
+         application and should be checked into Version Control Systems.
+
+         -->
+    <property file="ant.properties" />
+
+    <!-- The project.properties file is created and updated by the 'android'
+         tool, as well as ADT.
+
+         This contains project specific properties such as project target, and library
+         dependencies. Lower level build properties are stored in ant.properties
+         (or in .classpath for Eclipse projects).
+
+         This file is an integral part of the build system for your
+         application and should be checked into Version Control Systems. -->
+    <loadproperties srcFile="project.properties" />
+
+    <!-- quick check on sdk.dir -->
+    <fail
+            message="sdk.dir is missing. Make sure to generate local.properties using 'android update project'"
+            unless="sdk.dir"
+    />
+
+
+<!-- extension targets. Uncomment the ones where you want to do custom work
+     in between standard targets -->
+<!--
+    <target name="-pre-build">
+    </target>
+    <target name="-pre-compile">
+    </target>
+
+    /* This is typically used for code obfuscation.
+       Compiled code location: ${out.classes.absolute.dir}
+       If this is not done in place, override ${out.dex.input.absolute.dir} */
+    <target name="-post-compile">
+    </target>
+-->
+
+    <!-- Import the actual build file.
+
+         To customize existing targets, there are two options:
+         - Customize only one target:
+             - copy/paste the target into this file, *before* the
+               <import> task.
+             - customize it to your needs.
+         - Customize the whole content of build.xml
+             - copy/paste the content of the rules files (minus the top node)
+               into this file, replacing the <import> task.
+             - customize to your needs.
+
+         ***********************
+         ****** IMPORTANT ******
+         ***********************
+         In all cases you must update the value of version-tag below to read 'custom' instead of an integer,
+         in order to avoid having your file be overridden by tools such as "android update project"
+    -->
+    <!-- version-tag: 1 -->
+    <import file="${android.library.reference.1}/no-resource-compress.xml" />
+</project>
diff --git a/android/experimental/desktop/fonts.conf b/android/experimental/desktop/fonts.conf
new file mode 100644
index 0000000..699e9d1
--- /dev/null
+++ b/android/experimental/desktop/fonts.conf
@@ -0,0 +1,154 @@
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<!-- /etc/fonts/fonts.conf file to configure system font access -->
+<fontconfig>
+
+<!-- Font directory list -->
+
+	<dir>/system/fonts</dir>
+
+	<alias>
+		<family>serif</family>
+		<prefer>
+			<family>Droid Serif</family>
+		</prefer>
+	</alias>
+	<alias>
+		<family>sans-serif</family>
+		<prefer>
+			<family>Roboto</family>
+			<family>Droid Sans Fallback</family>
+		</prefer>
+	</alias>
+	<alias>
+		<family>monospace</family>
+		<prefer>
+			<family>Droid Sans Mono</family>
+		</prefer>
+	</alias>
+
+<!--
+  Accept deprecated 'mono' alias, replacing it with 'monospace'
+-->
+	<match target="pattern">
+		<test qual="any" name="family">
+			<string>mono</string>
+		</test>
+		<edit name="family" mode="assign">
+			<string>monospace</string>
+		</edit>
+	</match>
+
+<!--
+  Accept alternate 'sans serif' spelling, replacing it with 'sans-serif'
+-->
+	<match target="pattern">
+		<test qual="any" name="family">
+			<string>sans serif</string>
+		</test>
+		<edit name="family" mode="assign">
+			<string>sans-serif</string>
+		</edit>
+	</match>
+
+<!--
+  Accept deprecated 'sans' alias, replacing it with 'sans-serif'
+-->
+	<match target="pattern">
+		<test qual="any" name="family">
+			<string>sans</string>
+		</test>
+		<edit name="family" mode="assign">
+			<string>sans-serif</string>
+		</edit>
+	</match>
+
+<!--
+  Load local system customization file
+-->
+	<include ignore_missing="yes">conf.d</include>
+
+<!-- Font cache directory list -->
+
+	<!-- Yeah this hardcoding is wrong of course, will have to fix
+	     later to patch in proper code in fontonfig on Android to
+	     find out a good place.
+	-->
+	<cachedir>/data/data/org.libreoffice.android.examples/fontconfig</cachedir>
+
+	<config>
+<!--
+  These are the default Unicode chars that are expected to be blank
+  in fonts.  All other blank chars are assumed to be broken and
+  won't appear in the resulting charsets
+ -->
+		<blank>
+			<int>0x0020</int>	<!-- SPACE -->
+			<int>0x00A0</int>	<!-- NO-BREAK SPACE -->
+			<int>0x00AD</int>	<!-- SOFT HYPHEN -->
+			<int>0x034F</int>	<!-- COMBINING GRAPHEME JOINER -->
+			<int>0x0600</int>	<!-- ARABIC NUMBER SIGN -->
+			<int>0x0601</int>	<!-- ARABIC SIGN SANAH -->
+			<int>0x0602</int>	<!-- ARABIC FOOTNOTE MARKER -->
+			<int>0x0603</int>	<!-- ARABIC SIGN SAFHA -->
+			<int>0x06DD</int>	<!-- ARABIC END OF AYAH -->
+			<int>0x070F</int>	<!-- SYRIAC ABBREVIATION MARK -->
+			<int>0x115F</int>	<!-- HANGUL CHOSEONG FILLER -->
+			<int>0x1160</int>	<!-- HANGUL JUNGSEONG FILLER -->
+			<int>0x1680</int>	<!-- OGHAM SPACE MARK -->
+			<int>0x17B4</int>	<!-- KHMER VOWEL INHERENT AQ -->
+			<int>0x17B5</int>	<!-- KHMER VOWEL INHERENT AA -->
+			<int>0x180E</int>	<!-- MONGOLIAN VOWEL SEPARATOR -->
+			<int>0x2000</int>	<!-- EN QUAD -->
+			<int>0x2001</int>	<!-- EM QUAD -->
+			<int>0x2002</int>	<!-- EN SPACE -->
+			<int>0x2003</int>	<!-- EM SPACE -->
+			<int>0x2004</int>	<!-- THREE-PER-EM SPACE -->
+			<int>0x2005</int>	<!-- FOUR-PER-EM SPACE -->
+			<int>0x2006</int>	<!-- SIX-PER-EM SPACE -->
+			<int>0x2007</int>	<!-- FIGURE SPACE -->
+			<int>0x2008</int>	<!-- PUNCTUATION SPACE -->
+			<int>0x2009</int>	<!-- THIN SPACE -->
+			<int>0x200A</int>	<!-- HAIR SPACE -->
+			<int>0x200B</int>	<!-- ZERO WIDTH SPACE -->
+			<int>0x200C</int>	<!-- ZERO WIDTH NON-JOINER -->
+			<int>0x200D</int>	<!-- ZERO WIDTH JOINER -->
+			<int>0x200E</int>	<!-- LEFT-TO-RIGHT MARK -->
+			<int>0x200F</int>	<!-- RIGHT-TO-LEFT MARK -->
+			<int>0x2028</int>	<!-- LINE SEPARATOR -->
+			<int>0x2029</int>	<!-- PARAGRAPH SEPARATOR -->
+			<int>0x202A</int>	<!-- LEFT-TO-RIGHT EMBEDDING -->
+			<int>0x202B</int>	<!-- RIGHT-TO-LEFT EMBEDDING -->
+			<int>0x202C</int>	<!-- POP DIRECTIONAL FORMATTING -->
+			<int>0x202D</int>	<!-- LEFT-TO-RIGHT OVERRIDE -->
+			<int>0x202E</int>	<!-- RIGHT-TO-LEFT OVERRIDE -->
+			<int>0x202F</int>	<!-- NARROW NO-BREAK SPACE -->
+			<int>0x205F</int>	<!-- MEDIUM MATHEMATICAL SPACE -->
+			<int>0x2060</int>	<!-- WORD JOINER -->
+			<int>0x2061</int>	<!-- FUNCTION APPLICATION -->
+			<int>0x2062</int>	<!-- INVISIBLE TIMES -->
+			<int>0x2063</int>	<!-- INVISIBLE SEPARATOR -->
+			<int>0x206A</int>	<!-- INHIBIT SYMMETRIC SWAPPING -->
+			<int>0x206B</int>	<!-- ACTIVATE SYMMETRIC SWAPPING -->
+			<int>0x206C</int>	<!-- INHIBIT ARABIC FORM SHAPING -->
+			<int>0x206D</int>	<!-- ACTIVATE ARABIC FORM SHAPING -->
+			<int>0x206E</int>	<!-- NATIONAL DIGIT SHAPES -->
+			<int>0x206F</int>	<!-- NOMINAL DIGIT SHAPES -->
+			<int>0x2800</int>	<!-- BRAILLE PATTERN BLANK -->
+			<int>0x3000</int>	<!-- IDEOGRAPHIC SPACE -->
+			<int>0x3164</int>	<!-- HANGUL FILLER -->
+			<int>0xFEFF</int>	<!-- ZERO WIDTH NO-BREAK SPACE -->
+			<int>0xFFA0</int>	<!-- HALFWIDTH HANGUL FILLER -->
+			<int>0xFFF9</int>	<!-- INTERLINEAR ANNOTATION ANCHOR -->
+			<int>0xFFFA</int>	<!-- INTERLINEAR ANNOTATION SEPARATOR -->
+			<int>0xFFFB</int>	<!-- INTERLINEAR ANNOTATION TERMINATOR -->
+		</blank>
+<!--
+  Rescan configuration every 3600 seconds when FcFontSetList is called
+ -->
+		<rescan>
+			<int>3600</int>
+		</rescan>
+	</config>
+
+</fontconfig>
diff --git a/android/experimental/desktop/jni/Android.mk b/android/experimental/desktop/jni/Android.mk
new file mode 100644
index 0000000..c5c2ed3
--- /dev/null
+++ b/android/experimental/desktop/jni/Android.mk
@@ -0,0 +1,23 @@
+# Copyright (C) 2009 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE    := dummy
+LOCAL_SRC_FILES := dummy.c
+LOCAL_LDLIBS    := 
+
+include $(BUILD_SHARED_LIBRARY)
diff --git a/android/experimental/desktop/native-code.cxx b/android/experimental/desktop/native-code.cxx
new file mode 100644
index 0000000..4f54ccd
--- /dev/null
+++ b/android/experimental/desktop/native-code.cxx
@@ -0,0 +1,123 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include "osl/detail/android-bootstrap.h"
+
+extern "C"
+{
+    extern void * animcore_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
+    extern void * avmedia_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
+    extern void * cui_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
+    extern void * dba_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
+    extern void * dbaxml_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
+    extern void * evtatt_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
+    extern void * fileacc_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
+    extern void * frm_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
+    extern void * fsstorage_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
+    extern void * fwk_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
+    extern void * fwl_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
+    extern void * fwm_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
+    extern void * hwp_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
+    extern void * hyphen_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
+    extern void * lng_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
+    extern void * lnth_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
+    extern void * lotuswordpro_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
+    extern void * protocolhandler_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
+    extern void * oox_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
+    extern void * sb_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
+    extern void * sc_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
+    extern void * scd_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
+    extern void * scfilt_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
+    extern void * sd_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
+    extern void * sdd_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
+    extern void * sm_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
+    extern void * smd_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
+    extern void * spl_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
+    extern void * spell_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
+    extern void * svgfilter_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
+    extern void * sw_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
+    extern void * svx_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
+    extern void * swd_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
+    extern void * t602filter_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
+    extern void * textfd_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
+    extern void * unoxml_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
+    extern void * unordf_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
+    extern void * uui_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
+    extern void * wpftdraw_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
+    extern void * wpftwriter_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
+    extern void * xmlfd_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
+    extern void * xmlsecurity_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
+    extern void * xo_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
+    extern void * xof_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
+}
+
+extern "C"
+__attribute__ ((visibility("default")))
+const lib_to_component_mapping *
+lo_get_libmap(void)
+{
+    static lib_to_component_mapping map[] = {
+        { "libanimcorelo.a", animcore_component_getFactory },
+        { "libavmedialo.a", avmedia_component_getFactory },
+        { "libdbalo.a", dba_component_getFactory },
+        { "libdbaxmllo.a", dbaxml_component_getFactory },
+        { "libcuilo.a", cui_component_getFactory },
+        { "libevtattlo.a", evtatt_component_getFactory },
+        { "libfileacc.a", fileacc_component_getFactory },
+        { "libfrmlo.a", frm_component_getFactory },
+        { "libfsstorage.uno.a", fsstorage_component_getFactory },
+        { "libfwklo.a", fwk_component_getFactory },
+        { "libfwllo.a", fwl_component_getFactory },
+        { "libfwmlo.a", fwm_component_getFactory },
+        { "libhwplo.a", hwp_component_getFactory },
+        { "libhyphenlo.a", hyphen_component_getFactory },
+        { "liblnglo.a", lng_component_getFactory },
+        { "liblnthlo.a", lnth_component_getFactory },
+        { "liblwpftlo.a", lotuswordpro_component_getFactory },
+        { "libooxlo.a", oox_component_getFactory },
+        { "libprotocolhandlerlo.a", protocolhandler_component_getFactory },
+        { "libscdlo.a", scd_component_getFactory },
+        { "libscfiltlo.a", scfilt_component_getFactory },
+        { "libsblo.a", sb_component_getFactory },
+        { "libsclo.a", sc_component_getFactory },
+        { "libsddlo.a", sdd_component_getFactory },
+        { "libsdlo.a", sd_component_getFactory },
+        { "libsmdlo.a", smd_component_getFactory },
+        { "libsmlo.a", sm_component_getFactory },
+        { "libspllo.a", spl_component_getFactory },
+        { "libsvgfilterlo.a", svgfilter_component_getFactory },
+        { "libsvxlo.a", svx_component_getFactory },
+        { "libswdlo.a", swd_component_getFactory },
+        { "libswlo.a", sw_component_getFactory },
+        { "libt602filterlo.a", t602filter_component_getFactory },
+        { "libtextfdlo.a", textfd_component_getFactory },
+        { "libunordflo.a", unordf_component_getFactory },
+        { "libunoxmllo.a", unoxml_component_getFactory },
+        { "libuuilo.a", uui_component_getFactory },
+        { "libwpftdrawlo.a", wpftdraw_component_getFactory },
+        { "libwpftwriterlo.a", wpftwriter_component_getFactory },
+        { "libxmlfdlo.a", xmlfd_component_getFactory },
+        { "libxmlsecurity.a", xmlsecurity_component_getFactory },
+        { "libxoflo.a", xof_component_getFactory },
+        { "libxolo.a", xo_component_getFactory },
+        { NULL, NULL }
+    };
+
+    // We need to pull this in, too, as it isn't in any of the libs we
+    // link with -Wl,--whole-archive.
+    extern void Java_org_libreoffice_android_examples_LODesktop_spawnMain();
+    volatile void *p = (void *) Java_org_libreoffice_android_examples_LODesktop_spawnMain;
+
+    extern void Java_org_libreoffice_android_examples_LODesktop_renderVCL();
+    volatile void *q = (void *) Java_org_libreoffice_android_examples_LODesktop_renderVCL;
+
+    return map;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/android/experimental/desktop/project.properties b/android/experimental/desktop/project.properties
new file mode 100644
index 0000000..06b2d88
--- /dev/null
+++ b/android/experimental/desktop/project.properties
@@ -0,0 +1,14 @@
+# This file is automatically generated by Android Tools.
+# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
+#
+# This file must be checked in Version Control Systems.
+#
+# To customize properties used by the Ant build system use,
+# "ant.properties", and override values to adapt the script to your
+# project structure.
+
+# Project target.
+target=android-14
+
+# Use the Bootstrap class
+android.library.reference.1=../../Bootstrap
diff --git a/android/experimental/desktop/res/layout/main.xml b/android/experimental/desktop/res/layout/main.xml
new file mode 100644
index 0000000..5839d8c
--- /dev/null
+++ b/android/experimental/desktop/res/layout/main.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="vertical"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent"
+    >
+<TextView
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    android:text="Hello World"
+    />
+</LinearLayout>
diff --git a/android/experimental/desktop/res/values/strings.xml b/android/experimental/desktop/res/values/strings.xml
new file mode 100644
index 0000000..1672493
--- /dev/null
+++ b/android/experimental/desktop/res/values/strings.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="app_name">LibreOffice Viewer test</string>
+</resources>
diff --git a/android/experimental/desktop/src/org/libreoffice/android/examples/LODesktop.java b/android/experimental/desktop/src/org/libreoffice/android/examples/LODesktop.java
new file mode 100644
index 0000000..bf370e6
--- /dev/null
+++ b/android/experimental/desktop/src/org/libreoffice/android/examples/LODesktop.java
@@ -0,0 +1,312 @@
+// -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+//
+// This file is part of the LibreOffice project.
+//
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this
+// file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+// This is just a testbed for ideas and implementations. (Still, it might turn
+// out to be somewhat useful as such while waiting for "real" apps.)
+
+// Important points:
+
+// Everything that might take a long time should be done asynchronously:
+//  - loading the document (loadComponentFromURL())
+//  - counting number of pages (getRendererCount())
+//  - rendering a page (render())
+
+// Unclear whether pages can be rendered in parallel. Probably best to
+// serialize all the above in the same worker thread. We use
+// AsyncTask.SERIAL_EXECUTOR below.
+
+// While a page is loading ideally should display some animated spinner (but
+// for now just a static "please wait" text).
+
+// ===
+
+// How should we handle re-rendering at higher resolution when zooming in, and
+// then panning around?
+
+// Hopefully when LO is asked to render just a part of a page (i.e. the
+// MapMode of the device rendered to causes significant parts of the page to
+// be outside the device) the code is clever enough to quickly skip stuff that
+// will be clipped. But I don't hold my breath.
+
+// How could we do it?
+
+// 1/ Re-render just the zoomed-in area. Probably not a good idea, as probably
+// the user will almost immediately also pan a bit or zoom out a bit, which
+// would cause a re-render.
+
+// 2/ Some kind of tiled approach. Initially just one tile for the whole
+// page. When zooming in, at some point (2x?) split the currently visible
+// tiles into four sub-tiles, each initially displaying the same resolution as
+// the parent tile. Start asynchronous rendering of visible sub-tiles at
+// double resolution. Keep the "parent" rendered bitmap but don't keep bitmaps
+// that go out of view. (Except perhaps for some caching.) When zooming out,
+// at some point (0.5x?) merge four sub-tiles back into one. Hmm. Is this the
+// right approach?
+
+// In any case, also this rendering at higher resolution should be done
+// asynchronously, of course. If the user zooms in and pans around, the
+// existing bitmap will be shown scaled (and ugly) until required rendering
+// has finished and then the affected tiles are replaced with
+// higher-resolution ones.
+
+package org.libreoffice.android.examples;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.ColorFilter;
+import android.graphics.Matrix;
+import android.graphics.PixelFormat;
+import android.graphics.Paint;
+import android.graphics.Point;
+import android.graphics.Rect;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.ColorDrawable;
+import android.graphics.drawable.Drawable;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.GestureDetector;
+import android.view.Gravity;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import android.view.MotionEvent;
+import android.view.ViewGroup;
+import android.view.animation.Animation;
+import android.view.animation.AnimationSet;
+import android.view.animation.TranslateAnimation;
+import android.widget.ImageView;
+import android.widget.NumberPicker;
+import android.widget.TextView;
+import android.widget.ViewFlipper;
+import android.widget.ViewSwitcher;
+
+import junit.framework.Assert;
+
+import com.sun.star.awt.Size;
+import com.sun.star.awt.XBitmap;
+import com.sun.star.awt.XControl;
+import com.sun.star.awt.XDevice;
+import com.sun.star.awt.XToolkitExperimental;
+import com.sun.star.beans.PropertyValue;
+import com.sun.star.frame.XComponentLoader;
+import com.sun.star.frame.XController;
+import com.sun.star.frame.XFrame;
+import com.sun.star.frame.XModel;
+import com.sun.star.lang.XEventListener;
+import com.sun.star.lang.XMultiComponentFactory;
+import com.sun.star.lang.XTypeProvider;
+import com.sun.star.uno.Type;
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.uno.XComponentContext;
+import com.sun.star.view.XRenderable;
+
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.util.ArrayList;
+
+import org.libreoffice.android.Bootstrap;
+
+public class LODesktop
+    extends Activity
+{
+    private static final String TAG = "LODesktop";
+
+    /* implementend by desktop */
+    private static native void spawnMain();
+
+    /* implementend by vcl */
+    public static native void renderVCL(Bitmap bitmap);
+
+    /**
+     * This class contains the state that is initialized once and never changes
+     * (not specific to a document or a view).
+     */
+    class BootstrapContext
+    {
+        public long timingOverhead;
+        public XComponentContext componentContext;
+        public XMultiComponentFactory mcf;
+        public XComponentLoader componentLoader;
+        public XToolkitExperimental toolkit;
+        public XDevice dummySmallDevice;
+    }
+
+    BootstrapContext bootstrapContext;
+    Bundle extras;
+
+    class MyXController
+        implements XController
+    {
+
+        XFrame frame;
+        XModel model;
+
+        public void attachFrame(XFrame frame)
+        {
+            Log.i(TAG, "attachFrame");
+            this.frame = frame;
+        }
+
+        public boolean attachModel(XModel model)
+        {
+            Log.i(TAG, "attachModel");
+            this.model = model;
+            return true;
+        }
+
+        public boolean suspend(boolean doSuspend)
+        {
+            Log.i(TAG, "suspend");
+            return false;
+        }
+
+        public Object getViewData()
+        {
+            Log.i(TAG, "getViewData");
+            return null;
+        }
+
+        public void restoreViewData(Object data)
+        {
+            Log.i(TAG, "restoreViewData");
+        }
+
+        public XModel getModel()
+        {
+            Log.i(TAG, "getModel");
+            return model;
+        }
+
+        public XFrame getFrame()
+        {
+            Log.i(TAG, "getFrame");
+            return frame;
+        }
+
+        public void dispose()
+        {
+            Log.i(TAG, "dispose");
+        }
+
+        public void addEventListener(XEventListener listener)
+        {
+            Log.i(TAG, "addEventListener");
+        }
+
+        public void removeEventListener(XEventListener listener)
+        {
+            Log.i(TAG, "removeEventListener");
+        }
+    }
+
+    // FIXME: we should prolly manage a bitmap buffer here and give it to
+    // VCL to render into ... and pull the WM/stacking pieces up into the Java ...
+    // [ perhaps ;-]
+    // how can we get an event to "create a window" - need a JNI callback I guess ...
+
+    private void initBootstrapContext()
+    {
+        try
+        {
+            bootstrapContext = new BootstrapContext();
+
+            long t0 = System.currentTimeMillis();
+            long t1 = System.currentTimeMillis();
+            bootstrapContext.timingOverhead = t1 - t0;
+
+            Bootstrap.setup(this);
+
+            // Avoid all the old style OSL_TRACE calls especially in vcl
+            Bootstrap.putenv("SAL_LOG=+WARN+INFO");
+
+            // Log.i(TAG, "Sleeping NOW");
+            // Thread.sleep(20000);
+
+            bootstrapContext.componentContext = com.sun.star.comp.helper.Bootstrap.defaultBootstrap_InitialComponentContext();
+
+            Log.i(TAG, "context is" + (bootstrapContext.componentContext!=null ? " not" : "") + " null");
+
+            bootstrapContext.mcf = bootstrapContext.componentContext.getServiceManager();
+
+            Log.i(TAG, "mcf is" + (bootstrapContext.mcf!=null ? " not" : "") + " null");
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace(System.err);
+            finish();
+        }
+    }
+
+    @Override
+    public void onCreate(Bundle savedInstanceState)
+    {
+        super.onCreate(savedInstanceState);
+
+        Log.i(TAG, "onCreate - added here\n");
+
+        try {
+            String input;
+//            input = getIntent().getStringExtra("input");
+//            if (input == null)
+//            input = "/assets/test1.odt";
+            input = "-writer";
+
+            // We need to fake up an argv, and the argv[0] even needs to
+            // point to some file name that we can pretend is the "program".
+            // setCommandArgs() will prefix argv[0] with the app's data
+            // directory.
+
+            String[] argv = { "lo-document-loader", input };
+
+            Bootstrap.setCommandArgs(argv);
+
+            if (bootstrapContext == null)
+                initBootstrapContext();
+
+            spawnMain();
+        }
+        catch (Exception e) {
+            e.printStackTrace(System.err);
+            finish();
+        }
+
+        Log.i(TAG, "onCreate - set content view\n");
+        setContentView(new BitmapView(this, this));
+    }
+}
+
+    class BitmapView extends android.view.View
+    {
+        LODesktop mDesktop;
+        Bitmap mBitmap;
+
+        public BitmapView(Context context, LODesktop desktop)
+        {
+            super(context);
+            mDesktop = desktop;
+            mBitmap = Bitmap.createBitmap(1000, 600, Bitmap.Config.ARGB_8888);
+        }
+
+        @Override protected void onDraw(Canvas canvas) {
+//            canvas.drawColor(0xFF1ABCDD);
+
+            mDesktop.renderVCL(mBitmap);
+            canvas.drawBitmap(mBitmap, 0, 0, null);
+
+            // re-call ourselves a bit later ...
+            invalidate();
+        }
+    }
+
+// vim:set shiftwidth=4 softtabstop=4 expandtab:
diff --git a/android/qa/desktop/AndroidManifest.xml b/android/qa/desktop/AndroidManifest.xml
deleted file mode 100644
index c5a6cc0..0000000
--- a/android/qa/desktop/AndroidManifest.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-      package="org.libreoffice.android.examples"
-      android:versionCode="1"
-      android:versionName="1.0">
-    <uses-sdk android:minSdkVersion="9"
-              android:targetSdkVersion="14"/>
-    <application android:label="LO Desktop App"
-                 android:debuggable="true"
-                 android:largeHeap="true"
-                 android:hardwareAccelerated="true">
-        <activity android:name=".LODesktop"
-                  android:label="LO Desktop App"
-                  android:configChanges="keyboardHidden">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.LAUNCHER" />
-            </intent-filter>
-        </activity>
-    </application>
-</manifest>
diff --git a/android/qa/desktop/Makefile b/android/qa/desktop/Makefile
deleted file mode 100644
index 5ea6f35..0000000
--- a/android/qa/desktop/Makefile
+++ /dev/null
@@ -1,164 +0,0 @@
-include ../../../config_host.mk
-
-# The default target just builds.
-all: build-ant
-
-# The package of this app
-APP_PACKAGE=org.libreoffice.android.examples
-
-BOOTSTRAPDIR=../../Bootstrap
-include $(BOOTSTRAPDIR)/Makefile.shared
-
-# The name of the Bootstrap activity class
-BOOTSTRAP=org.libreoffice.android.Bootstrap
-
-# The default target just builds.
-
-copy-stuff:
-# Then "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/gz.unpack/program/ure assets/lib assets/program assets/xml/ure assets/ComponentTarget/i18npool/util
-	gzip -9 <$(OUTDIR)/bin/offapi.rdb >assets/gz.unpack/program/offapi.rdb
-	gzip -9 <$(OUTDIR)/bin/oovbaapi.rdb >assets/gz.unpack/program/oovbaapi.rdb
-	gzip -9 <$(OUTDIR)/bin/types.rdb >assets/gz.unpack/program/types.rdb
-	gzip -9 <$(OUTDIR)/bin/ure/types.rdb >assets/gz.unpack/program/ure/types.rdb
-# For some reason the vnd.sun.star.expand:$LO_LIB_DIR doesn't seem to work, it expands to empty!?
-# So just hardcode the known APP_DATA_PATH for now...
-	for F in xml/services xml/ure/services; do \
-		sed -e 's!uri="vnd.sun.star.expand:$$LO_LIB_DIR/!uri="file://$(APP_DATA_PATH)/lib/!g' <$(OUTDIR)/$$F.rdb >assets/$$F.rdb; \
-	done
-	cp $(SRC_ROOT)/odk/examples/java/DocumentHandling/test/test1.odt \
-	   $(SRC_ROOT)/sc/qa/unit/data/xls/border.xls \
-	   $(SRC_ROOT)/sw/qa/core/data/odt/test.odt \
-	   $(SRC_ROOT)/sw/qa/core/data/doc/testVba.doc \
-		assets
-	cp $(WORKDIR)/ComponentTarget/i18npool/util/i18npool.component assets/ComponentTarget/i18npool/util
-#
-	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
-	echo "LO_LIB_DIR=file://$(APP_DATA_PATH)/lib/" >> assets/program/fundamentalrc
-	echo "URE_LIB_DIR=file://$(APP_DATA_PATH)/lib/" >> assets/program/fundamentalrc # checkme - is this used to find configs ?
-	echo 'BRAND_BASE_DIR=file:///assets' >> assets/program/fundamentalrc
-	echo 'CONFIGURATION_LAYERS=xcsxcu:$${BRAND_BASE_DIR}/share/registry module:$${BRAND_BASE_DIR}/share/registry/modules res:$${BRAND_BASE_DIR}/share/registry' >> assets/program/fundamentalrc
-	echo 'URE_BIN_DIR=file:///assets/ure/bin/dir/not-here/can-we/exec-anyway' >> assets/program/fundamentalrc
-	echo 'URE_MORE_TYPES=file://$(APP_DATA_PATH)/program/offapi.rdb file://$(APP_DATA_PATH)/program/oovbaapi.rdb' >> assets/program/fundamentalrc
-	echo 'URE_MORE_SERVICES=file:///assets/xml/services.rdb <$$BRAND_BASE_DIR/program/services>*' >> assets/program/fundamentalrc
-#
-# Set up unorc
-	echo '[Bootstrap]' > assets/program/unorc
-	echo "URE_INTERNAL_LIB_DIR=file://$(APP_DATA_PATH)/lib/" >> assets/program/unorc
-	echo 'UNO_TYPES=file://$(APP_DATA_PATH)/program/ure/types.rdb file://$(APP_DATA_PATH)/program/types.rdb $${URE_MORE_TYPES}' >> assets/program/unorc
-	echo 'UNO_SERVICES=file:///assets/xml/ure/services.rdb $${URE_MORE_SERVICES}' >> assets/program/unorc
-#
-# Set up bootstraprc
-	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)" >> assets/program/bootstraprc
-#
-# Set up versionrc
-	echo '[Version]' > assets/program/versionrc
-	echo 'AllLanguages=en-US' >> assets/program/versionrc
-	echo 'BuildVersion=' >> assets/program/versionrc
-	echo 'buildid=dead-beef' >> assets/program/versionrc
-	echo 'ProductMajor=360' >> assets/program/versionrc
-	echo 'ProductMinor=1' >> assets/program/versionrc
-	echo 'ReferenceOOoMajorMinor=3.6' >> assets/program/versionrc
-#
-# .res files
-	mkdir -p assets/program/resource
-	cp $(OUTDIR)/bin/*en-US.res assets/program/resource
-#
-# Assets that are unpacked at run-time into the app's data directory. These
-# are files read by non-LO code, fontconfig and freetype for now, that doesn't
-# understand "/assets" paths.
-	mkdir -p assets/unpack/etc/fonts
-	cp fonts.conf assets/unpack/etc/fonts
-# $UserInstallation/user/fonts is added to the fontconfig path in
-# vcl/generic/fontmanager/helper.cxx: psp::getFontPath(). UserInstallation is
-# set to the app's data dir above.
-	mkdir -p assets/gz.unpack/user/fonts
-	for F in $(OUTDIR)/pck/Liberation*.ttf $(OUTDIR)/pck/Gen*.ttf $(OUTDIR)/pck/opens___.ttf; do \
-		gzip -9 <$$F >assets/gz.unpack/user/fonts/`basename $$F`; \
-	done
-#
-# Then gdbserver and gdb.setup so that we can debug with ndk-gdb.
-#
-	mkdir -p $(SODEST)
-	cp $(ANDROID_NDK_GDBSERVER) $(SODEST)
-	echo set solib-search-path ./obj/local/$(ANDROID_APP_ABI) >$(SODEST)/gdb.setup
-# ------------ Pieces not from DocumentLoader ------------
-# tango artwork / icons
-	mkdir -p assets/share/config
-	cp -R $(OUTDIR)/bin/images_tango.zip assets/share/config/images.zip
-# shell / splash images
-	mkdir -p assets/program
-	cp -r $(SRC_ROOT)/icon-themes/galaxy/brand/* assets/program
-# presets - becomes the users home directory, .stamp forces .zip dir creation
-	for D in $(strip autocorr autotext backup basic config gallery \
-	         psprint/driver psprint/fontmetric template \
-		 uno_packages/cache wordbook); do \
-		mkdir -p assets/presets/$$D ; \
-		echo "content" > assets/presets/$$D/stamp; \
-	done
-# lofficerc
-	mkdir -p assets/program/
-	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
-# - this looks useful but breaks more than it fixes ...
-#	echo "DISABLE_EXTENSION_SYNCHRONIZATION=1" >> assets/program/lofficerc
-
-
-setup-jars:
-#
-# Copy jar files we need
-#
-	for F in $(strip \
-		   java_uno \
-		   juh \
-		   jurt \
-		   ridl \
-		   unoil \
-		   unoloader \
-		  ); do \
-	    $(call COPYJAR,$(OUTDIR)/bin/$${F}.jar); \
-	done
-
-build-ant: android_version_setup copy-stuff link-so properties setup-jars
-	unset JAVA_HOME && $(ANT) debug
-
-run:
-	$(ANDROID_SDK_HOME)/platform-tools/adb shell am start -n org.libreoffice.android.examples/.LODesktop -e input /asset/test1.odt
-# -e lo-main-delay 20  -e lo-strace yes
\ No newline at end of file
diff --git a/android/qa/desktop/ant.properties b/android/qa/desktop/ant.properties
deleted file mode 100644
index ee52d86..0000000
--- a/android/qa/desktop/ant.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-# This file is used to override default values used by the Ant build system.
-#
-# This file must be checked in Version Control Systems, as it is
-# integral to the build system of your project.
-
-# This file is only used by the Ant script.
-
-# You can use this to override default values such as
-#  'source.dir' for the location of your java source folder and
-#  'out.dir' for the location of your output folder.
-
-# You can also use it define how the release builds are signed by declaring
-# the following properties:
-#  'key.store' for the location of your keystore and
-#  'key.alias' for the name of the key to use.
-# The password will be asked during the build when you use the 'release' target.
-
diff --git a/android/qa/desktop/build.xml b/android/qa/desktop/build.xml
deleted file mode 100644
index 4aac2f5..0000000
--- a/android/qa/desktop/build.xml
+++ /dev/null
@@ -1,84 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project name="LibreOfficeQA-SC" default="help">
-
-    <!-- The local.properties file is created and updated by the 'android' tool.
-         It contains the path to the SDK. It should *NOT* be checked into
-         Version Control Systems. -->
-    <loadproperties srcFile="local.properties" />
-
-    <!-- The ant.properties file can be created by you. It is only edited by the
-         'android' tool to add properties to it.
-         This is the place to change some Ant specific build properties.
-         Here are some properties you may want to change/update:
-
-         source.dir
-             The name of the source directory. Default is 'src'.
-         out.dir
-             The name of the output directory. Default is 'bin'.
-
-         For other overridable properties, look at the beginning of the rules
-         files in the SDK, at tools/ant/build.xml
-
-         Properties related to the SDK location or the project target should
-         be updated using the 'android' tool with the 'update' action.
-
-         This file is an integral part of the build system for your
-         application and should be checked into Version Control Systems.
-
-         -->
-    <property file="ant.properties" />
-
-    <!-- The project.properties file is created and updated by the 'android'
-         tool, as well as ADT.
-
-         This contains project specific properties such as project target, and library
-         dependencies. Lower level build properties are stored in ant.properties
-         (or in .classpath for Eclipse projects).
-
-         This file is an integral part of the build system for your
-         application and should be checked into Version Control Systems. -->
-    <loadproperties srcFile="project.properties" />
-
-    <!-- quick check on sdk.dir -->
-    <fail
-            message="sdk.dir is missing. Make sure to generate local.properties using 'android update project'"
-            unless="sdk.dir"
-    />
-
-
-<!-- extension targets. Uncomment the ones where you want to do custom work
-     in between standard targets -->
-<!--
-    <target name="-pre-build">
-    </target>
-    <target name="-pre-compile">
-    </target>
-
-    /* This is typically used for code obfuscation.
-       Compiled code location: ${out.classes.absolute.dir}
-       If this is not done in place, override ${out.dex.input.absolute.dir} */
-    <target name="-post-compile">
-    </target>
--->
-
-    <!-- Import the actual build file.
-
-         To customize existing targets, there are two options:
-         - Customize only one target:
-             - copy/paste the target into this file, *before* the
-               <import> task.
-             - customize it to your needs.
-         - Customize the whole content of build.xml
-             - copy/paste the content of the rules files (minus the top node)
-               into this file, replacing the <import> task.
-             - customize to your needs.
-
-         ***********************
-         ****** IMPORTANT ******
-         ***********************
-         In all cases you must update the value of version-tag below to read 'custom' instead of an integer,
-         in order to avoid having your file be overridden by tools such as "android update project"
-    -->
-    <!-- version-tag: 1 -->
-    <import file="${android.library.reference.1}/no-resource-compress.xml" />
-</project>
diff --git a/android/qa/desktop/fonts.conf b/android/qa/desktop/fonts.conf
deleted file mode 100644
index 699e9d1..0000000
--- a/android/qa/desktop/fonts.conf
+++ /dev/null
@@ -1,154 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-<!-- /etc/fonts/fonts.conf file to configure system font access -->
-<fontconfig>
-
-<!-- Font directory list -->
-
-	<dir>/system/fonts</dir>
-
-	<alias>
-		<family>serif</family>
-		<prefer>
-			<family>Droid Serif</family>
-		</prefer>
-	</alias>
-	<alias>
-		<family>sans-serif</family>
-		<prefer>
-			<family>Roboto</family>
-			<family>Droid Sans Fallback</family>
-		</prefer>
-	</alias>
-	<alias>
-		<family>monospace</family>
-		<prefer>
-			<family>Droid Sans Mono</family>
-		</prefer>
-	</alias>
-
-<!--
-  Accept deprecated 'mono' alias, replacing it with 'monospace'
--->
-	<match target="pattern">
-		<test qual="any" name="family">
-			<string>mono</string>
-		</test>
-		<edit name="family" mode="assign">
-			<string>monospace</string>
-		</edit>
-	</match>
-
-<!--
-  Accept alternate 'sans serif' spelling, replacing it with 'sans-serif'
--->
-	<match target="pattern">
-		<test qual="any" name="family">
-			<string>sans serif</string>
-		</test>
-		<edit name="family" mode="assign">
-			<string>sans-serif</string>
-		</edit>
-	</match>
-
-<!--
-  Accept deprecated 'sans' alias, replacing it with 'sans-serif'
--->
-	<match target="pattern">
-		<test qual="any" name="family">
-			<string>sans</string>
-		</test>
-		<edit name="family" mode="assign">
-			<string>sans-serif</string>
-		</edit>
-	</match>
-
-<!--
-  Load local system customization file
--->
-	<include ignore_missing="yes">conf.d</include>
-
-<!-- Font cache directory list -->
-
-	<!-- Yeah this hardcoding is wrong of course, will have to fix
-	     later to patch in proper code in fontonfig on Android to
-	     find out a good place.
-	-->
-	<cachedir>/data/data/org.libreoffice.android.examples/fontconfig</cachedir>
-
-	<config>
-<!--
-  These are the default Unicode chars that are expected to be blank
-  in fonts.  All other blank chars are assumed to be broken and
-  won't appear in the resulting charsets
- -->
-		<blank>
-			<int>0x0020</int>	<!-- SPACE -->
-			<int>0x00A0</int>	<!-- NO-BREAK SPACE -->
-			<int>0x00AD</int>	<!-- SOFT HYPHEN -->
-			<int>0x034F</int>	<!-- COMBINING GRAPHEME JOINER -->
-			<int>0x0600</int>	<!-- ARABIC NUMBER SIGN -->
-			<int>0x0601</int>	<!-- ARABIC SIGN SANAH -->
-			<int>0x0602</int>	<!-- ARABIC FOOTNOTE MARKER -->
-			<int>0x0603</int>	<!-- ARABIC SIGN SAFHA -->
-			<int>0x06DD</int>	<!-- ARABIC END OF AYAH -->
-			<int>0x070F</int>	<!-- SYRIAC ABBREVIATION MARK -->
-			<int>0x115F</int>	<!-- HANGUL CHOSEONG FILLER -->
-			<int>0x1160</int>	<!-- HANGUL JUNGSEONG FILLER -->
-			<int>0x1680</int>	<!-- OGHAM SPACE MARK -->
-			<int>0x17B4</int>	<!-- KHMER VOWEL INHERENT AQ -->
-			<int>0x17B5</int>	<!-- KHMER VOWEL INHERENT AA -->
-			<int>0x180E</int>	<!-- MONGOLIAN VOWEL SEPARATOR -->
-			<int>0x2000</int>	<!-- EN QUAD -->
-			<int>0x2001</int>	<!-- EM QUAD -->
-			<int>0x2002</int>	<!-- EN SPACE -->
-			<int>0x2003</int>	<!-- EM SPACE -->
-			<int>0x2004</int>	<!-- THREE-PER-EM SPACE -->
-			<int>0x2005</int>	<!-- FOUR-PER-EM SPACE -->
-			<int>0x2006</int>	<!-- SIX-PER-EM SPACE -->
-			<int>0x2007</int>	<!-- FIGURE SPACE -->
-			<int>0x2008</int>	<!-- PUNCTUATION SPACE -->
-			<int>0x2009</int>	<!-- THIN SPACE -->
-			<int>0x200A</int>	<!-- HAIR SPACE -->
-			<int>0x200B</int>	<!-- ZERO WIDTH SPACE -->
-			<int>0x200C</int>	<!-- ZERO WIDTH NON-JOINER -->
-			<int>0x200D</int>	<!-- ZERO WIDTH JOINER -->
-			<int>0x200E</int>	<!-- LEFT-TO-RIGHT MARK -->
-			<int>0x200F</int>	<!-- RIGHT-TO-LEFT MARK -->
-			<int>0x2028</int>	<!-- LINE SEPARATOR -->
-			<int>0x2029</int>	<!-- PARAGRAPH SEPARATOR -->
-			<int>0x202A</int>	<!-- LEFT-TO-RIGHT EMBEDDING -->
-			<int>0x202B</int>	<!-- RIGHT-TO-LEFT EMBEDDING -->
-			<int>0x202C</int>	<!-- POP DIRECTIONAL FORMATTING -->
-			<int>0x202D</int>	<!-- LEFT-TO-RIGHT OVERRIDE -->
-			<int>0x202E</int>	<!-- RIGHT-TO-LEFT OVERRIDE -->
-			<int>0x202F</int>	<!-- NARROW NO-BREAK SPACE -->
-			<int>0x205F</int>	<!-- MEDIUM MATHEMATICAL SPACE -->
-			<int>0x2060</int>	<!-- WORD JOINER -->
-			<int>0x2061</int>	<!-- FUNCTION APPLICATION -->
-			<int>0x2062</int>	<!-- INVISIBLE TIMES -->
-			<int>0x2063</int>	<!-- INVISIBLE SEPARATOR -->
-			<int>0x206A</int>	<!-- INHIBIT SYMMETRIC SWAPPING -->
-			<int>0x206B</int>	<!-- ACTIVATE SYMMETRIC SWAPPING -->
-			<int>0x206C</int>	<!-- INHIBIT ARABIC FORM SHAPING -->
-			<int>0x206D</int>	<!-- ACTIVATE ARABIC FORM SHAPING -->
-			<int>0x206E</int>	<!-- NATIONAL DIGIT SHAPES -->
-			<int>0x206F</int>	<!-- NOMINAL DIGIT SHAPES -->
-			<int>0x2800</int>	<!-- BRAILLE PATTERN BLANK -->
-			<int>0x3000</int>	<!-- IDEOGRAPHIC SPACE -->
-			<int>0x3164</int>	<!-- HANGUL FILLER -->
-			<int>0xFEFF</int>	<!-- ZERO WIDTH NO-BREAK SPACE -->
-			<int>0xFFA0</int>	<!-- HALFWIDTH HANGUL FILLER -->
-			<int>0xFFF9</int>	<!-- INTERLINEAR ANNOTATION ANCHOR -->
-			<int>0xFFFA</int>	<!-- INTERLINEAR ANNOTATION SEPARATOR -->
-			<int>0xFFFB</int>	<!-- INTERLINEAR ANNOTATION TERMINATOR -->
-		</blank>
-<!--
-  Rescan configuration every 3600 seconds when FcFontSetList is called
- -->
-		<rescan>
-			<int>3600</int>
-		</rescan>
-	</config>
-
-</fontconfig>
diff --git a/android/qa/desktop/jni/Android.mk b/android/qa/desktop/jni/Android.mk
deleted file mode 100644
index c5c2ed3..0000000
--- a/android/qa/desktop/jni/Android.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright (C) 2009 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE    := dummy
-LOCAL_SRC_FILES := dummy.c
-LOCAL_LDLIBS    := 
-
-include $(BUILD_SHARED_LIBRARY)
diff --git a/android/qa/desktop/native-code.cxx b/android/qa/desktop/native-code.cxx
deleted file mode 100644
index 4f54ccd..0000000
--- a/android/qa/desktop/native-code.cxx
+++ /dev/null
@@ -1,123 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#include "osl/detail/android-bootstrap.h"
-
-extern "C"
-{
-    extern void * animcore_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-    extern void * avmedia_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-    extern void * cui_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-    extern void * dba_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-    extern void * dbaxml_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-    extern void * evtatt_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-    extern void * fileacc_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-    extern void * frm_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-    extern void * fsstorage_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-    extern void * fwk_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-    extern void * fwl_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-    extern void * fwm_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-    extern void * hwp_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-    extern void * hyphen_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-    extern void * lng_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-    extern void * lnth_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-    extern void * lotuswordpro_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-    extern void * protocolhandler_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-    extern void * oox_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-    extern void * sb_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-    extern void * sc_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-    extern void * scd_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-    extern void * scfilt_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-    extern void * sd_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-    extern void * sdd_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-    extern void * sm_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-    extern void * smd_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-    extern void * spl_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-    extern void * spell_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-    extern void * svgfilter_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-    extern void * sw_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-    extern void * svx_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-    extern void * swd_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-    extern void * t602filter_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-    extern void * textfd_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-    extern void * unoxml_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-    extern void * unordf_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-    extern void * uui_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-    extern void * wpftdraw_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-    extern void * wpftwriter_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-    extern void * xmlfd_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-    extern void * xmlsecurity_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-    extern void * xo_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-    extern void * xof_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-}
-
-extern "C"
-__attribute__ ((visibility("default")))
-const lib_to_component_mapping *
-lo_get_libmap(void)
-{
-    static lib_to_component_mapping map[] = {
-        { "libanimcorelo.a", animcore_component_getFactory },
-        { "libavmedialo.a", avmedia_component_getFactory },
-        { "libdbalo.a", dba_component_getFactory },
-        { "libdbaxmllo.a", dbaxml_component_getFactory },
-        { "libcuilo.a", cui_component_getFactory },
-        { "libevtattlo.a", evtatt_component_getFactory },
-        { "libfileacc.a", fileacc_component_getFactory },
-        { "libfrmlo.a", frm_component_getFactory },
-        { "libfsstorage.uno.a", fsstorage_component_getFactory },
-        { "libfwklo.a", fwk_component_getFactory },
-        { "libfwllo.a", fwl_component_getFactory },
-        { "libfwmlo.a", fwm_component_getFactory },
-        { "libhwplo.a", hwp_component_getFactory },
-        { "libhyphenlo.a", hyphen_component_getFactory },
-        { "liblnglo.a", lng_component_getFactory },
-        { "liblnthlo.a", lnth_component_getFactory },
-        { "liblwpftlo.a", lotuswordpro_component_getFactory },
-        { "libooxlo.a", oox_component_getFactory },
-        { "libprotocolhandlerlo.a", protocolhandler_component_getFactory },
-        { "libscdlo.a", scd_component_getFactory },
-        { "libscfiltlo.a", scfilt_component_getFactory },
-        { "libsblo.a", sb_component_getFactory },
-        { "libsclo.a", sc_component_getFactory },
-        { "libsddlo.a", sdd_component_getFactory },
-        { "libsdlo.a", sd_component_getFactory },
-        { "libsmdlo.a", smd_component_getFactory },
-        { "libsmlo.a", sm_component_getFactory },
-        { "libspllo.a", spl_component_getFactory },
-        { "libsvgfilterlo.a", svgfilter_component_getFactory },
-        { "libsvxlo.a", svx_component_getFactory },
-        { "libswdlo.a", swd_component_getFactory },
-        { "libswlo.a", sw_component_getFactory },
-        { "libt602filterlo.a", t602filter_component_getFactory },
-        { "libtextfdlo.a", textfd_component_getFactory },
-        { "libunordflo.a", unordf_component_getFactory },
-        { "libunoxmllo.a", unoxml_component_getFactory },
-        { "libuuilo.a", uui_component_getFactory },
-        { "libwpftdrawlo.a", wpftdraw_component_getFactory },
-        { "libwpftwriterlo.a", wpftwriter_component_getFactory },
-        { "libxmlfdlo.a", xmlfd_component_getFactory },
-        { "libxmlsecurity.a", xmlsecurity_component_getFactory },
-        { "libxoflo.a", xof_component_getFactory },
-        { "libxolo.a", xo_component_getFactory },
-        { NULL, NULL }
-    };
-
-    // We need to pull this in, too, as it isn't in any of the libs we
-    // link with -Wl,--whole-archive.
-    extern void Java_org_libreoffice_android_examples_LODesktop_spawnMain();
-    volatile void *p = (void *) Java_org_libreoffice_android_examples_LODesktop_spawnMain;
-
-    extern void Java_org_libreoffice_android_examples_LODesktop_renderVCL();
-    volatile void *q = (void *) Java_org_libreoffice_android_examples_LODesktop_renderVCL;
-
-    return map;
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/android/qa/desktop/project.properties b/android/qa/desktop/project.properties
deleted file mode 100644
index 06b2d88..0000000
--- a/android/qa/desktop/project.properties
+++ /dev/null

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list