[Libreoffice-commits] online.git: Branch 'distro/collabora/co-4-2-0' - 35 commits - android/app android/lib android/README loleaflet/css loleaflet/js loleaflet/Makefile.am loleaflet/src loleaflet/util loolwsd.xml.in test/data test/integration-http-server.cpp wsd/DocumentBroker.cpp wsd/DocumentBroker.hpp wsd/LOOLWSD.cpp

Jan Holesovsky (via logerrit) logerrit at kemper.freedesktop.org
Thu Dec 12 09:38:13 UTC 2019


 android/README                                                                                    |    5 
 android/app/build.gradle                                                                          |   15 
 android/app/src/main/java/org/libreoffice/androidapp/LibreOfficeApplication.java                  |    5 
 android/app/src/main/java/org/libreoffice/androidapp/LocaleHelper.java                            |   67 -
 android/app/src/main/java/org/libreoffice/androidapp/SettingsActivity.java                        |    3 
 android/app/src/main/java/org/libreoffice/androidapp/storage/DocumentProviderFactory.java         |    3 
 android/app/src/main/java/org/libreoffice/androidapp/storage/IDocumentProvider.java               |    2 
 android/app/src/main/java/org/libreoffice/androidapp/storage/IFile.java                           |    4 
 android/app/src/main/java/org/libreoffice/androidapp/storage/external/ExternalFile.java           |   28 
 android/app/src/main/java/org/libreoffice/androidapp/storage/external/ExtsdDocumentsProvider.java |    5 
 android/app/src/main/java/org/libreoffice/androidapp/storage/external/OTGDocumentsProvider.java   |    5 
 android/app/src/main/java/org/libreoffice/androidapp/storage/local/LocalFile.java                 |    2 
 android/app/src/main/java/org/libreoffice/androidapp/storage/owncloud/OwnCloudFile.java           |   54 -
 android/app/src/main/java/org/libreoffice/androidapp/storage/owncloud/OwnCloudProvider.java       |    8 
 android/app/src/main/java/org/libreoffice/androidapp/ui/LibreOfficeUIActivity.java                |  102 +-
 android/app/src/main/locale/template.pot                                                          |  444 ++++++++++
 android/app/src/main/res/menu/navigation_menu.xml                                                 |    6 
 android/app/src/main/res/values-es/strings.xml                                                    |  143 +++
 android/app/src/main/res/values-pt-rBR/strings.xml                                                |  143 +++
 android/app/src/main/res/values-tr/strings.xml                                                    |  120 ++
 android/app/src/main/res/values/arrays.xml                                                        |    8 
 android/app/src/main/res/values/strings.xml                                                       |   26 
 android/app/src/main/res/xml/libreoffice_preferences.xml                                          |    9 
 android/lib/src/main/java/org/libreoffice/androidlib/LOActivity.java                              |  111 +-
 android/lib/src/main/res/values-es/strings.xml                                                    |   10 
 android/lib/src/main/res/values-pt-rBR/strings.xml                                                |   10 
 loleaflet/Makefile.am                                                                             |    8 
 loleaflet/css/leaflet.css                                                                         |   32 
 loleaflet/js/global.js                                                                            |    9 
 loleaflet/src/control/Control.MobileWizard.js                                                     |   21 
 loleaflet/src/control/Control.Scroll.js                                                           |   16 
 loleaflet/src/control/Control.Toolbar.js                                                          |   21 
 loleaflet/src/control/Ruler.js                                                                    |  180 +++-
 loleaflet/src/layer/tile/TileLayer.js                                                             |    6 
 loleaflet/src/map/Map.js                                                                          |    6 
 loleaflet/util/create-l10n-all-js.pl                                                              |    2 
 loolwsd.xml.in                                                                                    |    1 
 test/data/convert-to.xlsx                                                                         |binary
 test/integration-http-server.cpp                                                                  |   40 
 wsd/DocumentBroker.cpp                                                                            |   98 ++
 wsd/DocumentBroker.hpp                                                                            |   21 
 wsd/LOOLWSD.cpp                                                                                   |   64 -
 42 files changed, 1513 insertions(+), 350 deletions(-)

New commits:
commit d29504df9b48ff2485559f9ae7d23aa2a4b42412
Author:     Jan Holesovsky <kendy at collabora.com>
AuthorDate: Thu Dec 12 10:14:34 2019 +0100
Commit:     Jan Holesovsky <kendy at collabora.com>
CommitDate: Thu Dec 12 10:18:24 2019 +0100

    android: Make all the .uno: commands work again.
    
    Was a problem introduced by c6f36965cfc1bd68fdb88b01d493163b5d176bcc.
    
    Change-Id: I8fbc722ed73af19a6462c87242d431eea118f1a2
    Reviewed-on: https://gerrit.libreoffice.org/85020
    Reviewed-by: Jan Holesovsky <kendy at collabora.com>
    Tested-by: Jan Holesovsky <kendy at collabora.com>

diff --git a/android/lib/src/main/java/org/libreoffice/androidlib/LOActivity.java b/android/lib/src/main/java/org/libreoffice/androidlib/LOActivity.java
index bae078ab9..e1efc01f9 100644
--- a/android/lib/src/main/java/org/libreoffice/androidlib/LOActivity.java
+++ b/android/lib/src/main/java/org/libreoffice/androidlib/LOActivity.java
@@ -605,6 +605,7 @@ public class LOActivity extends AppCompatActivity {
                         break;
                     }
                 }
+                break;
             case "DIM_SCREEN": {
                 mainHandler.post(new Runnable() {
                     @Override
commit 5afeb1341451d8c81a4ca747c59b59f86390b790
Author:     Jan Holesovsky <kendy at collabora.com>
AuthorDate: Thu Dec 12 09:56:43 2019 +0100
Commit:     Jan Holesovsky <kendy at collabora.com>
CommitDate: Thu Dec 12 10:18:24 2019 +0100

    mobile: Fix build.
    
    Change-Id: Ie0f08a984b9333ca65d0fd52c71e358b7fd5f771
    Reviewed-on: https://gerrit.libreoffice.org/85018
    Reviewed-by: Jan Holesovsky <kendy at collabora.com>
    Tested-by: Jan Holesovsky <kendy at collabora.com>

diff --git a/wsd/DocumentBroker.cpp b/wsd/DocumentBroker.cpp
index 700a56fbf..77204dd69 100644
--- a/wsd/DocumentBroker.cpp
+++ b/wsd/DocumentBroker.cpp
@@ -2207,6 +2207,7 @@ ConvertToBroker::ConvertToBroker(const std::string& uri,
     _limitLifeSeconds = limit_convert_secs;
 }
 
+#if !MOBILEAPP
 bool ConvertToBroker::startConversion(SocketDisposition &disposition, const std::string &id)
 {
     std::shared_ptr<ConvertToBroker> docBroker = std::static_pointer_cast<ConvertToBroker>(shared_from_this());
@@ -2252,6 +2253,7 @@ bool ConvertToBroker::startConversion(SocketDisposition &disposition, const std:
         });
     return true;
 }
+#endif
 
 void ConvertToBroker::dispose()
 {
diff --git a/wsd/DocumentBroker.hpp b/wsd/DocumentBroker.hpp
index 5632c56b6..07f967579 100644
--- a/wsd/DocumentBroker.hpp
+++ b/wsd/DocumentBroker.hpp
@@ -532,8 +532,10 @@ public:
                     const std::string& sOptions);
     virtual ~ConvertToBroker();
 
+#if !MOBILEAPP
     /// Move socket to this broker for response & do conversion
     bool startConversion(SocketDisposition &disposition, const std::string &id);
+#endif
 
     /// Called when removed from the DocBrokers list
     void dispose() override;
commit 18a966a486c9fdd62cda97996349fa018379b210
Author:     Ashod Nakashian <ashod.nakashian at collabora.co.uk>
AuthorDate: Thu Dec 12 01:32:48 2019 -0500
Commit:     Jan Holesovsky <kendy at collabora.com>
CommitDate: Thu Dec 12 10:18:24 2019 +0100

    leaflet: improved sidebar wizard handling
    
    Now the Hamburger works and the sidebar updates
    are more accurate.
    
    Change-Id: I2f8df05801297d8ec29bf1d966624f06df685d31
    Reviewed-on: https://gerrit.libreoffice.org/85010
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
    Reviewed-by: Jan Holesovsky <kendy at collabora.com>

diff --git a/loleaflet/src/control/Control.MobileWizard.js b/loleaflet/src/control/Control.MobileWizard.js
index 4715f0694..912c4602d 100644
--- a/loleaflet/src/control/Control.MobileWizard.js
+++ b/loleaflet/src/control/Control.MobileWizard.js
@@ -26,7 +26,7 @@ L.Control.MobileWizard = L.Control.extend({
 		this.map = map;
 		map.on('mobilewizard', this._onMobileWizard, this);
 		map.on('closemobilewizard', this._hideWizard, this);
-		map.on('showmobilewizard', this._showWizard, this);
+		map.on('showwizardsidebar', this._showWizardSidebar, this);
 
 		this._setupBackButton();
 	},
@@ -60,6 +60,12 @@ L.Control.MobileWizard = L.Control.extend({
 		$('#toolbar-down').hide();
 	},
 
+	_showWizardSidebar: function() {
+		this.map.showSidebar = true;
+		this._refreshSidebar();
+		this._showWizard();
+	},
+
 	_hideWizard: function() {
 		$('#mobile-wizard').hide();
 		$('#mobile-wizard-content').empty();
@@ -67,6 +73,7 @@ L.Control.MobileWizard = L.Control.extend({
 			$('#toolbar-down').show();
 		}
 
+		this.map.showSidebar = false;
 		this._isActive = false;
 		this._currentPath = [];
 		if (window.mobileWizard === true) {
@@ -228,8 +235,10 @@ L.Control.MobileWizard = L.Control.extend({
 		if (data) {
 			var isSidebar = data.id !== 'menubar' && data.id !== 'insertshape' && data.id !== 'funclist';
 
-			if (!this._isActive && isSidebar)
-				this._refreshSidebar();
+			if (!this._isActive && isSidebar) {
+				if (this.map.showSidebar == false)
+					return;
+			}
 
 			this._isActive = true;
 			var currentPath = null;
@@ -242,10 +251,8 @@ L.Control.MobileWizard = L.Control.extend({
 
 			this._reset();
 
-			if (window.mobileWizard) {
-				this._showWizard();
-				this._hideKeyboard();
-			}
+			this._showWizard();
+			this._hideKeyboard();
 
 			// We can change the sidebar as we want here
 			if (data.id === '') { // sidebar indicator
diff --git a/loleaflet/src/control/Control.Toolbar.js b/loleaflet/src/control/Control.Toolbar.js
index 4e8c1943e..a068c3af9 100644
--- a/loleaflet/src/control/Control.Toolbar.js
+++ b/loleaflet/src/control/Control.Toolbar.js
@@ -346,7 +346,19 @@ function onClick(e, id, item, subItem) {
 			if (window.insertionMobileWizard)
 				this.onClick(null, 'insertion_mobile_wizard');
 			window.mobileWizard = true;
-			map.fire('showmobilewizard');
+			if (!map._sidebarVisible) {
+				map._sidebarVisible = true;
+				map.sendUnoCommand('.uno:Sidebar');
+			} else {
+				// As the sidebar LOKWindowId can and does change,
+				// esp. between chart and other elements, we apparently
+				// lose track, and there is currently no reliable way to
+				// recover it (which is needed to request updates).
+				// The following disable and enable the sidebar to get it.
+				map.sendUnoCommand('.uno:Sidebar');
+				map.sendUnoCommand('.uno:Sidebar');
+			}
+			map.fire('showwizardsidebar');
 			toolbar.check(id);
 		}
 	}
diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js
index d6e406884..491d14731 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -875,8 +875,8 @@ L.TileLayer = L.GridLayer.extend({
 		this._map.fire('mobilewizard', data);
 	},
 
-	_closeMobileWizard: function(data) {
-		this._map.fire('closemobilewizard', data);
+	_closeMobileWizard: function() {
+		this._map.fire('closemobilewizard');
 	},
 
 	_onJSDialogMsg: function (textMsg) {
@@ -885,7 +885,7 @@ L.TileLayer = L.GridLayer.extend({
 			if (msgData.enabled) {
 				this._openMobileWizard(msgData);
 			} else {
-				this._closeMobileWizard(msgData);
+				this._closeMobileWizard();
 			}
 		}
 	},
diff --git a/loleaflet/src/map/Map.js b/loleaflet/src/map/Map.js
index af149f236..8e9f98d45 100644
--- a/loleaflet/src/map/Map.js
+++ b/loleaflet/src/map/Map.js
@@ -110,6 +110,8 @@ L.Map = L.Evented.extend({
 		this._disableDefaultAction = {}; // The events for which the default handler is disabled and only issues postMessage.
 		this._winId = 0;
 		this._activeDialog = null;
+		this._sidebarVisible = false; // The state of the sidebar in Core.
+		this._showSidebar = false; // Whether we have the sidebar visible in the UI or not (i.e. does the user want to see it or not).
 
 		vex.dialogID = -1;
 
@@ -294,7 +296,9 @@ L.Map = L.Evented.extend({
 					// thinks it is shown, so the command has to be triggered
 					// once again for it to be visible on the desktop
 					// (because the first .uno:Sidebar has actually hid it)
-					map._socket.sendMessage('uno .uno:Sidebar');
+					if (!window.mode.isMobile() && !window.mode.isTablet() && !window.ThisIsAMobileApp) {
+						map._socket.sendMessage('uno .uno:Sidebar');
+					}
 				}, 200);
 			}
 
commit 86a1d5e08c7776ec05cca8ecb0c560705542c947
Author:     Michael Meeks <michael.meeks at collabora.com>
AuthorDate: Thu Dec 12 05:33:09 2019 +0000
Commit:     Jan Holesovsky <kendy at collabora.com>
CommitDate: Thu Dec 12 10:18:24 2019 +0100

    A new convert-to unit test, hopefully taking longer to load.
    
    Change-Id: I8d8291e272a175ab3c846b692bb34b185b2b8278
    Reviewed-on: https://gerrit.libreoffice.org/85008
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
    Reviewed-by: Michael Meeks <michael.meeks at collabora.com>

diff --git a/test/data/convert-to.xlsx b/test/data/convert-to.xlsx
new file mode 100644
index 000000000..7af9e7063
Binary files /dev/null and b/test/data/convert-to.xlsx differ
diff --git a/test/integration-http-server.cpp b/test/integration-http-server.cpp
index c19c57904..a2ceaca92 100644
--- a/test/integration-http-server.cpp
+++ b/test/integration-http-server.cpp
@@ -51,6 +51,7 @@ class HTTPServerTest : public CPPUNIT_NS::TestFixture
     CPPUNIT_TEST(testScriptsAndLinksGet);
     CPPUNIT_TEST(testScriptsAndLinksPost);
     CPPUNIT_TEST(testConvertTo);
+    CPPUNIT_TEST(testConvertTo2);
     CPPUNIT_TEST(testConvertToWithForwardedClientIP);
 
     CPPUNIT_TEST_SUITE_END();
@@ -62,6 +63,7 @@ class HTTPServerTest : public CPPUNIT_NS::TestFixture
     void testScriptsAndLinksGet();
     void testScriptsAndLinksPost();
     void testConvertTo();
+    void testConvertTo2();
     void testConvertToWithForwardedClientIP();
 
 public:
@@ -375,6 +377,44 @@ void HTTPServerTest::testConvertTo()
     CPPUNIT_ASSERT_EQUAL(expectedStream.str(), actualString);
 }
 
+void HTTPServerTest::testConvertTo2()
+{
+    const std::string srcPath = FileUtil::getTempFilePath(TDOC, "convert-to.xlsx", "convertTo_");
+    std::unique_ptr<Poco::Net::HTTPClientSession> session(helpers::createSession(_uri));
+    session->setTimeout(Poco::Timespan(5, 0)); // 5 seconds.
+
+    Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_POST, "/lool/convert-to");
+    Poco::Net::HTMLForm form;
+    form.setEncoding(Poco::Net::HTMLForm::ENCODING_MULTIPART);
+    form.set("format", "png");
+    form.addPart("data", new Poco::Net::FilePartSource(srcPath));
+    form.prepareSubmit(request);
+    try
+    {
+        form.write(session->sendRequest(request));
+    }
+    catch (const std::exception& ex)
+    {
+        // In case the server is still starting up.
+        sleep(2);
+        form.write(session->sendRequest(request));
+    }
+
+    Poco::Net::HTTPResponse response;
+    std::stringstream actualStream;
+    std::istream& responseStream = session->receiveResponse(response);
+    Poco::StreamCopier::copyStream(responseStream, actualStream);
+
+    // Remove the temp files.
+    FileUtil::removeFile(srcPath);
+
+    std::string actualString = actualStream.str();
+    CPPUNIT_ASSERT(actualString.size() >= 100);
+//  CPPUNIT_ASSERT_EQUAL(actualString[0], 0x89);
+    CPPUNIT_ASSERT_EQUAL(actualString[1], 'P');
+    CPPUNIT_ASSERT_EQUAL(actualString[2], 'N');
+    CPPUNIT_ASSERT_EQUAL(actualString[3], 'G');
+}
 
 void HTTPServerTest::testConvertToWithForwardedClientIP()
 {
commit eeba94228cb7c3b7405cdc90af0d44d861df76aa
Author:     Michael Meeks <michael.meeks at collabora.com>
AuthorDate: Thu Dec 12 05:09:35 2019 +0000
Commit:     Jan Holesovsky <kendy at collabora.com>
CommitDate: Thu Dec 12 10:18:24 2019 +0100

    convert-to: wait for load to complete before attempting the save.
    
    Change-Id: Iee3a8a6720bbc29fc4e113bf705f405b840e1e45
    Reviewed-on: https://gerrit.libreoffice.org/85009
    Reviewed-by: Michael Meeks <michael.meeks at collabora.com>
    Tested-by: Michael Meeks <michael.meeks at collabora.com>

diff --git a/wsd/DocumentBroker.cpp b/wsd/DocumentBroker.cpp
index af756c676..700a56fbf 100644
--- a/wsd/DocumentBroker.cpp
+++ b/wsd/DocumentBroker.cpp
@@ -2195,14 +2195,64 @@ size_t ConvertToBroker::getInstanceCount()
 
 ConvertToBroker::ConvertToBroker(const std::string& uri,
                                  const Poco::URI& uriPublic,
-                                 const std::string& docKey)
-    : DocumentBroker(uri, uriPublic, docKey)
+                                 const std::string& docKey,
+                                 const std::string& format,
+                                 const std::string& sOptions) :
+    DocumentBroker(uri, uriPublic, docKey),
+    _format(format),
+    _sOptions(sOptions)
 {
     static const int limit_convert_secs = LOOLWSD::getConfigValue<int>("per_document.limit_convert_secs", 100);
     NumConverters++;
     _limitLifeSeconds = limit_convert_secs;
 }
 
+bool ConvertToBroker::startConversion(SocketDisposition &disposition, const std::string &id)
+{
+    std::shared_ptr<ConvertToBroker> docBroker = std::static_pointer_cast<ConvertToBroker>(shared_from_this());
+
+    // Create a session to load the document.
+    const bool isReadOnly = true;
+    _clientSession = std::make_shared<ClientSession>(id, docBroker, getPublicUri(), isReadOnly, "nocliphost");
+    _clientSession->construct();
+
+    if (!_clientSession)
+        return false;
+
+    disposition.setMove([docBroker] (const std::shared_ptr<Socket> &moveSocket)
+        {
+            // Perform all of this after removing the socket
+
+            // Make sure the thread is running before adding callback.
+            docBroker->startThread();
+
+            // We no longer own this socket.
+            moveSocket->setThreadOwner(std::thread::id(0));
+
+            docBroker->addCallback([docBroker, moveSocket]()
+                 {
+                     auto streamSocket = std::static_pointer_cast<StreamSocket>(moveSocket);
+                     docBroker->_clientSession->setSaveAsSocket(streamSocket);
+
+                     // Move the socket into DocBroker.
+                     docBroker->addSocketToPoll(moveSocket);
+
+                     // First add and load the session.
+                     docBroker->addSession(docBroker->_clientSession);
+
+                     // Load the document manually and request saving in the target format.
+                     std::string encodedFrom;
+                     Poco::URI::encode(docBroker->getPublicUri().getPath(), "", encodedFrom);
+                     const std::string load = "load url=" + encodedFrom;
+                     std::vector<char> loadRequest(load.begin(), load.end());
+                     docBroker->_clientSession->handleMessage(true, WSOpCode::Text, loadRequest);
+
+                     // Save is done in the setLoaded
+                 });
+        });
+    return true;
+}
+
 void ConvertToBroker::dispose()
 {
     if (!_uriOrig.empty())
@@ -2233,6 +2283,26 @@ void ConvertToBroker::removeFile(const std::string &uriOrig)
     }
 }
 
+void ConvertToBroker::setLoaded()
+{
+    DocumentBroker::setLoaded();
+
+    // FIXME: Check for security violations.
+    Poco::Path toPath(getPublicUri().getPath());
+    toPath.setExtension(_format);
+    const std::string toJailURL = "file://" + std::string(JAILED_DOCUMENT_ROOT) + toPath.getFileName();
+    std::string encodedTo;
+    Poco::URI::encode(toJailURL, "", encodedTo);
+
+    // Convert it to the requested format.
+    const std::string saveAsCmd = "saveas url=" + encodedTo + " format=" + _format + " options=" + _sOptions;
+
+    // Send the save request ...
+    std::vector<char> saveasRequest(saveAsCmd.begin(), saveAsCmd.end());
+
+    _clientSession->handleMessage(true, WSOpCode::Text, saveasRequest);
+}
+
 std::vector<std::shared_ptr<ClientSession>> DocumentBroker::getSessionsTestOnlyUnsafe()
 {
     std::vector<std::shared_ptr<ClientSession>> result;
diff --git a/wsd/DocumentBroker.hpp b/wsd/DocumentBroker.hpp
index 3b8f6e844..5632c56b6 100644
--- a/wsd/DocumentBroker.hpp
+++ b/wsd/DocumentBroker.hpp
@@ -245,7 +245,8 @@ public:
     /// Thread safe termination of this broker if it has a lingering thread
     void joinThread();
 
-    void setLoaded();
+    /// Notify that the load has completed
+    virtual void setLoaded();
 
     bool isDocumentChangedInStorage() { return _documentChangedInStorage; }
 
@@ -518,16 +519,28 @@ private:
 
 class ConvertToBroker : public DocumentBroker
 {
+    const std::string _format;
+    const std::string _sOptions;
+    std::shared_ptr<ClientSession> _clientSession;
+
 public:
     /// Construct DocumentBroker with URI and docKey
     ConvertToBroker(const std::string& uri,
                     const Poco::URI& uriPublic,
-                    const std::string& docKey);
+                    const std::string& docKey,
+                    const std::string& format,
+                    const std::string& sOptions);
     virtual ~ConvertToBroker();
 
+    /// Move socket to this broker for response & do conversion
+    bool startConversion(SocketDisposition &disposition, const std::string &id);
+
     /// Called when removed from the DocBrokers list
     void dispose() override;
 
+    /// When the load completes - lets start saving
+    void setLoaded() override;
+
     /// How many live conversions are running.
     static size_t getInstanceCount();
 
diff --git a/wsd/LOOLWSD.cpp b/wsd/LOOLWSD.cpp
index 524415b6f..3a597c4a1 100644
--- a/wsd/LOOLWSD.cpp
+++ b/wsd/LOOLWSD.cpp
@@ -2605,7 +2605,6 @@ private:
             if (tokens.count() > 3)
                 format = tokens[3];
 
-            bool sent = false;
             std::string fromPath = handler.getFilename();
             LOG_INF("Conversion request for URI [" << fromPath << "] format [" << format << "].");
             if (!fromPath.empty() && !format.empty())
@@ -2627,7 +2626,7 @@ private:
                 std::unique_lock<std::mutex> docBrokersLock(DocBrokersMutex);
 
                 LOG_DBG("New DocumentBroker for docKey [" << docKey << "].");
-                auto docBroker = std::make_shared<ConvertToBroker>(fromPath, uriPublic, docKey);
+                auto docBroker = std::make_shared<ConvertToBroker>(fromPath, uriPublic, docKey, format, sOptions);
                 handler.takeFile();
 
                 cleanupDocBrokers();
@@ -2636,70 +2635,12 @@ private:
                 DocBrokers.emplace(docKey, docBroker);
                 LOG_TRC("Have " << DocBrokers.size() << " DocBrokers after inserting [" << docKey << "].");
 
-                // Load the document.
-                // TODO: Move to DocumentBroker.
-                const bool isReadOnly = true;
-                std::shared_ptr<ClientSession> clientSession = createNewClientSession(
-                    nullptr, _id, uriPublic, docBroker, isReadOnly, "nocliphost");
-                if (clientSession)
-                {
-                    disposition.setMove([docBroker, clientSession, format, sOptions]
-                                        (const std::shared_ptr<Socket> &moveSocket)
-                    {
-                        // Perform all of this after removing the socket
-
-                        // Make sure the thread is running before adding callback.
-                        docBroker->startThread();
-
-                        // We no longer own this socket.
-                        moveSocket->setThreadOwner(std::thread::id(0));
-
-                        docBroker->addCallback([docBroker, moveSocket, clientSession, format, sOptions]()
-                        {
-                            auto streamSocket = std::static_pointer_cast<StreamSocket>(moveSocket);
-                            clientSession->setSaveAsSocket(streamSocket);
-
-                            // Move the socket into DocBroker.
-                            docBroker->addSocketToPoll(moveSocket);
-
-                            // First add and load the session.
-                            docBroker->addSession(clientSession);
-
-                            // Load the document manually and request saving in the target format.
-                            std::string encodedFrom;
-                            URI::encode(docBroker->getPublicUri().getPath(), "", encodedFrom);
-                            const std::string load = "load url=" + encodedFrom;
-                            std::vector<char> loadRequest(load.begin(), load.end());
-                            clientSession->handleMessage(true, WSOpCode::Text, loadRequest);
-
-                            // FIXME: Check for security violations.
-                            Path toPath(docBroker->getPublicUri().getPath());
-                            toPath.setExtension(format);
-                            const std::string toJailURL = "file://" + std::string(JAILED_DOCUMENT_ROOT) + toPath.getFileName();
-                            std::string encodedTo;
-                            URI::encode(toJailURL, "", encodedTo);
-
-                            // Convert it to the requested format.
-                            const auto saveas = "saveas url=" + encodedTo + " format=" + format + " options=" + sOptions;
-                            std::vector<char> saveasRequest(saveas.begin(), saveas.end());
-                            clientSession->handleMessage(true, WSOpCode::Text, saveasRequest);
-                        });
-                    });
-
-                    sent = true;
-                }
-                else
+                if (!docBroker->startConversion(disposition, _id))
                 {
                     LOG_WRN("Failed to create Client Session with id [" << _id << "] on docKey [" << docKey << "].");
                     cleanupDocBrokers();
                 }
             }
-
-            if (!sent)
-            {
-                // TODO: We should differentiate between bad request and failed conversion.
-                throw BadRequestException("Failed to convert and send file.");
-            }
             return;
         }
         else if (tokens.count() >= 4 && tokens[3] == "insertfile")
commit 0dfde7e1dcf65c56e840087be24173e45213bf38
Author:     Michael Meeks <michael.meeks at collabora.com>
AuthorDate: Thu Dec 12 03:38:50 2019 +0000
Commit:     Jan Holesovsky <kendy at collabora.com>
CommitDate: Thu Dec 12 10:18:24 2019 +0100

    Add a time limit for badly behaved / huge document conversions.
    
    Handles problems with load, save, and lingering DocumentBrokers.
    
    Change-Id: I6079cba3a4fa2a84c303b3a8669d94863a04f474

diff --git a/loolwsd.xml.in b/loolwsd.xml.in
index 6b81a4385..71f6b8f6f 100644
--- a/loolwsd.xml.in
+++ b/loolwsd.xml.in
@@ -29,6 +29,7 @@
         <limit_file_size_mb desc="The maximum file size allowed to each document process to write. 0 for unlimited." type="uint">0</limit_file_size_mb>
         <limit_num_open_files desc="The maximum number of files allowed to each document process to open. 0 for unlimited." type="uint">0</limit_num_open_files>
         <limit_load_secs desc="Maximum number of seconds to wait for a document load to succeed. 0 for unlimited." type="uint" default="100">100</limit_load_secs>
+        <limit_convert_secs desc="Maximum number of seconds to wait for a document conversion to succeed. 0 for unlimited." type="uint" default="100">100</limit_convert_secs>
     </per_document>
 
     <per_view desc="View-specific settings.">
diff --git a/wsd/DocumentBroker.cpp b/wsd/DocumentBroker.cpp
index 1fb51b513..af756c676 100644
--- a/wsd/DocumentBroker.cpp
+++ b/wsd/DocumentBroker.cpp
@@ -175,6 +175,7 @@ std::atomic<unsigned> DocumentBroker::DocBrokerId(1);
 DocumentBroker::DocumentBroker(const std::string& uri,
                                const Poco::URI& uriPublic,
                                const std::string& docKey) :
+    _limitLifeSeconds(0),
     _uriOrig(uri),
     _uriPublic(uriPublic),
     _docKey(docKey),
@@ -314,6 +315,22 @@ void DocumentBroker::pollThread()
             continue;
         }
 
+        if (_limitLifeSeconds > 0 &&
+            std::chrono::duration_cast<std::chrono::seconds>(now - _threadStart).count() > _limitLifeSeconds)
+        {
+            LOG_WRN("Doc [" << _docKey << "] is taking too long to convert. Will kill process ["
+                            << _childProcess->getPid() << "]. per_document.limit_convert_secs set to "
+                            << _limitLifeSeconds << " secs.");
+            broadcastMessage("error: cmd=load kind=docexpired");
+
+            // Brutal but effective.
+            if (_childProcess)
+                _childProcess->terminate();
+
+            stop("Load timed out");
+            continue;
+        }
+
         if (std::chrono::duration_cast<std::chrono::milliseconds>
                     (now - lastBWUpdateTime).count() >= COMMAND_TIMEOUT_MS)
         {
@@ -2181,7 +2198,9 @@ ConvertToBroker::ConvertToBroker(const std::string& uri,
                                  const std::string& docKey)
     : DocumentBroker(uri, uriPublic, docKey)
 {
+    static const int limit_convert_secs = LOOLWSD::getConfigValue<int>("per_document.limit_convert_secs", 100);
     NumConverters++;
+    _limitLifeSeconds = limit_convert_secs;
 }
 
 void ConvertToBroker::dispose()
@@ -2252,11 +2271,14 @@ void DocumentBroker::dumpState(std::ostream& os)
     os << "\n  doc key: " << _docKey;
     os << "\n  doc id: " << _docId;
     os << "\n  num sessions: " << _sessions.size();
+    os << "\n  thread start: " << Util::getSteadyClockAsString(_threadStart);
     os << "\n  last saved: " << Util::getSteadyClockAsString(_lastSaveTime);
     os << "\n  last save request: " << Util::getSteadyClockAsString(_lastSaveRequestTime);
     os << "\n  last save response: " << Util::getSteadyClockAsString(_lastSaveResponseTime);
     os << "\n  last modifed: " << Util::getHttpTime(_documentLastModifiedTime);
     os << "\n  file last modifed: " << Util::getHttpTime(_lastFileModifiedTime);
+    if (_limitLifeSeconds)
+        os << "\n  life limit in seconds: " << _limitLifeSeconds;
     os << "\n  idle time: " << getIdleTimeSecs();
     os << "\n  cursor " << _cursorPosX << ", " << _cursorPosY
       << "( " << _cursorWidth << "," << _cursorHeight << ")\n";
diff --git a/wsd/DocumentBroker.hpp b/wsd/DocumentBroker.hpp
index 19c88e4c4..3b8f6e844 100644
--- a/wsd/DocumentBroker.hpp
+++ b/wsd/DocumentBroker.hpp
@@ -443,6 +443,8 @@ private:
     void getIOStats(uint64_t &sent, uint64_t &recv);
 
 protected:
+    /// Seconds to live for, or 0 forever
+    int64_t _limitLifeSeconds;
     std::string _uriOrig;
 private:
     const Poco::URI _uriPublic;
diff --git a/wsd/LOOLWSD.cpp b/wsd/LOOLWSD.cpp
index faa399756..524415b6f 100644
--- a/wsd/LOOLWSD.cpp
+++ b/wsd/LOOLWSD.cpp
@@ -835,6 +835,7 @@ void LOOLWSD::initialize(Application& self)
             { "per_document.limit_file_size_mb", "0" },
             { "per_document.limit_num_open_files", "0" },
             { "per_document.limit_load_secs", "100" },
+            { "per_document.limit_convert_secs", "100" },
             { "per_document.limit_stack_mem_kb", "8000" },
             { "per_document.limit_virt_mem_mb", "0" },
             { "per_document.max_concurrency", "4" },
commit 3ea2122b092648d7e547e8911a4e276ed1247da8
Author:     Michael Meeks <michael.meeks at collabora.com>
AuthorDate: Wed Dec 11 22:52:55 2019 +0000
Commit:     Jan Holesovsky <kendy at collabora.com>
CommitDate: Thu Dec 12 10:18:24 2019 +0100

    android: improve debugging readme.
    
    Change-Id: I4d1933e38c7cb0fd4d28b4384e11f35f2c9e8626

diff --git a/android/README b/android/README
index eb34c511b..4606ef3a3 100644
--- a/android/README
+++ b/android/README
@@ -113,7 +113,8 @@ to setup lldb to actually read & use them.
 
   This path contains the non-stripped version of the liblo-native-code.so, and
   the debugger will read the symbols from that one (even if the APK contains
-  the stripped version).
+  the stripped version). *NB* ensure that this is before any internal source
+  directories - since the internal source contains stripped native code.
 
   [Alternatively you can add the following to your ~/.lldbinit instead:
 
@@ -129,6 +130,8 @@ to setup lldb to actually read & use them.
 From now on, you will be able to debug directly in the Android Studio
 debugger.  Happy debugging!
 
+Note: to re-buld your app with a newly compiled libnative-lo code - it is 
+
 == Tip: How to speed up your core.git build ==
 
 If you use icecream for parallel building, you can use it for
commit 28e9548fc880a53358f063d537b8ac72d459feed
Author:     Jan Holesovsky <kendy at collabora.com>
AuthorDate: Wed Dec 11 20:32:56 2019 +0100
Commit:     Jan Holesovsky <kendy at collabora.com>
CommitDate: Thu Dec 12 10:18:24 2019 +0100

    android: Removed unused resources.
    
    Change-Id: If6175b4703db3d476acc781b9d02c84ca79f7c12
    Reviewed-on: https://gerrit.libreoffice.org/84984
    Reviewed-by: Jan Holesovsky <kendy at collabora.com>
    Tested-by: Jan Holesovsky <kendy at collabora.com>

diff --git a/android/app/src/main/res/values-tr/strings.xml b/android/app/src/main/res/values-tr/strings.xml
index 583fa5313..b50ce64d5 100644
--- a/android/app/src/main/res/values-tr/strings.xml
+++ b/android/app/src/main/res/values-tr/strings.xml
@@ -1,20 +1,16 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
 
-    <string name="app_name">LibreOffice Görüntüleyici</string>
-    <string name="app_name_settings">LibreOffice Görüntüleyici Ayarları</string>
+    <string name="app_name_settings">Ayarları</string>
 
-    <string name="app_about_name"><b>LibreOffice Görüntüleyici \'Beta\'</b></string>
     <string name="app_version">Versiyon: %1$s\nBuild ID: %2$s</string>
-    <string name="app_description">LibreOffice Görüntüleyici LibreOffice tabanlı bir belge görüntüleyicisidir.</string>
-    <string name="app_credits">https://www.libreoffice.org</string>
+    <string name="app_description">$APP_NAME LibreOffice tabanlı bir belge görüntüleyicisidir.</string>
     <string name="app_vendor">Bu sürüm $VENDOR tarafından derlenmiştir.</string>
     <string name="temp_file_saving_disabled">Bu dosya salt okunabilir haldedir. Kaydetme devredışı.</string>
 
     <string name="about_license">Lisansı Görüntüle</string>
     <string name="about_notice">Bildiriyi Görüntüle</string>
     <string name="about_moreinfo">Daha Fazla Bilgi</string>
-    <string name="back_again_to_quit">Çıkış için geri tuşuna tekrar basınız.</string>
 
     <string name="new_textdocument">Yeni Kelime İşlemci</string>
     <string name="new_presentation">Yeni Sunum</string>
@@ -22,12 +18,9 @@
     <string name="new_drawing">Yeni Çizim</string>
     <string name="default_document_name">adsız</string>
 
-    <string name="browser_app_name">LibreOffice Tarayıcı</string>
-    <string name="menu_search">Ara</string>
     <string name="list_view">Liste</string>
     <string name="grid_view">Grid</string>
     <string name="filter">Şununla filtrele:</string>
-    <string name="search_not_found">Söz dizimi bulunamadı.</string>
     <string name="sort">Şununla sırala:</string>
     <string name="sort_smallest">Küçükten büyüğe</string>
     <string name="sort_largest">Büyükten küçüğe</string>
@@ -35,27 +28,15 @@
     <string name="sort_za">Z-A</string>
     <string name="sort_oldest">Eskiden yeniye</string>
     <string name="sort_newest">Yeniden eskiye</string>
-    <string name="menu_sort_size">Boyuta Göre Sırala</string>
-    <string name="menu_sort_az">Alfabetik Sırala</string>
-    <string name="menu_sort_modified">Tarihe Göre Sırala</string>
-    <string name="menu_preferences">Seçenekler</string>
     <string name="file_icon_desc">dosya_simgesi</string>
     <string name="title_recents">Son açılan dosyalar</string>
     <string name="title_browser">Tüm dosyalar</string>
     <!-- Pref keys as resources ; Not currently used -->
-    <string name="EXPLORER_VIEW_TYPE_KEY">EXPLORER_VIEW_TYPE</string>
-    <string name="CURRENT_DIRECTORY_KEY">CURRENT_DIRECTORY</string>
     <string name="pref_category_explorer">Dosya Gezgini Ayarları</string>
-    <string name="pref_category_general">Genel</string>
-    <string name="pref_experimental_editing">Deneysel Mod</string>
-    <string name="pref_experimental_editing_summary">Deneysel düzenleme modunu etkinleştirin. Kullanım riski size aittir.</string>
     <string name="pref_show_hidden_files">Gizli Dosyalar ve Dizinler</string>
     <string name="pref_show_hidden_files_summary">Gizli dosyalar ve dizinleri göstermeyi etkinleştir.</string>
-    <string name="pref_developer_mode">Geliştirici Modu</string>
-    <string name="pref_developer_mode_summary">Geliştirici modunu etkinleştirerek UNO komutları gönderin. Kullanım riski size aittir.</string>
 
     <string name="action_about">Hakkında</string>
-    <string name="action_parts">Bölümler</string>
     <string name="action_settings">Ayarlar</string>
     <string name="open">Aç</string>
     <string name="share">Paylaş</string>
@@ -75,48 +56,30 @@
     <string name="local_file_system">Yerel dosya sistemi</string>
     <string name="external_sd_file_system">Harici SD</string>
     <string name="otg_file_system">OTG cihazı (deneysel)</string>
-    <string name="owncloud">Uzak sunucu</string>
     <string name="usb_connected_configure">USB bağlantısı yapıldı, cihazınızın ayarlarını yapınız.</string>
 
-    <string name="owncloud_wrong_connection">ownCloud sunucusuna bağlanılamadı. Ayarlarınızı kontrol ediniz.</string>
-    <string name="owncloud_unauthorized">ownCloud sunucusuna giriş yapılamadı. Ayarlarınızı kontrol ediniz.</string>
-    <string name="owncloud_unspecified_error">ownCloud sunucusuna bağlanırken belirtilmemiş bir hata oluştu. Lütfen daha sonra tekrar deneyiniz veya ayarlarınızı kontrol ediniz.</string>
+    <string name="owncloud_wrong_connection">Cloud sunucusuna bağlanılamadı. Ayarlarınızı kontrol ediniz.</string>
+    <string name="owncloud_unauthorized">Cloud sunucusuna giriş yapılamadı. Ayarlarınızı kontrol ediniz.</string>
+    <string name="owncloud_unspecified_error">Cloud sunucusuna bağlanırken belirtilmemiş bir hata oluştu. Lütfen daha sonra tekrar deneyiniz veya ayarlarınızı kontrol ediniz.</string>
 
     <string name="ext_document_provider_error">Geçersiz dizin. SD kart ayarlarınızı kontrol ediniz.</string>
-    <string name="legacy_extsd_missing_error">Geçersiz dizin. SD kartınızı veya SD kart ayarlarınızı kontrol ediniz.</string>
     <string name="otg_missing_error">Geçersiz dizin. OTG cihazınızı veya OTG cihazı ayarlarınızı kontrol ediniz.</string>
 
     <!-- Edit action names -->
-    <string name="action_bold">Kalın</string>
-    <string name="action_underline">Altı çizgili</string>
-    <string name="action_italic">Yana yatık</string>
-    <string name="action_strikeout">Üzeri çizgili</string>
-    <string name="action_keyboard">Klaveyi göster</string>
-    <string name="action_save">Kaydet</string>
-    <string name="action_fromat">Biçimlendirmeyi etkinleştir.</string>
-    <string name="action_search">Ara</string>
-    <string name="action_UNO_commands">UNO komutu yolla</string>
 
     <!-- Feedback messages -->
-    <string name="message_saved">Kaydetme tamamlandı.</string>
-    <string name="message_saving">Belge kaydediliyor…</string>
-    <string name="message_save_incomplete">Kayıt tamamlanmadı. Değişiklik yapıldı mı?</string>
-    <string name="create_new_file_success">"Yeni dosya oluşturuldu - "</string>
-    <string name="create_new_file_error">Yeni dosya oluşturma başarısız. Lütfen dosya ismini kontrol ediniz.</string>
 
     <!-- Document provider settings -->
     <string name="storage_provider_settings">Depolama sağlayıcısı ayarları</string>
-    <string name="owncloud_settings">ownCloud ayarları</string>
+    <string name="owncloud_settings">Cloud ayarları</string>
     <string name="physical_storage_settings">Fiziksel depolama ayarları</string>
     <string name="external_sd_path">Harici SD yolu</string>
     <string name="otg_device_path">OTG cihazı yolu</string>
     <string name="otg_warning">Deneysel özellik: OTG cihazı yazılabilir ise kullanın</string>
     <string name="server_url">Sunucu URL</string>
-    <string name="server_url_and_port">ownCloud sunucusu URL ve port</string>
+    <string name="server_url_and_port">Cloud sunucusu URL ve port</string>
     <string name="user_name">Kullanıcı Adı</string>
     <string name="password">Parola</string>
-    <string name="action_undo">Geri Al</string>
-    <string name="action_redo">Yinele</string>
 
     <!-- Directory browser strings -->
     <string name="up_description">Üst dizin</string>
@@ -128,117 +91,30 @@
     <string name="current_dir">Şuan ki dizin: %1$s</string>
 
     <!-- Save Alert dialog strings -->
-    <string name="save_alert_dialog_title">Değişiklikleri kaydetmek istiyor musunuz?</string>
-    <string name="save_document">Kaydet</string>
     <string name="action_cancel">İptal</string>
-    <string name="no_save_document">Hayır</string>
 
     <!-- Create New Document Dialog Strings -->
     <string name="create_new_document_title">Dosya ismi girin</string>
     <string name="action_create">OLUŞTUR</string>
 
     <!-- Presentation Mode Strings -->
-    <string name="action_presentation">Slayt Gösterisi</string>
-    <string name="action_add_slide">Slayt Ekle</string>
-    <string name="alert_copy_svg_slide_show_to_clipboard">Cihazınız uygulama içi slayt gösterisini desteklemiyor. Sunumu panoya kopyaladık. Lütfen ev tuşuna basıp modern bir tarayıcı açıp arama çubuğuna yapıştırın ve sunumu görüntüleyin.</string>
-    <string name="alert_copy_svg_slide_show_to_clipboard_dismiss">Tamam</string>
-    <string name="slideshow_action_back">Geri</string>
 
     <!-- Calc Header Menu Strings -->
-    <string name="calc_insert_before">Ekle</string>
-    <string name="calc_delete">Sil</string>
-    <string name="calc_hide">Gizle</string>
-    <string name="calc_show">Göster</string>
-    <string name="calc_optimal_length">En iyi uzunluk</string>
-    <string name="calc_adjust_length">Uzunluğu ayarla</string>
-    <string name="calc_adjust_height">Yüksekliği ayarla</string>
-    <string name="calc_adjust_width">Genişliği ayarla</string>
-    <string name="calc_optimal_height">En iyi yükseklikt</string>
-    <string name="calc_optimal_width">En iyi genişlik</string>
-    <string name="calc_optimal_length_confirm">Tamam</string>
-    <string name="calc_optimal_length_default_text">Extra uzunluk giriniz: 100th/mm</string>
-    <string name="calc_alert_double_click_optimal_length">İpucu: Başlığa çift dokunuş en iyi uzunluk ve genişliği ayarlar.</string>
-    <string name="action_add_worksheet">Hesap Tablosu Ekle</string>
 
     <!-- Password dialog strings -->
-    <string name="action_pwd_dialog_OK">Tamam</string>
-    <string name="action_pwd_dialog_cancel">İptal</string>
-    <string name="action_pwd_dialog_title">Lütfen parola giriniz.</string>
 
     <!-- Insert Image Strings -->
-    <string name="take_photo">Fotoğraf Çek</string>
-    <string name="select_photo">Fotoğraf Seç</string>
-    <string name="select_photo_title">Resim Seç</string>
-    <string name="no_camera_found">Kamera bulunamadı.</string>
-    <string name="compress_photo_smallest_size">Düşük Kalite</string>
-    <string name="compress_photo_medium_size">Orta Kalite</string>
-    <string name="compress_photo_max_quality">Maksimum Kalite</string>
-    <string name="compress_photo_no_compress">Sıkıştırma yapma</string>
-    <string name="compress_photo_title">Fotoğrafı sıkıştırmak ister misiniz?</string>
 
     <!-- Clipboard Actions -->
-    <string name="action_copy">Kopyala</string>
-    <string name="action_paste">Yapıştır</string>
-    <string name="action_cut">Kes</string>
-    <string name="action_back">Geri</string>
-    <string name="action_text_copied">Yazı panoya kopyalandı.</string>
-    <string name="insert_table">Tablo Ekle</string>
-    <string name="select_insert_options">Ekleme seçenekleri:</string>
-    <string name="select_delete_options">Silme seçenekleri:</string>
-    <string name="action_rename_worksheet">Hesap tablosunu yeniden adlandır</string>
-    <string name="action_delete_worksheet">Hesap tablosunu sil</string>
-    <string name="action_delete_slide">Slayt sil</string>
-    <string name="name_already_used">Girilen isim zaten kullanılıyor.</string>
-    <string name="part_name_changed">Bölüm ismi değiştirildi.</string>
-    <string name="part_deleted">Bölüm silindi.</string>
-    <string-array name="insertrowscolumns">
-        <item>Satırları öncekine ekle</item>
-        <item>Satırları sonrakine ekle</item>
-        <item>Sütunları öncekine ekle</item>
-        <item>Sütunları sonrakine ekle</item>
-        <item>Tablo Ekle</item>
-    </string-array>
-    <string-array name="deleterowcolumns">
-        <item>Satır Sil</item>
-        <item>Sütun Sil</item>
-        <item>Tablo Sil</item>
-    </string-array>
 
     <!-- UNO cmd controller Strings -->
-    <string name="UNO_commands_string_hint">UNO Komutu</string>
-    <string name="UNO_commands_string_type_hint">Tip</string>
-    <string name="UNO_commands_string_value_hint">Değer</string>
-    <string name="UNO_commands_string_parent_value_hint">Ebeveyn Değeri</string>
-    <string name="action_exportToPDF">PDF olarak aktar</string>
-    <string name="action_print">Yazdır</string>
-    <string name="tabhost_character">Karakter</string>
-    <string name="tabhost_paragraph">Paragraf</string>
-    <string name="tabhost_insert">Ekle</string>
-    <string name="tabhost_style">Biçim</string>
-    <string name="alert_ok">Tamam</string>
-    <string name="alert_cancel">İptal</string>
     <string name="unable_to_go_further">Daha fazla ilerlenemiyor.</string>
-    <string name="current_uno_command">Şuan ki UNO komutu</string>
     <string name="pref_sort_summary">Dosyaların nasıl sıralanacağını seçiniz. A-Z, Z-A ya da boyuta göre.</string>
     <string name="pref_viewmode_summary">Dosyaları grid veya liste şeklinde görüntüle.</string>
     <string name="pref_file_explorer_title">Dosya Gezgini</string>
     <string name="pref_sort_title">Dosya Sıralaması</string>
     <string name="pref_filter_title">Varsayılan Dosya Filtrelemesi</string>
     <string name="pref_filter_summary">Varsayılan dosya filtrelemesini seç</string>
-    <string name="display_language">Uygulama Dili</string>
-    <string name="display_language_summary">Varsayılan dili değiştir</string>
-    <string name="unable_to_export_pdf">Pdf dışa aktarılamıyor.</string>
-    <string name="pdf_exported_at">Şu konumda pdf'e aktarıldı: </string>
-    <string name="printing_not_supported">Cihazınız yazdırmayı desteklemiyor.</string>
-    <string name="error">Hata</string>
-    <string name="enter_part_name">Bölüm ismi girin.</string>
     <string name="bmp_null">Bmp boş!</string>
     <string name="directory_not_saved">Dizin kaydedilmedi.</string>
-    <string name="page">Sayfa</string>
-    <string name="sheet">Tablo</string>
-    <string name="slide">Slayt</string>
-    <string name="part">Bölüm</string>
-    <string name="highlight_color">Vurgulama Rengi</string>
-    <string name="font_color">Metin Rengi</string>
-    <string name="action_rename_slide">Slaytı yeniden adlandır</string>
 </resources>
commit 7a2cc68a0bf939d3771932dbaedbed4d67dc3855
Author:     Jan Holesovsky <kendy at collabora.com>
AuthorDate: Wed Dec 11 20:25:22 2019 +0100
Commit:     Jan Holesovsky <kendy at collabora.com>
CommitDate: Thu Dec 12 10:18:24 2019 +0100

    android: Turkish shell translations copied over from core.git.
    
    Change-Id: If74644bdf2460f2fd2a8346b84333340d4acc7c9
    Reviewed-on: https://gerrit.libreoffice.org/84983
    Reviewed-by: Jan Holesovsky <kendy at collabora.com>
    Tested-by: Jan Holesovsky <kendy at collabora.com>

diff --git a/android/app/src/main/res/values-tr/strings.xml b/android/app/src/main/res/values-tr/strings.xml
new file mode 100644
index 000000000..583fa5313
--- /dev/null
+++ b/android/app/src/main/res/values-tr/strings.xml
@@ -0,0 +1,244 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+    <string name="app_name">LibreOffice Görüntüleyici</string>
+    <string name="app_name_settings">LibreOffice Görüntüleyici Ayarları</string>
+
+    <string name="app_about_name"><b>LibreOffice Görüntüleyici \'Beta\'</b></string>
+    <string name="app_version">Versiyon: %1$s\nBuild ID: %2$s</string>
+    <string name="app_description">LibreOffice Görüntüleyici LibreOffice tabanlı bir belge görüntüleyicisidir.</string>
+    <string name="app_credits">https://www.libreoffice.org</string>
+    <string name="app_vendor">Bu sürüm $VENDOR tarafından derlenmiştir.</string>
+    <string name="temp_file_saving_disabled">Bu dosya salt okunabilir haldedir. Kaydetme devredışı.</string>
+
+    <string name="about_license">Lisansı Görüntüle</string>
+    <string name="about_notice">Bildiriyi Görüntüle</string>
+    <string name="about_moreinfo">Daha Fazla Bilgi</string>
+    <string name="back_again_to_quit">Çıkış için geri tuşuna tekrar basınız.</string>
+
+    <string name="new_textdocument">Yeni Kelime İşlemci</string>
+    <string name="new_presentation">Yeni Sunum</string>
+    <string name="new_spreadsheet">Yeni Hesap Tablosu</string>
+    <string name="new_drawing">Yeni Çizim</string>
+    <string name="default_document_name">adsız</string>
+
+    <string name="browser_app_name">LibreOffice Tarayıcı</string>
+    <string name="menu_search">Ara</string>
+    <string name="list_view">Liste</string>
+    <string name="grid_view">Grid</string>
+    <string name="filter">Şununla filtrele:</string>
+    <string name="search_not_found">Söz dizimi bulunamadı.</string>
+    <string name="sort">Şununla sırala:</string>
+    <string name="sort_smallest">Küçükten büyüğe</string>
+    <string name="sort_largest">Büyükten küçüğe</string>
+    <string name="sort_az">A-Z</string>
+    <string name="sort_za">Z-A</string>
+    <string name="sort_oldest">Eskiden yeniye</string>
+    <string name="sort_newest">Yeniden eskiye</string>
+    <string name="menu_sort_size">Boyuta Göre Sırala</string>
+    <string name="menu_sort_az">Alfabetik Sırala</string>
+    <string name="menu_sort_modified">Tarihe Göre Sırala</string>
+    <string name="menu_preferences">Seçenekler</string>
+    <string name="file_icon_desc">dosya_simgesi</string>
+    <string name="title_recents">Son açılan dosyalar</string>
+    <string name="title_browser">Tüm dosyalar</string>
+    <!-- Pref keys as resources ; Not currently used -->
+    <string name="EXPLORER_VIEW_TYPE_KEY">EXPLORER_VIEW_TYPE</string>
+    <string name="CURRENT_DIRECTORY_KEY">CURRENT_DIRECTORY</string>
+    <string name="pref_category_explorer">Dosya Gezgini Ayarları</string>
+    <string name="pref_category_general">Genel</string>
+    <string name="pref_experimental_editing">Deneysel Mod</string>
+    <string name="pref_experimental_editing_summary">Deneysel düzenleme modunu etkinleştirin. Kullanım riski size aittir.</string>
+    <string name="pref_show_hidden_files">Gizli Dosyalar ve Dizinler</string>
+    <string name="pref_show_hidden_files_summary">Gizli dosyalar ve dizinleri göstermeyi etkinleştir.</string>
+    <string name="pref_developer_mode">Geliştirici Modu</string>
+    <string name="pref_developer_mode_summary">Geliştirici modunu etkinleştirerek UNO komutları gönderin. Kullanım riski size aittir.</string>
+
+    <string name="action_about">Hakkında</string>
+    <string name="action_parts">Bölümler</string>
+    <string name="action_settings">Ayarlar</string>
+    <string name="open">Aç</string>
+    <string name="share">Paylaş</string>
+    <string name="share_via">Şununla paylaş</string>
+
+    <!-- Document browser filters -->
+    <string name="filter_everything">Hepsi</string>
+    <string name="filter_documents">Kelime İşlemci</string>
+    <string name="filter_spreadsheets">Hesap Tablosu</string>
+    <string name="filter_presentations">Sunum</string>
+    <string name="filter_drawings">Çizimler</string>
+
+    <!-- Document provider names -->
+    <string name="document_locations">Belge dizinleri</string>
+    <string name="close_document_locations">Belge dizinlerini kapat</string>
+    <string name="local_documents">Belgeler</string>
+    <string name="local_file_system">Yerel dosya sistemi</string>
+    <string name="external_sd_file_system">Harici SD</string>
+    <string name="otg_file_system">OTG cihazı (deneysel)</string>
+    <string name="owncloud">Uzak sunucu</string>
+    <string name="usb_connected_configure">USB bağlantısı yapıldı, cihazınızın ayarlarını yapınız.</string>
+
+    <string name="owncloud_wrong_connection">ownCloud sunucusuna bağlanılamadı. Ayarlarınızı kontrol ediniz.</string>
+    <string name="owncloud_unauthorized">ownCloud sunucusuna giriş yapılamadı. Ayarlarınızı kontrol ediniz.</string>
+    <string name="owncloud_unspecified_error">ownCloud sunucusuna bağlanırken belirtilmemiş bir hata oluştu. Lütfen daha sonra tekrar deneyiniz veya ayarlarınızı kontrol ediniz.</string>
+
+    <string name="ext_document_provider_error">Geçersiz dizin. SD kart ayarlarınızı kontrol ediniz.</string>
+    <string name="legacy_extsd_missing_error">Geçersiz dizin. SD kartınızı veya SD kart ayarlarınızı kontrol ediniz.</string>
+    <string name="otg_missing_error">Geçersiz dizin. OTG cihazınızı veya OTG cihazı ayarlarınızı kontrol ediniz.</string>
+
+    <!-- Edit action names -->
+    <string name="action_bold">Kalın</string>
+    <string name="action_underline">Altı çizgili</string>
+    <string name="action_italic">Yana yatık</string>
+    <string name="action_strikeout">Üzeri çizgili</string>
+    <string name="action_keyboard">Klaveyi göster</string>
+    <string name="action_save">Kaydet</string>
+    <string name="action_fromat">Biçimlendirmeyi etkinleştir.</string>
+    <string name="action_search">Ara</string>
+    <string name="action_UNO_commands">UNO komutu yolla</string>
+
+    <!-- Feedback messages -->
+    <string name="message_saved">Kaydetme tamamlandı.</string>
+    <string name="message_saving">Belge kaydediliyor…</string>
+    <string name="message_save_incomplete">Kayıt tamamlanmadı. Değişiklik yapıldı mı?</string>
+    <string name="create_new_file_success">"Yeni dosya oluşturuldu - "</string>
+    <string name="create_new_file_error">Yeni dosya oluşturma başarısız. Lütfen dosya ismini kontrol ediniz.</string>
+
+    <!-- Document provider settings -->
+    <string name="storage_provider_settings">Depolama sağlayıcısı ayarları</string>
+    <string name="owncloud_settings">ownCloud ayarları</string>
+    <string name="physical_storage_settings">Fiziksel depolama ayarları</string>
+    <string name="external_sd_path">Harici SD yolu</string>
+    <string name="otg_device_path">OTG cihazı yolu</string>
+    <string name="otg_warning">Deneysel özellik: OTG cihazı yazılabilir ise kullanın</string>
+    <string name="server_url">Sunucu URL</string>
+    <string name="server_url_and_port">ownCloud sunucusu URL ve port</string>
+    <string name="user_name">Kullanıcı Adı</string>
+    <string name="password">Parola</string>
+    <string name="action_undo">Geri Al</string>
+    <string name="action_redo">Yinele</string>
+
+    <!-- Directory browser strings -->
+    <string name="up_description">Üst dizin</string>
+    <string name="confirm_label">Onayla</string>
+    <string name="cancel_label">İptal</string>
+    <string name="search_label">Git</string>
+    <string name="directory_browser_label">Dizin Seç</string>
+    <string name="bad_directory">Geçersiz dizin</string>
+    <string name="current_dir">Şuan ki dizin: %1$s</string>
+
+    <!-- Save Alert dialog strings -->
+    <string name="save_alert_dialog_title">Değişiklikleri kaydetmek istiyor musunuz?</string>
+    <string name="save_document">Kaydet</string>
+    <string name="action_cancel">İptal</string>
+    <string name="no_save_document">Hayır</string>
+
+    <!-- Create New Document Dialog Strings -->
+    <string name="create_new_document_title">Dosya ismi girin</string>
+    <string name="action_create">OLUŞTUR</string>
+
+    <!-- Presentation Mode Strings -->
+    <string name="action_presentation">Slayt Gösterisi</string>
+    <string name="action_add_slide">Slayt Ekle</string>
+    <string name="alert_copy_svg_slide_show_to_clipboard">Cihazınız uygulama içi slayt gösterisini desteklemiyor. Sunumu panoya kopyaladık. Lütfen ev tuşuna basıp modern bir tarayıcı açıp arama çubuğuna yapıştırın ve sunumu görüntüleyin.</string>
+    <string name="alert_copy_svg_slide_show_to_clipboard_dismiss">Tamam</string>
+    <string name="slideshow_action_back">Geri</string>
+
+    <!-- Calc Header Menu Strings -->
+    <string name="calc_insert_before">Ekle</string>
+    <string name="calc_delete">Sil</string>
+    <string name="calc_hide">Gizle</string>
+    <string name="calc_show">Göster</string>
+    <string name="calc_optimal_length">En iyi uzunluk</string>
+    <string name="calc_adjust_length">Uzunluğu ayarla</string>
+    <string name="calc_adjust_height">Yüksekliği ayarla</string>
+    <string name="calc_adjust_width">Genişliği ayarla</string>
+    <string name="calc_optimal_height">En iyi yükseklikt</string>
+    <string name="calc_optimal_width">En iyi genişlik</string>
+    <string name="calc_optimal_length_confirm">Tamam</string>
+    <string name="calc_optimal_length_default_text">Extra uzunluk giriniz: 100th/mm</string>
+    <string name="calc_alert_double_click_optimal_length">İpucu: Başlığa çift dokunuş en iyi uzunluk ve genişliği ayarlar.</string>
+    <string name="action_add_worksheet">Hesap Tablosu Ekle</string>
+
+    <!-- Password dialog strings -->
+    <string name="action_pwd_dialog_OK">Tamam</string>
+    <string name="action_pwd_dialog_cancel">İptal</string>
+    <string name="action_pwd_dialog_title">Lütfen parola giriniz.</string>
+
+    <!-- Insert Image Strings -->
+    <string name="take_photo">Fotoğraf Çek</string>
+    <string name="select_photo">Fotoğraf Seç</string>
+    <string name="select_photo_title">Resim Seç</string>
+    <string name="no_camera_found">Kamera bulunamadı.</string>
+    <string name="compress_photo_smallest_size">Düşük Kalite</string>
+    <string name="compress_photo_medium_size">Orta Kalite</string>
+    <string name="compress_photo_max_quality">Maksimum Kalite</string>
+    <string name="compress_photo_no_compress">Sıkıştırma yapma</string>
+    <string name="compress_photo_title">Fotoğrafı sıkıştırmak ister misiniz?</string>
+
+    <!-- Clipboard Actions -->
+    <string name="action_copy">Kopyala</string>
+    <string name="action_paste">Yapıştır</string>
+    <string name="action_cut">Kes</string>
+    <string name="action_back">Geri</string>
+    <string name="action_text_copied">Yazı panoya kopyalandı.</string>
+    <string name="insert_table">Tablo Ekle</string>
+    <string name="select_insert_options">Ekleme seçenekleri:</string>
+    <string name="select_delete_options">Silme seçenekleri:</string>
+    <string name="action_rename_worksheet">Hesap tablosunu yeniden adlandır</string>
+    <string name="action_delete_worksheet">Hesap tablosunu sil</string>
+    <string name="action_delete_slide">Slayt sil</string>
+    <string name="name_already_used">Girilen isim zaten kullanılıyor.</string>
+    <string name="part_name_changed">Bölüm ismi değiştirildi.</string>
+    <string name="part_deleted">Bölüm silindi.</string>
+    <string-array name="insertrowscolumns">
+        <item>Satırları öncekine ekle</item>
+        <item>Satırları sonrakine ekle</item>
+        <item>Sütunları öncekine ekle</item>
+        <item>Sütunları sonrakine ekle</item>
+        <item>Tablo Ekle</item>
+    </string-array>
+    <string-array name="deleterowcolumns">
+        <item>Satır Sil</item>
+        <item>Sütun Sil</item>
+        <item>Tablo Sil</item>
+    </string-array>
+
+    <!-- UNO cmd controller Strings -->
+    <string name="UNO_commands_string_hint">UNO Komutu</string>
+    <string name="UNO_commands_string_type_hint">Tip</string>
+    <string name="UNO_commands_string_value_hint">Değer</string>
+    <string name="UNO_commands_string_parent_value_hint">Ebeveyn Değeri</string>
+    <string name="action_exportToPDF">PDF olarak aktar</string>
+    <string name="action_print">Yazdır</string>
+    <string name="tabhost_character">Karakter</string>
+    <string name="tabhost_paragraph">Paragraf</string>
+    <string name="tabhost_insert">Ekle</string>
+    <string name="tabhost_style">Biçim</string>
+    <string name="alert_ok">Tamam</string>
+    <string name="alert_cancel">İptal</string>
+    <string name="unable_to_go_further">Daha fazla ilerlenemiyor.</string>
+    <string name="current_uno_command">Şuan ki UNO komutu</string>
+    <string name="pref_sort_summary">Dosyaların nasıl sıralanacağını seçiniz. A-Z, Z-A ya da boyuta göre.</string>
+    <string name="pref_viewmode_summary">Dosyaları grid veya liste şeklinde görüntüle.</string>
+    <string name="pref_file_explorer_title">Dosya Gezgini</string>
+    <string name="pref_sort_title">Dosya Sıralaması</string>
+    <string name="pref_filter_title">Varsayılan Dosya Filtrelemesi</string>
+    <string name="pref_filter_summary">Varsayılan dosya filtrelemesini seç</string>
+    <string name="display_language">Uygulama Dili</string>
+    <string name="display_language_summary">Varsayılan dili değiştir</string>
+    <string name="unable_to_export_pdf">Pdf dışa aktarılamıyor.</string>
+    <string name="pdf_exported_at">Şu konumda pdf'e aktarıldı: </string>
+    <string name="printing_not_supported">Cihazınız yazdırmayı desteklemiyor.</string>
+    <string name="error">Hata</string>
+    <string name="enter_part_name">Bölüm ismi girin.</string>
+    <string name="bmp_null">Bmp boş!</string>
+    <string name="directory_not_saved">Dizin kaydedilmedi.</string>
+    <string name="page">Sayfa</string>
+    <string name="sheet">Tablo</string>
+    <string name="slide">Slayt</string>
+    <string name="part">Bölüm</string>
+    <string name="highlight_color">Vurgulama Rengi</string>
+    <string name="font_color">Metin Rengi</string>
+    <string name="action_rename_slide">Slaytı yeniden adlandır</string>
+</resources>
commit 0bc255dddb339cca4e9f5735cc1c5cebaf3980a3
Author:     Pedro Pinto Silva <pedro.silva at collabora.com>
AuthorDate: Wed Dec 11 20:23:01 2019 +0100
Commit:     Jan Holesovsky <kendy at collabora.com>
CommitDate: Thu Dec 12 10:18:24 2019 +0100

    android: Brazil Portuguese translations of the lib.
    
    Change-Id: I587a69518d23c7f2a7580918610619bd78821754
    Reviewed-on: https://gerrit.libreoffice.org/84982
    Reviewed-by: Jan Holesovsky <kendy at collabora.com>
    Tested-by: Jan Holesovsky <kendy at collabora.com>

diff --git a/android/lib/src/main/res/values-pt-rBR/strings.xml b/android/lib/src/main/res/values-pt-rBR/strings.xml
new file mode 100644
index 000000000..4e668e628
--- /dev/null
+++ b/android/lib/src/main/res/values-pt-rBR/strings.xml
@@ -0,0 +1,10 @@
+<resources>
+    <string name="temp_file_saving_disabled">Este documento é apenas de leitura, salvaguardar está desabilitado.</string>
+    <string name="storage_permission_required">Permissão de armazenamento é requirida</string>
+    <string name="failed_to_load_file">Falha no carregamento do documento</string>
+    <string name="failed_to_insert_image">Falha ao inserir imagem</string>
+    <string name="cannot_open_file_chooser">Não foi possível abrir o gestor de arquivos</string>
+
+    <!-- Loading SlideShow Dialog Strings -->
+    <string name="loading">Carregando...</string>
+</resources>
commit a9ba89ab9a2821dd9beac8faa380fade9fe3c821
Author:     Eloy Crespo <eloy.crespo at collabora.com>
AuthorDate: Wed Dec 11 20:22:08 2019 +0100
Commit:     Jan Holesovsky <kendy at collabora.com>
CommitDate: Thu Dec 12 10:18:24 2019 +0100

    android: Spanish translations of the lib.
    
    Change-Id: I8fc84c9d406a2cd7be840ec2f6e09a9869e8e157
    Reviewed-on: https://gerrit.libreoffice.org/84981
    Reviewed-by: Jan Holesovsky <kendy at collabora.com>
    Tested-by: Jan Holesovsky <kendy at collabora.com>

diff --git a/android/lib/src/main/res/values-es/strings.xml b/android/lib/src/main/res/values-es/strings.xml
new file mode 100644
index 000000000..c488031e1
--- /dev/null
+++ b/android/lib/src/main/res/values-es/strings.xml
@@ -0,0 +1,10 @@
+<resources>
+    <string name="temp_file_saving_disabled">Este archivo es de solo lectura, el guardado está deshabilitado.</string>
+    <string name="storage_permission_required">Se requiere permiso de almacenamiento</string>
+    <string name="failed_to_load_file">Error al determinar el archivo a cargar</string>
+    <string name="failed_to_insert_image">Error al insertar imagen</string>
+    <string name="cannot_open_file_chooser">No se puede abrir el selector de archivos</string>
+
+    <!-- Loading SlideShow Dialog Strings -->
+    <string name="loading">Cargando...</string>
+</resources>
commit 668a48976679e64fff4ee0455e8fcbb9f6627faf
Author:     Jan Holesovsky <kendy at collabora.com>
AuthorDate: Wed Dec 11 20:13:49 2019 +0100
Commit:     Jan Holesovsky <kendy at collabora.com>
CommitDate: Thu Dec 12 10:18:24 2019 +0100

    android: Honor the languge setting from the system.
    
    Makes no sense to have an own language switching mechanism in the app...
    
    Change-Id: Ic19bf36e35d1d011a1cd96c17b713e41577c512e
    Reviewed-on: https://gerrit.libreoffice.org/84980
    Reviewed-by: Jan Holesovsky <kendy at collabora.com>
    Tested-by: Jan Holesovsky <kendy at collabora.com>

diff --git a/android/app/src/main/java/org/libreoffice/androidapp/LibreOfficeApplication.java b/android/app/src/main/java/org/libreoffice/androidapp/LibreOfficeApplication.java
index 22594f665..382943ea4 100644
--- a/android/app/src/main/java/org/libreoffice/androidapp/LibreOfficeApplication.java
+++ b/android/app/src/main/java/org/libreoffice/androidapp/LibreOfficeApplication.java
@@ -26,11 +26,6 @@ public class LibreOfficeApplication extends Application {
 
         return mainHandler;
     }
-
-    @Override
-    protected void attachBaseContext(Context base) {
-        super.attachBaseContext(LocaleHelper.onAttach(base, "en"));
-    }
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/android/app/src/main/java/org/libreoffice/androidapp/LocaleHelper.java b/android/app/src/main/java/org/libreoffice/androidapp/LocaleHelper.java
deleted file mode 100644
index 308f3b8fc..000000000
--- a/android/app/src/main/java/org/libreoffice/androidapp/LocaleHelper.java
+++ /dev/null
@@ -1,67 +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/.
- */
-
-package org.libreoffice.androidapp;
-
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.content.res.Configuration;
-import android.content.res.Resources;
-import android.os.Build;
-import android.preference.PreferenceManager;
-
-import java.util.Locale;
-
-public class LocaleHelper {
-
-    private static final String SELECTED_LANG = "org.libreoffice.selected.lang";
-
-    public static Context onAttach(Context context){
-        String lang = getPersistedData(context, Locale.getDefault().getLanguage());
-        return setLocale(context, lang);
-    }
-
-    public static Context onAttach(Context context, String defLang){
-        String lang = getPersistedData(context, defLang);
-        return setLocale(context, lang);
-    }
-
-    public static Context setLocale(Context context, String lang) {
-        persist(context, lang);
-        return updateResources(context, lang);
-    }
-
-    @SuppressWarnings("deprecation")
-    private static Context updateResources(Context context, String lang) {
-        Locale locale = new Locale(lang);
-        Locale.setDefault(locale);
-
-        Resources res = context.getResources();
-        Configuration cfg = res.getConfiguration();
-        cfg.locale = locale;
-        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1)
-            cfg.setLayoutDirection(locale);
-
-        res.updateConfiguration(cfg, res.getDisplayMetrics());
-        return context;
-    }
-
-    private static void persist(Context context, String lang) {
-        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
-        preferences.edit().putString(SELECTED_LANG, lang);
-        preferences.edit().apply();
-    }
-
-    private static String getPersistedData(Context context, String lang) {
-        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
-        return preferences.getString(SELECTED_LANG, lang);
-    }
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/android/app/src/main/java/org/libreoffice/androidapp/SettingsActivity.java b/android/app/src/main/java/org/libreoffice/androidapp/SettingsActivity.java
index 75cd9468c..c51d098af 100644
--- a/android/app/src/main/java/org/libreoffice/androidapp/SettingsActivity.java
+++ b/android/app/src/main/java/org/libreoffice/androidapp/SettingsActivity.java
@@ -53,9 +53,6 @@ public class SettingsActivity extends AppCompatActivity {
         @Override
         public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
             SettingsListenerModel.getInstance().changePreferenceState(sharedPreferences, key);
-            if (key.equals("DISPLAY_LANGUAGE")) {
-                getActivity().recreate();
-            }
         }
     }
 }
diff --git a/android/app/src/main/java/org/libreoffice/androidapp/ui/LibreOfficeUIActivity.java b/android/app/src/main/java/org/libreoffice/androidapp/ui/LibreOfficeUIActivity.java
index e0c056862..167ae17c1 100644
--- a/android/app/src/main/java/org/libreoffice/androidapp/ui/LibreOfficeUIActivity.java
+++ b/android/app/src/main/java/org/libreoffice/androidapp/ui/LibreOfficeUIActivity.java
@@ -59,7 +59,6 @@ import com.google.android.material.navigation.NavigationView;
 
 import org.libreoffice.androidapp.AboutDialogFragment;
 import org.libreoffice.androidapp.LibreOfficeApplication;
-import org.libreoffice.androidapp.LocaleHelper;
 import org.libreoffice.androidapp.R;
 import org.libreoffice.androidapp.SettingsActivity;
 import org.libreoffice.androidapp.SettingsListenerModel;
@@ -107,7 +106,6 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings
     private int viewMode;
     private int sortMode;
     private boolean showHiddenFiles;
-    private String displayLanguage;
 
     // dynamic permissions IDs
     private static final int PERMISSION_WRITE_EXTERNAL_STORAGE = 0;
@@ -132,7 +130,6 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings
     public static final String SORT_MODE_KEY = "SORT_MODE";
     private static final String RECENT_DOCUMENTS_KEY = "RECENT_DOCUMENTS";
     private static final String ENABLE_SHOW_HIDDEN_FILES_KEY = "ENABLE_SHOW_HIDDEN_FILES";
-    private static final String DISPLAY_LANGUAGE = "DISPLAY_LANGUAGE";
 
     public static final String NEW_FILE_PATH_KEY = "NEW_FILE_PATH_KEY";
     public static final String NEW_DOC_TYPE_KEY = "NEW_DOC_TYPE_KEY";
@@ -200,11 +197,6 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings
         fabCloseAnimation = AnimationUtils.loadAnimation(this, R.anim.fab_close);
     }
 
-    @Override
-    protected void attachBaseContext(Context newBase) {
-        super.attachBaseContext(LocaleHelper.onAttach(newBase, "en"));
-    }
-
     public void createUI() {
 
         setContentView(R.layout.activity_document_browser);
@@ -940,7 +932,6 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings
         viewMode = Integer.valueOf(defaultPrefs.getString(EXPLORER_VIEW_TYPE_KEY, "" + GRID_VIEW));
         filterMode = Integer.valueOf(defaultPrefs.getString(FILTER_MODE_KEY, "-1"));
         showHiddenFiles = defaultPrefs.getBoolean(ENABLE_SHOW_HIDDEN_FILES_KEY, false);
-        displayLanguage = defaultPrefs.getString(DISPLAY_LANGUAGE, "en");
 
         Intent i = this.getIntent();
         if (i.hasExtra(CURRENT_DIRECTORY_KEY)) {
@@ -962,8 +953,6 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings
             viewMode = i.getIntExtra(EXPLORER_VIEW_TYPE_KEY, GRID_VIEW);
             Log.d(LOGTAG, EXPLORER_VIEW_TYPE_KEY);
         }
-
-        LocaleHelper.setLocale(this, displayLanguage);
     }
 
 
diff --git a/android/app/src/main/res/values-es/strings.xml b/android/app/src/main/res/values-es/strings.xml
index 65d991201..97ec41002 100644
--- a/android/app/src/main/res/values-es/strings.xml
+++ b/android/app/src/main/res/values-es/strings.xml
@@ -25,8 +25,6 @@
     <string name="pref_sort_title">Orden de Archivos</string>
     <string name="pref_filter_title">Filtro de Archivos Predeterminado</string>
     <string name="pref_filter_summary">Establezca quçe filstro de archivo debe usarse de manera predeterminada.</string>
-    <string name="display_language">Idioma de visualización</string>
-    <string name="display_language_summary">Establecer el idioma de visualización predeterminado</string>
     <string name="pref_show_debug_info">Mostrar información de depuración</string>
     <string name="pref_show_debug_info_summary">Habilite para mostrar información de depuración en el visor de documentos</string>
 
diff --git a/android/app/src/main/res/values-pt-rBR/strings.xml b/android/app/src/main/res/values-pt-rBR/strings.xml
index d0add44cc..2f2635506 100644
--- a/android/app/src/main/res/values-pt-rBR/strings.xml
+++ b/android/app/src/main/res/values-pt-rBR/strings.xml
@@ -25,8 +25,6 @@
     <string name="pref_sort_title">Ordem padrão</string>
     <string name="pref_filter_title">Filtro padrão</string>
     <string name="pref_filter_summary">Defina qual o filtro de arquivo que deve ser usado por padrão.</string>
-    <string name="display_language">Mostrar idioma</string>
-    <string name="display_language_summary">Defina qual o idioma que deve ser usado por padrão</string>
     <string name="pref_show_debug_info">Mostrar info de depuração </string>
     <string name="pref_show_debug_info_summary">Habilitar info de depuração no document viewer</string>
 
@@ -141,5 +139,5 @@
     <string name="unable_to_go_further">Não foi possível ir mais longe.</string>
     <string name="bmp_null">Bmp é nulo!</string>
     <string name="directory_not_saved">Diretório não salvo.</string>
-    <string name="title_activity_show_html">sobre</string>
+    <string name="title_activity_show_html">Sobre</string>
 </resources>
diff --git a/android/app/src/main/res/values/arrays.xml b/android/app/src/main/res/values/arrays.xml
index 7adfbd56d..6c7e94b08 100644
--- a/android/app/src/main/res/values/arrays.xml
+++ b/android/app/src/main/res/values/arrays.xml
@@ -8,10 +8,6 @@
         <item >2</item>
         <item >3</item>
     </string-array>
-    <string-array name="SupportedLanguagesValues">
-        <item >en</item>
-        <!-- FIXME we need more languages item >tr</item-->
-    </string-array>
     <string-array name="SortModeStringValues">
         <item >0</item>
         <item >1</item>
@@ -36,10 +32,6 @@
         <item>@string/filter_presentations</item>
         <item>@string/filter_drawings</item>
     </string-array>
-    <string-array name="SupportedLanguages">
-        <item>English</item>
-        <!-- FIXME we need more languages item>Turkçe</item-->
-    </string-array>
     <string-array name="SortModeNames">
         <item >@string/sort_az</item>
         <item >@string/sort_za</item>
diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml
index bf434e74d..082374b38 100644
--- a/android/app/src/main/res/values/strings.xml
+++ b/android/app/src/main/res/values/strings.xml
@@ -25,8 +25,6 @@
     <string name="pref_sort_title">File Order</string>
     <string name="pref_filter_title">Default File Filter</string>
     <string name="pref_filter_summary">Set which file filter should be used by default.</string>
-    <string name="display_language">Display Language</string>
-    <string name="display_language_summary">Set the default display language</string>
     <string name="pref_show_debug_info">Show Debug Info</string>
     <string name="pref_show_debug_info_summary">Enable to show debug information in document viewer</string>
 
diff --git a/android/app/src/main/res/xml/libreoffice_preferences.xml b/android/app/src/main/res/xml/libreoffice_preferences.xml
index 8090a98eb..5f8389d45 100644
--- a/android/app/src/main/res/xml/libreoffice_preferences.xml
+++ b/android/app/src/main/res/xml/libreoffice_preferences.xml
@@ -30,15 +30,6 @@
             android:summary="@string/pref_viewmode_summary"
             app:iconSpaceReserved="false" />
 
-        <ListPreference
-            android:title="@string/display_language"
-            android:summary="@string/display_language_summary"
-            android:entries="@array/SupportedLanguages"
-            android:entryValues="@array/SupportedLanguagesValues"
-            android:defaultValue="en"
-            android:key="DISPLAY_LANGUAGE"
-            app:iconSpaceReserved="false" />
-
         <CheckBoxPreference
             android:title="@string/pref_show_hidden_files"
             android:key="ENABLE_SHOW_HIDDEN_FILES"
commit e9cf61ad99b2415a253304fc54efe83d2f321ce1
Author:     Jan Holesovsky <kendy at collabora.com>
AuthorDate: Wed Dec 11 20:12:45 2019 +0100
Commit:     Jan Holesovsky <kendy at collabora.com>
CommitDate: Thu Dec 12 10:18:24 2019 +0100

    android: Fix build after the recent Nextcloud's android-library update.
    
    Thanks Tobi for the hint!
    
    Change-Id: I00b7ef4aaef7ced1d26d3d5636189e239897ecea
    Reviewed-on: https://gerrit.libreoffice.org/84979
    Reviewed-by: Jan Holesovsky <kendy at collabora.com>
    Tested-by: Jan Holesovsky <kendy at collabora.com>

diff --git a/android/app/build.gradle b/android/app/build.gradle
index 84f5ef91c..158ea2ddf 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -5,11 +5,13 @@ apply from: 'appSettings.gradle'
 
 android {
     compileSdkVersion 28
+
     defaultConfig {
         // applicationId, versionCode and versionName are defined in appSettings.gradle
         minSdkVersion 21
         targetSdkVersion 28
     }
+
     buildTypes {
         debug {
             resValue "string", "app_name", "${liboAppName} Debug"
@@ -40,6 +42,11 @@ android {
                     'proguard-rules.pro'
         }
     }
+
+    compileOptions {
+        sourceCompatibility JavaVersion.VERSION_1_8
+        targetCompatibility JavaVersion.VERSION_1_8
+    }
 }
 
 repositories {
@@ -54,7 +61,9 @@ dependencies {
     implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
     implementation 'androidx.recyclerview:recyclerview:1.0.0'
     implementation 'com.google.android.material:material:1.1.0-alpha04'
+
     implementation 'com.github.nextcloud:android-library:-SNAPSHOT'
+    implementation "commons-httpclient:commons-httpclient:3.1 at jar" // remove after entire switch to lib v2
 
     //before changing the version please see https://issuetracker.google.com/issues/111662669
     implementation 'androidx.preference:preference:1.1.0-alpha01'
commit fb72c1353af80ec8cd961504e22890aabafe86cf
Author:     Pedro Pinto Silva <pedro.silva at collabora.com>
AuthorDate: Wed Dec 11 14:53:09 2019 +0100
Commit:     Jan Holesovsky <kendy at collabora.com>
CommitDate: Thu Dec 12 10:18:24 2019 +0100

    android: Brazilian Portuguese translations of the shell.
    
    Change-Id: Ib71ccb7281e3e27c3184d3487b56253c61f2bc2a
    Reviewed-on: https://gerrit.libreoffice.org/84978
    Reviewed-by: Jan Holesovsky <kendy at collabora.com>
    Tested-by: Jan Holesovsky <kendy at collabora.com>

diff --git a/android/app/src/main/res/values-pt-rBR/strings.xml b/android/app/src/main/res/values-pt-rBR/strings.xml
new file mode 100644
index 000000000..d0add44cc
--- /dev/null
+++ b/android/app/src/main/res/values-pt-rBR/strings.xml
@@ -0,0 +1,145 @@
+<resources>
+    <!--string name="app_name" definition is deliberately missing here, it is filled in in build.gradle.-->
+
+    <string name="app_name_settings">Configurações</string>
+    <string name="app_version">Version: %1$s, Build ID: %2$s</string>
+    <string name="app_description">$APP_NAME é uma moderna suíte de produtividade para processamento de texto, folhas de cálculo e apresentações, de fácil utilização, e open source.</string>
+    <string name="app_vendor">Esta versão foi fornecida por $VENDOR.</string>
+
+    <string name="no_recent_items">Nenhum item recente</string>
+    <string name="no_items">Nenhum item</string>
+    <string name="temp_file_saving_disabled">Este documento é apenas de leitura, salvaguardar está desabilitado.</string>
+    <string name="file_exists_warning">Um ficheiro com o mesmo nome já existe, e será substituído.</string>
+    <string name="file_creation_failed">Falha na criação do documento</string>
+    <string name="storage_permission_required">Permissão de armazenamento é requirida</string>
+    <string name="failed_to_load_file">Falha no carregamento do documento</string>
+
+    <string name="list_view">Lista</string>
+    <string name="grid_view">Grelha</string>
+    <string name="pref_category_explorer">Configurações do gestor de arquivos</string>
+    <string name="pref_show_hidden_files">Arquivos/pastas ocultas</string>
+    <string name="pref_show_hidden_files_summary">Mostrar arquivos/pastas ocultas</string>
+    <string name="pref_sort_summary">Ordenar arquivos por: A-Z, Tamanho ou por data.</string>
+    <string name="pref_viewmode_summary">Ver arquivos em grelha ou em list.</string>
+    <string name="pref_file_explorer_title">Layout do gestor de arquivos</string>
+    <string name="pref_sort_title">Ordem padrão</string>
+    <string name="pref_filter_title">Filtro padrão</string>
+    <string name="pref_filter_summary">Defina qual o filtro de arquivo que deve ser usado por padrão.</string>
+    <string name="display_language">Mostrar idioma</string>
+    <string name="display_language_summary">Defina qual o idioma que deve ser usado por padrão</string>
+    <string name="pref_show_debug_info">Mostrar info de depuração </string>
+    <string name="pref_show_debug_info_summary">Habilitar info de depuração no document viewer</string>
+
+    <string name="about_license">Mostrar Licença</string>
+    <string name="about_notice">Mostar aviso</string>
+    <string name="about_moreinfo">Mais informação</string>
+
+    <string name="new_textdocument">Novo documento de texto</string>
+    <string name="new_presentation">Nova apresentação </string>
+    <string name="new_spreadsheet">Nova folha de cálculo</string>
+    <string name="new_drawing">Novo desenho</string>
+    <string name="default_document_name">Sem nome</string>
+
+    <string name="filter">Filtrado por</string>
+    <string name="sort">Ordenado por</string>
+    <string name="sort_smallest">Mais pequeno primeiro</string>
+    <string name="sort_largest">Maior em primeiro lugar</string>
+    <string name="sort_az">A-Z</string>
+    <string name="sort_za">Z-A</string>
+    <string name="sort_oldest">Mais antigo em primeiro</string>
+    <string name="sort_newest">Recentes em primeiro</string>
+    <string name="file_icon_desc">Ícone de arquivo</string>
+    <string name="title_recents">Arquivos recentes</string>
+    <string name="title_browser">Todos os arquivos</string>
+    <!-- Pref keys as resources ; Not currently used -->
+
+    <string name="action_about">Sobre</string>
+    <string name="action_settings">Configurações</string>
+    <string name="open">Abir</string>
+    <string name="share">Partilhar</string>
+    <string name="share_via">Partilhar via</string>
+
+    <!-- Document browser filters -->
+    <string name="filter_everything">Tudo</string>
+    <string name="filter_documents">Documentos</string>
+    <string name="filter_spreadsheets">Folhas de cálculo</string>
+    <string name="filter_presentations">Apresentações</string>
+    <string name="filter_drawings">Desehnhos</string>
+
+    <!-- Document provider names -->
+    <string name="document_locations">Locais de arquivos</string>
+    <string name="close_document_locations">Fechar Locais de arquivos</string>
+    <string name="local_documents">Diretorias de documentos</string>
+    <string name="local_file_system">Sistema local de arquivos</string>
+    <string name="external_sd_file_system">SD externo</string>
+    <string name="otg_file_system">Dispositivo OTG (experimental)</string>
+    <string name="remote_server">Servidor remoto</string>
+    <string name="usb_connected_configure">USB conetado, configure o seu dispositivo.</string>
+
+    <string name="owncloud_wrong_connection">Falha na conexão com o seu servidor na nuvem. Verifique as suas configurações.</string>
+    <string name="owncloud_unauthorized">Falha na autenticação com o seu servidor na nuvem. Verifique as suas configurações.</string>
+    <string name="owncloud_unspecified_error">Erro ao conetar com o seu servidor na nuvem. Verifique as suas configurações.</string>
+
+    <string name="ext_document_provider_error">Arquivo raiz inválido. Verifique a configuração do seu cartão SD.</string>
+    <string name="otg_missing_error">Arquivo raiz inválido. Verifique seu dispositivo OTG e/ou configuração.</string>
+
+    <!-- Edit action names -->
+
+    <!-- Feedback messages -->
+
+    <!-- Document provider settings -->
+    <string name="storage_provider_settings">Configurações do provedor de armazenamento</string>
+    <string name="owncloud_settings">Configurações do servidor na nuvem</string>
+    <string name="physical_storage_settings">Configurações de armazenamento físico</string>
+    <string name="external_sd_path">Caminho SD externo</string>
+    <string name="otg_device_path">Caminho do dispositivo OTG</string>
+    <string name="otg_warning">Recurso experimental: use somente se o dispositivo OTG for gravável.</string>
+    <string name="server_url">URL de servidor</string>
+    <string name="server_url_and_port">URL e porta do servidor na nuvem.</string>
+    <string name="user_name">Usuário</string>
+    <string name="password">Senha</string>
+
+    <!-- Directory browser strings -->
+    <string name="up_description">Ir para um diretório acima</string>
+    <string name="confirm_label">Confirmar</string>
+    <string name="cancel_label">Cancelar</string>
+    <string name="search_label">Ir</string>
+    <string name="directory_browser_label">Escolha Diretório</string>
+    <string name="bad_directory">Caminho de diretório inválido</string>
+    <string name="current_dir">Diretório atual: %1$s</string>
+
+    <!-- Permission rationale alert dialog strings -->
+    <string name="title_permission_required">Permissão necessária</string>
+    <string name="reason_required_to_read_documents">É necessária permissão de armazenamento para ler seus documentos.</string>
+    <string name="positive_ok">OK</string>
+    <string name="negative_im_sure">Tenho a certeza</string>
+    <string name="negative_cancel">Cancelar</string>
+
+    <!-- Save Alert dialog strings -->
+    <string name="action_cancel">Cancelar</string>
+
+    <!-- Create New Document Dialog Strings -->
+    <string name="create_new_document_title">Criar novo documento</string>
+    <string name="enter_filename">Introduza o nome do arquivo:</string>
+    <string name="action_create">Criar</string>
+    <string name="action_overwrite">Substituir</string>
+
+    <!-- Loading SlideShow Dialog Strings -->
+    <string name="loading">Carregando...</string>
+
+    <!-- Presentation Mode Strings -->
+
+    <!-- Calc Header Menu Strings -->
+
+    <!-- Password dialog strings -->
+
+    <!-- Insert Image Strings -->
+
+    <!-- Clipboard Actions -->
+
+    <!-- UNO cmd controller Strings -->
+    <string name="unable_to_go_further">Não foi possível ir mais longe.</string>
+    <string name="bmp_null">Bmp é nulo!</string>
+    <string name="directory_not_saved">Diretório não salvo.</string>
+    <string name="title_activity_show_html">sobre</string>
+</resources>
diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml
index 8a2aa4d7b..bf434e74d 100644
--- a/android/app/src/main/res/values/strings.xml
+++ b/android/app/src/main/res/values/strings.xml
@@ -16,12 +16,12 @@
 
     <string name="list_view">List</string>
     <string name="grid_view">Grid</string>
-    <string name="pref_category_explorer">File Explorer Settings</string>
+    <string name="pref_category_explorer">File Manager Settings</string>
     <string name="pref_show_hidden_files">Hidden Files/Folders</string>
     <string name="pref_show_hidden_files_summary">Enable to show hidden files/folders</string>
     <string name="pref_sort_summary">Select how to order files: A-Z, by size or by date.</string>
     <string name="pref_viewmode_summary">View files as a grid or in a list.</string>
-    <string name="pref_file_explorer_title">File explorer layout</string>
+    <string name="pref_file_explorer_title">File manager layout</string>
     <string name="pref_sort_title">File Order</string>
     <string name="pref_filter_title">Default File Filter</string>
     <string name="pref_filter_summary">Set which file filter should be used by default.</string>
@@ -48,7 +48,7 @@
     <string name="sort_za">Z-A</string>
     <string name="sort_oldest">Oldest first</string>
     <string name="sort_newest">Newest first</string>
-    <string name="file_icon_desc">fileicon</string>
+    <string name="file_icon_desc">File icon</string>
     <string name="title_recents">Recent files</string>
     <string name="title_browser">All files</string>
     <!-- Pref keys as resources ; Not currently used -->
@@ -111,9 +111,9 @@
     <!-- Permission rationale alert dialog strings -->
     <string name="title_permission_required">Permission Required</string>
     <string name="reason_required_to_read_documents">Storage permission is required for reading your documents.</string>
-    <string name="positive_ok">OKAY</string>
-    <string name="negative_im_sure">I\'M SURE</string>
-    <string name="negative_cancel">CANCEL</string>
+    <string name="positive_ok">OK</string>
+    <string name="negative_im_sure">I\'m sure</string>
+    <string name="negative_cancel">Cancel</string>
 
     <!-- Save Alert dialog strings -->
     <string name="action_cancel">Cancel</string>
commit c3a8d21cd382014ce714adef82007d5acad214a2
Author:     Eloy Crespo <eloy.crespo at collabora.com>
AuthorDate: Wed Dec 11 14:43:10 2019 +0100
Commit:     Jan Holesovsky <kendy at collabora.com>
CommitDate: Thu Dec 12 10:18:24 2019 +0100

    android: Spanish translations of the shell.
    
    Change-Id: I5c0d0034085f6b03f7541f259048ab0774f92081
    Reviewed-on: https://gerrit.libreoffice.org/84977
    Reviewed-by: Jan Holesovsky <kendy at collabora.com>
    Tested-by: Jan Holesovsky <kendy at collabora.com>

diff --git a/android/app/src/main/res/values-es/strings.xml b/android/app/src/main/res/values-es/strings.xml
new file mode 100644
index 000000000..65d991201
--- /dev/null
+++ b/android/app/src/main/res/values-es/strings.xml
@@ -0,0 +1,145 @@
+<resources>
+    <!--string name="app_name" aquí falta la definición deliberadamente, se completa en build.gradle.-->
+
+    <string name="app_name_settings">Ajustes</string>
+    <string name="app_version">Version: %1$s, Build ID: %2$s</string>
+    <string name="app_description">$APP_NAME es un conjunto de productividad de código abierto moderno y fácil de usar, para procesamiento de textos, hojas de cálculo, presentaciones y más.</string>
+    <string name="app_vendor">Esta versión fue suministrada por $VENDOR.</string>
+
+    <string name="no_recent_items">No hay elementos recientes</string>
+    <string name="no_items">No hay elementos</string>
+    <string name="temp_file_saving_disabled">Este archivo es de solo lectura, el guardado está deshabilitado.</string>
+    <string name="file_exists_warning">Ya existe un archivo con este nombre y se sobreescribirá</string>
+    <string name="file_creation_failed">La creación del archivo falló</string>
+    <string name="storage_permission_required">Se require permiso de almacenamiento</string>
+    <string name="failed_to_load_file">Error al determinar el archivo a cargar</string>
+
+    <string name="list_view">Lista</string>
+    <string name="grid_view">Cuadrícula</string>
+    <string name="pref_category_explorer">Configuración del explorador de archivos</string>
+    <string name="pref_show_hidden_files">Archivos/Carpetas Ocultas</string>
+    <string name="pref_show_hidden_files_summary">Habilitar para mostrar archivos/carpetas ocultas</string>
+    <string name="pref_sort_summary">Seleccione cómo ordenar los archivos: A-Z, por tamaño o por fecha.</string>
+    <string name="pref_viewmode_summary">Ver archivos como una cuadrícula o en una lista.</string>
+    <string name="pref_file_explorer_title">Diseño del explorador de archivos</string>
+    <string name="pref_sort_title">Orden de Archivos</string>
+    <string name="pref_filter_title">Filtro de Archivos Predeterminado</string>
+    <string name="pref_filter_summary">Establezca quçe filstro de archivo debe usarse de manera predeterminada.</string>
+    <string name="display_language">Idioma de visualización</string>
+    <string name="display_language_summary">Establecer el idioma de visualización predeterminado</string>
+    <string name="pref_show_debug_info">Mostrar información de depuración</string>
+    <string name="pref_show_debug_info_summary">Habilite para mostrar información de depuración en el visor de documentos</string>
+
+    <string name="about_license">Mostrar Licencia</string>
+    <string name="about_notice">Mostrar Aviso</string>
+    <string name="about_moreinfo">Más Información</string>
+
+    <string name="new_textdocument">Nuevo Documento de Texto</string>
+    <string name="new_presentation">Nueva Presentación</string>
+    <string name="new_spreadsheet">Nueva Hoja de Cálculo</string>
+    <string name="new_drawing">Nuevo Dibujo</string>
+    <string name="default_document_name">sin título</string>
+
+    <string name="filter">Filtrar por</string>
+    <string name="sort">Ordenar por</string>
+    <string name="sort_smallest">Más pequeño primero</string>
+    <string name="sort_largest">Más grande primero</string>
+    <string name="sort_az">A-Z</string>
+    <string name="sort_za">Z-A</string>
+    <string name="sort_oldest">Más antiguo primero</string>
+    <string name="sort_newest">Más reciente primero</string>
+    <string name="file_icon_desc">icono de archivo</string>
+    <string name="title_recents">Archivos recientes</string>
+    <string name="title_browser">Todos los archivos</string>
+    <!-- Pref keys as resources ; Not currently used -->
+
+    <string name="action_about">Acerca de</string>
+    <string name="action_settings">Ajustes</string>
+    <string name="open">Abrir</string>
+    <string name="share">Compartir</string>
+    <string name="share_via">Compartir vía</string>
+
+    <!-- Document browser filters -->
+    <string name="filter_everything">Todo</string>
+    <string name="filter_documents">Documentos</string>
+    <string name="filter_spreadsheets">Hojas de cálculo</string>
+    <string name="filter_presentations">Presentaciones</string>
+    <string name="filter_drawings">Dibujos</string>
+
+    <!-- Document provider names -->
+    <string name="document_locations">Ubicaciones de documentos</string>
+    <string name="close_document_locations">Cerrar ubicaciones de documentos</string>
+    <string name="local_documents">Directorio de documentos</string>
+    <string name="local_file_system">Systema de Arhivo local</string>
+    <string name="external_sd_file_system">SD Externa</string>
+    <string name="otg_file_system">Dispositivo OTB (experimental)</string>
+    <string name="remote_server">Servidor remoto</string>
+    <string name="usb_connected_configure">USB conectado, configure su dispositivo</string>
+
+    <string name="owncloud_wrong_connection">Imposible conectar con el servidor en la nube. Revise su configuración.</string>
+    <string name="owncloud_unauthorized">Imposible iniciar sesión en el servidor en la nube. Revise su configuración.</string>
+    <string name="owncloud_unspecified_error">Error no especificado al conectarse al servidor en la nube. Revise su configuración y/o intente más tarde.</string>
+
+    <string name="ext_document_provider_error">Archivo raíz no válido. Verifique la configuración de su tarjeta sd.</string>
+    <string name="otg_missing_error">Archivo raíz no válido. Verifique su dispositivo OTG y/o la configuración.</string>
+
+    <!-- Edit action names -->
+
+    <!-- Feedback messages -->
+
+    <!-- Document provider settings -->
+    <string name="storage_provider_settings">Configuración del proveedor de almacenamiento</string>
+    <string name="owncloud_settings">Configuración del servidor en la nube</string>
+    <string name="physical_storage_settings">Configuraciones de almacenamiento físico</string>
+    <string name="external_sd_path">Ruta SD externa</string>
+    <string name="otg_device_path">Ruta del dispositivo OTG</string>
+    <string name="otg_warning">Característica experimental: Úselo solo si el dispositivo OTG es grabable</string>
+    <string name="server_url">URL del servidor</string>
+    <string name="server_url_and_port">URL y puerto del servidor en la nube</string>
+    <string name="user_name">Nombre de usuario</string>
+    <string name="password">Contraseña</string>
+
+    <!-- Directory browser strings -->
+    <string name="up_description">Al directorio principal</string>
+    <string name="confirm_label">Confirmar</string>
+    <string name="cancel_label">Cancelar</string>
+    <string name="search_label">Ir</string>
+    <string name="directory_browser_label">Elegir Directorio</string>
+    <string name="bad_directory">Ruta de directorio inválida</string>
+    <string name="current_dir">Directorio Actual: %1$s</string>
+
+    <!-- Permission rationale alert dialog strings -->
+    <string name="title_permission_required">Permiso Requerido</string>
+    <string name="reason_required_to_read_documents">Se requiere permiso de almacenamiento para leer sus documentos.</string>
+    <string name="positive_ok">OK</string>
+    <string name="negative_im_sure">Estoy seguro</string>
+    <string name="negative_cancel">Cancelar</string>
+
+    <!-- Save Alert dialog strings -->
+    <string name="action_cancel">Cancelar</string>
+
+    <!-- Create New Document Dialog Strings -->
+    <string name="create_new_document_title">Crear Nuevo Documento</string>
+    <string name="enter_filename">Por favor ingrese el nombre del archivo:</string>
+    <string name="action_create">Crear</string>
+    <string name="action_overwrite">Sobreescribir</string>
+
+    <!-- Loading SlideShow Dialog Strings -->
+    <string name="loading">Cargando...</string>
+
+    <!-- Presentation Mode Strings -->
+
+    <!-- Calc Header Menu Strings -->
+
+    <!-- Password dialog strings -->
+
+    <!-- Insert Image Strings -->
+
+    <!-- Clipboard Actions -->
+
+    <!-- UNO cmd controller Strings -->
+    <string name="unable_to_go_further">Imposible ir más allá.</string>
+    <string name="bmp_null">Bmp es nulo!</string>
+    <string name="directory_not_saved">Directorio no guardado.</string>
+    <string name="title_activity_show_html">Sobre</string>
+</resources>
commit e590fe688513247a55b8c47619624a7b84853f5c
Author:     Michael Meeks <michael.meeks at collabora.com>
AuthorDate: Wed Dec 11 11:19:28 2019 +0000
Commit:     Jan Holesovsky <kendy at collabora.com>
CommitDate: Thu Dec 12 10:18:24 2019 +0100

    android: encode SCHEME_FILE paths as URIs not paths.
    
    Fixes encoding problems particularly with eg.
    SCHEME_FILE: getPath(): /storage/emulated/0/Android/media/com.nextcloud.client/nextcloud/user at demoserver.com%2Fnextcloud/test.docx
    
    Change-Id: I0f2a84ff29fffd87ef059727bfb530bb54ab2ab9
    Reviewed-on: https://gerrit.libreoffice.org/84936
    Reviewed-by: Michael Meeks <michael.meeks at collabora.com>
    Tested-by: Michael Meeks <michael.meeks at collabora.com>

diff --git a/android/lib/src/main/java/org/libreoffice/androidlib/LOActivity.java b/android/lib/src/main/java/org/libreoffice/androidlib/LOActivity.java
index a8a9b80ad..bae078ab9 100644
--- a/android/lib/src/main/java/org/libreoffice/androidlib/LOActivity.java
+++ b/android/lib/src/main/java/org/libreoffice/androidlib/LOActivity.java
@@ -248,7 +248,7 @@ public class LOActivity extends AppCompatActivity {
                 }
             } else if (getIntent().getData().getScheme().equals(ContentResolver.SCHEME_FILE)) {
                 isDocEditable = true;
-                urlToLoad = getIntent().getData().getPath();
+                urlToLoad = getIntent().getData().toString();
                 Log.d(TAG, "SCHEME_FILE: getPath(): " + getIntent().getData().getPath());
                 // Gather data to rebuild IFile object later
                 providerId = getIntent().getIntExtra(
commit bb05da508c57968e65f735b34dfca96c90fbde61
Author:     Andras Timar <andras.timar at collabora.com>
AuthorDate: Wed Dec 11 11:24:03 2019 +0000
Commit:     Jan Holesovsky <kendy at collabora.com>
CommitDate: Thu Dec 12 10:18:24 2019 +0100

    android: add pot file for localization

diff --git a/android/app/src/main/locale/template.pot b/android/app/src/main/locale/template.pot
new file mode 100644
index 000000000..336305881
--- /dev/null
+++ b/android/app/src/main/locale/template.pot
@@ -0,0 +1,444 @@
+# Translations template for PROJECT.
+# Copyright (C) 2019 ORGANIZATION
+# This file is distributed under the same license as the PROJECT project.
+# FIRST AUTHOR <EMAIL at ADDRESS>, 2019.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PROJECT VERSION\n"
+"Report-Msgid-Bugs-To: EMAIL at ADDRESS\n"
+"POT-Creation-Date: 2019-12-11 11:07+0000\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.7.0\n"
+
+#. string name="app_name" definition is deliberately missing here, it is filled
+#. in in build.gradle.
+msgctxt "app_name_settings"
+msgid "Settings"
+msgstr ""
+
+#, c-format
+msgctxt "app_version"
+msgid "Version: %1$s, Build ID: %2$s"
+msgstr ""
+
+msgctxt "app_description"
+msgid ""
+"$APP_NAME is a modern, easy-to-use, open source productivity suite for "
+"word processing, spreadsheets, presentations and more."
+msgstr ""
+
+msgctxt "app_vendor"
+msgid "This release was supplied by $VENDOR."
+msgstr ""
+
+msgctxt "no_recent_items"
+msgid "No recent items"
+msgstr ""
+
+msgctxt "no_items"
+msgid "No items"
+msgstr ""
+
+msgctxt "temp_file_saving_disabled"
+msgid "This file is read-only, saving is disabled."
+msgstr ""
+
+msgctxt "file_exists_warning"
+msgid "A file with this name already exists, and will be overwritten."
+msgstr ""
+
+msgctxt "file_creation_failed"
+msgid "File creation failed"
+msgstr ""
+
+msgctxt "storage_permission_required"
+msgid "Storage permission is required"
+msgstr ""
+
+msgctxt "failed_to_load_file"
+msgid "Failed to determine the file to load"
+msgstr ""
+
+msgctxt "list_view"
+msgid "List"
+msgstr ""
+
+msgctxt "grid_view"
+msgid "Grid"
+msgstr ""
+
+msgctxt "pref_category_explorer"
+msgid "File Explorer Settings"
+msgstr ""
+
+msgctxt "pref_show_hidden_files"
+msgid "Hidden Files/Folders"
+msgstr ""
+
+msgctxt "pref_show_hidden_files_summary"
+msgid "Enable to show hidden files/folders"
+msgstr ""
+
+msgctxt "pref_sort_summary"

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list