فهرست منبع

Merge remote-tracking branch 'remotes/origin/master' into brandingDrawer2

tobiaskaminsky 8 سال پیش
والد
کامیت
ce57d257b1
25فایلهای تغییر یافته به همراه275 افزوده شده و 231 حذف شده
  1. 1 1
      scripts/lint/lint-results.txt
  2. 4 0
      src/generic/java/com/owncloud/android/utils/PushUtils.java
  3. 0 20
      src/gplay/AndroidManifest.xml
  4. 0 46
      src/gplay/java/com/owncloud/android/ui/activity/ModifiedFileDisplayActivity.java
  5. 51 44
      src/gplay/java/com/owncloud/android/utils/PushUtils.java
  6. 15 0
      src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java
  7. 7 0
      src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java
  8. 19 2
      src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactListFragment.java
  9. 4 0
      src/main/res/values-de-rDE/strings.xml
  10. 4 0
      src/main/res/values-de/strings.xml
  11. 4 0
      src/main/res/values-en-rGB/strings.xml
  12. 8 0
      src/main/res/values-es-rMX/strings.xml
  13. 4 0
      src/main/res/values-fr/strings.xml
  14. 44 1
      src/main/res/values-is/strings.xml
  15. 10 2
      src/main/res/values-nb-rNO/strings.xml
  16. 4 0
      src/main/res/values-nl/strings.xml
  17. 19 16
      src/main/res/values-pl/strings.xml
  18. 5 1
      src/main/res/values-pt-rBR/strings.xml
  19. 4 0
      src/main/res/values-ru/strings.xml
  20. 6 0
      src/main/res/values-sq/strings.xml
  21. 4 0
      src/main/res/values-tr/strings.xml
  22. 9 0
      src/main/res/values-zh-rCN/strings.xml
  23. 0 20
      src/modified/AndroidManifest.xml
  24. 0 36
      src/modified/java/com/owncloud/android/ui/activity/ModifiedFileDisplayActivity.java
  25. 49 42
      src/modified/java/com/owncloud/android/utils/PushUtils.java

+ 1 - 1
scripts/lint/lint-results.txt

@@ -1,2 +1,2 @@
 DO NOT TOUCH; GENERATED BY DRONE
-      <span class="mdl-layout-title">Lint Report: 75 errors and 858 warnings</span>
+      <span class="mdl-layout-title">Lint Report: 75 errors and 852 warnings</span>

+ 4 - 0
src/generic/java/com/owncloud/android/utils/PushUtils.java

@@ -22,4 +22,8 @@ package com.owncloud.android.utils;
 
 public class PushUtils {
     public static final String KEY_PUSH = "push";
+
+    public static void pushRegistrationToServer() {
+        // do nothing
+    }
 }

+ 0 - 20
src/gplay/AndroidManifest.xml

@@ -33,17 +33,6 @@
         <meta-data android:name="com.google.android.gms.version"
                    android:value="@integer/google_play_services_version" />
 
-        <activity
-            android:name=".ui.activity.ModifiedFileDisplayActivity"
-            android:label="@string/app_name"
-            android:theme="@style/Theme.ownCloud.Toolbar.Drawer">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-
-                <category android:name="android.intent.category.LAUNCHER" />
-            </intent-filter>
-        </activity>
-
         <activity
             android:name=".authentication.ModifiedAuthenticatorActivity"
             android:exported="true"
@@ -70,15 +59,6 @@
             </intent-filter>
         </activity>
 
-        <activity
-            android:name=".ui.activity.FileDisplayActivity"
-            tools:node="remove"/>
-
-        <activity-alias
-            android:name=".ui.activity.FileDisplayActivity"
-            android:targetActivity=".ui.activity.ModifiedFileDisplayActivity"
-            tools:replace="android:targetActivity"/>
-
         <activity-alias
             android:name=".authentication.AuthenticatorActivity"
             android:targetActivity=".authentication.ModifiedAuthenticatorActivity"

+ 0 - 46
src/gplay/java/com/owncloud/android/ui/activity/ModifiedFileDisplayActivity.java

@@ -1,46 +0,0 @@
-/**
- * Nextcloud Android client application
- *
- * @author Mario Danic
- * Copyright (C) 2017 Mario Danic
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * at your option) any later version.
- *
- * 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 Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-package com.owncloud.android.ui.activity;
-
-import android.os.Bundle;
-
-import com.owncloud.android.ui.events.TokenPushEvent;
-import com.owncloud.android.utils.PushUtils;
-
-import org.greenrobot.eventbus.EventBus;
-import org.greenrobot.eventbus.Subscribe;
-import org.greenrobot.eventbus.ThreadMode;
-
-public class ModifiedFileDisplayActivity extends FileDisplayActivity {
-
-    @Subscribe(threadMode = ThreadMode.BACKGROUND)
-    public void onMessageEvent(TokenPushEvent event) {
-        PushUtils.pushRegistrationToServer();
-    }
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        // see if there's stuff to push every time we start the app
-        EventBus.getDefault().post(new TokenPushEvent());
-    }
-
-}

+ 51 - 44
src/gplay/java/com/owncloud/android/utils/PushUtils.java

@@ -76,7 +76,7 @@ public class PushUtils {
 
     private static ArbitraryDataProvider arbitraryDataProvider;
 
-    private static String generateSHA512Hash(String pushToken) {
+    public static String generateSHA512Hash(String pushToken) {
         MessageDigest messageDigest = null;
         try {
             messageDigest = MessageDigest.getInstance("SHA-512");
@@ -88,7 +88,7 @@ public class PushUtils {
         return "";
     }
 
-    private static String bytesToHex(byte[] bytes) {
+    public static String bytesToHex(byte[] bytes) {
         StringBuilder result = new StringBuilder();
         for (byte individualByte : bytes) {
             result.append(Integer.toString((individualByte & 0xff) + 0x100, 16)
@@ -96,7 +96,7 @@ public class PushUtils {
         }
         return result.toString();
     }
-
+    
     private static int generateRsa2048KeyPair() {
         String keyPath = MainApp.getStoragePath() + File.separator + MainApp.getDataFolder() + File.separator
                 + KEYPAIR_FOLDER;
@@ -202,56 +202,63 @@ public class PushUtils {
 
                 Context context = MainApp.getAppContext();
                 String providerValue;
+                PushConfigurationState accountPushData = null;
                 Gson gson = new Gson();
                 for (Account account : AccountUtils.getAccounts(context)) {
-                    if (!TextUtils.isEmpty(providerValue = arbitraryDataProvider.getValue(account, KEY_PUSH))) {
-                        PushConfigurationState accountPushData = gson.fromJson(providerValue,
+                    providerValue = arbitraryDataProvider.getValue(account, KEY_PUSH);
+                    if (!TextUtils.isEmpty(providerValue)) {
+                        accountPushData = gson.fromJson(providerValue,
                                 PushConfigurationState.class);
-                        if (!accountPushData.getPushToken().equals(token) && !accountPushData.isShouldBeDeleted()) {
-                            try {
-                                OwnCloudAccount ocAccount = new OwnCloudAccount(account, context);
-                                OwnCloudClient mClient = OwnCloudClientManagerFactory.getDefaultSingleton().
-                                        getClientFor(ocAccount, context);
+                    } else {
+                        accountPushData = null;
+                    }
+
+                    if (accountPushData != null && !accountPushData.getPushToken().equals(token) &&
+                            !accountPushData.isShouldBeDeleted() ||
+                            TextUtils.isEmpty(providerValue)) {
+                        try {
+                            OwnCloudAccount ocAccount = new OwnCloudAccount(account, context);
+                            OwnCloudClient mClient = OwnCloudClientManagerFactory.getDefaultSingleton().
+                                    getClientFor(ocAccount, context);
+
+                            RemoteOperation registerAccountDeviceForNotificationsOperation =
+                                    new RegisterAccountDeviceForNotificationsOperation(pushTokenHash,
+                                            publicKey,
+                                            context.getResources().getString(R.string.push_server_url));
 
-                                RemoteOperation registerAccountDeviceForNotificationsOperation =
-                                        new RegisterAccountDeviceForNotificationsOperation(pushTokenHash,
-                                                publicKey,
-                                                context.getResources().getString(R.string.push_server_url));
+                            RemoteOperationResult remoteOperationResult = registerAccountDeviceForNotificationsOperation.
+                                    execute(mClient);
 
-                                RemoteOperationResult remoteOperationResult = registerAccountDeviceForNotificationsOperation.
-                                        execute(mClient);
+                            if (remoteOperationResult.isSuccess()) {
+                                PushResponse pushResponse = remoteOperationResult.getPushResponseData();
+
+                                RemoteOperation registerAccountDeviceForProxyOperation = new
+                                        RegisterAccountDeviceForProxyOperation(
+                                        context.getResources().getString(R.string.push_server_url),
+                                        token, pushResponse.getDeviceIdentifier(), pushResponse.getSignature(),
+                                        pushResponse.getPublicKey());
+
+                                remoteOperationResult = registerAccountDeviceForProxyOperation.execute(mClient);
 
                                 if (remoteOperationResult.isSuccess()) {
-                                    PushResponse pushResponse = remoteOperationResult.getPushResponseData();
-
-                                    RemoteOperation registerAccountDeviceForProxyOperation = new
-                                            RegisterAccountDeviceForProxyOperation(
-                                            context.getResources().getString(R.string.push_server_url),
-                                            token, pushResponse.getDeviceIdentifier(), pushResponse.getSignature(),
-                                            pushResponse.getPublicKey());
-
-                                    remoteOperationResult = registerAccountDeviceForProxyOperation.execute(mClient);
-
-                                    if (remoteOperationResult.isSuccess()) {
-                                        PushConfigurationState pushArbitraryData = new PushConfigurationState(token,
-                                                pushResponse.getDeviceIdentifier(), pushResponse.getSignature(),
-                                                pushResponse.getPublicKey(), false);
-                                        arbitraryDataProvider.storeOrUpdateKeyValue(account, KEY_PUSH,
-                                                gson.toJson(pushArbitraryData));
-                                    }
+                                    PushConfigurationState pushArbitraryData = new PushConfigurationState(token,
+                                            pushResponse.getDeviceIdentifier(), pushResponse.getSignature(),
+                                            pushResponse.getPublicKey(), false);
+                                    arbitraryDataProvider.storeOrUpdateKeyValue(account, KEY_PUSH,
+                                            gson.toJson(pushArbitraryData));
                                 }
-                            } catch (com.owncloud.android.lib.common.accounts.AccountUtils.AccountNotFoundException e) {
-                                Log_OC.d(TAG, "Failed to find an account");
-                            } catch (AuthenticatorException e) {
-                                Log_OC.d(TAG, "Failed via AuthenticatorException");
-                            } catch (IOException e) {
-                                Log_OC.d(TAG, "Failed via IOException");
-                            } catch (OperationCanceledException e) {
-                                Log_OC.d(TAG, "Failed via OperationCanceledException");
                             }
-                        } else if (accountPushData.isShouldBeDeleted()) {
-                            deleteRegistrationForAccount(account);
+                        } catch (com.owncloud.android.lib.common.accounts.AccountUtils.AccountNotFoundException e) {
+                            Log_OC.d(TAG, "Failed to find an account");
+                        } catch (AuthenticatorException e) {
+                            Log_OC.d(TAG, "Failed via AuthenticatorException");
+                        } catch (IOException e) {
+                            Log_OC.d(TAG, "Failed via IOException");
+                        } catch (OperationCanceledException e) {
+                            Log_OC.d(TAG, "Failed via OperationCanceledException");
                         }
+                    } else if (accountPushData != null && accountPushData.isShouldBeDeleted()) {
+                        deleteRegistrationForAccount(account);
                     }
                 }
             }
@@ -261,7 +268,7 @@ public class PushUtils {
     public static Key readKeyFromFile(boolean readPublicKey) {
         String keyPath = MainApp.getStoragePath() + File.separator + MainApp.getDataFolder() + File.separator
                 + KEYPAIR_FOLDER;
-        
+
         String privateKeyPath = keyPath + File.separator + KEYPAIR_FILE_NAME + KEYPAIR_PRIV_EXTENSION;
         String publicKeyPath = keyPath + File.separator + KEYPAIR_FILE_NAME + KEYPAIR_PUB_EXTENSION;
 

+ 15 - 0
src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java

@@ -100,8 +100,11 @@ import com.owncloud.android.utils.DisplayUtils;
 import com.owncloud.android.utils.ErrorMessageAdapter;
 import com.owncloud.android.utils.MimeTypeUtil;
 import com.owncloud.android.utils.PermissionUtil;
+import com.owncloud.android.utils.PushUtils;
 
 import org.greenrobot.eventbus.EventBus;
+import org.greenrobot.eventbus.Subscribe;
+import org.greenrobot.eventbus.ThreadMode;
 import org.parceler.Parcels;
 
 import java.io.File;
@@ -2064,4 +2067,16 @@ public class FileDisplayActivity extends HookActivity
         super.showFiles(onDeviceOnly);
         getListOfFilesFragment().refreshDirectory();
     }
+
+    @Subscribe(threadMode = ThreadMode.BACKGROUND)
+    public void onMessageEvent(TokenPushEvent event) {
+        PushUtils.pushRegistrationToServer();
+    }
+
+    @Override
+    public void onStart() {
+        super.onStart();
+        EventBus.getDefault().post(new TokenPushEvent());
+    }
+
 }

+ 7 - 0
src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java

@@ -66,6 +66,8 @@ import com.owncloud.android.utils.DisplayUtils;
 import com.owncloud.android.utils.PushUtils;
 
 import org.greenrobot.eventbus.EventBus;
+import org.greenrobot.eventbus.Subscribe;
+import org.greenrobot.eventbus.ThreadMode;
 import org.parceler.Parcels;
 
 import butterknife.BindString;
@@ -446,4 +448,9 @@ public class UserInfoActivity extends FileActivity {
             outState.putParcelable(KEY_USER_DATA, Parcels.wrap(userInfo));
         }
     }
+
+    @Subscribe(threadMode = ThreadMode.BACKGROUND)
+    public void onMessageEvent(TokenPushEvent event) {
+        PushUtils.pushRegistrationToServer();
+    }
 }

+ 19 - 2
src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactListFragment.java

@@ -71,6 +71,8 @@ import org.greenrobot.eventbus.ThreadMode;
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
@@ -150,6 +152,21 @@ public class ContactListFragment extends FileFragment {
             } else {
                 File file = new File(ocFile.getStoragePath());
                 vCards.addAll(Ezvcard.parse(file).all());
+                Collections.sort(vCards, new Comparator<VCard>() {
+                    @Override
+                    public int compare(VCard o1, VCard o2) {
+                        if (o1.getFormattedName() != null && o2.getFormattedName() != null) {
+                            return o1.getFormattedName().getValue().compareTo(o2.getFormattedName().getValue());
+                        } else {
+                            if (o1.getFormattedName() == null) {
+                                return 1; // Send the contact to the end of the list
+                            } else {
+                                return -1;
+                            }
+
+                        }
+                    }
+                });
             }
         } catch (IOException e) {
             Log_OC.e(TAG, "Error processing contacts file!", e);
@@ -251,7 +268,7 @@ public class ContactListFragment extends FileFragment {
 
     private void setSelectAllMenuItem(MenuItem selectAll, boolean checked) {
         selectAll.setChecked(checked);
-        if(checked) {
+        if (checked) {
             selectAll.setIcon(R.drawable.ic_select_none);
         } else {
             selectAll.setIcon(R.drawable.ic_select_all);
@@ -463,7 +480,7 @@ class ContactListAdapter extends RecyclerView.Adapter<ContactListFragment.Contac
         if (checkedVCards != null && checkedVCards.size() > 0) {
             intArray = new int[checkedVCards.size()];
             int i = 0;
-            for (int position: checkedVCards) {
+            for (int position : checkedVCards) {
                 intArray[i] = position;
                 i++;
             }

+ 4 - 0
src/main/res/values-de-rDE/strings.xml

@@ -482,6 +482,9 @@
     <string name="file_list__footer__files">%1$d Dateien</string>
     <string name="file_list__footer__files_and_folder">%1$d Dateien, 1 Ordner</string>
     <string name="file_list__footer__files_and_folders">%1$d Dateien, %2$d Ordner</string>
+    <string name="set_picture_as">Setze Bild als</string>
+    <string name="set_as">Setze als</string>
+
     <string name="prefs_instant_behaviour_dialogTitle">Originaldatei wird&#8230;</string>
     <string name="prefs_instant_behaviour_title">Originaldatei wird&#8230;</string>
     <string name="upload_copy_files">kopiere Datei</string>
@@ -654,5 +657,6 @@
     <!-- Notifications -->
     <string name="new_notification_received">Neue Benachrichtigung erhalten</string>
     <string name="drawer_logout">Abmelden</string>
+    <string name="picture_set_as_no_app">Keine App gefunden, mit der ein Bid gesetzt werden könnte!</string>
     <string name="privacy">Datenschutz</string>
 </resources>

+ 4 - 0
src/main/res/values-de/strings.xml

@@ -482,6 +482,9 @@
     <string name="file_list__footer__files">%1$d Dateien</string>
     <string name="file_list__footer__files_and_folder">%1$d Dateien, 1 Ordner</string>
     <string name="file_list__footer__files_and_folders">%1$d Dateien, %2$d Ordner</string>
+    <string name="set_picture_as">Setze Bild als</string>
+    <string name="set_as">Setze als</string>
+
     <string name="prefs_instant_behaviour_dialogTitle">Originaldatei wird&#8230;</string>
     <string name="prefs_instant_behaviour_title">Originaldatei wird&#8230;</string>
     <string name="upload_copy_files">kopiere Datei</string>
@@ -655,5 +658,6 @@
     <!-- Notifications -->
     <string name="new_notification_received">Neue Benachrichtigung erhalten</string>
     <string name="drawer_logout">Abmelden</string>
+    <string name="picture_set_as_no_app">Keine App gefunden, mit der ein Bid gesetzt werden könnte!</string>
     <string name="privacy">Datenschutz</string>
 </resources>

+ 4 - 0
src/main/res/values-en-rGB/strings.xml

@@ -481,6 +481,9 @@
     <string name="file_list__footer__files">%1$d files</string>
     <string name="file_list__footer__files_and_folder">%1$d files, 1 folder</string>
     <string name="file_list__footer__files_and_folders">%1$d files, %2$d folders</string>
+    <string name="set_picture_as">Set picture as</string>
+    <string name="set_as">Set As</string>
+
     <string name="prefs_instant_behaviour_dialogTitle">Original file will be&#8230;</string>
     <string name="prefs_instant_behaviour_title">Original file will be&#8230;</string>
     <string name="upload_copy_files">Copy file</string>
@@ -653,5 +656,6 @@
     <!-- Notifications -->
     <string name="new_notification_received">New notification received</string>
     <string name="drawer_logout">Logout</string>
+    <string name="picture_set_as_no_app">No app found to set a picture with!</string>
     <string name="privacy">Privacy</string>
 </resources>

+ 8 - 0
src/main/res/values-es-rMX/strings.xml

@@ -482,6 +482,9 @@ en los últimos 7 días. </string>
     <string name="file_list__footer__files">%1$d archivos</string>
     <string name="file_list__footer__files_and_folder">%1$d archivos, 1 carpeta</string>
     <string name="file_list__footer__files_and_folders">%1$d archivos, %2$d carpetas</string>
+    <string name="set_picture_as">Establecer imagen como</string>
+    <string name="set_as">Establecer Como</string>
+
     <string name="prefs_instant_behaviour_dialogTitle">El archivo original será&#8230;</string>
     <string name="prefs_instant_behaviour_title">El archivo original será&#8230;</string>
     <string name="upload_copy_files">Copiar archivo</string>
@@ -560,6 +563,10 @@ en los últimos 7 días. </string>
     <string name="participate_release_candidate_headline">Candidato a lanzamiento</string>
     <string name="participate_release_candidate_text">El candidato a lanzamiento (CL) es una foto del más próximo lanzamiento y se espera que sea estable. Las pruebas a su configuración individual podrían ayudarnos a asegurar esto. Regístrese para hacer pruebas en la Play Store o consulte directamente la sección de \"versiones\" en F-Droid. </string>
     <string name="participate_contribute_headline">Contribuya activamente</string>
+    <string name="participate_contribute_irc_text">Únase a las conversaciones en IRC: &lt;a href=\"%1$s\">#nextcloud-mobile&lt;/a></string>
+    <string name="participate_contribute_forum_text">Ayude a los demás en el &lt;a href=\"%1$s\">foro&lt;/a></string>
+    <string name="participate_contribute_translate_text">&lt;a href=\"%1$s\">Traduzca&lt;/a> la aplicación </string>
+    <string name="participate_contribute_github_text">Revise, corrija y escriba código, consulte &lt;a href=\"%1$s\">CONTRIBUIR.md&lt;/a> para más detalles </string>
     <string name="move_to">Mover a&#8230;</string>
     <string name="copy_to">Copiar a&#8230;</string>
     <string name="choose_remote_folder">Seleccione la carpeta&#8230;</string>
@@ -650,5 +657,6 @@ en los últimos 7 días. </string>
     <!-- Notifications -->
     <string name="new_notification_received">No se han recibido nuevas notificaciones </string>
     <string name="drawer_logout">Salir de la sesión</string>
+    <string name="picture_set_as_no_app">¡No se encontró una aplicación con la cual establecer una imagen!</string>
     <string name="privacy">Privacidad</string>
 </resources>

+ 4 - 0
src/main/res/values-fr/strings.xml

@@ -481,6 +481,9 @@
     <string name="file_list__footer__files">%1$d fichiers</string>
     <string name="file_list__footer__files_and_folder">%1$d fichiers, 1 dossier</string>
     <string name="file_list__footer__files_and_folders">%1$d fichiers, %2$d dossiers</string>
+    <string name="set_picture_as">Utiliser l\'image comme</string>
+    <string name="set_as">Utiliser comme</string>
+
     <string name="prefs_instant_behaviour_dialogTitle">Le fichier original sera&#8230;</string>
     <string name="prefs_instant_behaviour_title">Le fichier original sera&#8230;</string>
     <string name="upload_copy_files">Copier le fichier</string>
@@ -653,5 +656,6 @@
     <!-- Notifications -->
     <string name="new_notification_received">Nouvelle notification reçue</string>
     <string name="drawer_logout">Se déconnecter</string>
+    <string name="picture_set_as_no_app">Aucune application trouvée pour utiliser cette image !</string>
     <string name="privacy">Vie privée</string>
 </resources>

+ 44 - 1
src/main/res/values-is/strings.xml

@@ -90,6 +90,7 @@ Smelltu hér til að fá þér einn frá þjónustuaðila.</string>
     <string name="uploader_error_title_file_cannot_be_uploaded">Ekki er hægt að senda þessa skrá inn</string>
     <string name="uploader_error_message_read_permission_not_granted">%1$s hefur ekki heimild til að lesa móttekna skrá</string>
     <string name="uploader_error_message_source_file_not_found">Skrá sem valin var til sendingar fannst ekki. Athugaðu hvort skráin sé til</string>
+    <string name="uploader_error_message_source_file_not_copied">Gat ekki afritað skrá í bráðabirgðamöppu. Prófaðu að endursenda hana.</string>
     <string name="uploader_upload_files_behaviour">Valkostir innsendingar:</string>
     <string name="uploader_upload_files_behaviour_move_to_nextcloud_folder">Flytja skrá í Nextcloud-möppu</string>
     <string name="uploader_upload_files_behaviour_only_upload">Halda skrá í upprunamöppu</string>
@@ -135,6 +136,7 @@ Smelltu hér til að fá þér einn frá þjónustuaðila.</string>
     <string name="filedetails_download">Niðurhal</string>
     <string name="filedetails_sync_file">Samstilla</string>
     <string name="filedetails_renamed_in_upload_msg">Skrá endurnefnd sem %1$s við innsendingu</string>
+    <string name="list_layout">Framsetning sem listi</string>
     <string name="action_share">Deila</string>
     <string name="common_yes">Já</string>
     <string name="common_no">Nei</string>
@@ -203,12 +205,14 @@ Smelltu hér til að fá þér einn frá þjónustuaðila.</string>
     <string name="sync_fail_in_favourites_content">Efni %1$d skráa var ekki hægt að samstilla (%2$d árekstrar)</string>
     <string name="sync_foreign_files_forgotten_ticker">Sumar staðværar skrár gleymdust</string>
     <string name="sync_foreign_files_forgotten_content">%1$d skrár úr %2$s möppunni var ekki hægt að afrita í</string>
+    <string name="sync_foreign_files_forgotten_explanation">Frá og með útgáfu 1.3.16, eru skrár sem sendar eru inn frá þessu tæki afritaðar inn í staðværu %1$s möppuna, til að koma í veg fyrir gagnatap þegar stök skrá er samstillt við marga notendaaðganga.\n\nVegna þessarar breytingar, hafa allar skrár sem innsendar voru með eldri útgáfum þessa forrits nú verið afritaðar inn í %2$s möppuna. Hinsvegar kom villa í veg fyrir að hægt væri að ljúka aðgerðinni á meðan samstilling fór fram á notandaaðgangnum. Þú getur annað hvort látið skrána/skrárnar vera eins og þær eru nú og fjarlægt tengilinn í %3$s, eða fært skrána/skrárnar inn í %1$s möppuna og haldið tenglinum á %4$s.\n\nHér fyrir neðan eru staðværu skrárnar taldar upp, ásamt þeim fjartengdu skrám á %5$s sem þær voru tengdar.</string>
     <string name="sync_current_folder_was_removed">Mappan %1$ser ekki lengur til</string>
     <string name="foreign_files_move">Færa allt</string>
     <string name="foreign_files_success">Allar skrár voru færðar</string>
     <string name="foreign_files_fail">Ekki tókst að færa allar skrár</string>
     <string name="foreign_files_local_text">Staðvært: %1$s</string>
     <string name="foreign_files_remote_text">Fjartengt: %1$s</string>
+    <string name="upload_query_move_foreign_files">Ónógt pláss hamlar því að hægt sé að afrita valdar skrár í %1$s möppuna. Viltu færa þær þangað í staðinn?</string>
     <string name="pass_code_enter_pass_code">Settu inn lykilkóðann þinn</string>
     
     <string name="pass_code_configure_your_pass_code">Settu inn lykilkóða</string>
@@ -226,11 +230,13 @@ Smelltu hér til að fá þér einn frá þjónustuaðila.</string>
     <string name="media_event_done">%1$s afspilun lokið</string>
     <string name="media_err_nothing_to_play">Engin margmiðlunarskrá fannst</string>
     <string name="media_err_no_account">Enginn notandaaðgangur uppgefinn</string>
+    <string name="media_err_not_in_owncloud">Skráin er ekki á gildum notandaaðgangi</string>
     <string name="media_err_unsupported">Óstudd margmiðlunarlyklun (codec)</string>
     <string name="media_err_io">Gat ekki lesið margmiðlunarskrána</string>
     <string name="media_err_malformed">Margmiðlunarskráin er með ranga kóðun</string>
     <string name="media_err_timeout">Tilraun til að spila skrá rann út á tíma</string>
     <string name="media_err_invalid_progressive_playback">Ekki tókst að streyma margmiðlunarskrá</string>
+    <string name="media_err_unknown">Upprunalegi margmiðlunarspilarinn ræður ekki við að spila þessa margmiðlunarskrá  </string>
     <string name="media_err_security_ex">Öryggissvilla kom upp við að reyna að spila  %1$s</string>
     <string name="media_err_io_ex">Óvænt villa kom upp við að reyna að spila  %1$s</string>
     <string name="media_err_unexpected">Óvænt villa kom upp við að reyna að spila  %1$s</string>
@@ -245,6 +251,7 @@ Smelltu hér til að fá þér einn frá þjónustuaðila.</string>
 	<string name="auth_connection_established">Tengingu komið á</string>
 	<string name="auth_testing_connection">Prófa tengingu</string>
 	<string name="auth_not_configured_title">Gölluð uppsetning þjóns</string>
+	<string name="auth_account_not_new">Aðgangur fyrir sama notanda og vefþjón er þegar til staðar á tækinu</string>
 	<string name="auth_account_not_the_same">Notandanafnið sem sett var inn samsvarar ekki notanda þessa aðgangs</string>
 	<string name="auth_unknown_error_title">Óþekkt villa kom upp!</string>
 	<string name="auth_unknown_host_title">Gat ekki fundið hýsilvél</string>
@@ -266,6 +273,7 @@ Smelltu hér til að fá þér einn frá þjónustuaðila.</string>
 	<string name="auth_connecting_auth_server">Tengist við auðkenningarþjón …</string>
 	<string name="auth_unsupported_auth_method">Þjónninn styður ekki þessa auðkenningaraðferð</string>
 	<string name="auth_unsupported_multiaccount">%1$s styður ekki fjölaðganga</string>
+	<string name="auth_fail_get_user_name">Vefþjónninn þinn er ekki að svara með réttu notandaauðkenni, hafðu samband við kerfisstjóra.</string>
 	<string name="auth_can_not_auth_against_server">Get ekki auðkennt á þessum þjóni</string>
     <string name="auth_account_does_not_exist">Aðgangur er ekki ennþá til á tækinu</string>
 
@@ -282,6 +290,7 @@ Smelltu hér til að fá þér einn frá þjónustuaðila.</string>
     <string name="remove_success_msg">Fjarlægt</string>
     <string name="remove_fail_msg">Fjarlæging mistókst</string>
     <string name="rename_dialog_title">Settu inn nýtt nafn</string>
+    <string name="rename_local_fail_msg">Ekki var hægt að endurnefna staðvært afrit, prófaðu annað nafn</string>
     <string name="rename_server_fail_msg">Gat ekki gefið þjóni nýtt nafn</string>
     <string name="sync_file_fail_msg">Gat ekki athugað fjartengda skrá</string>
     <string name="sync_file_nothing_to_do_msg">Efni skrár er þegar samstillt</string>
@@ -380,6 +389,8 @@ Smelltu hér til að fá þér einn frá þjónustuaðila.</string>
     <string name="network_error_socket_exception">Villa kom upp við að tengjast þjóninum.</string>
     <string name="network_error_socket_timeout_exception">Villa kom upp á meðan beðið var eftir þjóninum. Ekki var hægt að ljúka aðgerðinni</string>
     <string name="network_error_connect_timeout_exception">Villa kom upp á meðan beðið var eftir þjóninum. Ekki var hægt að ljúka aðgerðinni</string>
+    <string name="network_host_not_available">Gat ekki lokið aðgerð. Þjónn ekki tiltækur</string>
+
     <string name="forbidden_permissions">Þú hefur ekki heimild %s</string>
     <string name="forbidden_permissions_rename">til að endurnefna þessa skrá</string>
     <string name="forbidden_permissions_delete">til að eyða þessari skrá</string>
@@ -392,20 +403,37 @@ Smelltu hér til að fá þér einn frá þjónustuaðila.</string>
 
     <string name="file_migration_dialog_title">Uppfæri slóð á gagnageymslu</string>
     <string name="file_migration_finish_button">Ljúka</string>
+    <string name="file_migration_preparing">Undirbý yfirfærslu&#8230;</string>
     <string name="file_migration_checking_destination">Athuga áfangastað&#8230;</string>
+    <string name="file_migration_saving_accounts_configuration">Vista aðgangsuppsetningar&#8230;</string>
+    <string name="file_migration_waiting_for_unfinished_sync">Bíð eftir að öllum samstillingum ljúki&#8230;</string>
     <string name="file_migration_migrating">Færi gögn&#8230;</string>
     <string name="file_migration_updating_index">Uppfæri atriðaskrá&#8230;</string>
     <string name="file_migration_cleaning">Hreinsa&#8230;</string>
+    <string name="file_migration_restoring_accounts_configuration">Endurheimti aðgangsuppsetningar&#8230;</string>
     <string name="file_migration_ok_finished">Lokið</string>
+    <string name="file_migration_failed_not_enough_space">VILLA: Ónógt pláss</string>
+    <string name="file_migration_failed_not_writable">VILLA: Móttökuskráin er ekki skrifanleg</string>
+    <string name="file_migration_failed_not_readable">VILLA: Upprunaskráin er ekki lesanleg</string>
     <string name="file_migration_failed_dir_already_exists">VILLA: Nextcloud-mappa er þegar til staðar</string>
+    <string name="file_migration_failed_while_coping">VILLA: Mistókst við yfirfærslu</string>
+    <string name="file_migration_failed_while_updating_index">VILLA: Mistókst að uppfæra skráningarvísi</string>
+
+    <string name="file_migration_directory_already_exists">Gagnamappa er þegar til staðar. Veldu eitt af eftirtöldu:</string>
     <string name="file_migration_override_data_folder">Skipta út</string>
     <string name="file_migration_use_data_folder">Nota</string>
 
+    <string name="file_migration_source_not_readable_title">Upprunamappa er ekki lesanleg!</string>
+    <string name="file_migration_source_not_readable">Viltu enn breyta slóð gagnageymslu í %1$s?\n\nAthugaðu: öll gögn þarf að sækja aftur.</string>
+
     <string name="prefs_category_accounts">Notandaaðgangar</string>
     <string name="prefs_add_account">Bæta við notandaaðgangi</string>
     <string name="drawer_manage_accounts">Sýsla með notandaaðganga</string>
-    <string name="actionbar_logger">Annálar</string>
+    <string name="auth_redirect_non_secure_connection_title">Öruggri tengingu endurbeint í gegnum óörugga leið.</string>
+
+	<string name="actionbar_logger">Annálar</string>
 	<string name="log_send_history_button">Ferill sendinga</string>
+	<string name="log_send_no_mail_app">Ekkert forrit fannst til að senda atvikaskrár. Settu upp tölvupóstforrit.</string>
 	<string name="log_send_mail_subject">%1$s annálar Android-forrita</string>
 	<string name="log_progress_dialog_text">Hleð inn gögnum &#8230;</string>
 
@@ -416,6 +444,7 @@ Smelltu hér til að fá þér einn frá þjónustuaðila.</string>
 	<string name="file_list_empty_moving">Ekkert hér. Þú getur bætt við möppu.</string>
 	<string name="folder_picker_choose_button_text">Veldu</string>
 
+    <string name="move_file_not_found">Get ekki fært skrá. Athugaðu hvort hún sé til</string>
     <string name="move_file_invalid_into_descendent">Ekki er hægt að færa möppu inn í eina af undirmöppum sínum</string>
     <string name="move_file_invalid_overwrite">Skráin er þegar til í móttökumöppunni</string>
     <string name="move_file_error">Villa kom upp við að reyna að færa þessa skrá eða möppu</string>
@@ -454,6 +483,9 @@ Smelltu hér til að fá þér einn frá þjónustuaðila.</string>
     <string name="file_list__footer__files">%1$d skrár</string>
     <string name="file_list__footer__files_and_folder">%1$d skrár, 1 mappa</string>
     <string name="file_list__footer__files_and_folders">%1$d skrár, %2$d möppur</string>
+    <string name="set_picture_as">Setja mynd sem</string>
+    <string name="set_as">Setja sem</string>
+
     <string name="prefs_instant_behaviour_dialogTitle">Upprunaleg skrá verður&#8230;</string>
     <string name="prefs_instant_behaviour_title">Upprunaleg skrá verður&#8230;</string>
     <string name="upload_copy_files">Afrita skrá</string>
@@ -489,6 +521,7 @@ Smelltu hér til að fá þér einn frá þjónustuaðila.</string>
     <string name="share_email_clarification">%1$s (tölvupóstur)</string>
     <string name="share_known_remote_clarification">%1$s ( á %2$s )</string>
 
+    <string name="share_sharee_unavailable">Uppfærðu vefþjóninn til að leyfa deilingu milli notenda innan úr biðlaraforritum þeirra.\nHafðu samband við kerfisstjórann þinn</string>
     <string name="share_privilege_can_share">getur deilt</string>
     <string name="share_privilege_can_edit">getur breytt</string>
     <string name="share_privilege_can_edit_create">búið til</string>
@@ -506,6 +539,7 @@ Smelltu hér til að fá þér einn frá þjónustuaðila.</string>
     <string name="action_switch_list_view">Listi</string>
 
     <string name="manage_space_title">Sýsla með geymslurými</string>
+    <string name="manage_space_description">Stillingum, gagnagrunni og skilríkjum vefþjóns úr gögnum %1$s verður eytt endanlega. \n\nSóttar skrár verða ekki snertar.\n\nÞetta ferli getur tekið drjúga stund.</string>
     <string name="manage_space_clear_data">Hreinsa gögn</string>
     <string name="manage_space_error">Ekki tókst að eyða öllum skrám.</string>
 
@@ -530,6 +564,10 @@ Smelltu hér til að fá þér einn frá þjónustuaðila.</string>
     <string name="participate_release_candidate_headline">Forútgáfa</string>
     <string name="participate_release_candidate_text">Útgáfukandídat (RC) er stöðutaka á væntanlegri útgáfu og er vænst til að hún sé nokkuð stöðug. Með prófun á uppsetningunni þinni værirðu að hjálpa til við að tryggja þann stöðugleika. Skráðu þig til prófana í Play-safninu eða skoðaðu handvirkt í \"útgáfur\" hlutanum á F-Droid.</string>
     <string name="participate_contribute_headline">Vertu virkur þáttakandi</string>
+    <string name="participate_contribute_irc_text">Taktu þátt í spjalli á IRC: &lt;a href=\"%1$s\">#nextcloud-mobile&lt;/a></string>
+    <string name="participate_contribute_forum_text">Hjálpaðu öðrum á &lt;a href=\"%1$s\">spjallvefnum&lt;/a></string>
+    <string name="participate_contribute_translate_text">&lt;a href=\"%1$s\">Þýða&lt;/a> forritið</string>
+    <string name="participate_contribute_github_text">Yfirfarðu, bættu og skrifaðu kóða, skoðaðu &lt;a href=\"%1$s\">CONTRIBUTING.md&lt;a> fyrir nánari upplýsingar</string>
     <string name="move_to">Færa í&#8230;</string>
     <string name="copy_to">Afrita í&#8230;</string>
     <string name="choose_remote_folder">Veldu möppu&#8230;</string>
@@ -537,6 +575,7 @@ Smelltu hér til að fá þér einn frá þjónustuaðila.</string>
     <string name="folder_sync_no_results">Engar margmiðlunarmöppur fundust</string>
     <string name="folder_sync_preferences">Kjörstillingar fyrir sjálfvirkar innsendingar</string>
     <string name="folder_sync_settings">Stillingar</string>
+    <string name="folder_sync_new_info">Beinar innsendingar hafa verið algerlega endurhannaðar. Endurstilltu sjálfvirkar innsendingar beint í aðalvalmyndinni\n\nNjóttu góðs af nýju og ítarlegu viðmóti sjálfvirkra innsendinga.</string>
     <string name="folder_sync_preferences_folder_path">Fyrir %1$s</string>
     <plurals name="items_selected_count">
         <item quantity="one">%d valið</item>
@@ -550,6 +589,7 @@ Smelltu hér til að fá þér einn frá þjónustuaðila.</string>
     <string name="notifications_no_results_headline">Engar tilkynningar</string>
     <string name="notifications_no_results_message">Athugaðu aftur síðar.</string>
 
+    <string name="upload_file_dialog_title">Settu inn skráarheiti og skráategund fyrir innsendingu</string>
     <string name="upload_file_dialog_filename">Skráarheiti</string>
     <string name="upload_file_dialog_filetype">Skráartegund</string>
     <string name="upload_file_dialog_filetype_snippet_text">Textabútsskrá(.txt)</string>
@@ -607,14 +647,17 @@ Smelltu hér til að fá þér einn frá þjónustuaðila.</string>
     <string name="contactlist_title">Endurheimta tengiliði</string>
     <string name="contaclist_restore_selected">Endurheimta valda tengiliði</string>
     <string name="contactlist_account_chooser_title">Veldu aðgang til að flytja inn</string>
+    <string name="contactlist_no_permission">Engin heimild gefin, ekkert flutt inn!</string>
     <string name="contacts_preference_choose_date">Veldu dagsetningu</string>
     <string name="contacts_preference_backup_never">aldrei</string>
     <string name="contacts_preferences_no_file_found">Engin skrá fannst</string>
+    <string name="contacts_preferences_something_strange_happened">Við finnum ekki síðasta öryggisafritið þitt!</string>
     <string name="contacts_preferences_backup_scheduled">Öryggisafritun er á áætlun og mun hefjast fljótlega</string>
     <string name="contacts_preferences_import_scheduled">Innflutningur er á áætlun og mun hefjast fljótlega</string>
 
     <!-- Notifications -->
     <string name="new_notification_received">Tók á móti nýrri tilkynningu</string>
     <string name="drawer_logout">Útskráning</string>
+    <string name="picture_set_as_no_app">Engin forrit fundust til að setja mynd!</string>
     <string name="privacy">Gagnaleynd</string>
 </resources>

+ 10 - 2
src/main/res/values-nb-rNO/strings.xml

@@ -281,7 +281,7 @@
     <string name="unfavorite">Fjern som tilgjengelig frakoblet</string>
     <string name="favorite_real">Sett som favoritt</string>
     <string name="unset_favorite_real">Fjern favorittmarkering</string>
-    <string name="common_rename">Endre navn</string>
+    <string name="common_rename">Gi nytt navn</string>
     <string name="common_remove">Fjern</string>
     <string name="confirmation_remove_file_alert">Vil du virkelig fjerne %1$s?</string>
     <string name="confirmation_remove_folder_alert">Vil du virkelig fjerne %1$s inkludert innholdet?</string>
@@ -482,6 +482,9 @@
     <string name="file_list__footer__files">%1$d filer</string>
     <string name="file_list__footer__files_and_folder">%1$d filer, 1 mappe</string>
     <string name="file_list__footer__files_and_folders">%1$d filer, %2$d mapper</string>
+    <string name="set_picture_as">Bruk bilde som</string>
+    <string name="set_as">Bruk som</string>
+
     <string name="prefs_instant_behaviour_dialogTitle">Opprinnelig fil vil bli&#8230;</string>
     <string name="prefs_instant_behaviour_title">Opprinnelig fil vil bli&#8230;</string>
     <string name="upload_copy_files">Kopier fil</string>
@@ -519,7 +522,7 @@
 
     <string name="share_sharee_unavailable">Beklager, tjenerversjonen din tillater ikke klienter å dele med brukere. \nKontakt systemadministratoren</string>
     <string name="share_privilege_can_share">kan dele</string>
-    <string name="share_privilege_can_edit">kan endre</string>
+    <string name="share_privilege_can_edit">kan redigere</string>
     <string name="share_privilege_can_edit_create">opprette</string>
     <string name="share_privilege_can_edit_change">endre</string>
     <string name="share_privilege_can_edit_delete">slett</string>
@@ -560,6 +563,10 @@
     <string name="participate_release_candidate_headline">Release candidate</string>
     <string name="participate_release_candidate_text">Release candidate (RC) er en pakke av den kommende utgaven og er forventet å være stabil. Ved å teste denne med ditt oppsett vil kunne hjelpe oss å sikre dette. Meld deg på for testen i Play butikken eller se i versjonsseksjonen i F-Droid.</string>
     <string name="participate_contribute_headline">Bidra aktivt</string>
+    <string name="participate_contribute_irc_text">Sludre med oss på IRC: &lt;a href=\"%1$s\">#nextcloud-mobile&lt;/a></string>
+    <string name="participate_contribute_forum_text">Hjelp andre på vårt &lt;a href=\"%1$s\">forum&lt;/a></string>
+    <string name="participate_contribute_translate_text">&lt;a href=\"%1$s\">Oversett&lt;/a> programmet</string>
+    <string name="participate_contribute_github_text">Bidra som en utvikler, se &lt;a href=\"%1$s\">CONTRIBUTING.md&lt;/a> for detaljer </string>
     <string name="move_to">Flytt til&#8230;</string>
     <string name="copy_to">Kopier til&#8230;</string>
     <string name="choose_remote_folder">Velg mappe&#8230;</string>
@@ -650,5 +657,6 @@
     <!-- Notifications -->
     <string name="new_notification_received">Nytt varsel mottatt</string>
     <string name="drawer_logout">Utlogging</string>
+    <string name="picture_set_as_no_app">Fant ikke noe program å sette bilder med.</string>
     <string name="privacy">Personvern</string>
 </resources>

+ 4 - 0
src/main/res/values-nl/strings.xml

@@ -483,6 +483,9 @@ Kies er eentje van een provider.</string>
     <string name="file_list__footer__files">%1$d bestanden</string>
     <string name="file_list__footer__files_and_folder">%1$d bestanden, 1 map</string>
     <string name="file_list__footer__files_and_folders">%1$d bestanden, %2$d mappen</string>
+    <string name="set_picture_as">Stel afbeelding in als</string>
+    <string name="set_as">Stel in als</string>
+
     <string name="prefs_instant_behaviour_dialogTitle">Origineel bestand zal&#160;&#8230;</string>
     <string name="prefs_instant_behaviour_title">Origineel bestand zal&#160;&#8230;</string>
     <string name="upload_copy_files">Bestand kopiëren</string>
@@ -657,5 +660,6 @@ Kies er eentje van een provider.</string>
     <!-- Notifications -->
     <string name="new_notification_received">Nieuwe meldingen ontvangen</string>
     <string name="drawer_logout">Uitloggen</string>
+    <string name="picture_set_as_no_app">Geen app gevonden om afbeelding in te stellen</string>
     <string name="privacy">Privacy</string>
 </resources>

+ 19 - 16
src/main/res/values-pl/strings.xml

@@ -17,7 +17,7 @@
     <string name="menu_item_sort_by_name_a_z">A - Z</string>
     <string name="menu_item_sort_by_name_z_a">Z - A</string>
     <string name="menu_item_sort_by_date_newest_first">Najnowsze najpierw</string>
-    <string name="menu_item_sort_by_date_oldest_first">Najstarsze najpier</string>
+    <string name="menu_item_sort_by_date_oldest_first">Najstarsze najpierw</string>
     <string name="menu_item_sort_by_size_biggest_first">Największe najpierw</string>
     <string name="menu_item_sort_by_size_smallest_first">Najmniejsze najpierw</string>
 
@@ -42,7 +42,7 @@
     <string name="prefs_category_more">Więcej</string>
     <string name="prefs_accounts">Konta</string>
     <string name="prefs_manage_accounts">Zarządzaj kontami</string>
-    <string name="prefs_passcode">Blokada hasłem</string>
+    <string name="prefs_passcode">Blokada kodem PIN</string>
     <string name="prefs_fingerprint">Blokada odciskiem palca</string>
     <string name="prefs_fingerprint_notsetup">Brak skonfigurowanych odcisków palców</string>
     <string name="prefs_show_hidden_files">Pokaż ukryte pliki</string>
@@ -144,7 +144,7 @@
     <string name="common_cancel_sync">Anuluj synchronizację</string>
     <string name="common_cancel">Anuluj</string>
     <string name="common_back">Wróć</string>
-    <string name="common_save">Zapis</string>
+    <string name="common_save">Zapisz</string>
     <string name="common_save_exit">Zapisz i wyjdź</string>
     <string name="common_error">Błąd</string>
     <string name="common_loading">Wczytuję &#8230;</string>
@@ -211,16 +211,16 @@
     <string name="foreign_files_local_text">Lokalnie: %1$s</string>
     <string name="foreign_files_remote_text">Zdalnie: %1$s</string>
     <string name="upload_query_move_foreign_files">Brak wystarczającego miejsca, aby skopiować wybrane pliki do folderu %1$s. Czy w zamian chcesz je tam przenieść?</string>
-    <string name="pass_code_enter_pass_code">Wymyśl kod PIN.</string>
+    <string name="pass_code_enter_pass_code">Podaj kod PIN</string>
     
-    <string name="pass_code_configure_your_pass_code">Wpisz kod PIN.</string>
-    <string name="pass_code_configure_your_pass_code_explanation">Kod PIN będzie wymagany przy każdym uruchomieniu aplikacji.</string>
-    <string name="pass_code_reenter_your_pass_code">Wpisz kod PIN ponownie.</string>
-    <string name="pass_code_remove_your_pass_code">Usuń swój kod PIN.</string>
-    <string name="pass_code_mismatch">Podane hasła nie są takie same.</string>
-    <string name="pass_code_wrong">Kod PIN nieprawidłowy.</string>
-    <string name="pass_code_removed">Kod PIN został usunięty.</string>
-    <string name="pass_code_stored">Kod PIN został zapisany.</string>
+    <string name="pass_code_configure_your_pass_code">Wymyśl kod PIN</string>
+    <string name="pass_code_configure_your_pass_code_explanation">Kod PIN będzie wymagany przy każdym uruchomieniu aplikacji</string>
+    <string name="pass_code_reenter_your_pass_code">Wpisz kod PIN ponownie</string>
+    <string name="pass_code_remove_your_pass_code">Usuń swój kod PIN</string>
+    <string name="pass_code_mismatch">Podane kody PIN nie są takie same</string>
+    <string name="pass_code_wrong">Kod PIN nieprawidłowy</string>
+    <string name="pass_code_removed">Kod PIN został usunięty</string>
+    <string name="pass_code_stored">Kod PIN został zapisany</string>
     
     <string name="media_notif_ticker">%1$s odtwarzacz muzyki</string>
     <string name="media_state_playing">%1$s (odtwarzany)</string>
@@ -399,7 +399,7 @@
     <string name="uploader_upload_forbidden_permissions">do wysyłania do tego folderu</string>
     <string name="downloader_download_file_not_found">Ten plik nie jest już dostępny na serwerze</string>
 
-    <string name="file_migration_dialog_title">Ścieżka przechowywania aktualizacji</string>
+    <string name="file_migration_dialog_title">Aktualizacja ścieżki przechowywania</string>
     <string name="file_migration_finish_button">Koniec</string>
     <string name="file_migration_preparing">Przygotowywanie migracji&#8230;</string>
     <string name="file_migration_checking_destination">Sprawdzanie docelowe&#8230;</string>
@@ -422,7 +422,7 @@
     <string name="file_migration_use_data_folder">Użyj</string>
 
     <string name="file_migration_source_not_readable_title">Nie można odczytać katalogu źródłowego!</string>
-    <string name="file_migration_source_not_readable">Czy nadal chcesz zmienić ścieżkę do %1$s?\n\nUwaga: Wszystkie dane będą musiały zostać ponownie pobrane.</string>
+    <string name="file_migration_source_not_readable">Czy nadal chcesz zmienić ścieżkę przechowywania na %1$s?\n\nUwaga: Wszystkie dane będą musiały zostać pobrane ponownie.</string>
 
     <string name="prefs_category_accounts">Konta</string>
     <string name="prefs_add_account">Dodaj konto</string>
@@ -481,6 +481,9 @@
     <string name="file_list__footer__files">%1$d plików</string>
     <string name="file_list__footer__files_and_folder">%1$d plików, 1 folder</string>
     <string name="file_list__footer__files_and_folders">%1$d plików, %2$d folderów</string>
+    <string name="set_picture_as">Ustaw obraz jako</string>
+    <string name="set_as">Ustaw jako</string>
+
     <string name="prefs_instant_behaviour_dialogTitle">Oryginalny plik zostanie&#8230;</string>
     <string name="prefs_instant_behaviour_title">Oryginalny plik zostanie&#8230;</string>
     <string name="upload_copy_files">Kopiuj plik</string>
@@ -605,12 +608,12 @@
     <string name="welcome_feature_1_text">Dostęp do, współdzielenie i ochrona twoich plików w domu i w pracy</string>
 
     <string name="welcome_feature_2_title">Wiele kont</string>
-    <string name="welcome_feature_2_text">Podłączenie się do wszystkich chmur</string>
+    <string name="welcome_feature_2_text">Podłączenie się do wszystkich swoich chmur</string>
 
     <string name="welcome_feature_3_title">Natychmiastowe wysyłanie</string>
     <string name="welcome_feature_3_text">Twoje zdjęcia będą bezpieczne</string>
 
-    <string name="whats_new_skip">Pominąć</string>
+    <string name="whats_new_skip">Pomiń</string>
 
     <string name="fingerprint_scan_finger">Umieść palec na czytniku odcisku palca</string>
     <string name="fingerprint_unknown">Nie rozpoznano odcisku palca</string>

+ 5 - 1
src/main/res/values-pt-rBR/strings.xml

@@ -482,6 +482,9 @@
     <string name="file_list__footer__files">%1$d arquivos</string>
     <string name="file_list__footer__files_and_folder">%1$d arquivos, 1 pasta</string>
     <string name="file_list__footer__files_and_folders">%1$d arquivos, %2$d pastas</string>
+    <string name="set_picture_as">Definir imagem como</string>
+    <string name="set_as">Definir Como</string>
+
     <string name="prefs_instant_behaviour_dialogTitle">O arquivo original será&#8230;</string>
     <string name="prefs_instant_behaviour_title">O arquivo original será&#8230;</string>
     <string name="upload_copy_files">Copiar o arquivo</string>
@@ -561,7 +564,7 @@
     <string name="participate_release_candidate_text">O release candidate (RC) é um instantâneo da próxima versão e espera-se que seja estável. Testar sua configuração individual pode ajudar a garantir isso. Inscreva-se para testar na Play Store ou confira a seção \"versões\" no F-Droid.</string>
     <string name="participate_contribute_headline">Contribuir ativamente</string>
     <string name="participate_contribute_irc_text">Junte-se ao chat no IRC:&lt;a href=\"%1$s\">#nextcloud-mobile&lt;/a></string>
-    <string name="participate_contribute_forum_text">Ajude os outros no &lt;a href=\"%1$s\">forum&lt;/a></string>
+    <string name="participate_contribute_forum_text">Ajude os outros no &lt;a href=\"%1$s\">fórum&lt;/a></string>
     <string name="participate_contribute_translate_text">&lt;a href=\"%1$s\">Traduzir&lt;/a> o aplicativo</string>
     <string name="participate_contribute_github_text">Rever, alterar e escrever código, consulte &lt;a href=\"%1$s\">CONTRIBUTING.md&lt;a> para detalhes</string>
     <string name="move_to">Mover para&#8230;</string>
@@ -654,5 +657,6 @@
     <!-- Notifications -->
     <string name="new_notification_received">Nova notificação recebida</string>
     <string name="drawer_logout">Sair</string>
+    <string name="picture_set_as_no_app">Nenhum aplicativo encontrado para atribuir uma imagem!</string>
     <string name="privacy">Privacidade</string>
 </resources>

+ 4 - 0
src/main/res/values-ru/strings.xml

@@ -484,6 +484,9 @@
     <string name="file_list__footer__files">%1$d файлов</string>
     <string name="file_list__footer__files_and_folder">%1$d файлов, 1 каталог</string>
     <string name="file_list__footer__files_and_folders">%1$d файлов, %2$d каталогов</string>
+    <string name="set_picture_as">Установить изображение как</string>
+    <string name="set_as">Установить как</string>
+
     <string name="prefs_instant_behaviour_dialogTitle">Исходный файл будет&#8230;</string>
     <string name="prefs_instant_behaviour_title">Исходный файл будет&#8230;</string>
     <string name="upload_copy_files">Копировать файл</string>
@@ -658,5 +661,6 @@
     <!-- Notifications -->
     <string name="new_notification_received">Получено новое уведомление</string>
     <string name="drawer_logout">Выйти</string>
+    <string name="picture_set_as_no_app">Не надено приложения, с помощью которого можно установить изображение!</string>
     <string name="privacy">Конфиденциальность</string>
 </resources>

+ 6 - 0
src/main/res/values-sq/strings.xml

@@ -482,6 +482,9 @@ në 7 ditët e fundit.</string>
     <string name="file_list__footer__files">%1$d skedar</string>
     <string name="file_list__footer__files_and_folder">%1$d skedare, 1 dosje</string>
     <string name="file_list__footer__files_and_folders">%1$d skedare, %2$d dosje</string>
+    <string name="set_picture_as">Vendos fotografinë</string>
+    <string name="set_as">Vendos Si</string>
+
     <string name="prefs_instant_behaviour_dialogTitle">Skedari origjinal do të jetë&#8230;</string>
     <string name="prefs_instant_behaviour_title">Skedari origjinal do të jetë&#8230;</string>
     <string name="upload_copy_files">Kopjoje kartelën</string>
@@ -543,6 +546,8 @@ në 7 ditët e fundit.</string>
     <string name="local_file_not_found_toast">Skedari s’u gjet te sistemi vendor i skedarëve</string>
     <string name="confirmation_remove_files_alert">Doni vërtetë të hiqni artikujt e zgjedhur?</string>
     <string name="confirmation_remove_folders_alert">Doni vërtet të hiqni artikujt e zgjedhur dhe përmbajtjen e tyre?</string>
+    <string name="maintenance_mode">Shërbyesi në gjëndje mirëmbajtjeje</string>
+
     <string name="uploads_view_upload_status_waiting_for_charging">Duke pritur që pajisja të karikohet</string>
     <string name="actionbar_search">Kërkoni</string>
     <string name="files_drop_not_supported">Ky është një tipar i Nextcloud-it, ju lutemi përditësojeni.</string>
@@ -648,5 +653,6 @@ në 7 ditët e fundit.</string>
     <!-- Notifications -->
     <string name="new_notification_received">Morët njoftime të reja</string>
     <string name="drawer_logout">Dilni</string>
+    <string name="picture_set_as_no_app">Nuk u gjet aplikacioni me të cilin vendoset foto!</string>
     <string name="privacy">Privatësi</string>
 </resources>

+ 4 - 0
src/main/res/values-tr/strings.xml

@@ -482,6 +482,9 @@
     <string name="file_list__footer__files">%1$d dosya</string>
     <string name="file_list__footer__files_and_folder">%1$d dosya, 1 klasör</string>
     <string name="file_list__footer__files_and_folders">%1$d dosya, %2$d klasör</string>
+    <string name="set_picture_as">Farklı görsel ayarla</string>
+    <string name="set_as">Farklı Ayarla</string>
+
     <string name="prefs_instant_behaviour_dialogTitle">Özgün dosya için&#8230;</string>
     <string name="prefs_instant_behaviour_title">Özgün dosya için&#8230;</string>
     <string name="upload_copy_files">Dosyayı kopyala</string>
@@ -654,5 +657,6 @@
     <!-- Notifications -->
     <string name="new_notification_received">Yeni bir bildirim var</string>
     <string name="drawer_logout">Oturumu Kapat</string>
+    <string name="picture_set_as_no_app">Görselin ayarlanabileceği bir uygulama bulunamadı!</string>
     <string name="privacy">Gizlilik</string>
 </resources>

+ 9 - 0
src/main/res/values-zh-rCN/strings.xml

@@ -207,6 +207,7 @@
     <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 文件夹,以防止某个单一文件在多个账户间同步而造成的数据损失。\n\n 由于此项变化,此应用之前的版本上传的全部文件都已被复制到了 %2$s 文件夹。然而,账户同步期间有一个错误阻止了此操作的完成。您可能想保持文件不动,并移除指向 %3$s 的链接,或将文件移动到 %1$s 文件夹中并保持其到 %4$s 的链接。下面列出的是本地文件,以及它们被链接到的 %5$s 中的远程文件。</string>
     <string name="sync_current_folder_was_removed">文件夹%1$s不再存在</string>
     <string name="foreign_files_move">移动所有</string>
     <string name="foreign_files_success">所有文件已被移动</string>
@@ -484,6 +485,9 @@
     <string name="file_list__footer__files">%1$d 个文件</string>
     <string name="file_list__footer__files_and_folder">%1$d 个文件,1 个文件夹</string>
     <string name="file_list__footer__files_and_folders">%1$d 个文件,%2$d 个文件夹</string>
+    <string name="set_picture_as">设置图片</string>
+    <string name="set_as">设置</string>
+
     <string name="prefs_instant_behaviour_dialogTitle">原始文件将会&#8230;</string>
     <string name="prefs_instant_behaviour_title">原始文件将会&#8230;</string>
     <string name="upload_copy_files">复制文件</string>
@@ -562,6 +566,10 @@
     <string name="participate_release_candidate_headline">发行候选版本</string>
     <string name="participate_release_candidate_text">发布候选人(RC)是即将发布的快照,预计将稳定。 测试您的个人设置可以帮助确保这一点。 注册在Play商店进行测试,或手动查看F-Droid上的“版本”部分。</string>
     <string name="participate_contribute_headline">活跃的候选版</string>
+    <string name="participate_contribute_irc_text">在IRC上加入这个会话: &lt;a href=\"%1$s\">#nextcloud-mobile&lt;/a></string>
+    <string name="participate_contribute_forum_text">帮助他人在 &lt;a href=\"%1$s\">论坛&lt;/a></string>
+    <string name="participate_contribute_translate_text">&lt;a href=\"%1$s\">翻译e&lt;/a> 应用程序</string>
+    <string name="participate_contribute_github_text">查看,修改和编写代码,有关详细信息,请参阅&lt;a   href=\"%1$s\">CONTRIBUTING.md&lt;/a> </string>
     <string name="move_to">转移到&#8230;</string>
     <string name="copy_to">复制到</string>
     <string name="choose_remote_folder">选择文件夹&#8230;</string>
@@ -651,5 +659,6 @@
     <!-- Notifications -->
     <string name="new_notification_received">收到新提示</string>
     <string name="drawer_logout">退出</string>
+    <string name="picture_set_as_no_app">没有应用程序发现设置图片!</string>
     <string name="privacy">隐私</string>
 </resources>

+ 0 - 20
src/modified/AndroidManifest.xml

@@ -34,17 +34,6 @@
         <meta-data android:name="com.google.android.gms.version"
                    android:value="@integer/google_play_services_version" />
 
-        <activity
-            android:name=".ui.activity.ModifiedFileDisplayActivity"
-            android:label="@string/app_name"
-            android:theme="@style/Theme.ownCloud.Toolbar.Drawer">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-
-                <category android:name="android.intent.category.LAUNCHER" />
-            </intent-filter>
-        </activity>
-
         <activity
             android:name=".authentication.ModifiedAuthenticatorActivity"
             android:exported="true"
@@ -71,15 +60,6 @@
             </intent-filter>
         </activity>
 
-        <activity
-            android:name=".ui.activity.FileDisplayActivity"
-            tools:node="remove"/>
-
-        <activity-alias
-            android:name=".ui.activity.FileDisplayActivity"
-            android:targetActivity=".ui.activity.ModifiedFileDisplayActivity"
-            tools:replace="android:targetActivity"/>
-
         <activity-alias
             android:name=".authentication.AuthenticatorActivity"
             android:targetActivity=".authentication.ModifiedAuthenticatorActivity"

+ 0 - 36
src/modified/java/com/owncloud/android/ui/activity/ModifiedFileDisplayActivity.java

@@ -1,36 +0,0 @@
-/**
- * Nextcloud Android client application
- *
- * @author Mario Danic
- * Copyright (C) 2017 Mario Danic
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * at your option) any later version.
- *
- * 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 Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-package com.owncloud.android.ui.activity;
-
-import com.owncloud.android.ui.events.TokenPushEvent;
-import com.owncloud.android.utils.PushUtils;
-
-import org.greenrobot.eventbus.Subscribe;
-import org.greenrobot.eventbus.ThreadMode;
-
-public class ModifiedFileDisplayActivity extends FileDisplayActivity {
-
-    @Subscribe(threadMode = ThreadMode.BACKGROUND)
-    public void onMessageEvent(TokenPushEvent event) {
-        PushUtils.pushRegistrationToServer();
-    }
-
-}

+ 49 - 42
src/modified/java/com/owncloud/android/utils/PushUtils.java

@@ -76,7 +76,7 @@ public class PushUtils {
 
     private static ArbitraryDataProvider arbitraryDataProvider;
 
-    private static String generateSHA512Hash(String pushToken) {
+    public static String generateSHA512Hash(String pushToken) {
         MessageDigest messageDigest = null;
         try {
             messageDigest = MessageDigest.getInstance("SHA-512");
@@ -88,7 +88,7 @@ public class PushUtils {
         return "";
     }
 
-    private static String bytesToHex(byte[] bytes) {
+    public static String bytesToHex(byte[] bytes) {
         StringBuilder result = new StringBuilder();
         for (byte individualByte : bytes) {
             result.append(Integer.toString((individualByte & 0xff) + 0x100, 16)
@@ -202,56 +202,63 @@ public class PushUtils {
 
                 Context context = MainApp.getAppContext();
                 String providerValue;
+                PushConfigurationState accountPushData = null;
                 Gson gson = new Gson();
                 for (Account account : AccountUtils.getAccounts(context)) {
-                    if (!TextUtils.isEmpty(providerValue = arbitraryDataProvider.getValue(account, KEY_PUSH))) {
-                        PushConfigurationState accountPushData = gson.fromJson(providerValue,
+                    providerValue = arbitraryDataProvider.getValue(account, KEY_PUSH);
+                    if (!TextUtils.isEmpty(providerValue)) {
+                        accountPushData = gson.fromJson(providerValue,
                                 PushConfigurationState.class);
-                        if (!accountPushData.getPushToken().equals(token) && !accountPushData.isShouldBeDeleted()) {
-                            try {
-                                OwnCloudAccount ocAccount = new OwnCloudAccount(account, context);
-                                OwnCloudClient mClient = OwnCloudClientManagerFactory.getDefaultSingleton().
-                                        getClientFor(ocAccount, context);
+                    } else {
+                        accountPushData = null;
+                    }
+
+                    if (accountPushData != null && !accountPushData.getPushToken().equals(token) &&
+                            !accountPushData.isShouldBeDeleted() ||
+                            TextUtils.isEmpty(providerValue)) {
+                        try {
+                            OwnCloudAccount ocAccount = new OwnCloudAccount(account, context);
+                            OwnCloudClient mClient = OwnCloudClientManagerFactory.getDefaultSingleton().
+                                    getClientFor(ocAccount, context);
+
+                            RemoteOperation registerAccountDeviceForNotificationsOperation =
+                                    new RegisterAccountDeviceForNotificationsOperation(pushTokenHash,
+                                            publicKey,
+                                            context.getResources().getString(R.string.push_server_url));
+
+                            RemoteOperationResult remoteOperationResult = registerAccountDeviceForNotificationsOperation.
+                                    execute(mClient);
+
+                            if (remoteOperationResult.isSuccess()) {
+                                PushResponse pushResponse = remoteOperationResult.getPushResponseData();
 
-                                RemoteOperation registerAccountDeviceForNotificationsOperation =
-                                        new RegisterAccountDeviceForNotificationsOperation(pushTokenHash,
-                                                publicKey,
-                                                context.getResources().getString(R.string.push_server_url));
+                                RemoteOperation registerAccountDeviceForProxyOperation = new
+                                        RegisterAccountDeviceForProxyOperation(
+                                        context.getResources().getString(R.string.push_server_url),
+                                        token, pushResponse.getDeviceIdentifier(), pushResponse.getSignature(),
+                                        pushResponse.getPublicKey());
 
-                                RemoteOperationResult remoteOperationResult = registerAccountDeviceForNotificationsOperation.
-                                        execute(mClient);
+                                remoteOperationResult = registerAccountDeviceForProxyOperation.execute(mClient);
 
                                 if (remoteOperationResult.isSuccess()) {
-                                    PushResponse pushResponse = remoteOperationResult.getPushResponseData();
-
-                                    RemoteOperation registerAccountDeviceForProxyOperation = new
-                                            RegisterAccountDeviceForProxyOperation(
-                                            context.getResources().getString(R.string.push_server_url),
-                                            token, pushResponse.getDeviceIdentifier(), pushResponse.getSignature(),
-                                            pushResponse.getPublicKey());
-
-                                    remoteOperationResult = registerAccountDeviceForProxyOperation.execute(mClient);
-
-                                    if (remoteOperationResult.isSuccess()) {
-                                        PushConfigurationState pushArbitraryData = new PushConfigurationState(token,
-                                                pushResponse.getDeviceIdentifier(), pushResponse.getSignature(),
-                                                pushResponse.getPublicKey(), false);
-                                        arbitraryDataProvider.storeOrUpdateKeyValue(account, KEY_PUSH,
-                                                gson.toJson(pushArbitraryData));
-                                    }
+                                    PushConfigurationState pushArbitraryData = new PushConfigurationState(token,
+                                            pushResponse.getDeviceIdentifier(), pushResponse.getSignature(),
+                                            pushResponse.getPublicKey(), false);
+                                    arbitraryDataProvider.storeOrUpdateKeyValue(account, KEY_PUSH,
+                                            gson.toJson(pushArbitraryData));
                                 }
-                            } catch (com.owncloud.android.lib.common.accounts.AccountUtils.AccountNotFoundException e) {
-                                Log_OC.d(TAG, "Failed to find an account");
-                            } catch (AuthenticatorException e) {
-                                Log_OC.d(TAG, "Failed via AuthenticatorException");
-                            } catch (IOException e) {
-                                Log_OC.d(TAG, "Failed via IOException");
-                            } catch (OperationCanceledException e) {
-                                Log_OC.d(TAG, "Failed via OperationCanceledException");
                             }
-                        } else if (accountPushData.isShouldBeDeleted()) {
-                            deleteRegistrationForAccount(account);
+                        } catch (com.owncloud.android.lib.common.accounts.AccountUtils.AccountNotFoundException e) {
+                            Log_OC.d(TAG, "Failed to find an account");
+                        } catch (AuthenticatorException e) {
+                            Log_OC.d(TAG, "Failed via AuthenticatorException");
+                        } catch (IOException e) {
+                            Log_OC.d(TAG, "Failed via IOException");
+                        } catch (OperationCanceledException e) {
+                            Log_OC.d(TAG, "Failed via OperationCanceledException");
                         }
+                    } else if (accountPushData != null && accountPushData.isShouldBeDeleted()) {
+                        deleteRegistrationForAccount(account);
                     }
                 }
             }