Browse Source

Merge branch 'master' into signApk

Tobias Kaminsky 7 years ago
parent
commit
74786b8429
67 changed files with 248 additions and 181 deletions
  1. 2 2
      build.gradle
  2. 1 1
      scripts/lint/lint-results.txt
  3. 9 4
      scripts/lint/lint-up-wrapper.sh
  4. 1 1
      src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java
  5. 13 1
      src/main/java/com/owncloud/android/datamodel/FileSystemDataSet.java
  6. 39 2
      src/main/java/com/owncloud/android/datamodel/FilesystemDataProvider.java
  7. 5 6
      src/main/java/com/owncloud/android/datamodel/ThumbnailsCacheManager.java
  8. 2 1
      src/main/java/com/owncloud/android/db/ProviderMeta.java
  9. 101 39
      src/main/java/com/owncloud/android/providers/FileContentProvider.java
  10. 30 33
      src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java
  11. 2 11
      src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java
  12. 18 5
      src/main/java/com/owncloud/android/ui/activity/ShareActivity.java
  13. 1 7
      src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java
  14. 22 16
      src/main/java/com/owncloud/android/ui/helpers/FileOperationsHelper.java
  15. 1 1
      src/main/java/com/owncloud/android/ui/preview/PreviewImageFragment.java
  16. 0 1
      src/main/res/values-ast/strings.xml
  17. 0 1
      src/main/res/values-bg-rBG/strings.xml
  18. 0 1
      src/main/res/values-ca/strings.xml
  19. 0 1
      src/main/res/values-cs-rCZ/strings.xml
  20. 0 1
      src/main/res/values-da/strings.xml
  21. 0 1
      src/main/res/values-de-rDE/strings.xml
  22. 0 1
      src/main/res/values-de/strings.xml
  23. 0 1
      src/main/res/values-el/strings.xml
  24. 0 1
      src/main/res/values-en-rGB/strings.xml
  25. 0 1
      src/main/res/values-es-rAR/strings.xml
  26. 0 1
      src/main/res/values-es-rCL/strings.xml
  27. 0 1
      src/main/res/values-es-rCO/strings.xml
  28. 0 1
      src/main/res/values-es-rCR/strings.xml
  29. 0 1
      src/main/res/values-es-rDO/strings.xml
  30. 0 1
      src/main/res/values-es-rEC/strings.xml
  31. 0 1
      src/main/res/values-es-rGT/strings.xml
  32. 0 1
      src/main/res/values-es-rHN/strings.xml
  33. 0 1
      src/main/res/values-es-rMX/strings.xml
  34. 0 1
      src/main/res/values-es-rNI/strings.xml
  35. 0 1
      src/main/res/values-es-rPA/strings.xml
  36. 0 1
      src/main/res/values-es-rPE/strings.xml
  37. 0 1
      src/main/res/values-es-rPR/strings.xml
  38. 0 1
      src/main/res/values-es-rPY/strings.xml
  39. 0 1
      src/main/res/values-es-rSV/strings.xml
  40. 0 1
      src/main/res/values-es-rUY/strings.xml
  41. 0 1
      src/main/res/values-es/strings.xml
  42. 0 1
      src/main/res/values-eu/strings.xml
  43. 0 1
      src/main/res/values-fi-rFI/strings.xml
  44. 0 1
      src/main/res/values-fr/strings.xml
  45. 0 1
      src/main/res/values-hu-rHU/strings.xml
  46. 0 1
      src/main/res/values-id/strings.xml
  47. 0 1
      src/main/res/values-is/strings.xml
  48. 0 1
      src/main/res/values-it/strings.xml
  49. 0 1
      src/main/res/values-ja-rJP/strings.xml
  50. 0 1
      src/main/res/values-ka-rGE/strings.xml
  51. 0 1
      src/main/res/values-lt-rLT/strings.xml
  52. 0 1
      src/main/res/values-nb-rNO/strings.xml
  53. 0 1
      src/main/res/values-nl/strings.xml
  54. 0 1
      src/main/res/values-pl/strings.xml
  55. 0 1
      src/main/res/values-pt-rBR/strings.xml
  56. 0 1
      src/main/res/values-ro/strings.xml
  57. 0 1
      src/main/res/values-ru/strings.xml
  58. 0 1
      src/main/res/values-sk-rSK/strings.xml
  59. 0 1
      src/main/res/values-sl/strings.xml
  60. 0 1
      src/main/res/values-sq/strings.xml
  61. 0 1
      src/main/res/values-sr/strings.xml
  62. 0 1
      src/main/res/values-sv/strings.xml
  63. 0 1
      src/main/res/values-tr/strings.xml
  64. 0 1
      src/main/res/values-zh-rCN/strings.xml
  65. 0 1
      src/main/res/values-zh-rTW/strings.xml
  66. 0 1
      src/main/res/values/strings.xml
  67. 1 0
      src/versionDev/res/values/setup.xml

+ 2 - 2
build.gradle

@@ -107,8 +107,8 @@ android {
             versionDev {
                 applicationId "com.nextcloud.android.beta"
                 dimension "default"
-                versionCode 20171211
-                versionName "20171211"
+                versionCode 20171212
+                versionName "20171212"
             }
         }
 

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

@@ -1,2 +1,2 @@
 DO NOT TOUCH; GENERATED BY DRONE
-      <span class="mdl-layout-title">Lint Report: 335 warnings</span>
+      <span class="mdl-layout-title">Lint Report: 334 warnings</span>

+ 9 - 4
scripts/lint/lint-up-wrapper.sh

@@ -17,15 +17,20 @@ returnValue=$?
 
 echo "Branch: $3"
 
-if [ $3 = "master" -a $returnValue -eq 0 ]; then
+if [ $3 = "master" -a $returnValue -ne 1 ]; then
     echo "New master at: https://nextcloud.kaminsky.me/index.php/s/tXwtChzyqMj6I8v"
     curl -u $4:$5 -X PUT https://nextcloud.kaminsky.me/remote.php/webdav/droneLogs/master.html --upload-file build/reports/lint/lint.html
     exit 0
-elif [ $returnValue -eq 1 ]; then
-    if [ -e $6 ] ; then
+else
+    if [ -e $6 ]; then
         6="master-"$(date +%F)
     fi
     echo "New results at https://nextcloud.kaminsky.me/index.php/s/tXwtChzyqMj6I8v ->" $6.html
     curl -u $4:$5 -X PUT https://nextcloud.kaminsky.me/remote.php/webdav/droneLogs/$6.html --upload-file build/reports/lint/lint.html
-    exit 1
+    
+    if [ $returnValue -eq 2 ]; then
+        exit 0
+    else
+        exit $returnValue
+    fi  
 fi

+ 1 - 1
src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java

@@ -461,7 +461,7 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
                             }
                         }).show();
             }
-        }, 1000);
+        }, 60000);
     }
 
     private void parseAndLoginFromWebView(String dataString) {

+ 13 - 1
src/main/java/com/owncloud/android/datamodel/FileSystemDataSet.java

@@ -20,6 +20,8 @@
  */
 package com.owncloud.android.datamodel;
 
+import android.support.annotation.Nullable;
+
 /*
     Model for filesystem data from the database
  */
@@ -32,12 +34,13 @@ public class FileSystemDataSet {
     private boolean isSentForUpload;
     private long foundAt;
     private long syncedFolderId;
+    @Nullable private String crc32;
 
     public FileSystemDataSet() {
     }
 
     public FileSystemDataSet(int id, String localPath, long modifiedAt, boolean isFolder,
-                             boolean isSentForUpload, long foundAt, long syncedFolderId) {
+                             boolean isSentForUpload, long foundAt, long syncedFolderId, @Nullable String crc32) {
         this.id = id;
         this.localPath = localPath;
         this.modifiedAt = modifiedAt;
@@ -45,6 +48,15 @@ public class FileSystemDataSet {
         this.isSentForUpload = isSentForUpload;
         this.foundAt = foundAt;
         this.syncedFolderId = syncedFolderId;
+        this.crc32 = crc32;
+    }
+
+    public String getCrc32() {
+        return crc32;
+    }
+
+    public void setCrc32(String crc32) {
+        this.crc32 = crc32;
     }
 
     public int getId() {

+ 39 - 2
src/main/java/com/owncloud/android/datamodel/FilesystemDataProvider.java

@@ -27,8 +27,14 @@ import android.net.Uri;
 import com.owncloud.android.db.ProviderMeta;
 import com.owncloud.android.lib.common.utils.Log_OC;
 
+import java.io.BufferedInputStream;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
 import java.util.HashSet;
 import java.util.Set;
+import java.util.zip.CRC32;
 
 /**
  * Provider for stored filesystem data.
@@ -119,6 +125,11 @@ public class FilesystemDataProvider {
             cv.put(ProviderMeta.ProviderTableMeta.FILESYSTEM_FILE_SENT_FOR_UPLOAD, false);
             cv.put(ProviderMeta.ProviderTableMeta.FILESYSTEM_SYNCED_FOLDER_ID, syncedFolder.getId());
 
+            long newCrc32 = getFileChecksum(localPath);
+            if (newCrc32 != -1) {
+                cv.put(ProviderMeta.ProviderTableMeta.FILESYSTEM_CRC32, Long.toString(newCrc32));
+            }
+
             Uri result = contentResolver.insert(ProviderMeta.ProviderTableMeta.CONTENT_URI_FILESYSTEM, cv);
 
             if (result == null) {
@@ -127,7 +138,11 @@ public class FilesystemDataProvider {
         } else {
 
             if (data.getModifiedAt() != modifiedAt) {
-                cv.put(ProviderMeta.ProviderTableMeta.FILESYSTEM_FILE_SENT_FOR_UPLOAD, 0);
+                long newCrc32 = getFileChecksum(localPath);
+                if (data.getCrc32() == null || (newCrc32 != -1 && !data.getCrc32().equals(Long.toString(newCrc32)))) {
+                    cv.put(ProviderMeta.ProviderTableMeta.FILESYSTEM_CRC32, Long.toString(newCrc32));
+                    cv.put(ProviderMeta.ProviderTableMeta.FILESYSTEM_FILE_SENT_FOR_UPLOAD, 0);
+                }
             }
 
 
@@ -177,11 +192,13 @@ public class FilesystemDataProvider {
                     isSentForUpload = true;
                 }
 
+                String crc32 = cursor.getString(cursor.getColumnIndex(ProviderMeta.ProviderTableMeta.FILESYSTEM_CRC32));
+
                 if (id == -1) {
                     Log_OC.e(TAG, "Arbitrary value could not be created from cursor");
                 } else {
                     dataSet = new FileSystemDataSet(id, localPath, modifiedAt, isFolder, isSentForUpload, foundAt,
-                            syncedFolder.getId());
+                            syncedFolder.getId(), crc32);
                 }
             }
             cursor.close();
@@ -191,4 +208,24 @@ public class FilesystemDataProvider {
 
         return dataSet;
     }
+
+    private static long getFileChecksum(String filepath) {
+
+        InputStream inputStream = null;
+        try {
+            inputStream = new BufferedInputStream(new FileInputStream(filepath));
+            CRC32 crc = new CRC32();
+            int cnt;
+            while ((cnt = inputStream.read()) != -1) {
+                crc.update(cnt);
+            }
+
+            return crc.getValue();
+
+        } catch (FileNotFoundException e) {
+            return -1;
+        } catch (IOException e) {
+            return -1;
+        }
+    }
 }

+ 5 - 6
src/main/java/com/owncloud/android/datamodel/ThumbnailsCacheManager.java

@@ -68,6 +68,7 @@ import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.InputStream;
 import java.lang.ref.WeakReference;
+import java.net.URLEncoder;
 import java.util.ArrayList;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -293,13 +294,11 @@ public class ThumbnailsCacheManager {
                         if (serverOCVersion.supportsRemoteThumbnails()) {
                             GetMethod getMethod = null;
                             try {
-                                // resized image via gallery app
-                                String uri = mClient.getBaseUri() + "/index.php/apps/gallery/api/preview/" +
-                                        Integer.parseInt(file.getRemoteId().substring(0, 8)) + "/" + pxW + "/" + pxH;
-                                Log_OC.d(TAG, "generate resizedImage: " + file.getFileName() + " URI: " + uri);
+                                String uri = mClient.getBaseUri() + "/index.php/core/preview.png?file="
+                                        + URLEncoder.encode(file.getRemotePath())
+                                        + "&x=" + pxW + "&y=" + pxH + "&a=1&mode=cover&forceIcon=0";
                                 getMethod = new GetMethod(uri);
-                                getMethod.setRequestHeader("Cookie",
-                                        "nc_sameSiteCookielax=true;nc_sameSiteCookiestrict=true");
+
                                 int status = mClient.executeMethod(getMethod);
                                 if (status == HttpStatus.SC_OK) {
                                     InputStream inputStream = getMethod.getResponseBodyAsStream();

+ 2 - 1
src/main/java/com/owncloud/android/db/ProviderMeta.java

@@ -32,7 +32,7 @@ import com.owncloud.android.MainApp;
 public class ProviderMeta {
 
     public static final String DB_NAME = "filelist";
-    public static final int DB_VERSION = 25;
+    public static final int DB_VERSION = 26;
 
     private ProviderMeta() {
     }
@@ -218,5 +218,6 @@ public class ProviderMeta {
         public static final String FILESYSTEM_FILE_FOUND_RECENTLY = "found_at";
         public static final String FILESYSTEM_FILE_SENT_FOR_UPLOAD = "upload_triggered";
         public static final String FILESYSTEM_SYNCED_FOLDER_ID = "syncedfolder_id";
+        public static final String FILESYSTEM_CRC32 = "crc32";
     }
 }

+ 101 - 39
src/main/java/com/owncloud/android/providers/FileContentProvider.java

@@ -38,6 +38,9 @@ import android.database.sqlite.SQLiteDatabase;
 import android.database.sqlite.SQLiteOpenHelper;
 import android.database.sqlite.SQLiteQueryBuilder;
 import android.net.Uri;
+import android.os.Binder;
+import android.os.Build;
+import android.support.annotation.NonNull;
 import android.text.TextUtils;
 
 import com.owncloud.android.MainApp;
@@ -63,6 +66,7 @@ import java.util.Locale;
 public class FileContentProvider extends ContentProvider {
 
     private DataBaseHelper mDbHelper;
+    private Context mContext;
 
     private static final int SINGLE_FILE = 1;
     private static final int DIRECTORY = 2;
@@ -89,9 +93,13 @@ public class FileContentProvider extends ContentProvider {
     private static final String UPGRADE_VERSION_MSG = "OUT of the ADD in onUpgrade; oldVersion == %d, newVersion == %d";
 
     @Override
-    public int delete(Uri uri, String where, String[] whereArgs) {
-        //Log_OC.d(TAG, "Deleting " + uri + " at provider " + this);
-        int count = 0;
+    public int delete(@NonNull Uri uri, String where, String[] whereArgs) {
+        int count;
+
+        if (isCallerNotAllowed()) {
+            return -1;
+        }
+                
         SQLiteDatabase db = mDbHelper.getWritableDatabase();
         db.beginTransaction();
         try {
@@ -100,11 +108,15 @@ public class FileContentProvider extends ContentProvider {
         } finally {
             db.endTransaction();
         }
-        getContext().getContentResolver().notifyChange(uri, null);
+        mContext.getContentResolver().notifyChange(uri, null);
         return count;
     }
 
     private int delete(SQLiteDatabase db, Uri uri, String where, String[] whereArgs) {
+        if (isCallerNotAllowed()) {
+            return -1;
+        }
+        
         int count = 0;
         switch (mUriMatcher.match(uri)) {
             case SINGLE_FILE:
@@ -221,7 +233,7 @@ public class FileContentProvider extends ContentProvider {
     }
 
     @Override
-    public String getType(Uri uri) {
+    public String getType(@NonNull Uri uri) {
         switch (mUriMatcher.match(uri)) {
             case ROOT_DIRECTORY:
                 return ProviderTableMeta.CONTENT_TYPE;
@@ -234,8 +246,12 @@ public class FileContentProvider extends ContentProvider {
     }
 
     @Override
-    public Uri insert(Uri uri, ContentValues values) {
-        Uri newUri = null;
+    public Uri insert(@NonNull Uri uri, ContentValues values) {
+        if (isCallerNotAllowed()) {
+            return null;
+        }
+
+        Uri newUri;
         SQLiteDatabase db = mDbHelper.getWritableDatabase();
         db.beginTransaction();
         try {
@@ -244,7 +260,7 @@ public class FileContentProvider extends ContentProvider {
         } finally {
             db.endTransaction();
         }
-        getContext().getContentResolver().notifyChange(newUri, null);
+        mContext.getContentResolver().notifyChange(newUri, null);
         return newUri;
     }
 
@@ -286,7 +302,7 @@ public class FileContentProvider extends ContentProvider {
                 }
 
             case SHARES:
-                Uri insertedShareUri = null;
+                Uri insertedShareUri;
                 long rowId = db.insert(ProviderTableMeta.OCSHARES_TABLE_NAME, null, values);
                 if (rowId > 0) {
                     insertedShareUri =
@@ -299,7 +315,7 @@ public class FileContentProvider extends ContentProvider {
                 return insertedShareUri;
 
             case CAPABILITIES:
-                Uri insertedCapUri = null;
+                Uri insertedCapUri;
                 long id = db.insert(ProviderTableMeta.CAPABILITIES_TABLE_NAME, null, values);
                 if (id > 0) {
                     insertedCapUri =
@@ -311,7 +327,7 @@ public class FileContentProvider extends ContentProvider {
                 return insertedCapUri;
 
             case UPLOADS:
-                Uri insertedUploadUri = null;
+                Uri insertedUploadUri;
                 long uploadId = db.insert(ProviderTableMeta.UPLOADS_TABLE_NAME, null, values);
                 if (uploadId > 0) {
                     insertedUploadUri =
@@ -323,7 +339,7 @@ public class FileContentProvider extends ContentProvider {
                 return insertedUploadUri;
 
             case SYNCED_FOLDERS:
-                Uri insertedSyncedFolderUri = null;
+                Uri insertedSyncedFolderUri;
                 long syncedFolderId = db.insert(ProviderTableMeta.SYNCED_FOLDERS_TABLE_NAME, null, values);
                 if (syncedFolderId > 0) {
                     insertedSyncedFolderUri =
@@ -335,7 +351,7 @@ public class FileContentProvider extends ContentProvider {
                 return insertedSyncedFolderUri;
 
             case EXTERNAL_LINKS:
-                Uri insertedExternalLinkUri = null;
+                Uri insertedExternalLinkUri;
                 long externalLinkId = db.insert(ProviderTableMeta.EXTERNAL_LINKS_TABLE_NAME, null, values);
                 if (externalLinkId > 0) {
                     insertedExternalLinkUri =
@@ -347,7 +363,7 @@ public class FileContentProvider extends ContentProvider {
                 return insertedExternalLinkUri;
 
             case ARBITRARY_DATA:
-                Uri insertedArbitraryDataUri = null;
+                Uri insertedArbitraryDataUri;
                 long arbitraryDataId = db.insert(ProviderTableMeta.ARBITRARY_DATA_TABLE_NAME, null, values);
                 if (arbitraryDataId > 0) {
                     insertedArbitraryDataUri =
@@ -369,11 +385,11 @@ public class FileContentProvider extends ContentProvider {
 
                 return insertedVirtualUri;
             case FILESYSTEM:
-                Uri insertedFilesystemUri = null;
-                long filesystedId = db.insert(ProviderTableMeta.FILESYSTEM_TABLE_NAME, null, values);
-                if (filesystedId > 0) {
+                Uri insertedFilesystemUri;
+                long filesystemId = db.insert(ProviderTableMeta.FILESYSTEM_TABLE_NAME, null, values);
+                if (filesystemId > 0) {
                     insertedFilesystemUri =
-                            ContentUris.withAppendedId(ProviderTableMeta.CONTENT_URI_FILESYSTEM, filesystedId);
+                            ContentUris.withAppendedId(ProviderTableMeta.CONTENT_URI_FILESYSTEM, filesystemId);
                 } else {
                     throw new SQLException("ERROR " + uri);
                 }
@@ -412,8 +428,13 @@ public class FileContentProvider extends ContentProvider {
     @Override
     public boolean onCreate() {
         mDbHelper = new DataBaseHelper(getContext());
+        mContext = getContext();
 
-        String authority = getContext().getResources().getString(R.string.authority);
+        if (mContext == null) {
+            return false;
+        }
+
+        String authority = mContext.getResources().getString(R.string.authority);
         mUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
         mUriMatcher.addURI(authority, null, ROOT_DIRECTORY);
         mUriMatcher.addURI(authority, "file/", SINGLE_FILE);
@@ -437,15 +458,24 @@ public class FileContentProvider extends ContentProvider {
 
 
     @Override
-    public Cursor query(
-            Uri uri,
-            String[] projection,
-            String selection,
-            String[] selectionArgs,
-            String sortOrder
-    ) {
+    public Cursor query(@NonNull Uri uri, String[] projection, String selection, String[] selectionArgs,
+                        String sortOrder) {
 
-        Cursor result = null;
+        // skip check for files as they need to be queried to get access via document provider
+        switch (mUriMatcher.match(uri)) {
+            case ROOT_DIRECTORY:
+            case SINGLE_FILE:
+            case DIRECTORY:
+                break;
+
+            default:
+                if (isCallerNotAllowed()) {
+                    return null;
+                }
+        }
+
+
+        Cursor result;
         SQLiteDatabase db = mDbHelper.getReadableDatabase();
         db.beginTransaction();
         try {
@@ -592,21 +622,26 @@ public class FileContentProvider extends ContentProvider {
             sqlQuery.setProjectionMap(projectionMap);
         }
 
-        if (selectionArgs == null) {
+        // if both are null, let them pass to query
+        if (selectionArgs == null && selection != null) {
             selectionArgs = new String[]{selection};
             selection = "(?)";
         }
 
         sqlQuery.setStrict(true);
         Cursor c = sqlQuery.query(db, projectionArray, selection, selectionArgs, null, null, order);
-        c.setNotificationUri(getContext().getContentResolver(), uri);
+        c.setNotificationUri(mContext.getContentResolver(), uri);
         return c;
     }
 
     @Override
-    public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
+    public int update(@NonNull Uri uri, ContentValues values, String selection, String[] selectionArgs) {
 
-        int count = 0;
+        if (isCallerNotAllowed()) {
+            return -1;
+        }
+
+        int count;
         SQLiteDatabase db = mDbHelper.getWritableDatabase();
         db.beginTransaction();
         try {
@@ -615,7 +650,7 @@ public class FileContentProvider extends ContentProvider {
         } finally {
             db.endTransaction();
         }
-        getContext().getContentResolver().notifyChange(uri, null);
+        mContext.getContentResolver().notifyChange(uri, null);
         return count;
     }
 
@@ -635,8 +670,7 @@ public class FileContentProvider extends ContentProvider {
             case CAPABILITIES:
                 return db.update(ProviderTableMeta.CAPABILITIES_TABLE_NAME, values, selection, selectionArgs);
             case UPLOADS:
-                int ret = db.update(ProviderTableMeta.UPLOADS_TABLE_NAME, values, selection, selectionArgs);
-                return ret;
+                return db.update(ProviderTableMeta.UPLOADS_TABLE_NAME, values, selection, selectionArgs);
             case SYNCED_FOLDERS:
                 return db.update(ProviderTableMeta.SYNCED_FOLDERS_TABLE_NAME, values, selection, selectionArgs);
             case ARBITRARY_DATA:
@@ -648,8 +682,9 @@ public class FileContentProvider extends ContentProvider {
         }
     }
 
+    @NonNull
     @Override
-    public ContentProviderResult[] applyBatch(ArrayList<ContentProviderOperation> operations)
+    public ContentProviderResult[] applyBatch(@NonNull ArrayList<ContentProviderOperation> operations)
             throws OperationApplicationException {
         Log_OC.d("FileContentProvider", "applying batch in provider " + this +
                 " (temporary: " + isTemporary() + ")");
@@ -674,7 +709,7 @@ public class FileContentProvider extends ContentProvider {
 
     class DataBaseHelper extends SQLiteOpenHelper {
 
-        public DataBaseHelper(Context context) {
+        DataBaseHelper(Context context) {
             super(context, ProviderMeta.DB_NAME, null, ProviderMeta.DB_VERSION);
 
         }
@@ -685,7 +720,7 @@ public class FileContentProvider extends ContentProvider {
             Log_OC.i(SQL, "Entering in onCreate");
             createFilesTable(db);
 
-            // Create ocshares table
+            // Create OCShares table
             createOCSharesTable(db);
 
             // Create capabilities table
@@ -796,7 +831,7 @@ public class FileContentProvider extends ContentProvider {
                             ADD_COLUMN + ProviderTableMeta.FILE_PUBLIC_LINK + " TEXT " +
                             " DEFAULT NULL");
 
-                    // Create table ocshares
+                    // Create table OCShares
                     createOCSharesTable(db);
 
                     upgraded = true;
@@ -1189,6 +1224,21 @@ public class FileContentProvider extends ContentProvider {
                 }
             }
 
+            if (oldVersion < 26 && newVersion >= 26) {
+                Log_OC.i(SQL, "Entering in the #26 Adding CRC32 column to filesystem table");
+                db.beginTransaction();
+                try {
+                    db.execSQL(ALTER_TABLE + ProviderTableMeta.FILESYSTEM_TABLE_NAME +
+                            ADD_COLUMN + ProviderTableMeta.FILESYSTEM_CRC32 + " TEXT ");
+
+                    upgraded = true;
+                    db.setTransactionSuccessful();
+                } finally {
+                    db.endTransaction();
+                }
+            }
+
+
             if (!upgraded) {
                 Log_OC.i(SQL, String.format(Locale.ENGLISH, UPGRADE_VERSION_MSG, oldVersion, newVersion));
             }
@@ -1243,7 +1293,7 @@ public class FileContentProvider extends ContentProvider {
     }
 
     private void createOCSharesTable(SQLiteDatabase db) {
-        // Create ocshares table
+        // Create OCShares table
         db.execSQL("CREATE TABLE " + ProviderTableMeta.OCSHARES_TABLE_NAME + "("
                 + ProviderTableMeta._ID + " INTEGER PRIMARY KEY, "
                 + ProviderTableMeta.OCSHARES_FILE_SOURCE + INTEGER
@@ -1380,6 +1430,7 @@ public class FileContentProvider extends ContentProvider {
                 + ProviderTableMeta.FILESYSTEM_FILE_FOUND_RECENTLY + " LONG, "
                 + ProviderTableMeta.FILESYSTEM_FILE_SENT_FOR_UPLOAD + " INTEGER, "
                 + ProviderTableMeta.FILESYSTEM_SYNCED_FOLDER_ID + " STRING, "
+                + ProviderTableMeta.FILESYSTEM_CRC32 + " STRING, "
                 + ProviderTableMeta.FILESYSTEM_FILE_MODIFIED + " LONG );"
         );
     }
@@ -1499,4 +1550,15 @@ public class FileContentProvider extends ContentProvider {
             c.close();
         }
     }
+
+    private boolean isCallerNotAllowed() {
+        String callingPackage;
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+            callingPackage = getCallingPackage();
+        } else {
+            callingPackage = mContext.getPackageManager().getNameForUid(Binder.getCallingUid());
+        }
+
+        return callingPackage == null || !callingPackage.contains(mContext.getPackageName());
+    }
 }

+ 30 - 33
src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java

@@ -1335,53 +1335,50 @@ public abstract class DrawerActivity extends ToolbarActivity implements DisplayU
      */
     public void fetchExternalLinks(final boolean force) {
         if (getBaseContext().getResources().getBoolean(R.bool.show_external_links)) {
-            Thread t = new Thread(new Runnable() {
-                public void run() {
-                    // fetch capabilities as early as possible
-                    if ((getCapabilities() == null || getCapabilities().getAccountName().isEmpty())
-                            && getStorageManager() != null) {
-                        GetCapabilitiesOperarion getCapabilities = new GetCapabilitiesOperarion();
-                        getCapabilities.execute(getStorageManager(), getBaseContext());
-                    }
-
-                    Account account = AccountUtils.getCurrentOwnCloudAccount(DrawerActivity.this);
+            Thread t = new Thread(() -> {
+                // fetch capabilities as early as possible
+                if ((getCapabilities() == null || getCapabilities().getAccountName().isEmpty())
+                        && getStorageManager() != null) {
+                    GetCapabilitiesOperarion getCapabilities = new GetCapabilitiesOperarion();
+                    getCapabilities.execute(getStorageManager(), getBaseContext());
+                }
 
-                    if (account != null && getStorageManager() != null &&
-                            getStorageManager().getCapability(account.name) != null &&
-                            getStorageManager().getCapability(account.name).getExternalLinks().isTrue()) {
+                Account account = AccountUtils.getCurrentOwnCloudAccount(DrawerActivity.this);
 
-                        int count = sharedPreferences.getInt(EXTERNAL_LINKS_COUNT, -1);
-                        if (count > 10 || count == -1 || force) {
-                            if (force) {
-                                Log_OC.d("ExternalLinks", "force update");
-                            }
+                externalLinksProvider.deleteAllExternalLinks();
 
-                            sharedPreferences.edit().putInt(EXTERNAL_LINKS_COUNT, 0).apply();
+                if (account != null && getStorageManager() != null &&
+                        getStorageManager().getCapability(account.name) != null &&
+                        getStorageManager().getCapability(account.name).getExternalLinks().isTrue()) {
 
-                            Log_OC.d("ExternalLinks", "update via api");
-                            ExternalLinksProvider externalLinksProvider = new ExternalLinksProvider(getContentResolver());
+                    int count = sharedPreferences.getInt(EXTERNAL_LINKS_COUNT, -1);
+                    if (count > 10 || count == -1 || force) {
+                        if (force) {
+                            Log_OC.d("ExternalLinks", "force update");
+                        }
 
-                            RemoteOperation getExternalLinksOperation = new ExternalLinksOperation();
-                            RemoteOperationResult result = getExternalLinksOperation.execute(account, DrawerActivity.this);
+                        sharedPreferences.edit().putInt(EXTERNAL_LINKS_COUNT, 0).apply();
 
-                            if (result.isSuccess() && result.getData() != null) {
-                                externalLinksProvider.deleteAllExternalLinks();
+                        Log_OC.d("ExternalLinks", "update via api");
+                        RemoteOperation getExternalLinksOperation = new ExternalLinksOperation();
+                        RemoteOperationResult result = getExternalLinksOperation.execute(account, DrawerActivity.this);
 
-                                ArrayList<ExternalLink> externalLinks = (ArrayList<ExternalLink>) (Object) result.getData();
+                        if (result.isSuccess() && result.getData() != null) {
+                            externalLinksProvider.deleteAllExternalLinks();
 
-                                for (ExternalLink link : externalLinks) {
-                                    externalLinksProvider.storeExternalLink(link);
-                                }
+                            ArrayList<ExternalLink> externalLinks = (ArrayList<ExternalLink>) (Object) result.getData();
 
-                                runOnUiThread(() -> updateExternalLinksInDrawer());
+                            for (ExternalLink link : externalLinks) {
+                                externalLinksProvider.storeExternalLink(link);
                             }
-                        } else {
-                            sharedPreferences.edit().putInt(EXTERNAL_LINKS_COUNT, count + 1).apply();
                         }
                     } else {
-                        Log_OC.d("ExternalLinks", "links disabled");
+                        sharedPreferences.edit().putInt(EXTERNAL_LINKS_COUNT, count + 1).apply();
                     }
+                } else {
+                    Log_OC.d("ExternalLinks", "links disabled");
                 }
+                runOnUiThread(() -> updateExternalLinksInDrawer());
             });
 
             t.start();

+ 2 - 11
src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java

@@ -1449,9 +1449,6 @@ public class FileDisplayActivity extends HookActivity
                             case OCFileListFragment.DOWNLOAD_SEND:
                                 sendDownloadedFile();
                                 break;
-                            case OCFileListFragment.DOWNLOAD_SET_AS:
-                                setPictureAs();
-                                break;
                             default:
                                 // do nothing
                                 break;
@@ -1609,7 +1606,7 @@ public class FileDisplayActivity extends HookActivity
                 mUploaderBinder = null;
             }
         }
-    };    
+    }
 
     private MediaServiceConnection newMediaConnection(){
         return new MediaServiceConnection();
@@ -1639,7 +1636,7 @@ public class FileDisplayActivity extends HookActivity
                 mMediaServiceBinder = null;
             }
         }
-    };
+    }
 
     /**
      * Updates the view associated to the activity after the finish of some operation over files
@@ -1986,12 +1983,6 @@ public class FileDisplayActivity extends HookActivity
         mWaitingToSend = null;
     }
 
-    private void setPictureAs() {
-        getFileOperationsHelper().setPictureAs(mWaitingToSend);
-        mWaitingToSend = null;
-    }
-
-
     /**
      * Requests the download of the received {@link OCFile} , updates the UI
      * to monitor the download progress and prepares the activity to send the file

+ 18 - 5
src/main/java/com/owncloud/android/ui/activity/ShareActivity.java

@@ -1,20 +1,20 @@
-/**
+/*
  * ownCloud Android client application
  *
  * @author masensio
  * @author David A. Velasco
  * @author Juan Carlos González Cabrero
  * Copyright (C) 2015 ownCloud Inc.
- * <p/>
+ * 
  * 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.
- * <p/>
+ * 
  * 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.
- * <p/>
+ * 
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
@@ -32,6 +32,7 @@ import android.support.v4.app.FragmentTransaction;
 
 import com.owncloud.android.R;
 import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.lib.common.OwnCloudAccount;
 import com.owncloud.android.lib.common.accounts.AccountUtils;
 import com.owncloud.android.lib.common.operations.RemoteOperation;
 import com.owncloud.android.lib.common.operations.RemoteOperationResult;
@@ -313,7 +314,19 @@ public class ShareActivity extends FileActivity implements ShareFragmentListener
 
             intentToShareLink.putExtra(Intent.EXTRA_TEXT, link);
             intentToShareLink.setType("text/plain");
-            String username = AccountUtils.getUsernameForAccount(getAccount());
+
+            String username;
+            try {
+                OwnCloudAccount oca = new OwnCloudAccount(getAccount(), this);
+                if (oca.getDisplayName() != null && !oca.getDisplayName().isEmpty()) {
+                    username = oca.getDisplayName();
+                } else {
+                    username = AccountUtils.getUsernameForAccount(getAccount());
+                }
+            } catch (Exception e) {
+                username = AccountUtils.getUsernameForAccount(getAccount());
+            }
+
             if (username != null) {
                 intentToShareLink.putExtra(
                     Intent.EXTRA_SUBJECT,

+ 1 - 7
src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java

@@ -129,7 +129,6 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi
 
     public static final String DOWNLOAD_BEHAVIOUR = "DOWNLOAD_BEHAVIOUR";
     public static final String DOWNLOAD_SEND = "DOWNLOAD_SEND";
-    public static final String DOWNLOAD_SET_AS = "DOWNLOAD_SET_AS";
 
     public static final String SEARCH_EVENT = "SEARCH_EVENT";
 
@@ -985,12 +984,7 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi
                     }
                 }
                 case R.id.action_set_as_wallpaper: {
-                    if (singleFile.isDown()) {
-                        mContainerActivity.getFileOperationsHelper().setPictureAs(singleFile);
-                    } else {
-                        Log_OC.d(TAG, singleFile.getRemotePath() + " : File must be downloaded");
-                        ((FileDisplayActivity) mContainerActivity).startDownloadForSending(singleFile, DOWNLOAD_SET_AS);
-                    }
+                    mContainerActivity.getFileOperationsHelper().setPictureAs(singleFile, getView());
                     return true;
                 }
             }

+ 22 - 16
src/main/java/com/owncloud/android/ui/helpers/FileOperationsHelper.java

@@ -30,9 +30,10 @@ import android.content.pm.ResolveInfo;
 import android.net.Uri;
 import android.os.Build;
 import android.support.annotation.Nullable;
+import android.support.design.widget.Snackbar;
 import android.support.v4.content.FileProvider;
+import android.view.View;
 import android.webkit.MimeTypeMap;
-import android.widget.Toast;
 
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
@@ -56,6 +57,7 @@ import com.owncloud.android.ui.events.FavoriteEvent;
 import com.owncloud.android.ui.events.SyncEventFinished;
 import com.owncloud.android.utils.DisplayUtils;
 import com.owncloud.android.utils.FileStorageUtils;
+import com.owncloud.android.utils.UriUtils;
 
 import org.greenrobot.eventbus.EventBus;
 
@@ -580,32 +582,36 @@ public class FileOperationsHelper {
         }
     }
 
-    public void setPictureAs(OCFile file) {
+    public void setPictureAs(OCFile file, View view) {
         if (file != null) {
-            if (file.isDown()) {
-                Context context = MainApp.getAppContext();
+            Context context = MainApp.getAppContext();
+            Intent intent = new Intent(Intent.ACTION_ATTACH_DATA);
+            Uri uri;
 
-                try {
+            try {
+                if (file.isDown()) {
                     File externalFile = new File(file.getStoragePath());
-                    Intent intent = new Intent(Intent.ACTION_ATTACH_DATA);
-                    Uri sendUri;
 
                     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                         intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
-                        sendUri = FileProvider.getUriForFile(context,
+                        uri = FileProvider.getUriForFile(context,
                                 context.getResources().getString(R.string.file_provider_authority), externalFile);
                     } else {
-                        sendUri = Uri.fromFile(externalFile);
+                        uri = Uri.fromFile(externalFile);
                     }
+                } else {
+                    uri = Uri.parse(UriUtils.URI_CONTENT_SCHEME +
+                            context.getResources().getString(R.string.image_cache_provider_authority) +
+                            file.getRemotePath());
+                }
 
-                    intent.setDataAndType(sendUri, file.getMimetype());
-                    intent.putExtra("mimeType", file.getMimetype());
-                    mFileActivity.startActivityForResult(Intent.createChooser(intent,
-                            mFileActivity.getString(R.string.set_as)), 200);
+                intent.setDataAndType(uri, file.getMimetype());
+                mFileActivity.startActivityForResult(Intent.createChooser(intent,
+                        mFileActivity.getString(R.string.set_as)), 200);
 
-                } catch (ActivityNotFoundException exception) {
-                    Toast.makeText(context, R.string.picture_set_as_no_app, Toast.LENGTH_LONG).show();
-                }
+                intent.setDataAndType(uri, file.getMimetype());
+            } catch (ActivityNotFoundException exception) {
+                Snackbar.make(view, R.string.picture_set_as_no_app, Snackbar.LENGTH_LONG).show();
             }
         } else {
             Log_OC.wtf(TAG, "Trying to send a NULL OCFile");

+ 1 - 1
src/main/java/com/owncloud/android/ui/preview/PreviewImageFragment.java

@@ -452,7 +452,7 @@ public class PreviewImageFragment extends FileFragment {
                 return true;
 
             case R.id.action_set_as_wallpaper:
-                mContainerActivity.getFileOperationsHelper().setPictureAs(getFile());
+                mContainerActivity.getFileOperationsHelper().setPictureAs(getFile(), getImageView());
                 return true;
 
             default:

+ 0 - 1
src/main/res/values-ast/strings.xml

@@ -356,7 +356,6 @@
     <string name="pref_behaviour_entries_keep_file">guardáu en carpeta orixinal</string>
     <string name="pref_behaviour_entries_move">movíu a la carpeta d\'aplicaciones</string>
     <string name="prefs_storage_path">Camín d\'almacenamientu</string>
-    <string name="prefs_common">Común</string>
 
     <string name="share_dialog_title">Compartiendo</string>
     <string name="share_file">Compartir %1$s</string>

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

@@ -300,7 +300,6 @@
     <string name="pref_behaviour_entries_move">премествани в папката на приложението</string>
     <string name="pref_behaviour_entries_delete_file">изтривани</string>
     <string name="prefs_storage_path">Път до хранилището</string>
-    <string name="prefs_common">Познато</string>
 
     <string name="share_dialog_title">Споделяне</string>
     <string name="share_file">Споделяне на %1$s</string>

+ 0 - 1
src/main/res/values-ca/strings.xml

@@ -392,7 +392,6 @@
     <string name="pref_behaviour_entries_move">mogut a la carpeta de l\'aplicació</string>
     <string name="pref_behaviour_entries_delete_file">eliminat</string>
     <string name="prefs_storage_path">Ruta d\'emmagatzematge</string>
-    <string name="prefs_common">Comú</string>
 
     <string name="share_dialog_title">Compartint</string>
     <string name="share_file">Comparteix %1$s</string>

+ 0 - 1
src/main/res/values-cs-rCZ/strings.xml

@@ -467,7 +467,6 @@
     <string name="pref_behaviour_entries_move">přesunut do adresáře aplikace</string>
     <string name="pref_behaviour_entries_delete_file">smazáno</string>
     <string name="prefs_storage_path">Cesta k úložišti</string>
-    <string name="prefs_common">Obvyklý</string>
 
     <string name="share_dialog_title">Sdílení</string>
     <string name="share_file">Sdílet %1$s</string>

+ 0 - 1
src/main/res/values-da/strings.xml

@@ -346,7 +346,6 @@
 
     <string name="select_all">Vælg alle</string>
     <string name="pref_behaviour_entries_delete_file">Slettet</string>
-    <string name="prefs_common">Almindelig</string>
 
     <string name="share_dialog_title">Deling</string>
     <string name="share_file">Del %1$s</string>

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

@@ -470,7 +470,6 @@
     <string name="pref_behaviour_entries_move">in den App-Ordner verschoben</string>
     <string name="pref_behaviour_entries_delete_file">gelöscht</string>
     <string name="prefs_storage_path">Speicherort</string>
-    <string name="prefs_common">Allgemein</string>
 
     <string name="share_dialog_title">Teilen</string>
     <string name="share_file">Teile %1$s</string>

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

@@ -470,7 +470,6 @@
     <string name="pref_behaviour_entries_move">in den App-Ordner verschoben</string>
     <string name="pref_behaviour_entries_delete_file">gelöscht</string>
     <string name="prefs_storage_path">Speicherort</string>
-    <string name="prefs_common">Allgemein</string>
 
     <string name="share_dialog_title">Teilen</string>
     <string name="share_file">Teile %1$s</string>

+ 0 - 1
src/main/res/values-el/strings.xml

@@ -421,7 +421,6 @@
     <string name="pref_behaviour_entries_move">μετακινήθηκε στον φάκελο εφαρμογών</string>
     <string name="pref_behaviour_entries_delete_file">διαγράφηκε</string>
     <string name="prefs_storage_path">Διαδρομή αποθηκευτικού χώρου</string>
-    <string name="prefs_common">Κοινό</string>
 
     <string name="share_dialog_title">Γίνεται διαμοιρασμός</string>
     <string name="share_file">Διαμοιρασμός %1$s</string>

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

@@ -469,7 +469,6 @@
     <string name="pref_behaviour_entries_move">moved to app folder</string>
     <string name="pref_behaviour_entries_delete_file">deleted</string>
     <string name="prefs_storage_path">Storage path</string>
-    <string name="prefs_common">Common</string>
 
     <string name="share_dialog_title">Sharing</string>
     <string name="share_file">Share %1$s</string>

+ 0 - 1
src/main/res/values-es-rAR/strings.xml

@@ -416,7 +416,6 @@
     <string name="pref_behaviour_entries_move">movido a la capreta de la aplicación</string>
     <string name="pref_behaviour_entries_delete_file">Borrado</string>
     <string name="prefs_storage_path">Ruta de almacenamiento</string>
-    <string name="prefs_common">Común</string>
 
     <string name="share_dialog_title">Compartiendo</string>
     <string name="share_file">Compartir %1$s</string>

+ 0 - 1
src/main/res/values-es-rCL/strings.xml

@@ -469,7 +469,6 @@
     <string name="pref_behaviour_entries_move">movido a la capreta de la aplicación</string>
     <string name="pref_behaviour_entries_delete_file">Borrado</string>
     <string name="prefs_storage_path">Ruta de almacenamiento</string>
-    <string name="prefs_common">Común</string>
 
     <string name="share_dialog_title">Compartiendo</string>
     <string name="share_file">Compartir %1$s</string>

+ 0 - 1
src/main/res/values-es-rCO/strings.xml

@@ -469,7 +469,6 @@
     <string name="pref_behaviour_entries_move">movido a la capreta de la aplicación</string>
     <string name="pref_behaviour_entries_delete_file">Borrado</string>
     <string name="prefs_storage_path">Ruta de almacenamiento</string>
-    <string name="prefs_common">Común</string>
 
     <string name="share_dialog_title">Compartiendo</string>
     <string name="share_file">Compartir %1$s</string>

+ 0 - 1
src/main/res/values-es-rCR/strings.xml

@@ -469,7 +469,6 @@
     <string name="pref_behaviour_entries_move">movido a la capreta de la aplicación</string>
     <string name="pref_behaviour_entries_delete_file">Borrado</string>
     <string name="prefs_storage_path">Ruta de almacenamiento</string>
-    <string name="prefs_common">Común</string>
 
     <string name="share_dialog_title">Compartiendo</string>
     <string name="share_file">Compartir %1$s</string>

+ 0 - 1
src/main/res/values-es-rDO/strings.xml

@@ -469,7 +469,6 @@
     <string name="pref_behaviour_entries_move">movido a la capreta de la aplicación</string>
     <string name="pref_behaviour_entries_delete_file">Borrado</string>
     <string name="prefs_storage_path">Ruta de almacenamiento</string>
-    <string name="prefs_common">Común</string>
 
     <string name="share_dialog_title">Compartiendo</string>
     <string name="share_file">Compartir %1$s</string>

+ 0 - 1
src/main/res/values-es-rEC/strings.xml

@@ -469,7 +469,6 @@
     <string name="pref_behaviour_entries_move">movido a la capreta de la aplicación</string>
     <string name="pref_behaviour_entries_delete_file">Borrado</string>
     <string name="prefs_storage_path">Ruta de almacenamiento</string>
-    <string name="prefs_common">Común</string>
 
     <string name="share_dialog_title">Compartiendo</string>
     <string name="share_file">Compartir %1$s</string>

+ 0 - 1
src/main/res/values-es-rGT/strings.xml

@@ -469,7 +469,6 @@
     <string name="pref_behaviour_entries_move">movido a la capreta de la aplicación</string>
     <string name="pref_behaviour_entries_delete_file">Borrado</string>
     <string name="prefs_storage_path">Ruta de almacenamiento</string>
-    <string name="prefs_common">Común</string>
 
     <string name="share_dialog_title">Compartiendo</string>
     <string name="share_file">Compartir %1$s</string>

+ 0 - 1
src/main/res/values-es-rHN/strings.xml

@@ -469,7 +469,6 @@
     <string name="pref_behaviour_entries_move">movido a la capreta de la aplicación</string>
     <string name="pref_behaviour_entries_delete_file">Borrado</string>
     <string name="prefs_storage_path">Ruta de almacenamiento</string>
-    <string name="prefs_common">Común</string>
 
     <string name="share_dialog_title">Compartiendo</string>
     <string name="share_file">Compartir %1$s</string>

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

@@ -469,7 +469,6 @@
     <string name="pref_behaviour_entries_move">movido a la capreta de la aplicación</string>
     <string name="pref_behaviour_entries_delete_file">Borrado</string>
     <string name="prefs_storage_path">Ruta de almacenamiento</string>
-    <string name="prefs_common">Común</string>
 
     <string name="share_dialog_title">Compartiendo</string>
     <string name="share_file">Compartir %1$s</string>

+ 0 - 1
src/main/res/values-es-rNI/strings.xml

@@ -469,7 +469,6 @@
     <string name="pref_behaviour_entries_move">movido a la capreta de la aplicación</string>
     <string name="pref_behaviour_entries_delete_file">Borrado</string>
     <string name="prefs_storage_path">Ruta de almacenamiento</string>
-    <string name="prefs_common">Común</string>
 
     <string name="share_dialog_title">Compartiendo</string>
     <string name="share_file">Compartir %1$s</string>

+ 0 - 1
src/main/res/values-es-rPA/strings.xml

@@ -469,7 +469,6 @@
     <string name="pref_behaviour_entries_move">movido a la capreta de la aplicación</string>
     <string name="pref_behaviour_entries_delete_file">Borrado</string>
     <string name="prefs_storage_path">Ruta de almacenamiento</string>
-    <string name="prefs_common">Común</string>
 
     <string name="share_dialog_title">Compartiendo</string>
     <string name="share_file">Compartir %1$s</string>

+ 0 - 1
src/main/res/values-es-rPE/strings.xml

@@ -469,7 +469,6 @@
     <string name="pref_behaviour_entries_move">movido a la capreta de la aplicación</string>
     <string name="pref_behaviour_entries_delete_file">Borrado</string>
     <string name="prefs_storage_path">Ruta de almacenamiento</string>
-    <string name="prefs_common">Común</string>
 
     <string name="share_dialog_title">Compartiendo</string>
     <string name="share_file">Compartir %1$s</string>

+ 0 - 1
src/main/res/values-es-rPR/strings.xml

@@ -469,7 +469,6 @@
     <string name="pref_behaviour_entries_move">movido a la capreta de la aplicación</string>
     <string name="pref_behaviour_entries_delete_file">Borrado</string>
     <string name="prefs_storage_path">Ruta de almacenamiento</string>
-    <string name="prefs_common">Común</string>
 
     <string name="share_dialog_title">Compartiendo</string>
     <string name="share_file">Compartir %1$s</string>

+ 0 - 1
src/main/res/values-es-rPY/strings.xml

@@ -469,7 +469,6 @@
     <string name="pref_behaviour_entries_move">movido a la capreta de la aplicación</string>
     <string name="pref_behaviour_entries_delete_file">Borrado</string>
     <string name="prefs_storage_path">Ruta de almacenamiento</string>
-    <string name="prefs_common">Común</string>
 
     <string name="share_dialog_title">Compartiendo</string>
     <string name="share_file">Compartir %1$s</string>

+ 0 - 1
src/main/res/values-es-rSV/strings.xml

@@ -469,7 +469,6 @@
     <string name="pref_behaviour_entries_move">movido a la capreta de la aplicación</string>
     <string name="pref_behaviour_entries_delete_file">Borrado</string>
     <string name="prefs_storage_path">Ruta de almacenamiento</string>
-    <string name="prefs_common">Común</string>
 
     <string name="share_dialog_title">Compartiendo</string>
     <string name="share_file">Compartir %1$s</string>

+ 0 - 1
src/main/res/values-es-rUY/strings.xml

@@ -469,7 +469,6 @@
     <string name="pref_behaviour_entries_move">movido a la capreta de la aplicación</string>
     <string name="pref_behaviour_entries_delete_file">Borrado</string>
     <string name="prefs_storage_path">Ruta de almacenamiento</string>
-    <string name="prefs_common">Común</string>
 
     <string name="share_dialog_title">Compartiendo</string>
     <string name="share_file">Compartir %1$s</string>

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

@@ -469,7 +469,6 @@
     <string name="pref_behaviour_entries_move">movido a la carpeta de la app</string>
     <string name="pref_behaviour_entries_delete_file">borrado</string>
     <string name="prefs_storage_path">Ruta de almacenamiento</string>
-    <string name="prefs_common">Común</string>
 
     <string name="share_dialog_title">Compartiendo</string>
     <string name="share_file">Compartir %1$s</string>

+ 0 - 1
src/main/res/values-eu/strings.xml

@@ -363,7 +363,6 @@ Mesedez, baimendu berriz</string>
     <string name="pref_behaviour_entries_move">Aplikazioaren karpetara mugitu</string>
     <string name="pref_behaviour_entries_delete_file">Borratua</string>
     <string name="prefs_storage_path">Biltegiratze helbidea</string>
-    <string name="prefs_common">Komuna</string>
 
     <string name="share_dialog_title">Partekatzea</string>
     <string name="share_file">Partekatu %1$s</string>

+ 0 - 1
src/main/res/values-fi-rFI/strings.xml

@@ -366,7 +366,6 @@
     <string name="pref_behaviour_entries_move">siirretään sovelluskansioon</string>
     <string name="pref_behaviour_entries_delete_file">poistettu</string>
     <string name="prefs_storage_path">Tallennustilan polku</string>
-    <string name="prefs_common">Yleinen</string>
 
     <string name="share_dialog_title">Jakaminen</string>
     <string name="share_file">Jaa %1$s</string>

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

@@ -471,7 +471,6 @@ Attention la suppression est irréversible.</string>
     <string name="pref_behaviour_entries_move">déplacé vers le dossier de l\'application</string>
     <string name="pref_behaviour_entries_delete_file">supprimé</string>
     <string name="prefs_storage_path">Chemin de stockage</string>
-    <string name="prefs_common">Commun</string>
 
     <string name="share_dialog_title">Partage</string>
     <string name="share_file">Partager %1$s</string>

+ 0 - 1
src/main/res/values-hu-rHU/strings.xml

@@ -470,7 +470,6 @@
     <string name="pref_behaviour_entries_move">áthelyezve az alkalmazás mappába</string>
     <string name="pref_behaviour_entries_delete_file">törölt</string>
     <string name="prefs_storage_path">Tároló útvonal</string>
-    <string name="prefs_common">Általános</string>
 
     <string name="share_dialog_title">Megosztás</string>
     <string name="share_file">%1$s megosztása</string>

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

@@ -417,7 +417,6 @@
     <string name="pref_behaviour_entries_move">Dipindahkan ke folder aplikasi</string>
     <string name="pref_behaviour_entries_delete_file">terhapus</string>
     <string name="prefs_storage_path">Jalur penyimpanan</string>
-    <string name="prefs_common">Umum</string>
 
     <string name="share_dialog_title">Berbagi</string>
     <string name="share_file">Bagikan %1$s</string>

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

@@ -463,7 +463,6 @@ Smelltu hér til að fá þér einn frá þjónustuaðila.</string>
     <string name="pref_behaviour_entries_move">færð í forritsmöppu</string>
     <string name="pref_behaviour_entries_delete_file">eytt</string>
     <string name="prefs_storage_path">Slóð á gagnageymslu</string>
-    <string name="prefs_common">Algengt</string>
 
     <string name="share_dialog_title">Deiling</string>
     <string name="share_file">Deila %1$s</string>

+ 0 - 1
src/main/res/values-it/strings.xml

@@ -469,7 +469,6 @@
     <string name="pref_behaviour_entries_move">spostato nella cartella dell\'applicazione</string>
     <string name="pref_behaviour_entries_delete_file">eliminato</string>
     <string name="prefs_storage_path">Percorso di archiviazione</string>
-    <string name="prefs_common">Comune</string>
 
     <string name="share_dialog_title">Condivisione</string>
     <string name="share_file">Condividi %1$s</string>

+ 0 - 1
src/main/res/values-ja-rJP/strings.xml

@@ -334,7 +334,6 @@
     <string name="pref_behaviour_entries_move">アプリフォルダに移動</string>
     <string name="pref_behaviour_entries_delete_file">削除されました</string>
     <string name="prefs_storage_path">ストレージの場所</string>
-    <string name="prefs_common">共通の</string>
 
     <string name="share_dialog_title">共有</string>
     <string name="share_file">%1$s を共有</string>

+ 0 - 1
src/main/res/values-ka-rGE/strings.xml

@@ -465,7 +465,6 @@
     <string name="pref_behaviour_entries_move">გადატანილია აპლიკაციის დირექტორიაში</string>
     <string name="pref_behaviour_entries_delete_file">გაუქმებულია</string>
     <string name="prefs_storage_path">საცავის მისამართი</string>
-    <string name="prefs_common">ჩვეული</string>
 
     <string name="share_dialog_title">გაზიარება</string>
     <string name="share_file">%1$s-ის გაზიარება</string>

+ 0 - 1
src/main/res/values-lt-rLT/strings.xml

@@ -429,7 +429,6 @@
     <string name="pref_behaviour_entries_move">perkelti į app aplanką</string>
     <string name="pref_behaviour_entries_delete_file">Ištrintas</string>
     <string name="prefs_storage_path">Saugojimo kelias</string>
-    <string name="prefs_common">Bendras pavadinimas:</string>
 
     <string name="share_dialog_title">Dalijimasis</string>
     <string name="share_file">Dalintis %1$s</string>

+ 0 - 1
src/main/res/values-nb-rNO/strings.xml

@@ -469,7 +469,6 @@
     <string name="pref_behaviour_entries_move">flyttet til program-mappe</string>
     <string name="pref_behaviour_entries_delete_file">slettet</string>
     <string name="prefs_storage_path">Lagrings-sti</string>
-    <string name="prefs_common">Felles</string>
 
     <string name="share_dialog_title">Deling</string>
     <string name="share_file">Del %1$s</string>

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

@@ -470,7 +470,6 @@ Kies er eentje van een provider.</string>
     <string name="pref_behaviour_entries_move">verplaatst worden naar app-map</string>
     <string name="pref_behaviour_entries_delete_file">verwijderd worden</string>
     <string name="prefs_storage_path">Opslagpad</string>
-    <string name="prefs_common">Gemeenschappelijk</string>
 
     <string name="share_dialog_title">Delen</string>
     <string name="share_file">Deel %1$s</string>

+ 0 - 1
src/main/res/values-pl/strings.xml

@@ -453,7 +453,6 @@
     <string name="pref_behaviour_entries_move">przeniesiony do folderu aplikacji</string>
     <string name="pref_behaviour_entries_delete_file">usunięty</string>
     <string name="prefs_storage_path">Ścieżka przechowywania</string>
-    <string name="prefs_common">Wspólny</string>
 
     <string name="share_dialog_title">Udostępnianie</string>
     <string name="share_file">Współdziel %1$s</string>

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

@@ -469,7 +469,6 @@
     <string name="pref_behaviour_entries_move">movido para a pasta aplicativos</string>
     <string name="pref_behaviour_entries_delete_file">excluído</string>
     <string name="prefs_storage_path">Caminho do armazenamento</string>
-    <string name="prefs_common">Comum</string>
 
     <string name="share_dialog_title">Compartilhamento</string>
     <string name="share_file">Compartilhar %1$s</string>

+ 0 - 1
src/main/res/values-ro/strings.xml

@@ -294,7 +294,6 @@
     <string name="pref_behaviour_entries_move">mutate în dosarul aplicației</string>
     <string name="pref_behaviour_entries_delete_file">șterge</string>
     <string name="prefs_storage_path">Calea către spațiul de depozitare</string>
-    <string name="prefs_common">General</string>
 
     <string name="share_dialog_title">Partajare</string>
     <string name="share_file">Partajare %1$s</string>

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

@@ -477,7 +477,6 @@
     <string name="pref_behaviour_entries_move">перемещен в каталог приложения</string>
     <string name="pref_behaviour_entries_delete_file">удалён</string>
     <string name="prefs_storage_path">Путь к хранилищу</string>
-    <string name="prefs_common">Основные</string>
 
     <string name="share_dialog_title">Общий доступ</string>
     <string name="share_file">Общий ресурс «%1$s»</string>

+ 0 - 1
src/main/res/values-sk-rSK/strings.xml

@@ -347,7 +347,6 @@
     <string name="pref_behaviour_entries_move">presunuté do aplikačného priečinka</string>
     <string name="pref_behaviour_entries_delete_file">vymazané</string>
     <string name="prefs_storage_path">Cesta úložiska</string>
-    <string name="prefs_common">Bežný</string>
 
     <string name="share_dialog_title">Sprístupnenie</string>
     <string name="share_file">Sprístupni %1$s</string>

+ 0 - 1
src/main/res/values-sl/strings.xml

@@ -416,7 +416,6 @@
     <string name="pref_behaviour_entries_move">premakni v mapo programa</string>
     <string name="pref_behaviour_entries_delete_file">pobrisano</string>
     <string name="prefs_storage_path">Mesto shrambe</string>
-    <string name="prefs_common">Splošno</string>
 
     <string name="share_dialog_title">Souporaba</string>
     <string name="share_file">Omogoči souporabo %1$s</string>

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

@@ -444,7 +444,6 @@
     <string name="pref_behaviour_entries_move">u kalua te dosja e aplikacionit</string>
     <string name="pref_behaviour_entries_delete_file">të fshira</string>
     <string name="prefs_storage_path">Rruga e hapsirës ruajtëse</string>
-    <string name="prefs_common">E përbashkët</string>
 
     <string name="share_dialog_title">Ndarje me të tjerët</string>
     <string name="share_file">Ndajeni %1$s</string>

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

@@ -473,7 +473,6 @@
     <string name="pref_behaviour_entries_move">премештен у фасциклу апликације</string>
     <string name="pref_behaviour_entries_delete_file">обрисано</string>
     <string name="prefs_storage_path">Путања до складишта</string>
-    <string name="prefs_common">Опште</string>
 
     <string name="share_dialog_title">Дељење</string>
     <string name="share_file">Подели %1$s</string>

+ 0 - 1
src/main/res/values-sv/strings.xml

@@ -421,7 +421,6 @@
     <string name="pref_behaviour_entries_move">flyttas till Nextcloud-mapp</string>
     <string name="pref_behaviour_entries_delete_file">raderas</string>
     <string name="prefs_storage_path">Lagringsplats</string>
-    <string name="prefs_common">Vanlig</string>
 
     <string name="share_dialog_title">Dela</string>
     <string name="share_file">Dela %1$s</string>

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

@@ -469,7 +469,6 @@
     <string name="pref_behaviour_entries_move">app klasörüne taşındı</string>
     <string name="pref_behaviour_entries_delete_file">silindi</string>
     <string name="prefs_storage_path">Depolama yolu</string>
-    <string name="prefs_common">Genel</string>
 
     <string name="share_dialog_title">Paylaşım</string>
     <string name="share_file">%1$s paylaş</string>

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

@@ -437,7 +437,6 @@
     <string name="pref_behaviour_entries_move">移动到应用文件夹</string>
     <string name="pref_behaviour_entries_delete_file">删除</string>
     <string name="prefs_storage_path">存储路径</string>
-    <string name="prefs_common">普通</string>
 
     <string name="share_dialog_title">共享</string>
     <string name="share_file">分享 %1$s</string>

+ 0 - 1
src/main/res/values-zh-rTW/strings.xml

@@ -446,7 +446,6 @@
     <string name="pref_behaviour_entries_move">移動到應用程式資料夾</string>
     <string name="pref_behaviour_entries_delete_file">已刪除</string>
     <string name="prefs_storage_path">儲存路徑</string>
-    <string name="prefs_common">共用</string>
 
     <string name="share_dialog_title">分享</string>
     <string name="share_file">分享 %1$s</string>

+ 0 - 1
src/main/res/values/strings.xml

@@ -471,7 +471,6 @@
     <string name="pref_behaviour_entries_move">moved to app folder</string>
     <string name="pref_behaviour_entries_delete_file">deleted</string>
     <string name="prefs_storage_path">Storage path</string>
-    <string name="prefs_common">Common</string>
 
     <string name="share_dialog_title">Sharing</string>
     <string name="share_file">Share %1$s</string>

+ 1 - 0
src/versionDev/res/values/setup.xml

@@ -16,6 +16,7 @@
     <string name="default_display_name_for_root_folder">Nextcloud dev</string>
     
     <bool name="logger_enabled">true</bool>
+    <string name="dev_changelog">https://github.com/nextcloud/android/commits/master</string>
 
     <!--Destination mail for sending log files -->
     <string name="mail_logger">android@nextcloud.com</string>