summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Holesovsky <kendy@collabora.com>2014-06-28 18:23:24 +0200
committerJan Holesovsky <kendy@collabora.com>2014-06-30 14:48:03 +0200
commitdb89e5ff812e2b807476cdf0a10cd81a3040d79b (patch)
tree1fa4b8fcd01f3cb5e7c19ad15a98bf65b63bf389
parent74ab9835f978ae872bd0b737a8d16eb2f63731a7 (diff)
android: Make use of LibreOfficeKit.
Now the LibreOfficeKit is used to actually attempt to bootstrap LibreOffice; at the moment fails to do that. Change-Id: I91220dbff783213bf7702e7213a5646859db4581
-rw-r--r--android/Bootstrap/src/org/libreoffice/android/Bootstrap.java2
-rw-r--r--android/Bootstrap/src/org/libreoffice/android/LibreOfficeKit.java2
-rw-r--r--android/experimental/LOAndroid3/Makefile2
-rw-r--r--android/experimental/LOAndroid3/src/java/org/libreoffice/LibreOfficeMainActivity.java13
-rw-r--r--sal/android/libreofficekit-jni.c29
-rw-r--r--sal/android/lo-bootstrap.c30
-rwxr-xr-xsolenv/bin/native-code.py5
7 files changed, 55 insertions, 28 deletions
diff --git a/android/Bootstrap/src/org/libreoffice/android/Bootstrap.java b/android/Bootstrap/src/org/libreoffice/android/Bootstrap.java
index 9d3bc89f9bed..13d1a23fdfa9 100644
--- a/android/Bootstrap/src/org/libreoffice/android/Bootstrap.java
+++ b/android/Bootstrap/src/org/libreoffice/android/Bootstrap.java
@@ -60,7 +60,7 @@ public final class Bootstrap
// A method that starts a thread to redirect stdout and stderr writes to
// the Android logging mechanism, or stops the redirection.
- public static native boolean redirect_stdio(boolean state);
+ public static native void redirect_stdio(boolean state);
// The DIB returned by css.awt.XBitmap.getDIB is in BGR_888 form, at least
// for Writer documents. We need it in Android's Bitmap.Config.ARGB_888
diff --git a/android/Bootstrap/src/org/libreoffice/android/LibreOfficeKit.java b/android/Bootstrap/src/org/libreoffice/android/LibreOfficeKit.java
index 82b889e2548f..e7507d5a1dcf 100644
--- a/android/Bootstrap/src/org/libreoffice/android/LibreOfficeKit.java
+++ b/android/Bootstrap/src/org/libreoffice/android/LibreOfficeKit.java
@@ -61,7 +61,7 @@ public final class LibreOfficeKit
*/
// A method that starts a thread to redirect stdout and stderr writes to
// the Android logging mechanism, or stops the redirection.
- public static native boolean redirect_stdio(boolean state);
+ public static native void redirect_stdio(boolean state);
/*
// The DIB returned by css.awt.XBitmap.getDIB is in BGR_888 form, at least
// for Writer documents. We need it in Android's Bitmap.Config.ARGB_888
diff --git a/android/experimental/LOAndroid3/Makefile b/android/experimental/LOAndroid3/Makefile
index 4db011f13616..5169b2d4eb35 100644
--- a/android/experimental/LOAndroid3/Makefile
+++ b/android/experimental/LOAndroid3/Makefile
@@ -13,7 +13,7 @@ BOOTSTRAPDIR=../../Bootstrap
include $(BOOTSTRAPDIR)/Makefile.shared
native-code.cxx: $(SRCDIR)/solenv/bin/native-code.py
- $< -g core -g writer > $@
+ $< -j -g core -g writer > $@
copy-stuff:
# Then "assets". Let the directory structure under assets mimic
diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/LibreOfficeMainActivity.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/LibreOfficeMainActivity.java
index d4758443bf13..3d30dcc8e80e 100644
--- a/android/experimental/LOAndroid3/src/java/org/libreoffice/LibreOfficeMainActivity.java
+++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/LibreOfficeMainActivity.java
@@ -16,7 +16,7 @@ import org.mozilla.gecko.gfx.GeckoSoftwareLayerClient;
import org.mozilla.gecko.gfx.LayerController;
import org.mozilla.gecko.gfx.LayerView;
-import org.libreoffice.android.Bootstrap;
+import org.libreoffice.android.LibreOfficeKit;
import com.sun.star.frame.XComponentLoader;
import com.sun.star.lang.XMultiComponentFactory;
@@ -74,18 +74,19 @@ public class LibreOfficeMainActivity extends Activity {
super.onCreate(savedInstanceState);
try {
- Bootstrap.setup(this);
- Bootstrap.putenv("SAL_LOG=+WARN+INFO-INFO.legacy.osl");
+ LibreOfficeKit.init(this);
+ LibreOfficeKit.putenv("SAL_LOG=+WARN+INFO-INFO.legacy.osl");
setContentView(R.layout.activity_main);
Log.w(LOGTAG, "zerdatime " + SystemClock.uptimeMillis() + " - onCreate");
+ /*
String input = "/assets/test1.odt";
String[] argv = { "lo-document-loader", input };
- Bootstrap.setCommandArgs(argv);
+ LibreOfficeKit.setCommandArgs(argv);
Bootstrap.initVCL();
@@ -102,7 +103,7 @@ public class LibreOfficeMainActivity extends Activity {
componentLoader = (XComponentLoader) UnoRuntime.queryInterface(XComponentLoader.class, desktop);
Log.i(LOGTAG, "componentLoader is" + (componentLoader!=null ? " not" : "") + " null");
-
+ */
} catch (Exception e) {
e.printStackTrace(System.err);
//finish();
@@ -143,3 +144,5 @@ public class LibreOfficeMainActivity extends Activity {
return mLayerController;
}
}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sal/android/libreofficekit-jni.c b/sal/android/libreofficekit-jni.c
index 3563d5b7891e..cf8308afa01b 100644
--- a/sal/android/libreofficekit-jni.c
+++ b/sal/android/libreofficekit-jni.c
@@ -24,7 +24,9 @@
#include <osl/detail/android-bootstrap.h>
-//#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "LibreOfficeKit", __VA_ARGS__))
+#include <LibreOfficeKit/LibreOfficeKit.h>
+
+#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "LibreOfficeKit", __VA_ARGS__))
#define LOGE(...) ((void)__android_log_print(ANDROID_LOG_ERROR, "LibreOfficeKit", __VA_ARGS__))
/* These are valid / used in all apps. */
@@ -34,9 +36,13 @@ extern void *apk_file;
extern int apk_file_size;
extern void Java_org_libreoffice_android_Bootstrap_putenv(JNIEnv* env, jobject clazz, jstring string);
-extern jboolean Java_org_libreoffice_android_Bootstrap_redirect_1stdio(JNIEnv* env, jobject clazz, jboolean state);
+extern void Java_org_libreoffice_android_Bootstrap_redirect_1stdio(JNIEnv* env, jobject clazz, jboolean state);
extern void Java_org_libreoffice_android_Bootstrap_extract_1files(JNIEnv* env, jobject clazz);
+extern LibreOfficeKit *libreofficekit_hook(const char* install_path);
+
+static LibreOfficeKit* pOffice;
+
/// Call the same method from Bootstrap.
__attribute__ ((visibility("default")))
void
@@ -49,12 +55,12 @@ Java_org_libreoffice_android_LibreOfficeKit_putenv(JNIEnv* env,
/// Call the same method from Bootstrap.
__attribute__ ((visibility("default")))
-jboolean
+void
Java_org_libreoffice_android_LibreOfficeKit_redirect_1stdio(JNIEnv* env,
jobject clazz,
jboolean state)
{
- return Java_org_libreoffice_android_Bootstrap_redirect_1stdio(env, clazz, state);
+ Java_org_libreoffice_android_Bootstrap_redirect_1stdio(env, clazz, state);
}
/// Call the same method from Bootstrap.
@@ -119,10 +125,25 @@ Java_org_libreoffice_android_LibreOfficeKit_init__Ljava_lang_String_2Ljava_lang_
(*env)->ReleaseStringUTFChars(env, apkFile, apkFilePath);
if (!setup_cdir())
+ {
+ LOGE("setup_cdir failed");
return JNI_FALSE;
+ }
if (!setup_assets_tree())
+ {
+ LOGE("setup_assets_tree failed");
return JNI_FALSE;
+ }
+
+ pOffice = libreofficekit_hook(data_dir);
+ if (!pOffice)
+ {
+ LOGE("libreofficekit_hook returned null");
+ return JNI_FALSE;
+ }
+
+ LOGI("LibreOfficeKit successfully initialized");
return JNI_TRUE;
}
diff --git a/sal/android/lo-bootstrap.c b/sal/android/lo-bootstrap.c
index 973c1b25116a..a7765bed563e 100644
--- a/sal/android/lo-bootstrap.c
+++ b/sal/android/lo-bootstrap.c
@@ -42,11 +42,11 @@ struct engine {
};
/* These are valid / used in all apps. */
-static const char *data_dir;
-static const char *cache_dir;
-static void *apk_file;
-static int apk_file_size;
-static JavaVM *the_java_vm;
+const char *data_dir;
+const char *cache_dir;
+void *apk_file;
+int apk_file_size;
+JavaVM *the_java_vm;
/* Zip data structures */
@@ -1019,7 +1019,7 @@ redirect_to_null(void)
}
__attribute__ ((visibility("default")))
-jboolean
+void
Java_org_libreoffice_android_Bootstrap_redirect_1stdio(JNIEnv* env,
jobject clazz,
jboolean state)
@@ -1031,22 +1031,22 @@ Java_org_libreoffice_android_Bootstrap_redirect_1stdio(JNIEnv* env,
(void) env;
(void) clazz;
- if (state == current)
- return current;
+ if (state == current)
+ return;
if (state == JNI_FALSE) {
if (!redirect_to_null())
- return current;
+ return;
} else {
if (pipe(stdout_pipe) == -1) {
LOGE("redirect_stdio: Could not create pipes: %s", strerror(errno));
- return current;
+ return;
}
if (pipe(stderr_pipe) == -1) {
LOGE("redirect_stdio: Could not create pipes: %s", strerror(errno));
close(stdout_pipe[0]);
close(stdout_pipe[1]);
- return current;
+ return;
}
LOGI("redirect_stdio: stdout pipe: [%d,%d], stderr pipe: [%d,%d]",
stdout_pipe[0], stdout_pipe[1], stderr_pipe[0], stderr_pipe[1]);
@@ -1057,7 +1057,7 @@ Java_org_libreoffice_android_Bootstrap_redirect_1stdio(JNIEnv* env,
close(stdout_pipe[1]);
close(stderr_pipe[0]);
close(stderr_pipe[1]);
- return current;
+ return;
}
if (dup2(stderr_pipe[1], 2) == -1) {
@@ -1070,7 +1070,7 @@ Java_org_libreoffice_android_Bootstrap_redirect_1stdio(JNIEnv* env,
close(stdout_pipe[1]);
close(stderr_pipe[0]);
close(stderr_pipe[1]);
- return current;
+ return;
}
close(stdout_pipe[1]);
close(stderr_pipe[1]);
@@ -1082,11 +1082,11 @@ Java_org_libreoffice_android_Bootstrap_redirect_1stdio(JNIEnv* env,
redirect_to_null();
close(stdout_pipe[0]);
close(stderr_pipe[0]);
- return current;
+ return;
}
}
current = state;
- return current;
+ return;
}
__attribute__ ((visibility("default")))
diff --git a/solenv/bin/native-code.py b/solenv/bin/native-code.py
index 59cde03ba1e3..0de8ed3ce62d 100755
--- a/solenv/bin/native-code.py
+++ b/solenv/bin/native-code.py
@@ -228,7 +228,10 @@ if options.java:
volatile void *p = (void *) Java_org_libreoffice_android_AppSupport_runMain;
extern void Java_org_libreoffice_android_AppSupport_renderVCL();
- p = (void *) Java_org_libreoffice_android_AppSupport_renderVCL;""")
+ p = (void *) Java_org_libreoffice_android_AppSupport_renderVCL;
+
+ extern void Java_org_libreoffice_android_LibreOfficeKit_init__Ljava_lang_String_2Ljava_lang_String_2Ljava_lang_String_2();
+ p = (void *) Java_org_libreoffice_android_LibreOfficeKit_init__Ljava_lang_String_2Ljava_lang_String_2Ljava_lang_String_2;""")
print ("""
return map;