diff options
authorJan Holesovsky <>2019-04-12 17:50:52 +0200
committerJan Holesovsky <>2019-06-05 22:19:35 +0200
commitc25b6bc6971564847eb34f4a3165e65eddd24aed (patch)
parent3f358c1f29102a6a6e548e555b18086faebb6196 (diff)
android: Make the tiled rendering from the loolwsd actually work.
Not to break the 'old' Android app, introduce a bool that can indicate if we are using the LOK from the 'old' (LOK-via-JNI-based) or from the 'new' (loolwsd-based) app. Change-Id: I38bd665cc1d5bc88018574171443ecabc46763df Reviewed-on: Reviewed-by: Jan Holesovsky <> Tested-by: Jan Holesovsky <>
2 files changed, 21 insertions, 3 deletions
diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx
index 1360f75d6338..2bafd7dc62e4 100644
--- a/desktop/source/lib/init.cxx
+++ b/desktop/source/lib/init.cxx
@@ -2563,6 +2563,13 @@ static void doc_setPartMode(LibreOfficeKitDocument* pThis,
+#if defined(ANDROID)
+/// For the distinction if the LOK is used for the 'old' (JNI-based) or the
+/// 'new' (loolwsd-based) app. Default to the 'new', ie. not used from JNI as
+/// implemented in sal/android/libreofficekit-jni.c.
+bool android_lok_from_jni = false;
static void doc_paintTile(LibreOfficeKitDocument* pThis,
unsigned char* pBuffer,
const int nCanvasWidth, const int nCanvasHeight,
@@ -2606,10 +2613,15 @@ static void doc_paintTile(LibreOfficeKitDocument* pThis,
ScopedVclPtrInstance< VirtualDevice > pDevice(nullptr, Size(1, 1), DeviceFormat::DEFAULT) ;
-#if !defined(ANDROID)
- // Set background to transparent by default.
- pDevice->SetBackground(Wallpaper(Color(COL_TRANSPARENT)));
+#if defined(ANDROID)
+ if (!android_lok_from_jni)
+ {
+ // Set background to transparent by default.
+ // [Unless it is the 'old' (JNI-based) Android app - no idea why it
+ // needs avoiding this.]
+ pDevice->SetBackground(Wallpaper(COL_TRANSPARENT));
+ }
Size(nCanvasWidth, nCanvasHeight), Fraction(1.0), Point(),
diff --git a/sal/android/libreofficekit-jni.c b/sal/android/libreofficekit-jni.c
index edd56a2fec37..0f66fdc44fe0 100644
--- a/sal/android/libreofficekit-jni.c
+++ b/sal/android/libreofficekit-jni.c
@@ -37,6 +37,7 @@ extern const char* data_dir;
extern const char* cache_dir;
extern void* apk_file;
extern int apk_file_size;
+extern bool android_lok_from_jni; ///< for the distinction if the LOK is used for the 'old' (JNI-based) or the 'new' (loolwsd-based) app
AAssetManager* native_asset_manager;
extern void Java_org_libreoffice_android_Bootstrap_putenv(JNIEnv* env, jobject clazz, jstring string);
@@ -157,6 +158,11 @@ jboolean Java_org_libreoffice_kit_LibreOfficeKit_initializeNative
size_t data_dir_len;
(void) clazz;
+ // the 'old' app needs to avoid setting the virtual device to transparent
+ // in paintTile(), so indicate we are using the 'old' app
+ android_lok_from_jni = true;
libreofficekit_initialize(env, dataDir, cacheDir, apkFile, assetManager);
// LibreOfficeKit expects a path to the program/ directory