Commit graph

46 commits

Author SHA1 Message Date
Tor Lillqvist
be4dc66e00 Add a cross-referencing comment
Signed-off-by: Tor Lillqvist <tml@iki.fi>
2022-11-08 14:42:51 +02:00
Miklos Vajna
616e9200d1 ios: register our script message handler as 'lok', not 'cool'
core.git supports both since commit
4063dcdc7305177b167bd20b009b1dfede8b25ec (Revert naming back to lool to
fix break with LibreOffice Online, 2022-08-26), let's go with the API
name, not with the product name.

Signed-off-by: Miklos Vajna <vmiklos@collabora.com>
Change-Id: I204c4728628579edeb23d5ba76af4bb878130203
2022-09-06 20:30:25 +03:00
Tor Lillqvist
9bb91a84b4 Comment out leftover NSLog() call
Signed-off-by: Tor Lillqvist <tml@iki.fi>
Change-Id: Ia84c03a68868bcce1aebab36b7da9db1da9e07c4
2022-04-12 19:10:20 +03:00
Andras Timar
f07ff8c7e0 rename: remaining lool->cool changes
Signed-off-by: Andras Timar <andras.timar@collabora.com>
Change-Id: Ib7d4e804bebe52dead8d53b0e0bbaed0f08bf3d0
2021-11-18 14:14:11 +01:00
Henry Castro
a8b628ee43 mobile: rename 'lool' -> 'cool'
Change-Id: Icea136704eaf13c6da0ec455a9e6207b57e2a7f6
Signed-off-by: Henry Castro <hcastro@collabora.com>
2021-11-17 09:17:58 +01:00
Tor Lillqvist
84d9a73676 Stop using .bmp files for tiles on iOS
We don't want leaking tiles to take up valuable space on the device.
Not even just while a document is open.

Signed-off-by: Tor Lillqvist <tml@collabora.com>
Change-Id: I761c2bb2ab121ee76b5535e96bd5702d0fce6856
2021-09-07 09:59:57 +03:00
Tor Lillqvist
5147fc5902 Improve some temporary iOS app logging that is normally ifdeffed out
Change-Id: I25be27d9937729e49084395d11215c5efb16fd94
Signed-off-by: Tor Lillqvist <tml@collabora.com>
2021-09-01 15:32:42 +03:00
Tor Lillqvist
6d2a6e110c Remove leftover tiles in the iOS app already when the document is closed
Normally (ideally), tiles (.bmp files) are removed as soon as the JS
has displayed them. But occasionally something goes wrong and they are
left behind. (For instance, it seems to happen if the user closes the
document immediately when it shows up.)

Do not leave them on disk until the app starts the next time.

Change-Id: I0c764280a69a16ad3b7b67c329832fd5331c2e1e
Signed-off-by: Tor Lillqvist <tml@collabora.com>
2021-09-01 13:32:23 +03:00
Tor Lillqvist
65b8001d73 Remove more leftover files taking space in the iOS app
Remove the app's copy of the document after core has saved it and we
have stored the edited version at its real location.

Remove possible leftover tile bitmaps when the app starts.

Signed-off-by: Tor Lillqvist <tml@collabora.com>
Change-Id: Ibc41be38c2cfb689c532640d148116bc06a248ab
2021-08-24 18:02:40 +03:00
Tor Lillqvist
728a67ea55 Guard against REMOVE messages for data: URLs for tunnelled dialogs in iOS app
Trying to remove such a "file" caused a crash.

Sure, loleaflet should ideally not send such REMOVE messages at all.

No idea why the image for a tunnelled dialog shows up as a data: URL
and not as a file: URL pointing to a BMP file, like the document
tiles.

Signed-off-by: Tor Lillqvist <tml@collabora.com>
Change-Id: I4866ae2c94c626f1947a14353803a9c3d75d5ffa
2021-06-11 14:07:06 +03:00
Tor Lillqvist
e142d26a2f Don't use CollaboraOnlineWebViewKeyboardManager after all
Unclear whether it is actually useful or not any longer. Quite
possibly cross-platform changes in the JavaScript since
CollaboraOnlineWebViewKeyboardManager was introduced have fixed the
problems that it was solving.

Fixes https://github.com/CollaboraOnline/online/issues/1432

Change-Id: Ifa000d0a7d0a3dc87527536719063b368266f038
Signed-off-by: Tor Lillqvist <tml@collabora.com>
2021-03-08 14:00:38 +02:00
Ashod Nakashian
3724ab4e35 wsd: centralize temporary directory helpers in FileUtil
Change-Id: I9b55d0b8d4c55a68af4baa7e638627de6c73b64d
Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
2020-11-22 22:26:36 -05:00
Tor Lillqvist
9235d91cee Revert "tdf#133279: Use CollaboraOnlineWebViewKeyboardManager also for hw keyboards"
The reverted change caused many problems when using a hardware
keyboard. See https://github.com/CollaboraOnline/online/issues/402 ,
https://github.com/CollaboraOnline/online/issues/389 , and
https://github.com/CollaboraOnline/online/issues/399 .

tdf#133279 (Not possible to type in "tunneled dialogs" on iOS using a
hardware keyboard) will now then re-appear, but it will have to be
fixed in another way.

This reverts commit 68d2d9cbd42f57418927bf3e619e372bb674b218.

Change-Id: Ic723f57a95700f352a2c1f501922aad4eb84479c
Signed-off-by: Tor Lillqvist <tml@collabora.com>
(cherry picked from commit 051e594d7a81d818c16ddce9203bf9b5d929df61)
2020-11-10 12:45:06 +02:00
Tor Lillqvist
921b764754 Do the iOS font selection for the notebookbar in native iOS code
That way we can use UIFontPickerViewController which gives acess also
to fonst provided and registered by other third-party apps on iOS.
These fonts are not available otherwise. They don't show up when vcl
enumerates fonts in core.

This patch is work in progress for
https://github.com/CollaboraOnline/online/issues/472 . This patch
affects only the font name selection control in the notebookbar. On
iOS this is now no longer a "combo box" (implemented by the external
"select2" Javascript library, if I understand correctly), but a button
that brings up a native iOS control). For now it is just a plain HTML
button. It should ideally later be styled to fit better into the
visual style of the notebookbar.

Change-Id: Ic5e53cad09ffa8c99336dfed594337525909dc90
Signed-off-by: Tor Lillqvist <tml@collabora.com>
(cherry picked from commit 977af5908689425eb55be852a85e56f86070b6bf)
2020-11-05 23:42:39 +02:00
Tor Lillqvist
2d6c83cff9 Add logging when the WebContent process has died
See https://github.com/CollaboraOnline/online/issues/403

Change-Id: I59012565ac6376d03872fe6e4cd78a5d14be1319
Signed-off-by: Tor Lillqvist <tml@collabora.com>
(cherry picked from commit 3a4169a9ebebea56bcdc467691913cd767af878b)
Signed-off-by: Tor Lillqvist <tml@collabora.com>
2020-10-28 10:50:33 +02:00
Tor Lillqvist
bbb737951a Unconditionally print any debug messages posted from the JS
We don't have any such messages permanently in the code anyway, so we
don't win anything by doing it through the LOOL loggin mechanism at
level "trace".

Change-Id: I2c18e1cd561f797d2c4c20b403d5faedce695062
2020-10-08 20:33:57 +03:00
Andras Timar
0002fdfd6c fix license headers
Change-Id: I8623770b32d278a45357dc7f757fabfadd2b4af7
2020-10-01 11:56:43 +02:00
Tor Lillqvist
d0edfeabbd tdf#133279: Use CollaboraOnlineWebViewKeyboardManager also for hw keyboards
In theory, this doesn't make sense. In practice, it helps.

Change-Id: I34d03a812c543e1b112851c9e9ff512f2482a20c
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/103714
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Reviewed-by: Tor Lillqvist <tml@collabora.com>
2020-09-30 21:57:11 +02:00
Tor Lillqvist
3df718aac7 tdf#133284: Improve hardware and on-screen keyboard in the iOS app
This is a quite complicated change that should both fix tdf#133284
(cursor keys on a hardware keyboard do not work in a spreadsheet
document) and also improve the interaction with
CollaboraOnlineWebViewKeyboardManager that manages the on-screen
keyboard. We need to jump through complicated hoops in order to get
the hardware cursor keys handled right after loading a spreadsheet
document.

In the CollaboraOnlineWebViewKeyboardManager case we try harder to
keep loleaflet's _textArea buffer in sync with what the UITextView in
CollaboraOnlineWebViewKeyboardManager uses to provide suggestions
above the on-screen keyboard.

Also merges in related changes from today to
CollaboraOnlineWebViewKeyboardManager.

Change-Id: Ic4acb54bd4e815aa8bfb2bf40b08493446ae5ab0
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/101878
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Reviewed-by: Tor Lillqvist <tml@collabora.com>
2020-09-01 17:24:36 +02:00
Tor Lillqvist
2a8db1b5ab Use CollaboraOnlineWebViewKeyboardManager
For now, just copy its source files here. When/if I figure out what is
the appropriate way to package that framework for use in other
products (like the Collabora Office iOS app) I will use that instead.

Change-Id: If808f96b6a72c80e54dc84fce80a551503c96335
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/101268
Tested-by: Jenkins
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Reviewed-by: Tor Lillqvist <tml@collabora.com>
2020-08-25 13:41:20 +02:00
Tor Lillqvist
e64bbeb819 Pass rendered tiles as uncompressed BMP files in the iOS app
Avoids the need for PNG encoding (takes significant amount of CPU
time) and Base64 encoding in the app process, transfer to JavaScript
(running in a WebKit process of its own), and corresponding decoding
(in the WebKit process). Instead simply pass the URL of each tile file
to the JavaScript. Remove each BMP file once it has been loaded.

Change-Id: I6e7b9450691679c64813979976c59f1763ec104c
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/98710
Tested-by: Jenkins
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Reviewed-by: Michael Meeks <michael.meeks@collabora.com>
2020-07-14 17:00:35 +02:00
Tor Lillqvist
7f25109f72 tdf#128502: Chunk of work to enable "multi-tasking" in the iOS app
Seems to not cause any serious regressions in the iOS app or in "make
run", but of course I am not able to run a comprehensive check of all
functionality.

Change-Id: I44a0e8d60bdbc0a885db88475961575c5e95ce88
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/93037
Tested-by: Jenkins
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Reviewed-by: Tor Lillqvist <tml@collabora.com>
2020-06-26 13:09:51 +02:00
Tor Lillqvist
2bd05d68f7 tdf#133278: Don't overwrite the copy of the document that we are editing
When exporting a copy, let core write the copy to a temp subdirectory
before invoking UIDocumentPickerViewController to select where to
store it permanently.

Change-Id: I3d2292414a3c824515ba6d98ad09b296e543cea9
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/95295
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Reviewed-by: Tor Lillqvist <tml@collabora.com>
2020-06-01 17:08:38 +02:00
Tor Lillqvist
909734e261 Implement the "download as" functionality properly in the iOS app
We need to catch the downloadas message already in
-[DocumentViewController
userContentController:didReceiveScriptMessage:] and use an
UIDocumentPickerViewController to let the user choose where to
download (or export) the document. The iOS-specific code in
ChildSession::downloadAs() can go away.

Change-Id: I626b9986ec6156f7e83bda02b04e65f7819f8017
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/92112
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Reviewed-by: Tor Lillqvist <tml@collabora.com>
2020-04-13 15:35:13 +02:00
Tor Lillqvist
0930286e2d Fix problems after my 293f4913d2
It is enough to call the -[UIDocument
saveToURL:forSaveOperation:completionHandler:] only in
DocumentBroker::sendUnoSave(). And on the other hand, in
-[DocumentViewController bye] we can't want for the
LOOLWSD::lokit_main_mutex as the main queue is needed for parts of
what the saveToURL does.

Also, use a separate copy of the document as the file that is actually
edited by LO core. This matches what the Android app does. I think it
is useful to do this in order to avoid some hangs that I noticed. They
probably were caused by both LO core and the system frameworks
occasionally accessing the same document file at the same time.

Change-Id: Idb65be23a7cb6ad1288fbbd23c7471e0fb8d52f4
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/91851
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Reviewed-by: Tor Lillqvist <tml@collabora.com>
2020-04-08 00:01:30 +02:00
Tor Lillqvist
312caf918b Add comment
Change-Id: I452b1d6fc150d014a5d55df71e9dae96288e67de
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/91740
Tested-by: Tor Lillqvist <tml@collabora.com>
Reviewed-by: Tor Lillqvist <tml@collabora.com>
2020-04-06 12:49:18 +02:00
Miklos Vajna
6890d2fdaa ios: fix opening hyperlinks
This was added in commit 2174206de1 (android:
Don't hang after returning from a hyperlink., 2020-02-14), but the new command
was only handled on Android. Handle HYPERLINK on iOS, too.

Change-Id: I8c942c1a64c8a52462a749989e312d0d9899a841
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/90917
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Reviewed-by: Tor Lillqvist <tml@collabora.com>
2020-03-23 17:33:45 +01:00
Tor Lillqvist
624b42d58a Hackaround for on-screen keyboard problem
We want to be able to force the on-screen keyboard to be displayed
(when there is no external hardware keyboard) from our JavaScript.

Change-Id: I0678d84ca941a03316ffb68cfd9c3e93a6ea7e57
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/89023
Tested-by: Tor Lillqvist <tml@collabora.com>
Reviewed-by: Tor Lillqvist <tml@collabora.com>
2020-02-19 15:17:56 +01:00
Jan Holesovsky
ad32888d7c mobile: Unify the mutex usage that protects the main lokit thread.
Effectively both approaches were doing the same thing, let's unify to
the iOS way to minimize the platform-specific code.

Change-Id: I11290410a536c26db054ffcb87e3b64cc2a11c07
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/84589
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Reviewed-by: Jan Holesovsky <kendy@collabora.com>
2020-02-06 09:44:26 +01:00
Tor Lillqvist
56d310636d tdf#129380: Don't show the "shortcut bar" if a hardware keyboard is used
Change-Id: If1138185e52b7240ff6190ddf3f7af01d2a47115
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/87769
Reviewed-by: Tor Lillqvist <tml@collabora.com>
Tested-by: Tor Lillqvist <tml@collabora.com>
2020-01-31 15:52:27 +01:00
Tor Lillqvist
9d6c174462 tdf#128577: Close an already open document when asked to open a new one
Add a "singleton" class method to DocumentViewController to return the
(as for now) singleton DocumentViewController.

Change-Id: I0b8a8def558cfe7f9469b6062a86311dfa63f549
Reviewed-on: https://gerrit.libreoffice.org/82007
Reviewed-by: Tor Lillqvist <tml@collabora.com>
Tested-by: Tor Lillqvist <tml@collabora.com>
(cherry picked from commit 2807f907d947549a17c5bae586b85d412d552a09)
Reviewed-on: https://gerrit.libreoffice.org/82021
2019-11-04 15:25:54 +01:00
Tor Lillqvist
fdb91bf15e tdf#123733: Keep the WebKit view until the lokit_main thread has finished
Otherwise, if you close a document before it has been rendered
completely, the plumbing of threads and FakeSocket connections gets
confused and opening the next document hangs or runs into an assertion
failure. This typically happened for large presentations where
rendering the slide previews takes significant time.

Change-Id: I0f586bec021c4c045a129b3f179ddb3942915c58
Reviewed-on: https://gerrit.libreoffice.org/80882
Reviewed-by: Tor Lillqvist <tml@collabora.com>
Tested-by: Tor Lillqvist <tml@collabora.com>
2019-10-16 13:20:38 +02:00
Tor Lillqvist
0e49800418 tdf#127942: Avoid the WKWebView popup with "Share...", "Add to Photos" etc
Seems that setting allowsLinkPreview to NO for the WKWebView affects
this functionality, too. Was just an educated guess, and it worked!
Single-line fixes to what initially seems like a hard problem are the
best.

Change-Id: Ic88bf53b883d857338c0316188e079e6797a4d76
Reviewed-on: https://gerrit.libreoffice.org/80208
Reviewed-by: Tor Lillqvist <tml@collabora.com>
Tested-by: Tor Lillqvist <tml@collabora.com>
(cherry picked from commit c7e38e6348a98c0a6fcaf20876c57cb01d56f4cc)
2019-10-05 11:41:18 +03:00
Tor Lillqvist
d1087aec26 Prevent the user from zooming the WebView
Does not fix tdf#125383, though. The WebView still can become zoomed
by manipulating a tunnelled dialog as described in the bug report's
comments.

Change-Id: I9af8d826c58e2065e54b42bc35f74436b0d34a90
2019-06-11 17:33:48 +03:00
Tor Lillqvist
058b68fc3e tdf#122281: Prevent the WebView from scrolling
It is presumably possible to do it in the JavaScript, too, and then
the same problem would go away for normal Online viewed in Mobile
Safari, too. But I couldn't figure out how. Googling turned up various
advice that suggested using '-webkit-overflow-scrolling: auto;' for
the body of the page but it didn't seem to help. (I tried adding that
to the style attribute of the body element in loleaflet.html.m4.)

Change-Id: Iac3487a73eca218130583dde9decdb89c316c1fc
2019-05-20 16:25:52 +03:00
Tor Lillqvist
d9e5a47058 Introduce new flag to speed up shutdown of the Online plumbing in the iOS app
Spent hours on trying to cleverly use the existing TerminationFlag
(with minor modifications to the code that checks it, and some
additional code to set and reset it), but could not get it to work.
This is simpler, but sure, using a global variable is ugly of course.
At least the new MobileTerminationFlag is very specific in semantics
and only used in the mobile apps.

Change-Id: I0775fdfa7880750ca12c6fd7ec41d3d3ceb2f0ad
2019-05-16 11:44:41 +03:00
Tor Lillqvist
f21665f2ac tdf#124981: Fix a few object leaks
The pointer to the DocumentViewController object in the Document class
can be a weak property. This avoids a circular reference.

When the DocumentViewController is being dismissed, remove the script
message handlers and remove the view from its superview. Also, set the
webView property to nil.
2019-04-26 18:04:10 +03:00
Tor Lillqvist
8dce313642 tdf#122543: Ignore duplicate calls to loadFromContents on same Document 2019-03-20 15:20:52 +02:00
Tor Lillqvist
18ca7ee008 Remove superfluous empty line at end of file
Change-Id: Ibdb25392622a12cedc1923c2d88ffe6b6e4f798c
2019-02-26 17:52:58 +02:00
Tor Lillqvist
62ffd2c835 tdf#122584: Implement printing in the iOS app
I don't have an AirPrint printer so I couldn't verify that it actually
prints, but the system print dialog is displayed and shows a preview
correctly, so I am fairly sure it works.

Change-Id: I5e8a704386cd5053b8689dc63f26e545df323193
2019-02-26 17:45:39 +02:00
Tor Lillqvist
4dc340972c tdf#122582: Add slideshow functionality
Requires a couple of corresponding commits in core to its filter
subdirectory.

Change-Id: I3e6353752dd93e021fb6058fff5096f1d648d17e
2019-02-22 21:01:54 +02:00
Tor Lillqvist
e7ef0c29f9 Fix a problem when taking a photo to insert in a document in the iOS app
It turns out that the view of the DocumentViewController object is
removed from the view hierarchy when the camera is displayed, and
re-added after you choose to use the taken photo. Thus the
viewWillAppear: method is called again at that stage. The Document
object is stil quite intact, though. We should not call the Document
object's openWithCompletionHandler: method again, as that will cause
horrible brokenness.

Change-Id: Ib79bd8f292b01a19866278c4d95a2e816dcd9235
2018-11-29 19:21:49 +02:00
Tor Lillqvist
b4e3110d7b Truncate for logging at a bit higher limit
Change-Id: I352ef6476a9cde767b4076ad9a2ab8cf3c9bdf2b
2018-11-29 01:07:03 +02:00
Tor Lillqvist
efb883b21c Truncate received message string for logging if necessary
Change-Id: Id71968227236993e4d181370e68523f2bf6118a7
2018-11-29 01:07:03 +02:00
Tor Lillqvist
a2e1f383b9 Implement document saving properly to make saving to NextCloud work
Even if the LO core code, as called by the Online code, already has
saved the document back to the file from which it was loaded, in order
for a file provider extension like NextCloud to notice that, it is
essential to call saveToURL:forSaveOperation:completionHandler:. The
contentsForType:error: method can just return a NSFileWrapper for the
same, already saved, file, though.

Change-Id: Ic063c8603ca38930083866d973e500336cad517e
2018-11-27 13:55:39 +02:00
Tor Lillqvist
a6eadf4e81 Move the iOS app to the ios folder
Change-Id: I46e0722b027e93f90b5cd6a74cd7dc46f6c8cea2
2018-11-22 16:50:57 +02:00
Renamed from Mobile/Mobile/DocumentViewController.mm (Browse further)