Przeglądaj źródła

Merge branch 'develop' into contact_settings

Conflicts:
	res/values/strings.xml
masensio 11 lat temu
rodzic
commit
066cd5aab3
100 zmienionych plików z 2654 dodań i 591 usunięć
  1. 1 0
      .gitignore
  2. 5 2
      AndroidManifest.xml
  3. 28 14
      SETUP.md
  4. 2 2
      oc_jb_workaround/.classpath
  5. 2 2
      oc_jb_workaround/AndroidManifest.xml
  6. 23 5
      res/layout-land/account_setup.xml
  7. 37 10
      res/layout/account_setup.xml
  8. 26 0
      res/layout/loading_dialog.xml
  9. 33 0
      res/layout/sso_dialog.xml
  10. 1 0
      res/values-ar/strings.xml
  11. 1 0
      res/values-bg-rBG/strings.xml
  12. 2 0
      res/values-bn-rBD/strings.xml
  13. 8 6
      res/values-ca/strings.xml
  14. 58 32
      res/values-cs-rCZ/strings.xml
  15. 0 1
      res/values-cy-rGB/strings.xml
  16. 73 1
      res/values-da/strings.xml
  17. 4 0
      res/values-de-rAT/strings.xml
  18. 292 0
      res/values-de-rCH/strings.xml
  19. 10 8
      res/values-de-rDE/strings.xml
  20. 29 1
      res/values-de/strings.xml
  21. 31 1
      res/values-el/strings.xml
  22. 3 1
      res/values-eo/strings.xml
  23. 7 5
      res/values-es-rAR/strings.xml
  24. 8 6
      res/values-es/strings.xml
  25. 28 1
      res/values-et-rEE/strings.xml
  26. 18 2
      res/values-eu/strings.xml
  27. 96 2
      res/values-fa/strings.xml
  28. 6 1
      res/values-fi-rFI/strings.xml
  29. 3 6
      res/values-fr/strings.xml
  30. 8 6
      res/values-gl/strings.xml
  31. 3 1
      res/values-he/strings.xml
  32. 1 0
      res/values-hi/strings.xml
  33. 2 0
      res/values-hr/strings.xml
  34. 28 1
      res/values-hu-rHU/strings.xml
  35. 1 0
      res/values-ia/strings.xml
  36. 1 0
      res/values-id/strings.xml
  37. 1 0
      res/values-is/strings.xml
  38. 7 5
      res/values-it/strings.xml
  39. 6 4
      res/values-ja-rJP/strings.xml
  40. 1 1
      res/values-ka-rGE/strings.xml
  41. 1 1
      res/values-ko/strings.xml
  42. 7 0
      res/values-lb/strings.xml
  43. 4 0
      res/values-lt-rLT/strings.xml
  44. 1 1
      res/values-lv/strings.xml
  45. 1 0
      res/values-mk/strings.xml
  46. 5 0
      res/values-ml-rIN/strings.xml
  47. 1 0
      res/values-ms-rMY/strings.xml
  48. 3 0
      res/values-nb-rNO/strings.xml
  49. 8 6
      res/values-nl/strings.xml
  50. 1 0
      res/values-nn-rNO/strings.xml
  51. 1 0
      res/values-oc/strings.xml
  52. 6 4
      res/values-pl/strings.xml
  53. 7 5
      res/values-pt-rBR/strings.xml
  54. 18 3
      res/values-pt-rPT/strings.xml
  55. 3 1
      res/values-ro/strings.xml
  56. 71 1
      res/values-ru/strings.xml
  57. 3 1
      res/values-si-rLK/strings.xml
  58. 27 1
      res/values-sk-rSK/strings.xml
  59. 3 1
      res/values-sl/strings.xml
  60. 1 0
      res/values-sr-rSP/strings.xml
  61. 1 0
      res/values-sr/strings.xml
  62. 14 12
      res/values-sv/strings.xml
  63. 3 1
      res/values-ta-rLK/strings.xml
  64. 3 1
      res/values-th-rTH/strings.xml
  65. 18 1
      res/values-tr/strings.xml
  66. 1 0
      res/values-ug/strings.xml
  67. 3 1
      res/values-uk/strings.xml
  68. 71 1
      res/values-vi/strings.xml
  69. 11 1
      res/values-zh-rBG/strings.xml
  70. 14 1
      res/values-zh-rCN/strings.xml
  71. 134 10
      res/values-zh-rTW/strings.xml
  72. 0 5
      res/values/oauth2_configuration.xml
  73. 10 0
      res/values/setup.xml
  74. 9 1
      res/values/strings.xml
  75. 7 1
      res/values/styles.xml
  76. 5 4
      setup_env.bat
  77. 7 1
      src/com/owncloud/android/authentication/AccountAuthenticator.java
  78. 85 0
      src/com/owncloud/android/authentication/AccountAuthenticatorActivity.java
  79. 48 2
      src/com/owncloud/android/authentication/AccountUtils.java
  80. 461 136
      src/com/owncloud/android/authentication/AuthenticatorActivity.java
  81. 175 0
      src/com/owncloud/android/authentication/SsoWebViewClient.java
  82. 3 0
      src/com/owncloud/android/datamodel/DataStorageManager.java
  83. 194 90
      src/com/owncloud/android/datamodel/FileDataStorageManager.java
  84. 17 8
      src/com/owncloud/android/files/InstantUploadBroadcastReceiver.java
  85. 5 1
      src/com/owncloud/android/files/services/FileDownloader.java
  86. 130 103
      src/com/owncloud/android/files/services/FileUploader.java
  87. 24 10
      src/com/owncloud/android/network/OwnCloudClientUtils.java
  88. 3 0
      src/com/owncloud/android/operations/ChunkedUploadFileOperation.java
  89. 32 9
      src/com/owncloud/android/operations/CreateFolderOperation.java
  90. 9 8
      src/com/owncloud/android/operations/DownloadFileOperation.java
  91. 5 4
      src/com/owncloud/android/operations/ExistenceCheckOperation.java
  92. 2 2
      src/com/owncloud/android/operations/OAuth2GetAccessToken.java
  93. 1 1
      src/com/owncloud/android/operations/OwnCloudServerCheckOperation.java
  94. 21 10
      src/com/owncloud/android/operations/RemoteOperation.java
  95. 42 4
      src/com/owncloud/android/operations/RemoteOperationResult.java
  96. 1 1
      src/com/owncloud/android/operations/RemoveFileOperation.java
  97. 1 1
      src/com/owncloud/android/operations/RenameFileOperation.java
  98. 1 1
      src/com/owncloud/android/operations/SynchronizeFileOperation.java
  99. 16 6
      src/com/owncloud/android/operations/SynchronizeFolderOperation.java
  100. 1 1
      src/com/owncloud/android/operations/UpdateOCVersionOperation.java

+ 1 - 0
.gitignore

@@ -11,6 +11,7 @@
 # generated files
 bin/
 gen/
+target/
 
 # Local configuration file (sdk path, etc)
 local.properties

+ 5 - 2
AndroidManifest.xml

@@ -18,8 +18,8 @@
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
  -->
 <manifest package="com.owncloud.android"
-    android:versionCode="104001"
-    android:versionName="1.4.1" xmlns:android="http://schemas.android.com/apk/res/android">
+    android:versionCode="104005"
+    android:versionName="1.4.5" xmlns:android="http://schemas.android.com/apk/res/android">
 
     <uses-permission android:name="android.permission.GET_ACCOUNTS" />
     <uses-permission android:name="android.permission.USE_CREDENTIALS" />
@@ -163,7 +163,10 @@
         
         <receiver android:name=".files.InstantUploadBroadcastReceiver">
             <intent-filter>
+                <!-- unofficially supported by many Android phones but not by HTC devices: -->
                 <action android:name="com.android.camera.NEW_PICTURE" />
+                <!-- officially supported since Android 4.0 (SDK 14, works even for HTC devices): --> 
+                <action android:name="android.hardware.action.NEW_PICTURE" />
                 <data android:mimeType="image/*" />
             </intent-filter>
             <intent-filter>

+ 28 - 14
SETUP.md

@@ -1,22 +1,36 @@
   
-  If you want to start development of ownCloud android client you have two way to do so:
+  If you want to start development of ownCloud first download required files, then compile using console or Eclipse, finally create pull request:
+  
+  1. Fork and download android/develop repository:
+  
+  -  Navigate to https://github.com/owncloud/android, click fork.
+  -  Clone your new repo: "git clone git@github.com:YOURGITHUBNAME/android.git"
+  -  Checkout remote develop branch: "git checkout -b develop remotes/origin/develop"
 
-  1. Building with console:
+  2. Building with console:
 
   -  Use setup_env.sh or setup_env.bat
-  -  NOTE: You must have git, ant/bin, android/tools in your enviroment path
+  -  NOTE: You must have mvn, git, ant/bin, android/tools, and 'platforms-tools' in your enviroment path
+  -  Now you can create APK using "mvn package"
   
-  2. Building with eclipse:
-
-  -  Run ant clean debug
-  -  Open Eclipse and import *actionbarsherlock/library* project to your workspace
-  -  NOTE: You must have 'tools' and 'platforms-tools' in your path in order to run setup_env.sh 
-
-	 After those actions you should be good to go.
-
-	 HAVE FUN!
-
-
+  3. Building with eclipse:
+
+  -  Open Eclipse and create new "Android Project from Existing Code". As root choose *actionbarsherlock/library*
+  -  Increase Android API level until project compiles. 14 should work. bin/library.jar needs to be created!
+  -  Import OwnCloud Android project.
+  -  Increase Android API level to 17.
+  -  Clean all projects.
+  -  After those actions you should be good to go. HAVE FUN!
+  -  TODO: How to build for older devices?
+  
+  4. Create pull request:
+  
+  -  Commit your changes locally: "git commit -a"
+  -  Push your changes to your Github repo: "git push"
+  -  Browse to https://github.com/YOURGITHUBNAME/android/pulls and issue pull request
+  -  Click "Edit" and set "base:develop"
+  -  Again, click "Edit" and set "compare:develop"
+  -  Enter description and send pull request.
 
 
 

+ 2 - 2
oc_jb_workaround/.classpath

@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="src" path="gen"/>
 	<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
 	<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
 	<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="src" path="gen"/>
 	<classpathentry kind="output" path="bin/classes"/>
 </classpath>

+ 2 - 2
oc_jb_workaround/AndroidManifest.xml

@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.owncloud.android.workaround.accounts"
-    android:versionCode="0100003"
-    android:versionName="1.0.3" >
+    android:versionCode="0100007"
+    android:versionName="1.0.7" >
 
     <uses-sdk
         android:minSdkVersion="16"

+ 23 - 5
res/layout-land/account_setup.xml

@@ -43,6 +43,7 @@
 		    android:layout_width="0dp"
 		    android:layout_height="match_parent"
 		    android:layout_weight="1"
+		    android:id="@+id/scroll"
 		    android:fillViewport="true"
 		    android:orientation="vertical" >
 						
@@ -50,19 +51,38 @@
 			    android:id="@+id/LinearLayout1"
 			    android:layout_width="match_parent"
 			    android:layout_height="wrap_content"
-			    android:focusable="true"
 			    android:gravity="center"
 			    android:orientation="vertical"
 			    android:padding="8dp" >
-		
+			    
+				<Button
+				    android:id="@+id/centeredRefreshButton"
+				    android:layout_width="wrap_content"
+				    android:layout_height="wrap_content"
+				    android:layout_gravity="center_horizontal"
+					android:layout_marginBottom="10dp"
+            		android:onClick="onRefreshClick"
+				    android:text="@string/auth_check_server"
+				    android:visibility="gone" />
+				<TextView
+				    android:id="@+id/auth_message"
+				    android:layout_width="wrap_content"
+				    android:layout_height="wrap_content"
+				    android:layout_gravity="fill_horizontal"
+				    android:text="@string/auth_expired_basic_auth_toast" 
+				    android:visibility="gone"
+				    android:layout_marginBottom="10dp"/>
 			    <FrameLayout 
+	        		android:id="@+id/hostUrlFrame"
 					android:layout_width="match_parent"
 					android:layout_height="wrap_content"
+					android:layout_marginBottom="10dp"
 			        >
 					<EditText
 						android:id="@+id/hostUrlInput"
 						android:layout_width="match_parent"
 						android:layout_height="wrap_content"
+						android:layout_gravity="bottom"
 						android:hint="@string/auth_host_url"
 						android:inputType="textUri"
 						android:drawablePadding="5dp"
@@ -71,7 +91,7 @@
 						<requestFocus />
 					</EditText>
 					<ImageButton
-					    android:id="@+id/refeshButton"
+					    android:id="@+id/embeddedRefreshButton"
 					    android:layout_width="48dp"
 					    android:layout_height="48dp"
 					    android:layout_gravity="center_vertical|right"
@@ -103,7 +123,6 @@
 					android:onClick="onCheckClick"
 					android:text="@string/oauth_check_onoff"
 					android:textAppearance="?android:attr/textAppearanceSmall"
-					android:visibility="gone"
 					/>
 		
 				<EditText
@@ -116,7 +135,6 @@
 					android:singleLine="true"
 					android:inputType="textUri"
 					android:visibility="gone" >
-					<requestFocus />
 				</EditText>            
 				
 				<EditText

+ 37 - 10
res/layout/account_setup.xml

@@ -22,12 +22,13 @@
     android:layout_height="match_parent"
     android:layout_gravity="center"
     android:fillViewport="true"
-    android:orientation="vertical" >
+    android:orientation="vertical" 
+    android:id="@+id/scroll"
+    >
 
     <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:focusable="true"
         android:gravity="center"
         android:orientation="vertical"
         android:padding="8dp" >
@@ -40,14 +41,36 @@
             android:layout_marginTop="10dp"
             android:src="@drawable/logo" />
 
+        <Button
+            android:id="@+id/centeredRefreshButton"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_horizontal"
+            android:layout_marginBottom="10dp"
+            android:onClick="onRefreshClick"
+            android:text="@string/auth_check_server"
+            android:visibility="gone" />
+        
+        <TextView
+            android:id="@+id/auth_message"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="fill_horizontal"
+            android:text="@string/auth_expired_basic_auth_toast"
+            android:visibility="gone"
+            android:layout_marginBottom="10dp" />
+
 	    <FrameLayout 
+	        android:id="@+id/hostUrlFrame"
 			android:layout_width="match_parent"
 			android:layout_height="wrap_content"
+            android:layout_marginBottom="10dp"
 	        >
 			<EditText
 				android:id="@+id/hostUrlInput"
 				android:layout_width="match_parent"
 				android:layout_height="wrap_content"
+				android:layout_gravity="bottom"
 				android:hint="@string/auth_host_url"
 				android:inputType="textUri"
 				android:drawablePadding="5dp"
@@ -56,7 +79,7 @@
 				<requestFocus />
 			</EditText>
 			<ImageButton
-			    android:id="@+id/refeshButton"
+			    android:id="@+id/embeddedRefreshButton"
 			    android:layout_width="48dp"
 			    android:layout_height="48dp"
 			    android:layout_gravity="center_vertical|right"
@@ -88,16 +111,17 @@
             android:onClick="onCheckClick"
             android:text="@string/oauth_check_onoff"
             android:textAppearance="?android:attr/textAppearanceSmall"
-            android:visibility="gone" />
+            />
 
         <EditText
             android:id="@+id/oAuthEntryPoint_1"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:ems="10"
-            android:inputType="textUri"
-            android:singleLine="true"
+			android:enabled="false"
             android:text="@string/oauth2_url_endpoint_auth"
+            android:singleLine="true"
+            android:inputType="textUri"
             android:visibility="gone" >
         </EditText>
 
@@ -106,9 +130,10 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:ems="10"
-            android:inputType="textUri"
-            android:singleLine="true"
+			android:enabled="false"
             android:text="@string/oauth2_url_endpoint_access"
+            android:singleLine="true"
+            android:inputType="textUri"
             android:visibility="gone" />
 
         <EditText
@@ -117,7 +142,8 @@
             android:layout_height="wrap_content"
             android:ems="10"
             android:hint="@string/auth_username"
-            android:inputType="textNoSuggestions" />
+            android:inputType="textNoSuggestions" 
+			/>
 
 		<EditText
 		    android:id="@+id/account_password"
@@ -126,7 +152,8 @@
 		    android:drawablePadding="5dp"
 		    android:ems="10"
 		    android:hint="@string/auth_password"
-		    android:inputType="textPassword" />
+		    android:inputType="textPassword" 
+            />
         
         <TextView
             android:id="@+id/auth_status_text"

+ 26 - 0
res/layout/loading_dialog.xml

@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/loadingLayout"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="horizontal" >
+
+    <ProgressBar
+        android:id="@+id/loadingBar"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_vertical"
+        android:layout_marginBottom="10dp"
+        android:layout_marginLeft="10dp"
+        android:layout_marginRight="5dp"
+        android:layout_marginTop="10dp" />
+
+    <TextView
+        android:id="@+id/loadingText"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_vertical"
+        android:layout_marginRight="20dp"
+        android:text="TextView" />
+
+</LinearLayout>

+ 33 - 0
res/layout/sso_dialog.xml

@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ownCloud Android client application
+
+  Copyright (C) 2012-2013 ownCloud Inc.
+
+  This program is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License version 2,
+  as published by the Free Software Foundation.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+-->
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    >
+    
+    <com.owncloud.android.ui.dialog.SsoWebView
+    	android:layout_width="wrap_content"
+    	android:layout_height="wrap_content"
+        android:id="@+id/sso_webview"
+        android:focusable="true"
+        android:focusableInTouchMode="true"
+        android:clickable="true"
+        />
+
+</RelativeLayout>

+ 1 - 0
res/values-ar/strings.xml

@@ -60,6 +60,7 @@
   <string name="common_cancel">الغاء</string>
   <string name="common_error">خطأ</string>
   <string name="about_title">حول</string>
+  <string name="change_password">عدل كلمة السر</string>
   <string name="delete_account">حذف الحساب</string>
   <string name="create_account">حساب جديد</string>
   <string name="upload_chooser_title">رفع من</string>

+ 1 - 0
res/values-bg-rBG/strings.xml

@@ -57,6 +57,7 @@
   <string name="common_save_exit">Запази и Излез</string>
   <string name="common_error">Грешка</string>
   <string name="about_title">Относно</string>
+  <string name="change_password">Промяна на паролата</string>
   <string name="delete_account">Изтрий акаунт</string>
   <string name="create_account">Създай акаунт</string>
   <string name="upload_chooser_title">Качено от ...</string>

+ 2 - 0
res/values-bn-rBD/strings.xml

@@ -50,11 +50,13 @@
   <string name="common_cancel">বাতিল</string>
   <string name="common_save_exit">সংরক্ষণ কর এবং &amp;প্রস্থান</string>
   <string name="common_error">সমস্যা</string>
+  <string name="change_password">কূটশব্দ পরিবর্তন করুন</string>
   <string name="uploader_info_dirname">ডিরেক্টরির নাম</string>
   <string name="common_choose_account">একাউন্ট নির্বাচন</string>
   <string name="sync_string_contacts">ঠিকানাপঞ্জী</string>
   <string name="common_share">ভাগাভাগি কর</string>
   <string name="common_rename">পূনঃনামকরণ</string>
   <string name="common_remove">অপসারণ</string>
+  <string name="ssl_validator_title">সতর্কবাণী</string>
   <!--we need to improve the communication of errors to the user-->
 </resources>

+ 8 - 6
res/values-ca/strings.xml

@@ -45,10 +45,11 @@
   <string name="prefs_log_title_history">Història del registre</string>
   <string name="prefs_log_summary_history">Això mostra els registres desats</string>
   <string name="prefs_log_delete_history_button">Esborra la història</string>
+  <string name="auth_check_server">Comprova el servidor</string>
   <string name="auth_host_url">Adreça del servidor</string>
   <string name="auth_username">Nom d\'usuari</string>
   <string name="auth_password">Contrasenya</string>
-  <string name="auth_register">Sóc nou a ownCloud</string>
+  <string name="auth_register">Nou a %1$s?</string>
   <string name="new_session_uri_error">La URL proporcionada és incorrecta</string>
   <string name="new_session_session_name_error">El nom de la sessió no és correcte</string>
   <string name="sync_string_files">Fitxers</string>
@@ -92,6 +93,7 @@
   <string name="common_loading">Carregant...</string>
   <string name="common_error_unknown">Error desconegut</string>
   <string name="about_title">Quant a</string>
+  <string name="change_password">Canvia la contrasenya</string>
   <string name="delete_account">Elimina compte</string>
   <string name="create_account">Crea un compte</string>
   <string name="upload_chooser_title">Puja fitxer des de ...</string>
@@ -115,7 +117,7 @@
   <string name="sync_string_contacts">Contactes</string>
   <string name="sync_fail_ticker">La sincronització ha fallat</string>
   <string name="sync_fail_content">La sincronització de %1$s no s\'ha pogut acabar</string>
-  <string name="sync_fail_content_unauthorized">Credencials no vàlides per %1$s</string>
+  <string name="sync_fail_content_unauthorized">Contrasenya no vàlida per %1$s</string>
   <string name="sync_conflicts_in_favourites_ticker">S\'han trobat conflictes</string>
   <string name="sync_conflicts_in_favourites_content">%1$d mantinguts els arxius que no podien ser sincronitzats</string>
   <string name="sync_fail_in_favourites_ticker">Es mantenent els arxius a sincronitzar erronis</string>
@@ -172,14 +174,14 @@
     <item>30</item>
     <item>60</item>
   </string-array>
-  <string name="auth_trying_to_login">Intentant l\'accés...</string>
+  <string name="auth_trying_to_login">S\'està intentant acreditar-vos...</string>
   <string name="auth_no_net_conn_title">Sense connexió de xarxa</string>
   <string name="auth_no_net_conn_message">No s\'ha detectat cap connexió, comproveu la connexió i torneu a intentar-ho.</string>
   <string name="auth_connect_anyway">Connecta igualment</string>
   <string name="auth_nossl_plain_ok_title">La connexió segura no està disponible.</string>
   <string name="auth_nossl_plain_ok_message">L\'aplicació no ha pogut establir una connexió segura amb el servidor. Malgrat tot, una connexió no segura està disponible. Podeu continuar o cancel·lar.</string>
   <string name="auth_connection_established">S\'ha establert la connexió</string>
-  <string name="auth_testing_connection">Comprovant la connexió...</string>
+  <string name="auth_testing_connection">S\'està comprovant la connexió...</string>
   <string name="auth_not_configured_title">La configuració de ownCloud està malformada</string>
   <string name="auth_not_configured_message">Sembla que la instància ownCloud no està configurada correctament. Per més detalls contacteu amb l\'administrador.</string>
   <string name="auth_unknown_error_title">S\'ha produït un error desconegut</string>
@@ -195,14 +197,14 @@
   <string name="auth_bad_oc_version_title">Versió del servidor ownCloud desconeguda</string>
   <string name="auth_wrong_connection_title">No s\'ha pogut establir la connexió</string>
   <string name="auth_secure_connection">S\'ha establert la connexió segura</string>
-  <string name="auth_unauthorized">Credencials no vàlides</string>
+  <string name="auth_unauthorized">Nom d\'usuari o contrasenya incorrectes</string>
   <string name="auth_oauth_error">Autorització sense èxit</string>
   <string name="auth_oauth_error_access_denied">El servidor d\'autenticació us ha denegat l\'accés</string>
   <string name="auth_not_found">Camí equivocat</string>
   <string name="auth_internal">Error intern del servidor, codi %1$d</string>
   <string name="auth_wtf_reenter_URL">Estat inesperat; escriviu l\'adreça de nou</string>
   <string name="auth_expired_oauth_token_toast">La vostra autorització ha vençut.\nAcrediteu-vos de nou</string>
-  <string name="auth_expired_basic_auth_toast">Les credencials desades no són correctes.\nEscriviu les credencials actuals</string>
+  <string name="auth_expired_basic_auth_toast">Escriviu la contrasenya actual</string>
   <string name="crashlog_message">L\'aplicació s\'ha aturat de manera no prevista. Voleu enviar el registre d\'errors?</string>
   <string name="crashlog_send_report">Envia el registre d\'errors</string>
   <string name="crashlog_dont_send_report">No envïis el registre d\'errors</string>

+ 58 - 32
res/values-cs-rCZ/strings.xml

@@ -4,7 +4,7 @@
   <string name="main_password">Heslo:</string>
   <string name="main_login">Uživatelské jméno:</string>
   <string name="main_button_login">Přihlásit</string>
-  <string name="main_welcome">Vítejte ve svém ownCloudu</string>
+  <string name="main_welcome">Vítejte</string>
   <string name="main_files">Soubory</string>
   <string name="main_music">Hudba</string>
   <string name="main_contacts">Kontakty</string>
@@ -12,10 +12,14 @@
   <string name="main_bookmarks">Záložky</string>
   <string name="main_settings">Nastavení</string>
   <string name="main_tit_accsetup">Nastavit účet</string>
-  <string name="main_wrn_accsetup">Nemáte nastavené žádné účty ownCloud. Aby bylo možné tuto aplikaci používat, musíte si nějaký vytvořit.</string>
+  <string name="main_wrn_accsetup">Nemáte nastavené žádné účty v tomto zařízení. Aby bylo možné tuto aplikaci používat, musíte si nějaký vytvořit.</string>
+  <string name="about_android">%1$s Android aplikace</string>
+  <string name="about_version">verze %1$s</string>
+  <string name="actionbar_sync">Obnovit účet</string>
   <string name="actionbar_upload">Odeslat</string>
   <string name="actionbar_upload_from_apps">Obsah z ostatních aplikací</string>
   <string name="actionbar_upload_files">Soubory</string>
+  <string name="actionbar_open_with">Otevřít pomocí</string>
   <string name="actionbar_mkdir">Vytvořit adresář</string>
   <string name="actionbar_search">Hledat</string>
   <string name="actionbar_settings">Nastavení</string>
@@ -32,14 +36,20 @@
   <string name="prefs_trackmydevice_interval_summary">Aktualizovat každých %1$s minut</string>
   <string name="prefs_accounts">Účty</string>
   <string name="prefs_manage_accounts">Spravovat účty</string>
-  <string name="prefs_pincode">PIN aplikace ownCloud</string>
-  <string name="prefs_pincode_summary">Chraňte svého klienta ownCloud</string>
+  <string name="prefs_pincode">PIN aplikace</string>
+  <string name="prefs_pincode_summary">Chraňte svého klienta</string>
   <string name="prefs_instant_upload">Povolit okamžité odeslání</string>
   <string name="prefs_instant_upload_summary">Okamžitě odesílat vytvořené fotografie</string>
+  <string name="prefs_log_title">Povolit logování</string>
+  <string name="prefs_log_summary">Použito k zaznamenávání problémů</string>
+  <string name="prefs_log_title_history">Historie logování</string>
+  <string name="prefs_log_summary_history">Zobrazuje zaznamenané logy</string>
+  <string name="prefs_log_delete_history_button">Smazat historii</string>
+  <string name="auth_check_server">Zkontrolovat server</string>
   <string name="auth_host_url">Adresa serveru</string>
   <string name="auth_username">Uživatelské jméno</string>
   <string name="auth_password">Heslo</string>
-  <string name="auth_register">Jsem nový na ownCloud.</string>
+  <string name="auth_register">Nováček s %1$s?</string>
   <string name="new_session_uri_error">Zadané neplatné URL</string>
   <string name="new_session_session_name_error">Neplatný název sezení</string>
   <string name="sync_string_files">Soubory</string>
@@ -48,17 +58,17 @@
   <string name="setup_hint_password">Heslo</string>
   <string name="setup_hint_address">Webová adresa</string>
   <string name="setup_hint_show_password">Zobrazit heslo?</string>
-  <string name="setup_title">Připojit k Vašemu ownCloudu</string>
+  <string name="setup_title">Připojit k Vašemu %1$s</string>
   <string name="setup_btn_connect">Připojit</string>
   <string name="uploader_btn_upload_text">Odeslat</string>
   <string name="uploader_top_message">Vyberte adresář pro nahrané soubory:</string>
   <string name="uploader_wrn_no_account_title">Nenalezen žádný účet</string>
-  <string name="uploader_wrn_no_account_text">Nemáte žádné ownCloud účty. Vytvořte si, prosím,  nejdříve účet.</string>
+  <string name="uploader_wrn_no_account_text">Nemáte žádné %1$s účty. Vytvořte si, prosím, nejdříve účet.</string>
   <string name="uploader_wrn_no_account_setup_btn_text">Nastavení</string>
   <string name="uploader_wrn_no_account_quit_btn_text">Ukončit</string>
   <string name="uploader_wrn_no_content_title">Žádný obsah k odeslání</string>
   <string name="uploader_wrn_no_content_text">Neobdržen žádný obsah. Nic k odeslání.</string>
-  <string name="uploader_error_forbidden_content">ownCloud nemá právo přistupovat ke sdílenému obsahu</string>
+  <string name="uploader_error_forbidden_content">%1$s nemá právo přistupovat ke sdílenému obsahu</string>
   <string name="uploader_info_uploading">Odesílání</string>
   <string name="uploader_btn_create_dir_text">Vytvořit adresář pro odesílání</string>
   <string name="file_list_empty">Ve složce nejsou žádné soubory.\nNové soubory mohou být přidány pomocí volby \"Odeslat\".</string>
@@ -68,6 +78,7 @@
   <string name="filedetails_created">Vytvořen:</string>
   <string name="filedetails_modified">Upraven:</string>
   <string name="filedetails_download">Stáhnout</string>
+  <string name="filedetails_sync_file">Obnovit soubor</string>
   <string name="filedetails_redownload">Znovu stáhnout</string>
   <string name="filedetails_renamed_in_upload_msg">Soubor byl v průběhu odesílání přejmenován na %1$s</string>
   <string name="common_yes">Ano</string>
@@ -77,14 +88,15 @@
   <string name="common_cancel_upload">Zrušit odesílání</string>
   <string name="common_cancel">Zrušit</string>
   <string name="common_save_exit">Uložit a ukončit</string>
-  <string name="common_exit">Opustit ownCloud</string>
+  <string name="common_exit">Opustit %1$s</string>
   <string name="common_error">Chyba</string>
-  <string name="common_loading">Načítání...</string>
+  <string name="common_loading">Načítání ...</string>
   <string name="common_error_unknown">Neznámá chyba</string>
   <string name="about_title">O aplikaci</string>
+  <string name="change_password">Změnit heslo</string>
   <string name="delete_account">Smazat účet</string>
   <string name="create_account">Vytvořit účet</string>
-  <string name="upload_chooser_title">Odeslat z...</string>
+  <string name="upload_chooser_title">Odeslat z ...</string>
   <string name="uploader_info_dirname">Název adresáře</string>
   <string name="uploader_upload_in_progress_ticker">Odesílám...</string>
   <string name="uploader_upload_in_progress_content">%1$d%% Odesílám %2$s</string>
@@ -105,31 +117,32 @@
   <string name="sync_string_contacts">Kontakty</string>
   <string name="sync_fail_ticker">Synchronizace selhala</string>
   <string name="sync_fail_content">Synchronizaci %1$s nelze dokončit</string>
+  <string name="sync_fail_content_unauthorized">Chybné heslo pro %1$s</string>
   <string name="sync_conflicts_in_favourites_ticker">Nalezeny konflikty</string>
   <string name="sync_conflicts_in_favourites_content">%1$d souborů z automatické synchronizace nelze synchronizovat</string>
   <string name="sync_fail_in_favourites_ticker">Automatická synchronizace souborů selhala</string>
   <string name="sync_fail_in_favourites_content">Obsah %1$d souborů nemohl být synchronizován (počet konfliktů: %2$d)</string>
   <string name="sync_foreign_files_forgotten_ticker">Některé místní soubory byly zapomenuty</string>
   <string name="sync_foreign_files_forgotten_content">%1$d souborů z adresáře %2$s nelze zkopírovat do</string>
-  <string name="sync_foreign_files_forgotten_explanation">\"Od verze 1.3.16 jsou soubory odeslané z tohoto zařízení, pro ochranu proti ztrátě dat při synchronizaci z více účtů, nahrány do místního adresáře %1$s.\n\nVšechny soubory odeslané předchozími verzemi byly kvůli této změně přesunuty do složky %2$s. Bohužel chyba zabránila dokončení této operace při synchronizaci účtu. Můžete nyní ponechat soubory ve stávajícím stavu a smazat odkaz na %3$s, nebo přesunout soubory do adresáře %1$s a zachovat odkazy na %4$s.\n\nNásleduje seznam místních souborů a jejich odkazů na vzdálené soubory v %5$s.</string>
+  <string name="sync_foreign_files_forgotten_explanation">Od verze 1.3.16 jsou soubory odeslané z tohoto zařízení, pro ochranu proti ztrátě dat při synchronizaci z více účtů, nahrány do místní složky %1$s.\n\nVšechny soubory odeslané předchozími verzemi byly kvůli této změně přesunuty do složky %2$s. Bohužel chyba zabránila dokončení této operace při synchronizaci účtu. Můžete nyní ponechat soubory ve stávajícím stavu a smazat odkaz na %3$s nebo přesunout soubory do adresáře %1$s a zachovat odkazy na %4$s.\n\nNásleduje seznam místních souborů a jejich odkazů na vzdálené soubory v %5$s.</string>
   <string name="foreign_files_move">Přesunout vše</string>
   <string name="foreign_files_success">Všechny soubory byly přesunuty</string>
   <string name="foreign_files_fail">Některé soubory nebylo možno přesunout</string>
   <string name="foreign_files_local_text">Místní: %1$s</string>
   <string name="foreign_files_remote_text">Vzdálené: %1$s</string>
-  <string name="upload_query_move_foreign_files">Nedostatek místa pro kopírování vybraných souborů do složky %1$s. Přejete si je místo kopírování přesunout?</string>
+  <string name="upload_query_move_foreign_files">Nedostatek místa pro zkopírování vybraných souborů do složky %1$s. Přejete si je místo kopírování přesunout?</string>
   <string name="use_ssl">Použít zabezpečené spojení</string>
-  <string name="location_no_provider">ownCloud nemůže sledovat vaše zařízení. Zkontroluje nastavení zjišťování polohy.</string>
+  <string name="location_no_provider">%1$s nemůže sledovat vaše zařízení. Zkontroluje nastavení zjišťování polohy.</string>
   <string name="pincode_enter_pin_code">Zadejte PIN aplikace</string>
   <string name="pincode_enter_new_pin_code">Zadejte nový PIN aplikace</string>
-  <string name="pincode_configure_your_pin">Zadat PIN ownCloud aplikace</string>
+  <string name="pincode_configure_your_pin">Zadat PIN aplikace</string>
   <string name="pincode_configure_your_pin_explanation">Při každém spuštění aplikace bude vyžadováno zadání PIN</string>
-  <string name="pincode_reenter_your_pincode">Zopakovat PIN ownCloud aplikace</string>
-  <string name="pincode_remove_your_pincode">Odstranit PIN ownCloud aplikace</string>
-  <string name="pincode_mismatch">PINy se neshodují</string>
-  <string name="pincode_wrong">Neplatný PIN</string>
-  <string name="pincode_removed">PIN ownCloud aplikace odstraněn</string>
-  <string name="pincode_stored">PIN ownCloud aplikace uložen</string>
+  <string name="pincode_reenter_your_pincode">Zadejte znovu PIN aplikace</string>
+  <string name="pincode_remove_your_pincode">Odstranit PIN aplikace</string>
+  <string name="pincode_mismatch">PINy aplikace se neshodují</string>
+  <string name="pincode_wrong">Neplatný PIN aplikace</string>
+  <string name="pincode_removed">PIN aplikace odstraněn</string>
+  <string name="pincode_stored">PIN aplikace uložen</string>
   <string name="media_notif_ticker">Hudební přehrávač %1$s</string>
   <string name="media_state_playing">%1$s (přehrává)</string>
   <string name="media_state_loading">%1$s (načítá)</string>
@@ -161,39 +174,47 @@
     <item>30</item>
     <item>60</item>
   </string-array>
+  <string name="auth_trying_to_login">Zkouším se přihlásit...</string>
   <string name="auth_no_net_conn_title">Žádné síťové spojení</string>
-  <string name="auth_no_net_conn_message">Nebylo nalezeno připojení k síti, zkontrolujte svoje připojení a zkuste to znovu.</string>
+  <string name="auth_no_net_conn_message">Nebylo nalezeno připojení k síti, zkontrolujte svoje připojení k Internetu a zkuste to znovu.</string>
   <string name="auth_connect_anyway">I přesto připojit</string>
   <string name="auth_nossl_plain_ok_title">Zabezpečené spojení není k dispozici</string>
-  <string name="auth_nossl_plain_ok_message">Aplikace nemůže navázat zabezpečené spojení se serverem. Ačkoliv nezabezpečené spojení je k dispozici. Můžete pokračovat, či přerušit spojení.</string>
+  <string name="auth_nossl_plain_ok_message">Aplikace nemůže navázat zabezpečené spojení se serverem. Je k dispozici pouze nezabezpečené spojení. Můžete pokračovat či přerušit spojení.</string>
   <string name="auth_connection_established">Spojení navázáno</string>
-  <string name="auth_not_configured_title">Neplatné nastavení ownCloudu</string>
-  <string name="auth_not_configured_message">Vypadá to že nastavení Vaší instance ownCloud není správné. Kontaktujte svého správce pro více informací.</string>
+  <string name="auth_testing_connection">Zkouším spojení...</string>
+  <string name="auth_not_configured_title">Neplatné nastavení serveru</string>
+  <string name="auth_not_configured_message">Vypadá to, že nastavení Vaší instance serveru není správné. Kontaktujte svého správce pro více informací.</string>
   <string name="auth_unknown_error_title">Nastala neznámá chyba</string>
   <string name="auth_unknown_error_message">Nastala neznámá chyba. Prosím kontaktujte autory a připojte záznam z Vašeho zařízení.</string>
   <string name="auth_unknown_host_title">Nelze najít hostitele</string>
   <string name="auth_unknown_host_message">Nemůžu navázat spojení se serverem. Zkontrolujte zda máje správnou adresu, zda server běží a zkuste to znovu.</string>
-  <string name="auth_incorrect_path_title">Instance ownCloud nenalezena</string>
-  <string name="auth_incorrect_path_message">Aplikace nenalezla na zadané adrese instanci ownCloud. Zkontrolujte cestu a zkuste znovu.</string>
+  <string name="auth_incorrect_path_title">Instance serveru nenalezena</string>
+  <string name="auth_incorrect_path_message">Aplikace nenalezla na zadané adrese instanci serveru. Zkontrolujte cestu a zkuste znovu.</string>
   <string name="auth_timeout_title">Serveru trvalo příliš dlouho odpovědět</string>
   <string name="auth_incorrect_address_title">Neplatné URL</string>
   <string name="auth_ssl_general_error_title">Inicializace SSL selhala</string>
   <string name="auth_ssl_unverified_server_title">Neověřená identita SSL serveru</string>
-  <string name="auth_bad_oc_version_title">Nerozpoznaná verze serveru ownCloud</string>
+  <string name="auth_bad_oc_version_title">Nerozpoznaná verze serveru</string>
   <string name="auth_wrong_connection_title">Nemohu navázat spojení</string>
   <string name="auth_secure_connection">Zabezpečené spojení navázáno</string>
+  <string name="auth_unauthorized">Chybné přihlašovací jméno nebo heslo</string>
+  <string name="auth_oauth_error">Neúspěšné přihlášení</string>
+  <string name="auth_oauth_error_access_denied">Přístup zamítnut autorizačním serverem</string>
   <string name="auth_not_found">Zadána neplatná cesta</string>
   <string name="auth_internal">Interní chyba serveru, kód %1$d</string>
+  <string name="auth_wtf_reenter_URL">Neočekávaný stav; prosím vložte znovu URL adresu serveru</string>
+  <string name="auth_expired_oauth_token_toast">Vaše přihlášení vypršelo.\nPřihlašte se prosím znovu</string>
+  <string name="auth_expired_basic_auth_toast">Zadejte prosím aktuální heslo</string>
   <string name="crashlog_message">Aplikace neočekávaně skončila. Chcete odeslat zprávu o chybě?</string>
   <string name="crashlog_send_report">Odeslat zprávu</string>
   <string name="crashlog_dont_send_report">Neodesílat zprávu</string>
   <string name="extensions_avail_title">Rozšíření jsou dostupná!</string>
-  <string name="extensions_avail_message">Vypadá to, že Vaše instance ownCloud podporuje pokročilá rozšíření. Přejete si zobrazit rozšíření dostupná pro android?</string>
+  <string name="extensions_avail_message">Vypadá to, že Vaše instance serveru podporuje pokročilá rozšíření. Přejete si zobrazit rozšíření dostupná pro android?</string>
   <string name="fd_keep_in_sync">Udržovat soubor aktuální</string>
   <string name="common_share">Sdílet</string>
   <string name="common_rename">Přejmenovat</string>
   <string name="common_remove">Odstranit</string>
-  <string name="confirmation_remove_alert">opravdu si přejete odstranit %1$s ?</string>
+  <string name="confirmation_remove_alert">Opravdu si přejete odstranit %1$s ?</string>
   <string name="confirmation_remove_folder_alert">Opravdu si přejete odstranit %1$s a jeho obsah?</string>
   <string name="confirmation_remove_local">Pouze místní</string>
   <string name="confirmation_remove_folder_local">Pouze místní obsah</string>
@@ -210,11 +231,16 @@
   <string name="wait_a_moment">Počkejte chvíli</string>
   <string name="filedisplay_unexpected_bad_get_content">Neočekávaný problém - zkuste zvolit soubor jinou aplikací</string>
   <string name="filedisplay_no_file_selected">Žádný soubor nebyl vybrán</string>
+  <string name="oauth_host_url">oAuth2 URL</string>
+  <string name="oauth_check_onoff">Přihlásit se s oAuth2.</string>
+  <string name="oauth_login_connection">Připojuji se k oAuth2 serveru...</string>
+  <string name="oauth_code_validation_message">Otevřete webový prohlížeč a běžte na:\n%1$s.\nOvěřte tento kód zde:\n%2$s</string>
+  <string name="oauth_connection_url_unavailable">Připojení na touto URL není dostupné.</string>
   <string name="ssl_validator_title">Varování</string>
   <string name="ssl_validator_header">Identitu stránky nelze ověřit</string>
   <string name="ssl_validator_reason_cert_not_trusted">- Certifikát serveru je nedůvěryhodný</string>
   <string name="ssl_validator_reason_cert_expired">- Certifikátu serveru vypršela platnost</string>
-  <string name="ssl_validator_reason_cert_not_yet_valid">- Certifikát serveru je příliš nový</string>
+  <string name="ssl_validator_reason_cert_not_yet_valid">- Datum platnosti certifikátu je v budoucnosti</string>
   <string name="ssl_validator_reason_hostname_not_verified">- URL neodpovídá hodnotě hostname certifikátu</string>
   <string name="ssl_validator_certificate_not_available">Nelze získat certifikát serveru</string>
   <string name="ssl_validator_question">Přejete si přesto tomuto certifikátu důvěřovat?</string>
@@ -260,7 +286,7 @@
   <string name="failed_upload_headline_delete_all_btn">smazat vybrané z fronty k nahrání</string>
   <string name="failed_upload_retry_text">zkusit znovu odeslat obrázek:</string>
   <string name="failed_upload_load_more_images">Načíst více obrázků</string>
-  <string name="failed_upload_retry_do_nothing_text">nic nedělat nejste připojení pro okamžité odeslání</string>
+  <string name="failed_upload_retry_do_nothing_text">nic nedělat nejste připojeni pro okamžité odeslání</string>
   <string name="failed_upload_failure_text">Chybová zpráva:</string>
   <string name="failed_upload_quota_exceeded_text">Zkontrolujte prosím nastavení vašeho serveru, možná jste překročili kvótu.</string>
 </resources>

+ 0 - 1
res/values-cy-rGB/strings.xml

@@ -37,7 +37,6 @@
   <string name="prefs_instant_upload_summary">Llwytho lluniau dynnwyd â chamera i fyny\'n syth</string>
   <string name="auth_username">Enw defnyddiwr</string>
   <string name="auth_password">Cyfrinair</string>
-  <string name="auth_register">Rwy\'n newydd i %1$s</string>
   <string name="new_session_uri_error">Cyflwynwyd cyfeiriad anghywir</string>
   <string name="new_session_session_name_error">Enw sesiwn anghywir</string>
   <string name="sync_string_files">Ffeiliau</string>

+ 73 - 1
res/values-da/strings.xml

@@ -13,12 +13,17 @@
   <string name="main_settings">Indstillinger</string>
   <string name="main_tit_accsetup">Opsæt konto</string>
   <string name="main_wrn_accsetup">Der er ingen ownCloud konti på enheden. For at bruge denne App, skal du oprette en.</string>
+  <string name="about_android">%1$s Android App</string>
+  <string name="about_version">version %1$s</string>
+  <string name="actionbar_sync">Genindlæs konto</string>
   <string name="actionbar_upload">Upload</string>
   <string name="actionbar_upload_from_apps">Indhold fra andre apps</string>
   <string name="actionbar_upload_files">Filer</string>
+  <string name="actionbar_open_with">Åben med</string>
   <string name="actionbar_mkdir">Opret mappe</string>
   <string name="actionbar_search">Søg</string>
   <string name="actionbar_settings">Indstillinger</string>
+  <string name="actionbar_see_details">Detaljer</string>
   <string name="prefs_category_general">Generel</string>
   <string name="prefs_add_session">Tilføj ny session</string>
   <string name="prefs_create_img_thumbnails">Opret billede thumbnails</string>
@@ -35,10 +40,16 @@
   <string name="prefs_pincode_summary">Beskyt din ownCloud klient</string>
   <string name="prefs_instant_upload">Slå øjeblikkelig upload til</string>
   <string name="prefs_instant_upload_summary">Upload billeder taget med kamera med det samme</string>
+  <string name="prefs_log_title">Aktiver Logning</string>
+  <string name="prefs_log_summary">Dette bruges til at logge problemer</string>
+  <string name="prefs_log_title_history">Logger Historik</string>
+  <string name="prefs_log_summary_history">Dette viser de optagne logger</string>
+  <string name="prefs_log_delete_history_button">Slet Historik</string>
+  <string name="auth_check_server">Check Server</string>
   <string name="auth_host_url">Serveradresse</string>
   <string name="auth_username">Brugernavn</string>
   <string name="auth_password">Kodeord</string>
-  <string name="auth_register">Jeg er ny til ownCloud</string>
+  <string name="auth_register">Uvant med %1$s</string>
   <string name="new_session_uri_error">Forkert URL givet</string>
   <string name="new_session_session_name_error">Forkert session navn</string>
   <string name="sync_string_files">Filer</string>
@@ -50,6 +61,7 @@
   <string name="setup_title">Tilslut til din ownCloud</string>
   <string name="setup_btn_connect">Tilslut</string>
   <string name="uploader_btn_upload_text">Upload</string>
+  <string name="uploader_top_message">Vælg upload mappe:</string>
   <string name="uploader_wrn_no_account_title">Ingen konto fundet</string>
   <string name="uploader_wrn_no_account_text">Der er ingen ownCloud brugere på din enhed. Sæt venligst en bruger op først.</string>
   <string name="uploader_wrn_no_account_setup_btn_text">Opsætning</string>
@@ -66,6 +78,7 @@
   <string name="filedetails_created">Oprettet:</string>
   <string name="filedetails_modified">Ændret:</string>
   <string name="filedetails_download">Hent</string>
+  <string name="filedetails_sync_file">Opdater fil</string>
   <string name="filedetails_redownload">Download igen</string>
   <string name="filedetails_renamed_in_upload_msg">Filen blev omdøbt til %1$s under upload</string>
   <string name="common_yes">Ja</string>
@@ -77,7 +90,10 @@
   <string name="common_save_exit">Gem &amp; Afslut</string>
   <string name="common_exit">Forlad ownCloud</string>
   <string name="common_error">Fejl</string>
+  <string name="common_loading">Indlæser...</string>
+  <string name="common_error_unknown">Ukendt fejl</string>
   <string name="about_title">Om</string>
+  <string name="change_password">Skift kodeord</string>
   <string name="delete_account">Slet konto</string>
   <string name="create_account">Opret konto</string>
   <string name="upload_chooser_title">Upload fra ...</string>
@@ -96,16 +112,19 @@
   <string name="downloader_download_succeeded_content">%1$s blev downloadet med success</string>
   <string name="downloader_download_failed_ticker">Download fejlede</string>
   <string name="downloader_download_failed_content">Download af %1$s kunne ikke fuldføres</string>
+  <string name="downloader_not_downloaded_yet">Endnu ikke downloadet</string>
   <string name="common_choose_account">Vælg konto</string>
   <string name="sync_string_contacts">Kontakter</string>
   <string name="sync_fail_ticker">Synkronisering fejlede</string>
   <string name="sync_fail_content">Synkronisering af %1$s kunne ikke gennemføres</string>
+  <string name="sync_fail_content_unauthorized">Ugyldig adgangskode for %1$s</string>
   <string name="sync_conflicts_in_favourites_ticker">Konflikter fundet</string>
   <string name="sync_conflicts_in_favourites_content">%1$d hold-synkroniseret filer kunne ikke synkroniseres</string>
   <string name="sync_fail_in_favourites_ticker">Hold-synkroniseret filer mislykkedes</string>
   <string name="sync_fail_in_favourites_content">Indholdet af %1$d filer ikke kunne synkroniseres (%2$d konflikter)</string>
   <string name="sync_foreign_files_forgotten_ticker">Visse lokale filer blev glemt</string>
   <string name="sync_foreign_files_forgotten_content">%1$d filer ud af %2$s mappe kunne ikke kopieres ind i</string>
+  <string name="sync_foreign_files_forgotten_explanation">Fra version 1.3.16 bliver filer uploadet fra denne enhed kopieret til mappen %1$s for at forhindre datatab når en enkelt fil synkroniseres med flere konti.\n\nPå grund af denne ændring blev alle filer uploadet i tidligere versioner af denne app kopieret til mappen %2$s. Imidlertid forhindrede en fejl færdiggørelsen af denne operation under konto-synkronisering. Du kan enten lade filerne være som de er og fjerne linket til %3$s eller flytte filerne til mappen %1$s og beholde linket til %4$s.\n\nHerunder er en liste med de lokale filer og de eksterne filer i %5$s, som de var knyttet til.</string>
   <string name="foreign_files_move">Flyt alle</string>
   <string name="foreign_files_success">Alle filer blev flyttet</string>
   <string name="foreign_files_fail">Visse filer kunne ikke flyttes</string>
@@ -124,6 +143,27 @@
   <string name="pincode_wrong">Forkert ownCloud App PIN</string>
   <string name="pincode_removed">ownCloud App PIN fjernet</string>
   <string name="pincode_stored">ownCloud App PIN gemt</string>
+  <string name="media_notif_ticker">%1$s musikafspiller</string>
+  <string name="media_state_playing">%1$s (afspiller)</string>
+  <string name="media_state_loading">%1$s (indlæser)</string>
+  <string name="media_event_done">%1$s afspilning færdig</string>
+  <string name="media_err_nothing_to_play">Mediefil ikke fundet</string>
+  <string name="media_err_no_account">Ingen konto angivet</string>
+  <string name="media_err_not_in_owncloud">Fil er ikke en gyldig konto</string>
+  <string name="media_err_unsupported">Ikke-understøttet medie codec</string>
+  <string name="media_err_io">Mediefilen kunne ikke læses</string>
+  <string name="media_err_malformed">Mediefilen er ikke korrekt kodet</string>
+  <string name="media_err_timeout">Prøvet at afspille for længe</string>
+  <string name="media_err_invalid_progressive_playback">Mediefilen kan ikke streames</string>
+  <string name="media_err_unknown">Mediefil kan ikke afspilles med tilgængelige medieafspiller</string>
+  <string name="media_err_security_ex">Sikkerhedsfejl ved forsøg på afspilning af </string>
+  <string name="media_err_io_ex">Inputfejl ved forsøg på afspilning af %1$s</string>
+  <string name="media_err_unexpected">Uventet fejl ved forsøg på afspilning af %1$s</string>
+  <string name="media_previous_description">Tidligere nummer knap</string>
+  <string name="media_rewind_description">Tilbagespolings knap</string>
+  <string name="media_play_pause_description">Afspil eller pause knap</string>
+  <string name="media_forward_description">Hurtigt fremad kanp</string>
+  <string name="media_next_description">Næste nummer knap</string>
   <string-array name="prefs_trackmydevice_intervall_keys">
     <item>15 Minutter</item>
     <item>30 Minutter</item>
@@ -134,12 +174,14 @@
     <item>30</item>
     <item>60</item>
   </string-array>
+  <string name="auth_trying_to_login">Forsøger at logge ind...</string>
   <string name="auth_no_net_conn_title">Ingen netværksforbindelse</string>
   <string name="auth_no_net_conn_message">Der blev ikke fundet nogen netværksforbindelse, tjek din internetforbindelse, og prøv igen</string>
   <string name="auth_connect_anyway">Forbind alligevel</string>
   <string name="auth_nossl_plain_ok_title">Sikker forbindelse ikke tilgængelig.</string>
   <string name="auth_nossl_plain_ok_message">Applikationen kunne ikke oprette en sikker forbindelse med serveren. Selvom en sikker forbindelse ikke er tilgængeligt, kan du vælge at fortsætte eller annullere.</string>
   <string name="auth_connection_established">Forbindelse oprettet</string>
+  <string name="auth_testing_connection">Afprøver forbindelse ...</string>
   <string name="auth_not_configured_title">Misdannet ownCloud konfiguration</string>
   <string name="auth_not_configured_message">Det ser ud til, at din ownCloud instans ikke er konfigureret korrekt. KOntakt din administrator for flere detaljer.</string>
   <string name="auth_unknown_error_title">Ukendt fejl opstod!</string>
@@ -155,8 +197,14 @@
   <string name="auth_bad_oc_version_title">Ikke genkendt ownCloud server version</string>
   <string name="auth_wrong_connection_title">Ikke ikke oprette forbindelse</string>
   <string name="auth_secure_connection">Sikker forbindelse oprettet</string>
+  <string name="auth_unauthorized">Forkert brugernavn eller kodeord</string>
+  <string name="auth_oauth_error">Mislykket godkendelse</string>
+  <string name="auth_oauth_error_access_denied">Adgang afvist af autorisationsserver</string>
   <string name="auth_not_found">Forkert sti angivet</string>
   <string name="auth_internal">Intern serverfejl, kode %1$d</string>
+  <string name="auth_wtf_reenter_URL">Uventet tilstand; angiv server-URL\'en igen</string>
+  <string name="auth_expired_oauth_token_toast">Din godkendelse udløb.\nGentag godkendelse</string>
+  <string name="auth_expired_basic_auth_toast">Indtast venligst dit nuværende kodeord</string>
   <string name="crashlog_message">Applikation afsluttede mod forventning. Vil du indsende en fejl rapport?</string>
   <string name="crashlog_send_report">Send rapport</string>
   <string name="crashlog_dont_send_report">Send ikke rapport</string>
@@ -183,6 +231,11 @@
   <string name="wait_a_moment">Vent et øjeblik</string>
   <string name="filedisplay_unexpected_bad_get_content">Uforventet problem; prøv venligst anden applikation til at vælge filen</string>
   <string name="filedisplay_no_file_selected">Ingen fil blev valgt</string>
+  <string name="oauth_host_url">oAuth2 URL</string>
+  <string name="oauth_check_onoff">Login med oAuth2.</string>
+  <string name="oauth_login_connection">Forbinder til oAuth2 server...</string>
+  <string name="oauth_code_validation_message">Åbn en webbrowser og gå til:\n%1$s\nValidér denne kode der:\n%2$s</string>
+  <string name="oauth_connection_url_unavailable">Forbindelsen til dette URL er ikke tilgængelig.</string>
   <string name="ssl_validator_title">Advarsel</string>
   <string name="ssl_validator_header">Sidens identitet kunne ikke verificeres</string>
   <string name="ssl_validator_reason_cert_not_trusted">- Serverens certifikat er ikke troværdigt</string>
@@ -208,6 +261,11 @@
   <string name="ssl_validator_label_signature">Signatur:</string>
   <string name="ssl_validator_label_signature_algorithm">Algoritme:</string>
   <string name="placeholder_sentence">Dette er en pladsholder</string>
+  <string name="placeholder_filename">stedfortræder.txt</string>
+  <string name="placeholder_filetype">PNG Billede</string>
+  <string name="placeholder_filesize">389 KB</string>
+  <string name="placeholder_timestamp">2012/05/18 12:23 PM</string>
+  <string name="placeholder_media_time">12:23:45</string>
   <string name="instant_upload_on_wifi">Upload billeder kun via WiFi </string>
   <string name="instant_upload_path">/Øjeblikkelig upload</string>
   <string name="conflict_title">Opdaterings konflikt</string>
@@ -215,6 +273,20 @@
   <string name="conflict_keep_both">Behold begge</string>
   <string name="conflict_overwrite">Overskriv</string>
   <string name="conflict_dont_upload">Upload ikke</string>
+  <string name="preview_image_description">Billede preview</string>
+  <string name="preview_image_error_unknown_format">Dette billede kan ikke vises</string>
+  <string name="preview_image_error_out_of_memory">\"Ikke nok hukommelse til at vise dette billede</string>
   <!--we need to improve the communication of errors to the user-->
   <string name="error__upload__local_file_not_copied">%1$s kunne ikke kopieres til %2$s lokale mappe</string>
+  <string name="actionbar_failed_instant_upload">InstantUpload mislykkedes\"</string>
+  <string name="failed_upload_headline_text">Øjeblikkelige uploads mislykkedes</string>
+  <string name="failed_upload_headline_hint">Sammenfatning af alle mislykkede øjeblikkelige uploads</string>
+  <string name="failed_upload_all_cb">Vælg alle</string>
+  <string name="failed_upload_headline_retryall_btn">prøv alle markerede igen</string>
+  <string name="failed_upload_headline_delete_all_btn">slet alle markerede fra uploadkøen</string>
+  <string name="failed_upload_retry_text">prøv at uploade billedet igen:</string>
+  <string name="failed_upload_load_more_images">Indlæs flere billeder</string>
+  <string name="failed_upload_retry_do_nothing_text">gør intet, du er ikke online til øjeblikkelig upload</string>
+  <string name="failed_upload_failure_text">Fejlmeddelelse</string>
+  <string name="failed_upload_quota_exceeded_text">Tjek din serverkonfiguration, måske er din kvota overskredet.</string>
 </resources>

+ 4 - 0
res/values-de-rAT/strings.xml

@@ -0,0 +1,4 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<resources>
+  <!--we need to improve the communication of errors to the user-->
+</resources>

+ 292 - 0
res/values-de-rCH/strings.xml

@@ -0,0 +1,292 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<resources>
+  <string name="app_name">ownCloud</string>
+  <string name="main_password">Passwort:</string>
+  <string name="main_login">Benutzername:</string>
+  <string name="main_button_login">Anmelden</string>
+  <string name="main_welcome">Willkommen</string>
+  <string name="main_files">Dateien</string>
+  <string name="main_music">Musik</string>
+  <string name="main_contacts">Kontakte</string>
+  <string name="main_calendar">Kalender</string>
+  <string name="main_bookmarks">Lesezeichen</string>
+  <string name="main_settings">Einstellungen</string>
+  <string name="main_tit_accsetup">Konto einrichten</string>
+  <string name="main_wrn_accsetup">Auf Ihrem Gerät sind keine Konten eingerichtet. Bitte erstellen Sie ein Konto, um diese App zu nutzen.</string>
+  <string name="about_android">%1$s Android App</string>
+  <string name="about_version">Version %1$s</string>
+  <string name="actionbar_sync">Konto aktualisieren</string>
+  <string name="actionbar_upload">Datei hochladen</string>
+  <string name="actionbar_upload_from_apps">Inhalt von anderen Apps</string>
+  <string name="actionbar_upload_files">Dateien</string>
+  <string name="actionbar_open_with">Öffnen mit</string>
+  <string name="actionbar_mkdir">Ordner anlegen</string>
+  <string name="actionbar_search">Suche</string>
+  <string name="actionbar_settings">Einstellungen</string>
+  <string name="actionbar_see_details">Details</string>
+  <string name="prefs_category_general">Allgemein</string>
+  <string name="prefs_add_session">Neue Sitzung hinzufügen</string>
+  <string name="prefs_create_img_thumbnails">Bildvorschau erstellen</string>
+  <string name="prefs_select_oc_account">Account auswählen</string>
+  <string name="prefs_summary_select_oc_account">Bitte wählen Sie, welches Konto von der App verwendet werden soll.</string>
+  <string name="prefs_trackmydevice">Gerät verfolgen</string>
+  <string name="prefs_trackmydevice_summary_off">Geräteverfolgung in dieser App aktivieren</string>
+  <string name="prefs_trackmydevice_summary_on">Ihre App verfolgt dieses Gerät</string>
+  <string name="prefs_trackmydevice_interval">Aktualisierungsintervall</string>
+  <string name="prefs_trackmydevice_interval_summary">Alle %1$s Minuten aktualisieren</string>
+  <string name="prefs_accounts">Konten</string>
+  <string name="prefs_manage_accounts">Konten verwalten</string>
+  <string name="prefs_pincode">App-PIN</string>
+  <string name="prefs_pincode_summary">Schützen Sie Ihren Client</string>
+  <string name="prefs_instant_upload">Aktiviert den sofortigen Upload</string>
+  <string name="prefs_instant_upload_summary">Laden Sie Ihre Fotos von der Kamera sofort hoch</string>
+  <string name="prefs_log_title">Protokollierung aktivieren</string>
+  <string name="prefs_log_summary">Dies wird zur Protokollierung von Problemen genutzt</string>
+  <string name="prefs_log_title_history">Protokollierungsverlauf</string>
+  <string name="prefs_log_summary_history">Dies zeigt die gespeicherten Protokollierungen</string>
+  <string name="prefs_log_delete_history_button">Verlauf löschen</string>
+  <string name="auth_check_server">Server überprüfen</string>
+  <string name="auth_host_url">Adresse des Servers</string>
+  <string name="auth_username">Benutzername</string>
+  <string name="auth_password">Passwort</string>
+  <string name="auth_register">Ist %1$s neu für Sie?</string>
+  <string name="new_session_uri_error">Falsche URL angegeben</string>
+  <string name="new_session_session_name_error">Falscher Sitzungsname</string>
+  <string name="sync_string_files">Dateien</string>
+  <string name="uploader_no_file_selected">Sie haben keine Datei zum Hochladen ausgewählt</string>
+  <string name="setup_hint_username">Benutzername</string>
+  <string name="setup_hint_password">Passwort</string>
+  <string name="setup_hint_address">Internetadresse</string>
+  <string name="setup_hint_show_password">Passwort anzeigen?</string>
+  <string name="setup_title">Mit Ihrer %1$s verbinden</string>
+  <string name="setup_btn_connect">Verbinden</string>
+  <string name="uploader_btn_upload_text">Hochladen</string>
+  <string name="uploader_top_message">Wähle Zielordner:</string>
+  <string name="uploader_wrn_no_account_title">Kein Konto gefunden</string>
+  <string name="uploader_wrn_no_account_text">Es sind keine %1$s-Konten auf Ihrem Gerät eingerichtet. Bitte richten Sie zuerst ein Konto ein.</string>
+  <string name="uploader_wrn_no_account_setup_btn_text">Einrichten</string>
+  <string name="uploader_wrn_no_account_quit_btn_text">Beenden</string>
+  <string name="uploader_wrn_no_content_title">Keine Inhalte zum Hochladen vorhanden</string>
+  <string name="uploader_wrn_no_content_text">Es wurden keine Inhalte empfangen. Es gibt nichts zum Hochladen.</string>
+  <string name="uploader_error_forbidden_content">%1$s darf den freigegebenen Inhalt nicht nutzen.</string>
+  <string name="uploader_info_uploading">Lade hoch</string>
+  <string name="uploader_btn_create_dir_text">Verzeichnis für hochzuladene Dateien erstellen</string>
+  <string name="file_list_empty">Es sind keine Dateien im Verzeichnis vorhanden.\nNeue Dateien können mit der Menüfunktion «Hochladen» hinzugefügt werden.</string>
+  <string name="filedetails_select_file">Klicken Sie auf eine Datei für weitere Informationen.</string>
+  <string name="filedetails_size">Grösse:</string>
+  <string name="filedetails_type">Art:</string>
+  <string name="filedetails_created">Erstellt:</string>
+  <string name="filedetails_modified">Geändert:</string>
+  <string name="filedetails_download">Herunterladen</string>
+  <string name="filedetails_sync_file">Datei aktualisieren</string>
+  <string name="filedetails_redownload">Neu laden</string>
+  <string name="filedetails_renamed_in_upload_msg">Datei wurde wärend des Uploads zu %1$s umbenannt</string>
+  <string name="common_yes">Ja</string>
+  <string name="common_no">Nein</string>
+  <string name="common_ok">OK</string>
+  <string name="common_cancel_download">Download abbrechen</string>
+  <string name="common_cancel_upload">Upload abbrechen</string>
+  <string name="common_cancel">Abbrechen</string>
+  <string name="common_save_exit">Speichern &amp; Schliessen</string>
+  <string name="common_exit">%1$s verlassen</string>
+  <string name="common_error">Fehler</string>
+  <string name="common_loading">Lade...</string>
+  <string name="common_error_unknown">Unbekannter Fehler</string>
+  <string name="about_title">Über</string>
+  <string name="change_password">Passwort ändern</string>
+  <string name="delete_account">Account löschen</string>
+  <string name="create_account">Account erstellen</string>
+  <string name="upload_chooser_title">Dateien hochladen von...</string>
+  <string name="uploader_info_dirname">Ordnername</string>
+  <string name="uploader_upload_in_progress_ticker">Hochladen...</string>
+  <string name="uploader_upload_in_progress_content">%1$d%% Hochladen %2$s</string>
+  <string name="uploader_upload_succeeded_ticker">Hochladen erfolgreich</string>
+  <string name="uploader_upload_succeeded_content_single">%1$s wurde(n) erfolgreich hochgeladen</string>
+  <string name="uploader_upload_succeeded_content_multiple">%1$d Datei(en) wurde(n) erfolgreich hochgeladen</string>
+  <string name="uploader_upload_failed_ticker">Hochladen fehlgeschlagen</string>
+  <string name="uploader_upload_failed_content_single">Hochladen von  %1$s konnte nicht abgeschlossen werden</string>
+  <string name="uploader_upload_failed_content_multiple">Hochladen fehlgeschlagen: %1$d/%2$d Dateien wurden hochgeladen</string>
+  <string name="downloader_download_in_progress_ticker">Herunterladen...</string>
+  <string name="downloader_download_in_progress_content">%1$d%% Herunterladen %2$s</string>
+  <string name="downloader_download_succeeded_ticker">Herunterladen erfolgreich</string>
+  <string name="downloader_download_succeeded_content">%1$s wurde erfolgreich heruntergeladen</string>
+  <string name="downloader_download_failed_ticker">Herunterladen fehlgeschlagen</string>
+  <string name="downloader_download_failed_content">Herunterladen von %1$s konnte nicht abgeschlossen werden</string>
+  <string name="downloader_not_downloaded_yet">Noch nicht heruntergeladen</string>
+  <string name="common_choose_account">Konto auswählen</string>
+  <string name="sync_string_contacts">Kontakte</string>
+  <string name="sync_fail_ticker">Synchronisation fehlgeschlagen</string>
+  <string name="sync_fail_content">Bei der Synchronisation konnte %1$s nicht übertragen werden</string>
+  <string name="sync_fail_content_unauthorized">Ungültiges Passwort für %1$s</string>
+  <string name="sync_conflicts_in_favourites_ticker">Konflikte gefunden</string>
+  <string name="sync_conflicts_in_favourites_content">%1$d Synchronisationsdateien konnten nicht synchronisiert werden.</string>
+  <string name="sync_fail_in_favourites_ticker">Synchronisationsdateien konnten nicht synchronisiert werden.</string>
+  <string name="sync_fail_in_favourites_content">Inhalte von %1$d konnte nicht synchronisiert werden (%2$d Konflikte)</string>
+  <string name="sync_foreign_files_forgotten_ticker">Einige lokale Dateien wurden vergessen</string>
+  <string name="sync_foreign_files_forgotten_content">%1$d Dateien aus dem Verzeichnis %2$s konnten nicht kopiert werden nach</string>
+  <string name="sync_foreign_files_forgotten_explanation">«Mit Version 1.3.16 werden Dateien die von diesem Gerät aus hochgeladen werden in den lokalen Ordner %1$s kopiert um Datenverlust zu vermeiden, wenn eine einzelne Datei mit mehreren Accounts synchronisiert wird.\n\nInfolge dieser Änderung wurden alle Dateien, die mit vorherigen Versionen dieser App hochgeladen wurden, in den Ordner %2$s verschoben. Jedoch ist während der Account-Synchronisation ein Fehler aufgetreten, der das Abschliessen dieses Vorgangs verhindert. Sie können die Datei(en) entweder wie sie sind belassen und den Link zu %3$s entfernen oder die Datei(en) in den %1$s Ordner verschieben und  den Link zu %4$s beibehalten.\n\nUnten befindet sich eine Liste der lokalen Datei(en) und der mit ihnen verbundenen Remote-Datei(en) in %5$s.</string>
+  <string name="foreign_files_move">Verschiebe alle</string>
+  <string name="foreign_files_success">Alle Dateien wurden verschoben</string>
+  <string name="foreign_files_fail">Einige Dateien konnten nicht verschoben werden</string>
+  <string name="foreign_files_local_text">Lokal: %1$s</string>
+  <string name="foreign_files_remote_text">Remote: %1$s</string>
+  <string name="upload_query_move_foreign_files">Es steht nicht genügend Speicherplatz zur Verfügung, um die ausgewählten Dateien in den %1$s Ordner zu kopieren. Möchten Sie sie stattdessen verschieben?</string>
+  <string name="use_ssl">Sichere Verbindung benutzen</string>
+  <string name="location_no_provider">%1$s kann Ihr Gerät nicht verfolgen. Bitte überprüfen Sie Ihre Standorteinstellungen.</string>
+  <string name="pincode_enter_pin_code">Bitte geben Sie Ihre App-PIN ein</string>
+  <string name="pincode_enter_new_pin_code">Bitte geben Sie Ihre neue App-PIN ein</string>
+  <string name="pincode_configure_your_pin">Bitte geben Sie Ihre App-PIN ein</string>
+  <string name="pincode_configure_your_pin_explanation">PIN-Abfrage erfolgt nach Starten der App.</string>
+  <string name="pincode_reenter_your_pincode">Bitte geben Sie Ihre App-PIN erneut ein.</string>
+  <string name="pincode_remove_your_pincode">App-PIN entfernen</string>
+  <string name="pincode_mismatch">Die App-PINs stimmen nicht überein</string>
+  <string name="pincode_wrong">Falsche App-PIN</string>
+  <string name="pincode_removed">Die App-PIN wurde entfernt</string>
+  <string name="pincode_stored">Die App-PIN wurde gespeichert</string>
+  <string name="media_notif_ticker">%1$s Musikplayer</string>
+  <string name="media_state_playing">%1$s (abspielend)</string>
+  <string name="media_state_loading">%1$s (lädt)</string>
+  <string name="media_event_done">%1$s Wiedergabe beendet</string>
+  <string name="media_err_nothing_to_play">Keine Mediadatei gefunden</string>
+  <string name="media_err_no_account">Kein Account angegeben</string>
+  <string name="media_err_not_in_owncloud">Datei nicht in einem gültigen Account</string>
+  <string name="media_err_unsupported">Nicht unterstützter Media-codec</string>
+  <string name="media_err_io">Mediendatei konnte nicht gelesen werden</string>
+  <string name="media_err_malformed">Mediendatei nicht korrekt kodiert</string>
+  <string name="media_err_timeout">Zu lange schon versucht abzuspielen</string>
+  <string name="media_err_invalid_progressive_playback">Mediendatei kann nicht gestreamt werden</string>
+  <string name="media_err_unknown">Die Mediendatei kann nicht mit dem vorinstallierten Media Player abgespielt werden</string>
+  <string name="media_err_security_ex">Sicherheitsfehler beim abspielen von %1$s</string>
+  <string name="media_err_io_ex">Eingabefehler beim Versuch %1$s abzuspielen</string>
+  <string name="media_err_unexpected">Unerwarteter Fehler beim Versuch %1$s abzuspielen</string>
+  <string name="media_previous_description">Vorheriger Titel Button</string>
+  <string name="media_rewind_description">Zurückspulen Button</string>
+  <string name="media_play_pause_description">Abspielen oder Pausieren Button</string>
+  <string name="media_forward_description">Vorspulen Button</string>
+  <string name="media_next_description">Nächster Titel Button</string>
+  <string-array name="prefs_trackmydevice_intervall_keys">
+    <item>15 Minuten</item>
+    <item>30 Minuten</item>
+    <item>60 Minuten</item>
+  </string-array>
+  <string-array name="prefs_trackmydevice_intervall_values">
+    <item>15</item>
+    <item>30</item>
+    <item>60</item>
+  </string-array>
+  <string name="auth_trying_to_login">Anmeldungsversuch...</string>
+  <string name="auth_no_net_conn_title">Keine Netzwerkverbindung</string>
+  <string name="auth_no_net_conn_message">Es konnte keine Netzwerkverbindung gefunden werden, bitte überprü Sie Ihre Internetverbindung.</string>
+  <string name="auth_connect_anyway">Trotzdem verbinden</string>
+  <string name="auth_nossl_plain_ok_title">Sichere Verbindung nicht verfügbar.</string>
+  <string name="auth_nossl_plain_ok_message">Die App konnte keine sichere Verbindung zum Server herstellen. Eine unsichere Verbindung ist verfügbar. Möchten Sie fortfahren oder abbrechen?</string>
+  <string name="auth_connection_established">Verbindung hergestellt</string>
+  <string name="auth_testing_connection">Verbindung testen...</string>
+  <string name="auth_not_configured_title">Fehlerhafte Server Konfiguration</string>
+  <string name="auth_not_configured_message">Es scheint, als wäre Ihre Server-Installation nicht richtig konfiguriert. Bitte kontaktieren Sie Ihren Administrator, um weitere Details zu erhalten.</string>
+  <string name="auth_unknown_error_title">Ein unbekannter Fehler ist aufgetreten!</string>
+  <string name="auth_unknown_error_message">Ein unbekannter Fehler ist aufgetreten. Bitte kontaktieren Sie Ihren Administrator unter Zuhilfenahme der Log-Dateien Ihres Gerätes.</string>
+  <string name="auth_unknown_host_title">Konnte den Host nicht finden.</string>
+  <string name="auth_unknown_host_message">Konnte den eingetragenen Host nicht finden. Bitte prüfen Sie den Hostnamen und die Verfügbarkeit des Servers und versuchen es erneut.</string>
+  <string name="auth_incorrect_path_title">Server-Installation nicht gefunden</string>
+  <string name="auth_incorrect_path_message">Die App konnte den Server unter dem angegebenen Pfad nicht finden. Bitte überprüfen Sie den Pfad und versuchen es erneut.</string>
+  <string name="auth_timeout_title">Der Server braucht zu lange für eine Antwort.</string>
+  <string name="auth_incorrect_address_title">Fehlerhafte URL</string>
+  <string name="auth_ssl_general_error_title">SSL-Initialisierung fehlgeschlagen.</string>
+  <string name="auth_ssl_unverified_server_title">Nichtüberprüfte SSL-Server-Identität</string>
+  <string name="auth_bad_oc_version_title">Unbekannte Server-Version</string>
+  <string name="auth_wrong_connection_title">Konnte keine Verbindung aufbauen.</string>
+  <string name="auth_secure_connection">Sichere Verbindung hergestellt</string>
+  <string name="auth_unauthorized">Falscher Benutzername oder Passwort</string>
+  <string name="auth_oauth_error">Autorisierung nicht erfolgreich</string>
+  <string name="auth_oauth_error_access_denied">Zugriff durch den Autorisierungsserver abgelehnt</string>
+  <string name="auth_not_found">Falsche Pfadangabe</string>
+  <string name="auth_internal">Interner Server Fehler, Fehlercode %1$d</string>
+  <string name="auth_wtf_reenter_URL">Unerwarteter Zustand; bitte geben Sie die URL des Servers nochmals ein</string>
+  <string name="auth_expired_oauth_token_toast">Ihre Autorisierung ist abgelaufen\nBitte Autorisierung nochmals durchführen</string>
+  <string name="auth_expired_basic_auth_toast">Bitte geben Sie Ihr aktuelles Passwort ein</string>
+  <string name="crashlog_message">Die Anwendung ist abgestürzt. Möchten Sie einen Bericht senden?</string>
+  <string name="crashlog_send_report">Bericht senden</string>
+  <string name="crashlog_dont_send_report">Keinen Bericht senden</string>
+  <string name="extensions_avail_title">Erweiterung verfügbar!</string>
+  <string name="extensions_avail_message">Scheinbar unterstützt Ihr Server weitere Erweiterungen. Möchten Sie die verfügbaren Erweiterungen für Android sehen?</string>
+  <string name="fd_keep_in_sync">Datei aktuell halten</string>
+  <string name="common_share">Teilen</string>
+  <string name="common_rename">Umbenennen</string>
+  <string name="common_remove">Löschen</string>
+  <string name="confirmation_remove_alert">Möchten Sie %1$s wirklich löschen?</string>
+  <string name="confirmation_remove_folder_alert">Möchten Sie wirklich %1$s und dessen Inhalte entfernen?</string>
+  <string name="confirmation_remove_local">Nur lokal</string>
+  <string name="confirmation_remove_folder_local">Nur lokale Inhalte</string>
+  <string name="confirmation_remove_remote">Vom Server entfernen</string>
+  <string name="confirmation_remove_remote_and_local">Lokal und auf dem Server</string>
+  <string name="remove_success_msg">Erfolgreich gelöscht</string>
+  <string name="remove_fail_msg">Der Löschvorgang konnte nicht beendet werden</string>
+  <string name="rename_dialog_title">Geben Sie einen neuen Namen ein</string>
+  <string name="rename_local_fail_msg">Die lokale Kopie konnte nicht umbenannt werden. Versuchen Sie es mit einem anderen neuen Namen.</string>
+  <string name="rename_server_fail_msg">Die Umbenennung konnte nicht abgeschlossen werden.</string>
+  <string name="sync_file_fail_msg">Die entfernte Datei konnte nicht überprüft werden</string>
+  <string name="sync_file_nothing_to_do_msg">Dateiinhalte bereits synchronisiert</string>
+  <string name="create_dir_fail_msg">Das Verzeichnis konnte nicht erstellt werden.</string>
+  <string name="wait_a_moment">Bitte warten Sie einen Moment.</string>
+  <string name="filedisplay_unexpected_bad_get_content">Ein unerwartetes Problem ist aufgetreten. Bitte versuchen Sie, die Datei in einer anderen App zu öffnen.</string>
+  <string name="filedisplay_no_file_selected">Es wurde keine Datei ausgewählt.</string>
+  <string name="oauth_host_url">oAuth2 URL</string>
+  <string name="oauth_check_onoff">Anmelden mit oAuth2.</string>
+  <string name="oauth_login_connection">Verbinde mit dem oAuth2-Server...</string>
+  <string name="oauth_code_validation_message">Bitte öffnen Sie einen Web-Browser und gehen Sie zu:\n%1$s.\nBestätigen Sie diesen Code dort:\n%2$s</string>
+  <string name="oauth_connection_url_unavailable">Die Verbindung zu dieser URL ist nicht verfügbar.</string>
+  <string name="ssl_validator_title">Warnung</string>
+  <string name="ssl_validator_header">Die Identität der Website konnte nicht überprüft werden</string>
+  <string name="ssl_validator_reason_cert_not_trusted">- Das Zertifikat des Servers ist nicht vertrauenswürdig</string>
+  <string name="ssl_validator_reason_cert_expired">- Das Zertifikat des Servers ist abgelaufen</string>
+  <string name="ssl_validator_reason_cert_not_yet_valid">- Das Gültigkeitsdatum des Serverzertifikats liegt in der Zukunft</string>
+  <string name="ssl_validator_reason_hostname_not_verified">- Die Adresse stimmt nicht mit dem im Zertifikat angegebenen Hostnamen überein</string>
+  <string name="ssl_validator_certificate_not_available">Das Zertifikat des Servers konnte nicht abgerufen werden</string>
+  <string name="ssl_validator_question">Möchten Sie diesem Zertifikat trotzdem vertrauen?</string>
+  <string name="ssl_validator_not_saved">Das Zertifikat konnte nicht gespeichert werden</string>
+  <string name="ssl_validator_btn_details_see">Details</string>
+  <string name="ssl_validator_btn_details_hide">Ausblenden</string>
+  <string name="ssl_validator_label_subject">Ausgestellt für:</string>
+  <string name="ssl_validator_label_issuer">Ausgestellt von:</string>
+  <string name="ssl_validator_label_CN">Üblicher Name:</string>
+  <string name="ssl_validator_label_O">Organisation:</string>
+  <string name="ssl_validator_label_OU">Organisationseinheit:</string>
+  <string name="ssl_validator_label_C">Land:</string>
+  <string name="ssl_validator_label_ST">Bundesland:</string>
+  <string name="ssl_validator_label_L">Ort:</string>
+  <string name="ssl_validator_label_validity">Gültigkeit:</string>
+  <string name="ssl_validator_label_validity_from">Von:</string>
+  <string name="ssl_validator_label_validity_to">An:</string>
+  <string name="ssl_validator_label_signature">Signatur:</string>
+  <string name="ssl_validator_label_signature_algorithm">Algorithmus:</string>
+  <string name="placeholder_sentence">Dies ist ein Platzhalter</string>
+  <string name="placeholder_filename">platzhalter.txt</string>
+  <string name="placeholder_filetype">PNG Bild</string>
+  <string name="placeholder_filesize">389 KB</string>
+  <string name="placeholder_timestamp">18.05.2012 12:23</string>
+  <string name="placeholder_media_time">12:23:45</string>
+  <string name="instant_upload_on_wifi">Fotos nur über WiFi hochladen</string>
+  <string name="instant_upload_path">/SofortUpload</string>
+  <string name="conflict_title">Konflikt beim Update</string>
+  <string name="conflict_message">Serverdatei %s ist nicht synchronisiert mit der lokalen Datei. Weitermachen bedeutet, dass der Inhalt der Datei auf dem Server ersetzt wird.</string>
+  <string name="conflict_keep_both">Beide behalten</string>
+  <string name="conflict_overwrite">Überschreiben</string>
+  <string name="conflict_dont_upload">Nicht hochladen</string>
+  <string name="preview_image_description">Bildvorschau</string>
+  <string name="preview_image_error_unknown_format">Dieses Bild kann nicht angezeigt werden</string>
+  <string name="preview_image_error_out_of_memory">«Nicht genügend Arbeitsspeicher um dieses Bild anzuzeigen</string>
+  <!--we need to improve the communication of errors to the user-->
+  <string name="error__upload__local_file_not_copied">%1$s konnte nicht in den lokalen %2$s Ordner kopiert werden</string>
+  <string name="actionbar_failed_instant_upload">Sofort Upload fehlgeschlagen»</string>
+  <string name="failed_upload_headline_text">Sofortige Uploads fehlgeschlagen</string>
+  <string name="failed_upload_headline_hint">Zusammenfassung aller fehlgeschlagenen Uploads</string>
+  <string name="failed_upload_all_cb">Alle auswählen</string>
+  <string name="failed_upload_headline_retryall_btn">Versuche alle ausgewählten erneut</string>
+  <string name="failed_upload_headline_delete_all_btn">Lösche alle ausgewählten aus der Uploadwarteschlange</string>
+  <string name="failed_upload_retry_text">Bildupload erneut versuchen:</string>
+  <string name="failed_upload_load_more_images">Lade weitere Bilder</string>
+  <string name="failed_upload_retry_do_nothing_text">Nicht durchgeführt - Nicht online für sofortigen Upload</string>
+  <string name="failed_upload_failure_text">Fehlermeldung:</string>
+  <string name="failed_upload_quota_exceeded_text">Bitte überprüfen Sie Ihre Serverkonfiguration. Vielleicht ist Ihr Nutzungslimit überschritten.</string>
+</resources>

+ 10 - 8
res/values-de-rDE/strings.xml

@@ -45,10 +45,11 @@
   <string name="prefs_log_title_history">Protokollierungsverlauf</string>
   <string name="prefs_log_summary_history">Dies zeigt die gespeicherten Protokollierungen</string>
   <string name="prefs_log_delete_history_button">Verlauf löschen</string>
+  <string name="auth_check_server">Server überprüfen</string>
   <string name="auth_host_url">Adresse des Servers</string>
   <string name="auth_username">Benutzername</string>
   <string name="auth_password">Passwort</string>
-  <string name="auth_register">Ich bin neu bei %1$s</string>
+  <string name="auth_register">Ist %1$s neu für Sie?</string>
   <string name="new_session_uri_error">Falsche URL angegeben</string>
   <string name="new_session_session_name_error">Falscher Sitzungsname</string>
   <string name="sync_string_files">Dateien</string>
@@ -92,6 +93,7 @@
   <string name="common_loading">Lade …</string>
   <string name="common_error_unknown">Unbekannter Fehler</string>
   <string name="about_title">Über</string>
+  <string name="change_password">Passwort ändern</string>
   <string name="delete_account">Account löschen</string>
   <string name="create_account">Account erstellen</string>
   <string name="upload_chooser_title">Dateien hochladen von...</string>
@@ -115,14 +117,14 @@
   <string name="sync_string_contacts">Kontakte</string>
   <string name="sync_fail_ticker">Synchronisation fehlgeschlagen</string>
   <string name="sync_fail_content">Bei der Synchronisation konnte %1$s nicht übertragen werden</string>
-  <string name="sync_fail_content_unauthorized">Ungültige Anmeldeinformationen für %1$s</string>
+  <string name="sync_fail_content_unauthorized">Ungültiges Passwort für %1$s</string>
   <string name="sync_conflicts_in_favourites_ticker">Konflikte gefunden</string>
   <string name="sync_conflicts_in_favourites_content">%1$d Synchronisationsdateien konnten nicht synchronisiert werden.</string>
   <string name="sync_fail_in_favourites_ticker">Synchronisationsdateien konnten nicht synchronisiert werden.</string>
   <string name="sync_fail_in_favourites_content">Inhalte von %1$d konnte nicht synchronisiert werden (%2$d Konflikte)</string>
   <string name="sync_foreign_files_forgotten_ticker">Einige lokale Dateien wurden vergessen</string>
   <string name="sync_foreign_files_forgotten_content">%1$d Dateien aus dem Verzeichnis %2$s konnten nicht kopiert werden nach</string>
-  <string name="sync_foreign_files_forgotten_explanation">\"Mit Version 1.3.16 werden Dateien die von diesem Gerät aus hochgeladen werden in den lokalen Ordner %1$s kopiert um Datenverlust zu vermeiden wenn eine einzelne Datei mit mehreren Accounts synchronisiert wird.\n\nInfolge dieser Änderung wurden alle Dateien die mit vorherigen Versionen dieser App hochgeladen wurden in den Ordner %2$s verschoben. Jedoch ist während der Account-Synchronisation ein Fehler aufgetreten der das Abschließen dieses Vorgangs verhindert. Sie können die Datei(en) entweder wie sie sind belassen und den Link zu %3$s entfernen oder die Datei(en) in den %1$s Ordner verschieben und  den Link zu %4$s beibehalten.\n\nUnten befindet sich eine Liste der lokalen Datei(en) und der mit ihnen verbundenen Remote-Datei(en) in %5$s.</string>
+  <string name="sync_foreign_files_forgotten_explanation">\"Mit Version 1.3.16 werden Dateien die von diesem Gerät aus hochgeladen werden in den lokalen Ordner %1$s kopiert um Datenverlust zu vermeiden, wenn eine einzelne Datei mit mehreren Accounts synchronisiert wird.\n\nInfolge dieser Änderung wurden alle Dateien, die mit vorherigen Versionen dieser App hochgeladen wurden, in den Ordner %2$s verschoben. Jedoch ist während der Account-Synchronisation ein Fehler aufgetreten, der das Abschließen dieses Vorgangs verhindert. Sie können die Datei(en) entweder wie sie sind belassen und den Link zu %3$s entfernen oder die Datei(en) in den %1$s Ordner verschieben und  den Link zu %4$s beibehalten.\n\nUnten befindet sich eine Liste der lokalen Datei(en) und der mit ihnen verbundenen Remote-Datei(en) in %5$s.</string>
   <string name="foreign_files_move">Verschiebe alle</string>
   <string name="foreign_files_success">Alle Dateien wurden verschoben</string>
   <string name="foreign_files_fail">Einige Dateien konnten nicht verschoben werden</string>
@@ -179,7 +181,7 @@
   <string name="auth_nossl_plain_ok_title">Sichere Verbindung nicht verfügbar.</string>
   <string name="auth_nossl_plain_ok_message">Die App konnte keine sichere Verbindung zum Server herstellen. Eine unsichere Verbindung ist verfügbar. Möchten Sie fortfahren oder abbrechen?</string>
   <string name="auth_connection_established">Verbindung hergestellt</string>
-  <string name="auth_testing_connection">Teste Verbindung...</string>
+  <string name="auth_testing_connection">Verbindung testen...</string>
   <string name="auth_not_configured_title">Fehlerhafte Server Konfiguration</string>
   <string name="auth_not_configured_message">Es scheint, als wäre Ihre Server-Installation nicht richtig konfiguriert. Bitte kontaktieren Sie Ihren Administrator, um weitere Details zu erhalten.</string>
   <string name="auth_unknown_error_title">Ein unbekannter Fehler ist aufgetreten!</string>
@@ -195,14 +197,14 @@
   <string name="auth_bad_oc_version_title">Unbekannte Server-Version</string>
   <string name="auth_wrong_connection_title">Konnte keine Verbindung aufbauen.</string>
   <string name="auth_secure_connection">Sichere Verbindung hergestellt</string>
-  <string name="auth_unauthorized">Ungültige Anmeldeinformationen</string>
+  <string name="auth_unauthorized">Falscher Benutzername oder Passwort</string>
   <string name="auth_oauth_error">Autorisierung nicht erfolgreich</string>
   <string name="auth_oauth_error_access_denied">Zugriff durch den Autorisierungsserver abgelehnt</string>
   <string name="auth_not_found">Falsche Pfadangabe</string>
   <string name="auth_internal">Interner Server Fehler, Fehlercode %1$d</string>
   <string name="auth_wtf_reenter_URL">Unerwarteter Zustand; bitte geben Sie die URL des Servers nochmals ein</string>
   <string name="auth_expired_oauth_token_toast">Ihre Autorisierung ist abgelaufen\nBitte Autorisierung nochmals durchführen</string>
-  <string name="auth_expired_basic_auth_toast">Ihre gespeicherten Anmeldeinformationen sind ungültig.\nBitte geben Sie die aktuellen Anmeldeinformationen ein</string>
+  <string name="auth_expired_basic_auth_toast">Bitte geben Sie Ihr aktuelles Passwort ein</string>
   <string name="crashlog_message">Die Anwendung ist abgestürzt. Möchten Sie einen Bericht senden?</string>
   <string name="crashlog_send_report">Bericht senden</string>
   <string name="crashlog_dont_send_report">Keinen Bericht senden</string>
@@ -233,7 +235,7 @@
   <string name="oauth_check_onoff">Anmelden mit oAuth2.</string>
   <string name="oauth_login_connection">Verbinde mit dem oAuth2-Server…</string>
   <string name="oauth_code_validation_message">Bitte öffnen Sie einen Web-Browser und gehen Sie zu:\n%1$s.\nBestätigen Sie diesen Code dort:\n%2$s</string>
-  <string name="oauth_connection_url_unavailable">Die Verbindung zu dieses URL ist nicht verfügbar.</string>
+  <string name="oauth_connection_url_unavailable">Die Verbindung zu dieser URL ist nicht verfügbar.</string>
   <string name="ssl_validator_title">Warnung</string>
   <string name="ssl_validator_header">Die Identität der Website konnte nicht überprüft werden</string>
   <string name="ssl_validator_reason_cert_not_trusted">- Das Zertifikat des Servers ist nicht vertrauenswürdig</string>
@@ -284,7 +286,7 @@
   <string name="failed_upload_headline_delete_all_btn">Lösche alle ausgewählten aus der Uploadwarteschlange</string>
   <string name="failed_upload_retry_text">Bildupload erneut versuchen:</string>
   <string name="failed_upload_load_more_images">Lade weitere Bilder</string>
-  <string name="failed_upload_retry_do_nothing_text">Nicht durchgeführt nicht online für sofortigen Upload</string>
+  <string name="failed_upload_retry_do_nothing_text">Nicht durchgeführt - Nicht online für sofortigen Upload</string>
   <string name="failed_upload_failure_text">Fehlermeldung:</string>
   <string name="failed_upload_quota_exceeded_text">Bitte überprüfen Sie Ihre Serverkonfiguration. Vielleicht ist Ihr Nutzungslimit überschritten.</string>
 </resources>

+ 29 - 1
res/values-de/strings.xml

@@ -13,9 +13,13 @@
   <string name="main_settings">Einstellungen</string>
   <string name="main_tit_accsetup">Account einrichten</string>
   <string name="main_wrn_accsetup">Auf Deinem Gerät sind keine Konten eingerichtet. Bitte erstelle ein Konto, um diese App zu nutzen.</string>
+  <string name="about_android">%1$s Android-App</string>
+  <string name="about_version">Version %1$s</string>
+  <string name="actionbar_sync">Konto aktualisieren</string>
   <string name="actionbar_upload">Datei hochladen</string>
   <string name="actionbar_upload_from_apps">Inhalt von anderen Apps</string>
   <string name="actionbar_upload_files">Dateien</string>
+  <string name="actionbar_open_with">Öffnen mit</string>
   <string name="actionbar_mkdir">Ordner anlegen</string>
   <string name="actionbar_search">Suche</string>
   <string name="actionbar_settings">Einstellungen</string>
@@ -36,10 +40,16 @@
   <string name="prefs_pincode_summary">Schütze Deinen Client</string>
   <string name="prefs_instant_upload">Aktiviert den sofortigen Upload</string>
   <string name="prefs_instant_upload_summary">Lade Deine Fotos von der Kamera sofort hoch</string>
+  <string name="prefs_log_title">Protokollierung aktivieren</string>
+  <string name="prefs_log_summary">Dies wird zur Protokollierung von Problemen genutzt</string>
+  <string name="prefs_log_title_history">Protokollierungsverlauf</string>
+  <string name="prefs_log_summary_history">Dies zeigt die gespeicherten Protokollierungen</string>
+  <string name="prefs_log_delete_history_button">Verlauf löschen</string>
+  <string name="auth_check_server">Überprüfe den Server</string>
   <string name="auth_host_url">Adresse des Servers</string>
   <string name="auth_username">Benutzername</string>
   <string name="auth_password">Passwort</string>
-  <string name="auth_register">Ich bin neu bei %1$s</string>
+  <string name="auth_register">Ist %1$s neu für dich?</string>
   <string name="new_session_uri_error">Falsche URL angegeben</string>
   <string name="new_session_session_name_error">Falscher Sitzungsname</string>
   <string name="sync_string_files">Dateien</string>
@@ -68,6 +78,7 @@
   <string name="filedetails_created">Erstellt:</string>
   <string name="filedetails_modified">Geändert:</string>
   <string name="filedetails_download">Herunterladen</string>
+  <string name="filedetails_sync_file">Datei aktualisieren</string>
   <string name="filedetails_redownload">Neu laden</string>
   <string name="filedetails_renamed_in_upload_msg">Datei wurde wärend des Uploads zu %1$s umbenannt</string>
   <string name="common_yes">Ja</string>
@@ -82,6 +93,7 @@
   <string name="common_loading">Lädt ...</string>
   <string name="common_error_unknown">Unbekannter Fehler</string>
   <string name="about_title">Über</string>
+  <string name="change_password">Passwort ändern</string>
   <string name="delete_account">Account löschen</string>
   <string name="create_account">Account erstellen</string>
   <string name="upload_chooser_title">Dateien hochladen von...</string>
@@ -105,12 +117,14 @@
   <string name="sync_string_contacts">Kontakte</string>
   <string name="sync_fail_ticker">Synchronisation fehlgeschlagen</string>
   <string name="sync_fail_content">Bei der Synchronisation konnte %1$s nicht übertragen werden</string>
+  <string name="sync_fail_content_unauthorized">Falsches Passwort für %1$s</string>
   <string name="sync_conflicts_in_favourites_ticker">Konflikte gefunden</string>
   <string name="sync_conflicts_in_favourites_content">%1$d synchron zu haltende Dateien konnte nicht synchronisiert werden.</string>
   <string name="sync_fail_in_favourites_ticker">Synchron halten schlug fehl.</string>
   <string name="sync_fail_in_favourites_content">Inhalte von %1$d konnte nicht synchronisiert werden (%2$d Konflikte)</string>
   <string name="sync_foreign_files_forgotten_ticker">Einige lokale Dateien wurden vergessen</string>
   <string name="sync_foreign_files_forgotten_content">%1$d Dateien aus dem Verzeichnis %2$s konnten nicht kopiert werden nach</string>
+  <string name="sync_foreign_files_forgotten_explanation">\"Mit Version 1.3.16 werden Dateien die von diesem Gerät aus hochgeladen werden in den lokalen Ordner %1$s kopiert um Datenverlust zu vermeiden, wenn eine einzelne Datei mit mehreren Accounts synchronisiert wird.\n\nInfolge dieser Änderung wurden alle Dateien, die mit vorherigen Versionen dieser App hochgeladen wurden, in den Ordner %2$s verschoben. Jedoch ist während der Account-Synchronisation ein Fehler aufgetreten, der das Abschließen dieses Vorgangs verhindert. Du kannst die Datei(en) entweder wie sie sind belassen und den Link zu %3$s entfernen oder die Datei(en) in den %1$s Ordner verschieben und  den Link zu %4$s beibehalten.\n\nUnten befindet sich eine Liste der lokalen Datei(en) und der mit ihnen verbundenen Remote-Datei(en) in %5$s.</string>
   <string name="foreign_files_move">Verschiebe alle</string>
   <string name="foreign_files_success">Alle Dateien wurden verschoben</string>
   <string name="foreign_files_fail">Einige Dateien konnten nicht verschoben werden</string>
@@ -160,12 +174,14 @@
     <item>30</item>
     <item>60</item>
   </string-array>
+  <string name="auth_trying_to_login">Anmeldungsversuch...</string>
   <string name="auth_no_net_conn_title">Keine Netzwerkverbindung</string>
   <string name="auth_no_net_conn_message">Es konnte keine Netzwerkverbindung gefunden werden, bitte überprüfe Deine Internetverbindung.</string>
   <string name="auth_connect_anyway">Trotzdem verbinden</string>
   <string name="auth_nossl_plain_ok_title">Sichere Verbindung nicht verfügbar.</string>
   <string name="auth_nossl_plain_ok_message">Die App konnte keine sichere Verbindung zum Server herstellen. Eine nicht sichere Verbindung ist nichtsdestotrotz verfügbar. Möchtest Du fortfahren oder abbrechen?</string>
   <string name="auth_connection_established">Verbindung hergestellt</string>
+  <string name="auth_testing_connection">Verbindung testen...</string>
   <string name="auth_not_configured_title">Fehlerhafte Server Konfiguration</string>
   <string name="auth_not_configured_message">Es scheint, als wäre Deine Server-Installation nicht richtig konfiguriert. Bitte kontaktiere Deinen Administrator, um weitere Details zu erhalten.</string>
   <string name="auth_unknown_error_title">Ein unbekannter Fehler ist aufgetreten!</string>
@@ -181,8 +197,14 @@
   <string name="auth_bad_oc_version_title">Unbekannte Server-Version</string>
   <string name="auth_wrong_connection_title">Konnte keine Verbindung aufbauen.</string>
   <string name="auth_secure_connection">Sichere Verbindung hergestellt</string>
+  <string name="auth_unauthorized">Benutzername oder Passwort stimmen nicht!</string>
+  <string name="auth_oauth_error">Autorisierung nicht erfolgreich</string>
+  <string name="auth_oauth_error_access_denied">Zugriff durch den Autorisierungsserver abgelehnt</string>
   <string name="auth_not_found">Falsche Pfadangabe</string>
   <string name="auth_internal">Interner Server Fehler, Fehlercode %1$d</string>
+  <string name="auth_wtf_reenter_URL">Unerwarteter Zustand; bitte gib die URL des Servers nochmals ein</string>
+  <string name="auth_expired_oauth_token_toast">Ihre Autorisierung ist abgelaufen\nBitte Autorisierung nochmals durchführen</string>
+  <string name="auth_expired_basic_auth_toast">Bitte gib dein aktuelles Passwort ein</string>
   <string name="crashlog_message">Die Andwendung ist abgestürzt. Möchtest Du einen Bericht senden?</string>
   <string name="crashlog_send_report">Bericht senden</string>
   <string name="crashlog_dont_send_report">Keinen Bericht senden</string>
@@ -209,6 +231,11 @@
   <string name="wait_a_moment">Bitte warte einen Moment.</string>
   <string name="filedisplay_unexpected_bad_get_content">Ein unerwartetes Problem ist aufgetreten. Bitte versuche, die Datei in einer anderen App zu öffnen</string>
   <string name="filedisplay_no_file_selected">Es wurde keine Datei ausgewählt.</string>
+  <string name="oauth_host_url">oAuth2 URL</string>
+  <string name="oauth_check_onoff">Anmelden mit oAuth2.</string>
+  <string name="oauth_login_connection">Verbinde mit dem oAuth2-Server.</string>
+  <string name="oauth_code_validation_message">Bitte öffne einen Web-Browser und gehe zu:\n%1$s.\nBestätige diesen Code dort:\n%2$s</string>
+  <string name="oauth_connection_url_unavailable">Die Verbindung zu dieser URL ist nicht verfügbar.</string>
   <string name="ssl_validator_title">Warnung</string>
   <string name="ssl_validator_header">Die Identität der Website konnte nicht überprüft werden</string>
   <string name="ssl_validator_reason_cert_not_trusted">- Das Zertifikat des Servers ist nicht vertrauenswürdig</string>
@@ -259,6 +286,7 @@
   <string name="failed_upload_headline_delete_all_btn">Auswahl aus der Upload Warteschlange entfernen</string>
   <string name="failed_upload_retry_text">Hochladen des Bildes erneut versuchen:</string>
   <string name="failed_upload_load_more_images">Weitere Bilder laden</string>
+  <string name="failed_upload_retry_do_nothing_text">Nicht durchgeführt - Nicht online für sofortigen Upload</string>
   <string name="failed_upload_failure_text">Fehlermeldung:</string>
   <string name="failed_upload_quota_exceeded_text">Bitte überprüfe Deine Servereinstellungen. Eventuell ist Dein Nutzungslimit überschritten.</string>
 </resources>

+ 31 - 1
res/values-el/strings.xml

@@ -13,9 +13,12 @@
   <string name="main_settings">Ρυθμίσεις</string>
   <string name="main_tit_accsetup">Ρύθμιση Λογαριασμού</string>
   <string name="main_wrn_accsetup">Δεν υπάρχουν λογαριασμοί ownCloud στη συσκευή σας. Για να χρησιμοποιήσετε την εφαρμογή, πρέπει να δημιουργήσετε ένα.</string>
+  <string name="about_android">%1$s Εφαρμογή για Android</string>
+  <string name="about_version">έκδοση %1$s</string>
   <string name="actionbar_upload">Μεταφόρτωση</string>
   <string name="actionbar_upload_from_apps">Περιεχόμενο από άλλες εφαρμογές</string>
   <string name="actionbar_upload_files">Αρχεία</string>
+  <string name="actionbar_open_with">Άνοιγμα με</string>
   <string name="actionbar_mkdir">Δημιουργία καταλόγου</string>
   <string name="actionbar_search">Αναζήτηση</string>
   <string name="actionbar_settings">Ρυθμίσεις</string>
@@ -36,10 +39,11 @@
   <string name="prefs_pincode_summary">Προστατέψτε την ownCloud εφαρμογή</string>
   <string name="prefs_instant_upload">Ενεργοποιήστε την άμεση μεταφόρτωση</string>
   <string name="prefs_instant_upload_summary">Άμεση μεταφόρτωση των φωτογραφιών που τραβάει η φωτογρ. μηχανή</string>
+  <string name="prefs_log_delete_history_button">Διαγραφή Ιστορικού</string>
+  <string name="auth_check_server">Έλεγχος Διακομιστή</string>
   <string name="auth_host_url">Διεύθυνση εξυπηρέτη</string>
   <string name="auth_username">Όνομα χρήστη</string>
   <string name="auth_password">Συνθηματικό</string>
-  <string name="auth_register">Είμαι νέος στο ownCloud</string>
   <string name="new_session_uri_error">Εσφαλμένη διεύθυνση URL</string>
   <string name="new_session_session_name_error">Εσφαλμένο όνομα συνεδρίας</string>
   <string name="sync_string_files">Αρχεία</string>
@@ -51,6 +55,7 @@
   <string name="setup_title">Σύνδεση στο ownCloud σας</string>
   <string name="setup_btn_connect">Σύνδεση</string>
   <string name="uploader_btn_upload_text">Μεταφόρτωση</string>
+  <string name="uploader_top_message">Επιλέξτε κατάλογο ανεβάσματος</string>
   <string name="uploader_wrn_no_account_title">Δεν βρέθηκε λογαριασμός</string>
   <string name="uploader_wrn_no_account_text">Δεν υπάρχουν λογαριασμοί ownCloud στη συσκευή σας. Παρακαλώ ρυθμίστε πρώτα ένα λογαριασμό.</string>
   <string name="uploader_wrn_no_account_setup_btn_text">Ρύθμιση</string>
@@ -67,6 +72,7 @@
   <string name="filedetails_created">Δημιουργήθηκε:</string>
   <string name="filedetails_modified">Τροποποιήθηκε:</string>
   <string name="filedetails_download">Λήψη</string>
+  <string name="filedetails_sync_file">Ανανέωση αρχείου</string>
   <string name="filedetails_redownload">Κατέβασμα ξανά</string>
   <string name="filedetails_renamed_in_upload_msg">Το αρχείο μετονομάστηκε σε %1$s κατά την μεταφόρτωση</string>
   <string name="common_yes">Ναι</string>
@@ -81,6 +87,7 @@
   <string name="common_loading">Φόρτωση ...</string>
   <string name="common_error_unknown">Άγνωστο σφάλμα</string>
   <string name="about_title">Σχετικά</string>
+  <string name="change_password">Αλλαγή συνθηματικού</string>
   <string name="delete_account">Διαγραφή λογαριασμού</string>
   <string name="create_account">Δημιουργία λογαριασμού</string>
   <string name="upload_chooser_title">Μεταφόρτωση από ...</string>
@@ -103,6 +110,7 @@
   <string name="sync_string_contacts">Επαφές</string>
   <string name="sync_fail_ticker">Ο συγχρονισμός απέτυχε</string>
   <string name="sync_fail_content">Ο συγχρονισμός του %1$s  δεν μπόρεσε να ολοκληρωθεί</string>
+  <string name="sync_fail_content_unauthorized">Λάθος κωδικός για %1$s</string>
   <string name="sync_conflicts_in_favourites_ticker">Βρέθηκαν διενέξεις</string>
   <string name="sync_conflicts_in_favourites_content">%1$d αρχεία σε αναμονή συγχρονισμού, δεν μπόρεσαν να συγχρονιστούν</string>
   <string name="sync_fail_in_favourites_ticker">Τα αρχεία σε αναμονή συγχρονισμού απέτυχαν</string>
@@ -127,6 +135,12 @@
   <string name="pincode_wrong">Εσφαλμένο PIN της εφαρμογής ownCloud</string>
   <string name="pincode_removed">Αφαιρέθηκε το PIN της εφαρμογής ownCloud</string>
   <string name="pincode_stored">Το PIN της εφαρμογής ownCloud αποθηκεύτηκε</string>
+  <string name="media_err_nothing_to_play">Δεν βρέθηκε αρχείο πολυμέσων</string>
+  <string name="media_err_no_account">Δεν δόθηκε λογαριασμός</string>
+  <string name="media_err_io">Το αρχείο πολυμέσων δεν μπόρεσε να διαβαστεί</string>
+  <string name="media_err_malformed">Το αρχείο πολυμέσων δεν είναι σωστά κοδικοποιημένο</string>
+  <string name="media_play_pause_description">Κουμπί αναπαραγωγής ή παύσης</string>
+  <string name="media_next_description">Κουμπί επόμενου κομματιού</string>
   <string-array name="prefs_trackmydevice_intervall_keys">
     <item>15 Λεπτά</item>
     <item>30 Λεπτά</item>
@@ -137,12 +151,14 @@
     <item>30</item>
     <item>60</item>
   </string-array>
+  <string name="auth_trying_to_login">Προσπάθεια σύνδεσης...</string>
   <string name="auth_no_net_conn_title">Δεν υπάρχει σύνδεση στο δίκτυο</string>
   <string name="auth_no_net_conn_message">Δεν ανιχνεύθηκε σύνδεση δικτύου, ελέγξτε την σύνδεση στο Internet και προσπαθήστε ξανά.</string>
   <string name="auth_connect_anyway">Συνδεθείτε παρ\' αυτά</string>
   <string name="auth_nossl_plain_ok_title">Μη διαθέσιμη ασφαλής σύνδεση.</string>
   <string name="auth_nossl_plain_ok_message">Αδυναμία καθιέρωσης ασφαλούς σύνδεσης με τον διακομιστή. Παρόλο που είναι διαθέσιμη μη ασφαλή σύνδεση. Μπορείτε να συνεχίσετε ή να ακυρώσετε.</string>
   <string name="auth_connection_established">Επετεύχθη σύνδεση</string>
+  <string name="auth_testing_connection">Έλεγχος σύνδεσης...</string>
   <string name="auth_not_configured_title">Λανθασμένες ρυθμίσεις ownCloud</string>
   <string name="auth_not_configured_message">Φαίνεται ότι το ownCloud δεν είναι σωστά ρυθμισμένο. Παρακαλώ επικοινωνήστε με τον διαχειριστή σας, για περισσότερες πληροφορίες. </string>
   <string name="auth_unknown_error_title">Παρουσιάστηκε άγνωστο σφάλμα</string>
@@ -158,8 +174,11 @@
   <string name="auth_bad_oc_version_title">Μη αναγνωρίσιμη έκδοση διακομιστή ownCloud</string>
   <string name="auth_wrong_connection_title">Δεν ήταν δυνατή η σύνδεση</string>
   <string name="auth_secure_connection">Επιτεύχθηκε ασφαλής σύνδεση</string>
+  <string name="auth_unauthorized">Λάθος όνομα χρήστη ή κωδικός</string>
+  <string name="auth_oauth_error">Η πιστοποίηση απέτυχε</string>
   <string name="auth_not_found">Δόθηκε εσφαλμένη διαδρομή</string>
   <string name="auth_internal">Εσωτερικό σφάλμα διακομιστή, κωδικός %1$d</string>
+  <string name="auth_expired_basic_auth_toast">Παρακαλώ είσάγετε τον τρέχοντα κωδικό</string>
   <string name="crashlog_message">Η εφαρμογή τερματίστηκε ξαφνικά. Θα θέλατε να υποβάλετε αναφορά σφάλματος;</string>
   <string name="crashlog_send_report">Αποστολή αναφοράς</string>
   <string name="crashlog_dont_send_report">Να μην αποσταλεί αναφορά</string>
@@ -211,6 +230,11 @@
   <string name="ssl_validator_label_signature">Υπογραφή:</string>
   <string name="ssl_validator_label_signature_algorithm">Αλγόριθμος:</string>
   <string name="placeholder_sentence">Αυτό είναι ένα σημείο κράτησης θέσης</string>
+  <string name="placeholder_filename">placeholder.txt</string>
+  <string name="placeholder_filetype">Εικόνα PNG</string>
+  <string name="placeholder_filesize">389 KB</string>
+  <string name="placeholder_timestamp">2012/05/18 12:23 PM</string>
+  <string name="placeholder_media_time">12:23:45</string>
   <string name="instant_upload_on_wifi">Μεταφόρτωση εικόνων μόνο μέσω WiFi</string>
   <string name="instant_upload_path">/InstantUpload</string>
   <string name="conflict_title">Ενημέρωση σύγκρουσης</string>
@@ -218,6 +242,12 @@
   <string name="conflict_keep_both">Διατήρηση και των δύο</string>
   <string name="conflict_overwrite">Αντικατάσταση</string>
   <string name="conflict_dont_upload">Δεν μεταφορτώθηκε</string>
+  <string name="preview_image_description">Προεπισκόπηση εικόνας</string>
+  <string name="preview_image_error_unknown_format">Αυτή η εικόνε δεν μπόρεσε να προβληθεί</string>
+  <string name="preview_image_error_out_of_memory">\"Δεν υπάρχει αρκετή μνήμη για την προβολή αυτής της εικόνας</string>
   <!--we need to improve the communication of errors to the user-->
   <string name="error__upload__local_file_not_copied">%1$s δεν μπορεσε να αντιγραφθεί στον %2$s τοπικο καταλόγο </string>
+  <string name="failed_upload_all_cb">επιλογή όλων</string>
+  <string name="failed_upload_load_more_images">Φόρτωση περισσότερων εικόνων</string>
+  <string name="failed_upload_failure_text">Μήνυμα Αποτυχίας:</string>
 </resources>

+ 3 - 1
res/values-eo/strings.xml

@@ -38,7 +38,6 @@
   <string name="auth_host_url">Servila adreso</string>
   <string name="auth_username">Uzantonomo</string>
   <string name="auth_password">Pasvorto</string>
-  <string name="auth_register">Mi estas nova ĉe ownCloud</string>
   <string name="new_session_uri_error">Malĝusta URL doniĝis</string>
   <string name="new_session_session_name_error">Malĝusta sesionomo</string>
   <string name="sync_string_files">Dosieroj</string>
@@ -78,6 +77,7 @@
   <string name="common_error">Eraro</string>
   <string name="common_error_unknown">Nekonata eraro</string>
   <string name="about_title">Pri</string>
+  <string name="change_password">Ŝanĝi la pasvorton</string>
   <string name="delete_account">Forigi konton</string>
   <string name="create_account">Krei konton</string>
   <string name="upload_chooser_title">Alŝuti dosieron el...</string>
@@ -125,11 +125,13 @@
     <item>30</item>
     <item>60</item>
   </string-array>
+  <string name="auth_trying_to_login">Provante ensaluti...</string>
   <string name="auth_no_net_conn_title">Neniu reta konekto</string>
   <string name="auth_no_net_conn_message">Neniu reta konekto detektiĝis; kontrolu vian Interretan konekton kaj provu denove.</string>
   <string name="auth_connect_anyway">Konekti ĉiuokaze</string>
   <string name="auth_nossl_plain_ok_title">Sekura konekto ne haveblas.</string>
   <string name="auth_connection_established">Konekto stariĝis</string>
+  <string name="auth_testing_connection">Testante konekton...</string>
   <string name="auth_not_configured_title">Malĝuste formita ownCloud-agordo</string>
   <string name="auth_unknown_error_title">Nekonata eraro okazis</string>
   <string name="auth_unknown_error_message">Nekonata eraro okazis. Bonvolu kontakti verkintojn kaj inkluzivigi registrojn el via aparato.</string>

+ 7 - 5
res/values-es-rAR/strings.xml

@@ -45,10 +45,11 @@
   <string name="prefs_log_title_history">Historia del Registro</string>
   <string name="prefs_log_summary_history">Esto muestra los registros grabados</string>
   <string name="prefs_log_delete_history_button">Eliminar Historial</string>
+  <string name="auth_check_server">Verificar Servidor</string>
   <string name="auth_host_url">Dirección del servidor</string>
   <string name="auth_username">Nombre de usuario</string>
   <string name="auth_password">Contraseña</string>
-  <string name="auth_register">Soy nuevo en %1$s</string>
+  <string name="auth_register">¿Sos nuevo para %1$s?</string>
   <string name="new_session_uri_error">La URL es incorrecta</string>
   <string name="new_session_session_name_error">Nombre de sesión equivocado</string>
   <string name="sync_string_files">Archivos</string>
@@ -92,6 +93,7 @@
   <string name="common_loading">Cargando ...</string>
   <string name="common_error_unknown">Error desconocido</string>
   <string name="about_title">Acerca de</string>
+  <string name="change_password">Cambiar contraseña</string>
   <string name="delete_account">Eliminar cuenta</string>
   <string name="create_account">Crear cuenta</string>
   <string name="upload_chooser_title">Subir desde ...</string>
@@ -115,7 +117,7 @@
   <string name="sync_string_contacts">Contactos</string>
   <string name="sync_fail_ticker">Error en la sincronización</string>
   <string name="sync_fail_content">No se pudo completar la sincronización de %1$s </string>
-  <string name="sync_fail_content_unauthorized">Credenciales inválidas para %1$s</string>
+  <string name="sync_fail_content_unauthorized">Contraseña no válida para %1$s</string>
   <string name="sync_conflicts_in_favourites_ticker">Se encontraron conflictos</string>
   <string name="sync_conflicts_in_favourites_content">No se pudieron sincronizar %1$d archivos</string>
   <string name="sync_fail_in_favourites_ticker">Fallo la sincronización de archivos</string>
@@ -172,7 +174,7 @@
     <item>30</item>
     <item>60</item>
   </string-array>
-  <string name="auth_trying_to_login">Intentando iniciar sesión...</string>
+  <string name="auth_trying_to_login">Intentado iniciar sesión...</string>
   <string name="auth_no_net_conn_title">Sin conexión de red</string>
   <string name="auth_no_net_conn_message">No se ha detectado una conexión de red, revisá tu conexión a internet e intentá nuevamente.</string>
   <string name="auth_connect_anyway">Conectar de todos modos</string>
@@ -195,14 +197,14 @@
   <string name="auth_bad_oc_version_title">No es posible reconocer la versión del servidor</string>
   <string name="auth_wrong_connection_title">No fue posible establecer la conexión</string>
   <string name="auth_secure_connection">Conexión segura establecida</string>
-  <string name="auth_unauthorized">Credenciales inválidas</string>
+  <string name="auth_unauthorized">Nombre de usuario o contraseña no válidas</string>
   <string name="auth_oauth_error">Autorización no satisfactoria</string>
   <string name="auth_oauth_error_access_denied">Acceso denegado por el servidor de autorización</string>
   <string name="auth_not_found">Ruta incorrecta</string>
   <string name="auth_internal">Error interno en el servidor, código %1$d</string>
   <string name="auth_wtf_reenter_URL">Estado inesperado; por favor, introducí la URL del servidor de nuevo</string>
   <string name="auth_expired_oauth_token_toast">Tu autorización expiró. Por favor, autorizá de nuevo</string>
-  <string name="auth_expired_basic_auth_toast">Tus credenciales guardadas son inválidas. Por favor, introducí tus credenciales actuales</string>
+  <string name="auth_expired_basic_auth_toast">Por favor, ingresá tu contraseña actual</string>
   <string name="crashlog_message">La aplicación finalizó inesperadamente. ¿Querés mandar un reporte de error?</string>
   <string name="crashlog_send_report">Enviar reporte</string>
   <string name="crashlog_dont_send_report">No enviar reporte</string>

+ 8 - 6
res/values-es/strings.xml

@@ -45,10 +45,11 @@
   <string name="prefs_log_title_history">Historia del Registro</string>
   <string name="prefs_log_summary_history">Esto muestra los registros grabados</string>
   <string name="prefs_log_delete_history_button">Eliminar Historial</string>
+  <string name="auth_check_server">Compruebe el servidor.</string>
   <string name="auth_host_url">Dirección del servidor</string>
   <string name="auth_username">Nombre de usuario</string>
   <string name="auth_password">Contraseña</string>
-  <string name="auth_register">Soy nuevo en %1$s</string>
+  <string name="auth_register">New to %1$s?</string>
   <string name="new_session_uri_error">La URL dada es incorrecta</string>
   <string name="new_session_session_name_error">Nombre de sesión incorrecto</string>
   <string name="sync_string_files">Archivos</string>
@@ -92,6 +93,7 @@
   <string name="common_loading">Cargando ...</string>
   <string name="common_error_unknown">Error desconocido</string>
   <string name="about_title">Acerca de</string>
+  <string name="change_password">Cambiar contraseña</string>
   <string name="delete_account">Eliminar cuenta</string>
   <string name="create_account">Crear cuenta</string>
   <string name="upload_chooser_title">Subir</string>
@@ -115,7 +117,7 @@
   <string name="sync_string_contacts">Contactos</string>
   <string name="sync_fail_ticker">Falló la sincronización</string>
   <string name="sync_fail_content">La sincronización de %1$s s no se pudo completar</string>
-  <string name="sync_fail_content_unauthorized">Credenciales inválidas para %1$s</string>
+  <string name="sync_fail_content_unauthorized">Contraseña no válida para %1$s</string>
   <string name="sync_conflicts_in_favourites_ticker">Se encontraron conflictos</string>
   <string name="sync_conflicts_in_favourites_content">Falló la sincronización de contenidos de %1$d ficheros</string>
   <string name="sync_fail_in_favourites_ticker">Fallos en la sincronización de contenidos</string>
@@ -172,7 +174,7 @@
     <item>30</item>
     <item>60</item>
   </string-array>
-  <string name="auth_trying_to_login">Intentando iniciar sesión...</string>
+  <string name="auth_trying_to_login">Intentado iniciar sesión...</string>
   <string name="auth_no_net_conn_title">Sin conexión de red</string>
   <string name="auth_no_net_conn_message">No se ha detectado una conexión de red, chequea tu conexión a internet e intenta nuevamente.</string>
   <string name="auth_connect_anyway">Conectar de todos modos</string>
@@ -195,14 +197,14 @@
   <string name="auth_bad_oc_version_title">No se reconoce  la versión del servidor </string>
   <string name="auth_wrong_connection_title">No se ha podido establecer la conexión</string>
   <string name="auth_secure_connection">Conexión segura establecida</string>
-  <string name="auth_unauthorized">Credenciales inválidas</string>
+  <string name="auth_unauthorized">Nombre de usuario o contraseña incorrecta</string>
   <string name="auth_oauth_error">Autorización no satisfactoria</string>
   <string name="auth_oauth_error_access_denied">Acceso denegado por servidor de autorización</string>
   <string name="auth_not_found">Ruta errónea</string>
   <string name="auth_internal">Error interno en el servidor, código %1$d</string>
   <string name="auth_wtf_reenter_URL">Estado inesperado; por favor, introduzca la URL del servidor de nuevo</string>
-  <string name="auth_expired_oauth_token_toast">Su autorización ha expirado.\nPor favor, autorice de nuevo</string>
-  <string name="auth_expired_basic_auth_toast">Sus credenciales guardadas son inválidas.\nPor favor, introduzca sus credenciales actuales</string>
+  <string name="auth_expired_oauth_token_toast">Su autorización ha expirado. Por favor, autorice de nuevo</string>
+  <string name="auth_expired_basic_auth_toast">Por favor, introduzca la contraseña actual.</string>
   <string name="crashlog_message">La aplicación finalizó inesperadamente. ¿Desea enviar un reporte de error?</string>
   <string name="crashlog_send_report">Enviar reporte</string>
   <string name="crashlog_dont_send_report">No enviar reporte</string>

+ 28 - 1
res/values-et-rEE/strings.xml

@@ -13,9 +13,13 @@
   <string name="main_settings">Seaded</string>
   <string name="main_tit_accsetup">Konto seadistamine</string>
   <string name="main_wrn_accsetup">Sinu seadmes pole ühtegi ownCloudi kontot. Selle rakenduse kasutamiseks pead sa ühe looma.</string>
+  <string name="about_android">%1$s Android App</string>
+  <string name="about_version">versioon %1$s</string>
+  <string name="actionbar_sync">Värskenda kontot</string>
   <string name="actionbar_upload">Lae fail üles</string>
   <string name="actionbar_upload_from_apps">Sisu teistest rakendustest</string>
   <string name="actionbar_upload_files">Failid</string>
+  <string name="actionbar_open_with">Ava rakendusega</string>
   <string name="actionbar_mkdir">Loo kaust</string>
   <string name="actionbar_search">Otsi</string>
   <string name="actionbar_settings">Seaded</string>
@@ -36,10 +40,16 @@
   <string name="prefs_pincode_summary">Kaitse oma ownCloudi klienti</string>
   <string name="prefs_instant_upload">Luba kohene üleslaadimine</string>
   <string name="prefs_instant_upload_summary">Lae kaamera poolt tehtud fotod automaatselt üles</string>
+  <string name="prefs_log_title">Luba logimine</string>
+  <string name="prefs_log_summary">Kasutatakse probleemide logimiseks</string>
+  <string name="prefs_log_title_history">Logi ajalugu</string>
+  <string name="prefs_log_summary_history">See näitab salvestatud logisid</string>
+  <string name="prefs_log_delete_history_button">Kustuta ajaludu</string>
+  <string name="auth_check_server">Kontrolli serverit</string>
   <string name="auth_host_url">Serveri aadress</string>
   <string name="auth_username">Kasutajanimi</string>
   <string name="auth_password">Parool</string>
-  <string name="auth_register">Olen uus ownCloudi kasutaja</string>
+  <string name="auth_register">Uus %1$s kasutaja?</string>
   <string name="new_session_uri_error">Anti vale URL</string>
   <string name="new_session_session_name_error">Vale sessiooni nimi</string>
   <string name="sync_string_files">Failid</string>
@@ -68,6 +78,7 @@
   <string name="filedetails_created">Loodud:</string>
   <string name="filedetails_modified">Muudetud:</string>
   <string name="filedetails_download">Lae alla</string>
+  <string name="filedetails_sync_file">Värskenda faili</string>
   <string name="filedetails_redownload">Lae uuesti alla</string>
   <string name="filedetails_renamed_in_upload_msg">Fail nimetati üleslaadimise käigus ümber %1$ </string>
   <string name="common_yes">Jah</string>
@@ -82,6 +93,7 @@
   <string name="common_loading">Laadin ...</string>
   <string name="common_error_unknown">Tundmatu viga</string>
   <string name="about_title">Info</string>
+  <string name="change_password">Muuda parooli</string>
   <string name="delete_account">Kustuta konto</string>
   <string name="create_account">Loo konto</string>
   <string name="upload_chooser_title">Lae fail üles kohast ...</string>
@@ -105,12 +117,14 @@
   <string name="sync_string_contacts">Kontaktid</string>
   <string name="sync_fail_ticker">Sünkroniseerimine ebaõnnestus</string>
   <string name="sync_fail_content">%1$s sünkroniseerimise lõpetamine ebaõnnestus</string>
+  <string name="sync_fail_content_unauthorized">Vigane parool %1$s jaoks</string>
   <string name="sync_conflicts_in_favourites_ticker">Leite konflikte</string>
   <string name="sync_conflicts_in_favourites_content">%1$d sünkroniseeritavad faile ei suudeta sünkroniseerida</string>
   <string name="sync_fail_in_favourites_ticker">Sünkroniseeritavad failid ebaõnnestusid</string>
   <string name="sync_fail_in_favourites_content">Faili %1$d sisu ei suudeta sünkroniseerida (konflikt %2$d)</string>
   <string name="sync_foreign_files_forgotten_ticker">Osad kohalikud faili ununesid</string>
   <string name="sync_foreign_files_forgotten_content">%1$d faili %2$s kataloogist ei suudeta kopeerida</string>
+  <string name="sync_foreign_files_forgotten_explanation">Alates versioonist 1.3.16 failid, mis on üles laetud kopeeritakse kohalikku kataloogi %1$s vältimaks andmete kadu, kui ühte faili sünkroniseeritakse mitmelt kontolt.\n\nSelle muudatusega seoses kõik failid, mis on üles laetud rakenduse vanemate versioonidega, kopeeriti kataloogi %2$s. Selle tegevuse peatas viga, mis tekkis konto sünkroniseerimise käigus. Sa saad jätta failid nagu nad on ning eemaldata viide %3$s või tõsta failid %1$s kataloogi ja säilitada viide %4$s.\n\nAllpool on loend kohalikest failidest ning serveris asuvatest failidest %5$s millele nad viitavad.</string>
   <string name="foreign_files_move">Tõsta ümber</string>
   <string name="foreign_files_success">Kõik failid tõsteti ümber</string>
   <string name="foreign_files_fail">Osasid faile ei saa ümber tõsta</string>
@@ -160,12 +174,14 @@
     <item>30</item>
     <item>60</item>
   </string-array>
+  <string name="auth_trying_to_login">Proovitakse sisse logida...</string>
   <string name="auth_no_net_conn_title">Võrguühendust pole</string>
   <string name="auth_no_net_conn_message">Internetiühendust ei leitud, kontrolli oma interneti ühendust ja proovi uuesti.</string>
   <string name="auth_connect_anyway">Ühenda sellegipoolest</string>
   <string name="auth_nossl_plain_ok_title">Turvaline ühendus pole saadaval</string>
   <string name="auth_nossl_plain_ok_message">Rakendus ei suutnud serveriga turvalist ühendust luua. Kuid saadaval on mitteturvaline ühendus. Sa võid jätkata või loobuda.</string>
   <string name="auth_connection_established">Saadi ühendus</string>
+  <string name="auth_testing_connection">Ühenduse testimine...</string>
   <string name="auth_not_configured_title">Vigases vormingus ownCloud seadistus</string>
   <string name="auth_not_configured_message">Näib, et sinu ownCloud pole korralikult seadistatud. Lisainfo saamiseks võta ühendust oma administraatoriga.</string>
   <string name="auth_unknown_error_title">Tekkis tundmatu tõrge!</string>
@@ -181,8 +197,14 @@
   <string name="auth_bad_oc_version_title">Tundmatu ownCloud serveri versioon</string>
   <string name="auth_wrong_connection_title">Ühenduse loomine ebaõnnestus</string>
   <string name="auth_secure_connection">Saavutati turvaline ühendus</string>
+  <string name="auth_unauthorized">Vale kasutajanimi või parool</string>
+  <string name="auth_oauth_error">Autoriseerimine ebaõnnestus</string>
+  <string name="auth_oauth_error_access_denied">Ligipääs keelatud autoriseeriva serveri poolt</string>
   <string name="auth_not_found">Sisestati vale asukoht</string>
   <string name="auth_internal">Sisemine serveri viga, kood %1$d</string>
+  <string name="auth_wtf_reenter_URL">Ootamatu seisund; palun sisesta serveri URL uuesti</string>
+  <string name="auth_expired_oauth_token_toast">Sinu autoriseering on aegunud.⏎\nPalun autoriseeri uuesti</string>
+  <string name="auth_expired_basic_auth_toast">Palun sisesta kehtiv parool</string>
   <string name="crashlog_message">Rakdnus suleti ootamatult. Kas sa sooviksid saata kokkujooksmise kohta teavitust arendajale?</string>
   <string name="crashlog_send_report">Saada veateade</string>
   <string name="crashlog_dont_send_report">Ära saada veateadet</string>
@@ -209,6 +231,11 @@
   <string name="wait_a_moment">Oota hetk</string>
   <string name="filedisplay_unexpected_bad_get_content">Ootamatu tõrge ; palun kasuta faili valimiseks mõnda teist rakendust</string>
   <string name="filedisplay_no_file_selected">Ühtegi faili pole valitud</string>
+  <string name="oauth_host_url">oAuth2 URL</string>
+  <string name="oauth_check_onoff">Logi sisse oAuth2 kasutades.</string>
+  <string name="oauth_login_connection">Ühendun oAuth2 serverisse...</string>
+  <string name="oauth_code_validation_message">Palun ava veebibrauser ning mine:⏎\n%1$s.⏎\nKontrolli seda koodi seal:\n%2$s</string>
+  <string name="oauth_connection_url_unavailable">Ühendus sellel aadressile pole saadaval</string>
   <string name="ssl_validator_title">Hoiatus</string>
   <string name="ssl_validator_header">Saidi identiteeti ei suudetud kinnitada</string>
   <string name="ssl_validator_reason_cert_not_trusted">- Serveri sertifikaat pole usaldusväärne</string>

+ 18 - 2
res/values-eu/strings.xml

@@ -45,10 +45,11 @@
   <string name="prefs_log_title_history">Erregistro historia</string>
   <string name="prefs_log_summary_history">Honek gordetako erregistroak bistaratzen ditu.</string>
   <string name="prefs_log_delete_history_button">Ezabatu historia</string>
+  <string name="auth_check_server">Egiaztatu zerbitzaria</string>
   <string name="auth_host_url">Zerbitzariaren helbidea</string>
   <string name="auth_username">Erabiltzaile izena</string>
   <string name="auth_password">Pasahitza</string>
-  <string name="auth_register">Berria naiz ownCloud-en</string>
+  <string name="auth_register">Berria %1$s-n?</string>
   <string name="new_session_uri_error">Emandako URLa gaizki dago</string>
   <string name="new_session_session_name_error">Saio izen okerra</string>
   <string name="sync_string_files">Fitxategiak</string>
@@ -92,6 +93,7 @@
   <string name="common_loading">Kargatzen ...</string>
   <string name="common_error_unknown">Errore ezezaguna</string>
   <string name="about_title">Honi buruz</string>
+  <string name="change_password">Aldatu pasahitza</string>
   <string name="delete_account">Ezabatu kontua</string>
   <string name="create_account">Sortu kontua</string>
   <string name="upload_chooser_title">Igo fitxategia hemendik ...</string>
@@ -115,6 +117,7 @@
   <string name="sync_string_contacts">Kontaktuak</string>
   <string name="sync_fail_ticker">Sinkronizazioak huts egin du</string>
   <string name="sync_fail_content">%1$s fitxategiaren sinkronizazioa ezin da burutu</string>
+  <string name="sync_fail_content_unauthorized">Okerreko pasahitza %1$s-rako</string>
   <string name="sync_conflicts_in_favourites_ticker">Gatazkak aurkituak </string>
   <string name="sync_conflicts_in_favourites_content">sinkronizatu beharreko %1$d fitxategiak ezin dira sinkronizatu</string>
   <string name="sync_fail_in_favourites_ticker">edukien sinkronizazioak huts egin du</string>
@@ -151,6 +154,7 @@
   <string name="media_err_malformed">Euskarri fitxategia ezin da kodetu</string>
   <string name="media_err_timeout">Denbora gehiegi erreproduzitzen saiatzen</string>
   <string name="media_err_invalid_progressive_playback">Euskarri fitxategia ezin da jariotu</string>
+  <string name="media_err_unknown">Euskarri fitxategia ezin erreproduzitu stock euskarri erreproduzigailuarekin</string>
   <string name="media_err_security_ex">Segurtasun errorea %1$s erreproduzitzen saiatzean</string>
   <string name="media_err_io_ex">Sarrera errorea %1$s erreproduzitzen saiatzean</string>
   <string name="media_err_unexpected">Ezusteko errorea %1$s erreproduzitzen saiatzean</string>
@@ -176,7 +180,7 @@
   <string name="auth_nossl_plain_ok_title">Konexio segurua ez dago eskuragarri</string>
   <string name="auth_nossl_plain_ok_message">Aplikazioak ezin izan du zerbitzariarekin konexio seguru bat ezarri. Hala ere konexio ez segurua egin daiteke. Jarraitu edo ezeztatu dezakezu.</string>
   <string name="auth_connection_established">Konexioa ezarri da</string>
-  <string name="auth_testing_connection">Konexioa frogatzen...</string>
+  <string name="auth_testing_connection">Konexioa probatzen...</string>
   <string name="auth_not_configured_title">gaizki egindako ownCloud konfigurazioa</string>
   <string name="auth_not_configured_message">Badirudi zure ownCloud instantzia ez dagoela ongi konfiguratuta. Jarri zure harremanetan administradorearkin informazio gehiago izateko.</string>
   <string name="auth_unknown_error_title">Errore ezezagun bat gertatu da</string>
@@ -192,8 +196,14 @@
   <string name="auth_bad_oc_version_title">ownCloud zerbitzari bertsio ezezaguna</string>
   <string name="auth_wrong_connection_title">Ezin izan da konexioa egin</string>
   <string name="auth_secure_connection">Konexio segurua ezarri da</string>
+  <string name="auth_unauthorized">Okerreko erabiltzaile izen edo pasahitza</string>
+  <string name="auth_oauth_error">Baimena ez da lortu</string>
+  <string name="auth_oauth_error_access_denied">Sarrera autorizazio zerbitzariak ukatua</string>
   <string name="auth_not_found">Okerreko bidea emanda</string>
   <string name="auth_internal">Barne zerbitzari errorea, kodea: %1$d</string>
+  <string name="auth_wtf_reenter_URL">Egoera esperogabea, mesedez idatzi berriz zerbitzari URLa</string>
+  <string name="auth_expired_oauth_token_toast">Zure baimena iraungitu da.\nMesedez, baimendu berriz</string>
+  <string name="auth_expired_basic_auth_toast">Mesedez, sartu oraingo pasahitza</string>
   <string name="crashlog_message">Programa ezustekoan bukatu da. Nahiko zenuke huts egitearen berri eman?</string>
   <string name="crashlog_send_report">Bidali txostena</string>
   <string name="crashlog_dont_send_report">Ez bidali txostena</string>
@@ -220,6 +230,11 @@
   <string name="wait_a_moment">Itxaron momentu bat</string>
   <string name="filedisplay_unexpected_bad_get_content">Ezusteko arazoa; mesedez, saiatu beste app batekin fitxategia hautatzeko</string>
   <string name="filedisplay_no_file_selected">Ez da fitxategirik hautatu</string>
+  <string name="oauth_host_url">oAuth2 URL-a</string>
+  <string name="oauth_check_onoff">Saioa hasi oAuth2-rekin.</string>
+  <string name="oauth_login_connection">Konektatzen oAuth2 zerbitzarira...</string>
+  <string name="oauth_code_validation_message">Mesedez, ireki web zerbitzari bat eta hona joan:\n%1$s.\nEgiaztatu bertan kode hau:\n%2$s</string>
+  <string name="oauth_connection_url_unavailable">URL honetarako konexioa ez dago eskuragarri</string>
   <string name="ssl_validator_title">Abisua</string>
   <string name="ssl_validator_header">Lekuaren identitatea ezin da egiaztatu</string>
   <string name="ssl_validator_reason_cert_not_trusted">- Zerbitzariaren ziurtagiria ez da fidagarria</string>
@@ -245,6 +260,7 @@
   <string name="ssl_validator_label_signature">Sinadura:</string>
   <string name="ssl_validator_label_signature_algorithm">Algoritmoa:</string>
   <string name="placeholder_sentence">Hau leku-marka da</string>
+  <string name="placeholder_filename">kokalekua.txt</string>
   <string name="placeholder_filetype">PNG Irudia</string>
   <string name="placeholder_filesize">389 KB</string>
   <string name="placeholder_timestamp">2012/05/18 12:23 PM</string>

+ 96 - 2
res/values-fa/strings.xml

@@ -13,12 +13,17 @@
   <string name="main_settings">تنظیمات</string>
   <string name="main_tit_accsetup">نصب حساب کاربری</string>
   <string name="main_wrn_accsetup">حساب کاربری ownCloud در دستگاه شما وجود ندارد. برای استفاده از این برنامه می‌بایست یکی ایجاد کنید.</string>
+  <string name="about_android">%1$s برنامه اندروید</string>
+  <string name="about_version">%1$s نسخه</string>
+  <string name="actionbar_sync">بازنمایی حساب کاربری</string>
   <string name="actionbar_upload">بارگزاری</string>
   <string name="actionbar_upload_from_apps">محتوا از دیگر برنامه ها</string>
   <string name="actionbar_upload_files">پرونده‌ها</string>
+  <string name="actionbar_open_with">باز کردن با</string>
   <string name="actionbar_mkdir">ایجاد پوشه</string>
   <string name="actionbar_search">جست‌و‌جو</string>
   <string name="actionbar_settings">تنظیمات</string>
+  <string name="actionbar_see_details">جزئیات</string>
   <string name="prefs_category_general">عمومی</string>
   <string name="prefs_add_session">ایجاد جلسه جدید</string>
   <string name="prefs_create_img_thumbnails">ایجاد پیش نمایش تصاویر</string>
@@ -26,18 +31,25 @@
   <string name="prefs_summary_select_oc_account">یکی از حسابهایتان را برای استفاده ی برنامه انتخاب کنید.</string>
   <string name="prefs_trackmydevice">ردیابی دستگاه</string>
   <string name="prefs_trackmydevice_summary_off">برنامه را فعال کنید تا محل دستگاه شما پیگیری شود</string>
+  <string name="prefs_trackmydevice_summary_on">این برنامه در حال پیگیری این وسیله است.</string>
   <string name="prefs_trackmydevice_interval">به روز رسانی بازه</string>
   <string name="prefs_trackmydevice_interval_summary">بروز رسانی هر %1$s دقیقه یکبار</string>
   <string name="prefs_accounts">حساب‌ها</string>
   <string name="prefs_manage_accounts">مدیریت حسابها</string>
   <string name="prefs_pincode">PIN برنامه</string>
+  <string name="prefs_pincode_summary">حفاظت از مشتری</string>
   <string name="prefs_instant_upload">فعال کردن بارگذاری فوری</string>
   <string name="prefs_instant_upload_summary">فورا عکسهایی را که با دوربین گرفته شده است را آپلود کن</string>
+  <string name="prefs_log_title">فعال کردن ورود</string>
+  <string name="prefs_log_summary">این برای مشکلات ورود استفاده شده است.</string>
+  <string name="prefs_log_title_history">تاریخچه ورود</string>
+  <string name="prefs_log_summary_history">این وقایع  ثبت شده را نمایش می دهد.</string>
+  <string name="prefs_log_delete_history_button">حذف تاریخچه</string>
   <string name="auth_host_url">آدرس سرور</string>
   <string name="auth_username">نام کاربری</string>
   <string name="auth_password">رمز عبور</string>
-  <string name="auth_register">من تازه وارد %1$s شدم</string>
   <string name="new_session_uri_error">نشانی داده شده صحیح نیست</string>
+  <string name="new_session_session_name_error">نام بخش صحیح نیست.</string>
   <string name="sync_string_files">پرونده‌ها</string>
   <string name="uploader_no_file_selected">هیچ فایلی برای آپلود انتخاب نشده است</string>
   <string name="setup_hint_username">نام کاربری</string>
@@ -47,6 +59,7 @@
   <string name="setup_title">متصل شوید به %1$s خودتان</string>
   <string name="setup_btn_connect">اتصال</string>
   <string name="uploader_btn_upload_text">بارگزاری</string>
+  <string name="uploader_top_message">انتخاب مسیر برای آپلود:</string>
   <string name="uploader_wrn_no_account_title">هیچ حسابی یافت نشد</string>
   <string name="uploader_wrn_no_account_text">هیچ حسابی در %1$s بر روی دستگاه شما موجود نیست.لطفا اول یک حساب ترتیب دهید.</string>
   <string name="uploader_wrn_no_account_setup_btn_text">نصب</string>
@@ -63,6 +76,7 @@
   <string name="filedetails_created">ایجاد شده توسط:</string>
   <string name="filedetails_modified">تغییر یافته توسط:</string>
   <string name="filedetails_download">بارگیری</string>
+  <string name="filedetails_sync_file">بازنمایی فایل</string>
   <string name="filedetails_redownload">بارگزاری دوباره</string>
   <string name="filedetails_renamed_in_upload_msg">فایل در هنگام بارگزاری به %1$s تغییر نام یافت</string>
   <string name="common_yes">بله</string>
@@ -72,8 +86,12 @@
   <string name="common_cancel_upload">متوقف کردن بار گذاری</string>
   <string name="common_cancel">منصرف شدن</string>
   <string name="common_save_exit">ذخیره سازی و خروج</string>
+  <string name="common_exit">ترک کردن  %1$s</string>
   <string name="common_error">خطا</string>
+  <string name="common_loading">بارگذاری ...</string>
+  <string name="common_error_unknown">خطای نامشخص</string>
   <string name="about_title">درباره</string>
+  <string name="change_password">تغییر گذر واژه</string>
   <string name="delete_account">حذف حساب</string>
   <string name="create_account">ساخت حساب</string>
   <string name="upload_chooser_title">بارگزاری از ...</string>
@@ -92,11 +110,14 @@
   <string name="downloader_download_succeeded_content">%1$s با موفقیت دانلود شد</string>
   <string name="downloader_download_failed_ticker">بارگیری ناموفق بود</string>
   <string name="downloader_download_failed_content">دانلود %1$s نمی توانست به طور کامل انجام شود.</string>
+  <string name="downloader_not_downloaded_yet">دانلود هنوز به پایان نرسیده است.</string>
   <string name="common_choose_account">حساب کاربری را انتخاب کنید</string>
   <string name="sync_string_contacts">ارتباط‌ها</string>
   <string name="sync_fail_ticker">همگام سازی ناموفق</string>
   <string name="sync_fail_content">همگام سازی %1$s نتوانست به طور کامل انجام شود</string>
   <string name="sync_conflicts_in_favourites_ticker">ناسازگاری ها یافت شدند</string>
+  <string name="sync_conflicts_in_favourites_content">%1$d پرونده ها نمیتوانند همگام سازی شوند.</string>
+  <string name="sync_fail_in_favourites_ticker">همگام سازی پرونده ها ناموفق بود.</string>
   <string name="sync_fail_in_favourites_content">محتوای %1$d فایل ها نمی توانند همگام باشند(%2$d ناسازگاری)</string>
   <string name="sync_foreign_files_forgotten_ticker">بعضی از فایلهای محلی فراموش شده اند</string>
   <string name="sync_foreign_files_forgotten_content">در اینجا %1$d تعداد فایل از لیست %2$s نمی توانند کپی شوند</string>
@@ -104,18 +125,41 @@
   <string name="foreign_files_success">همه ی فایل ها جا به جا شدند</string>
   <string name="foreign_files_fail">بعضی از فایل ها نمی توانند انتقال یابند</string>
   <string name="foreign_files_local_text">محلی: %1$s</string>
+  <string name="foreign_files_remote_text">دور از دسترس:  %1$s</string>
   <string name="upload_query_move_foreign_files">فضایی به اندازه ی کافی برای کپی کردن فایل ها در پوشه ی %1$s نیست.آیا می خواهید آنها را به جای دیگری انتقال دهید؟</string>
   <string name="use_ssl">استفاده از ارتباط امن</string>
   <string name="location_no_provider">%1$sدستگاه شما را نمی تواند بیابد.لطفا تنظیمات موقعیت خود را بررسی کنید</string>
   <string name="pincode_enter_pin_code">لطفا PIN برنامه خودتان را وارد کنید</string>
   <string name="pincode_enter_new_pin_code">لطفا PIN برنامه ی جدید خودتان را وارد کنید</string>
   <string name="pincode_configure_your_pin">PIN برنامه را وارد کنید</string>
+  <string name="pincode_configure_your_pin_explanation">هر زمان که برنامه آغاز شود PIN درخواست خواهد شد.</string>
   <string name="pincode_reenter_your_pincode">لطفا PIN برنامه خودتان را دوباره وارد کنید</string>
   <string name="pincode_remove_your_pincode">PIN برنامه خودتان را حذف کنید</string>
   <string name="pincode_mismatch">PIN های برنامه یکسان نیستند</string>
   <string name="pincode_wrong">PIN برنامه نادرست است</string>
   <string name="pincode_removed">PIN برنامه حذف شده است</string>
   <string name="pincode_stored">PIN برنامه ذخیره شده است</string>
+  <string name="media_notif_ticker">%1$s پخش کننده موسیقی</string>
+  <string name="media_state_playing">%1$s ( در حال پخش موسیقی )</string>
+  <string name="media_state_loading">%1$s (درحال بارگذاری)</string>
+  <string name="media_event_done">%1$s پخش به پایان رسید.</string>
+  <string name="media_err_nothing_to_play">هیچ رسانه ای یافت نشد.</string>
+  <string name="media_err_no_account">هیچ حسابی ارائه نشده است.</string>
+  <string name="media_err_not_in_owncloud">پرونده در حساب کاربری معتبر نیست.</string>
+  <string name="media_err_unsupported">کدک رسانه پشتیبانی نشده است.</string>
+  <string name="media_err_io">فایل رسانه نمیتواند خوانده شود.</string>
+  <string name="media_err_malformed">فایل رسانه به شکل صحیح رمزگذاری نشده است.</string>
+  <string name="media_err_timeout">تلاش برای پخش، زمان زیادی گرفته است.</string>
+  <string name="media_err_invalid_progressive_playback">فایل رسانه نمیتواند جریان داشته باشد.</string>
+  <string name="media_err_unknown">فایل رسانه با استفاده از پخش کننده stock media player قابل پخش نیست.</string>
+  <string name="media_err_security_ex">خطای امنیتی، تلاش برای پخش %1$s</string>
+  <string name="media_err_io_ex">خطای وارد کردن، تلاش برای پخش %1$s</string>
+  <string name="media_err_unexpected">خطای غیرمنتظره، تلاش برای پخش %1$s</string>
+  <string name="media_previous_description">دکمه بخش قبلی </string>
+  <string name="media_rewind_description">دکمه عقبگرد</string>
+  <string name="media_play_pause_description">دکمه پخش یا توقف</string>
+  <string name="media_forward_description">دکمه رو به جلو سریع</string>
+  <string name="media_next_description">دکمه بخش بعدی</string>
   <string-array name="prefs_trackmydevice_intervall_keys">
     <item>15 دقیقه</item>
     <item>30 دقیقه</item>
@@ -132,17 +176,33 @@
   <string name="auth_nossl_plain_ok_title">اتصال امن در دسترس نیست</string>
   <string name="auth_nossl_plain_ok_message">برنامه نمی تواند یک ارتباط امن با سرور ایجاد کند. ارتباط نا امن در دسترس است.شما می تواند ادامه داده یا منصرف شوید.</string>
   <string name="auth_connection_established">اتصال برقرار شد</string>
+  <string name="auth_testing_connection">آزمایش اتصال...</string>
   <string name="auth_not_configured_title">پیکربندی سرور ناقص است</string>
-  <string name="auth_unknown_error_title">خطای ناشناخته رخ داده است!</string>
+  <string name="auth_not_configured_message">به نظر میرسد که سرور شما به درستی پیکربندی نشده است. برای جزئیات بیشتر با مدیر خود تماس بگیرید.</string>
+  <string name="auth_unknown_error_title">خطای نامشخص رخ داده است!</string>
+  <string name="auth_unknown_error_message">یک خطای ناشناخته رخ داده است. لطفا با بخش پشتیبانی خود تماس بگیرید و خطاها را از وسیله خود بررسی نمایید.</string>
+  <string name="auth_unknown_host_title">میزبان را نمیتواند پیدا نماید.</string>
+  <string name="auth_unknown_host_message">میزبان وارد شده را نمیتواند پیدا کند. لطفا نام میزبان و در دسترس بودن سرور را بررسی و دوباره تلاش نمایید.</string>
   <string name="auth_incorrect_path_title">نمونه ی سرور یافت نشد</string>
+  <string name="auth_incorrect_path_message">برنامه نمی تواند یک نمونه سرور را در مسیر داده شده را پیدا کند. لطفا مسیر خود را بررسی ودوباره تلاش کنید.</string>
+  <string name="auth_timeout_title">زمان زیادی برای پاسخ سرور صورت گرفت.</string>
+  <string name="auth_incorrect_address_title">آدرس ناقص</string>
+  <string name="auth_ssl_general_error_title">مقداردهی SSL ناموفق بود.</string>
+  <string name="auth_ssl_unverified_server_title">هویت تائید نشده سرویس SSL دهنده.</string>
   <string name="auth_bad_oc_version_title">نسخه ی سرور ناشناخته</string>
+  <string name="auth_wrong_connection_title">نمیتوان ارتباط برقرار نمود.</string>
   <string name="auth_secure_connection">ایجاد ارتباط ایمن</string>
+  <string name="auth_oauth_error">اجازه ناموفق</string>
+  <string name="auth_oauth_error_access_denied">دسترسی توسط سرور احراز هویت رد شده است.</string>
   <string name="auth_not_found">مسیر داده شده اشتباه است</string>
   <string name="auth_internal">خطای سرور داخلی، کد %1$d</string>
+  <string name="auth_wtf_reenter_URL">حالت غیرمنتظره؛ لطفا آدرس URL سرور را مجددا وارد نمایید.</string>
+  <string name="auth_expired_oauth_token_toast">هویت شما منقضی شده است.\nلطفا، مجددا احراز هویت کنید.</string>
   <string name="crashlog_message">برنامه به شکل غیر منتظره خاتمه یافت.آیا می خواهید این مشکل را گزارش کنید؟</string>
   <string name="crashlog_send_report">ارسال گزارش</string>
   <string name="crashlog_dont_send_report">گزارش را ارسال نکن</string>
   <string name="extensions_avail_title">بسط ها در دسترس هستند!</string>
+  <string name="extensions_avail_message">به نظر میرسد که سرور شما موارد زیادی را پشتیبانی میکند. آیا میخواهید موارد در دسترس برای اندروید را ببینید ؟</string>
   <string name="fd_keep_in_sync">فایل را به روز نگه دار</string>
   <string name="common_share">اشتراک‌گذاری</string>
   <string name="common_rename">تغییرنام</string>
@@ -152,18 +212,30 @@
   <string name="confirmation_remove_local">فقط محلی</string>
   <string name="confirmation_remove_folder_local">فقط محتوای محلی</string>
   <string name="confirmation_remove_remote">پاک کردن از سرور</string>
+  <string name="confirmation_remove_remote_and_local">راه دور و محلی</string>
   <string name="remove_success_msg">حذف با موفقیت انجام شد</string>
   <string name="remove_fail_msg">حذف نا موفق بود</string>
   <string name="rename_dialog_title">نام جدید وارد کنید</string>
+  <string name="rename_local_fail_msg">کپی محلی نمی تواند تغییر نام پیدا کند، لطفا نام دیگری انتخاب نمایید.</string>
   <string name="rename_server_fail_msg">نامگذاری نمی تواند به طور کامل انجام شود</string>
+  <string name="sync_file_fail_msg">پرونده های دور از دسترس نمی توانند بررسی شوند.</string>
   <string name="sync_file_nothing_to_do_msg">محتوای فایل قبلا همگام شده</string>
   <string name="create_dir_fail_msg">فهرست را نمی توان ایجاد کرد</string>
   <string name="wait_a_moment">لحظه‌ای صبر کنید</string>
+  <string name="filedisplay_unexpected_bad_get_content">مشکل غیر متقربه، لطفا پرونده را از یک برنامه متفاوت انتخاب کنید.</string>
   <string name="filedisplay_no_file_selected">هیچ پرونده‌ای انتخاب نشده است</string>
+  <string name="oauth_host_url">آدرس oAuth2</string>
+  <string name="oauth_check_onoff">ورود با oAuth2   </string>
+  <string name="oauth_login_connection">اتصال به سرور oAuth2 ...</string>
+  <string name="oauth_code_validation_message">لطفا، یک مرورگر بازکنید و به آدرس زیر بروید:\n%1$s.\nاعتبارسنجی این کد آنجاست:\n%2$s</string>
+  <string name="oauth_connection_url_unavailable">اتصال به این آدرس URL در دسترس نمی باشد.</string>
   <string name="ssl_validator_title">اخطار</string>
   <string name="ssl_validator_header">هویت این سایت نمی تواند تایید شود</string>
   <string name="ssl_validator_reason_cert_not_trusted">- گواهی سرور نامعتبر است</string>
   <string name="ssl_validator_reason_cert_expired">- گواهی سرور انقضا یافته</string>
+  <string name="ssl_validator_reason_cert_not_yet_valid">زمان اعتبار گواهی نامه سرویس دهنده فرانرسیده است</string>
+  <string name="ssl_validator_reason_hostname_not_verified">URL با آدرس هاست موجود در گواهی نامه مطابقت ندارد.</string>
+  <string name="ssl_validator_certificate_not_available">گواهی سرور نمی تواند حاصل شود</string>
   <string name="ssl_validator_question">آیا می خواهید در هر صورت به این مدرک اطمینان کنید؟</string>
   <string name="ssl_validator_not_saved">گواهی نمی تواند ذخیره شود</string>
   <string name="ssl_validator_btn_details_see">جزییات</string>
@@ -181,11 +253,33 @@
   <string name="ssl_validator_label_validity_to">به:</string>
   <string name="ssl_validator_label_signature">امضا:</string>
   <string name="ssl_validator_label_signature_algorithm">الگوریتم:</string>
+  <string name="placeholder_sentence">این یک حفره است.</string>
+  <string name="placeholder_filename">placeholder.txt</string>
+  <string name="placeholder_filetype">تصویربا فرمت PNG </string>
+  <string name="placeholder_filesize">389 کیلو بایت</string>
+  <string name="placeholder_timestamp">2012/05/18 12:23 بعد از ظهر</string>
+  <string name="placeholder_media_time">12:23:45</string>
   <string name="instant_upload_on_wifi">تصاویر را فقط از طریق wifi بارگذاری کن</string>
+  <string name="instant_upload_path">آپلود فوری</string>
   <string name="conflict_title">بارگذاری ناسازگار</string>
+  <string name="conflict_message">فایل های دور از دسترس %s با فایل های محلی همگام نشده اند. ادامه کار، محتوا را بر روی فایل در سرور جایگزین خواهد کرد.</string>
   <string name="conflict_keep_both">نگهداشتن هر دو</string>
   <string name="conflict_overwrite">دوباره نویسی</string>
   <string name="conflict_dont_upload">آپلود نکن</string>
+  <string name="preview_image_description">پیش نمایش تصویر</string>
+  <string name="preview_image_error_unknown_format">این تصویر نمی تواند نمایش داده شود.</string>
+  <string name="preview_image_error_out_of_memory">\"حافظه برای نمایش این تصویر کافی نیست.</string>
   <!--we need to improve the communication of errors to the user-->
   <string name="error__upload__local_file_not_copied">%1$s در لیست محلی %2$s نمی تواند کپی شود</string>
+  <string name="actionbar_failed_instant_upload">آپلود فوری انجام نشد\"</string>
+  <string name="failed_upload_headline_text">آپلود های فوری انجام نشدند.</string>
+  <string name="failed_upload_headline_hint">خلاصه ای از تمام ارسال های فور ی ناموفق.</string>
+  <string name="failed_upload_all_cb">انتخاب همه</string>
+  <string name="failed_upload_headline_retryall_btn">تلاش مجدد بر روی همه موارد انتخاب شده</string>
+  <string name="failed_upload_headline_delete_all_btn">حذف تمام انتخاب شده ها از صف ارسال.</string>
+  <string name="failed_upload_retry_text">تلاش برای آپلود کردن تصویر:</string>
+  <string name="failed_upload_load_more_images">بارگذاری تصاویر بیشتر</string>
+  <string name="failed_upload_retry_do_nothing_text">هیچ کاری انجام ندهید، شما برای آپلود فوری آنلاین نیستید.</string>
+  <string name="failed_upload_failure_text">پیغام عدم موفقیت:</string>
+  <string name="failed_upload_quota_exceeded_text">لطفا پیکربندی سرورتان را بررسی کنید، شاید سهمیه شما بیش از حد شده باشد.</string>
 </resources>

+ 6 - 1
res/values-fi-rFI/strings.xml

@@ -41,10 +41,10 @@
   <string name="prefs_instant_upload">Käytä välitöntä lähetystä</string>
   <string name="prefs_instant_upload_summary">Lähetä kameralla otetut kuvat välittömästi</string>
   <string name="prefs_log_delete_history_button">Poista historia</string>
+  <string name="auth_check_server">Tarkista palvelin</string>
   <string name="auth_host_url">Palvelimen osoite</string>
   <string name="auth_username">Käyttäjätunnus</string>
   <string name="auth_password">Salasana</string>
-  <string name="auth_register">Olen uusi ownCloudin kanssa</string>
   <string name="new_session_uri_error">Väärä osoite</string>
   <string name="new_session_session_name_error">Väärä istuntonimi</string>
   <string name="sync_string_files">Tiedostot</string>
@@ -88,6 +88,7 @@
   <string name="common_loading">Ladataan…</string>
   <string name="common_error_unknown">Tuntematon virhe</string>
   <string name="about_title">Tietoja</string>
+  <string name="change_password">Vaihda salasana</string>
   <string name="delete_account">Poista tili</string>
   <string name="create_account">Luo tili</string>
   <string name="upload_chooser_title">Lataus täältä:</string>
@@ -150,6 +151,7 @@
     <item>30</item>
     <item>60</item>
   </string-array>
+  <string name="auth_trying_to_login">Yritetään kirjautua...</string>
   <string name="auth_no_net_conn_title">Ei verkkoyhteyttä</string>
   <string name="auth_no_net_conn_message">Verkkoyhteyttä ei havaittu. Tarkista internetyhteyden tila ja yritä uudelleen.</string>
   <string name="auth_connect_anyway">Yhdistä silti</string>
@@ -172,9 +174,11 @@
   <string name="auth_bad_oc_version_title">Tuntematon ownCloud-palvelimen versio</string>
   <string name="auth_wrong_connection_title">Yhteyden muodostus epäonnistui</string>
   <string name="auth_secure_connection">Salattu yhteys muodostettu</string>
+  <string name="auth_unauthorized">Väärä käyttäjätunnus tai salasana</string>
   <string name="auth_not_found">Väärä polku</string>
   <string name="auth_internal">Sisäinen palvelinvirhe, koodi %1$d</string>
   <string name="auth_wtf_reenter_URL">Odottamaton tila; anna palvelimen osoite uudelleen</string>
+  <string name="auth_expired_basic_auth_toast">Anna nykyinen salasana</string>
   <string name="crashlog_message">Sovellus sulkeutui yllättäen. Haluatko lähettää vikailmoituksen?</string>
   <string name="crashlog_send_report">Lähetä ilmoitus</string>
   <string name="crashlog_dont_send_report">Älä lähetä ilmoitusta</string>
@@ -240,5 +244,6 @@
   <!--we need to improve the communication of errors to the user-->
   <string name="failed_upload_all_cb">valitse kaikki</string>
   <string name="failed_upload_headline_retryall_btn">yritä uudelleen kaikkia valittuja</string>
+  <string name="failed_upload_load_more_images">Lataa lisää kuvia</string>
   <string name="failed_upload_failure_text">Virheviesti:</string>
 </resources>

+ 3 - 6
res/values-fr/strings.xml

@@ -48,7 +48,6 @@
   <string name="auth_host_url">Adresse du serveur</string>
   <string name="auth_username">Nom d\'utilisateur</string>
   <string name="auth_password">Mot de passe</string>
-  <string name="auth_register">Je suis nouveau sur ownCloud</string>
   <string name="new_session_uri_error">L\'URL spécifiée n\'est pas correcte</string>
   <string name="new_session_session_name_error">Le nom de session spécifié n\'est pas correct</string>
   <string name="sync_string_files">Fichiers</string>
@@ -92,6 +91,7 @@
   <string name="common_loading">Chargement ...</string>
   <string name="common_error_unknown">Erreur Inconnue </string>
   <string name="about_title">À propos de</string>
+  <string name="change_password">Changer de mot de passe</string>
   <string name="delete_account">Effacer ce compte</string>
   <string name="create_account">Créer un compte</string>
   <string name="upload_chooser_title">Téléverser un fichier depuis…</string>
@@ -115,7 +115,6 @@
   <string name="sync_string_contacts">Contacts</string>
   <string name="sync_fail_ticker">La synchronisation a échoué</string>
   <string name="sync_fail_content">La synchronisation de %1$s ne peut pas être complétée</string>
-  <string name="sync_fail_content_unauthorized">Paramètres d\'identification invalides pour %1$s</string>
   <string name="sync_conflicts_in_favourites_ticker">Des conflits ont été trouvés</string>
   <string name="sync_conflicts_in_favourites_content">%1$d fichiers à garder synchronisés n\'ont put être synchronisé</string>
   <string name="sync_fail_in_favourites_ticker">La synchronisation des fichiers a échoué</string>
@@ -172,14 +171,14 @@
     <item>30</item>
     <item>60</item>
   </string-array>
-  <string name="auth_trying_to_login">Connexion en cours...</string>
+  <string name="auth_trying_to_login">Tentative de connexion …</string>
   <string name="auth_no_net_conn_title">Pas de connexion réseau</string>
   <string name="auth_no_net_conn_message">Aucune connexion réseau n\'a été trouvée, veuillez vérifier votre connectivité à internet puis réessayez.</string>
   <string name="auth_connect_anyway">Se connecter malgré tout</string>
   <string name="auth_nossl_plain_ok_title">Connexion sécurisée non disponible</string>
   <string name="auth_nossl_plain_ok_message">L\'application ne peut établir de connexion sécurisée avec le serveur. Cependant, une connexion non sécurisée est disponible. Vous pouvez continuer en utilisant celle-ci ou annuler.</string>
   <string name="auth_connection_established">Connexion établie</string>
-  <string name="auth_testing_connection">Test de la connexion en cours...</string>
+  <string name="auth_testing_connection">Test de la connexion</string>
   <string name="auth_not_configured_title">Configuration ownCloud erronée</string>
   <string name="auth_not_configured_message">Il semblerait que votre instance ownCloud ne soit pas correctement configurée. Veuillez contacter votre administrateur pour plus de détails.</string>
   <string name="auth_unknown_error_title">Une erreur inconnue s\'est produite</string>
@@ -195,14 +194,12 @@
   <string name="auth_bad_oc_version_title">La version ownCloud du serveur n\'est pas reconnue</string>
   <string name="auth_wrong_connection_title">Impossible d\'établir la connexion</string>
   <string name="auth_secure_connection">Connexion sécurisée établie</string>
-  <string name="auth_unauthorized">Paramètres d\'identification invalides</string>
   <string name="auth_oauth_error">Echec d\'autorisation</string>
   <string name="auth_oauth_error_access_denied">Accès refusé par le serveur d\'autorisation</string>
   <string name="auth_not_found">Le chemin fourni est erroné</string>
   <string name="auth_internal">Erreur interne du serveur, code %1$d</string>
   <string name="auth_wtf_reenter_URL">État inattendu ; veuillez entrer à nouveau l\'URL du serveur</string>
   <string name="auth_expired_oauth_token_toast">Votre autorisation a expiré.\nVeuillez procéder à nouveau à une autorisation</string>
-  <string name="auth_expired_basic_auth_toast">Vos paramètres d\'identifications sauvegardés sont invalides.\nVeuillez entrer les paramètres d\'identification courant.</string>
   <string name="crashlog_message">L\'application s\'est fermée de façon inattendue, voulez-vous envoyer un rapport d\'erreur ?</string>
   <string name="crashlog_send_report">Envoyer un rapport</string>
   <string name="crashlog_dont_send_report">Ne rien envoyer</string>

+ 8 - 6
res/values-gl/strings.xml

@@ -45,10 +45,11 @@
   <string name="prefs_log_title_history">Historial do rexistro</string>
   <string name="prefs_log_summary_history">Isto amosa os rexistros gravados</string>
   <string name="prefs_log_delete_history_button">Eliminar o historial</string>
+  <string name="auth_check_server">Comprobar o servidor</string>
   <string name="auth_host_url">Enderezo do servidor</string>
   <string name="auth_username">Nome de usuario</string>
   <string name="auth_password">Contrasinal</string>
-  <string name="auth_register">Son novo en  %1$s</string>
+  <string name="auth_register">Novo en %1$s?</string>
   <string name="new_session_uri_error">Deuse un enderezo incorrecto</string>
   <string name="new_session_session_name_error">Nome de sesión incorrecto</string>
   <string name="sync_string_files">Ficheiros</string>
@@ -92,6 +93,7 @@
   <string name="common_loading">Cargando ...</string>
   <string name="common_error_unknown">Produciuse un erro descoñecido</string>
   <string name="about_title">Sobre</string>
+  <string name="change_password">Cambiar o contrasinal</string>
   <string name="delete_account">Eliminar a conta</string>
   <string name="create_account">Crear unha conta</string>
   <string name="upload_chooser_title">Enviar desde…</string>
@@ -115,7 +117,7 @@
   <string name="sync_string_contacts">Contactos</string>
   <string name="sync_fail_ticker">Produciuse un fallo na sincronización</string>
   <string name="sync_fail_content">Non foi posíbel completar a sincronización de %1$s</string>
-  <string name="sync_fail_content_unauthorized">Credenciais incorrectas para %1$s</string>
+  <string name="sync_fail_content_unauthorized">Contrasinal incorrecto para %1$s</string>
   <string name="sync_conflicts_in_favourites_ticker">Atopáronse conflictos</string>
   <string name="sync_conflicts_in_favourites_content">%1$d ficheiros «manter sincronizados» non foi posíbel sincronizalos</string>
   <string name="sync_fail_in_favourites_ticker">Produciuse unha falla no mantemento sincronizado de ficheiros</string>
@@ -172,14 +174,14 @@
     <item>30</item>
     <item>60</item>
   </string-array>
-  <string name="auth_trying_to_login">Tentando acceder...</string>
+  <string name="auth_trying_to_login">Intentando acceder...</string>
   <string name="auth_no_net_conn_title">Sen conexión de rede</string>
   <string name="auth_no_net_conn_message">Non se detectaron conexións de rede. Comprobe a conexión a Internet e tenteo de novo.</string>
   <string name="auth_connect_anyway">Conectar igualmente</string>
   <string name="auth_nossl_plain_ok_title">Non hai conexión seguras dispoñíbeis.</string>
   <string name="auth_nossl_plain_ok_message">O aplicativo non puido facer unha conexión segura co servidor. Inda que non é segura, hai unha conexión posíbel. Pode continuar ou cancelala.</string>
   <string name="auth_connection_established">Estabeleceuse a conexión</string>
-  <string name="auth_testing_connection">Probando a conexión...</string>
+  <string name="auth_testing_connection">Comprobando a conexión...</string>
   <string name="auth_not_configured_title">Configuración errada do servidor</string>
   <string name="auth_not_configured_message">Semella que a súa instancia do servidor non está configurada correctamente. Contacte co seu administrador para máis detalles.</string>
   <string name="auth_unknown_error_title">Produciuse un erro descoñecido!</string>
@@ -195,14 +197,14 @@
   <string name="auth_bad_oc_version_title">Versión do servidor non recoñecida</string>
   <string name="auth_wrong_connection_title">Non é posíbel estabelecer a conexión</string>
   <string name="auth_secure_connection">Estabeleceuse unha conexión segura</string>
-  <string name="auth_unauthorized">Credenciais incorrectas</string>
+  <string name="auth_unauthorized">Nome de usuario ou contrasinal incorrecto</string>
   <string name="auth_oauth_error">A autorización non foi aceptada</string>
   <string name="auth_oauth_error_access_denied">O acceso foi denegado polo servidor de autorización</string>
   <string name="auth_not_found">Deuse unha ruta incorrecta</string>
   <string name="auth_internal">Produciuse un erro interno do servidor, código %1$d</string>
   <string name="auth_wtf_reenter_URL">Estado inesperado, introduza de novo o enderezo URL do servidor</string>
   <string name="auth_expired_oauth_token_toast">A súa autorización caducou.\nAutorícese de novo</string>
-  <string name="auth_expired_basic_auth_toast">Os seus credenciais gardados son incorrectos.\nIntroduza os seus credenciais actuais</string>
+  <string name="auth_expired_basic_auth_toast">Introduza o contrasinal actual</string>
   <string name="crashlog_message">O aplicativo deixou de funcionar de xeito inesperado. Quere enviar un informe desta quebra?</string>
   <string name="crashlog_send_report">Enviar un informe</string>
   <string name="crashlog_dont_send_report">Non enviar un informe</string>

+ 3 - 1
res/values-he/strings.xml

@@ -39,7 +39,6 @@
   <string name="auth_host_url">כתובת שרת</string>
   <string name="auth_username">שם משתמש</string>
   <string name="auth_password">ססמה</string>
-  <string name="auth_register">%1$s חדש לי</string>
   <string name="new_session_uri_error">הכתובת שצוינה שגויה</string>
   <string name="new_session_session_name_error">שם ההפעלה שגוי</string>
   <string name="sync_string_files">קבצים</string>
@@ -82,6 +81,7 @@
   <string name="common_loading">בטעינה …</string>
   <string name="common_error_unknown">שגיאה בלתי ידועה</string>
   <string name="about_title">על אודות</string>
+  <string name="change_password">שינוי ססמה</string>
   <string name="delete_account">מחיקת חשבון</string>
   <string name="create_account">יצירת חשבון</string>
   <string name="upload_chooser_title">העלאה מהמיקום …</string>
@@ -144,12 +144,14 @@
     <item>30</item>
     <item>60</item>
   </string-array>
+  <string name="auth_trying_to_login">מתבצע ניסיון כניסה…</string>
   <string name="auth_no_net_conn_title">אין חיבור לאינטרנט</string>
   <string name="auth_no_net_conn_message">לא נבחר חיבור לאינטרנט, נא לבדוק את החיבור שלך לאינטרנט ולנסות שוב.</string>
   <string name="auth_connect_anyway">להתחבר בכל זאת</string>
   <string name="auth_nossl_plain_ok_title">אין חיבור מוצפן זמין.</string>
   <string name="auth_nossl_plain_ok_message">היישום לא יכול לקיים חיבור מאובטח לשרת. עם זאת קיים חיבור שאינו מאובטח. ניתן להמשיך או לבטל.</string>
   <string name="auth_connection_established">החיבור נוצר</string>
+  <string name="auth_testing_connection">החיבור נבדק…</string>
   <string name="auth_not_configured_title">תצורת השרת פגומה</string>
   <string name="auth_not_configured_message">מסתבר כי עותק השרת שלך אינו מוגדר נכון. נא ליצור קשר עם המנהל שלך לקבלת פרטים נוספים.</string>
   <string name="auth_unknown_error_title">אירעה שגיאה בלתי ידועה!</string>

+ 1 - 0
res/values-hi/strings.xml

@@ -6,6 +6,7 @@
   <string name="auth_password">पासवर्ड</string>
   <string name="setup_hint_username">प्रयोक्ता का नाम</string>
   <string name="setup_hint_password">पासवर्ड</string>
+  <string name="common_error">त्रुटि</string>
   <string name="common_share">साझा करें</string>
   <!--we need to improve the communication of errors to the user-->
 </resources>

+ 2 - 0
res/values-hr/strings.xml

@@ -36,7 +36,9 @@
   <string name="common_cancel_upload">Prekini upload</string>
   <string name="common_cancel">Odustani</string>
   <string name="common_error">Greška</string>
+  <string name="change_password">Izmjena lozinke</string>
   <string name="sync_string_contacts">Kontakti</string>
+  <string name="auth_trying_to_login">Trying to login…</string>
   <string name="common_share">Podijeli</string>
   <string name="common_rename">Promjeni ime</string>
   <string name="common_remove">Makni</string>

+ 28 - 1
res/values-hu-rHU/strings.xml

@@ -13,9 +13,13 @@
   <string name="main_settings">Beállítások</string>
   <string name="main_tit_accsetup">Fiók beállítása</string>
   <string name="main_wrn_accsetup">Nincs beállított fiók a készülékén. Ahhoz, hogy használja ezt a programot, létre kell hozzon egyet.</string>
+  <string name="about_android">%1$s Android Alkalmazás</string>
+  <string name="about_version">verzió %1$s</string>
+  <string name="actionbar_sync">Fiók frissítése</string>
   <string name="actionbar_upload">Feltöltés</string>
   <string name="actionbar_upload_from_apps">Más alkalmazásokból származó tartalom</string>
   <string name="actionbar_upload_files">Fájlok</string>
+  <string name="actionbar_open_with">Megnyitás a következővel</string>
   <string name="actionbar_mkdir">Mappa létrehozása</string>
   <string name="actionbar_search">Keresés</string>
   <string name="actionbar_settings">Beállítások</string>
@@ -36,10 +40,16 @@
   <string name="prefs_pincode_summary">Védje meg az alkalmazást</string>
   <string name="prefs_instant_upload">Az azonnali feltöltés engedélyezése</string>
   <string name="prefs_instant_upload_summary">Az eszköz által készített fényképek azonnali feltöltése</string>
+  <string name="prefs_log_title">Naplózás engedélyezése</string>
+  <string name="prefs_log_summary">Ez használható a problémák naplózásához</string>
+  <string name="prefs_log_title_history">Naplózás előzménye</string>
+  <string name="prefs_log_summary_history">Ez megjeleníti a rögzitett eseményeket</string>
+  <string name="prefs_log_delete_history_button">Elözmények törlése</string>
+  <string name="auth_check_server">Szerver állapot ellenörzés</string>
   <string name="auth_host_url">A kiszolgáló címe</string>
   <string name="auth_username">Felhasználói név</string>
   <string name="auth_password">Jelszó</string>
-  <string name="auth_register">Új kapcsolat: %1$s</string>
+  <string name="auth_register">Új vagy a %1$s területen?</string>
   <string name="new_session_uri_error">A megadott cím helytelen</string>
   <string name="new_session_session_name_error">A megadott munkafolyamatnév érvénytelen</string>
   <string name="sync_string_files">Fájlok</string>
@@ -68,6 +78,7 @@
   <string name="filedetails_created">Készült:</string>
   <string name="filedetails_modified">Módosítva:</string>
   <string name="filedetails_download">Letöltés</string>
+  <string name="filedetails_sync_file">File frissítése</string>
   <string name="filedetails_redownload">Ismételt letöltés</string>
   <string name="filedetails_renamed_in_upload_msg">A feltöltés során az állmányt erre neveztük át: %1$s</string>
   <string name="common_yes">Igen</string>
@@ -82,6 +93,7 @@
   <string name="common_loading">Betöltés ...</string>
   <string name="common_error_unknown">Ismeretlen hiba</string>
   <string name="about_title">Rólunk</string>
+  <string name="change_password">A jelszó megváltoztatása</string>
   <string name="delete_account">Fiók törlése</string>
   <string name="create_account">Fiók létrehozása</string>
   <string name="upload_chooser_title">Feltöltés innen ...</string>
@@ -105,12 +117,14 @@
   <string name="sync_string_contacts">Címtár</string>
   <string name="sync_fail_ticker">A szinkronizálás sikertelen</string>
   <string name="sync_fail_content">%1$s szinkronizációját nem sikerült befejezni</string>
+  <string name="sync_fail_content_unauthorized">Érvénytelen jelszó a következőhöz %1$s</string>
   <string name="sync_conflicts_in_favourites_ticker">Ütközések vannak</string>
   <string name="sync_conflicts_in_favourites_content">%1$d szinkronizálandó állományokat nem sikerült szinkronizálni</string>
   <string name="sync_fail_in_favourites_ticker">A szinkronizálandó fájlokat nem sikerült szinkronizálni</string>
   <string name="sync_fail_in_favourites_content">%1$d fájl szinkronizálása nem sikerült (%2$d ütközés)</string>
   <string name="sync_foreign_files_forgotten_ticker">Néhány helyi fájlt figyelmen kívül hagytunk</string>
   <string name="sync_foreign_files_forgotten_content">%1$d fájlt nem sikerült a %2$s mappából  bemásolni</string>
+  <string name="sync_foreign_files_forgotten_explanation">Az 1.3.16 verzió használatakor azok az állományok, amiket erről az eszközről töltenek fel, a helyi %1$s mappába másolódnak be, hogy elkerülhető legyen az adatveszteség, amikor ugyanazt az állományt több résztvevő is szinkronizál.\n\nEmiatt a változás miatt, az e program korábbi változataival feltöltött állományok a %2$s mappába másolódtak. Sajnos azonban egy a szinkronizáció közben fellépő hiba miatt ez a feladat csak részben valósult meg. Két lehetősége van: vagy úgy dönt, hogy maradjanak a fájl(ok) ahol vannak és akkor törölje a %3$s-re mutató linket, vagy pedig helyezze át az állomány(oka)t a %1$s mappába, és tartsa meg a %4$s-re mutató linket.\n\nAz alábbiakban látható a helyi fájl(ok) listája és a távoli fájl(ok) a %5$s mappában, amihez linkelve voltak.</string>
   <string name="foreign_files_move">Helyezzük át mindet</string>
   <string name="foreign_files_success">Az összes fájlt áthelyeztük</string>
   <string name="foreign_files_fail">Egyes fájlokat nem sikerült áthelyezni</string>
@@ -160,12 +174,14 @@
     <item>30</item>
     <item>60</item>
   </string-array>
+  <string name="auth_trying_to_login">Bejelentkezés...</string>
   <string name="auth_no_net_conn_title">Nincs hálózati kapcsolat</string>
   <string name="auth_no_net_conn_message">Nem található hálózati kapcsolat, ellenőrizze az internetkapcsolatát, és próbálja újra.</string>
   <string name="auth_connect_anyway">Csatlakozás mindenképpen</string>
   <string name="auth_nossl_plain_ok_title">Nem érhető el biztonságos kapcsolat.</string>
   <string name="auth_nossl_plain_ok_message">Az alkalmazás nem tudott titkosított kapcsolatot kialakítani a kiszolgálóval. A nem titkosított kapcsolat elérhető. Folytathatja vagy kiléphet.</string>
   <string name="auth_connection_established">A kapcsolat létrejött</string>
+  <string name="auth_testing_connection">Kapcsolat tesztelése...</string>
   <string name="auth_not_configured_title">Hibás a kiszolgáló beállítása</string>
   <string name="auth_not_configured_message">Úgy tűnik a kiszolgáló nincs megfelelően beállítva. Lépjen kapcsolatba a rendszergazdával további információkért.</string>
   <string name="auth_unknown_error_title">Ismeretlen hiba történt!</string>
@@ -181,8 +197,14 @@
   <string name="auth_bad_oc_version_title">Ismeretlen változat a kiszolgálón</string>
   <string name="auth_wrong_connection_title">A kapcsolat nem hozható létre</string>
   <string name="auth_secure_connection">Létrejött a titkosított kapcsolat</string>
+  <string name="auth_unauthorized">Hibás felhasználónév vagy jelszó</string>
+  <string name="auth_oauth_error">Sikertelen azonosítás</string>
+  <string name="auth_oauth_error_access_denied">Hozzáférés megtagadva az azonsítást végző szerver által</string>
   <string name="auth_not_found">Rossz a megadott útvonal</string>
   <string name="auth_internal">Belső hiba történt a kiszolgálón, hibakód: %1$d</string>
+  <string name="auth_wtf_reenter_URL">Nem várt állapot; kérlek, menj a szerver URL-jére újra.</string>
+  <string name="auth_expired_oauth_token_toast">A bejelentkezés ideje lejárt..\nJelentkezz be újból.</string>
+  <string name="auth_expired_basic_auth_toast">Kélek, írd be a jelenlegi jelszavadat</string>
   <string name="crashlog_message">A program összeomlott. El akar küldeni egy összeomlási jelentést?</string>
   <string name="crashlog_send_report">Jelentés küldése</string>
   <string name="crashlog_dont_send_report">Ne küldjön jelentést</string>
@@ -209,6 +231,11 @@
   <string name="wait_a_moment">Egy pillanat...</string>
   <string name="filedisplay_unexpected_bad_get_content">Váratlan hiba; válassza ki a fájlt más programból</string>
   <string name="filedisplay_no_file_selected">Egy fájl sincs kiválasztva</string>
+  <string name="oauth_host_url">oAuth2 URL</string>
+  <string name="oauth_check_onoff">Bejelentkezés oAuth2-vel</string>
+  <string name="oauth_login_connection">Kapcsolódás az oAuth2 szerverhez...</string>
+  <string name="oauth_code_validation_message">Nyisd meg a böngészőt és menj ide:\n%1$s.\nEzt a kódot használd ott:\n%2$s</string>
+  <string name="oauth_connection_url_unavailable">Ez az URL jelenleg nem elérhető.</string>
   <string name="ssl_validator_title">Figyelmeztetés</string>
   <string name="ssl_validator_header">A kiszolgálót nem sikerült azonosítani</string>
   <string name="ssl_validator_reason_cert_not_trusted">- A kiszolgáló tanúsítványa nem megbízható</string>

+ 1 - 0
res/values-ia/strings.xml

@@ -18,6 +18,7 @@
   <string name="common_cancel">Cancellar</string>
   <string name="common_error">Error</string>
   <string name="common_error_unknown">Error Incognite</string>
+  <string name="change_password">Cambiar contrasigno</string>
   <string name="sync_string_contacts">Contactos</string>
   <string name="common_share">Compartir</string>
   <!--we need to improve the communication of errors to the user-->

+ 1 - 0
res/values-id/strings.xml

@@ -32,6 +32,7 @@
   <string name="common_cancel_upload">Batal mengunggah</string>
   <string name="common_cancel">batal</string>
   <string name="common_error">kesalahan</string>
+  <string name="change_password">Ubah sandi</string>
   <string name="sync_string_contacts">kontak</string>
   <string name="common_share">berbagi</string>
   <string name="common_rename">Ubah nama</string>

+ 1 - 0
res/values-is/strings.xml

@@ -21,6 +21,7 @@
   <string name="common_cancel_upload">Hætta við innsendingu</string>
   <string name="common_cancel">Hætta við</string>
   <string name="common_error"><strong>Villa</strong></string>
+  <string name="change_password">Breyta lykilorði</string>
   <string name="common_share">Deila</string>
   <string name="common_rename">Endurskýra</string>
   <string name="common_remove">Fjarlægja</string>

+ 7 - 5
res/values-it/strings.xml

@@ -45,10 +45,11 @@
   <string name="prefs_log_title_history">Cronologia di registrazione log</string>
   <string name="prefs_log_summary_history">Mostra i log registrati</string>
   <string name="prefs_log_delete_history_button">Elimina la cronologia</string>
+  <string name="auth_check_server">Verifica server</string>
   <string name="auth_host_url">Indirizzo del server</string>
   <string name="auth_username">Nome utente</string>
   <string name="auth_password">Password</string>
-  <string name="auth_register">Sono nuovo di ownCloud</string>
+  <string name="auth_register">Prima volta su %1$s?</string>
   <string name="new_session_uri_error">URL fornito errato</string>
   <string name="new_session_session_name_error">Nome di sessione errato</string>
   <string name="sync_string_files">File</string>
@@ -92,6 +93,7 @@
   <string name="common_loading">Caricamento in corso...</string>
   <string name="common_error_unknown">Errore sconosciuto</string>
   <string name="about_title">Informazioni</string>
+  <string name="change_password">Modifica la password</string>
   <string name="delete_account">Elimina account</string>
   <string name="create_account">Crea account</string>
   <string name="upload_chooser_title">Carica file da...</string>
@@ -115,7 +117,7 @@
   <string name="sync_string_contacts">Contatti</string>
   <string name="sync_fail_ticker">Sincronizzazione non riuscita</string>
   <string name="sync_fail_content">La sincronizzazione di %1$s non può essere completata</string>
-  <string name="sync_fail_content_unauthorized">Credenziali non valide per </string>
+  <string name="sync_fail_content_unauthorized">Password non valida per %1$s</string>
   <string name="sync_conflicts_in_favourites_ticker">Conflitti rilevati</string>
   <string name="sync_conflicts_in_favourites_content">%1$d file non possono essere sincronizzati</string>
   <string name="sync_fail_in_favourites_ticker">Sincronizzazione dei file non riuscita</string>
@@ -172,7 +174,7 @@
     <item>30</item>
     <item>60</item>
   </string-array>
-  <string name="auth_trying_to_login">Tentativo di connessione...</string>
+  <string name="auth_trying_to_login">Tentativo di accesso in corso...</string>
   <string name="auth_no_net_conn_title">Nessuna connessione di rete</string>
   <string name="auth_no_net_conn_message">Non sono state rilevate connessioni di rete, controlla la tua connessione a  Internet e prova ancora.</string>
   <string name="auth_connect_anyway">Connetti comunque</string>
@@ -195,14 +197,14 @@
   <string name="auth_bad_oc_version_title">Versione del server ownCloud non riconosciuta</string>
   <string name="auth_wrong_connection_title">Impossibile stabilire la connessione</string>
   <string name="auth_secure_connection">Connessione sicura stabilita</string>
-  <string name="auth_unauthorized">Credenziali non valide</string>
+  <string name="auth_unauthorized">Nome utente o password errati</string>
   <string name="auth_oauth_error">Autorizzazione non riuscita</string>
   <string name="auth_oauth_error_access_denied">Accesso negato dal server di autorizzazione</string>
   <string name="auth_not_found">Il percorso fornito non è valido</string>
   <string name="auth_internal">Errore interno del server, codice %1$d</string>
   <string name="auth_wtf_reenter_URL">Stato inatteso; inserisci nuovamente l\'URL del server</string>
   <string name="auth_expired_oauth_token_toast">Autorizzazione scaduta.\nRichiedi l\'autorizzazione</string>
-  <string name="auth_expired_basic_auth_toast">Le credenziali salvate non sono valide.\nDigita le credenziali attuali</string>
+  <string name="auth_expired_basic_auth_toast">Inserisci la password attuale</string>
   <string name="crashlog_message">Applicazione terminata in modo inatteso. Vuoi inviare una segnalazione del problema?</string>
   <string name="crashlog_send_report">Invia segnalazione</string>
   <string name="crashlog_dont_send_report">Non inviare la segnalazione</string>

+ 6 - 4
res/values-ja-rJP/strings.xml

@@ -45,10 +45,11 @@
   <string name="prefs_log_title_history">記録している履歴</string>
   <string name="prefs_log_summary_history">これは記録されたログを表示します</string>
   <string name="prefs_log_delete_history_button">履歴を削除</string>
+  <string name="auth_check_server">サーバーを確認する</string>
   <string name="auth_host_url">サーバアドレス</string>
   <string name="auth_username">ユーザー名</string>
   <string name="auth_password">パスワード</string>
-  <string name="auth_register">私は、ownCloudの新規ユーザーです。</string>
+  <string name="auth_register">%1$sは初めてですか?</string>
   <string name="new_session_uri_error">誤ったURLです</string>
   <string name="new_session_session_name_error">誤ったセッション名です</string>
   <string name="sync_string_files">ファイル</string>
@@ -92,6 +93,7 @@
   <string name="common_loading">読込中...</string>
   <string name="common_error_unknown">不明なエラー</string>
   <string name="about_title">ownCloudについて</string>
+  <string name="change_password">パスワードを変更</string>
   <string name="delete_account">アカウントを削除</string>
   <string name="create_account">アカウントを作成</string>
   <string name="upload_chooser_title">アップロード …</string>
@@ -115,7 +117,7 @@
   <string name="sync_string_contacts">コンタクト</string>
   <string name="sync_fail_ticker">同期失敗</string>
   <string name="sync_fail_content">%1$s の同期が完了しませんでした。</string>
-  <string name="sync_fail_content_unauthorized">%1$sへの無効な資格情報</string>
+  <string name="sync_fail_content_unauthorized">1$sの無効なパスワード</string>
   <string name="sync_conflicts_in_favourites_ticker">競合が見つかりました</string>
   <string name="sync_conflicts_in_favourites_content">%1$d 同期ファイルを同期できませんでした</string>
   <string name="sync_fail_in_favourites_ticker">ファイルの同期に失敗しました</string>
@@ -195,14 +197,14 @@
   <string name="auth_bad_oc_version_title">認識出来ないownCloudサーバのバージョンです</string>
   <string name="auth_wrong_connection_title">接続を確立できませんでした</string>
   <string name="auth_secure_connection">暗号化通信を確立しました</string>
-  <string name="auth_unauthorized">無効な資格情報</string>
+  <string name="auth_unauthorized">間違ったユーザー名もしくはパスワード</string>
   <string name="auth_oauth_error">認証失敗</string>
   <string name="auth_oauth_error_access_denied">認証サーバーによってアクセスが拒否されました</string>
   <string name="auth_not_found">誤ったパスが指定されました</string>
   <string name="auth_internal">内部サーバエラー、コード %1$d</string>
   <string name="auth_wtf_reenter_URL">予期しない状態。もう一度サーバーのURLを入力してください</string>
   <string name="auth_expired_oauth_token_toast">認証の期限が切れています。\nもう一度認証してください。</string>
-  <string name="auth_expired_basic_auth_toast">保存された資格情報が無効です。\n正確な資格情報を入力してください。</string>
+  <string name="auth_expired_basic_auth_toast">現在のパスワードを入力してください</string>
   <string name="crashlog_message">アプリケーションが予期せず終了しました。クラッシュレポートを送ってもよろしいでしょうか?</string>
   <string name="crashlog_send_report">レポートを送信</string>
   <string name="crashlog_dont_send_report">レポートを送信しない</string>

+ 1 - 1
res/values-ka-rGE/strings.xml

@@ -38,7 +38,6 @@
   <string name="auth_host_url">სერვერის მისამართი</string>
   <string name="auth_username">მომხმარებლის სახელი</string>
   <string name="auth_password">პაროლი</string>
-  <string name="auth_register">მე ვარ ახალი %1$s–ში</string>
   <string name="new_session_uri_error">შეყვანილ იქნა არასწორი მისამართი</string>
   <string name="new_session_session_name_error">არასწორი სესიის სახელი</string>
   <string name="sync_string_files">ფაილები</string>
@@ -79,6 +78,7 @@
   <string name="common_error">შეცდომა</string>
   <string name="common_error_unknown">უცნობი შეცდომა</string>
   <string name="about_title">ჩვენს შესახებ</string>
+  <string name="change_password">პაროლის შეცვლა</string>
   <string name="delete_account">ანგარიშის წაშლა</string>
   <string name="create_account">ანგარიშის შექმნა</string>
   <string name="upload_chooser_title">ატვირთე აქედან...</string>

+ 1 - 1
res/values-ko/strings.xml

@@ -38,7 +38,6 @@
   <string name="auth_host_url">서버 주소</string>
   <string name="auth_username">사용자 이름</string>
   <string name="auth_password">암호</string>
-  <string name="auth_register">%1$s의 새로운 사용자입니다</string>
   <string name="new_session_uri_error">잘못된 주소를 입력하였습니다</string>
   <string name="new_session_session_name_error">세션 이름이 잘못되었습니다</string>
   <string name="sync_string_files">파일</string>
@@ -78,6 +77,7 @@
   <string name="common_exit">%1$s 떠나기</string>
   <string name="common_error">오류</string>
   <string name="about_title">정보</string>
+  <string name="change_password">암호 변경</string>
   <string name="delete_account">계정 삭제</string>
   <string name="create_account">계정 만들기</string>
   <string name="upload_chooser_title">다음에서 업로드...</string>

+ 7 - 0
res/values-lb/strings.xml

@@ -18,19 +18,24 @@
   <string name="actionbar_settings">Astellungen</string>
   <string name="prefs_category_general">Allgemeng</string>
   <string name="prefs_add_session">Nei Sessioun bäisetzen</string>
+  <string name="prefs_create_img_thumbnails">Thumbnails Biller erstellen</string>
   <string name="prefs_select_oc_account">Account auswielen</string>
+  <string name="prefs_trackmydevice_interval_summary">All 1 Minute updaten</string>
   <string name="prefs_accounts">Accounten</string>
   <string name="auth_username">Benotzernumm</string>
   <string name="auth_password">Passwuert</string>
   <string name="sync_string_files">Dateien</string>
+  <string name="uploader_no_file_selected">Et ass kee Fichier ausgewielt ginn</string>
   <string name="setup_hint_username">Benotzernumm</string>
   <string name="setup_hint_password">Passwuert</string>
+  <string name="setup_hint_address">Link</string>
   <string name="setup_hint_show_password">Passwuert uweisen?</string>
   <string name="setup_btn_connect">Verbannen</string>
   <string name="uploader_btn_upload_text">Eroplueden</string>
   <string name="uploader_wrn_no_account_title">Keen Account fonnt</string>
   <string name="uploader_wrn_no_account_setup_btn_text">Setup</string>
   <string name="uploader_wrn_no_account_quit_btn_text">Erausgoen</string>
+  <string name="uploader_info_uploading">Heichlueden</string>
   <string name="filedetails_size">Gréisst:</string>
   <string name="filedetails_type">Typ:</string>
   <string name="filedetails_created">Erstallt:</string>
@@ -42,8 +47,10 @@
   <string name="common_cancel_upload">Upload ofbriechen</string>
   <string name="common_cancel">Ofbriechen</string>
   <string name="common_error">Fehler</string>
+  <string name="change_password">Passwuert änneren</string>
   <string name="sync_string_contacts">Kontakter</string>
   <string name="common_share">Deelen</string>
+  <string name="common_remove">Läschen</string>
   <string name="ssl_validator_title">Warnung</string>
   <!--we need to improve the communication of errors to the user-->
 </resources>

+ 4 - 0
res/values-lt-rLT/strings.xml

@@ -61,7 +61,9 @@
   <string name="common_cancel_upload">Atšaukti siuntimą</string>
   <string name="common_cancel">Atšaukti</string>
   <string name="common_error">Klaida</string>
+  <string name="common_error_unknown">Neatpažinta klaida</string>
   <string name="about_title">Apie</string>
+  <string name="change_password">Pakeisti slaptažodį</string>
   <string name="delete_account">Ištrinti paskyrą</string>
   <string name="create_account">Sukurti paskyrą</string>
   <string name="upload_chooser_title">Įkelti iš ...</string>
@@ -96,10 +98,12 @@
     <item>30</item>
     <item>60</item>
   </string-array>
+  <string name="auth_trying_to_login">Bandoma prisijungti...</string>
   <string name="auth_no_net_conn_title">Nėra tinklo ryšio</string>
   <string name="auth_connect_anyway">Vis tiek prisijungti</string>
   <string name="auth_nossl_plain_ok_title">Saugus prisijungimas negalimas.</string>
   <string name="auth_connection_established">Ryšys užmegztas</string>
+  <string name="auth_testing_connection">Išbandomas prisijungimas...</string>
   <string name="auth_not_configured_title">Sugadinta ownCloud konfigūracija</string>
   <string name="auth_unknown_error_title">Įvyko nežinoma klaida!</string>
   <string name="auth_timeout_title">Serveris per ilgai neatsako</string>

+ 1 - 1
res/values-lv/strings.xml

@@ -38,7 +38,6 @@
   <string name="auth_host_url">Servera adrese</string>
   <string name="auth_username">Lietotājvārds</string>
   <string name="auth_password">Parole</string>
-  <string name="auth_register">Esmu %1$s iesācējs</string>
   <string name="new_session_uri_error">Ir dota nepareiza adrese</string>
   <string name="new_session_session_name_error">Nepareizs sesijas nosaukums</string>
   <string name="sync_string_files">Datnes</string>
@@ -78,6 +77,7 @@
   <string name="common_exit">Pamest %1$s</string>
   <string name="common_error">Kļūda</string>
   <string name="about_title">Par</string>
+  <string name="change_password">Mainīt paroli</string>
   <string name="delete_account">Dzēst kontu</string>
   <string name="create_account">Izveidot kontu</string>
   <string name="upload_chooser_title">Augšupielādēt no...</string>

+ 1 - 0
res/values-mk/strings.xml

@@ -50,6 +50,7 @@
   <string name="common_cancel_upload">Откажи прикачување</string>
   <string name="common_cancel">Откажи</string>
   <string name="common_error">Грешка</string>
+  <string name="change_password">Смени лозинка</string>
   <string name="sync_string_contacts">Контакти</string>
   <string name="common_share">Сподели</string>
   <string name="common_rename">Преименувај</string>

+ 5 - 0
res/values-ml-rIN/strings.xml

@@ -0,0 +1,5 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<resources>
+  <string name="main_music">സംഗീതം</string>
+  <!--we need to improve the communication of errors to the user-->
+</resources>

+ 1 - 0
res/values-ms-rMY/strings.xml

@@ -56,6 +56,7 @@
   <string name="common_cancel">Batal</string>
   <string name="common_save_exit">Simpan &amp; Keluar</string>
   <string name="common_error">Ralat</string>
+  <string name="change_password">Ubah kata laluan</string>
   <string name="uploader_info_dirname">Nama direktori</string>
   <string name="common_choose_account">Pilih akaun</string>
   <string name="sync_string_contacts">Hubungi </string>

+ 3 - 0
res/values-nb-rNO/strings.xml

@@ -62,6 +62,7 @@
   <string name="common_save_exit">Lagre og avslutt</string>
   <string name="common_error">Feil</string>
   <string name="about_title">Om</string>
+  <string name="change_password">Endre passord</string>
   <string name="delete_account">Slett konto</string>
   <string name="create_account">Opprett konto</string>
   <string name="upload_chooser_title">Last opp fra...</string>
@@ -95,10 +96,12 @@
     <item>30</item>
     <item>60</item>
   </string-array>
+  <string name="auth_trying_to_login">Prøver å logge inn...</string>
   <string name="auth_no_net_conn_title">Ingen nettverkstilkobling</string>
   <string name="auth_connect_anyway">Koble til likevel</string>
   <string name="auth_nossl_plain_ok_title">Sikker tilkobling ikke tilgjengelig.</string>
   <string name="auth_connection_established">Tilkobling opprettet</string>
+  <string name="auth_testing_connection">Tester tilgang...</string>
   <string name="auth_unknown_error_title">Ukjent feil oppstod!</string>
   <string name="auth_unknown_host_title">Fant ikke tjener</string>
   <string name="auth_unknown_host_message">Fant ikke spesifisert tjener.  Vennligst sjekk tjenernavnet og server-tilgjengeligheten, og prøv på nytt.</string>

+ 8 - 6
res/values-nl/strings.xml

@@ -45,10 +45,11 @@
   <string name="prefs_log_title_history">Log-geschiedenis</string>
   <string name="prefs_log_summary_history">Dit toont de bijgehouden logs</string>
   <string name="prefs_log_delete_history_button">Verwijder Geschiedenis</string>
+  <string name="auth_check_server">Controleer server</string>
   <string name="auth_host_url">Server adres</string>
   <string name="auth_username">Gebruikersnaam</string>
   <string name="auth_password">Wachtwoord</string>
-  <string name="auth_register">Ik ben nieuw op ownCloud</string>
+  <string name="auth_register">Nieuw bij %1$s?</string>
   <string name="new_session_uri_error">Onjuiste URL</string>
   <string name="new_session_session_name_error">Onjuiste sessienaam</string>
   <string name="sync_string_files">Bestanden</string>
@@ -92,6 +93,7 @@
   <string name="common_loading">Laden...</string>
   <string name="common_error_unknown">Onbekende fout</string>
   <string name="about_title">Over</string>
+  <string name="change_password">Wijzig wachtwoord</string>
   <string name="delete_account">Verwijder account</string>
   <string name="create_account">Maak account aan</string>
   <string name="upload_chooser_title">Upload van ...</string>
@@ -115,7 +117,7 @@
   <string name="sync_string_contacts">Contactpersonen</string>
   <string name="sync_fail_ticker">Synchronisatie mislukt</string>
   <string name="sync_fail_content">Synchronisatie van %1$s kon niet worden voltooid</string>
-  <string name="sync_fail_content_unauthorized">Ongeldige inloggegevens voor %1$s</string>
+  <string name="sync_fail_content_unauthorized">Ongeldig wachtwoord voor %1$s</string>
   <string name="sync_conflicts_in_favourites_ticker">Conflicten gevonden</string>
   <string name="sync_conflicts_in_favourites_content">%1$d in-synch-houden bestanden konden niet worden gesync\'d</string>
   <string name="sync_fail_in_favourites_ticker">In-sync-houden bestanden mislukt</string>
@@ -172,14 +174,14 @@
     <item>30</item>
     <item>60</item>
   </string-array>
-  <string name="auth_trying_to_login">Bezig met inloggen...</string>
+  <string name="auth_trying_to_login">Proberen om in te loggen...</string>
   <string name="auth_no_net_conn_title">Geen netwerkverbinding</string>
   <string name="auth_no_net_conn_message">Er kon geen netwerkverbinding worden gevonden, controleer je internet verbinding en probeer het opnieuw.</string>
   <string name="auth_connect_anyway">Toch verbinden</string>
   <string name="auth_nossl_plain_ok_title">Veilige verbinding niet beschikbaar.</string>
   <string name="auth_nossl_plain_ok_message">De applicatie kon geen beveiligde verbinding met de server maken. Er is echter wel een onbeveiligde verbinding beschikbaar. Je kunt verdergaan of annuleren.</string>
   <string name="auth_connection_established">Verbinding tot stand gebracht</string>
-  <string name="auth_testing_connection">Verbinding aan het testen...</string>
+  <string name="auth_testing_connection">Probeer verbinding...</string>
   <string name="auth_not_configured_title">Foutieve ownCloud configuratie</string>
   <string name="auth_not_configured_message">Het lijkt erop dat je ownCloud instantie niet correct geconfigureerd is. Neem contact op met je beheerder voor meer details.</string>
   <string name="auth_unknown_error_title">Onbekende fout opgetreden!</string>
@@ -195,14 +197,14 @@
   <string name="auth_bad_oc_version_title">Onherkende ownCloud server versie</string>
   <string name="auth_wrong_connection_title">Kon verbinding niet tot stand brengen.</string>
   <string name="auth_secure_connection">Veilige verbinding tot stand gebracht</string>
-  <string name="auth_unauthorized">Ongeldige inloggegevens</string>
+  <string name="auth_unauthorized">Verkeerde gebruikersnaam of wachtwoord</string>
   <string name="auth_oauth_error">Authorisatie niet succesvol</string>
   <string name="auth_oauth_error_access_denied">Toegang geweigerd door authorizatieserver</string>
   <string name="auth_not_found">Verkeerde pad opgegeven</string>
   <string name="auth_internal">Interne server fout, code %1$d</string>
   <string name="auth_wtf_reenter_URL">Onverwachte toestand; voer a.u.b de server-URL nogmaals in.</string>
   <string name="auth_expired_oauth_token_toast">Uw authorisatie is verlopen.</string>
-  <string name="auth_expired_basic_auth_toast">Uw opgeslagen inloggegevens zijn ongeldig.\n\nVoer a.u.b. uw huidige inloggegevens in.</string>
+  <string name="auth_expired_basic_auth_toast">Geef het huidige wachtwoord op</string>
   <string name="crashlog_message">De applicatie is onverwacht beëindigd. Wilt je een crash report versturen?</string>
   <string name="crashlog_send_report">Rapport verzenden</string>
   <string name="crashlog_dont_send_report">Rapport niet verzenden</string>

+ 1 - 0
res/values-nn-rNO/strings.xml

@@ -57,6 +57,7 @@
   <string name="common_save_exit">Lagra &amp; avslutt</string>
   <string name="common_error">Feil</string>
   <string name="about_title">Om</string>
+  <string name="change_password">Endra passord</string>
   <string name="delete_account">Slett konto</string>
   <string name="create_account">Opprett konto</string>
   <string name="upload_chooser_title">Last opp frå …</string>

+ 1 - 0
res/values-oc/strings.xml

@@ -54,6 +54,7 @@
   <string name="common_cancel">Annula</string>
   <string name="common_error">Error</string>
   <string name="about_title">A prepaus</string>
+  <string name="change_password">Cambia lo senhal</string>
   <string name="delete_account">Escafa lo compte</string>
   <string name="create_account">Crea un compte</string>
   <string name="upload_chooser_title">Avalcarga dempuèi ...</string>

+ 6 - 4
res/values-pl/strings.xml

@@ -45,10 +45,11 @@
   <string name="prefs_log_title_history">Zapisuj historię</string>
   <string name="prefs_log_summary_history">To pokazuje zapisane logi</string>
   <string name="prefs_log_delete_history_button">Usuń histrorię</string>
+  <string name="auth_check_server">Sprawdź serwer</string>
   <string name="auth_host_url">Adres Serwera</string>
   <string name="auth_username">Nazwa użytkownika</string>
   <string name="auth_password">Hasło</string>
-  <string name="auth_register">Jestem nowym użytkownikiem %1$s</string>
+  <string name="auth_register">Nowe %1$s?</string>
   <string name="new_session_uri_error">Podano niepoprawny adres</string>
   <string name="new_session_session_name_error">Niepoprawna nazwa sesji</string>
   <string name="sync_string_files">Pliki</string>
@@ -92,6 +93,7 @@
   <string name="common_loading">Wczytuję ...</string>
   <string name="common_error_unknown">Nieznany błąd</string>
   <string name="about_title">O aplikacji</string>
+  <string name="change_password">Zmień hasło</string>
   <string name="delete_account">Usuń konto</string>
   <string name="create_account">Utwórz konto</string>
   <string name="upload_chooser_title">Wyślij plik z …</string>
@@ -115,7 +117,7 @@
   <string name="sync_string_contacts">Kontakty</string>
   <string name="sync_fail_ticker">Błąd synchronizacji</string>
   <string name="sync_fail_content">Nie można było ukończyć synchronizacji %1$s </string>
-  <string name="sync_fail_content_unauthorized">Błędne dane logowania dla %1$s</string>
+  <string name="sync_fail_content_unauthorized">Niepoprawne hasło dla %1$s</string>
   <string name="sync_conflicts_in_favourites_ticker">Znaleziono konflikty</string>
   <string name="sync_conflicts_in_favourites_content">%1$d synchronizowanych plików nie może zostać zsynchronizowanych</string>
   <string name="sync_fail_in_favourites_ticker">Synchronizacja plików nie powiodła się</string>
@@ -195,14 +197,14 @@
   <string name="auth_bad_oc_version_title">Nie rozpoznano wersji serwera</string>
   <string name="auth_wrong_connection_title">Nie można ustanowić połączenia</string>
   <string name="auth_secure_connection">Nawiązano bezpieczne połączenie</string>
-  <string name="auth_unauthorized">Błędne dane logowania </string>
+  <string name="auth_unauthorized">Zła nazwa użytkownika lub hasło</string>
   <string name="auth_oauth_error">Nieudana autoryzacja</string>
   <string name="auth_oauth_error_access_denied">Dostęp zabroniony przez serwer autoryzacji</string>
   <string name="auth_not_found">Wprowadzono nieprawidłową ścieżkę</string>
   <string name="auth_internal">Wewnętrzny błąd serwera, kod %1$d</string>
   <string name="auth_wtf_reenter_URL">Nieoczekiwany stan; Proszę wpisz adres URL serwera ponownie</string>
   <string name="auth_expired_oauth_token_toast">Twoja sesja wygasła.\nProszę zaloguj się ponownie</string>
-  <string name="auth_expired_basic_auth_toast">Zapisane dane logowania są nieprawidłowe.\nWprowadź nowe dane logowania.</string>
+  <string name="auth_expired_basic_auth_toast">Proszę podać obecne hasło</string>
   <string name="crashlog_message">Aplikacja została nieoczekiwanie zakończona. Czy chcesz przesłać raport awarii?</string>
   <string name="crashlog_send_report">Wyślij raport</string>
   <string name="crashlog_dont_send_report">Nie wysyłaj raportu</string>

+ 7 - 5
res/values-pt-rBR/strings.xml

@@ -45,10 +45,11 @@
   <string name="prefs_log_title_history">História de Registro</string>
   <string name="prefs_log_summary_history">Isso mostra os registros gravados</string>
   <string name="prefs_log_delete_history_button">Excluir Histórico</string>
+  <string name="auth_check_server">Verificar Servidor</string>
   <string name="auth_host_url">Endereço do servidor</string>
   <string name="auth_username">Nome de usuário</string>
   <string name="auth_password">Senha</string>
-  <string name="auth_register">Sou novo no ownCloud</string>
+  <string name="auth_register">Novo para %1$s?</string>
   <string name="new_session_uri_error">URL errada</string>
   <string name="new_session_session_name_error">Nome de sessão errado</string>
   <string name="sync_string_files">Arquivos</string>
@@ -92,6 +93,7 @@
   <string name="common_loading">Carregando ...</string>
   <string name="common_error_unknown">Erro desconhecido</string>
   <string name="about_title">Sobre</string>
+  <string name="change_password">Alterar senha</string>
   <string name="delete_account">Remover conta</string>
   <string name="create_account">Criar conta</string>
   <string name="upload_chooser_title">Enviar de …</string>
@@ -115,7 +117,7 @@
   <string name="sync_string_contacts">Contatos</string>
   <string name="sync_fail_ticker">Sincronização falhou</string>
   <string name="sync_fail_content">Sincronização de %1$s não pôde ser completada</string>
-  <string name="sync_fail_content_unauthorized">Credenciais inválidas para %1$s</string>
+  <string name="sync_fail_content_unauthorized">Senha inválida para %1$s</string>
   <string name="sync_conflicts_in_favourites_ticker">Conflitos encontrados</string>
   <string name="sync_conflicts_in_favourites_content">%1$d arquivos \"manter sincronizados\" não puderam ser sincronizados</string>
   <string name="sync_fail_in_favourites_ticker">Falha ao manter arquivos sincronizados</string>
@@ -172,7 +174,7 @@
     <item>30</item>
     <item>60</item>
   </string-array>
-  <string name="auth_trying_to_login">Tentando fazer o login ...</string>
+  <string name="auth_trying_to_login">Tentando fazer login...</string>
   <string name="auth_no_net_conn_title">Sem conexão de rede</string>
   <string name="auth_no_net_conn_message">Nenhuma conexão foi detectada, verifique sua conexão com a Internet e tente novamente.</string>
   <string name="auth_connect_anyway">Conectar mesmo assim</string>
@@ -195,14 +197,14 @@
   <string name="auth_bad_oc_version_title">Versão do servidor ownCloud é irreconhecível</string>
   <string name="auth_wrong_connection_title">Não foi possível estabelecer conexão</string>
   <string name="auth_secure_connection">Conexão segura estabelecida</string>
-  <string name="auth_unauthorized">Credenciais inválidas</string>
+  <string name="auth_unauthorized">Nome de usuário e/ou senha está errada!</string>
   <string name="auth_oauth_error">Autorização sem sucesso</string>
   <string name="auth_oauth_error_access_denied">Acesso negado pelo servidor de autorização</string>
   <string name="auth_not_found">Caminho dado está errado</string>
   <string name="auth_internal">Erro interno do servidor, código %1$d</string>
   <string name="auth_wtf_reenter_URL">Estado inesperado, por favor, digite a URL do servidor novamente</string>
   <string name="auth_expired_oauth_token_toast">Sua autorização expirou. ⏎\nPor favor, pedir autorização novamente</string>
-  <string name="auth_expired_basic_auth_toast">Suas credenciais salvas são inválidos. ⏎\nPor favor, insira as credenciais atuais</string>
+  <string name="auth_expired_basic_auth_toast">Por favor, digite sua senha</string>
   <string name="crashlog_message">O aplicativo terminou inesperadamente. Gostaria de enviar um relatório de erros?</string>
   <string name="crashlog_send_report">Enviar relatório</string>
   <string name="crashlog_dont_send_report">Não enviar relatório</string>

+ 18 - 3
res/values-pt-rPT/strings.xml

@@ -13,6 +13,7 @@
   <string name="main_settings">Definições</string>
   <string name="main_tit_accsetup">Configurar conta</string>
   <string name="main_wrn_accsetup">Não há contas no seu aparelho. Para usar esta Aplicação, precisa de criar uma.</string>
+  <string name="about_android">%1$s Aplicação(ões) Android</string>
   <string name="about_version">versão %1$s</string>
   <string name="actionbar_sync">Recarregar a conta</string>
   <string name="actionbar_upload">Enviar</string>
@@ -40,12 +41,15 @@
   <string name="prefs_instant_upload">Activar envio instantâneo</string>
   <string name="prefs_instant_upload_summary">Enviar automaticamente as fotografias tiradas pela camera</string>
   <string name="prefs_log_title">Ativar Rastreio</string>
+  <string name="prefs_log_summary">Isto é usado para registar problemas</string>
   <string name="prefs_log_title_history">Historico do rastreio</string>
+  <string name="prefs_log_summary_history">Isto mostra os registos guardados</string>
   <string name="prefs_log_delete_history_button">Eliminar Histórico</string>
+  <string name="auth_check_server">Verificar Servidor</string>
   <string name="auth_host_url">Endereço do servidor</string>
   <string name="auth_username">Nome de Utilizador</string>
   <string name="auth_password">Palavra-passe</string>
-  <string name="auth_register">Sou novo na  %1$s</string>
+  <string name="auth_register">Novo em %1$s?</string>
   <string name="new_session_uri_error">URL dado errado</string>
   <string name="new_session_session_name_error">Nome de sessão errado</string>
   <string name="sync_string_files">Ficheiros</string>
@@ -74,6 +78,7 @@
   <string name="filedetails_created">Criado:</string>
   <string name="filedetails_modified">Modificado:</string>
   <string name="filedetails_download">Descarregar</string>
+  <string name="filedetails_sync_file">Atualizar ficheiro</string>
   <string name="filedetails_redownload">Actualizar</string>
   <string name="filedetails_renamed_in_upload_msg">O nome do ficheiro foi alterado para %1$s durante o envio.</string>
   <string name="common_yes">Sim</string>
@@ -88,6 +93,7 @@
   <string name="common_loading">A carregar...</string>
   <string name="common_error_unknown">Erro Desconhecido</string>
   <string name="about_title">Sobre</string>
+  <string name="change_password">Alterar palavra-chave</string>
   <string name="delete_account">Apagar conta</string>
   <string name="create_account">Criar conta</string>
   <string name="upload_chooser_title">Carregar de...</string>
@@ -111,13 +117,14 @@
   <string name="sync_string_contacts">Contactos</string>
   <string name="sync_fail_ticker">Falhou a sincronização</string>
   <string name="sync_fail_content">Não foi possível sincronizar %1$s</string>
-  <string name="sync_fail_content_unauthorized">Credenciais inválidas para %1$s</string>
+  <string name="sync_fail_content_unauthorized">Password inválida para %1$s</string>
   <string name="sync_conflicts_in_favourites_ticker">Foram encontrados conflitos</string>
   <string name="sync_conflicts_in_favourites_content">Não foi possível sincronizar o ficheiro %1$d</string>
   <string name="sync_fail_in_favourites_ticker">Falhou a operação de manter os ficheiros sincronizados</string>
   <string name="sync_fail_in_favourites_content">Não foi possível sincronizar  o conteúdo de %1$d ficheiros  (%2$d conflictos)</string>
   <string name="sync_foreign_files_forgotten_ticker">Alguns ficheiros locais ficaram esquecidos</string>
   <string name="sync_foreign_files_forgotten_content">%1$d ficheiros da directoria %2$s não foram copiados</string>
+  <string name="sync_foreign_files_forgotten_explanation">Com a versão 1.3.16, os ficheiros que foram enviados deste dispositivo foram copiados para a pasta local %1$s para prevenir perda de dados quando um ficheiro está partilhado com várias contas.\nDevido a esta alteração, todos os ficheiros e as suas versões foram copiados para a pasta %2$s. Contudo, um erro não deixou concluír este processo durante a sincronização da conta. Pode deixar o ficheiro(s) como está(ão) e remover o link para %3$s, ou mover o(s) ficheiro(s)  para a pasta %1$s e guardar o link para %4$s.\n\nEm baixo está(ão) listados o(s) ficheiro(s) locais e remotos em %5$s que foram ligados.</string>
   <string name="foreign_files_move">Mover Todos</string>
   <string name="foreign_files_success">Todos os ficheiros foram movidos</string>
   <string name="foreign_files_fail">Não foi possível mover alguns ficheiros</string>
@@ -190,9 +197,14 @@
   <string name="auth_bad_oc_version_title">Versão do servidor ownCloud não reconhecida</string>
   <string name="auth_wrong_connection_title">Não consegue estabelecer ligação</string>
   <string name="auth_secure_connection">Ligação segura estabelecida</string>
-  <string name="auth_unauthorized">Credenciais inválidas</string>
+  <string name="auth_unauthorized">Nome de utilizador/password inválida</string>
+  <string name="auth_oauth_error">autorização mal sucedida</string>
+  <string name="auth_oauth_error_access_denied">Acesso negado pelo servidor</string>
   <string name="auth_not_found">Foi dado um caminho inválido</string>
   <string name="auth_internal">Erro interno de servidor, código: %1$d</string>
+  <string name="auth_wtf_reenter_URL">Estado inesperado, por favor, digite a URL do servidor novamente</string>
+  <string name="auth_expired_oauth_token_toast">A sua autorização expirou.\nPor favor, introduza novamente</string>
+  <string name="auth_expired_basic_auth_toast">Por favor, introduza a password actual</string>
   <string name="crashlog_message">A aplicação terminou de forma inesperada. Deseja enviar o relatório do erro?</string>
   <string name="crashlog_send_report">Enviar relatório</string>
   <string name="crashlog_dont_send_report">Não enviar relatório</string>
@@ -219,8 +231,11 @@
   <string name="wait_a_moment">Aguarde um momento</string>
   <string name="filedisplay_unexpected_bad_get_content">Erro inesperado. Por favor tente outra aplicação para seleccionar o ficheiro.</string>
   <string name="filedisplay_no_file_selected">Não selecionou nenhum ficheiro</string>
+  <string name="oauth_host_url">oAuth2 URL</string>
   <string name="oauth_check_onoff">Entrar usando oAuth2</string>
   <string name="oauth_login_connection">A ligar ao servidor oAuth2</string>
+  <string name="oauth_code_validation_message">Por favor, abra o navegador de internet e vá a:\n%1$s.\nValide este codigo aqui:\n%2$s</string>
+  <string name="oauth_connection_url_unavailable">O acesso a este URL não está disponível.</string>
   <string name="ssl_validator_title">Aviso</string>
   <string name="ssl_validator_header">Não foi possível verificar a identidade do site.</string>
   <string name="ssl_validator_reason_cert_not_trusted">- O certificado do servidor não é de confiança</string>

+ 3 - 1
res/values-ro/strings.xml

@@ -34,7 +34,6 @@
   <string name="auth_host_url">Adresa server-ului</string>
   <string name="auth_username">Nume utilizator</string>
   <string name="auth_password">Parolă</string>
-  <string name="auth_register">Sunt novice în ownCloud</string>
   <string name="new_session_uri_error">URL specificat greșit</string>
   <string name="new_session_session_name_error">Numele sesiunii este greșit</string>
   <string name="sync_string_files">Fișiere</string>
@@ -67,6 +66,7 @@
   <string name="common_exit">Părăsire ownCloud</string>
   <string name="common_error">Eroare</string>
   <string name="about_title">Despre</string>
+  <string name="change_password">Schimbă parola</string>
   <string name="delete_account">Șterge cont</string>
   <string name="create_account">Crează cont</string>
   <string name="upload_chooser_title">Încarcă din...</string>
@@ -106,8 +106,10 @@
     <item>30</item>
     <item>60</item>
   </string-array>
+  <string name="auth_trying_to_login">În curs de autentificare...</string>
   <string name="auth_nossl_plain_ok_title">Conexiune securizată indisponibilă</string>
   <string name="auth_connection_established">Conexiune stabilită</string>
+  <string name="auth_testing_connection">Se testează conexiunea...</string>
   <string name="auth_not_configured_title">Configurație ownCloud incorectă</string>
   <string name="auth_not_configured_message">Se pare că instanța ta ownCloud nu este configurată corect. Contactează administratorul pentru mai multe detalii.</string>
   <string name="auth_unknown_error_title">A apărut o eroare necunoscută!</string>

+ 71 - 1
res/values-ru/strings.xml

@@ -13,9 +13,13 @@
   <string name="main_settings">Настройки</string>
   <string name="main_tit_accsetup">Настроить аккаунт</string>
   <string name="main_wrn_accsetup">На вашем устройстве нет ownCloud аккаунтов. Вам нужно создать аккаунт, чтобы пользоваться этим приложеним.</string>
+  <string name="about_android">%1$s Приложение Андроид</string>
+  <string name="about_version">Версия %1$s</string>
+  <string name="actionbar_sync">Обновить учетную запись</string>
   <string name="actionbar_upload">Загрузка</string>
   <string name="actionbar_upload_from_apps">Содержимое от других приложений</string>
   <string name="actionbar_upload_files">Файлы</string>
+  <string name="actionbar_open_with">Открыть с помощью</string>
   <string name="actionbar_mkdir">Создать директорию</string>
   <string name="actionbar_search">Найти</string>
   <string name="actionbar_settings">Настройки</string>
@@ -36,10 +40,16 @@
   <string name="prefs_pincode_summary">Защитить ваш клиент ownCloud</string>
   <string name="prefs_instant_upload">Включить моментальную загрузку</string>
   <string name="prefs_instant_upload_summary">Моментально загружать фотографии, полученные с камеры</string>
+  <string name="prefs_log_title">Включить запись журнала</string>
+  <string name="prefs_log_summary">Это используется для  регистрации проблем</string>
+  <string name="prefs_log_title_history">Записывать историю</string>
+  <string name="prefs_log_summary_history">Здесь показаны журналы</string>
+  <string name="prefs_log_delete_history_button">Удалить историю</string>
+  <string name="auth_check_server">Проверить сервер</string>
   <string name="auth_host_url">Адрес сервера</string>
   <string name="auth_username">Пользователь</string>
   <string name="auth_password">Пароль</string>
-  <string name="auth_register">Я новичёк в ownCloud</string>
+  <string name="auth_register">Впервые с %1$s?</string>
   <string name="new_session_uri_error">Дана неверная ссылка</string>
   <string name="new_session_session_name_error">Неверное имя сессии</string>
   <string name="sync_string_files">Файлы</string>
@@ -51,6 +61,7 @@
   <string name="setup_title">Соединение с вашим ownCloud</string>
   <string name="setup_btn_connect">Соединить</string>
   <string name="uploader_btn_upload_text">Загрузка</string>
+  <string name="uploader_top_message">Выбрать место для загрузки:</string>
   <string name="uploader_wrn_no_account_title">Аккаунты не найдены</string>
   <string name="uploader_wrn_no_account_text">На вашем устройстве нет аккаунтов ownCloud. Настройте сначала аккаунт.</string>
   <string name="uploader_wrn_no_account_setup_btn_text">Установка</string>
@@ -67,6 +78,7 @@
   <string name="filedetails_created">Создан:</string>
   <string name="filedetails_modified">Изменён:</string>
   <string name="filedetails_download">Скачать</string>
+  <string name="filedetails_sync_file">Обновить файл</string>
   <string name="filedetails_redownload">Скачать заново</string>
   <string name="filedetails_renamed_in_upload_msg">Файл был переименован в %1$s во время загрузки</string>
   <string name="common_yes">Да</string>
@@ -78,8 +90,10 @@
   <string name="common_save_exit">Сохранить &amp; Выйти</string>
   <string name="common_exit">Выйти из ownCloud</string>
   <string name="common_error">Ошибка</string>
+  <string name="common_loading">Загружается...</string>
   <string name="common_error_unknown">Неизвестная ошибка</string>
   <string name="about_title">О программе</string>
+  <string name="change_password">Сменить пароль</string>
   <string name="delete_account">Удалить аккаунт</string>
   <string name="create_account">Создать аккаунт</string>
   <string name="upload_chooser_title">Загрузить из...</string>
@@ -98,16 +112,19 @@
   <string name="downloader_download_succeeded_content">%1$s успешно скачан</string>
   <string name="downloader_download_failed_ticker">Скачивание не удалась</string>
   <string name="downloader_download_failed_content">Скачивание %1$s не может быть завершено</string>
+  <string name="downloader_not_downloaded_yet">Ещё не загружено</string>
   <string name="common_choose_account">Выберите аккаунт</string>
   <string name="sync_string_contacts">Контакты</string>
   <string name="sync_fail_ticker">Синхронизация прошла неудачно</string>
   <string name="sync_fail_content">Синхронизация %1$s не может быть завершена</string>
+  <string name="sync_fail_content_unauthorized">Неверный пароль для %1$s</string>
   <string name="sync_conflicts_in_favourites_ticker">Обнаружены конфликты</string>
   <string name="sync_conflicts_in_favourites_content">%1$d файлы, которые должны быть синхронизированными не могут синхронизироваться</string>
   <string name="sync_fail_in_favourites_ticker">Не удалось синхронизировать файлы</string>
   <string name="sync_fail_in_favourites_content">Содержание %1$d файла(ов) не может быть синхронизировано (%2$d конфликта(ов))</string>
   <string name="sync_foreign_files_forgotten_ticker">Несколько локальных файлов были забыты</string>
   <string name="sync_foreign_files_forgotten_content">%1$d файлы из %2$s папки не могут быть скопированы в</string>
+  <string name="sync_foreign_files_forgotten_explanation">файлы, загруженные с этого устройства, скопированы в локальную папку %1$s для предотвращения потери данных, когда отдельный файл синхронизируется с нескольких учётных записей. По причине этого изменения, все файлы, загруженные в предыдущих версиях этого приложения, были скопированы в папку %2$s. Однако, ошибка помешала завершению этой операции при синхронизации учётной записи. Вы можете либо оставить файлы как есть, или переместить их в папку %1$s и сохранить ссылку в %4$s. \nВ списке указаны локальные файлы, привязанные к файлам на сервере в папке %5$s.</string>
   <string name="foreign_files_move">Переместить всё</string>
   <string name="foreign_files_success">Все файлы были перемещены</string>
   <string name="foreign_files_fail">Некоторые файлы не могут быть перемещены</string>
@@ -126,6 +143,27 @@
   <string name="pincode_wrong">Неверный ownCloud App PIN</string>
   <string name="pincode_removed">ownCloud App PIN удалён</string>
   <string name="pincode_stored">ownCloud App PIN сохранён</string>
+  <string name="media_notif_ticker">%1$s музыкальный проигрыватель</string>
+  <string name="media_state_playing">%1$s (проигрывается)</string>
+  <string name="media_state_loading">%1$s (загружается)</string>
+  <string name="media_event_done">%1$s воспроизведение завершено</string>
+  <string name="media_err_nothing_to_play">Не найден медиа-файл</string>
+  <string name="media_err_no_account">Не настроена учётная запись</string>
+  <string name="media_err_not_in_owncloud">Файл в неверной учётной записи</string>
+  <string name="media_err_unsupported">Неподдерживаемый кодек</string>
+  <string name="media_err_io">Файл не может быть прочитан</string>
+  <string name="media_err_malformed">Файл </string>
+  <string name="media_err_timeout">Воспроизведение ожидается слишком долго</string>
+  <string name="media_err_invalid_progressive_playback">Невозможно воспроизвести файл как поток</string>
+  <string name="media_err_unknown">Файл не может быть проигран  стандартным плеером</string>
+  <string name="media_err_security_ex">Ошибка безопасности при воспроизведении %1$s</string>
+  <string name="media_err_io_ex">Ошибка ввода при воспроизведении %1$s</string>
+  <string name="media_err_unexpected">Неожиданная ошибка при воспроизведении %1$s</string>
+  <string name="media_previous_description">Предыдущая</string>
+  <string name="media_rewind_description">Перемотка назад</string>
+  <string name="media_play_pause_description">Воспроизведение или пауза</string>
+  <string name="media_forward_description">Перемотка вперед</string>
+  <string name="media_next_description">Следующая композиция</string>
   <string-array name="prefs_trackmydevice_intervall_keys">
     <item>15 Минут</item>
     <item>30 Минут</item>
@@ -136,12 +174,14 @@
     <item>30</item>
     <item>60</item>
   </string-array>
+  <string name="auth_trying_to_login">Попытка входа...</string>
   <string name="auth_no_net_conn_title">Нет сетевого соединения</string>
   <string name="auth_no_net_conn_message">Сетевое соединение не обнаружено , проверьте соединение с Интернет и попробуйте ещё раз.</string>
   <string name="auth_connect_anyway">Соединить всё равно</string>
   <string name="auth_nossl_plain_ok_title">Защищённое соединение недоступно.</string>
   <string name="auth_nossl_plain_ok_message">Приложение не может установить защищённое соединение с сервером. Однако доступно не защищённое соединение. Вы можете продолжить или прервать.</string>
   <string name="auth_connection_established">Соединение установлено</string>
+  <string name="auth_testing_connection">Тестирование соединения...</string>
   <string name="auth_not_configured_title">Неверная конфигурация ownCloud</string>
   <string name="auth_not_configured_message">Похоже что ваш экземпляр ownCloud не был корректно сконфигурирован. Обратитесь за деталями к вашему администратору.</string>
   <string name="auth_unknown_error_title">Произошла неизвестная ошибка!</string>
@@ -157,8 +197,14 @@
   <string name="auth_bad_oc_version_title">Неизвестная версия сервера ownCloud</string>
   <string name="auth_wrong_connection_title">Невозможно установить соединение</string>
   <string name="auth_secure_connection">Защищённое соединение установлено</string>
+  <string name="auth_unauthorized">Неверное имя пользователя или пароль</string>
+  <string name="auth_oauth_error">Ошибка авторизации</string>
+  <string name="auth_oauth_error_access_denied">Сервер отказал в доступе</string>
   <string name="auth_not_found">Указан неверный путь</string>
   <string name="auth_internal">Внутренняя ошибка сервера, код %1$d</string>
+  <string name="auth_wtf_reenter_URL">Неожиданный ответ; пожалуйста, введите адрес сервера ещё раз</string>
+  <string name="auth_expired_oauth_token_toast">Закончился срок действия сессии. Пожалуйста, авторизуйтесь заново</string>
+  <string name="auth_expired_basic_auth_toast">Пожалуйста, введите пароль</string>
   <string name="crashlog_message">Приложение завершилось неожиданно. Хотите отправить аварийный отчёт?</string>
   <string name="crashlog_send_report">Отправить отчёт</string>
   <string name="crashlog_dont_send_report">Не отправлять отчёт</string>
@@ -185,6 +231,11 @@
   <string name="wait_a_moment">Подождите немного</string>
   <string name="filedisplay_unexpected_bad_get_content">Неизвестная ошибка; попробуйте другое приложение для выбора файла</string>
   <string name="filedisplay_no_file_selected">Файлы не выбраны</string>
+  <string name="oauth_host_url">адрес oAuth2</string>
+  <string name="oauth_check_onoff">Войти через oAuth2</string>
+  <string name="oauth_login_connection">Подключение к серверу oAuth2...</string>
+  <string name="oauth_code_validation_message">Пожалуйста, откройте ссылку\n%1$s\nв браузере и подтвердите этот: %2$s</string>
+  <string name="oauth_connection_url_unavailable">Подключение к этому серверу недоступно</string>
   <string name="ssl_validator_title">Предупреждение</string>
   <string name="ssl_validator_header">Подлинность сайта не может быть проверена</string>
   <string name="ssl_validator_reason_cert_not_trusted">- Сертификат сервера не является доверенным</string>
@@ -210,6 +261,11 @@
   <string name="ssl_validator_label_signature">Подпись:</string>
   <string name="ssl_validator_label_signature_algorithm">Алгоритм:</string>
   <string name="placeholder_sentence">Это заполнитель</string>
+  <string name="placeholder_filename">placeholder.txt</string>
+  <string name="placeholder_filetype">Изображение PNG</string>
+  <string name="placeholder_filesize">389 KB</string>
+  <string name="placeholder_timestamp">2012/05/18 12:23 PM</string>
+  <string name="placeholder_media_time">12:23:45</string>
   <string name="instant_upload_on_wifi">Загружать изображения только через WiFi</string>
   <string name="instant_upload_path">/InstantUpload</string>
   <string name="conflict_title">Конфликт обновления</string>
@@ -217,6 +273,20 @@
   <string name="conflict_keep_both">Оставить оба</string>
   <string name="conflict_overwrite">Заменить</string>
   <string name="conflict_dont_upload">Не загружать</string>
+  <string name="preview_image_description">Предпросмотр</string>
+  <string name="preview_image_error_unknown_format">Это изображение не может быть отображено</string>
+  <string name="preview_image_error_out_of_memory">Недостаточно памяти для показа изображения</string>
   <!--we need to improve the communication of errors to the user-->
   <string name="error__upload__local_file_not_copied">%1$s не может быть скопирован в %2$s локальною папку</string>
+  <string name="actionbar_failed_instant_upload">Быстрая загрузка не удалась</string>
+  <string name="failed_upload_headline_text">Быстрые загрузки не удались</string>
+  <string name="failed_upload_headline_hint">Список всех неудачных загрузок</string>
+  <string name="failed_upload_all_cb">Выбрать всё</string>
+  <string name="failed_upload_headline_retryall_btn">Ещё раз попробовать всё выделенное</string>
+  <string name="failed_upload_headline_delete_all_btn">Удалить всё| выбранное из очереди загрузки</string>
+  <string name="failed_upload_retry_text">Попробовать ещё раз загрузить изображение</string>
+  <string name="failed_upload_load_more_images">Загрузить больше картинок</string>
+  <string name="failed_upload_retry_do_nothing_text">Ничего не делать, если не в сети</string>
+  <string name="failed_upload_failure_text">Сообщение об ошибке</string>
+  <string name="failed_upload_quota_exceeded_text">Проверьте настройки сервера, возможно ваш лимит превышен</string>
 </resources>

+ 3 - 1
res/values-si-rLK/strings.xml

@@ -36,7 +36,6 @@
   <string name="auth_host_url">සේවාදායකයේ ලිපිනය</string>
   <string name="auth_username">පරිශීලක නම</string>
   <string name="auth_password">මුර පදය</string>
-  <string name="auth_register">මම ownCloudට නවකයෙක්මි</string>
   <string name="new_session_uri_error">දී ඇති යෙදුම වැරදි</string>
   <string name="new_session_session_name_error">වැරදි සැසිවාර නමක්</string>
   <string name="sync_string_files">ගොනු</string>
@@ -70,6 +69,7 @@
   <string name="common_exit">ownCloud අත්හැර යන්න</string>
   <string name="common_error">දෝශය</string>
   <string name="about_title">පිළිබඳව</string>
+  <string name="change_password">මුරපදය වෙනස් කිරීම</string>
   <string name="delete_account">ගිණුම මකන්න</string>
   <string name="create_account">ගිණුම සාදන්න</string>
   <string name="uploader_info_dirname">ඩිරෙක්ටරි නම</string>
@@ -93,11 +93,13 @@
     <item>30</item>
     <item>60</item>
   </string-array>
+  <string name="auth_trying_to_login">පිවිසීමට උත්සහ කරනවා...</string>
   <string name="auth_no_net_conn_title">ජාල සම්බන්ධතාවක් නොමැත</string>
   <string name="auth_no_net_conn_message">ජාල සම්බන්ධතාවක් සොයා ගත නොහැක. ඔබගේ අන්තර්ජාල සම්බන්ධතාව පරීක්ෂාකර නැවත උත්සහ කරන්න</string>
   <string name="auth_connect_anyway">කොහොමත් සම්බන්ධවන්න</string>
   <string name="auth_nossl_plain_ok_title">ආරක්ෂිත සම්බන්ධතාවක් නොලැබුණි</string>
   <string name="auth_connection_established">සම්බන්ධතාවක් සාදන ලදී</string>
+  <string name="auth_testing_connection">සම්බන්ධතාව පරීක්ෂා කෙරේ</string>
   <string name="auth_not_configured_title">විකෘතිවු OwnCloud හැඩගැසුමක්</string>
   <string name="auth_unknown_error_title">නොදන්නා දෝෂයක් ඇතිවිය</string>
   <string name="auth_unknown_host_title">සේවාදායකයා සොයාගත නොහැක</string>

+ 27 - 1
res/values-sk-rSK/strings.xml

@@ -13,9 +13,12 @@
   <string name="main_settings">Nastavenia</string>
   <string name="main_tit_accsetup">Nastavenie účtu</string>
   <string name="main_wrn_accsetup">Vo vašom zariadení nie sú žiadne účty. Vytvorte si účet ak chcete používať túto aplikáciu.</string>
+  <string name="about_android">%1$s Android App</string>
+  <string name="about_version">verzia %1$s</string>
   <string name="actionbar_upload">Nahraj súbor</string>
   <string name="actionbar_upload_from_apps">Obsah z inej aplikácie</string>
   <string name="actionbar_upload_files">Súbory</string>
+  <string name="actionbar_open_with">Otvoriť v</string>
   <string name="actionbar_mkdir">Vytvor priečinok</string>
   <string name="actionbar_search">Hľadaj</string>
   <string name="actionbar_settings">Nastavenia</string>
@@ -36,10 +39,10 @@
   <string name="prefs_pincode_summary">Chrániť klienta ownCloud</string>
   <string name="prefs_instant_upload">Zapnúť okamžité odosielanie</string>
   <string name="prefs_instant_upload_summary">Okamžite odosielať fotky z fotoaparátu</string>
+  <string name="prefs_log_delete_history_button">Zmazať históriu</string>
   <string name="auth_host_url">Adresa servera</string>
   <string name="auth_username">Používateľské meno</string>
   <string name="auth_password">Heslo</string>
-  <string name="auth_register">Som nový v %1$s</string>
   <string name="new_session_uri_error">Zadaná nesprávna URL</string>
   <string name="new_session_session_name_error">Nesprávny názov sedenia</string>
   <string name="sync_string_files">Súbory</string>
@@ -82,6 +85,7 @@
   <string name="common_loading">Načítavam...</string>
   <string name="common_error_unknown">Neznáma chyba</string>
   <string name="about_title">O</string>
+  <string name="change_password">Zmeniť heslo</string>
   <string name="delete_account">Zmazať účet</string>
   <string name="create_account">Vytvoriť účet</string>
   <string name="upload_chooser_title">Odoslať z ...</string>
@@ -111,6 +115,7 @@
   <string name="sync_fail_in_favourites_content">Obsah %1$d súborov nemohol byť synchronizovaný (%2$d konfliktov)</string>
   <string name="sync_foreign_files_forgotten_ticker">Niektoré lokálne súbory boli zabudnuté</string>
   <string name="sync_foreign_files_forgotten_content">%1$d súborov z priečinka %2$s nemožno skopírovať do</string>
+  <string name="sync_foreign_files_forgotten_explanation">Od verzie 1.3.16 sú súbory nahrané z tohoto zariadenia, skopírovné do lokálneho priečinka %1$s, aby sa zabránilo strate dát, keď je jeden súbor synchronizovný s viacerými účtami.\n\nPre túto zmenu, všetky súbory nahraté v predchádzajúcich verziách tejto aplikácie boli skopírované do priečinka %2$s. Je nám to ľúto, chyba zabránila dokončeniu tejto operácie počas synchronizácie účtu. Súbor(y) môžete ponechať v súčasnom stave a zmazať odkaz na %3$s, alebo presunúť súbor(y) do priečinka %1$s a zachovať odkaz na %4$s.\n\nĎalej lokálny súbor(y) a vzdialený súbor(y) sú spojené v priečinku %5$s.</string>
   <string name="foreign_files_move">Premiestniť všetko</string>
   <string name="foreign_files_success">Všetky súbory boli premiestnené</string>
   <string name="foreign_files_fail">Niektoré súbory nebolo možné premiestniť</string>
@@ -134,6 +139,14 @@
   <string name="media_state_loading">%1$s (načítava)</string>
   <string name="media_event_done">%1$s prehrávanie dokončené</string>
   <string name="media_err_nothing_to_play">Nenájdený žiaden multimediálny súbor</string>
+  <string name="media_err_no_account">Účet neposkytnutý</string>
+  <string name="media_err_not_in_owncloud">Súbor nie je v platnom účte</string>
+  <string name="media_err_unsupported">Nepodporovaný kodek</string>
+  <string name="media_err_io">Mediálny súbor nemožno čítať</string>
+  <string name="media_err_malformed">Mediálny súbor nemá správne kódovanie</string>
+  <string name="media_err_invalid_progressive_playback">Mediálny súbor nemožno streamovať</string>
+  <string name="media_err_unknown">Mediálny súbor nemožno prehrať s východzím prehrávačom</string>
+  <string name="media_err_security_ex">Chyba zabezpečenia pri pokuse o prehranie %1$s</string>
   <string-array name="prefs_trackmydevice_intervall_keys">
     <item>15 minút</item>
     <item>30 minút</item>
@@ -144,12 +157,14 @@
     <item>30</item>
     <item>60</item>
   </string-array>
+  <string name="auth_trying_to_login">Pokus o pripojenie...</string>
   <string name="auth_no_net_conn_title">Bez sieťového pripojenia</string>
   <string name="auth_no_net_conn_message">Skontrolujte pripojenie k sieti a opakujte pripojenie znovu.</string>
   <string name="auth_connect_anyway">Aj tak pripojiť</string>
   <string name="auth_nossl_plain_ok_title">Nie je k dispozícii bezpečné pripojenie</string>
   <string name="auth_nossl_plain_ok_message">Aplikácia nemôže nadviazať zabezpečené spojenie so serverom. Nezabezpečené pripojenie je k dispozícii. Môžete pokračovať alebo prerušiť spojenie.</string>
   <string name="auth_connection_established">Pripojenie vytvorené</string>
+  <string name="auth_testing_connection">Testovane pripojenia...</string>
   <string name="auth_not_configured_title">Nesprávna konfigurácia ownCloud</string>
   <string name="auth_not_configured_message">Nastavenie ownCloud nie je správne. Kontaktujte administrátora pre získanie viac informácií.</string>
   <string name="auth_unknown_error_title">Nastala neznáma chyba!</string>
@@ -165,6 +180,7 @@
   <string name="auth_bad_oc_version_title">Nerozpoznaná verzia servera</string>
   <string name="auth_wrong_connection_title">Nie je možne vytvoriť spojenie</string>
   <string name="auth_secure_connection">Vytvorené zabezpečené spojenie</string>
+  <string name="auth_oauth_error">Neúspešná autorizácia</string>
   <string name="auth_not_found">Je zadaná neplatná cesta</string>
   <string name="auth_internal">Interná chyba servera, kód %1$d</string>
   <string name="crashlog_message">Aplikácia neočakávane ukončila činnosť. Chcete poslať správu o chybe?</string>
@@ -193,6 +209,9 @@
   <string name="wait_a_moment">Počkať chvíľu</string>
   <string name="filedisplay_unexpected_bad_get_content">Neočakávaný problém; skúste vybrať súbor inou aplikáciou</string>
   <string name="filedisplay_no_file_selected">Nebol vybraný súbor</string>
+  <string name="oauth_host_url">oAuth2 URL</string>
+  <string name="oauth_check_onoff">Prihlásiť prostredníctvom oAuth2.</string>
+  <string name="oauth_login_connection">Pripájam sa na oAuth2 server…</string>
   <string name="ssl_validator_title">Upozornenie</string>
   <string name="ssl_validator_header">Identitu stránky nemožno overiť</string>
   <string name="ssl_validator_reason_cert_not_trusted">- Certifikát servera nie je overený</string>
@@ -217,6 +236,10 @@
   <string name="ssl_validator_label_validity_to">Do: </string>
   <string name="ssl_validator_label_signature">Podpis:</string>
   <string name="ssl_validator_label_signature_algorithm">Algoritmus:</string>
+  <string name="placeholder_filetype">PNG obrázok</string>
+  <string name="placeholder_filesize">389 KB</string>
+  <string name="placeholder_timestamp">2012/05/18 12:23 PM</string>
+  <string name="placeholder_media_time">12:23:45</string>
   <string name="instant_upload_on_wifi">Odoslať fotografie iba cez WiFi</string>
   <string name="instant_upload_path">/InstantUpload</string>
   <string name="conflict_title">Konflikt pri aktualizácii</string>
@@ -226,4 +249,7 @@
   <string name="conflict_dont_upload">Nenahrávajte</string>
   <!--we need to improve the communication of errors to the user-->
   <string name="error__upload__local_file_not_copied">%1$s nemožno skopírovať do lokálneho priečinka %2$s</string>
+  <string name="failed_upload_all_cb">vybrať všetko</string>
+  <string name="failed_upload_headline_retryall_btn">opakovať všetky vybrané</string>
+  <string name="failed_upload_failure_text">Chybová správa:</string>
 </resources>

+ 3 - 1
res/values-sl/strings.xml

@@ -43,7 +43,6 @@
   <string name="auth_host_url">Naslov strežnika</string>
   <string name="auth_username">Uporabniško ime</string>
   <string name="auth_password">Geslo</string>
-  <string name="auth_register">Sem nov v oblaku ownCloud</string>
   <string name="new_session_uri_error">Podan je napačen naslov URL</string>
   <string name="new_session_session_name_error">Napačno ime seje</string>
   <string name="sync_string_files">Datoteke</string>
@@ -86,6 +85,7 @@
   <string name="common_loading">Nalaganje...</string>
   <string name="common_error_unknown">Neznana napaka</string>
   <string name="about_title">O oblaku ownCloud</string>
+  <string name="change_password">Spremeni geslo</string>
   <string name="delete_account">Izbriši račun</string>
   <string name="create_account">Ustvari račun</string>
   <string name="upload_chooser_title">Pošlji datoteko iz …</string>
@@ -153,12 +153,14 @@
     <item>30</item>
     <item>60</item>
   </string-array>
+  <string name="auth_trying_to_login">Poskus prijave …</string>
   <string name="auth_no_net_conn_title">Ni omrežne povezave</string>
   <string name="auth_no_net_conn_message">Omrežna povezava ni zaznana. Preverite internetno povezavo in poskusite znova.</string>
   <string name="auth_connect_anyway">Vseeno poveži</string>
   <string name="auth_nossl_plain_ok_title">Varna povezava ni na voljo.</string>
   <string name="auth_nossl_plain_ok_message">Programu ni uspelo vzpostaviti varne povezave s strežnikom. Nadaljujete lahko z ne-varno povezavo ali pa prekinete.</string>
   <string name="auth_connection_established">Povezava je vzpostavljena</string>
+  <string name="auth_testing_connection">Preizkušanje povezave ...</string>
   <string name="auth_not_configured_title">Nastavitve ownCloud so napačno oblikovane</string>
   <string name="auth_not_configured_message">Zdi se, da vaš ownCloud ni pravilno nastavljen. Za dodatna pojasnila se obrnite na skrbnika.</string>
   <string name="auth_unknown_error_title">Prišlo je do neznane napake</string>

+ 1 - 0
res/values-sr-rSP/strings.xml

@@ -14,5 +14,6 @@
   <string name="uploader_btn_upload_text">Pošalji</string>
   <string name="filedetails_download">Preuzmi</string>
   <string name="common_cancel">Otkaži</string>
+  <string name="change_password">Izmeni lozinku</string>
   <!--we need to improve the communication of errors to the user-->
 </resources>

+ 1 - 0
res/values-sr/strings.xml

@@ -57,6 +57,7 @@
   <string name="common_save_exit">Сачувај и изађи</string>
   <string name="common_error">Грешка</string>
   <string name="about_title">О програму</string>
+  <string name="change_password">Измени лозинку</string>
   <string name="delete_account">Обриши налог</string>
   <string name="create_account">Отвори налог</string>
   <string name="upload_chooser_title">Отпреми из…</string>

+ 14 - 12
res/values-sv/strings.xml

@@ -45,15 +45,16 @@
   <string name="prefs_log_title_history">Logghistorik</string>
   <string name="prefs_log_summary_history">Visar sparade loggar</string>
   <string name="prefs_log_delete_history_button">Radera historik</string>
+  <string name="auth_check_server">Kontrollera Server</string>
   <string name="auth_host_url">Serveradress</string>
-  <string name="auth_username">Användare</string>
+  <string name="auth_username">Användarnamn</string>
   <string name="auth_password">Lösenord</string>
-  <string name="auth_register">%1$s är nytt för mig</string>
+  <string name="auth_register">Ny på %1$s?</string>
   <string name="new_session_uri_error">Felaktig URL angavs</string>
   <string name="new_session_session_name_error">Felaktigt sessionsnamn</string>
   <string name="sync_string_files">Filer</string>
   <string name="uploader_no_file_selected">Ingen fil vald för uppladdning</string>
-  <string name="setup_hint_username">Användare</string>
+  <string name="setup_hint_username">Användarnamn</string>
   <string name="setup_hint_password">Lösenord</string>
   <string name="setup_hint_address">Webbadress</string>
   <string name="setup_hint_show_password">Visa lösenord?</string>
@@ -61,7 +62,7 @@
   <string name="setup_btn_connect">Anslut</string>
   <string name="uploader_btn_upload_text">Ladda upp</string>
   <string name="uploader_top_message">Välj mapp för uppladdning:</string>
-  <string name="uploader_wrn_no_account_title">Hittar inget konto</string>
+  <string name="uploader_wrn_no_account_title">Hittade inget konto</string>
   <string name="uploader_wrn_no_account_text">Det finns inga konton för %1$s på denna enhet. Var god skapa ett konto först.</string>
   <string name="uploader_wrn_no_account_setup_btn_text">Skapa</string>
   <string name="uploader_wrn_no_account_quit_btn_text">Avsluta</string>
@@ -92,9 +93,10 @@
   <string name="common_loading">Laddar...</string>
   <string name="common_error_unknown">Okänt fel</string>
   <string name="about_title">Om</string>
+  <string name="change_password">Ändra lösenord</string>
   <string name="delete_account">Radera konto</string>
   <string name="create_account">Skapa konto</string>
-  <string name="upload_chooser_title">Ladda upp fil från ...</string>
+  <string name="upload_chooser_title">Ladda upp från ...</string>
   <string name="uploader_info_dirname">Mappnamn</string>
   <string name="uploader_upload_in_progress_ticker">Laddar upp ...</string>
   <string name="uploader_upload_in_progress_content">%1$d%% Laddar upp %2$s</string>
@@ -103,7 +105,7 @@
   <string name="uploader_upload_succeeded_content_multiple">%1$d filer uppladdade</string>
   <string name="uploader_upload_failed_ticker">Misslyckad uppladdning</string>
   <string name="uploader_upload_failed_content_single">Uppladdning av %1$s kunde inte slutföras</string>
-  <string name="uploader_upload_failed_content_multiple">Misslyckad uppladdning: %1$d/%2$d filer uppladdade</string>
+  <string name="uploader_upload_failed_content_multiple">Misslyckad uppladdning: %1$d/%2$d filer laddades upp</string>
   <string name="downloader_download_in_progress_ticker">Laddar ner ...</string>
   <string name="downloader_download_in_progress_content">%1$d%% Laddar ner %2$s</string>
   <string name="downloader_download_succeeded_ticker">Nedladdning klar</string>
@@ -115,7 +117,7 @@
   <string name="sync_string_contacts">Kontakter</string>
   <string name="sync_fail_ticker">Synkroniseringen misslyckades</string>
   <string name="sync_fail_content">Synkronisering av %1$s kunde inte slutföras</string>
-  <string name="sync_fail_content_unauthorized">Ogiltiga inloggningsuppgifter för %1$s</string>
+  <string name="sync_fail_content_unauthorized">Felaktigt lösenord för %1$s</string>
   <string name="sync_conflicts_in_favourites_ticker">Konflikter uppstod</string>
   <string name="sync_conflicts_in_favourites_content">%1$d Flaggad som Håll-filen-uppdaterad kan inte synkas</string>
   <string name="sync_fail_in_favourites_ticker">Filer flaggade som Håll-filen-uppdaterad misslyckades</string>
@@ -173,7 +175,7 @@
     <item>60</item>
   </string-array>
   <string name="auth_trying_to_login">Försöker logga in...</string>
-  <string name="auth_no_net_conn_title">Ingen anslutning till nätverket</string>
+  <string name="auth_no_net_conn_title">Ingen nätverksanslutning</string>
   <string name="auth_no_net_conn_message">Ingen nätverksanslutning har upptäckts, kontrollera din Internet-anslutning och försök igen.</string>
   <string name="auth_connect_anyway">Anslut ändå</string>
   <string name="auth_nossl_plain_ok_title">Säker anslutning inte tillgänglig.</string>
@@ -182,7 +184,7 @@
   <string name="auth_testing_connection">Testar anslutning...</string>
   <string name="auth_not_configured_title">Felaktig konfiguration</string>
   <string name="auth_not_configured_message">Det verkar som om din version av ownCloud inte är korrekt konfigurerad. Kontakta din administratör för mer information.</string>
-  <string name="auth_unknown_error_title">Okänt fel uppstod</string>
+  <string name="auth_unknown_error_title">Okänt fel inträffade!</string>
   <string name="auth_unknown_error_message">Ett okänt fel uppstod. Vänligen kontakta behörig och inkludera loggar från enheten.</string>
   <string name="auth_unknown_host_title">Kunde inte hitta server</string>
   <string name="auth_unknown_host_message">Kunde inte hitta angiven server. Kontrollera serverns tillgänglighet och försök igen.</string>
@@ -195,14 +197,14 @@
   <string name="auth_bad_oc_version_title">Okänd ownCloud serverversion</string>
   <string name="auth_wrong_connection_title">Kunde inte etablera anslutning</string>
   <string name="auth_secure_connection">Säker anslutning etablerad</string>
-  <string name="auth_unauthorized">Ogiltiga inloggningsuppgifter</string>
+  <string name="auth_unauthorized">Felaktigt användarnamn eller lösenord</string>
   <string name="auth_oauth_error">Behörighet saknas</string>
   <string name="auth_oauth_error_access_denied">Nekad åtkomst av server</string>
-  <string name="auth_not_found">Felaktig  sökväg angavs</string>
+  <string name="auth_not_found">Felaktig  sökväg angiven</string>
   <string name="auth_internal">Internt serverfel, kod %1$d</string>
   <string name="auth_wtf_reenter_URL">Oväntat tillstånd; Ange serverns URL igen</string>
   <string name="auth_expired_oauth_token_toast">Din inloggning har gått ut.\nVar god, logga in igen</string>
-  <string name="auth_expired_basic_auth_toast">Dina sparade uppgifter är felaktiga.\nVar god ange aktuella uppgifter</string>
+  <string name="auth_expired_basic_auth_toast">Vänligen ange det aktuella lösenordet</string>
   <string name="crashlog_message">Applikationen avslutades oväntat. Vill du skicka en felrapport?</string>
   <string name="crashlog_send_report">Skicka rapport</string>
   <string name="crashlog_dont_send_report">Skicka inte rapport</string>

+ 3 - 1
res/values-ta-rLK/strings.xml

@@ -39,7 +39,6 @@
   <string name="auth_host_url">சேவையக முகவரி</string>
   <string name="auth_username">பயனாளர் பெயர்</string>
   <string name="auth_password">கடவுச்சொல்</string>
-  <string name="auth_register">ownCloud இற்கு நான் புதிது</string>
   <string name="new_session_uri_error">பிழையான URL தரப்பட்டுள்ளது</string>
   <string name="new_session_session_name_error">பிழையான அமர்வு பெயர்</string>
   <string name="sync_string_files">கோப்புகள்</string>
@@ -79,6 +78,7 @@
   <string name="common_exit">ownCloud  இலிருந்து விலகு</string>
   <string name="common_error">வழு</string>
   <string name="about_title">பற்றி</string>
+  <string name="change_password">கடவுச்சொல்லை மாற்றுக</string>
   <string name="delete_account">கணக்கை நீக்குக</string>
   <string name="create_account">கணக்கை உருவாக்குக</string>
   <string name="upload_chooser_title">பதிவேற்றல் படிவம்</string>
@@ -125,12 +125,14 @@
     <item>30</item>
     <item>60</item>
   </string-array>
+  <string name="auth_trying_to_login">புகுபதிகைக்கு முயற்சிக்கின்றது...</string>
   <string name="auth_no_net_conn_title">வ​லைய​மைப்பு இணைப்பு இல்லை</string>
   <string name="auth_no_net_conn_message">எந்தவொரு வலையமைப்பு இணைப்பும் கண்டுப்பிடிக்கப்படவில்லை, இணைய இணைப்பை சரிபார்த்துவிட்டு மீண்டும் முயற்சிக்கவும். </string>
   <string name="auth_connect_anyway">எப்படியாவது இணைக்க</string>
   <string name="auth_nossl_plain_ok_title">பாதுகாப்பான இணைப்பு காணப்படவில்லை.</string>
   <string name="auth_nossl_plain_ok_message">செயலியினால் சேவையகத்துடன் பாதுகாப்பான இணைப்பை ஏற்படுத்த முடியவில்லை.  பாதுகாப்பற்ற இணைப்புகளும் காணப்படுகின்றன. நீங்கள் தொடரலாம் அல்லது இரத்துசெய்யலாம்.</string>
   <string name="auth_connection_established">இணைப்பு நிறுவப்பட்டது</string>
+  <string name="auth_testing_connection">இணைப்பு சோதிக்கப்படுகிறது.....</string>
   <string name="auth_not_configured_title">பிறழ்வான ownCloud தகவமைப்பு</string>
   <string name="auth_not_configured_message">உங்களுடைய ownCloud சரியாக தகவமைக்கப்படாததாக தெரிகிறது. மேலதிக தகவல்களுக்கு நிர்வாகியை தொடர்புகொள்ளவும்</string>
   <string name="auth_unknown_error_title">அறியப்படாத வழு ஏற்பட்டுள்ளது!</string>

+ 3 - 1
res/values-th-rTH/strings.xml

@@ -39,7 +39,6 @@
   <string name="auth_host_url">ที่อยู่เซิร์ฟเวอร์</string>
   <string name="auth_username">ชื่อผู้ใช้</string>
   <string name="auth_password">รหัสผ่าน</string>
-  <string name="auth_register">ข้าพเจ้าเพิ่งใช้งาน ownCloud</string>
   <string name="new_session_uri_error">ที่อยู่ URL ไม่ถูกต้อง</string>
   <string name="new_session_session_name_error">ชื่อเซสชั่นไม่ถูกต้อง</string>
   <string name="sync_string_files">ไฟล์</string>
@@ -79,6 +78,7 @@
   <string name="common_exit">ออกจาก ownCloud</string>
   <string name="common_error">ข้อผิดพลาด</string>
   <string name="about_title">เกี่ยวกับเรา</string>
+  <string name="change_password">เปลี่ยนรหัสผ่าน</string>
   <string name="delete_account">ลบบัญชี</string>
   <string name="create_account">สร้างบัญชีใหม่</string>
   <string name="upload_chooser_title">อัพโหลดไฟล์จาก...</string>
@@ -134,12 +134,14 @@
     <item>30</item>
     <item>60</item>
   </string-array>
+  <string name="auth_trying_to_login">กำลังเข้าสู่ระบบ...</string>
   <string name="auth_no_net_conn_title">ไม่มีการเชื่อมต่อเครือข่ายใดๆ</string>
   <string name="auth_no_net_conn_message">ไม่พบการเชื่อมต่อเครือข่ายใด กรุณาตรวจสอบสถานะการเชื่อมต่ออินเทอร์เน็ตของคุณ แล้วลองใหม่อีกครั้ง</string>
   <string name="auth_connect_anyway">เชื่อมต่ออยู่แล้ว</string>
   <string name="auth_nossl_plain_ok_title">การเชื่อมต่อแบบรักษาความปลอดภัยไม่สามารถใช้งานได้</string>
   <string name="auth_nossl_plain_ok_message">แอพพลิเคชั่นยังไม่ได้ติดตั้งการเชื่อมต่อแบบปลอดภัยกับเซิร์ฟเวอร์ ถึงแม้ว่าจะมีการเชื่อมต่อแบบที่ยังไม่ได้กำหนดให้มีความปลอดภัย คุณสามารถดำเนินการต่อไป หรือยกเลิกได้</string>
   <string name="auth_connection_established">ติดตั้งการเชื่อมต่อแล้ว</string>
+  <string name="auth_testing_connection">กำลังทดสอบการเชื่อมต่อ...</string>
   <string name="auth_not_configured_title">การกำหนดค่า Malformed ownCloud</string>
   <string name="auth_not_configured_message">ดูเหมือนว่าค่าตัวอย่าง ownCloud ของคุณยังไม่ได้ถูกกำหนดค่าอย่างถูกต้อง กรุณาติดต่อผู้ดูแลระบบของคุณ สำหรับรายละเอียดเพิ่มเติม</string>
   <string name="auth_unknown_error_title">เกิดข้อผิดพลาดที่ไม่ทราบสาเหตุ!</string>

+ 18 - 1
res/values-tr/strings.xml

@@ -19,6 +19,7 @@
   <string name="actionbar_mkdir">Klasör yarat</string>
   <string name="actionbar_search">Arama</string>
   <string name="actionbar_settings">Ayarlar</string>
+  <string name="actionbar_see_details">Detaylar</string>
   <string name="prefs_category_general">Genel</string>
   <string name="prefs_add_session">Yeni oturum ekle</string>
   <string name="prefs_create_img_thumbnails">Küçük resim oluştur</string>
@@ -38,7 +39,6 @@
   <string name="auth_host_url">Sunucu Adresi</string>
   <string name="auth_username">Kullanıcı Adi:</string>
   <string name="auth_password">Şifre:</string>
-  <string name="auth_register">ownCloud\'da yeniyim.</string>
   <string name="new_session_uri_error">Geçersiz URL girildi</string>
   <string name="new_session_session_name_error">Yanlış oturum ismi</string>
   <string name="sync_string_files">Dosyalar</string>
@@ -50,6 +50,7 @@
   <string name="setup_title">ownCloud\'nıza bağlanin</string>
   <string name="setup_btn_connect">Bağlan</string>
   <string name="uploader_btn_upload_text">Yükle</string>
+  <string name="uploader_top_message">Yükleme dizinini seçiniz:</string>
   <string name="uploader_wrn_no_account_title">Hesap bulunamadi</string>
   <string name="uploader_wrn_no_account_text">Cihazınızda ownCloud hesabı bulunmamaktadır. Lütfen öncelikle bir hesap ayarı giriniz.</string>
   <string name="uploader_wrn_no_account_setup_btn_text">Kurulum</string>
@@ -77,8 +78,10 @@
   <string name="common_save_exit">Kaydet %amp; Kapat</string>
   <string name="common_exit">Çıkış</string>
   <string name="common_error">Hata</string>
+  <string name="common_loading">Yükleniyor...</string>
   <string name="common_error_unknown">Bilinmeyen hata</string>
   <string name="about_title">Hakkında</string>
+  <string name="change_password">Parola değiştir</string>
   <string name="delete_account">Hesabı sil</string>
   <string name="create_account">Hesap oluştur</string>
   <string name="upload_chooser_title">... dan dosya yükle</string>
@@ -97,6 +100,7 @@
   <string name="downloader_download_succeeded_content">%1$s başarıyla indirildi</string>
   <string name="downloader_download_failed_ticker">İndirilme başarısız</string>
   <string name="downloader_download_failed_content">%1$s indirilmesi tamamlanamadı</string>
+  <string name="downloader_not_downloaded_yet">Henüz indirilemedi</string>
   <string name="common_choose_account">Hesap seçiniz</string>
   <string name="sync_string_contacts">Kontaklar</string>
   <string name="sync_fail_ticker">Eşitleme başarısız</string>
@@ -125,6 +129,17 @@
   <string name="pincode_wrong">Yanlış ownCloud App PIN</string>
   <string name="pincode_removed">ownCloud App PIN kaldırıldı</string>
   <string name="pincode_stored">ownCloud App PIN saklandı</string>
+  <string name="media_notif_ticker">%1$s müzik çalar</string>
+  <string name="media_state_playing">%1$s (oynatılıyor)</string>
+  <string name="media_state_loading">%1$s (yükleniyor)</string>
+  <string name="media_event_done">%1$s yeniden oynatım sonlandırıldı</string>
+  <string name="media_err_nothing_to_play">Herhangi bir medya öğesi bulunamadı</string>
+  <string name="media_err_not_in_owncloud">Dosya doğru bir hesapta değil</string>
+  <string name="media_err_unsupported">Codec desteklenmiyor</string>
+  <string name="media_err_io">Medya öğesi okunamadı</string>
+  <string name="media_err_malformed">Medya öğesi doğru bir şekilde kodlanmadı</string>
+  <string name="media_err_timeout">Oynatmak için fazla deneme yapıldı</string>
+  <string name="media_err_invalid_progressive_playback">Medya öğesi aktarılamadı</string>
   <string-array name="prefs_trackmydevice_intervall_keys">
     <item>15 Dakika</item>
     <item>30 Dakika</item>
@@ -135,12 +150,14 @@
     <item>30</item>
     <item>60</item>
   </string-array>
+  <string name="auth_trying_to_login">Giriş için deneniyor</string>
   <string name="auth_no_net_conn_title">Ağ bağlantısı yok</string>
   <string name="auth_no_net_conn_message">Ağ bağlantısı bulunamadı. İnternet bağlantı ayarlarınızı kontrol edin ve tekrar deneyin.</string>
   <string name="auth_connect_anyway">Her halükarda bağlan</string>
   <string name="auth_nossl_plain_ok_title">Günvenli bağlantı mevcut değil.</string>
   <string name="auth_nossl_plain_ok_message">Uygulama sunucu ile güvenli bağlantı kuramadı. Buna rağmen güvensiz bağlantı mevcut. Devam edebilirsiniz veya iptal edebilirsiniz.</string>
   <string name="auth_connection_established">Bağlantı kuruldu</string>
+  <string name="auth_testing_connection">Bağlantı kontrol ediliyor ...</string>
   <string name="auth_not_configured_title">Hatalı ownCloud ayarı.</string>
   <string name="auth_not_configured_message">Görünüşe bakılırsa ownCloud servisiniz doğru ayarlanmamış. Detaylı bilgi için sistem yöneticinize başvurunuz.</string>
   <string name="auth_unknown_error_title">Bilinmeyen hata oluştu.</string>

+ 1 - 0
res/values-ug/strings.xml

@@ -56,6 +56,7 @@
   <string name="common_save_exit">ساقلاپ چېكىن</string>
   <string name="common_error">خاتالىق</string>
   <string name="common_error_unknown">يوچۇن خاتالىق</string>
+  <string name="change_password">ئىم ئۆزگەرت</string>
   <string name="uploader_info_dirname">مۇندەرىجە ئىسمى</string>
   <string name="common_choose_account">ھېسابات تاللاڭ</string>
   <string name="sync_string_contacts">ئالاقەداشلار</string>

+ 3 - 1
res/values-uk/strings.xml

@@ -39,7 +39,6 @@
   <string name="auth_host_url">Адреса сервера</string>
   <string name="auth_username">Ім\'я користувача</string>
   <string name="auth_password">Пароль</string>
-  <string name="auth_register">Я новачок в ownCloud</string>
   <string name="new_session_uri_error">Надано невірний URL</string>
   <string name="new_session_session_name_error">Невірне ім\'я сесії</string>
   <string name="sync_string_files">Файли</string>
@@ -79,6 +78,7 @@
   <string name="common_exit">Вийти з ownCloud</string>
   <string name="common_error">Помилка</string>
   <string name="about_title">Про</string>
+  <string name="change_password">Змінити пароль</string>
   <string name="delete_account">Видалити запис</string>
   <string name="create_account">Створити запис</string>
   <string name="upload_chooser_title">Завантажити з …</string>
@@ -135,12 +135,14 @@
     <item>30</item>
     <item>60</item>
   </string-array>
+  <string name="auth_trying_to_login">Спроба входу…</string>
   <string name="auth_no_net_conn_title">Відсутнє підключення до мережі</string>
   <string name="auth_no_net_conn_message">Не знайдено підключення до мережі, перевірте своє підключення до Інтернету та спробуйте ще.</string>
   <string name="auth_connect_anyway">Все одно з\'єднатися</string>
   <string name="auth_nossl_plain_ok_title">Безпечне з\'єднання не доступне.</string>
   <string name="auth_nossl_plain_ok_message">Програма не може встановити безпечне з\'єднання з сервером. Проте, не захищене з\'єднання можливе. Ви можете продовжити або відмінити.</string>
   <string name="auth_connection_established">З\'єднання встановлено</string>
+  <string name="auth_testing_connection">Перевірка з\'єднання…</string>
   <string name="auth_not_configured_title">Не вірні налаштування ownCloud </string>
   <string name="auth_not_configured_message">Здається, Ваш ownCloud примірник не правильно налаштовано. Зверніться до адміністратора для більш докладної інформації.</string>
   <string name="auth_unknown_error_title">Виникла невідома помилка!</string>

+ 71 - 1
res/values-vi/strings.xml

@@ -13,9 +13,13 @@
   <string name="main_settings">Cài đặt</string>
   <string name="main_tit_accsetup">Thiết lập tài khoản</string>
   <string name="main_wrn_accsetup">Trên thiết bị của bạn không có tài khoản ownCloud. Để sử dụng ứng dụng này bạn cần phải tạo một tài khoản.</string>
+  <string name="about_android">%1$s Ứng dụng trên Android</string>
+  <string name="about_version">phiên bản %1$s</string>
+  <string name="actionbar_sync">Cập nhật lại tài khoản</string>
   <string name="actionbar_upload">Tải lên</string>
   <string name="actionbar_upload_from_apps">Nội dung từ các ứng dụng khác</string>
   <string name="actionbar_upload_files">Các tập tin</string>
+  <string name="actionbar_open_with">Mở với</string>
   <string name="actionbar_mkdir">Tạo thư mục</string>
   <string name="actionbar_search">Tìm kiếm</string>
   <string name="actionbar_settings">Cài đặt</string>
@@ -36,10 +40,16 @@
   <string name="prefs_pincode_summary">Bảo vệ ownCloud client của bạn</string>
   <string name="prefs_instant_upload">Kích hoạt tính năng tải lên ngay lập tức</string>
   <string name="prefs_instant_upload_summary">Ngay lập tức tải lên các hình ảnh được chụp bởi camera</string>
+  <string name="prefs_log_title">Bật chế độ nhật trình</string>
+  <string name="prefs_log_summary">Được sử dụng cho các vấn đề liên quan đến nhật trình</string>
+  <string name="prefs_log_title_history">Nhật trình dữ kiện</string>
+  <string name="prefs_log_summary_history">Hiển thị các nhật trình đã được ghi nhận lại</string>
+  <string name="prefs_log_delete_history_button">Xóa lịch sử</string>
+  <string name="auth_check_server">Kiểm tra máy chủ</string>
   <string name="auth_host_url">Địa chỉ máy chủ</string>
   <string name="auth_username">Tên người dùng</string>
   <string name="auth_password">Mật khẩu</string>
-  <string name="auth_register">Tôi mới đến ownCloud</string>
+  <string name="auth_register">Lần đầu mới đến %1$s?</string>
   <string name="new_session_uri_error">Bạn nhập sai URL</string>
   <string name="new_session_session_name_error">Sai tên phiên làm việc</string>
   <string name="sync_string_files">Tập tin</string>
@@ -51,6 +61,7 @@
   <string name="setup_title">Kết nối tới ownCloud của bạn </string>
   <string name="setup_btn_connect">Kết nối</string>
   <string name="uploader_btn_upload_text">Tải lên</string>
+  <string name="uploader_top_message">Chọn thư mục tải lên:</string>
   <string name="uploader_wrn_no_account_title">Không tìm thấy tài khoản</string>
   <string name="uploader_wrn_no_account_text">Trên thiết bị của bạn không có tài khoản ownCloud .Bước đầu tiên hãy thiết lập một tài khoản.</string>
   <string name="uploader_wrn_no_account_setup_btn_text">Cài đặt</string>
@@ -67,6 +78,7 @@
   <string name="filedetails_created">Đã tạo:</string>
   <string name="filedetails_modified">Đã chỉnh sửa:</string>
   <string name="filedetails_download">Tải về</string>
+  <string name="filedetails_sync_file">Cập nhật lại tập tin</string>
   <string name="filedetails_redownload">Làm mới</string>
   <string name="filedetails_renamed_in_upload_msg">Tập tin đã bị đổi tên thành %1$s trong quá trình tải lên</string>
   <string name="common_yes">Yes</string>
@@ -78,7 +90,10 @@
   <string name="common_save_exit">Lưu &amp; Thoát</string>
   <string name="common_exit">Rời khỏi ownCloud</string>
   <string name="common_error">Lỗi</string>
+  <string name="common_loading">Đang tải...</string>
+  <string name="common_error_unknown">Lỗi chưa biết</string>
   <string name="about_title">Giới thiệu</string>
+  <string name="change_password">Đổi mật khẩu</string>
   <string name="delete_account">Xóa tài khoản</string>
   <string name="create_account">Tạo tài khoản</string>
   <string name="upload_chooser_title">Tải lên từ ...</string>
@@ -97,10 +112,12 @@
   <string name="downloader_download_succeeded_content">%1$s là hoàn thành việc tải về</string>
   <string name="downloader_download_failed_ticker">Tải về thất bại</string>
   <string name="downloader_download_failed_content">Tải về %1$s không thể được hoàn thành</string>
+  <string name="downloader_not_downloaded_yet">Vẫn chưa tải về</string>
   <string name="common_choose_account">Chọn tài khoản</string>
   <string name="sync_string_contacts">Danh sách liên lạc</string>
   <string name="sync_fail_ticker">Đồng bộ thất bại</string>
   <string name="sync_fail_content">Đồng bộ %1$s không thể hoàn thành</string>
+  <string name="sync_fail_content_unauthorized">Mật khẩu không hợp lệ đối với %1$s</string>
   <string name="sync_conflicts_in_favourites_ticker">Tìm thấy xung đột</string>
   <string name="sync_conflicts_in_favourites_content">%1$d file trong hàng đợi đồng bộ không thể được đồng bộ</string>
   <string name="sync_fail_in_favourites_ticker">Các file trong hàng đợi đồng bộ không thành công</string>
@@ -125,6 +142,27 @@
   <string name="pincode_wrong">Mã PIN ứng dụng ownCloud không đúng</string>
   <string name="pincode_removed">Mã PIN ứng dụng ownCloud đã bị xóa</string>
   <string name="pincode_stored">Mã PIN ứng dụng ownCloud đã được lưu trữ</string>
+  <string name="media_notif_ticker">%1$s trình phát nhạc</string>
+  <string name="media_state_playing">%1$s (đang phát)</string>
+  <string name="media_state_loading">%1$s (đang tải)</string>
+  <string name="media_event_done">%1$s đã hoàn tất chế độ phát lại</string>
+  <string name="media_err_nothing_to_play">Không tìm thấy tập tin media nào</string>
+  <string name="media_err_no_account">Vẫn chưa cung cấp tài khoản nào</string>
+  <string name="media_err_not_in_owncloud">Tập tin không nằm trong tài khoản hợp lệ</string>
+  <string name="media_err_unsupported">Codec của media không được hỗ trợ</string>
+  <string name="media_err_io">Không thể đọc dữ liệu từ tập tin media</string>
+  <string name="media_err_malformed">Tập tin media không được mã hóa đúng quy định</string>
+  <string name="media_err_timeout">Đã thử việc phát quá nhiều lần</string>
+  <string name="media_err_invalid_progressive_playback">Không thể phân luồng dữ liệu tập tin media</string>
+  <string name="media_err_unknown">Tập tin media không thể được phát với trình phát media của stock</string>
+  <string name="media_err_security_ex">Lỗi bảo mật khi cố phát %1$s</string>
+  <string name="media_err_io_ex">Lỗi về dữ liệu đầu vào khi cố phát  %1$s</string>
+  <string name="media_err_unexpected">Xảy ra lỗi khi phát %1$s</string>
+  <string name="media_previous_description">Nút đi tới track trước đó</string>
+  <string name="media_rewind_description">Nút chuyển lại</string>
+  <string name="media_play_pause_description">Nút phát hoặc tạm dừng</string>
+  <string name="media_forward_description">Nút đẩy nhanh tốc độ phát</string>
+  <string name="media_next_description">Nút track tiếp theo</string>
   <string-array name="prefs_trackmydevice_intervall_keys">
     <item>15 Phút</item>
     <item>30 Phút</item>
@@ -135,12 +173,14 @@
     <item>30</item>
     <item>60</item>
   </string-array>
+  <string name="auth_trying_to_login">Đang cố gắng để đăng nhập…</string>
   <string name="auth_no_net_conn_title">Không có kết nối mạng</string>
   <string name="auth_no_net_conn_message">Không tìm thấy kết nối mạng, kiểm tra lại kết nối mạng và thử lại.</string>
   <string name="auth_connect_anyway">Kết nối nào</string>
   <string name="auth_nossl_plain_ok_title">Bảo mật kết nối không có giá trị.</string>
   <string name="auth_nossl_plain_ok_message">Ứng dụng không thể thiết lập một kết nối an toàn đến máy chủ. Một kết nối không an toàn đang có giá trị. Bạn có thể tiếp tục hoặc hủy bỏ.</string>
   <string name="auth_connection_established">Kết nối đã thiết lập</string>
+  <string name="auth_testing_connection">Đang kiểm tra kết nối...</string>
   <string name="auth_not_configured_title">Thay đổi cấu hình ownCloud </string>
   <string name="auth_not_configured_message">Có vẻ như phiên bản ownCloud của bạn cấu hình không đúng. Liên hệ với quản trị viên để biết thêm chi tiết.</string>
   <string name="auth_unknown_error_title">Không xác định được lỗi!</string>
@@ -156,8 +196,14 @@
   <string name="auth_bad_oc_version_title">Không chấp nhận phiên bản máy chủ ownCloud</string>
   <string name="auth_wrong_connection_title">Không thể thiết lập kết nối</string>
   <string name="auth_secure_connection">Kết nối an toàn đã được thiết lập</string>
+  <string name="auth_unauthorized">Sai tên người dùng hoặc mật khẩu</string>
+  <string name="auth_oauth_error">Xác nhận không thành công</string>
+  <string name="auth_oauth_error_access_denied">Từ chối truy cập vì xác nhận từ phía máy chủ</string>
   <string name="auth_not_found">Đường dẫn đã cho không đúng</string>
   <string name="auth_internal">Lỗi máy chủ nội bộ, mã lỗi %1$d</string>
+  <string name="auth_wtf_reenter_URL">Trạng thái không rõ, vui lòng điền lại đường dẫn liên kết một lần nữa</string>
+  <string name="auth_expired_oauth_token_toast">Hạn xác nhận của bạn đã hết.\nVui lòng, xác nhận lại lần nữa</string>
+  <string name="auth_expired_basic_auth_toast">Vui lòng điền vào mật khẩu hiện tại của bạn</string>
   <string name="crashlog_message">Ứng dụng chấm dứt đột ngột. Bạn có muốn gửi báo cáo sự cố?</string>
   <string name="crashlog_send_report">Gửi báo cáo</string>
   <string name="crashlog_dont_send_report">Không gửi báo cáo</string>
@@ -184,6 +230,11 @@
   <string name="wait_a_moment">Chờ một lúc</string>
   <string name="filedisplay_unexpected_bad_get_content">Vấn đề bất ngờ ; hãy thử ứng dụng khác để chọn tập tin</string>
   <string name="filedisplay_no_file_selected">Không có tập tin nào được chọn</string>
+  <string name="oauth_host_url">oAuth2 URL</string>
+  <string name="oauth_check_onoff">Đăng nhập bằng oAuth2.</string>
+  <string name="oauth_login_connection">Đang kết nối đến máy chủ oAuth2...</string>
+  <string name="oauth_code_validation_message">Xin vui lòng mở trình duyệt web và truy cập đến :\n%1$s.\nXác nhận mã dữ liệu này tại đó:\n%2$s</string>
+  <string name="oauth_connection_url_unavailable">Hiện không thể thực hiện việc kết nối đến đường dẫn này.</string>
   <string name="ssl_validator_title">Cảnh báo</string>
   <string name="ssl_validator_header">Không thể xác minh danh tính của site</string>
   <string name="ssl_validator_reason_cert_not_trusted">Chứng chỉ này không đáng tin cậy</string>
@@ -209,6 +260,11 @@
   <string name="ssl_validator_label_signature">Chữ ký :</string>
   <string name="ssl_validator_label_signature_algorithm">Thuật toán :</string>
   <string name="placeholder_sentence">Vị trí này đã được đặt chỗ trước</string>
+  <string name="placeholder_filename">placeholder.txt</string>
+  <string name="placeholder_filetype">Hình ảnh dạng PNG</string>
+  <string name="placeholder_filesize">389 KB</string>
+  <string name="placeholder_timestamp">2012/05/18 12:23 PM</string>
+  <string name="placeholder_media_time">12:23:45</string>
   <string name="instant_upload_on_wifi">Tải hình ảnh lên thông qua WiFi</string>
   <string name="instant_upload_path">/Upload tức thì</string>
   <string name="conflict_title">Cập nhật xung đột</string>
@@ -216,6 +272,20 @@
   <string name="conflict_keep_both">Giữ cho cả hai</string>
   <string name="conflict_overwrite">Ghi đè lên</string>
   <string name="conflict_dont_upload">Không tải lên</string>
+  <string name="preview_image_description">Xem trước hình ảnh</string>
+  <string name="preview_image_error_unknown_format">Không thể hiển thị hình ảnh</string>
+  <string name="preview_image_error_out_of_memory">\"Không đủ bộ nhớ để hiển thị hình ảnh này</string>
   <!--we need to improve the communication of errors to the user-->
   <string name="error__upload__local_file_not_copied">%1$s không thể sao chép vào %2$s thư mục cục bộ</string>
+  <string name="actionbar_failed_instant_upload">Tải lên nhanh bị lỗi\"</string>
+  <string name="failed_upload_headline_text">Tải lên nhanh bị lỗi</string>
+  <string name="failed_upload_headline_hint">Tóm tắt tất cả các tải lên nhanh bị lỗi</string>
+  <string name="failed_upload_all_cb">chọn tất cả</string>
+  <string name="failed_upload_headline_retryall_btn">thử lại với tất cả các đối tượng được chọn</string>
+  <string name="failed_upload_headline_delete_all_btn">xóa tất cả khỏi các đối tượng được chọn trong hàng đợi chờ tải lên</string>
+  <string name="failed_upload_retry_text">thử lại việc tải lên hình ảnh:</string>
+  <string name="failed_upload_load_more_images">Tải thêm nhiều hình ảnh</string>
+  <string name="failed_upload_retry_do_nothing_text">không thực hiện thao tác gì nêu bạn không có kết nối mạng dành cho tải lên nhanh</string>
+  <string name="failed_upload_failure_text">Thông điệp lỗi:</string>
+  <string name="failed_upload_quota_exceeded_text">Vui lòng kiểm tra cấu hình máy chủ của bạn, có thể hạn ngạch dữ liệu đã quá hạn.</string>
 </resources>

+ 11 - 1
res/values-zh-rBG/strings.xml

@@ -39,7 +39,6 @@
   <string name="auth_host_url">服务器地址</string>
   <string name="auth_username">用户名</string>
   <string name="auth_password">密码</string>
-  <string name="auth_register">我是 ownCloud 新人</string>
   <string name="new_session_uri_error">错误的网址</string>
   <string name="new_session_session_name_error">错误会话名</string>
   <string name="sync_string_files">文件</string>
@@ -78,7 +77,10 @@
   <string name="common_save_exit">保存 &amp; 退出</string>
   <string name="common_exit">离开 ownCloud</string>
   <string name="common_error">出错</string>
+  <string name="common_loading">加载中...</string>
+  <string name="common_error_unknown">未知错误...</string>
   <string name="about_title">关于</string>
+  <string name="change_password">改变密码</string>
   <string name="delete_account">删除帐号</string>
   <string name="create_account">创建帐号</string>
   <string name="upload_chooser_title">上传自...</string>
@@ -97,6 +99,7 @@
   <string name="downloader_download_succeeded_content">%1$s 已成功下载</string>
   <string name="downloader_download_failed_ticker">下载失败</string>
   <string name="downloader_download_failed_content">未能下载 %1$s</string>
+  <string name="downloader_not_downloaded_yet">还未开始下载</string>
   <string name="common_choose_account">选择帐号</string>
   <string name="sync_string_contacts">联系人</string>
   <string name="sync_fail_ticker">同步失败</string>
@@ -124,6 +127,7 @@
   <string name="pincode_wrong">错误的 ownCloud 应用 PIN</string>
   <string name="pincode_removed">ownCloud 应用 PIN 已移除</string>
   <string name="pincode_stored">ownCloud 应用 PIN 已存储</string>
+  <string name="media_err_io">媒体文件不能被读取</string>
   <string-array name="prefs_trackmydevice_intervall_keys">
     <item>15 分钟</item>
     <item>30 分钟</item>
@@ -134,12 +138,14 @@
     <item>30</item>
     <item>60</item>
   </string-array>
+  <string name="auth_trying_to_login">尝试登录...</string>
   <string name="auth_no_net_conn_title">无网络连接</string>
   <string name="auth_no_net_conn_message">没有检测到网络连接,请检查您的互联网连接并重试。</string>
   <string name="auth_connect_anyway">强制连接</string>
   <string name="auth_nossl_plain_ok_title">安全连接不可用。</string>
   <string name="auth_nossl_plain_ok_message">应用未能建立到服务器的安全连接。但是非安全连接可用。您可以继续或取消。</string>
   <string name="auth_connection_established">连接已建立</string>
+  <string name="auth_testing_connection">测试连接...</string>
   <string name="auth_not_configured_title">ownCloud 配置格式不正确</string>
   <string name="auth_not_configured_message">似乎您的 ownCloud 实例未正确配置。详情联系您的管理员。</string>
   <string name="auth_unknown_error_title">发生了未知错误!</string>
@@ -208,6 +214,7 @@
   <string name="ssl_validator_label_signature">签名:</string>
   <string name="ssl_validator_label_signature_algorithm">算法:</string>
   <string name="placeholder_sentence">这是一个占位符</string>
+  <string name="placeholder_filetype">PNG 图像</string>
   <string name="instant_upload_on_wifi">只通过 WiFi 上传图片</string>
   <string name="instant_upload_path">/即时上传</string>
   <string name="conflict_title">上传冲突</string>
@@ -215,6 +222,9 @@
   <string name="conflict_keep_both">保留两者</string>
   <string name="conflict_overwrite">覆写</string>
   <string name="conflict_dont_upload">不上传</string>
+  <string name="preview_image_description">图像预览</string>
+  <string name="preview_image_error_unknown_format">这个图像无法被显示</string>
   <!--we need to improve the communication of errors to the user-->
   <string name="error__upload__local_file_not_copied">%1$s 无法被复制到本地文件夹 %2$s </string>
+  <string name="failed_upload_all_cb">全选</string>
 </resources>

+ 14 - 1
res/values-zh-rCN/strings.xml

@@ -13,9 +13,12 @@
   <string name="main_settings">设置</string>
   <string name="main_tit_accsetup">设置账号</string>
   <string name="main_wrn_accsetup">设备上无 ownCloud 账号,要使用此 App,需要先创建一个账号。</string>
+  <string name="about_version">版本:%1</string>
+  <string name="actionbar_sync">刷新帐户</string>
   <string name="actionbar_upload">上传</string>
   <string name="actionbar_upload_from_apps">来自其它app的内容</string>
   <string name="actionbar_upload_files">文件</string>
+  <string name="actionbar_open_with">打开</string>
   <string name="actionbar_mkdir">创建目录</string>
   <string name="actionbar_search">搜索</string>
   <string name="actionbar_settings">设置</string>
@@ -36,10 +39,13 @@
   <string name="prefs_pincode_summary">保护您的owncloud客户端</string>
   <string name="prefs_instant_upload">开启即时上传</string>
   <string name="prefs_instant_upload_summary">即时上传相机拍摄的照片</string>
+  <string name="prefs_log_title">开启日志</string>
+  <string name="prefs_log_title_history">日志历史</string>
+  <string name="prefs_log_delete_history_button">删除历史</string>
+  <string name="auth_check_server">检查服务器</string>
   <string name="auth_host_url">服务器地址</string>
   <string name="auth_username">用户名</string>
   <string name="auth_password">密码</string>
-  <string name="auth_register">我是新手</string>
   <string name="new_session_uri_error">错误的网址</string>
   <string name="new_session_session_name_error">错误的会话名</string>
   <string name="sync_string_files">文件</string>
@@ -82,6 +88,7 @@
   <string name="common_loading">加载中...</string>
   <string name="common_error_unknown">未知错误</string>
   <string name="about_title">关于</string>
+  <string name="change_password">修改密码</string>
   <string name="delete_account">删除账号</string>
   <string name="create_account">创建账号</string>
   <string name="upload_chooser_title">上传自...</string>
@@ -105,12 +112,14 @@
   <string name="sync_string_contacts">联系人</string>
   <string name="sync_fail_ticker">同步失败</string>
   <string name="sync_fail_content"> %1$s同步未完成。</string>
+  <string name="sync_fail_content_unauthorized">密码错误%1$s</string>
   <string name="sync_conflicts_in_favourites_ticker">发现冲突</string>
   <string name="sync_conflicts_in_favourites_content">%1$d 文件无法同步</string>
   <string name="sync_fail_in_favourites_ticker">文件同步失败</string>
   <string name="sync_fail_in_favourites_content">无法同步 %1$d 文件内容(与 %2$d 冲突)</string>
   <string name="sync_foreign_files_forgotten_ticker">某些本地文件已被遗忘</string>
   <string name="sync_foreign_files_forgotten_content">%2$s目录中的%1$d个文件不能被复制到</string>
+  <string name="sync_foreign_files_forgotten_explanation">\"从 1.3.16 版起,从此设备上传的文件将被复制到本地的 %1$s 文件夹来防止当某个单一文件在多个账户间同步造成的数据损失。由于此项变化,此应用之前的版本上传的全部文件都已被复制到了 %2$s 文件夹。然而,账户同步期间有一个错误阻止了此操作的完成。您或许可以保持文件不动,并移除指向 %3$s 的链接,或将文件移动到 %1$s 文件夹中并将保持到 %4$s 的链接。下面列出的是本地文件,以及它们被链接到的 %5$s 中的远程文件。</string>
   <string name="foreign_files_move">移动所有</string>
   <string name="foreign_files_success">所有文件已被移动</string>
   <string name="foreign_files_fail">某些文件无法被移动</string>
@@ -160,12 +169,14 @@
     <item>30</item>
     <item>60</item>
   </string-array>
+  <string name="auth_trying_to_login">尝试登录</string>
   <string name="auth_no_net_conn_title">没有网络连接</string>
   <string name="auth_no_net_conn_message">未检测到网络连接,检查互联网连接设置后重试。</string>
   <string name="auth_connect_anyway">总是连接</string>
   <string name="auth_nossl_plain_ok_title">安全链接无效。</string>
   <string name="auth_nossl_plain_ok_message">应用无法建立安全链接到服务器,但是未加密连接可用,你可以继续或取消。</string>
   <string name="auth_connection_established">连接已建立。</string>
+  <string name="auth_testing_connection">测试连接……</string>
   <string name="auth_not_configured_title">ownCloud配置不正确。</string>
   <string name="auth_not_configured_message">看起来owncloud实例配置不正确,请联系您的管理员获取更多信息。</string>
   <string name="auth_unknown_error_title">发生未知错误!</string>
@@ -181,8 +192,10 @@
   <string name="auth_bad_oc_version_title">不可辨识的owncloud服务器版本</string>
   <string name="auth_wrong_connection_title">无法建立连接</string>
   <string name="auth_secure_connection">加密连接已建立</string>
+  <string name="auth_unauthorized">用户名或密码错误!</string>
   <string name="auth_not_found">错误的路径</string>
   <string name="auth_internal">内部服务器错误,代码 %1$d</string>
+  <string name="auth_expired_basic_auth_toast">请输入当前密码:</string>
   <string name="crashlog_message">应用崩溃,是否提交崩溃报告?</string>
   <string name="crashlog_send_report">发送报告</string>
   <string name="crashlog_dont_send_report">不发送报告</string>

+ 134 - 10
res/values-zh-rTW/strings.xml

@@ -13,12 +13,17 @@
   <string name="main_settings">設定</string>
   <string name="main_tit_accsetup">設定帳號</string>
   <string name="main_wrn_accsetup">您尚未在裝置上設定您的 ownCloud 帳號,您必需建立一組帳號才能繼續使用。</string>
+  <string name="about_android">%1$s Android 應用程式</string>
+  <string name="about_version">版本 %1$s</string>
+  <string name="actionbar_sync">更新檔案列表</string>
   <string name="actionbar_upload">上傳檔案</string>
   <string name="actionbar_upload_from_apps">其他應用程序的內容</string>
   <string name="actionbar_upload_files">檔案</string>
+  <string name="actionbar_open_with">開啟方式</string>
   <string name="actionbar_mkdir">建立目錄</string>
   <string name="actionbar_search">搜尋</string>
   <string name="actionbar_settings">設定</string>
+  <string name="actionbar_see_details">詳細資料</string>
   <string name="prefs_category_general">一般</string>
   <string name="prefs_add_session">增加新連線</string>
   <string name="prefs_create_img_thumbnails">建立圖片縮圖</string>
@@ -31,11 +36,20 @@
   <string name="prefs_trackmydevice_interval_summary">每 %1$s 分鐘更新</string>
   <string name="prefs_accounts">帳號</string>
   <string name="prefs_manage_accounts">管理帳號</string>
+  <string name="prefs_pincode">App 密碼</string>
   <string name="prefs_pincode_summary">保護您的ownCloud用戶端</string>
   <string name="prefs_instant_upload">啟用即時上傳</string>
+  <string name="prefs_instant_upload_summary">即時上傳照相機拍攝的圖片</string>
+  <string name="prefs_log_title">啟用記錄</string>
+  <string name="prefs_log_summary">這個用來記錄執行的動作以找出問題點</string>
+  <string name="prefs_log_title_history">歷史記錄</string>
+  <string name="prefs_log_summary_history">顯示之前的記錄檔</string>
+  <string name="prefs_log_delete_history_button">刪除歷史記錄</string>
+  <string name="auth_check_server">檢查伺服器</string>
   <string name="auth_host_url">伺服器位址</string>
   <string name="auth_username">使用者名稱</string>
   <string name="auth_password">密碼</string>
+  <string name="auth_register">新增到 %1$s?</string>
   <string name="new_session_uri_error">錯誤的位址</string>
   <string name="new_session_session_name_error">錯誤的連線名稱</string>
   <string name="sync_string_files">檔案</string>
@@ -47,21 +61,26 @@
   <string name="setup_title">連線至您的 %1$s</string>
   <string name="setup_btn_connect">連線</string>
   <string name="uploader_btn_upload_text">上傳</string>
+  <string name="uploader_top_message">選取上傳目錄:</string>
   <string name="uploader_wrn_no_account_title">找不到帳號</string>
   <string name="uploader_wrn_no_account_text">在您的裝置上找不到ownCloud的帳號. 請先設定一組帳號.</string>
   <string name="uploader_wrn_no_account_setup_btn_text">設定</string>
   <string name="uploader_wrn_no_account_quit_btn_text">離開</string>
   <string name="uploader_wrn_no_content_title">沒有上載的內容</string>
   <string name="uploader_wrn_no_content_text">沒接到任何內容。沒有什麼可上載。</string>
+  <string name="uploader_error_forbidden_content">%1$s 並沒有被允許存取分享的內容</string>
   <string name="uploader_info_uploading">上傳中</string>
   <string name="uploader_btn_create_dir_text">建立上傳目錄</string>
+  <string name="file_list_empty">這個目錄目前是空的</string>
   <string name="filedetails_select_file">在檔案上輕觸來顯示更多資訊。</string>
   <string name="filedetails_size">容量:</string>
   <string name="filedetails_type">類型:</string>
   <string name="filedetails_created">建立:</string>
   <string name="filedetails_modified">修改:</string>
   <string name="filedetails_download">下載</string>
+  <string name="filedetails_sync_file">更新檔案列表</string>
   <string name="filedetails_redownload">重新下載</string>
+  <string name="filedetails_renamed_in_upload_msg">檔案名稱在上傳時已被更改為 %1$s</string>
   <string name="common_yes">是</string>
   <string name="common_no">否</string>
   <string name="common_ok">好</string>
@@ -71,38 +90,80 @@
   <string name="common_save_exit">儲存並離開</string>
   <string name="common_exit">離開ownCloud</string>
   <string name="common_error">錯誤</string>
+  <string name="common_loading">載入 …</string>
   <string name="common_error_unknown">未知的錯誤</string>
   <string name="about_title">關於</string>
+  <string name="change_password">變更密碼</string>
   <string name="delete_account">刪除帳號</string>
   <string name="create_account">建立帳號</string>
   <string name="upload_chooser_title">更新自 ...</string>
   <string name="uploader_info_dirname">目錄名稱</string>
   <string name="uploader_upload_in_progress_ticker">更新中 ...</string>
+  <string name="uploader_upload_in_progress_content">%1$d%% 上傳中 %2$s</string>
   <string name="uploader_upload_succeeded_ticker">更新成功</string>
   <string name="uploader_upload_succeeded_content_single">%1$s 已成功地上傳</string>
   <string name="uploader_upload_succeeded_content_multiple">%1$d 檔案已成功地上傳</string>
   <string name="uploader_upload_failed_ticker">上傳失敗</string>
+  <string name="uploader_upload_failed_content_single">上傳 %1$s 未完成</string>
+  <string name="uploader_upload_failed_content_multiple">上傳失敗: %1$d/%2$d 檔案已上傳</string>
   <string name="downloader_download_in_progress_ticker">下載中 ...</string>
+  <string name="downloader_download_in_progress_content">%1$d%% 下載中 %2$s</string>
   <string name="downloader_download_succeeded_ticker">下載成功</string>
+  <string name="downloader_download_succeeded_content">%1$s 已成功下載</string>
   <string name="downloader_download_failed_ticker">下載失敗</string>
+  <string name="downloader_download_failed_content">下載 %1$s 未完成</string>
+  <string name="downloader_not_downloaded_yet">尚未下載</string>
   <string name="common_choose_account">選擇帳號</string>
   <string name="sync_string_contacts">通訊錄</string>
   <string name="sync_fail_ticker">同步失敗</string>
+  <string name="sync_fail_content">同步 %1$s 未完成</string>
+  <string name="sync_fail_content_unauthorized">無效的密碼 %1$s</string>
   <string name="sync_conflicts_in_favourites_ticker">出現衝突</string>
+  <string name="sync_conflicts_in_favourites_content">%1$d 持續同步未被同步的檔案</string>
+  <string name="sync_fail_in_favourites_ticker">同步檔案失敗</string>
+  <string name="sync_fail_in_favourites_content">%1$d 未被同步 (%2$d 衝突)</string>
+  <string name="sync_foreign_files_forgotten_ticker">有些本地端的檔案已遺失</string>
+  <string name="sync_foreign_files_forgotten_content">%1$d 檔案於 %2$s 目錄未被複製</string>
+  <string name="sync_foreign_files_forgotten_explanation">在 1.3.16 之前, 檔案上傳到本地的 %1$s 目錄以避免在多帳戶內同步造成遺失.\n\n由於這個改變, 所以在之前版本上傳的檔案被複製到 %2$s 目錄中. 為了避免同步發生問題. 你可以保留那些檔案並刪除連結 %3$s, 或搬移檔案到 %1$s 目錄並取得連結到 %4$s.\n\n下面列表是本地檔案, 與被連結遠端檔案 %5$s.</string>
   <string name="foreign_files_move">移動全部</string>
   <string name="foreign_files_success">所有文件已被移動</string>
-  <string name="foreign_files_fail">一些文件無法移動</string>
+  <string name="foreign_files_fail">部份文件無法被移動</string>
+  <string name="foreign_files_local_text">本地: %1$s</string>
+  <string name="foreign_files_remote_text">遠端: %1$s</string>
+  <string name="upload_query_move_foreign_files">無足夠的空間可以複製檔案到 %1$s 目錄. 是否使用移動的方式來處理? </string>
   <string name="use_ssl">使用安全連線</string>
   <string name="location_no_provider">%1$s 無法追蹤您的裝置,請檢查定位服務設定</string>
-  <string name="pincode_enter_pin_code">請輸入您的 App PIN</string>
-  <string name="pincode_enter_new_pin_code">請輸入您的新 App PIN</string>
-  <string name="pincode_configure_your_pin">輸入您的 App PIN</string>
-  <string name="pincode_reenter_your_pincode">請重新輸入您的 App PIN</string>
-  <string name="pincode_remove_your_pincode">移除您的 App PIN</string>
-  <string name="pincode_mismatch">App PIN 不相符</string>
-  <string name="pincode_wrong">App PIN 不正確</string>
-  <string name="pincode_removed">App PIN 已移除</string>
-  <string name="pincode_stored">App PIN 已儲存</string>
+  <string name="pincode_enter_pin_code">請輸入您的 App 密碼</string>
+  <string name="pincode_enter_new_pin_code">請輸入您的新 App 密碼</string>
+  <string name="pincode_configure_your_pin">輸入您的 App 密碼</string>
+  <string name="pincode_configure_your_pin_explanation">這個密碼在你每次啟動這程式時都會被要求輸入</string>
+  <string name="pincode_reenter_your_pincode">請重新輸入您的 App 密碼</string>
+  <string name="pincode_remove_your_pincode">移除您的 App 密碼</string>
+  <string name="pincode_mismatch">App 密碼不相符</string>
+  <string name="pincode_wrong">App 密碼不正確</string>
+  <string name="pincode_removed">App 密碼已移除</string>
+  <string name="pincode_stored">App 密碼已儲存</string>
+  <string name="media_notif_ticker">%1$s 音樂播放器</string>
+  <string name="media_state_playing">%1$s (播放中)</string>
+  <string name="media_state_loading">%1$s (載入中)</string>
+  <string name="media_event_done">%1$s 已播放</string>
+  <string name="media_err_nothing_to_play">沒有發現音樂媒體</string>
+  <string name="media_err_no_account">沒有提供的帳戶</string>
+  <string name="media_err_not_in_owncloud">檔案不存在於有效的帳戶中</string>
+  <string name="media_err_unsupported">未支援的媒體編碼</string>
+  <string name="media_err_io">無法讀取媒體檔案</string>
+  <string name="media_err_malformed">媒體檔案未被正確的編碼</string>
+  <string name="media_err_timeout">太多次嘗試播放</string>
+  <string name="media_err_invalid_progressive_playback">媒體檔案無法在網路播放</string>
+  <string name="media_err_unknown">媒體檔案無法在正常的播放軟體播放</string>
+  <string name="media_err_security_ex">在播放 %1$s 時發生安全性的錯誤</string>
+  <string name="media_err_io_ex">在播放 %1$s 時發生輸入錯誤</string>
+  <string name="media_err_unexpected">在播放 %1$s 時發生未知的錯誤</string>
+  <string name="media_previous_description">回到上一首按鍵</string>
+  <string name="media_rewind_description">重新播放按鍵</string>
+  <string name="media_play_pause_description">播放或暫停按鍵</string>
+  <string name="media_forward_description">快轉按鍵</string>
+  <string name="media_next_description">下一首按鍵</string>
   <string-array name="prefs_trackmydevice_intervall_keys">
     <item>15 分鐘</item>
     <item>30 分鐘</item>
@@ -113,17 +174,20 @@
     <item>30</item>
     <item>60</item>
   </string-array>
+  <string name="auth_trying_to_login">嘗試登入…</string>
   <string name="auth_no_net_conn_title">沒有網際網路連線</string>
   <string name="auth_no_net_conn_message">沒有偵測到網際網路連線,請檢查您的連線然後再試一次。</string>
   <string name="auth_connect_anyway">繼續連線</string>
   <string name="auth_nossl_plain_ok_title">安全連線不可用。</string>
   <string name="auth_nossl_plain_ok_message">無法與伺服器建立安全連線,可以使用不安全連線(未加密)以繼續,您可以繼續或取消。</string>
   <string name="auth_connection_established">連線已建立</string>
+  <string name="auth_testing_connection">測試連線中…</string>
   <string name="auth_not_configured_title">伺服器設定有問題</string>
   <string name="auth_not_configured_message">看起來您的伺服器並未被正確設定,請聯絡服務管理者以取得協助。</string>
   <string name="auth_unknown_error_title">發生未知的錯誤!</string>
   <string name="auth_unknown_error_message">發生未知的錯誤,請聯絡支援服務並附上您的記錄檔。</string>
   <string name="auth_unknown_host_title">找不到伺服器</string>
+  <string name="auth_unknown_host_message">無法找到伺服器. 請檢查是否正確輸入並再試一次.</string>
   <string name="auth_incorrect_path_title">找不到伺服器</string>
   <string name="auth_incorrect_path_message">在指定的路徑找不到伺服器,請檢查您的路徑然後再試一次。</string>
   <string name="auth_timeout_title">伺服器回應逾時</string>
@@ -133,36 +197,96 @@
   <string name="auth_bad_oc_version_title">無法辨識的ownCloud伺服器版本</string>
   <string name="auth_wrong_connection_title">無法建立連線</string>
   <string name="auth_secure_connection">安全連線已建立</string>
+  <string name="auth_unauthorized">錯誤的使用者或密碼</string>
+  <string name="auth_oauth_error">未成功登入</string>
+  <string name="auth_oauth_error_access_denied">被授登伺服器拒絕登入</string>
+  <string name="auth_not_found"> 錯誤的路徑</string>
+  <string name="auth_internal">內部錯誤, 代碼 %1$d</string>
+  <string name="auth_wtf_reenter_URL">未知的狀態; 請再輸入一次伺服器的名稱</string>
+  <string name="auth_expired_oauth_token_toast">你的登入授權已過期.\n請再次登入</string>
+  <string name="auth_expired_basic_auth_toast">請輸入目錄的密碼</string>
+  <string name="crashlog_message">程式未預期的錯誤. 你要寄送錯誤的分析報告嗎?</string>
   <string name="crashlog_send_report">發送報告</string>
   <string name="crashlog_dont_send_report">不要發送報告</string>
+  <string name="extensions_avail_title">延伸功能可以使用!</string>
+  <string name="extensions_avail_message">你的伺服器支援某些延伸功能. 你是否要使用他們?</string>
   <string name="fd_keep_in_sync">讓檔案保持最新的</string>
   <string name="common_share">分享</string>
   <string name="common_rename">重新命名</string>
   <string name="common_remove">移除</string>
   <string name="confirmation_remove_alert">您真的要移除 %1$s ?</string>
+  <string name="confirmation_remove_folder_alert">您真的要移除 %1$s 與裡頭的檔案?</string>
   <string name="confirmation_remove_local">只有本地</string>
+  <string name="confirmation_remove_folder_local">只有本地</string>
   <string name="confirmation_remove_remote">從伺服器移除</string>
+  <string name="confirmation_remove_remote_and_local">遠端與本地</string>
   <string name="remove_success_msg">成功地移除</string>
+  <string name="remove_fail_msg">刪除失敗</string>
   <string name="rename_dialog_title">輸入新名稱</string>
   <string name="rename_local_fail_msg">本地的複本無法被重新命名; 請嘗試一個不同的新名稱</string>
   <string name="rename_server_fail_msg">重新命名失敗</string>
+  <string name="sync_file_fail_msg">無法檢查遠端的檔案</string>
+  <string name="sync_file_nothing_to_do_msg">檔案與同步</string>
   <string name="create_dir_fail_msg">資料夾無法被建立</string>
   <string name="wait_a_moment">請稍後</string>
+  <string name="filedisplay_unexpected_bad_get_content">未知的問題; 請選擇其他程式開啟檔案</string>
   <string name="filedisplay_no_file_selected">沒有挑選檔案</string>
+  <string name="oauth_host_url">oAuth2 網址</string>
+  <string name="oauth_check_onoff">以 oAuth2 方式登入.</string>
+  <string name="oauth_login_connection">連線到 oAuth2 伺服器…</string>
+  <string name="oauth_code_validation_message">請打開瀏覽器連到:\n%1$s.\n檢查碼為:\n%2$s</string>
+  <string name="oauth_connection_url_unavailable">無法連線到該網址.</string>
   <string name="ssl_validator_title">警告</string>
+  <string name="ssl_validator_header">這個網站的憑證無法被驗證</string>
+  <string name="ssl_validator_reason_cert_not_trusted">- 這個伺服器使用未被信任的憑證</string>
+  <string name="ssl_validator_reason_cert_expired">- 這個伺服器的憑證已過期</string>
+  <string name="ssl_validator_reason_cert_not_yet_valid">- 這個伺服器的憑證有效期限不正確</string>
+  <string name="ssl_validator_reason_hostname_not_verified">- 這個伺服器的憑證與使用的伺服器名稱不一樣</string>
+  <string name="ssl_validator_certificate_not_available">無法取得伺服器的憑證</string>
+  <string name="ssl_validator_question">你是否要信任這個伺服器的憑證?</string>
+  <string name="ssl_validator_not_saved">無法儲存憑證</string>
   <string name="ssl_validator_btn_details_see">細節</string>
   <string name="ssl_validator_btn_details_hide">隱藏</string>
+  <string name="ssl_validator_label_subject">發行給:</string>
+  <string name="ssl_validator_label_issuer">發行者:</string>
+  <string name="ssl_validator_label_CN">網站:</string>
   <string name="ssl_validator_label_O">組織:</string>
   <string name="ssl_validator_label_OU">組織部門:</string>
   <string name="ssl_validator_label_C">國家:</string>
   <string name="ssl_validator_label_ST">省:</string>
   <string name="ssl_validator_label_L">地點:</string>
+  <string name="ssl_validator_label_validity">有效期限:</string>
   <string name="ssl_validator_label_validity_from">從:</string>
   <string name="ssl_validator_label_validity_to">至:</string>
   <string name="ssl_validator_label_signature">簽名:</string>
+  <string name="ssl_validator_label_signature_algorithm">演算法:</string>
+  <string name="placeholder_sentence">這是佔位的資訊</string>
+  <string name="placeholder_filename">placeholder.txt</string>
+  <string name="placeholder_filetype">PNG 圖檔</string>
+  <string name="placeholder_filesize">389 KB</string>
+  <string name="placeholder_timestamp">2012/05/18 12:23 PM</string>
+  <string name="placeholder_media_time">12:23:45</string>
+  <string name="instant_upload_on_wifi">只使用 WiFi 上傳</string>
+  <string name="instant_upload_path">/InstantUpload</string>
   <string name="conflict_title">更新衝突</string>
+  <string name="conflict_message">遠端檔案 %s 未同步到本地. 繼續將取代伺服器上的文件.</string>
   <string name="conflict_keep_both">都保留</string>
   <string name="conflict_overwrite">覆寫</string>
   <string name="conflict_dont_upload">不要上載</string>
+  <string name="preview_image_description">圖片預覽</string>
+  <string name="preview_image_error_unknown_format">無法顯示圖片</string>
+  <string name="preview_image_error_out_of_memory">\"沒有足夠的記憶體來顯示圖片</string>
   <!--we need to improve the communication of errors to the user-->
+  <string name="error__upload__local_file_not_copied">%1$s 無法被複製到本地目錄 %2$s</string>
+  <string name="actionbar_failed_instant_upload">即時上傳失敗</string>
+  <string name="failed_upload_headline_text">即時上傳失敗</string>
+  <string name="failed_upload_headline_hint">所有即時上傳失敗的記錄</string>
+  <string name="failed_upload_all_cb">全部選取</string>
+  <string name="failed_upload_headline_retryall_btn">重新上傳選取的檔案</string>
+  <string name="failed_upload_headline_delete_all_btn">刪除所有被選取的檔案</string>
+  <string name="failed_upload_retry_text">重新上傳這個檔案: </string>
+  <string name="failed_upload_load_more_images">載入更多的檔案</string>
+  <string name="failed_upload_retry_do_nothing_text">未連線, 所以無法使用上傳功能</string>
+  <string name="failed_upload_failure_text">失敗訊息: </string>
+  <string name="failed_upload_quota_exceeded_text">請檢查你的伺服器設定, 可能你的額度已超過.</string>
 </resources>

+ 0 - 5
res/values/oauth2_configuration.xml

@@ -1,10 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
-    <!-- Flag to configure OAuth availability in the app.
-    	 3 valid values now: on, off, optional	
-     -->
-    <string name="oauth2_mode">off</string>
-    
     <!-- constants that must be respected by the authorization server; if changed, the app must be rebuild -->
     <string name="oauth2_redirect_scheme">owncloud</string>
     <string name="oauth2_redirect_uri">owncloud://callback</string>

+ 10 - 0
res/values/setup.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="server_url"></string>
+    <bool name="show_server_url_input">true</bool>
+    
+    <!-- Flags to setup the authentication methods available in the app -->
+    <string name="auth_method_oauth2">off</string>
+    <string name="auth_method_saml_web_sso">off</string>
+    
+</resources>

+ 9 - 1
res/values/strings.xml

@@ -56,6 +56,8 @@
 	<string name="recommend_subject">"Try %1$s on your smartphone!"</string>
 	<string name="recommend_text">"I want to invite you to use %1$s on your smartphone!\nDownload here: %2$s"</string>  
 
+    <string name="auth_check_server">Check Server</string>
+    <string name="auth_account_name">Account name</string>
     <string name="auth_host_url">Server address</string>
     <string name="auth_username">Username</string>
     <string name="auth_password">Password</string>
@@ -196,6 +198,8 @@
     <string name="auth_testing_connection">Testing connection&#8230;</string>
     <string name="auth_not_configured_title">Malformed server configuration</string>
     <string name="auth_not_configured_message">It seems that your server instance is not correctly configured. Contact your administrator for more details.</string>
+    <string name="auth_account_not_new">An account for the same user and server already exists in the device</string>
+    <string name="auth_account_not_the_same">The entered user does not match the user of this account</string>
     <string name="auth_unknown_error_title">Unknown error occurred!</string>
     <string name="auth_unknown_error_message">An unknown error occurred. Please contact support and include logs from your device.</string>
     <string name="auth_unknown_host_title">Couldn\'t find host</string>
@@ -215,8 +219,12 @@
     <string name="auth_not_found">Wrong path given</string>
     <string name="auth_internal">Internal server error, code %1$d</string>
     <string name="auth_wtf_reenter_URL">Unexpected state; please, enter the server URL again</string>
-    <string name="auth_expired_oauth_token_toast">Your authorization expired.\nPlease, authorize again</string>
+    <string name="auth_expired_oauth_token_toast">Your authorization expired. Please, authorize again</string>
     <string name="auth_expired_basic_auth_toast">Please, enter the current password</string>
+    <string name="auth_expired_saml_sso_token_toast">Your session expired. Please connect again</string>
+	<string name="auth_connecting_auth_server">Connecting to authentication server…</string>
+	<string name="auth_follow_auth_server">Follow instructions above to get authenticated</string>
+	<string name="auth_unsupported_auth_method">The server does not support this authentication method</string>    
     
     <string name="crashlog_message">Application terminated unexpectedly. Would you like to submit a crash report?</string>
     <string name="crashlog_send_report">Send report</string>

+ 7 - 1
res/values/styles.xml

@@ -20,7 +20,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android">
 	<style name="Animations" />
 
-	<!-- Default ownCloud app style -->
+	<!-- General ownCloud app style -->
 	<style name="Theme.ownCloud" parent="style/Theme.Sherlock.Light.DarkActionBar">
     	<item name="android:actionBarStyle">@style/Theme.ownCloud.Widget.ActionBar</item>
     	<item name="actionBarStyle">@style/Theme.ownCloud.Widget.ActionBar</item>
@@ -47,6 +47,12 @@
     	<item name="android:shadowDy">1</item>
     	<item name="android:backgroundSplit">@drawable/split_action_bg</item>
 	</style>
+
+		
+	<!-- Dialogs -->
+	<style name="Theme.ownCloud.Dialog" parent="style/Theme.Sherlock.Light.Dialog">
+	</style>
+	
 	
 	<!-- PopDownMenu -->
 	<style name="Animations.PopDownMenu" />

+ 5 - 4
setup_env.bat

@@ -1,7 +1,8 @@
 git submodule init
 git submodule update
-android.bat update project -p actionbarsherlock\library --target 1
-android.bat update project -p . --target 1
-cp third_party\android-support-library\android-support-v4.jar actionbarsherlock\library\libs\android-support-v4.jar
+call android.bat update project -p actionbarsherlock\library --target 1
+call android.bat update project -p . --target 1
+copy /Y third_party\android-support-library\android-support-v4.jar actionbarsherlock\library\libs\android-support-v4.jar
 cd tests
-android.bat update test-project -m .. -p .
+call android.bat update test-project -m .. -p .
+cd ..

+ 7 - 1
src/com/owncloud/android/authentication/AccountAuthenticator.java

@@ -46,6 +46,7 @@ public class AccountAuthenticator extends AbstractAccountAuthenticator {
     public static final String AUTH_TOKEN_TYPE_PASSWORD = "owncloud.password";
     public static final String AUTH_TOKEN_TYPE_ACCESS_TOKEN = "owncloud.oauth2.access_token";
     public static final String AUTH_TOKEN_TYPE_REFRESH_TOKEN = "owncloud.oauth2.refresh_token";
+    public static final String AUTH_TOKEN_TYPE_SAML_WEB_SSO_SESSION_COOKIE = "owncloud.saml.web_sso.session_cookie";
 
     public static final String KEY_AUTH_TOKEN_TYPE = "authTokenType";
     public static final String KEY_REQUIRED_FEATURES = "requiredFeatures";
@@ -75,6 +76,10 @@ public class AccountAuthenticator extends AbstractAccountAuthenticator {
      * Flag signaling if the ownCloud server can be accessed with OAuth2 access tokens.
      */
     public static final String KEY_SUPPORTS_OAUTH2 = "oc_supports_oauth2";
+    /**
+     * Flag signaling if the ownCloud server can be accessed with session cookies from SAML-based web single-sign-on.
+     */
+    public static final String KEY_SUPPORTS_SAML_WEB_SSO = "oc_supports_saml_web_sso";
     
     private static final String TAG = AccountAuthenticator.class.getSimpleName();
     
@@ -254,7 +259,8 @@ public class AccountAuthenticator extends AbstractAccountAuthenticator {
         if (!authTokenType.equals(AUTH_TOKEN_TYPE) &&
             !authTokenType.equals(AUTH_TOKEN_TYPE_PASSWORD) &&
             !authTokenType.equals(AUTH_TOKEN_TYPE_ACCESS_TOKEN) &&
-            !authTokenType.equals(AUTH_TOKEN_TYPE_REFRESH_TOKEN) ) {
+            !authTokenType.equals(AUTH_TOKEN_TYPE_REFRESH_TOKEN) &&
+            !authTokenType.equals(AUTH_TOKEN_TYPE_SAML_WEB_SSO_SESSION_COOKIE)) {
             throw new UnsupportedAuthTokenTypeException();
         }
     }

+ 85 - 0
src/com/owncloud/android/authentication/AccountAuthenticatorActivity.java

@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.owncloud.android.authentication;
+
+import android.accounts.AccountAuthenticatorResponse;
+import android.accounts.AccountManager;
+import android.os.Bundle;
+
+import com.actionbarsherlock.app.SherlockFragmentActivity;
+
+
+/*
+ * Base class for implementing an Activity that is used to help implement an AbstractAccountAuthenticator. 
+ * If the AbstractAccountAuthenticator needs to use an activity to handle the request then it can have the activity extend 
+ * AccountAuthenticatorActivity. The AbstractAccountAuthenticator passes in the response to the intent using the following:
+ * intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, response);
+ * 
+ * The activity then sets the result that is to be handed to the response via setAccountAuthenticatorResult(android.os.Bundle). 
+ * This result will be sent as the result of the request when the activity finishes. If this is never set or if it is set to null 
+ * then error AccountManager.ERROR_CODE_CANCELED will be called on the response.
+ */
+
+public class AccountAuthenticatorActivity extends SherlockFragmentActivity {
+
+    private AccountAuthenticatorResponse mAccountAuthenticatorResponse = null;
+    private Bundle mResultBundle = null;
+
+
+    /**
+     * Set the result that is to be sent as the result of the request that caused this Activity to be launched.
+     * If result is null or this method is never called then the request will be canceled.
+     * 
+     * @param result this is returned as the result of the AbstractAccountAuthenticator request
+     */
+    public final void setAccountAuthenticatorResult(Bundle result) {
+        mResultBundle = result;
+    }
+
+    /**
+     * Retreives the AccountAuthenticatorResponse from either the intent of the icicle, if the
+     * icicle is non-zero.
+     * @param icicle the save instance data of this Activity, may be null
+     */
+    protected void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+
+        mAccountAuthenticatorResponse =
+                getIntent().getParcelableExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE);
+
+        if (mAccountAuthenticatorResponse != null) {
+            mAccountAuthenticatorResponse.onRequestContinued();
+        }
+    }
+    
+    /**
+     * Sends the result or a Constants.ERROR_CODE_CANCELED error if a result isn't present.
+     */
+    public void finish() {
+        if (mAccountAuthenticatorResponse != null) {
+            // send the result bundle back if set, otherwise send an error.
+            if (mResultBundle != null) {
+                mAccountAuthenticatorResponse.onResult(mResultBundle);
+            } else {
+                mAccountAuthenticatorResponse.onError(AccountManager.ERROR_CODE_CANCELED,
+                        "canceled");
+            }
+            mAccountAuthenticatorResponse = null;
+        }
+        super.finish();
+    }
+}

+ 48 - 2
src/com/owncloud/android/authentication/AccountUtils.java

@@ -32,6 +32,7 @@ public class AccountUtils {
     public static final String WEBDAV_PATH_2_0 = "/files/webdav.php";
     public static final String WEBDAV_PATH_4_0 = "/remote.php/webdav";
     private static final String ODAV_PATH = "/remote.php/odav";
+    private static final String SAML_SSO_PATH = "/remote.php/webdav";
     public static final String CARDDAV_PATH_2_0 = "/apps/contacts/carddav.php";
     public static final String CARDDAV_PATH_4_0 = "/remote/carddav.php";
     public static final String STATUS_PATH = "/status.php";
@@ -74,6 +75,20 @@ public class AccountUtils {
     }
 
     
+    public static boolean exists(Account account, Context context) {
+        Account[] ocAccounts = AccountManager.get(context).getAccountsByType(
+                AccountAuthenticator.ACCOUNT_TYPE);
+
+        if (account != null && account.name != null) {
+            for (Account ac : ocAccounts) {
+                if (ac.name.equals(account.name)) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+    
 
     /**
      * Checks, whether or not there are any ownCloud accounts setup.
@@ -115,11 +130,41 @@ public class AccountUtils {
      * @param version version of owncloud
      * @return webdav path for given OC version, null if OC version unknown
      */
-    public static String getWebdavPath(OwnCloudVersion version, boolean supportsOAuth) {
+    public static String getWebdavPath(OwnCloudVersion version, boolean supportsOAuth, boolean supportsSamlSso) {
         if (version != null) {
             if (supportsOAuth) {
                 return ODAV_PATH;
             }
+            if (supportsSamlSso) {
+                return SAML_SSO_PATH;
+            }
+            if (version.compareTo(OwnCloudVersion.owncloud_v4) >= 0)
+                return WEBDAV_PATH_4_0;
+            if (version.compareTo(OwnCloudVersion.owncloud_v3) >= 0
+                    || version.compareTo(OwnCloudVersion.owncloud_v2) >= 0)
+                return WEBDAV_PATH_2_0;
+            if (version.compareTo(OwnCloudVersion.owncloud_v1) >= 0)
+                return WEBDAV_PATH_1_2;
+        }
+        return null;
+    }
+    
+    /**
+     * Returns the proper URL path to access the WebDAV interface of an ownCloud server,
+     * according to its version and the authorization method used.
+     * 
+     * @param   version         Version of ownCloud server.
+     * @param   authTokenType   Authorization token type, matching some of the AUTH_TOKEN_TYPE_* constants in {@link AccountAuthenticator}. 
+     * @return                  WebDAV path for given OC version and authorization method, null if OC version is unknown.
+     */
+    public static String getWebdavPath(OwnCloudVersion version, String authTokenType) {
+        if (version != null) {
+            if (AccountAuthenticator.AUTH_TOKEN_TYPE_ACCESS_TOKEN.equals(authTokenType)) {
+                return ODAV_PATH;
+            }
+            if (AccountAuthenticator.AUTH_TOKEN_TYPE_SAML_WEB_SSO_SESSION_COOKIE.equals(authTokenType)) {
+                return SAML_SSO_PATH;
+            }
             if (version.compareTo(OwnCloudVersion.owncloud_v4) >= 0)
                 return WEBDAV_PATH_4_0;
             if (version.compareTo(OwnCloudVersion.owncloud_v3) >= 0
@@ -143,8 +188,9 @@ public class AccountUtils {
         String baseurl = ama.getUserData(account, AccountAuthenticator.KEY_OC_BASE_URL);
         String strver  = ama.getUserData(account, AccountAuthenticator.KEY_OC_VERSION);
         boolean supportsOAuth = (ama.getUserData(account, AccountAuthenticator.KEY_SUPPORTS_OAUTH2) != null);
+        boolean supportsSamlSso = (ama.getUserData(account, AccountAuthenticator.KEY_SUPPORTS_SAML_WEB_SSO) != null);
         OwnCloudVersion ver = new OwnCloudVersion(strver);
-        String webdavpath = getWebdavPath(ver, supportsOAuth);
+        String webdavpath = getWebdavPath(ver, supportsOAuth, supportsSamlSso);
 
         if (baseurl == null || webdavpath == null) 
             throw new AccountNotFoundException(account, "Account not found", null);

+ 461 - 136
src/com/owncloud/android/authentication/AuthenticatorActivity.java

@@ -18,21 +18,7 @@
 
 package com.owncloud.android.authentication;
 
-import com.owncloud.android.Log_OC;
-import com.owncloud.android.ui.dialog.SslValidatorDialog;
-import com.owncloud.android.ui.dialog.SslValidatorDialog.OnSslValidatorListener;
-import com.owncloud.android.utils.OwnCloudVersion;
-import com.owncloud.android.network.OwnCloudClientUtils;
-import com.owncloud.android.operations.OwnCloudServerCheckOperation;
-import com.owncloud.android.operations.ExistenceCheckOperation;
-import com.owncloud.android.operations.OAuth2GetAccessToken;
-import com.owncloud.android.operations.OnRemoteOperationListener;
-import com.owncloud.android.operations.RemoteOperation;
-import com.owncloud.android.operations.RemoteOperationResult;
-import com.owncloud.android.operations.RemoteOperationResult.ResultCode;
-
 import android.accounts.Account;
-import android.accounts.AccountAuthenticatorActivity;
 import android.accounts.AccountManager;
 import android.app.AlertDialog;
 import android.app.Dialog;
@@ -47,6 +33,7 @@ import android.net.Uri;
 import android.os.Bundle;
 import android.os.Handler;
 import android.preference.PreferenceManager;
+import android.support.v4.app.Fragment;
 import android.text.Editable;
 import android.text.InputType;
 import android.text.TextWatcher;
@@ -57,15 +44,28 @@ import android.view.View.OnFocusChangeListener;
 import android.view.View.OnTouchListener;
 import android.view.Window;
 import android.view.inputmethod.EditorInfo;
+import android.widget.Button;
 import android.widget.CheckBox;
 import android.widget.EditText;
-import android.widget.Button;
-import android.widget.ImageButton;
 import android.widget.TextView;
-import android.widget.Toast;
 import android.widget.TextView.OnEditorActionListener;
 
+import com.actionbarsherlock.app.SherlockDialogFragment;
+import com.owncloud.android.Log_OC;
 import com.owncloud.android.R;
+import com.owncloud.android.authentication.SsoWebViewClient.SsoWebViewClientListener;
+import com.owncloud.android.network.OwnCloudClientUtils;
+import com.owncloud.android.operations.ExistenceCheckOperation;
+import com.owncloud.android.operations.OAuth2GetAccessToken;
+import com.owncloud.android.operations.OnRemoteOperationListener;
+import com.owncloud.android.operations.OwnCloudServerCheckOperation;
+import com.owncloud.android.operations.RemoteOperation;
+import com.owncloud.android.operations.RemoteOperationResult;
+import com.owncloud.android.operations.RemoteOperationResult.ResultCode;
+import com.owncloud.android.ui.dialog.SamlWebViewDialog;
+import com.owncloud.android.ui.dialog.SslValidatorDialog;
+import com.owncloud.android.ui.dialog.SslValidatorDialog.OnSslValidatorListener;
+import com.owncloud.android.utils.OwnCloudVersion;
 
 import eu.alefzero.webdav.WebdavClient;
 
@@ -76,7 +76,7 @@ import eu.alefzero.webdav.WebdavClient;
  * @author David A. Velasco
  */
 public class AuthenticatorActivity extends AccountAuthenticatorActivity
-implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeListener, OnEditorActionListener {
+implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeListener, OnEditorActionListener, SsoWebViewClientListener{
 
     private static final String TAG = AuthenticatorActivity.class.getSimpleName();
 
@@ -86,6 +86,8 @@ implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
     public static final String EXTRA_ACTION = "ACTION";
     public static final String EXTRA_ENFORCED_UPDATE = "ENFORCE_UPDATE";
 
+    private static final String KEY_AUTH_MESSAGE_VISIBILITY = "AUTH_MESSAGE_VISIBILITY";
+    private static final String KEY_AUTH_MESSAGE_TEXT = "AUTH_MESSAGE_TEXT";
     private static final String KEY_HOST_URL_TEXT = "HOST_URL_TEXT";
     private static final String KEY_OC_VERSION = "OC_VERSION";
     private static final String KEY_ACCOUNT = "ACCOUNT";
@@ -99,11 +101,13 @@ implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
     private static final String KEY_AUTH_STATUS_TEXT = "AUTH_STATUS_TEXT";
     private static final String KEY_AUTH_STATUS_ICON = "AUTH_STATUS_ICON";
     private static final String KEY_REFRESH_BUTTON_ENABLED = "KEY_REFRESH_BUTTON_ENABLED";
+    
+    private static final String KEY_OC_USERNAME_EQUALS = "oc_username=";
 
-    private static final String OAUTH_MODE_ON = "on";
-    private static final String OAUTH_MODE_OFF = "off";
-    private static final String OAUTH_MODE_OPTIONAL = "optional";
-
+    private static final String AUTH_ON = "on";
+    private static final String AUTH_OFF = "off";
+    private static final String AUTH_OPTIONAL = "optional";
+    
     private static final int DIALOG_LOGIN_PROGRESS = 0;
     private static final int DIALOG_SSL_VALIDATOR = 1;
     private static final int DIALOG_CERT_NOT_SAVED = 2;
@@ -112,12 +116,16 @@ implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
     public static final byte ACTION_CREATE = 0;
     public static final byte ACTION_UPDATE_TOKEN = 1;
 
+    private static final String TAG_SAML_DIALOG = "samlWebViewDialog";
+    
     private String mHostBaseUrl;
     private OwnCloudVersion mDiscoveredVersion;
 
-    private int mServerStatusText, mServerStatusIcon;
+    private String mAuthMessageText;
+    private int mAuthMessageVisibility, mServerStatusText, mServerStatusIcon;
     private boolean mServerIsChecked, mServerIsValid, mIsSslConn;
     private int mAuthStatusText, mAuthStatusIcon;    
+    private TextView mAuthStatusLayout;
 
     private final Handler mHandler = new Handler();
     private Thread mOperationThread;
@@ -132,19 +140,29 @@ implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
     private byte mAction;
     private Account mAccount;
 
+    private TextView mAuthMessage;
+    
     private EditText mHostUrlInput;
-    private ImageButton mRefreshButton;
+    private boolean mHostUrlInputEnabled;
+    private View mRefreshButton;
+
+    private String mAuthTokenType;
+    
     private EditText mUsernameInput;
     private EditText mPasswordInput;
+    
     private CheckBox mOAuth2Check;
-    private String mOAuthAccessToken;
-    private View mOkButton;
-    private TextView mAuthStatusLayout;
-
+    
     private TextView mOAuthAuthEndpointText;
     private TextView mOAuthTokenEndpointText;
     
-    private boolean mRefreshButtonEnabled;
+    private SamlWebViewDialog mSamlDialog;
+    
+    private View mOkButton;
+    
+    private String mAuthToken;
+    
+    private boolean mResumed; // Control if activity is resumed
 
 
     /**
@@ -159,8 +177,9 @@ implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
 
         /// set view and get references to view elements
         setContentView(R.layout.account_setup);
+        mAuthMessage = (TextView) findViewById(R.id.auth_message);
         mHostUrlInput = (EditText) findViewById(R.id.hostUrlInput);
-        mRefreshButton = (ImageButton) findViewById(R.id.refeshButton);
+        mHostUrlInput.setText(getString(R.string.server_url));  // valid although R.string.server_url is an empty string
         mUsernameInput = (EditText) findViewById(R.id.account_username);
         mPasswordInput = (EditText) findViewById(R.id.account_password);
         mOAuthAuthEndpointText = (TextView)findViewById(R.id.oAuthEntryPoint_1);
@@ -168,6 +187,10 @@ implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
         mOAuth2Check = (CheckBox) findViewById(R.id.oauth_onOff_check);
         mOkButton = findViewById(R.id.buttonOK);
         mAuthStatusLayout = (TextView) findViewById(R.id.auth_status_text); 
+        
+        /// set Host Url Input Enabled
+        mHostUrlInputEnabled = getResources().getBoolean(R.bool.show_server_url_input);
+        
 
         /// complete label for 'register account' button
         Button b = (Button) findViewById(R.id.account_register);
@@ -182,9 +205,21 @@ implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
         mAccount = null;
         mHostBaseUrl = "";
         boolean refreshButtonEnabled = false;
+        
+        // URL input configuration applied
+        if (!mHostUrlInputEnabled)
+        {
+            findViewById(R.id.hostUrlFrame).setVisibility(View.GONE);
+            mRefreshButton = findViewById(R.id.centeredRefreshButton);
+
+        } else {
+            mRefreshButton = findViewById(R.id.embeddedRefreshButton);
+        }
 
         if (savedInstanceState == null) {
+            mResumed = false;
             /// connection state and info
+            mAuthMessageVisibility = View.GONE;
             mServerStatusText = mServerStatusIcon = 0;
             mServerIsValid = false;
             mServerIsChecked = false;
@@ -192,9 +227,6 @@ implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
             mAuthStatusText = mAuthStatusIcon = 0;
 
             /// retrieve extras from intent
-            String tokenType = getIntent().getExtras().getString(AccountAuthenticator.KEY_AUTH_TOKEN_TYPE);
-            boolean oAuthRequired = AccountAuthenticator.AUTH_TOKEN_TYPE_ACCESS_TOKEN.equals(tokenType) || OAUTH_MODE_ON.equals(getString(R.string.oauth2_mode));
-
             mAccount = getIntent().getExtras().getParcelable(EXTRA_ACCOUNT);
             if (mAccount != null) {
                 String ocVersion = mAccountMgr.getUserData(mAccount, AccountAuthenticator.KEY_OC_VERSION);
@@ -205,18 +237,19 @@ implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
                 mHostUrlInput.setText(mHostBaseUrl);
                 String userName = mAccount.name.substring(0, mAccount.name.lastIndexOf('@'));
                 mUsernameInput.setText(userName);
-                oAuthRequired = (mAccountMgr.getUserData(mAccount, AccountAuthenticator.KEY_SUPPORTS_OAUTH2) != null);
             }
-            mOAuth2Check.setChecked(oAuthRequired);
-            changeViewByOAuth2Check(oAuthRequired);
+            initAuthorizationMethod();  // checks intent and setup.xml to determine mCurrentAuthorizationMethod
             mJustCreated = true;
             
-            if (mAction == ACTION_UPDATE_TOKEN) {
+            if (mAction == ACTION_UPDATE_TOKEN || !mHostUrlInputEnabled) {
                 checkOcServer(); 
             }
-
+            
         } else {
+            mResumed = true;
             /// connection state and info
+            mAuthMessageVisibility = savedInstanceState.getInt(KEY_AUTH_MESSAGE_VISIBILITY);
+            mAuthMessageText = savedInstanceState.getString(KEY_AUTH_MESSAGE_TEXT);
             mServerIsValid = savedInstanceState.getBoolean(KEY_SERVER_VALID);
             mServerIsChecked = savedInstanceState.getBoolean(KEY_SERVER_CHECKED);
             mServerStatusText = savedInstanceState.getInt(KEY_SERVER_STATUS_TEXT);
@@ -237,6 +270,11 @@ implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
 
             // account data, if updating
             mAccount = savedInstanceState.getParcelable(KEY_ACCOUNT);
+            mAuthTokenType = savedInstanceState.getString(AccountAuthenticator.KEY_AUTH_TOKEN_TYPE);
+            if (mAuthTokenType == null) {
+                mAuthTokenType =  AccountAuthenticator.AUTH_TOKEN_TYPE_PASSWORD;
+                
+            }
 
             // check if server check was interrupted by a configuration change
             if (savedInstanceState.getBoolean(KEY_SERVER_CHECK_IN_PROGRESS, false)) {
@@ -249,9 +287,16 @@ implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
 
         }
 
+        if (mAuthMessageVisibility== View.VISIBLE) {
+            showAuthMessage(mAuthMessageText);
+        }
+        else {
+            hideAuthMessage();
+        }
+        adaptViewAccordingToAuthenticationMethod();
         showServerStatus();
         showAuthStatus();
-
+        
         if (mAction == ACTION_UPDATE_TOKEN) {
             /// lock things that should not change
             mHostUrlInput.setEnabled(false);
@@ -265,14 +310,17 @@ implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
         if (mServerIsChecked && !mServerIsValid && refreshButtonEnabled) showRefreshButton();
         mOkButton.setEnabled(mServerIsValid); // state not automatically recovered in configuration changes
 
-        if (!OAUTH_MODE_OPTIONAL.equals(getString(R.string.oauth2_mode))) {
+        if (AccountAuthenticator.AUTH_TOKEN_TYPE_SAML_WEB_SSO_SESSION_COOKIE.equals(mAuthTokenType) || 
+                !AUTH_OPTIONAL.equals(getString(R.string.auth_method_oauth2))) {
             mOAuth2Check.setVisibility(View.GONE);
         }
 
         mPasswordInput.setText("");     // clean password to avoid social hacking (disadvantage: password in removed if the device is turned aside)
 
-        /// bind view elements to listeners
+        /// bind view elements to listeners and other friends
         mHostUrlInput.setOnFocusChangeListener(this);
+        mHostUrlInput.setImeOptions(EditorInfo.IME_ACTION_NEXT);
+        mHostUrlInput.setOnEditorActionListener(this);
         mHostUrlInput.addTextChangedListener(new TextWatcher() {
 
             @Override
@@ -283,12 +331,20 @@ implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
             }
 
             @Override
-            public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
+            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+            }
 
             @Override
-            public void onTextChanged(CharSequence s, int start, int before, int count) {}
-
+            public void onTextChanged(CharSequence s, int start, int before, int count) {
+                if (!mResumed) {
+                    mAuthStatusIcon = 0;
+                    mAuthStatusText = 0;
+                    showAuthStatus();                    
+                }
+                mResumed = false;
+            }
         });
+        
         mPasswordInput.setOnFocusChangeListener(this);
         mPasswordInput.setImeOptions(EditorInfo.IME_ACTION_DONE);
         mPasswordInput.setOnEditorActionListener(this);
@@ -300,7 +356,60 @@ implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
                 }
                 return true;
             }
-        });
+        });
+        
+        findViewById(R.id.scroll).setOnTouchListener(new OnTouchListener() {
+            @Override
+            public boolean onTouch(View view, MotionEvent event) {
+                if (event.getAction() == MotionEvent.ACTION_DOWN) {
+                    if (AccountAuthenticator.AUTH_TOKEN_TYPE_SAML_WEB_SSO_SESSION_COOKIE.equals(mAuthTokenType) &&
+                            mHostUrlInput.hasFocus()) {
+                        checkOcServer();
+                    }
+                }
+                return false;
+            }
+        });
+    }
+    
+   
+
+    private void initAuthorizationMethod() {
+        boolean oAuthRequired = false;
+        boolean samlWebSsoRequired = false;
+
+        mAuthTokenType = getIntent().getExtras().getString(AccountAuthenticator.KEY_AUTH_TOKEN_TYPE);
+        mAccount = getIntent().getExtras().getParcelable(EXTRA_ACCOUNT);
+        
+        // TODO could be a good moment to validate the received token type, if not null
+        
+        if (mAuthTokenType == null) {    
+            if (mAccount != null) {
+                /// same authentication method than the one used to create the account to update
+                oAuthRequired = (mAccountMgr.getUserData(mAccount, AccountAuthenticator.KEY_SUPPORTS_OAUTH2) != null);
+                samlWebSsoRequired = (mAccountMgr.getUserData(mAccount, AccountAuthenticator.KEY_SUPPORTS_SAML_WEB_SSO) != null);
+            
+            } else {
+                /// use the one set in setup.xml
+                oAuthRequired = AUTH_ON.equals(getString(R.string.auth_method_oauth2));
+                samlWebSsoRequired = AUTH_ON.equals(getString(R.string.auth_method_saml_web_sso));            
+            }
+            if (oAuthRequired) {
+                mAuthTokenType = AccountAuthenticator.AUTH_TOKEN_TYPE_ACCESS_TOKEN;
+            } else if (samlWebSsoRequired) {
+                mAuthTokenType = AccountAuthenticator.AUTH_TOKEN_TYPE_SAML_WEB_SSO_SESSION_COOKIE;
+            } else {
+                mAuthTokenType = AccountAuthenticator.AUTH_TOKEN_TYPE_PASSWORD;
+            }
+        }
+    
+        if (mAccount != null) {
+            String userName = mAccount.name.substring(0, mAccount.name.lastIndexOf('@'));
+            mUsernameInput.setText(userName);
+        }
+        
+        mOAuth2Check.setChecked(AccountAuthenticator.AUTH_TOKEN_TYPE_ACCESS_TOKEN.equals(mAuthTokenType));
+        
     }
 
     /**
@@ -316,6 +425,8 @@ implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
         super.onSaveInstanceState(outState);
 
         /// connection state and info
+        outState.putInt(KEY_AUTH_MESSAGE_VISIBILITY, mAuthMessage.getVisibility());
+        outState.putString(KEY_AUTH_MESSAGE_TEXT, mAuthMessage.getText().toString());
         outState.putInt(KEY_SERVER_STATUS_TEXT, mServerStatusText);
         outState.putInt(KEY_SERVER_STATUS_ICON, mServerStatusIcon);
         outState.putBoolean(KEY_SERVER_VALID, mServerIsValid);
@@ -336,10 +447,11 @@ implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
         if (mAccount != null) {
             outState.putParcelable(KEY_ACCOUNT, mAccount);
         }
+        outState.putString(AccountAuthenticator.KEY_AUTH_TOKEN_TYPE, mAuthTokenType);
         
         // refresh button enabled
-        //outState.putBoolean(KEY_REFRESH_BUTTON_ENABLED, mRefreshButtonEnabled);
         outState.putBoolean(KEY_REFRESH_BUTTON_ENABLED, (mRefreshButton.getVisibility() == View.VISIBLE));
+        
 
     }
 
@@ -368,13 +480,17 @@ implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
     @Override
     protected void onResume() {
         super.onResume();
-        // the state of mOAuth2Check is automatically recovered between configuration changes, but not before onCreate() finishes; so keep the next lines here
-        changeViewByOAuth2Check(mOAuth2Check.isChecked());  
         if (mAction == ACTION_UPDATE_TOKEN && mJustCreated && getIntent().getBooleanExtra(EXTRA_ENFORCED_UPDATE, false)) {
-            if (mOAuth2Check.isChecked())
-                Toast.makeText(this, R.string.auth_expired_oauth_token_toast, Toast.LENGTH_LONG).show();
-            else
-                Toast.makeText(this, R.string.auth_expired_basic_auth_toast, Toast.LENGTH_LONG).show();
+            if (AccountAuthenticator.AUTH_TOKEN_TYPE_ACCESS_TOKEN.equals(mAuthTokenType)) {
+                //Toast.makeText(this, R.string.auth_expired_oauth_token_toast, Toast.LENGTH_LONG).show();
+                showAuthMessage(getString(R.string.auth_expired_oauth_token_toast));
+            } else if (AccountAuthenticator.AUTH_TOKEN_TYPE_SAML_WEB_SSO_SESSION_COOKIE.equals(mAuthTokenType)) {
+                //Toast.makeText(this, R.string.auth_expired_saml_sso_token_toast, Toast.LENGTH_LONG).show();
+                showAuthMessage(getString(R.string.auth_expired_saml_sso_token_toast));
+            } else {
+                //Toast.makeText(this, R.string.auth_expired_basic_auth_toast, Toast.LENGTH_LONG).show();
+                showAuthMessage(getString(R.string.auth_expired_basic_auth_toast));
+            }
         }
 
         if (mNewCapturedUriFromOAuth2Redirection != null) {
@@ -382,6 +498,7 @@ implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
         }
 
         mJustCreated = false;
+        
     }
 
 
@@ -403,7 +520,7 @@ implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
                 getString(R.string.oauth2_grant_type),
                 queryParameters);
         //WebdavClient client = OwnCloudClientUtils.createOwnCloudClient(Uri.parse(getString(R.string.oauth2_url_endpoint_access)), getApplicationContext());
-        WebdavClient client = OwnCloudClientUtils.createOwnCloudClient(Uri.parse(mOAuthTokenEndpointText.getText().toString().trim()), getApplicationContext());
+        WebdavClient client = OwnCloudClientUtils.createOwnCloudClient(Uri.parse(mOAuthTokenEndpointText.getText().toString().trim()), getApplicationContext(), true);
         operation.execute(client, this, mHandler);
     }
 
@@ -416,9 +533,6 @@ implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
         if (view.getId() == R.id.hostUrlInput) {   
             if (!hasFocus) {
                 onUrlInputFocusLost((TextView) view);
-                if (!mServerIsValid) {
-                    showRefreshButton();
-                }
             }
             else {
                 hideRefreshButton();
@@ -446,12 +560,20 @@ implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
             checkOcServer();
         } else {
             mOkButton.setEnabled(mServerIsValid);
+            if (!mServerIsValid) {
+                showRefreshButton();
+            }
         }
     }
 
 
     private void checkOcServer() {
         String uri = trimUrlWebdav(mHostUrlInput.getText().toString().trim());
+        
+        if (!mHostUrlInputEnabled){
+            uri = getString(R.string.server_url);
+        }
+        
         mServerIsValid = false;
         mServerIsChecked = false;
         mOkButton.setEnabled(false);
@@ -462,7 +584,7 @@ implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
             mServerStatusIcon = R.drawable.progress_small;
             showServerStatus();
             mOcServerChkOperation = new  OwnCloudServerCheckOperation(uri, this);
-            WebdavClient client = OwnCloudClientUtils.createOwnCloudClient(Uri.parse(uri), this);
+            WebdavClient client = OwnCloudClientUtils.createOwnCloudClient(Uri.parse(uri), this, true);
             mOperationThread = mOcServerChkOperation.execute(client, this, mHandler);
         } else {
             mServerStatusText = 0;
@@ -562,9 +684,10 @@ implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
             return;
         }
 
-        if (mOAuth2Check.isChecked()) {
+        if (AccountAuthenticator.AUTH_TOKEN_TYPE_ACCESS_TOKEN.equals(mAuthTokenType)) {
             startOauthorization();
-
+        } else if (AccountAuthenticator.AUTH_TOKEN_TYPE_SAML_WEB_SSO_SESSION_COOKIE.equals(mAuthTokenType)) { 
+            startSamlBasedFederatedSingleSignOnAuthorization();
         } else {
             checkBasicAuthorization();
         }
@@ -577,7 +700,7 @@ implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
      */
     private void checkBasicAuthorization() {
         /// get the path to the root folder through WebDAV from the version server
-        String webdav_path = AccountUtils.getWebdavPath(mDiscoveredVersion, false);
+        String webdav_path = AccountUtils.getWebdavPath(mDiscoveredVersion, mAuthTokenType);
 
         /// get basic credentials entered by user
         String username = mUsernameInput.getText().toString();
@@ -588,7 +711,7 @@ implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
 
         /// test credentials accessing the root folder
         mAuthCheckOperation = new  ExistenceCheckOperation("", this, false);
-        WebdavClient client = OwnCloudClientUtils.createOwnCloudClient(Uri.parse(mHostBaseUrl + webdav_path), this);
+        WebdavClient client = OwnCloudClientUtils.createOwnCloudClient(Uri.parse(mHostBaseUrl + webdav_path), this, true);
         client.setBasicCredentials(username, password);
         mOperationThread = mAuthCheckOperation.execute(client, this, mHandler);
     }
@@ -603,6 +726,7 @@ implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
         mAuthStatusIcon = R.drawable.progress_small;
         mAuthStatusText = R.string.oauth_login_connection;
         showAuthStatus();
+        
 
         // GET AUTHORIZATION request
         //Uri uri = Uri.parse(getString(R.string.oauth2_url_endpoint_auth));
@@ -620,6 +744,27 @@ implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
     }
 
 
+    /**
+     * Starts the Web Single Sign On flow to get access to the root folder
+     * in the server.
+     */
+    private void startSamlBasedFederatedSingleSignOnAuthorization() {
+        // be gentle with the user
+        mAuthStatusIcon = R.drawable.progress_small;
+        mAuthStatusText = R.string.auth_connecting_auth_server;
+        showAuthStatus();
+        showDialog(DIALOG_LOGIN_PROGRESS);
+        
+        /// get the path to the root folder through WebDAV from the version server
+        String webdav_path = AccountUtils.getWebdavPath(mDiscoveredVersion, mAuthTokenType);
+
+        /// test credentials accessing the root folder
+        mAuthCheckOperation = new  ExistenceCheckOperation("", this, false);
+        WebdavClient client = OwnCloudClientUtils.createOwnCloudClient(Uri.parse(mHostBaseUrl + webdav_path), this, false);
+        mOperationThread = mAuthCheckOperation.execute(client, this, mHandler);
+      
+    }
+
     /**
      * Callback method invoked when a RemoteOperation executed by this Activity finishes.
      * 
@@ -635,10 +780,42 @@ implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
             onGetOAuthAccessTokenFinish((OAuth2GetAccessToken)operation, result);
 
         } else if (operation instanceof ExistenceCheckOperation)  {
-            onAuthorizationCheckFinish((ExistenceCheckOperation)operation, result);
-
+            if (AccountAuthenticator.AUTH_TOKEN_TYPE_SAML_WEB_SSO_SESSION_COOKIE.equals(mAuthTokenType)) {
+                onSamlBasedFederatedSingleSignOnAuthorizationStart(operation, result);
+                
+            } else {
+                onAuthorizationCheckFinish((ExistenceCheckOperation)operation, result);
+            }
         }
     }
+    
+    
+    private void onSamlBasedFederatedSingleSignOnAuthorizationStart(RemoteOperation operation, RemoteOperationResult result) {
+        try {
+            dismissDialog(DIALOG_LOGIN_PROGRESS);
+        } catch (IllegalArgumentException e) {
+            // NOTHING TO DO ; can't find out what situation that leads to the exception in this code, but user logs signal that it happens
+        }
+        
+        //if (result.isTemporalRedirection() && result.isIdPRedirection()) {
+        if (result.isIdPRedirection()) {
+            String url = result.getRedirectedLocation();
+            String targetUrl = mHostBaseUrl + AccountUtils.getWebdavPath(mDiscoveredVersion, mAuthTokenType);
+            
+            // Show dialog
+            mSamlDialog = SamlWebViewDialog.newInstance(url, targetUrl);            
+            mSamlDialog.show(getSupportFragmentManager(), TAG_SAML_DIALOG);
+            
+            mAuthStatusIcon = 0;
+            mAuthStatusText = 0;
+            
+        } else {
+            mAuthStatusIcon = R.drawable.common_error;
+            mAuthStatusText = R.string.auth_unsupported_auth_method;
+            
+        }
+        showAuthStatus();
+    }
 
 
     /**
@@ -703,7 +880,6 @@ implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
             }
 
         }
-        Log_OC.d(TAG, "URL Normalize " + url);
         return (url != null ? url : "");
     }
 
@@ -863,6 +1039,12 @@ implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
         case OAUTH2_ERROR_ACCESS_DENIED:
             mAuthStatusText = R.string.auth_oauth_error_access_denied;
             break;
+        case ACCOUNT_NOT_NEW:
+            mAuthStatusText = R.string.auth_account_not_new;
+            break;
+        case ACCOUNT_NOT_THE_SAME:
+            mAuthStatusText = R.string.auth_account_not_the_same;
+            break;
         case UNHANDLED_HTTP_CODE:
         case UNKNOWN_ERROR:
             mAuthStatusText = R.string.auth_unknown_error_title;
@@ -888,17 +1070,17 @@ implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
             // NOTHING TO DO ; can't find out what situation that leads to the exception in this code, but user logs signal that it happens
         }
 
-        String webdav_path = AccountUtils.getWebdavPath(mDiscoveredVersion, true);
+        String webdav_path = AccountUtils.getWebdavPath(mDiscoveredVersion, mAuthTokenType);
         if (result.isSuccess() && webdav_path != null) {
             /// be gentle with the user
             showDialog(DIALOG_LOGIN_PROGRESS);
 
             /// time to test the retrieved access token on the ownCloud server
-            mOAuthAccessToken = ((OAuth2GetAccessToken)operation).getResultTokenMap().get(OAuth2Constants.KEY_ACCESS_TOKEN);
-            Log_OC.d(TAG, "Got ACCESS TOKEN: " + mOAuthAccessToken);
+            mAuthToken = ((OAuth2GetAccessToken)operation).getResultTokenMap().get(OAuth2Constants.KEY_ACCESS_TOKEN);
+            Log_OC.d(TAG, "Got ACCESS TOKEN: " + mAuthToken);
             mAuthCheckOperation = new ExistenceCheckOperation("", this, false);
-            WebdavClient client = OwnCloudClientUtils.createOwnCloudClient(Uri.parse(mHostBaseUrl + webdav_path), this);
-            client.setBearerCredentials(mOAuthAccessToken);
+            WebdavClient client = OwnCloudClientUtils.createOwnCloudClient(Uri.parse(mHostBaseUrl + webdav_path), this, true);
+            client.setBearerCredentials(mAuthToken);
             mAuthCheckOperation.execute(client, this, mHandler);
 
         } else {
@@ -927,14 +1109,17 @@ implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
         if (result.isSuccess()) {
             Log_OC.d(TAG, "Successful access - time to save the account");
 
+            boolean success = false;
             if (mAction == ACTION_CREATE) {
-                createAccount();
+                success = createAccount();
 
             } else {
-                updateToken();
+                success = updateToken();
             }
 
-            finish();
+            if (success) {
+                finish();
+            }
 
         } else if (result.isServerFail() || result.isException()) {
             /// if server fail or exception in authorization, the UI is updated as when a server check failed
@@ -967,6 +1152,7 @@ implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
             showAuthStatus();
             Log_OC.d(TAG, "Access failed: " + result.getLogMessage());
         }
+
     }
 
 
@@ -974,20 +1160,39 @@ implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
      * Sets the proper response to get that the Account Authenticator that started this activity saves 
      * a new authorization token for mAccount.
      */
-    private void updateToken() {
+    private boolean updateToken() {
         Bundle response = new Bundle();
         response.putString(AccountManager.KEY_ACCOUNT_NAME, mAccount.name);
         response.putString(AccountManager.KEY_ACCOUNT_TYPE, mAccount.type);
-        boolean isOAuth = mOAuth2Check.isChecked();
-        if (isOAuth) {
-            response.putString(AccountManager.KEY_AUTHTOKEN, mOAuthAccessToken);
+        
+        if (AccountAuthenticator.AUTH_TOKEN_TYPE_ACCESS_TOKEN.equals(mAuthTokenType)) { 
+            response.putString(AccountManager.KEY_AUTHTOKEN, mAuthToken);
+            // the next line is necessary; by now, notifications are calling directly to the AuthenticatorActivity to update, without AccountManager intervention
+            mAccountMgr.setAuthToken(mAccount, mAuthTokenType, mAuthToken);
+            
+        } else if (AccountAuthenticator.AUTH_TOKEN_TYPE_SAML_WEB_SSO_SESSION_COOKIE.equals(mAuthTokenType)) {
+            String username = getUserNameForSamlSso();
+            if (!mUsernameInput.getText().toString().equals(username)) {
+                // fail - not a new account, but an existing one; disallow
+                RemoteOperationResult result = new RemoteOperationResult(ResultCode.ACCOUNT_NOT_THE_SAME); 
+                updateAuthStatusIconAndText(result);
+                showAuthStatus();
+                Log_OC.d(TAG, result.getLogMessage());
+                
+                return false;
+            }
+            
+            response.putString(AccountManager.KEY_AUTHTOKEN, mAuthToken);
             // the next line is necessary; by now, notifications are calling directly to the AuthenticatorActivity to update, without AccountManager intervention
-            mAccountMgr.setAuthToken(mAccount, AccountAuthenticator.AUTH_TOKEN_TYPE_ACCESS_TOKEN, mOAuthAccessToken);
+            mAccountMgr.setAuthToken(mAccount, mAuthTokenType, mAuthToken);
+            
         } else {
             response.putString(AccountManager.KEY_AUTHTOKEN, mPasswordInput.getText().toString());
             mAccountMgr.setPassword(mAccount, mPasswordInput.getText().toString());
         }
         setAccountAuthenticatorResult(response);
+        
+        return true;
     }
 
 
@@ -998,13 +1203,17 @@ implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
      * 
      * TODO Decide how to name the OAuth accounts
      */
-    private void createAccount() {
+    private boolean createAccount() {
         /// create and save new ownCloud account
-        boolean isOAuth = mOAuth2Check.isChecked();
+        boolean isOAuth = AccountAuthenticator.AUTH_TOKEN_TYPE_ACCESS_TOKEN.equals(mAuthTokenType);
+        boolean isSaml =  AccountAuthenticator.AUTH_TOKEN_TYPE_SAML_WEB_SSO_SESSION_COOKIE.equals(mAuthTokenType);
 
         Uri uri = Uri.parse(mHostBaseUrl);
         String username = mUsernameInput.getText().toString().trim();
-        if (isOAuth) {
+        if (isSaml) {
+            username = getUserNameForSamlSso();
+            
+        } else if (isOAuth) {
             username = "OAuth_user" + (new java.util.Random(System.currentTimeMillis())).nextLong();
         }            
         String accountName = username + "@" + uri.getHost();
@@ -1012,45 +1221,78 @@ implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
             accountName += ":" + uri.getPort();
         }
         mAccount = new Account(accountName, AccountAuthenticator.ACCOUNT_TYPE);
-        if (isOAuth) {
-            mAccountMgr.addAccountExplicitly(mAccount, "", null);  // with our implementation, the password is never input in the app
+        if (AccountUtils.exists(mAccount, getApplicationContext())) {
+            // fail - not a new account, but an existing one; disallow
+            RemoteOperationResult result = new RemoteOperationResult(ResultCode.ACCOUNT_NOT_NEW); 
+            updateAuthStatusIconAndText(result);
+            showAuthStatus();
+            Log_OC.d(TAG, result.getLogMessage());
+            return false;
+            
         } else {
-            mAccountMgr.addAccountExplicitly(mAccount, mPasswordInput.getText().toString(), null);
-        }
-
-        /// add the new account as default in preferences, if there is none already
-        Account defaultAccount = AccountUtils.getCurrentOwnCloudAccount(this);
-        if (defaultAccount == null) {
-            SharedPreferences.Editor editor = PreferenceManager
-                    .getDefaultSharedPreferences(this).edit();
-            editor.putString("select_oc_account", accountName);
-            editor.commit();
+        
+            if (isOAuth || isSaml) {
+                mAccountMgr.addAccountExplicitly(mAccount, "", null);  // with external authorizations, the password is never input in the app
+            } else {
+                mAccountMgr.addAccountExplicitly(mAccount, mPasswordInput.getText().toString(), null);
+            }
+    
+            /// add the new account as default in preferences, if there is none already
+            Account defaultAccount = AccountUtils.getCurrentOwnCloudAccount(this);
+            if (defaultAccount == null) {
+                SharedPreferences.Editor editor = PreferenceManager
+                        .getDefaultSharedPreferences(this).edit();
+                editor.putString("select_oc_account", accountName);
+                editor.commit();
+            }
+    
+            /// prepare result to return to the Authenticator
+            //  TODO check again what the Authenticator makes with it; probably has the same effect as addAccountExplicitly, but it's not well done
+            final Intent intent = new Intent();       
+            intent.putExtra(AccountManager.KEY_ACCOUNT_TYPE,    AccountAuthenticator.ACCOUNT_TYPE);
+            intent.putExtra(AccountManager.KEY_ACCOUNT_NAME,    mAccount.name);
+            /*if (!isOAuth)
+                intent.putExtra(AccountManager.KEY_AUTHTOKEN,   AccountAuthenticator.ACCOUNT_TYPE); */
+            intent.putExtra(AccountManager.KEY_USERDATA,        username);
+            if (isOAuth || isSaml) {
+                mAccountMgr.setAuthToken(mAccount, mAuthTokenType, mAuthToken);
+            }
+            /// add user data to the new account; TODO probably can be done in the last parameter addAccountExplicitly, or in KEY_USERDATA
+            mAccountMgr.setUserData(mAccount, AccountAuthenticator.KEY_OC_VERSION,    mDiscoveredVersion.toString());
+            mAccountMgr.setUserData(mAccount, AccountAuthenticator.KEY_OC_BASE_URL,   mHostBaseUrl);
+            if (isSaml) {
+                mAccountMgr.setUserData(mAccount, AccountAuthenticator.KEY_SUPPORTS_SAML_WEB_SSO, "TRUE"); 
+            } else if (isOAuth) {
+                mAccountMgr.setUserData(mAccount, AccountAuthenticator.KEY_SUPPORTS_OAUTH2, "TRUE");  
+            }
+    
+            setAccountAuthenticatorResult(intent.getExtras());
+            setResult(RESULT_OK, intent);
+    
+            /// immediately request for the synchronization of the new account
+            Bundle bundle = new Bundle();
+            bundle.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true);
+            ContentResolver.requestSync(mAccount, AccountAuthenticator.AUTHORITY, bundle);
+            syncAccount();
+//          Bundle bundle = new Bundle();
+//          bundle.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true);
+//          ContentResolver.requestSync(mAccount, AccountAuthenticator.AUTHORITY, bundle);
+            return true;
         }
+    }
 
-        /// prepare result to return to the Authenticator
-        //  TODO check again what the Authenticator makes with it; probably has the same effect as addAccountExplicitly, but it's not well done
-        final Intent intent = new Intent();       
-        intent.putExtra(AccountManager.KEY_ACCOUNT_TYPE,    AccountAuthenticator.ACCOUNT_TYPE);
-        intent.putExtra(AccountManager.KEY_ACCOUNT_NAME,    mAccount.name);
-        if (!isOAuth)
-            intent.putExtra(AccountManager.KEY_AUTHTOKEN,   AccountAuthenticator.ACCOUNT_TYPE); // TODO check this; not sure it's right; maybe
-        intent.putExtra(AccountManager.KEY_USERDATA,        username);
-        if (isOAuth) {
-            mAccountMgr.setAuthToken(mAccount, AccountAuthenticator.AUTH_TOKEN_TYPE_ACCESS_TOKEN, mOAuthAccessToken);
+    
+    private String getUserNameForSamlSso() {
+        if (mAuthToken != null) {
+            String [] cookies = mAuthToken.split(";");
+            for (int i=0; i<cookies.length; i++) {
+                if (cookies[i].startsWith(KEY_OC_USERNAME_EQUALS )) {
+                    String value = Uri.decode(cookies[i].substring(KEY_OC_USERNAME_EQUALS.length()));
+                    return value;
+                }
+            }
         }
-        /// add user data to the new account; TODO probably can be done in the last parameter addAccountExplicitly, or in KEY_USERDATA
-        mAccountMgr.setUserData(mAccount, AccountAuthenticator.KEY_OC_VERSION,    mDiscoveredVersion.toString());
-        mAccountMgr.setUserData(mAccount, AccountAuthenticator.KEY_OC_BASE_URL,   mHostBaseUrl);
-        if (isOAuth)
-            mAccountMgr.setUserData(mAccount, AccountAuthenticator.KEY_SUPPORTS_OAUTH2, "TRUE");  // TODO this flag should be unnecessary
-
-        setAccountAuthenticatorResult(intent.getExtras());
-        setResult(RESULT_OK, intent);
-
-        /// immediately request for the synchronization of the new account
-        Bundle bundle = new Bundle();
-        bundle.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true);
-        ContentResolver.requestSync(mAccount, AccountAuthenticator.AUTHORITY, bundle);
+        return "";
     }
 
 
@@ -1195,14 +1437,10 @@ implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
 
 
     private void showRefreshButton() {
-        /*mHostUrlInput.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_action_refresh_black, 0);
-        mRefreshButtonEnabled = true;*/
         mRefreshButton.setVisibility(View.VISIBLE);
     }
 
     private void hideRefreshButton() {
-        /*mHostUrlInput.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
-        mRefreshButtonEnabled = false;*/
         mRefreshButton.setVisibility(View.GONE);
     }
 
@@ -1243,33 +1481,43 @@ implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
      * @param view      'View password' 'button'
      */
     public void onCheckClick(View view) {
-        CheckBox oAuth2Check = (CheckBox)view;      
-        changeViewByOAuth2Check(oAuth2Check.isChecked());
-
+        CheckBox oAuth2Check = (CheckBox)view;
+        if (oAuth2Check.isChecked()) {
+            mAuthTokenType = AccountAuthenticator.AUTH_TOKEN_TYPE_ACCESS_TOKEN;
+        } else {
+            mAuthTokenType = AccountAuthenticator.AUTH_TOKEN_TYPE_PASSWORD;
+        }
+        adaptViewAccordingToAuthenticationMethod();
     }
 
+    
     /**
-     * Changes the visibility of input elements depending upon the kind of authorization
-     * chosen by the user: basic or OAuth
-     * 
-     * @param checked       'True' when OAuth is selected.
+     * Changes the visibility of input elements depending on
+     * the current authorization method.
      */
-    public void changeViewByOAuth2Check(Boolean checked) {
-
-        if (checked) {
+    private void adaptViewAccordingToAuthenticationMethod () {
+        if (AccountAuthenticator.AUTH_TOKEN_TYPE_ACCESS_TOKEN.equals(mAuthTokenType)) {
+            // OAuth 2 authorization
             mOAuthAuthEndpointText.setVisibility(View.VISIBLE);
             mOAuthTokenEndpointText.setVisibility(View.VISIBLE);
             mUsernameInput.setVisibility(View.GONE);
             mPasswordInput.setVisibility(View.GONE);
+            
+        } else if (AccountAuthenticator.AUTH_TOKEN_TYPE_SAML_WEB_SSO_SESSION_COOKIE.equals(mAuthTokenType)) {
+            // SAML-based web Single Sign On
+            mOAuthAuthEndpointText.setVisibility(View.GONE);
+            mOAuthTokenEndpointText.setVisibility(View.GONE);
+            mUsernameInput.setVisibility(View.GONE);
+            mPasswordInput.setVisibility(View.GONE);
         } else {
+            // basic HTTP authorization
             mOAuthAuthEndpointText.setVisibility(View.GONE);
             mOAuthTokenEndpointText.setVisibility(View.GONE);
             mUsernameInput.setVisibility(View.VISIBLE);
             mPasswordInput.setVisibility(View.VISIBLE);
-        }     
-
-    }    
-
+        }
+    }
+    
     /**
      * Called from SslValidatorDialog when a new server certificate was correctly saved.
      */
@@ -1290,15 +1538,20 @@ implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
     /**
      *  Called when the 'action' button in an IME is pressed ('enter' in software keyboard).
      * 
-     *  Used to trigger the authorization check when the user presses 'enter' after writing the password.
+     *  Used to trigger the authentication check when the user presses 'enter' after writing the password, 
+     *  or to throw the server test when the only field on screen is the URL input field.
      */
     @Override
     public boolean onEditorAction(TextView inputField, int actionId, KeyEvent event) {
-        if (inputField != null && inputField.equals(mPasswordInput) && 
-                actionId == EditorInfo.IME_ACTION_DONE) {
+        if (actionId == EditorInfo.IME_ACTION_DONE && inputField != null && inputField.equals(mPasswordInput)) {
             if (mOkButton.isEnabled()) {
                 mOkButton.performClick();
             }
+            
+        } else if (actionId == EditorInfo.IME_ACTION_NEXT && inputField != null && inputField.equals(mHostUrlInput)) {
+            if (AccountAuthenticator.AUTH_TOKEN_TYPE_SAML_WEB_SSO_SESSION_COOKIE.equals(mAuthTokenType)) {
+                checkOcServer();
+            }
         }
         return false;   // always return false to grant that the software keyboard is hidden anyway
     }
@@ -1336,4 +1589,76 @@ implements  OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
         public abstract boolean onDrawableTouch(final MotionEvent event);
     }
 
+
+    public void onSamlDialogSuccess(String sessionCookie){
+        mAuthToken = sessionCookie;
+        
+        if (sessionCookie != null && sessionCookie.length() > 0) {
+            mAuthToken = sessionCookie;
+            boolean success = false;
+            if (mAction == ACTION_CREATE) {
+                success = createAccount();
+        
+            } else {
+                success = updateToken();
+            }
+            if (success) {
+                finish();
+            }
+        }
+
+            
+    }
+
+
+    @Override
+    public void onSsoFinished(String sessionCookies) {
+        //Toast.makeText(this, "got cookies: " + sessionCookie, Toast.LENGTH_LONG).show();
+
+        if (sessionCookies != null && sessionCookies.length() > 0) {
+            Log_OC.d(TAG, "Successful SSO - time to save the account");
+            onSamlDialogSuccess(sessionCookies);
+            Fragment fd = getSupportFragmentManager().findFragmentByTag(TAG_SAML_DIALOG);
+            if (fd != null && fd instanceof SherlockDialogFragment) {
+                Dialog d = ((SherlockDialogFragment)fd).getDialog();
+                if (d != null && d.isShowing()) {
+                    d.dismiss();
+                }
+            }
+
+        } else { 
+            // TODO - show fail
+            Log_OC.d(TAG, "SSO failed");
+        }
+    
+    }
+    
+    /** Show auth_message 
+     * 
+     * @param message
+     */
+    private void showAuthMessage(String message) {
+       mAuthMessage.setVisibility(View.VISIBLE);
+       mAuthMessage.setText(message);
+    }
+    
+    private void hideAuthMessage() {
+        mAuthMessage.setVisibility(View.GONE);
+    }
+
+    private void syncAccount(){
+        /// immediately request for the synchronization of the new account
+        Bundle bundle = new Bundle();
+        bundle.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true);
+        ContentResolver.requestSync(mAccount, AccountAuthenticator.AUTHORITY, bundle);
+    }
+    
+    @Override
+    public boolean onTouchEvent(MotionEvent event) {
+        if (AccountAuthenticator.AUTH_TOKEN_TYPE_SAML_WEB_SSO_SESSION_COOKIE.equals(mAuthTokenType) &&
+                mHostUrlInput.hasFocus() && event.getAction() == MotionEvent.ACTION_DOWN) {
+            checkOcServer();
+        }
+        return super.onTouchEvent(event);
+    }
 }

+ 175 - 0
src/com/owncloud/android/authentication/SsoWebViewClient.java

@@ -0,0 +1,175 @@
+/* ownCloud Android client application
+ *   Copyright (C) 2012-2013 ownCloud Inc.
+ *
+ *   This program is free software: you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License version 2,
+ *   as published by the Free Software Foundation.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+package com.owncloud.android.authentication;
+
+import java.lang.ref.WeakReference;
+
+import com.owncloud.android.Log_OC;
+
+import android.graphics.Bitmap;
+import android.os.Handler;
+import android.os.Message;
+import android.view.View;
+import android.webkit.CookieManager;
+import android.webkit.WebView;
+import android.webkit.WebViewClient;
+
+
+/**
+ * Custom {@link WebViewClient} client aimed to catch the end of a single-sign-on process 
+ * running in the {@link WebView} that is attached to.
+ * 
+ * Assumes that the single-sign-on is kept thanks to a cookie set at the end of the
+ * authentication process.
+ *   
+ * @author David A. Velasco
+ */
+public class SsoWebViewClient extends WebViewClient {
+        
+    private static final String TAG = SsoWebViewClient.class.getSimpleName();
+    
+    public interface SsoWebViewClientListener {
+        public void onSsoFinished(String sessionCookie);
+    }
+    
+    private Handler mListenerHandler;
+    private WeakReference<SsoWebViewClientListener> mListenerRef;
+    private String mTargetUrl;
+    private String mLastReloadedUrlAtError;
+    
+    public SsoWebViewClient (Handler listenerHandler, SsoWebViewClientListener listener) {
+        mListenerHandler = listenerHandler;
+        mListenerRef = new WeakReference<SsoWebViewClient.SsoWebViewClientListener>(listener);
+        mTargetUrl = "fake://url.to.be.set";
+        mLastReloadedUrlAtError = null;
+    }
+    
+    public String getTargetUrl() {
+        return mTargetUrl;
+    }
+    
+    public void setTargetUrl(String targetUrl) {
+        mTargetUrl = targetUrl;
+    }
+
+    @Override
+    public void onPageStarted (WebView view, String url, Bitmap favicon) {
+        Log_OC.d(TAG, "onPageStarted : " + url);
+        super.onPageStarted(view, url, favicon);
+    }
+    
+    @Override
+    public void onFormResubmission (WebView view, Message dontResend, Message resend) {
+        Log_OC.d(TAG, "onFormResubMission ");
+
+        // necessary to grant reload of last page when device orientation is changed after sending a form
+        resend.sendToTarget();
+    }
+
+    @Override
+    public boolean shouldOverrideUrlLoading(WebView view, String url) {
+        return false;
+    }
+    
+    @Override
+    public void onReceivedError (WebView view, int errorCode, String description, String failingUrl) {
+        Log_OC.e(TAG, "onReceivedError : " + failingUrl + ", code " + errorCode + ", description: " + description);
+        if (!failingUrl.equals(mLastReloadedUrlAtError)) {
+            view.reload();
+            mLastReloadedUrlAtError = failingUrl;
+        } else {
+            mLastReloadedUrlAtError = null;
+            super.onReceivedError(view, errorCode, description, failingUrl);
+        }
+    }
+    
+    @Override
+    public void onPageFinished (WebView view, String url) {
+        Log_OC.d(TAG, "onPageFinished : " + url);
+        mLastReloadedUrlAtError = null;
+        if (url.startsWith(mTargetUrl)) {
+            view.setVisibility(View.GONE);
+            CookieManager cookieManager = CookieManager.getInstance();
+            final String cookies = cookieManager.getCookie(url);
+            //Log_OC.d(TAG, "Cookies: " + cookies);
+            if (mListenerHandler != null && mListenerRef != null) {
+                // this is good idea because onPageFinished is not running in the UI thread
+                mListenerHandler.post(new Runnable() {
+                    @Override
+                    public void run() {
+                        SsoWebViewClientListener listener = mListenerRef.get();
+                        if (listener != null) {
+                            listener.onSsoFinished(cookies);
+                        }
+                    }
+                });
+            }
+        }
+
+    }
+    
+    /*
+    @Override
+    public void doUpdateVisitedHistory (WebView view, String url, boolean isReload) {
+        Log_OC.d(TAG, "doUpdateVisitedHistory : " + url);
+    }
+    
+    @Override
+    public void onReceivedSslError (WebView view, SslErrorHandler handler, SslError error) {
+        Log_OC.d(TAG, "onReceivedSslError : " + error);
+    }
+    
+    @Override
+    public void onReceivedHttpAuthRequest (WebView view, HttpAuthHandler handler, String host, String realm) {
+        Log_OC.d(TAG, "onReceivedHttpAuthRequest : " + host);
+    }
+
+    @Override
+    public WebResourceResponse shouldInterceptRequest (WebView view, String url) {
+        Log_OC.d(TAG, "shouldInterceptRequest : " + url);
+        return null;
+    }
+    
+    @Override
+    public void onLoadResource (WebView view, String url) {
+        Log_OC.d(TAG, "onLoadResource : " + url);   
+    }
+    
+    @Override
+    public void onReceivedLoginRequest (WebView view, String realm, String account, String args) {
+        Log_OC.d(TAG, "onReceivedLoginRequest : " + realm + ", " + account + ", " + args);
+    }
+    
+    @Override
+    public void onScaleChanged (WebView view, float oldScale, float newScale) {
+        Log_OC.d(TAG, "onScaleChanged : " + oldScale + " -> " + newScale);
+        super.onScaleChanged(view, oldScale, newScale);
+    }
+
+    @Override
+    public void onUnhandledKeyEvent (WebView view, KeyEvent event) {
+        Log_OC.d(TAG, "onUnhandledKeyEvent : " + event);
+    }
+    
+    @Override
+    public boolean shouldOverrideKeyEvent (WebView view, KeyEvent event) {
+        Log_OC.d(TAG, "shouldOverrideKeyEvent : " + event);
+        return false;
+    }
+    */
+}

+ 3 - 0
src/com/owncloud/android/datamodel/DataStorageManager.java

@@ -46,4 +46,7 @@ public interface DataStorageManager {
     public void moveDirectory(OCFile dir, String newPath);
 
     public Vector<OCFile> getDirectoryImages(OCFile mParentFolder);
+    
+    public void calculateFolderSize(long id);
+    
 }

+ 194 - 90
src/com/owncloud/android/datamodel/FileDataStorageManager.java

@@ -25,6 +25,7 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Vector;
 
+import com.owncloud.android.DisplayUtils;
 import com.owncloud.android.Log_OC;
 import com.owncloud.android.db.ProviderMeta;
 import com.owncloud.android.db.ProviderMeta.ProviderTableMeta;
@@ -46,9 +47,9 @@ public class FileDataStorageManager implements DataStorageManager {
     private ContentResolver mContentResolver;
     private ContentProviderClient mContentProvider;
     private Account mAccount;
-    
+
     private static String TAG = "FileDataStorageManager";
-    
+
     public FileDataStorageManager(Account account, ContentResolver cr) {
         mContentProvider = null;
         mContentResolver = cr;
@@ -75,7 +76,7 @@ public class FileDataStorageManager implements DataStorageManager {
         return file;
     }
 
-    
+
     private OCFile createRootDir() {
         OCFile file = new OCFile(OCFile.PATH_SEPARATOR);
         file.setMimetype("DIR");
@@ -94,7 +95,7 @@ public class FileDataStorageManager implements DataStorageManager {
         c.close();
         return file;
     }
-    
+
     public OCFile getFileByLocalPath(String path) {
         Cursor c = getCursorForValue(ProviderTableMeta.FILE_STORAGE_PATH, path);
         OCFile file = null;
@@ -136,13 +137,18 @@ public class FileDataStorageManager implements DataStorageManager {
         cv.put(ProviderTableMeta.FILE_KEEP_IN_SYNC, file.keepInSync() ? 1 : 0);
 
         boolean sameRemotePath = fileExists(file.getRemotePath());
+        boolean changesSizeOfAncestors = false;
         if (sameRemotePath ||
-            fileExists(file.getFileId())        ) {           // for renamed files; no more delete and create
-            
+                fileExists(file.getFileId())        ) {           // for renamed files; no more delete and create
+
+            OCFile oldFile = null;
             if (sameRemotePath) {
-                OCFile oldFile = getFileByPath(file.getRemotePath());
+                oldFile = getFileByPath(file.getRemotePath());
                 file.setFileId(oldFile.getFileId());
+            } else {
+                oldFile = getFileById(file.getFileId());
             }
+            changesSizeOfAncestors = (oldFile.getFileLength() != file.getFileLength());
 
             overriden = true;
             if (getContentResolver() != null) {
@@ -161,6 +167,7 @@ public class FileDataStorageManager implements DataStorageManager {
                 }
             }
         } else {
+            changesSizeOfAncestors = true;
             Uri result_uri = null;
             if (getContentResolver() != null) {
                 result_uri = getContentResolver().insert(
@@ -179,20 +186,28 @@ public class FileDataStorageManager implements DataStorageManager {
                 long new_id = Long.parseLong(result_uri.getPathSegments()
                         .get(1));
                 file.setFileId(new_id);
-            }
+            }            
         }
 
-        if (file.isDirectory() && file.needsUpdatingWhileSaving())
-            for (OCFile f : getDirectoryContent(file))
-                saveFile(f);
-
+        if (file.isDirectory()) {
+            calculateFolderSize(file.getFileId());
+            if (file.needsUpdatingWhileSaving()) {
+                for (OCFile f : getDirectoryContent(file))
+                    saveFile(f);
+            }
+        }
+        
+        if (changesSizeOfAncestors || file.isDirectory()) {
+            updateSizesToTheRoot(file.getParentId());
+        }
+        
         return overriden;
     }
 
 
     @Override
     public void saveFiles(List<OCFile> files) {
-        
+
         Iterator<OCFile> filesIt = files.iterator();
         ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>(files.size());
         OCFile file = null;
@@ -220,47 +235,58 @@ public class FileDataStorageManager implements DataStorageManager {
             if (fileExists(file.getRemotePath())) {
                 OCFile oldFile = getFileByPath(file.getRemotePath());
                 file.setFileId(oldFile.getFileId());
+               
+                if (file.isDirectory()) {
+                    cv.put(ProviderTableMeta.FILE_CONTENT_LENGTH, oldFile.getFileLength());
+                    file.setFileLength(oldFile.getFileLength());
+                }
+                
                 operations.add(ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI).
                         withValues(cv).
                         withSelection(  ProviderTableMeta._ID + "=?", 
-                                        new String[] { String.valueOf(file.getFileId()) })
-                        .build());
-                
+                                new String[] { String.valueOf(file.getFileId()) })
+                                .build());
+
             } else if (fileExists(file.getFileId())) {
-                    OCFile oldFile = getFileById(file.getFileId());
-                    if (file.getStoragePath() == null && oldFile.getStoragePath() != null)
-                        file.setStoragePath(oldFile.getStoragePath());
-                    if (!file.isDirectory());
-                        cv.put(ProviderTableMeta.FILE_STORAGE_PATH, file.getStoragePath());
+                OCFile oldFile = getFileById(file.getFileId());
+                if (file.getStoragePath() == null && oldFile.getStoragePath() != null)
+                    file.setStoragePath(oldFile.getStoragePath());
+                
+                if (!file.isDirectory())
+                    cv.put(ProviderTableMeta.FILE_STORAGE_PATH, file.getStoragePath());
+                else {
+                    cv.put(ProviderTableMeta.FILE_CONTENT_LENGTH, oldFile.getFileLength());
+                    file.setFileLength(oldFile.getFileLength());
+                }
+                
+                operations.add(ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI).
+                        withValues(cv).
+                        withSelection(  ProviderTableMeta._ID + "=?", 
+                                new String[] { String.valueOf(file.getFileId()) })
+                                .build());
 
-                    operations.add(ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI).
-                            withValues(cv).
-                            withSelection(  ProviderTableMeta._ID + "=?", 
-                                            new String[] { String.valueOf(file.getFileId()) })
-                            .build());
-                    
             } else {
                 operations.add(ContentProviderOperation.newInsert(ProviderTableMeta.CONTENT_URI).withValues(cv).build());
             }
         }
-        
+
         // apply operations in batch
         ContentProviderResult[] results = null;
         try {
             if (getContentResolver() != null) {
                 results = getContentResolver().applyBatch(ProviderMeta.AUTHORITY_FILES, operations);
-            
+
             } else {
                 results = getContentProvider().applyBatch(operations);
             }
-            
+
         } catch (OperationApplicationException e) {
             Log_OC.e(TAG, "Fail to update/insert list of files to database " + e.getMessage());
-            
+
         } catch (RemoteException e) {
             Log_OC.e(TAG, "Fail to update/insert list of files to database " + e.getMessage());
         }
-        
+
         // update new id in file objects for insertions
         if (results != null) {
             long newId;
@@ -279,7 +305,7 @@ public class FileDataStorageManager implements DataStorageManager {
         }
 
     }
-    
+
     public void setAccount(Account account) {
         mAccount = account;
     }
@@ -303,46 +329,56 @@ public class FileDataStorageManager implements DataStorageManager {
     public ContentProviderClient getContentProvider() {
         return mContentProvider;
     }
-
+    
     @Override
     public Vector<OCFile> getDirectoryContent(OCFile f) {
-        Vector<OCFile> ret = new Vector<OCFile>();
         if (f != null && f.isDirectory() && f.getFileId() != -1) {
+            return getDirectoryContent(f.getFileId());
 
-            Uri req_uri = Uri.withAppendedPath(
-                    ProviderTableMeta.CONTENT_URI_DIR,
-                    String.valueOf(f.getFileId()));
-            Cursor c = null;
+        } else {
+            return new Vector<OCFile>();
+        }
+    }
 
-            if (getContentProvider() != null) {
-                try {
-                    c = getContentProvider().query(req_uri, null,
-                            ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?",
-                            new String[] { mAccount.name }, null);
-                } catch (RemoteException e) {
-                    Log_OC.e(TAG, e.getMessage());
-                    return ret;
-                }
-            } else {
-                c = getContentResolver().query(req_uri, null,
-                        ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?",
-                        new String[] { mAccount.name }, null);
-            }
+    private Vector<OCFile> getDirectoryContent(long parentId) {
 
-            if (c.moveToFirst()) {
-                do {
-                    OCFile child = createFileInstance(c);
-                    ret.add(child);
-                } while (c.moveToNext());
+        Vector<OCFile> ret = new Vector<OCFile>();
+
+        Uri req_uri = Uri.withAppendedPath(
+                ProviderTableMeta.CONTENT_URI_DIR,
+                String.valueOf(parentId));
+        Cursor c = null;
+
+        if (getContentProvider() != null) {
+            try {
+                c = getContentProvider().query(req_uri, null, 
+                        ProviderTableMeta.FILE_PARENT + "=?" ,
+                        new String[] { String.valueOf(parentId)}, null);
+            } catch (RemoteException e) {
+                Log_OC.e(TAG, e.getMessage());
+                return ret;
             }
+        } else {
+            c = getContentResolver().query(req_uri, null, 
+                    ProviderTableMeta.FILE_PARENT + "=?" ,
+                    new String[] { String.valueOf(parentId)}, null);
+        }
 
-            c.close();
-            
-            Collections.sort(ret);
-            
+        if (c.moveToFirst()) {
+            do {
+                OCFile child = createFileInstance(c);
+                ret.add(child);
+            } while (c.moveToNext());
         }
+
+        c.close();
+
+        Collections.sort(ret);
+
         return ret;
     }
+    
+    
 
     private boolean fileExists(String cmp_key, String value) {
         Cursor c;
@@ -353,7 +389,7 @@ public class FileDataStorageManager implements DataStorageManager {
                             cmp_key + "=? AND "
                                     + ProviderTableMeta.FILE_ACCOUNT_OWNER
                                     + "=?",
-                            new String[] { value, mAccount.name }, null);
+                                    new String[] { value, mAccount.name }, null);
         } else {
             try {
                 c = getContentProvider().query(
@@ -361,7 +397,7 @@ public class FileDataStorageManager implements DataStorageManager {
                         null,
                         cmp_key + "=? AND "
                                 + ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?",
-                        new String[] { value, mAccount.name }, null);
+                                new String[] { value, mAccount.name }, null);
             } catch (RemoteException e) {
                 Log_OC.e(TAG,
                         "Couldn't determine file existance, assuming non existance: "
@@ -383,14 +419,14 @@ public class FileDataStorageManager implements DataStorageManager {
                             key + "=? AND "
                                     + ProviderTableMeta.FILE_ACCOUNT_OWNER
                                     + "=?",
-                            new String[] { value, mAccount.name }, null);
+                                    new String[] { value, mAccount.name }, null);
         } else {
             try {
                 c = getContentProvider().query(
                         ProviderTableMeta.CONTENT_URI,
                         null,
                         key + "=? AND " + ProviderTableMeta.FILE_ACCOUNT_OWNER
-                                + "=?", new String[] { value, mAccount.name },
+                        + "=?", new String[] { value, mAccount.name },
                         null);
             } catch (RemoteException e) {
                 Log_OC.e(TAG, "Could not get file details: " + e.getMessage());
@@ -435,26 +471,26 @@ public class FileDataStorageManager implements DataStorageManager {
             file.setLastSyncDateForData(c.getLong(c.
                     getColumnIndex(ProviderTableMeta.FILE_LAST_SYNC_DATE_FOR_DATA)));
             file.setKeepInSync(c.getInt(
-                                c.getColumnIndex(ProviderTableMeta.FILE_KEEP_IN_SYNC)) == 1 ? true : false);
+                    c.getColumnIndex(ProviderTableMeta.FILE_KEEP_IN_SYNC)) == 1 ? true : false);
         }
         return file;
     }
-    
+
     @Override
     public void removeFile(OCFile file, boolean removeLocalCopy) {
         Uri file_uri = Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_FILE, ""+file.getFileId());
         if (getContentProvider() != null) {
             try {
                 getContentProvider().delete(file_uri,
-                                            ProviderTableMeta.FILE_ACCOUNT_OWNER+"=?",
-                                            new String[]{mAccount.name});
+                        ProviderTableMeta.FILE_ACCOUNT_OWNER+"=?",
+                        new String[]{mAccount.name});
             } catch (RemoteException e) {
                 e.printStackTrace();
             }
         } else {
             getContentResolver().delete(file_uri,
-                                        ProviderTableMeta.FILE_ACCOUNT_OWNER+"=?",
-                                        new String[]{mAccount.name});
+                    ProviderTableMeta.FILE_ACCOUNT_OWNER+"=?",
+                    new String[]{mAccount.name});
         }
         if (file.isDown() && removeLocalCopy) {
             new File(file.getStoragePath()).delete();
@@ -465,6 +501,10 @@ public class FileDataStorageManager implements DataStorageManager {
                 f.delete();
             }
         }
+        
+        if (file.getFileLength() > 0) {
+            updateSizesToTheRoot(file.getParentId());
+        }
     }
 
     @Override
@@ -492,10 +532,14 @@ public class FileDataStorageManager implements DataStorageManager {
             if (removeDBData) {
                 removeFile(dir, true);
             }
+            
+            if (dir.getFileLength() > 0) {
+                updateSizesToTheRoot(dir.getParentId());
+            }
         }
     }
-    
-    
+
+
     /**
      * Updates database for a folder that was moved to a different location.
      * 
@@ -505,24 +549,24 @@ public class FileDataStorageManager implements DataStorageManager {
     @Override
     public void moveDirectory(OCFile dir, String newPath) {
         // TODO check newPath
-        
+
         if (dir != null && dir.isDirectory() && dir.fileExists() && !dir.getFileName().equals(OCFile.PATH_SEPARATOR)) {
             /// 1. get all the descendants of 'dir' in a single QUERY (including 'dir')
             Cursor c = null;
             if (getContentProvider() != null) {
                 try {
                     c = getContentProvider().query(ProviderTableMeta.CONTENT_URI, 
-                                                    null,
-                                                    ProviderTableMeta.FILE_ACCOUNT_OWNER + "=? AND " + ProviderTableMeta.FILE_PATH + " LIKE ?",
-                                                    new String[] { mAccount.name, dir.getRemotePath() + "%" }, null);
+                            null,
+                            ProviderTableMeta.FILE_ACCOUNT_OWNER + "=? AND " + ProviderTableMeta.FILE_PATH + " LIKE ? ",
+                            new String[] { mAccount.name, dir.getRemotePath() + "%"  }, ProviderTableMeta.FILE_PATH + " ASC ");
                 } catch (RemoteException e) {
                     Log_OC.e(TAG, e.getMessage());
                 }
             } else {
                 c = getContentResolver().query(ProviderTableMeta.CONTENT_URI, 
-                                                null,
-                                                ProviderTableMeta.FILE_ACCOUNT_OWNER + "=? AND " + ProviderTableMeta.FILE_PATH + " LIKE ?",
-                                                new String[] { mAccount.name, dir.getRemotePath() + "%" }, null);
+                        null,
+                        ProviderTableMeta.FILE_ACCOUNT_OWNER + "=? AND " + ProviderTableMeta.FILE_PATH + " LIKE ? ",
+                        new String[] { mAccount.name, dir.getRemotePath() + "%"  }, ProviderTableMeta.FILE_PATH + " ASC ");
             }
 
             /// 2. prepare a batch of update operations to change all the descendants
@@ -539,30 +583,30 @@ public class FileDataStorageManager implements DataStorageManager {
                         cv.put(ProviderTableMeta.FILE_STORAGE_PATH, defaultSavePath + newPath + child.getStoragePath().substring(lengthOfOldStoragePath));
                     }
                     operations.add(ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI).
-                                                                        withValues(cv).
-                                                                        withSelection(  ProviderTableMeta._ID + "=?", 
-                                                                                new String[] { String.valueOf(child.getFileId()) })
-                                                                                .build());
+                            withValues(cv).
+                            withSelection(  ProviderTableMeta._ID + "=?", 
+                                    new String[] { String.valueOf(child.getFileId()) })
+                                    .build());
                 } while (c.moveToNext());
             }
             c.close();
-            
+
             /// 3. apply updates in batch
             try {
                 if (getContentResolver() != null) {
                     getContentResolver().applyBatch(ProviderMeta.AUTHORITY_FILES, operations);
-                
+
                 } else {
                     getContentProvider().applyBatch(operations);
                 }
-                
+
             } catch (OperationApplicationException e) {
                 Log_OC.e(TAG, "Fail to update descendants of " + dir.getFileId() + " in database", e);
-                
+
             } catch (RemoteException e) {
                 Log_OC.e(TAG, "Fail to update desendants of " + dir.getFileId() + " in database", e);
             }
-            
+
         }
     }
 
@@ -583,4 +627,64 @@ public class FileDataStorageManager implements DataStorageManager {
         return ret;
     }
 
+    /**
+     * Calculate and save the folderSize on DB
+     * @param id
+     */
+    @Override
+    public void calculateFolderSize(long id) {
+        long folderSize = 0;
+        
+        Vector<OCFile> files = getDirectoryContent(id);
+        
+        for (OCFile f: files)
+        {
+            folderSize = folderSize + f.getFileLength();
+        }
+        
+        updateSize(id, folderSize);
+    }
+
+    /**
+     * Update the size value of an OCFile in DB
+     */
+    private int updateSize(long id, long size) {
+        ContentValues cv = new ContentValues();
+        cv.put(ProviderTableMeta.FILE_CONTENT_LENGTH, size);
+        int result = -1;
+        if (getContentResolver() != null) {
+             result = getContentResolver().update(ProviderTableMeta.CONTENT_URI, cv, ProviderTableMeta._ID + "=?", 
+                     new String[] { String.valueOf(id) });
+        } else {
+            try {
+                result = getContentProvider().update(ProviderTableMeta.CONTENT_URI, cv, ProviderTableMeta._ID + "=?", 
+                        new String[] { String.valueOf(id) });
+            } catch (RemoteException e) {
+                Log_OC.e(TAG,"Fail to update size column into database " + e.getMessage());
+            }
+        }
+        return result;
+    }
+
+    /** 
+     * Update the size of a subtree of folder from a file to the root
+     * @param parentId: parent of the file
+     */
+    private void updateSizesToTheRoot(long parentId) {
+        
+        OCFile file; 
+
+        while (parentId != 0) {
+            
+            // Update the size of the parent
+            calculateFolderSize(parentId);
+            
+            // search the next parent
+            file = getFileById(parentId);            
+            parentId = file.getParentId();
+            
+        }              
+        
+    }
+    
 }

+ 17 - 8
src/com/owncloud/android/files/InstantUploadBroadcastReceiver.java

@@ -29,7 +29,7 @@ import android.accounts.Account;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
-import android.content.IntentFilter;
+//import android.content.IntentFilter;
 import android.database.Cursor;
 import android.net.ConnectivityManager;
 import android.net.NetworkInfo.State;
@@ -42,17 +42,24 @@ import com.owncloud.android.utils.FileStorageUtils;
 
 public class InstantUploadBroadcastReceiver extends BroadcastReceiver {
 
-    private static String TAG = "PhotoTakenBroadcastReceiver";
+    private static String TAG = "InstantUploadBroadcastReceiver";
     private static final String[] CONTENT_PROJECTION = { Media.DATA, Media.DISPLAY_NAME, Media.MIME_TYPE, Media.SIZE };
-    private static String NEW_PHOTO_ACTION = "com.android.camera.NEW_PICTURE";
+    //Unofficial action, works for most devices but not HTC. See: https://github.com/owncloud/android/issues/6
+    private static String NEW_PHOTO_ACTION_UNOFFICIAL = "com.android.camera.NEW_PICTURE";
+    //Officially supported action since SDK 14: http://developer.android.com/reference/android/hardware/Camera.html#ACTION_NEW_PICTURE
+    private static String NEW_PHOTO_ACTION = "android.hardware.action.NEW_PICTURE";
 
     @Override
     public void onReceive(Context context, Intent intent) {
         Log_OC.d(TAG, "Received: " + intent.getAction());
         if (intent.getAction().equals(android.net.ConnectivityManager.CONNECTIVITY_ACTION)) {
             handleConnectivityAction(context, intent);
+        }else if (intent.getAction().equals(NEW_PHOTO_ACTION_UNOFFICIAL)) {
+            handleNewPhotoAction(context, intent);
+            Log_OC.d(TAG, "UNOFFICIAL processed: com.android.camera.NEW_PICTURE");
         } else if (intent.getAction().equals(NEW_PHOTO_ACTION)) {
             handleNewPhotoAction(context, intent);
+            Log_OC.d(TAG, "OFFICIAL processed: android.hardware.action.NEW_PICTURE");
         } else if (intent.getAction().equals(FileUploader.UPLOAD_FINISH_MESSAGE)) {
             handleUploadFinished(context, intent);
         } else {
@@ -62,6 +69,7 @@ public class InstantUploadBroadcastReceiver extends BroadcastReceiver {
 
     private void handleUploadFinished(Context context, Intent intent) {
         // remove successfull uploading, ignore rest for reupload on reconnect
+        /*
         if (intent.getBooleanExtra(FileUploader.EXTRA_UPLOAD_RESULT, false)) {
             DbHandler db = new DbHandler(context);
             String localPath = intent.getStringExtra(FileUploader.EXTRA_OLD_FILE_PATH);
@@ -70,11 +78,12 @@ public class InstantUploadBroadcastReceiver extends BroadcastReceiver {
             }
             db.close();
         }
+        */
     }
 
     private void handleNewPhotoAction(Context context, Intent intent) {
         if (!instantUploadEnabled(context)) {
-            Log_OC.d(TAG, "Instant upload disabled, abording uploading");
+            Log_OC.d(TAG, "Instant upload disabled, aborting uploading");
             return;
         }
 
@@ -115,8 +124,8 @@ public class InstantUploadBroadcastReceiver extends BroadcastReceiver {
         // we can unregister from entire listenings but thats suck a bit.
         // On the other hand this might be only for dynamicly registered
         // broadcast receivers, needs investigation.
-        IntentFilter filter = new IntentFilter(FileUploader.UPLOAD_FINISH_MESSAGE);
-        context.getApplicationContext().registerReceiver(this, filter);
+        /*IntentFilter filter = new IntentFilter(FileUploader.UPLOAD_FINISH_MESSAGE);
+        context.getApplicationContext().registerReceiver(this, filter);*/
 
         Intent i = new Intent(context, FileUploader.class);
         i.putExtra(FileUploader.KEY_ACCOUNT, account);
@@ -141,8 +150,8 @@ public class InstantUploadBroadcastReceiver extends BroadcastReceiver {
             DbHandler db = new DbHandler(context);
             Cursor c = db.getAwaitingFiles();
             if (c.moveToFirst()) {
-                IntentFilter filter = new IntentFilter(FileUploader.UPLOAD_FINISH_MESSAGE);
-                context.getApplicationContext().registerReceiver(this, filter);
+                //IntentFilter filter = new IntentFilter(FileUploader.UPLOAD_FINISH_MESSAGE);
+                //context.getApplicationContext().registerReceiver(this, filter);
                 do {
                     String account_name = c.getString(c.getColumnIndex("account"));
                     String file_path = c.getString(c.getColumnIndex("path"));

+ 5 - 1
src/com/owncloud/android/files/services/FileDownloader.java

@@ -28,6 +28,7 @@ import java.util.Vector;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 
+import com.owncloud.android.authentication.AccountAuthenticator;
 import com.owncloud.android.authentication.AuthenticatorActivity;
 import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
@@ -463,7 +464,10 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis
             int contentId = (downloadResult.isSuccess()) ? R.string.downloader_download_succeeded_content : R.string.downloader_download_failed_content;
             Notification finalNotification = new Notification(R.drawable.icon, getString(tickerId), System.currentTimeMillis());
             finalNotification.flags |= Notification.FLAG_AUTO_CANCEL;
-            boolean needsToUpdateCredentials = (downloadResult.getCode() == ResultCode.UNAUTHORIZED);
+            boolean needsToUpdateCredentials = (downloadResult.getCode() == ResultCode.UNAUTHORIZED ||
+                                                // (downloadResult.isTemporalRedirection() && downloadResult.isIdPRedirection()
+                                                  (downloadResult.isIdPRedirection()
+                                                        && AccountAuthenticator.AUTH_TOKEN_TYPE_SAML_WEB_SSO_SESSION_COOKIE.equals(mDownloadClient.getAuthTokenType())));
             if (needsToUpdateCredentials) {
                 // let the user update credentials with one click
                 Intent updateAccountCredentials = new Intent(this, AuthenticatorActivity.class);

+ 130 - 103
src/com/owncloud/android/files/services/FileUploader.java

@@ -38,6 +38,7 @@ import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.operations.ChunkedUploadFileOperation;
 import com.owncloud.android.operations.CreateFolderOperation;
+import com.owncloud.android.operations.ExistenceCheckOperation;
 import com.owncloud.android.operations.RemoteOperation;
 import com.owncloud.android.operations.RemoteOperationResult;
 import com.owncloud.android.operations.UploadFileOperation;
@@ -77,7 +78,6 @@ import com.owncloud.android.ui.activity.FileDisplayActivity;
 import com.owncloud.android.ui.activity.InstantUploadActivity;
 import com.owncloud.android.ui.preview.PreviewImageActivity;
 import com.owncloud.android.ui.preview.PreviewImageFragment;
-import com.owncloud.android.utils.FileStorageUtils;
 
 import eu.alefzero.webdav.WebdavClient;
 
@@ -223,16 +223,7 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
         boolean forceOverwrite = intent.getBooleanExtra(KEY_FORCE_OVERWRITE, false);
         boolean isInstant = intent.getBooleanExtra(KEY_INSTANT_UPLOAD, false);
         int localAction = intent.getIntExtra(KEY_LOCAL_BEHAVIOUR, LOCAL_BEHAVIOUR_COPY);
-        boolean fixed = false;
-        if (isInstant) {
-            fixed = checkAndFixInstantUploadDirectory(storageManager); // MUST
-                                                                       // be
-                                                                       // done
-                                                                       // BEFORE
-                                                                       // calling
-                                                                       // obtainNewOCFileToUpload
-        }
-
+        
         if (intent.hasExtra(KEY_FILE) && files == null) {
             Log_OC.e(TAG, "Incorrect array for OCFiles provided in upload intent");
             return Service.START_NOT_STICKY;
@@ -277,10 +268,11 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
                 } else {
                     newUpload = new UploadFileOperation(account, files[i], isInstant, forceOverwrite, localAction);
                 }
-                if (fixed && i == 0) {
+                if (isInstant) {
                     newUpload.setRemoteFolderToBeCreated();
                 }
-                mPendingUploads.putIfAbsent(uploadKey, newUpload);
+                mPendingUploads.putIfAbsent(uploadKey, newUpload); // Grants that the file only upload once time
+
                 newUpload.addDatatransferProgressListener(this);
                 newUpload.addDatatransferProgressListener((FileUploaderBinder)mBinder);
                 requestedUploads.add(uploadKey);
@@ -497,7 +489,7 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
 
             notifyUploadStart(mCurrentUpload);
 
-            RemoteOperationResult uploadResult = null;
+            RemoteOperationResult uploadResult = null, grantResult = null;
             
             try {
                 /// prepare client object to send requests to the ownCloud server
@@ -506,20 +498,22 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
                     mStorageManager = new FileDataStorageManager(mLastAccount, getContentResolver());
                     mUploadClient = OwnCloudClientUtils.createOwnCloudClient(mLastAccount, getApplicationContext());
                 }
-            
-                /// create remote folder for instant uploads
-                if (mCurrentUpload.isRemoteFolderToBeCreated()) {
-                    RemoteOperation operation = new CreateFolderOperation(  FileStorageUtils.getInstantUploadFilePath(this, ""), 
-                                                                            mStorageManager.getFileByPath(OCFile.PATH_SEPARATOR).getFileId(), // TODO generalize this : INSTANT_UPLOAD_DIR could not be a child of root
-                                                                            mStorageManager);
-                    operation.execute(mUploadClient);      // ignoring result; fail could just mean that it already exists, but local database is not synchronized; the upload will be tried anyway
-                }
-
+                
+                /// check the existence of the parent folder for the file to upload
+                String remoteParentPath = new File(mCurrentUpload.getRemotePath()).getParent();
+                remoteParentPath = remoteParentPath.endsWith(OCFile.PATH_SEPARATOR) ? remoteParentPath : remoteParentPath + OCFile.PATH_SEPARATOR;
+                grantResult = grantFolderExistence(remoteParentPath);
             
                 /// perform the upload
-                uploadResult = mCurrentUpload.execute(mUploadClient);
-                if (uploadResult.isSuccess()) {
-                    saveUploadedFile();
+                if (grantResult.isSuccess()) {
+                    OCFile parent = mStorageManager.getFileByPath(remoteParentPath);
+                    mCurrentUpload.getFile().setParentId(parent.getFileId());
+                    uploadResult = mCurrentUpload.execute(mUploadClient);
+                    if (uploadResult.isSuccess()) {
+                        saveUploadedFile();
+                    }
+                } else {
+                    uploadResult = grantResult;
                 }
                 
             } catch (AccountsException e) {
@@ -546,6 +540,58 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
 
     }
 
+    /**
+     * Checks the existence of the folder where the current file will be uploaded both in the remote server 
+     * and in the local database.
+     * 
+     * If the upload is set to enforce the creation of the folder, the method tries to create it both remote
+     * and locally.
+     *  
+     *  @param  pathToGrant     Full remote path whose existence will be granted.
+     *  @return  An {@link OCFile} instance corresponding to the folder where the file will be uploaded.
+     */
+    private RemoteOperationResult grantFolderExistence(String pathToGrant) {
+        RemoteOperation operation = new ExistenceCheckOperation(pathToGrant, this, false);
+        RemoteOperationResult result = operation.execute(mUploadClient);
+        if (!result.isSuccess() && result.getCode() == ResultCode.FILE_NOT_FOUND && mCurrentUpload.isRemoteFolderToBeCreated()) {
+            operation = new CreateFolderOperation(  pathToGrant,
+                                                    true,
+                                                    mStorageManager    );
+            result = operation.execute(mUploadClient);
+        }
+        if (result.isSuccess()) {
+            OCFile parentDir = mStorageManager.getFileByPath(pathToGrant);
+            if (parentDir == null) {
+                parentDir = createLocalFolder(pathToGrant);
+            }
+            if (parentDir != null) {
+                result = new RemoteOperationResult(ResultCode.OK);
+            } else {
+                result = new RemoteOperationResult(ResultCode.UNKNOWN_ERROR);
+            }
+        }
+        return result;
+    }
+
+    
+    private OCFile createLocalFolder(String remotePath) {
+        String parentPath = new File(remotePath).getParent();
+        parentPath = parentPath.endsWith(OCFile.PATH_SEPARATOR) ? parentPath : parentPath + OCFile.PATH_SEPARATOR;
+        OCFile parent = mStorageManager.getFileByPath(parentPath);
+        if (parent == null) {
+            parent = createLocalFolder(parentPath);
+        }
+        if (parent != null) {
+            OCFile createdFolder = new OCFile(remotePath);
+            createdFolder.setMimetype("DIR");
+            createdFolder.setParentId(parent.getFileId());
+            mStorageManager.saveFile(createdFolder);
+            return createdFolder;
+        }
+        return null;
+    }
+    
+
     /**
      * Saves a OC File after a successful upload.
      * 
@@ -579,7 +625,7 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
                 mUploadClient.exhaustResponse(propfind.getResponseBodyAsStream());
             }
 
-            result = new RemoteOperationResult(isMultiStatus, status);
+            result = new RemoteOperationResult(isMultiStatus, status, propfind.getResponseHeaders());
             Log_OC.i(TAG, "Update: synchronizing properties for uploaded " + mCurrentUpload.getRemotePath() + ": "
                     + result.getLogMessage());
 
@@ -618,28 +664,6 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
         // file.setEtag(mCurrentUpload.getEtag());    // TODO Etag, where available
     }
 
-    private boolean checkAndFixInstantUploadDirectory(FileDataStorageManager storageManager) {
-        String instantUploadDirPath = FileStorageUtils.getInstantUploadFilePath(this, "");
-        OCFile instantUploadDir = storageManager.getFileByPath(instantUploadDirPath);
-        if (instantUploadDir == null) {
-            // first instant upload in the account. never account not
-            // synchronized after the remote InstantUpload folder was created
-            OCFile newDir = new OCFile(instantUploadDirPath);
-            newDir.setMimetype("DIR");
-            OCFile path = storageManager.getFileByPath(OCFile.PATH_SEPARATOR);
-
-            if (path != null) {
-                newDir.setParentId(path.getFileId());
-                storageManager.saveFile(newDir);
-                return true;
-            } else {    // this should not happen anymore
-                return false;
-            }
-
-        }
-        return false;
-    }
-
     private OCFile obtainNewOCFileToUpload(String remotePath, String localPath, String mimeType,
             FileDataStorageManager storageManager) {
         OCFile newFile = new OCFile(remotePath);
@@ -669,12 +693,6 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
         }
         newFile.setMimetype(mimeType);
 
-        // parent dir
-        String parentPath = new File(remotePath).getParent();
-        parentPath = parentPath.endsWith(OCFile.PATH_SEPARATOR) ? parentPath : parentPath + OCFile.PATH_SEPARATOR;
-        OCFile parentDir = storageManager.getFileByPath(parentPath);
-        long parentDirId = parentDir.getFileId();
-        newFile.setParentId(parentDirId);
         return newFile;
     }
 
@@ -781,7 +799,7 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
             mNotificationManager.notify(R.string.uploader_upload_in_progress_ticker, mNotification); // NOT
                                                                                                      // AN
             DbHandler db = new DbHandler(this.getBaseContext());
-            db.removeIUPendingFile(mCurrentUpload.getFile().getStoragePath());
+            db.removeIUPendingFile(mCurrentUpload.getOriginalStoragePath());
             db.close();
 
         } else {
@@ -791,7 +809,13 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
             Notification finalNotification = new Notification(R.drawable.icon,
                     getString(R.string.uploader_upload_failed_ticker), System.currentTimeMillis());
             finalNotification.flags |= Notification.FLAG_AUTO_CANCEL;
-            if (uploadResult.getCode() == ResultCode.UNAUTHORIZED) {
+            String content = null;
+            
+            boolean needsToUpdateCredentials = (uploadResult.getCode() == ResultCode.UNAUTHORIZED ||
+                    //(uploadResult.isTemporalRedirection() && uploadResult.isIdPRedirection() && 
+                    (uploadResult.isIdPRedirection() &&
+                            AccountAuthenticator.AUTH_TOKEN_TYPE_SAML_WEB_SSO_SESSION_COOKIE.equals(mUploadClient.getAuthTokenType())));
+            if (needsToUpdateCredentials) {
                 // let the user update credentials with one click
                 Intent updateAccountCredentials = new Intent(this, AuthenticatorActivity.class);
                 updateAccountCredentials.putExtra(AuthenticatorActivity.EXTRA_ACCOUNT, upload.getAccount());
@@ -801,62 +825,65 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
                 updateAccountCredentials.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
                 updateAccountCredentials.addFlags(Intent.FLAG_FROM_BACKGROUND);
                 finalNotification.contentIntent = PendingIntent.getActivity(this, (int)System.currentTimeMillis(), updateAccountCredentials, PendingIntent.FLAG_ONE_SHOT);
+                content =  String.format(getString(R.string.uploader_upload_failed_content_single), upload.getFileName());
+                finalNotification.setLatestEventInfo(getApplicationContext(),
+                        getString(R.string.uploader_upload_failed_ticker), content, finalNotification.contentIntent);
                 mUploadClient = null;   // grant that future retries on the same account will get the fresh credentials
             } else {
                 // TODO put something smart in the contentIntent below
-                finalNotification.contentIntent = PendingIntent.getActivity(getApplicationContext(), (int)System.currentTimeMillis(), new Intent(), 0);
-            }
+            //    finalNotification.contentIntent = PendingIntent.getActivity(getApplicationContext(), (int)System.currentTimeMillis(), new Intent(), 0);
+            //}
             
-            String content = null;
-            if (uploadResult.getCode() == ResultCode.LOCAL_STORAGE_FULL
-                    || uploadResult.getCode() == ResultCode.LOCAL_STORAGE_NOT_COPIED) {
-                // TODO we need a class to provide error messages for the users
-                // from a RemoteOperationResult and a RemoteOperation
-                content = String.format(getString(R.string.error__upload__local_file_not_copied), upload.getFileName(),
-                        getString(R.string.app_name));
-            } else if (uploadResult.getCode() == ResultCode.QUOTA_EXCEEDED) {
-                content = getString(R.string.failed_upload_quota_exceeded_text);
-            } else {
-                content = String
-                        .format(getString(R.string.uploader_upload_failed_content_single), upload.getFileName());
-            }
+                if (uploadResult.getCode() == ResultCode.LOCAL_STORAGE_FULL
+                        || uploadResult.getCode() == ResultCode.LOCAL_STORAGE_NOT_COPIED) {
+                    // TODO we need a class to provide error messages for the users
+                    // from a RemoteOperationResult and a RemoteOperation
+                    content = String.format(getString(R.string.error__upload__local_file_not_copied), upload.getFileName(),
+                            getString(R.string.app_name));
+                } else if (uploadResult.getCode() == ResultCode.QUOTA_EXCEEDED) {
+                    content = getString(R.string.failed_upload_quota_exceeded_text);
+                } else {
+                    content = String
+                            .format(getString(R.string.uploader_upload_failed_content_single), upload.getFileName());
+                }
 
-            // we add only for instant-uploads the InstantUploadActivity and the
-            // db entry
-            Intent detailUploadIntent = null;
-            if (upload.isInstant() && InstantUploadActivity.IS_ENABLED) {
-                detailUploadIntent = new Intent(this, InstantUploadActivity.class);
-                detailUploadIntent.putExtra(FileUploader.KEY_ACCOUNT, upload.getAccount());
-            } else {
-                detailUploadIntent = new Intent(this, FailedUploadActivity.class);
-                detailUploadIntent.putExtra(FailedUploadActivity.MESSAGE, content);
-            }
-            finalNotification.contentIntent = PendingIntent.getActivity(getApplicationContext(),
-                    (int) System.currentTimeMillis(), detailUploadIntent, PendingIntent.FLAG_UPDATE_CURRENT
-                            | PendingIntent.FLAG_ONE_SHOT);
-
-            if (upload.isInstant()) {
-                DbHandler db = null;
-                try {
-                    db = new DbHandler(this.getBaseContext());
-                    String message = uploadResult.getLogMessage() + " errorCode: " + uploadResult.getCode();
-                    Log_OC.e(TAG, message + " Http-Code: " + uploadResult.getHttpCode());
-                    if (uploadResult.getCode() == ResultCode.QUOTA_EXCEEDED) {
-                        message = getString(R.string.failed_upload_quota_exceeded_text);
-                    }
-                    if (db.updateFileState(upload.getOriginalStoragePath(), DbHandler.UPLOAD_STATUS_UPLOAD_FAILED,
-                            message) == 0) {
-                        db.putFileForLater(upload.getOriginalStoragePath(), upload.getAccount().name, message);
-                    }
-                } finally {
-                    if (db != null) {
-                        db.close();
+                // we add only for instant-uploads the InstantUploadActivity and the
+                // db entry
+                Intent detailUploadIntent = null;
+                if (upload.isInstant() && InstantUploadActivity.IS_ENABLED) {
+                    detailUploadIntent = new Intent(this, InstantUploadActivity.class);
+                    detailUploadIntent.putExtra(FileUploader.KEY_ACCOUNT, upload.getAccount());
+                } else {
+                    detailUploadIntent = new Intent(this, FailedUploadActivity.class);
+                    detailUploadIntent.putExtra(FailedUploadActivity.MESSAGE, content);
+                }
+                finalNotification.contentIntent = PendingIntent.getActivity(getApplicationContext(),
+                        (int) System.currentTimeMillis(), detailUploadIntent, PendingIntent.FLAG_UPDATE_CURRENT
+                        | PendingIntent.FLAG_ONE_SHOT);
+
+                if (upload.isInstant()) {
+                    DbHandler db = null;
+                    try {
+                        db = new DbHandler(this.getBaseContext());
+                        String message = uploadResult.getLogMessage() + " errorCode: " + uploadResult.getCode();
+                        Log_OC.e(TAG, message + " Http-Code: " + uploadResult.getHttpCode());
+                        if (uploadResult.getCode() == ResultCode.QUOTA_EXCEEDED) {
+                            message = getString(R.string.failed_upload_quota_exceeded_text);
+                            if (db.updateFileState(upload.getOriginalStoragePath(), DbHandler.UPLOAD_STATUS_UPLOAD_FAILED,
+                                    message) == 0) {
+                                db.putFileForLater(upload.getOriginalStoragePath(), upload.getAccount().name, message);
+                            }
+                        }
+                    } finally {
+                        if (db != null) {
+                            db.close();
+                        }
                     }
                 }
             }
             finalNotification.setLatestEventInfo(getApplicationContext(),
                     getString(R.string.uploader_upload_failed_ticker), content, finalNotification.contentIntent);
-
+            
             mNotificationManager.notify(R.string.uploader_upload_failed_ticker, finalNotification);
         }
 

+ 24 - 10
src/com/owncloud/android/network/OwnCloudClientUtils.java

@@ -32,6 +32,7 @@ import javax.net.ssl.SSLContext;
 import javax.net.ssl.TrustManager;
 
 import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
+import org.apache.commons.httpclient.methods.GetMethod;
 import org.apache.commons.httpclient.protocol.Protocol;
 import org.apache.http.conn.ssl.BrowserCompatHostnameVerifier;
 import org.apache.http.conn.ssl.X509HostnameVerifier;
@@ -90,12 +91,18 @@ public class OwnCloudClientUtils {
         //Log_OC.d(TAG, "Creating WebdavClient associated to " + account.name);
        
         Uri uri = Uri.parse(AccountUtils.constructFullURLForAccount(appContext, account));
-        WebdavClient client = createOwnCloudClient(uri, appContext);
         AccountManager am = AccountManager.get(appContext);
-        if (am.getUserData(account, AccountAuthenticator.KEY_SUPPORTS_OAUTH2) != null) {    // TODO avoid a call to getUserData here
+        boolean isOauth2 = am.getUserData(account, AccountAuthenticator.KEY_SUPPORTS_OAUTH2) != null;   // TODO avoid calling to getUserData here
+        boolean isSamlSso = am.getUserData(account, AccountAuthenticator.KEY_SUPPORTS_SAML_WEB_SSO) != null;
+        WebdavClient client = createOwnCloudClient(uri, appContext, !isSamlSso);
+        if (isOauth2) {    
             String accessToken = am.blockingGetAuthToken(account, AccountAuthenticator.AUTH_TOKEN_TYPE_ACCESS_TOKEN, false);
             client.setBearerCredentials(accessToken);   // TODO not assume that the access token is a bearer token
         
+        } else if (isSamlSso) {    // TODO avoid a call to getUserData here
+            String accessToken = am.blockingGetAuthToken(account, AccountAuthenticator.AUTH_TOKEN_TYPE_SAML_WEB_SSO_SESSION_COOKIE, false);
+            client.setSsoSessionCookie(accessToken);
+            
         } else {
             String username = account.name.substring(0, account.name.lastIndexOf('@'));
             //String password = am.getPassword(account);
@@ -109,16 +116,25 @@ public class OwnCloudClientUtils {
     
     public static WebdavClient createOwnCloudClient (Account account, Context appContext, Activity currentActivity) throws OperationCanceledException, AuthenticatorException, IOException, AccountNotFoundException {
         Uri uri = Uri.parse(AccountUtils.constructFullURLForAccount(appContext, account));
-        WebdavClient client = createOwnCloudClient(uri, appContext);
         AccountManager am = AccountManager.get(appContext);
-        if (am.getUserData(account, AccountAuthenticator.KEY_SUPPORTS_OAUTH2) != null) {    // TODO avoid a call to getUserData here
+        boolean isOauth2 = am.getUserData(account, AccountAuthenticator.KEY_SUPPORTS_OAUTH2) != null;   // TODO avoid calling to getUserData here
+        boolean isSamlSso = am.getUserData(account, AccountAuthenticator.KEY_SUPPORTS_SAML_WEB_SSO) != null;
+        WebdavClient client = createOwnCloudClient(uri, appContext, !isSamlSso);
+        
+        if (isOauth2) {    // TODO avoid a call to getUserData here
             AccountManagerFuture<Bundle> future =  am.getAuthToken(account, AccountAuthenticator.AUTH_TOKEN_TYPE_ACCESS_TOKEN, null, currentActivity, null, null);
             Bundle result = future.getResult();
             String accessToken = result.getString(AccountManager.KEY_AUTHTOKEN);
-            //String accessToken = am.blockingGetAuthToken(account, AccountAuthenticator.AUTH_TOKEN_TYPE_ACCESS_TOKEN, false);
             if (accessToken == null) throw new AuthenticatorException("WTF!");
             client.setBearerCredentials(accessToken);   // TODO not assume that the access token is a bearer token
-            
+
+        } else if (isSamlSso) {    // TODO avoid a call to getUserData here
+            AccountManagerFuture<Bundle> future =  am.getAuthToken(account, AccountAuthenticator.AUTH_TOKEN_TYPE_SAML_WEB_SSO_SESSION_COOKIE, null, currentActivity, null, null);
+            Bundle result = future.getResult();
+            String accessToken = result.getString(AccountManager.KEY_AUTHTOKEN);
+            if (accessToken == null) throw new AuthenticatorException("WTF!");
+            client.setSsoSessionCookie(accessToken);
+
         } else {
             String username = account.name.substring(0, account.name.lastIndexOf('@'));
             //String password = am.getPassword(account);
@@ -139,10 +155,7 @@ public class OwnCloudClientUtils {
      * @param context   Android context where the WebdavClient is being created.
      * @return          A WebdavClient object ready to be used
      */
-    public static WebdavClient createOwnCloudClient(Uri uri, Context context) {
-        //Log_OC.d(TAG, "Creating WebdavClient for " + uri);
-        
-        //allowSelfsignedCertificates(true);
+    public static WebdavClient createOwnCloudClient(Uri uri, Context context, boolean followRedirects) {
         try {
             registerAdvancedSslContext(true, context);
         }  catch (GeneralSecurityException e) {
@@ -156,6 +169,7 @@ public class OwnCloudClientUtils {
         
         client.setDefaultTimeouts(DEFAULT_DATA_TIMEOUT, DEFAULT_CONNECTION_TIMEOUT);
         client.setBaseUri(uri);
+        client.setFollowRedirects(followRedirects);
         
         return client;
     }

+ 3 - 0
src/com/owncloud/android/operations/ChunkedUploadFileOperation.java

@@ -68,6 +68,9 @@ public class ChunkedUploadFileOperation extends UploadFileOperation {
             String uriPrefix = client.getBaseUri() + WebdavUtils.encodePath(getRemotePath()) + "-chunking-" + Math.abs((new Random()).nextInt(9000)+1000) + "-" ;
             long chunkCount = (long) Math.ceil((double)file.length() / CHUNK_SIZE);
             for (int chunkIndex = 0; chunkIndex < chunkCount ; chunkIndex++, offset += CHUNK_SIZE) {
+                if (mPutMethod != null) {
+                    mPutMethod.releaseConnection();    // let the connection available for other methods
+                }
                 mPutMethod = new PutMethod(uriPrefix + chunkCount + "-" + chunkIndex);
                 mPutMethod.addRequestHeader(OC_CHUNKED_HEADER, OC_CHUNKED_HEADER);
                 ((ChunkFromFileChannelRequestEntity)mEntity).setOffset(offset);

+ 32 - 9
src/com/owncloud/android/operations/CreateFolderOperation.java

@@ -17,6 +17,9 @@
 
 package com.owncloud.android.operations;
 
+import java.io.File;
+
+import org.apache.commons.httpclient.HttpStatus;
 import org.apache.jackrabbit.webdav.client.methods.MkColMethod;
 
 import com.owncloud.android.Log_OC;
@@ -39,25 +42,25 @@ public class CreateFolderOperation extends RemoteOperation {
     private static final int CONNECTION_TIMEOUT = 5000;
     
     protected String mRemotePath;
-    protected long mParentDirId;
+    protected boolean mCreateFullPath;
     protected DataStorageManager mStorageManager;
     
     /**
      * Constructor
      * 
-     * @param remoetPath            Full path to the new directory to create in the remote server.
-     * @param parentDirId           Local database id for the parent folder.
+     * @param remotePath            Full path to the new directory to create in the remote server.
+     * @param createFullPath        'True' means that all the ancestor folders should be created if don't exist yet.
      * @param storageManager        Reference to the local database corresponding to the account where the file is contained. 
      */
-    public CreateFolderOperation(String remotePath, long parentDirId, DataStorageManager storageManager) {
+    public CreateFolderOperation(String remotePath, boolean createFullPath, DataStorageManager storageManager) {
         mRemotePath = remotePath;
-        mParentDirId = parentDirId;
+        mCreateFullPath = createFullPath;
         mStorageManager = storageManager;
     }
     
     
     /**
-     * Performs the remove operation
+     * Performs the operation
      * 
      * @param   client      Client object to communicate with the remote ownCloud server.
      */
@@ -68,15 +71,20 @@ public class CreateFolderOperation extends RemoteOperation {
         try {
             mkcol = new MkColMethod(client.getBaseUri() + WebdavUtils.encodePath(mRemotePath));
             int status =  client.executeMethod(mkcol, READ_TIMEOUT, CONNECTION_TIMEOUT);
+            if (!mkcol.succeeded() && mkcol.getStatusCode() == HttpStatus.SC_CONFLICT && mCreateFullPath) {
+                result = createParentFolder(getParentPath(), client);
+                status = client.executeMethod(mkcol, READ_TIMEOUT, CONNECTION_TIMEOUT);    // second (and last) try
+            }
             if (mkcol.succeeded()) {
                 // Save new directory in local database
                 OCFile newDir = new OCFile(mRemotePath);
                 newDir.setMimetype("DIR");
-                newDir.setParentId(mParentDirId);
+                long parentId = mStorageManager.getFileByPath(getParentPath()).getFileId();
+                newDir.setParentId(parentId);
+                newDir.setModificationTimestamp(System.currentTimeMillis());
                 mStorageManager.saveFile(newDir);
             }
-
-            result = new RemoteOperationResult(mkcol.succeeded(), status);
+            result = new RemoteOperationResult(mkcol.succeeded(), status, mkcol.getResponseHeaders());
             Log_OC.d(TAG, "Create directory " + mRemotePath + ": " + result.getLogMessage());
             client.exhaustResponse(mkcol.getResponseBodyAsStream());
                 
@@ -90,5 +98,20 @@ public class CreateFolderOperation extends RemoteOperation {
         }
         return result;
     }
+
+
+    private String getParentPath() {
+        String parentPath = new File(mRemotePath).getParent();
+        parentPath = parentPath.endsWith(OCFile.PATH_SEPARATOR) ? parentPath : parentPath + OCFile.PATH_SEPARATOR;
+        return parentPath;
+    }
+
     
+    private RemoteOperationResult createParentFolder(String parentPath, WebdavClient client) {
+        RemoteOperation operation = new CreateFolderOperation(  parentPath,
+                                                                mCreateFullPath,
+                                                                mStorageManager    );
+        return operation.execute(client);
+    }
+
 }

+ 9 - 8
src/com/owncloud/android/operations/DownloadFileOperation.java

@@ -58,6 +58,7 @@ public class DownloadFileOperation extends RemoteOperation {
     private Set<OnDatatransferProgressListener> mDataTransferListeners = new HashSet<OnDatatransferProgressListener>();
     private final AtomicBoolean mCancellationRequested = new AtomicBoolean(false);
     private long mModificationTimestamp = 0;
+    private GetMethod mGet;
 
     
     public DownloadFileOperation(Account account, OCFile file) {
@@ -154,7 +155,7 @@ public class DownloadFileOperation extends RemoteOperation {
             if (!moved)
                 result = new RemoteOperationResult(RemoteOperationResult.ResultCode.LOCAL_STORAGE_NOT_MOVED);
             else
-                result = new RemoteOperationResult(isSuccess(status), status);
+                result = new RemoteOperationResult(isSuccess(status), status, (mGet != null ? mGet.getResponseHeaders() : null));
             Log_OC.i(TAG, "Download of " + mFile.getRemotePath() + " to " + getSavePath() + ": " + result.getLogMessage());
             
         } catch (Exception e) {
@@ -174,15 +175,15 @@ public class DownloadFileOperation extends RemoteOperation {
     protected int downloadFile(WebdavClient client, File targetFile) throws HttpException, IOException, OperationCancelledException {
         int status = -1;
         boolean savedFile = false;
-        GetMethod get = new GetMethod(client.getBaseUri() + WebdavUtils.encodePath(mFile.getRemotePath()));
+        mGet = new GetMethod(client.getBaseUri() + WebdavUtils.encodePath(mFile.getRemotePath()));
         Iterator<OnDatatransferProgressListener> it = null;
         
         FileOutputStream fos = null;
         try {
-            status = client.executeMethod(get);
+            status = client.executeMethod(mGet);
             if (isSuccess(status)) {
                 targetFile.createNewFile();
-                BufferedInputStream bis = new BufferedInputStream(get.getResponseBodyAsStream());
+                BufferedInputStream bis = new BufferedInputStream(mGet.getResponseBodyAsStream());
                 fos = new FileOutputStream(targetFile);
                 long transferred = 0;
 
@@ -191,7 +192,7 @@ public class DownloadFileOperation extends RemoteOperation {
                 while ((readResult = bis.read(bytes)) != -1) {
                     synchronized(mCancellationRequested) {
                         if (mCancellationRequested.get()) {
-                            get.abort();
+                            mGet.abort();
                             throw new OperationCancelledException();
                         }
                     }
@@ -205,14 +206,14 @@ public class DownloadFileOperation extends RemoteOperation {
                     }
                 }
                 savedFile = true;
-                Header modificationTime = get.getResponseHeader("Last-Modified");
+                Header modificationTime = mGet.getResponseHeader("Last-Modified");
                 if (modificationTime != null) {
                     Date d = WebdavUtils.parseResponseDate((String) modificationTime.getValue());
                     mModificationTimestamp = (d != null) ? d.getTime() : 0;
                 }
                 
             } else {
-                client.exhaustResponse(get.getResponseBodyAsStream());
+                client.exhaustResponse(mGet.getResponseBodyAsStream());
             }
                 
         } finally {
@@ -220,7 +221,7 @@ public class DownloadFileOperation extends RemoteOperation {
             if (!savedFile && targetFile.exists()) {
                 targetFile.delete();
             }
-            get.releaseConnection();    // let the connection available for other methods
+            mGet.releaseConnection();    // let the connection available for other methods
         }
         return status;
     }

+ 5 - 4
src/com/owncloud/android/operations/ExistenceCheckOperation.java

@@ -23,6 +23,7 @@ import org.apache.commons.httpclient.methods.HeadMethod;
 import com.owncloud.android.Log_OC;
 
 import eu.alefzero.webdav.WebdavClient;
+import eu.alefzero.webdav.WebdavUtils;
 import android.content.Context;
 import android.net.ConnectivityManager;
 
@@ -65,16 +66,16 @@ public class ExistenceCheckOperation extends RemoteOperation {
         RemoteOperationResult result = null;
         HeadMethod head = null;
         try {
-            head = new HeadMethod(client.getBaseUri() + mPath);
+            head = new HeadMethod(client.getBaseUri() + WebdavUtils.encodePath(mPath));
             int status = client.executeMethod(head, TIMEOUT, TIMEOUT);
             client.exhaustResponse(head.getResponseBodyAsStream());
             boolean success = (status == HttpStatus.SC_OK && !mSuccessIfAbsent) || (status == HttpStatus.SC_NOT_FOUND && mSuccessIfAbsent);
-            result = new RemoteOperationResult(success, status);
-            Log_OC.d(TAG, "Existence check for " + client.getBaseUri() + mPath + " targeting for " + (mSuccessIfAbsent ? " absence " : " existence ") + "finished with HTTP status " + status + (!success?"(FAIL)":""));
+            result = new RemoteOperationResult(success, status, head.getResponseHeaders());
+            Log_OC.d(TAG, "Existence check for " + client.getBaseUri() + WebdavUtils.encodePath(mPath) + " targeting for " + (mSuccessIfAbsent ? " absence " : " existence ") + "finished with HTTP status " + status + (!success?"(FAIL)":""));
             
         } catch (Exception e) {
             result = new RemoteOperationResult(e);
-            Log_OC.e(TAG, "Existence check for " + client.getBaseUri() + mPath + " targeting for " + (mSuccessIfAbsent ? " absence " : " existence ") + ": " + result.getLogMessage(), result.getException());
+            Log_OC.e(TAG, "Existence check for " + client.getBaseUri() + WebdavUtils.encodePath(mPath) + " targeting for " + (mSuccessIfAbsent ? " absence " : " existence ") + ": " + result.getLogMessage(), result.getException());
             
         } finally {
             if (head != null)

+ 2 - 2
src/com/owncloud/android/operations/OAuth2GetAccessToken.java

@@ -80,12 +80,12 @@ public class OAuth2GetAccessToken extends RemoteOperation {
                         result = new RemoteOperationResult(ResultCode.OAUTH2_ERROR);
                     
                     } else {
-                        result = new RemoteOperationResult(true, status);
+                        result = new RemoteOperationResult(true, status, postMethod.getResponseHeaders());
                     }
                     
                 } else {
                     client.exhaustResponse(postMethod.getResponseBodyAsStream());
-                    result = new RemoteOperationResult(false, status);
+                    result = new RemoteOperationResult(false, status, postMethod.getResponseHeaders());
                 }
             }
             

+ 1 - 1
src/com/owncloud/android/operations/OwnCloudServerCheckOperation.java

@@ -80,7 +80,7 @@ public class OwnCloudServerCheckOperation extends RemoteOperation {
                 }
                 
             } else {
-                mLatestResult = new RemoteOperationResult(false, status);
+                mLatestResult = new RemoteOperationResult(false, status, get.getResponseHeaders());
             }
 
         } catch (JSONException e) {

+ 21 - 10
src/com/owncloud/android/operations/RemoteOperation.java

@@ -242,18 +242,28 @@ public abstract class RemoteOperation implements Runnable {
                 result = run(mClient);
         
             repeat = false;
-            if (mCallerActivity != null && mAccount != null && mContext != null && !result.isSuccess() && result.getCode() == ResultCode.UNAUTHORIZED) {
-                /// fail due to lack of authorization in an operation performed in foreground
-                AccountManager am = AccountManager.get(mContext);
+            if (mCallerActivity != null && mAccount != null && mContext != null && !result.isSuccess() &&
+//                    (result.getCode() == ResultCode.UNAUTHORIZED || (result.isTemporalRedirection() && result.isIdPRedirection()))) {
+                    (result.getCode() == ResultCode.UNAUTHORIZED || result.isIdPRedirection())) {
+                /// possible fail due to lack of authorization in an operation performed in foreground
                 Credentials cred = mClient.getCredentials();
-                if (cred instanceof BearerCredentials) {
-                    am.invalidateAuthToken(AccountAuthenticator.ACCOUNT_TYPE, ((BearerCredentials)cred).getAccessToken());
-                } else {
-                    am.clearPassword(mAccount);
+                String ssoSessionCookie = mClient.getSsoSessionCookie();
+                if (cred != null || ssoSessionCookie != null) {
+                    /// confirmed : unauthorized operation
+                    AccountManager am = AccountManager.get(mContext);
+                    boolean bearerAuthorization = (cred != null && cred instanceof BearerCredentials);
+                    boolean samlBasedSsoAuthorization = (cred == null && ssoSessionCookie != null);
+                    if (bearerAuthorization) {
+                        am.invalidateAuthToken(AccountAuthenticator.ACCOUNT_TYPE, ((BearerCredentials)cred).getAccessToken());
+                    } else if (samlBasedSsoAuthorization ) {
+                        am.invalidateAuthToken(AccountAuthenticator.ACCOUNT_TYPE, ssoSessionCookie);
+                    } else {
+                        am.clearPassword(mAccount);
+                    }
+                    mClient = null;
+                    repeat = true;  // when repeated, the creation of a new OwnCloudClient after erasing the saved credentials will trigger the login activity
+                    result = null;
                 }
-                mClient = null;
-                repeat = true;  // when repeated, the creation of a new OwnCloudClient after erasing the saved credentials will trigger the login activity
-                result = null;
             }
         } while (repeat);
         
@@ -278,4 +288,5 @@ public abstract class RemoteOperation implements Runnable {
         return mClient;
     }
 
+
 }

+ 42 - 4
src/com/owncloud/android/operations/RemoteOperationResult.java

@@ -28,6 +28,7 @@ import java.net.UnknownHostException;
 import javax.net.ssl.SSLException;
 
 import org.apache.commons.httpclient.ConnectTimeoutException;
+import org.apache.commons.httpclient.Header;
 import org.apache.commons.httpclient.HttpException;
 import org.apache.commons.httpclient.HttpStatus;
 import org.apache.jackrabbit.webdav.DavException;
@@ -50,7 +51,7 @@ import com.owncloud.android.network.CertificateCombinedException;
 public class RemoteOperationResult implements Serializable {
 
     /** Generated - should be refreshed every time the class changes!! */
-    private static final long serialVersionUID = 6106167714625712390L;
+    private static final long serialVersionUID = -4415103901492836870L;
 
     
     private static final String TAG = "RemoteOperationResult";
@@ -84,20 +85,23 @@ public class RemoteOperationResult implements Serializable {
         OAUTH2_ERROR_ACCESS_DENIED,
         QUOTA_EXCEEDED, 
         ACCOUNT_NOT_FOUND, 
-        ACCOUNT_EXCEPTION
+        ACCOUNT_EXCEPTION, 
+        ACCOUNT_NOT_NEW, 
+        ACCOUNT_NOT_THE_SAME
     }
 
     private boolean mSuccess = false;
     private int mHttpCode = -1;
     private Exception mException = null;
     private ResultCode mCode = ResultCode.UNKNOWN_ERROR;
+    private String mRedirectedLocation;
 
     public RemoteOperationResult(ResultCode code) {
         mCode = code;
         mSuccess = (code == ResultCode.OK || code == ResultCode.OK_SSL || code == ResultCode.OK_NO_SSL);
     }
 
-    public RemoteOperationResult(boolean success, int httpCode) {
+    private RemoteOperationResult(boolean success, int httpCode) {
         mSuccess = success;
         mHttpCode = httpCode;
 
@@ -123,10 +127,24 @@ public class RemoteOperationResult implements Serializable {
                 break;
             default:
                 mCode = ResultCode.UNHANDLED_HTTP_CODE;
-                Log_OC.d(TAG, "RemoteOperationResult has prcessed UNHANDLED_HTTP_CODE: " + httpCode);
+                Log_OC.d(TAG, "RemoteOperationResult has processed UNHANDLED_HTTP_CODE: " + httpCode);
             }
         }
     }
+    
+    public RemoteOperationResult(boolean success, int httpCode, Header[] headers) {
+        this(success, httpCode);
+        if (headers != null) {
+            Header current;
+            for (int i=0; i<headers.length; i++) {
+                current = headers[i];
+                if ("Location".equals(current.getName())) {
+                    mRedirectedLocation = current.getValue();
+                    break;
+                }
+            }
+        }
+    }    
 
     public RemoteOperationResult(Exception e) {
         mException = e;
@@ -281,6 +299,12 @@ public class RemoteOperationResult implements Serializable {
 
         } else if (mCode == ResultCode.LOCAL_STORAGE_NOT_MOVED) {
             return "Error while moving file to final directory";
+
+        } else if (mCode == ResultCode.ACCOUNT_NOT_NEW) {
+            return "Account already existing when creating a new one";
+
+        } else if (mCode == ResultCode.ACCOUNT_NOT_THE_SAME) {
+            return "Authenticated with a different account than the one updating";
         }
 
         return "Operation finished with HTTP status code " + mHttpCode + " (" + (isSuccess() ? "success" : "fail") + ")";
@@ -295,4 +319,18 @@ public class RemoteOperationResult implements Serializable {
         return (mException != null);
     }
 
+    public boolean isTemporalRedirection() {
+        return (mHttpCode == 302 || mHttpCode == 307);
+    }
+
+    public String getRedirectedLocation() {
+        return mRedirectedLocation;
+    }
+    
+    public boolean isIdPRedirection() {
+        return (mRedirectedLocation != null &&
+                (mRedirectedLocation.toUpperCase().contains("SAML") || 
+                mRedirectedLocation.toLowerCase().contains("wayf")));
+    }
+
 }

+ 1 - 1
src/com/owncloud/android/operations/RemoveFileOperation.java

@@ -88,7 +88,7 @@ public class RemoveFileOperation extends RemoteOperation {
                 }
             }
             delete.getResponseBodyAsString();   // exhaust the response, although not interesting
-            result = new RemoteOperationResult((delete.succeeded() || status == HttpStatus.SC_NOT_FOUND), status);
+            result = new RemoteOperationResult((delete.succeeded() || status == HttpStatus.SC_NOT_FOUND), status, delete.getResponseHeaders());
             Log_OC.i(TAG, "Remove " + mFileToRemove.getRemotePath() + ": " + result.getLogMessage());
             
         } catch (Exception e) {

+ 1 - 1
src/com/owncloud/android/operations/RenameFileOperation.java

@@ -136,7 +136,7 @@ public class RenameFileOperation extends RemoteOperation {
             }
             
             move.getResponseBodyAsString(); // exhaust response, although not interesting
-            result = new RemoteOperationResult(move.succeeded(), status);
+            result = new RemoteOperationResult(move.succeeded(), status, move.getResponseHeaders());
             Log_OC.i(TAG, "Rename " + mFile.getRemotePath() + " to " + mNewRemotePath + ": " + result.getLogMessage());
             
         } catch (Exception e) {

+ 1 - 1
src/com/owncloud/android/operations/SynchronizeFileOperation.java

@@ -101,7 +101,7 @@ public class SynchronizeFileOperation extends RemoteOperation {
                         
                     } else {
                         client.exhaustResponse(propfind.getResponseBodyAsStream());
-                        result = new RemoteOperationResult(false, status);
+                        result = new RemoteOperationResult(false, status, propfind.getResponseHeaders());
                     }
                 }
                 

+ 16 - 6
src/com/owncloud/android/operations/SynchronizeFolderOperation.java

@@ -28,6 +28,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Vector;
 
+import org.apache.commons.httpclient.Header;
 import org.apache.http.HttpStatus;
 import org.apache.jackrabbit.webdav.MultiStatus;
 import org.apache.jackrabbit.webdav.client.methods.PropFindMethod;
@@ -208,9 +209,9 @@ public class SynchronizeFolderOperation extends RemoteOperation {
                         } else {
                             mFailsInFavouritesFound++;
                             if (contentsResult.getException() != null) {
-                                Log_OC.d(TAG, "Error while synchronizing favourites : " +  contentsResult.getLogMessage(), contentsResult.getException());
+                                Log_OC.e(TAG, "Error while synchronizing favourites : " +  contentsResult.getLogMessage(), contentsResult.getException());
                             } else {
-                                Log_OC.d(TAG, "Error while synchronizing favourites : " + contentsResult.getLogMessage());
+                                Log_OC.e(TAG, "Error while synchronizing favourites : " + contentsResult.getLogMessage());
                             }
                         }
                     }   // won't let these fails break the synchronization process
@@ -242,21 +243,30 @@ public class SynchronizeFolderOperation extends RemoteOperation {
                     result = new RemoteOperationResult(ResultCode.SYNC_CONFLICT);   // should be different result, but will do the job
                             
                 } else {
-                    result = new RemoteOperationResult(true, status);
+                    result = new RemoteOperationResult(true, status, query.getResponseHeaders());
                 }
             } else {
-                result = new RemoteOperationResult(false, status);
+                result = new RemoteOperationResult(false, status, query.getResponseHeaders());
             }
-            Log_OC.i(TAG, "Synchronizing " + mAccount.name + ", folder " + mRemotePath + ": " + result.getLogMessage());
+            
             
             
         } catch (Exception e) {
             result = new RemoteOperationResult(e);
-            Log_OC.e(TAG, "Synchronizing " + mAccount.name + ", folder " + mRemotePath + ": " + result.getLogMessage(), result.getException());
+            
 
         } finally {
             if (query != null)
                 query.releaseConnection();  // let the connection available for other methods
+            if (result.isSuccess()) {
+                Log_OC.i(TAG, "Synchronizing " + mAccount.name + ", folder " + mRemotePath + ": " + result.getLogMessage());
+            } else {
+                if (result.isException()) {
+                    Log_OC.e(TAG, "Synchronizing " + mAccount.name + ", folder " + mRemotePath + ": " + result.getLogMessage(), result.getException());
+                } else {
+                    Log_OC.e(TAG, "Synchronizing " + mAccount.name + ", folder " + mRemotePath + ": " + result.getLogMessage());
+                }
+            }
         }
         
         return result;

+ 1 - 1
src/com/owncloud/android/operations/UpdateOCVersionOperation.java

@@ -65,7 +65,7 @@ public class UpdateOCVersionOperation extends RemoteOperation {
             int status = client.executeMethod(get);
             if (status != HttpStatus.SC_OK) {
                 client.exhaustResponse(get.getResponseBodyAsStream());
-                result = new RemoteOperationResult(false, status);
+                result = new RemoteOperationResult(false, status, get.getResponseHeaders());
                 
             } else {
                 String response = get.getResponseBodyAsString();

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików