浏览代码

Merge pull request #6396 from nextcloud/editLabel

Edit label for public share
Andy Scherzinger 4 年之前
父节点
当前提交
2192bdcf39

+ 1 - 1
scripts/analysis/findbugs-results.txt

@@ -1 +1 @@
-335
+334

+ 29 - 56
src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java

@@ -1047,25 +1047,7 @@ public class FileDataStorageManager {
     public boolean saveShare(OCShare share) {
     public boolean saveShare(OCShare share) {
         boolean overridden = false;
         boolean overridden = false;
 
 
-        Uri contentUriShare = ProviderTableMeta.CONTENT_URI_SHARE;
-        ContentValues contentValues = new ContentValues();
-        contentValues.put(ProviderTableMeta.OCSHARES_FILE_SOURCE, share.getFileSource());
-        contentValues.put(ProviderTableMeta.OCSHARES_ITEM_SOURCE, share.getItemSource());
-        contentValues.put(ProviderTableMeta.OCSHARES_SHARE_TYPE, share.getShareType().getValue());
-        contentValues.put(ProviderTableMeta.OCSHARES_SHARE_WITH, share.getShareWith());
-        contentValues.put(ProviderTableMeta.OCSHARES_PATH, share.getPath());
-        contentValues.put(ProviderTableMeta.OCSHARES_PERMISSIONS, share.getPermissions());
-        contentValues.put(ProviderTableMeta.OCSHARES_SHARED_DATE, share.getSharedDate());
-        contentValues.put(ProviderTableMeta.OCSHARES_EXPIRATION_DATE, share.getExpirationDate());
-        contentValues.put(ProviderTableMeta.OCSHARES_TOKEN, share.getToken());
-        contentValues.put(ProviderTableMeta.OCSHARES_SHARE_WITH_DISPLAY_NAME, share.getSharedWithDisplayName());
-        contentValues.put(ProviderTableMeta.OCSHARES_IS_DIRECTORY, share.isFolder() ? 1 : 0);
-        contentValues.put(ProviderTableMeta.OCSHARES_USER_ID, share.getUserId());
-        contentValues.put(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED, share.getRemoteId());
-        contentValues.put(ProviderTableMeta.OCSHARES_ACCOUNT_OWNER, account.name);
-        contentValues.put(ProviderTableMeta.OCSHARES_IS_PASSWORD_PROTECTED, share.isPasswordProtected() ? 1 : 0);
-        contentValues.put(ProviderTableMeta.OCSHARES_NOTE, share.getNote());
-        contentValues.put(ProviderTableMeta.OCSHARES_HIDE_DOWNLOAD, share.isHideFileDownload());
+        ContentValues contentValues = createContentValueForShare(share);
 
 
         if (shareExistsForRemoteId(share.getRemoteId())) {// for renamed files; no more delete and create
         if (shareExistsForRemoteId(share.getRemoteId())) {// for renamed files; no more delete and create
             overridden = true;
             overridden = true;
@@ -1260,6 +1242,31 @@ public class FileDataStorageManager {
         return shares;
         return shares;
     }
     }
 
 
+    private ContentValues createContentValueForShare(OCShare share) {
+        ContentValues contentValues = new ContentValues();
+        contentValues.put(ProviderTableMeta.OCSHARES_FILE_SOURCE, share.getFileSource());
+        contentValues.put(ProviderTableMeta.OCSHARES_ITEM_SOURCE, share.getItemSource());
+        contentValues.put(ProviderTableMeta.OCSHARES_SHARE_TYPE, share.getShareType().getValue());
+        contentValues.put(ProviderTableMeta.OCSHARES_SHARE_WITH, share.getShareWith());
+        contentValues.put(ProviderTableMeta.OCSHARES_PATH, share.getPath());
+        contentValues.put(ProviderTableMeta.OCSHARES_PERMISSIONS, share.getPermissions());
+        contentValues.put(ProviderTableMeta.OCSHARES_SHARED_DATE, share.getSharedDate());
+        contentValues.put(ProviderTableMeta.OCSHARES_EXPIRATION_DATE, share.getExpirationDate());
+        contentValues.put(ProviderTableMeta.OCSHARES_TOKEN, share.getToken());
+        contentValues.put(ProviderTableMeta.OCSHARES_SHARE_WITH_DISPLAY_NAME, share.getSharedWithDisplayName());
+        contentValues.put(ProviderTableMeta.OCSHARES_IS_DIRECTORY, share.isFolder() ? 1 : 0);
+        contentValues.put(ProviderTableMeta.OCSHARES_USER_ID, share.getUserId());
+        contentValues.put(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED, share.getRemoteId());
+        contentValues.put(ProviderTableMeta.OCSHARES_ACCOUNT_OWNER, account.name);
+        contentValues.put(ProviderTableMeta.OCSHARES_IS_PASSWORD_PROTECTED, share.isPasswordProtected() ? 1 : 0);
+        contentValues.put(ProviderTableMeta.OCSHARES_NOTE, share.getNote());
+        contentValues.put(ProviderTableMeta.OCSHARES_HIDE_DOWNLOAD, share.isHideFileDownload());
+        contentValues.put(ProviderTableMeta.OCSHARES_SHARE_LINK, share.getShareLink());
+        contentValues.put(ProviderTableMeta.OCSHARES_SHARE_LABEL, share.getLabel());
+
+        return contentValues;
+    }
+
     // test with null cursor?
     // test with null cursor?
     private OCShare createShareInstance(Cursor cursor) {
     private OCShare createShareInstance(Cursor cursor) {
         OCShare share = new OCShare(getString(cursor, ProviderTableMeta.OCSHARES_PATH));
         OCShare share = new OCShare(getString(cursor, ProviderTableMeta.OCSHARES_PATH));
@@ -1279,6 +1286,7 @@ public class FileDataStorageManager {
         share.setNote(getString(cursor, ProviderTableMeta.OCSHARES_NOTE));
         share.setNote(getString(cursor, ProviderTableMeta.OCSHARES_NOTE));
         share.setHideFileDownload(getInt(cursor, ProviderTableMeta.OCSHARES_HIDE_DOWNLOAD) == 1);
         share.setHideFileDownload(getInt(cursor, ProviderTableMeta.OCSHARES_HIDE_DOWNLOAD) == 1);
         share.setShareLink(getString(cursor, ProviderTableMeta.OCSHARES_SHARE_LINK));
         share.setShareLink(getString(cursor, ProviderTableMeta.OCSHARES_SHARE_LINK));
+        share.setLabel(getString(cursor, ProviderTableMeta.OCSHARES_SHARE_LABEL));
 
 
         return share;
         return share;
     }
     }
@@ -1366,24 +1374,7 @@ public class FileDataStorageManager {
 
 
         // prepare operations to insert or update files to save in the given folder
         // prepare operations to insert or update files to save in the given folder
         for (OCShare share : shares) {
         for (OCShare share : shares) {
-            ContentValues contentValues = new ContentValues();
-            contentValues.put(ProviderTableMeta.OCSHARES_FILE_SOURCE, share.getFileSource());
-            contentValues.put(ProviderTableMeta.OCSHARES_ITEM_SOURCE, share.getItemSource());
-            contentValues.put(ProviderTableMeta.OCSHARES_SHARE_TYPE, share.getShareType().getValue());
-            contentValues.put(ProviderTableMeta.OCSHARES_SHARE_WITH, share.getShareWith());
-            contentValues.put(ProviderTableMeta.OCSHARES_PATH, share.getPath());
-            contentValues.put(ProviderTableMeta.OCSHARES_PERMISSIONS, share.getPermissions());
-            contentValues.put(ProviderTableMeta.OCSHARES_SHARED_DATE, share.getSharedDate());
-            contentValues.put(ProviderTableMeta.OCSHARES_EXPIRATION_DATE, share.getExpirationDate());
-            contentValues.put(ProviderTableMeta.OCSHARES_TOKEN, share.getToken());
-            contentValues.put(ProviderTableMeta.OCSHARES_SHARE_WITH_DISPLAY_NAME, share.getSharedWithDisplayName());
-            contentValues.put(ProviderTableMeta.OCSHARES_IS_DIRECTORY, share.isFolder() ? 1 : 0);
-            contentValues.put(ProviderTableMeta.OCSHARES_USER_ID, share.getUserId());
-            contentValues.put(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED, share.getRemoteId());
-            contentValues.put(ProviderTableMeta.OCSHARES_ACCOUNT_OWNER, account.name);
-            contentValues.put(ProviderTableMeta.OCSHARES_IS_PASSWORD_PROTECTED, share.isPasswordProtected() ? 1 : 0);
-            contentValues.put(ProviderTableMeta.OCSHARES_NOTE, share.getNote());
-            contentValues.put(ProviderTableMeta.OCSHARES_HIDE_DOWNLOAD, share.isHideFileDownload());
+            ContentValues contentValues = createContentValueForShare(share);
 
 
             if (shareExistsForRemoteId(share.getRemoteId())) {
             if (shareExistsForRemoteId(share.getRemoteId())) {
                 // updating an existing file
                 // updating an existing file
@@ -1613,25 +1604,7 @@ public class FileDataStorageManager {
         ContentValues contentValues;
         ContentValues contentValues;
         // prepare operations to insert or update files to save in the given folder
         // prepare operations to insert or update files to save in the given folder
         for (OCShare share : shares) {
         for (OCShare share : shares) {
-            contentValues = new ContentValues();
-            contentValues.put(ProviderTableMeta.OCSHARES_FILE_SOURCE, share.getFileSource());
-            contentValues.put(ProviderTableMeta.OCSHARES_ITEM_SOURCE, share.getItemSource());
-            contentValues.put(ProviderTableMeta.OCSHARES_SHARE_TYPE, share.getShareType().getValue());
-            contentValues.put(ProviderTableMeta.OCSHARES_SHARE_WITH, share.getShareWith());
-            contentValues.put(ProviderTableMeta.OCSHARES_PATH, share.getPath());
-            contentValues.put(ProviderTableMeta.OCSHARES_PERMISSIONS, share.getPermissions());
-            contentValues.put(ProviderTableMeta.OCSHARES_SHARED_DATE, share.getSharedDate());
-            contentValues.put(ProviderTableMeta.OCSHARES_EXPIRATION_DATE, share.getExpirationDate());
-            contentValues.put(ProviderTableMeta.OCSHARES_TOKEN, share.getToken());
-            contentValues.put(ProviderTableMeta.OCSHARES_SHARE_WITH_DISPLAY_NAME, share.getSharedWithDisplayName());
-            contentValues.put(ProviderTableMeta.OCSHARES_IS_DIRECTORY, share.isFolder() ? 1 : 0);
-            contentValues.put(ProviderTableMeta.OCSHARES_USER_ID, share.getUserId());
-            contentValues.put(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED, share.getRemoteId());
-            contentValues.put(ProviderTableMeta.OCSHARES_ACCOUNT_OWNER, account.name);
-            contentValues.put(ProviderTableMeta.OCSHARES_IS_PASSWORD_PROTECTED, share.isPasswordProtected() ? 1 : 0);
-            contentValues.put(ProviderTableMeta.OCSHARES_NOTE, share.getNote());
-            contentValues.put(ProviderTableMeta.OCSHARES_HIDE_DOWNLOAD, share.isHideFileDownload());
-            contentValues.put(ProviderTableMeta.OCSHARES_SHARE_LINK, share.getShareLink());
+            contentValues = createContentValueForShare(share);
 
 
             // adding a new share resource
             // adding a new share resource
             operations.add(ContentProviderOperation
             operations.add(ContentProviderOperation

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

@@ -31,7 +31,7 @@ import com.owncloud.android.MainApp;
  */
  */
 public class ProviderMeta {
 public class ProviderMeta {
     public static final String DB_NAME = "filelist";
     public static final String DB_NAME = "filelist";
-    public static final int DB_VERSION = 58;
+    public static final int DB_VERSION = 59;
 
 
     private ProviderMeta() {
     private ProviderMeta() {
         // No instance
         // No instance
@@ -146,6 +146,7 @@ public class ProviderMeta {
         public static final String OCSHARES_NOTE = "note";
         public static final String OCSHARES_NOTE = "note";
         public static final String OCSHARES_HIDE_DOWNLOAD = "hide_download";
         public static final String OCSHARES_HIDE_DOWNLOAD = "hide_download";
         public static final String OCSHARES_SHARE_LINK = "share_link";
         public static final String OCSHARES_SHARE_LINK = "share_link";
+        public static final String OCSHARES_SHARE_LABEL = "share_label";
 
 
         public static final String OCSHARES_DEFAULT_SORT_ORDER = OCSHARES_FILE_SOURCE
         public static final String OCSHARES_DEFAULT_SORT_ORDER = OCSHARES_FILE_SOURCE
                 + " collate nocase asc";
                 + " collate nocase asc";

+ 21 - 48
src/main/java/com/owncloud/android/operations/UpdateShareViaLinkOperation.java

@@ -20,11 +20,9 @@
 
 
 package com.owncloud.android.operations;
 package com.owncloud.android.operations;
 
 
-import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.lib.common.OwnCloudClient;
 import com.owncloud.android.lib.common.OwnCloudClient;
 import com.owncloud.android.lib.common.operations.RemoteOperation;
 import com.owncloud.android.lib.common.operations.RemoteOperation;
 import com.owncloud.android.lib.common.operations.RemoteOperationResult;
 import com.owncloud.android.lib.common.operations.RemoteOperationResult;
-import com.owncloud.android.lib.resources.files.FileUtils;
 import com.owncloud.android.lib.resources.shares.GetShareRemoteOperation;
 import com.owncloud.android.lib.resources.shares.GetShareRemoteOperation;
 import com.owncloud.android.lib.resources.shares.OCShare;
 import com.owncloud.android.lib.resources.shares.OCShare;
 import com.owncloud.android.lib.resources.shares.UpdateShareRemoteOperation;
 import com.owncloud.android.lib.resources.shares.UpdateShareRemoteOperation;
@@ -35,23 +33,17 @@ import com.owncloud.android.operations.common.SyncOperation;
  * Updates an existing public share for a given file
  * Updates an existing public share for a given file
  */
  */
 public class UpdateShareViaLinkOperation extends SyncOperation {
 public class UpdateShareViaLinkOperation extends SyncOperation {
-
-    private String path;
     private String password;
     private String password;
-    /** Enable upload permissions to update in Share resource. */
-    private Boolean publicUploadOnFolder;
-    private Boolean publicUploadOnFile;
+    /**
+     * Enable upload permissions to update in Share resource.
+     */
+    private boolean publicUpload;
     private Boolean hideFileDownload;
     private Boolean hideFileDownload;
     private long expirationDateInMillis;
     private long expirationDateInMillis;
     private long shareId;
     private long shareId;
+    private String label;
 
 
-    /**
-     * Constructor
-     *
-     * @param path Full path of the file/folder being shared. Mandatory argument
-     */
-    public UpdateShareViaLinkOperation(String path, long shareId) {
-        this.path = path;
+    public UpdateShareViaLinkOperation(long shareId) {
         expirationDateInMillis = 0;
         expirationDateInMillis = 0;
         this.shareId = shareId;
         this.shareId = shareId;
     }
     }
@@ -63,9 +55,15 @@ public class UpdateShareViaLinkOperation extends SyncOperation {
         UpdateShareRemoteOperation updateOp = new UpdateShareRemoteOperation(publicShare.getRemoteId());
         UpdateShareRemoteOperation updateOp = new UpdateShareRemoteOperation(publicShare.getRemoteId());
         updateOp.setPassword(password);
         updateOp.setPassword(password);
         updateOp.setExpirationDate(expirationDateInMillis);
         updateOp.setExpirationDate(expirationDateInMillis);
-        updateOp.setPublicUploadOnFolder(publicUploadOnFolder);
-        updateOp.setPublicUploadOnFile(publicUploadOnFile);
         updateOp.setHideFileDownload(hideFileDownload);
         updateOp.setHideFileDownload(hideFileDownload);
+        updateOp.setLabel(label);
+
+        if (publicShare.isFolder()) {
+            updateOp.setPublicUploadOnFolder(publicUpload);
+        } else {
+            updateOp.setPublicUploadOnFile(publicUpload);
+        }
+
         RemoteOperationResult result = updateOp.execute(client);
         RemoteOperationResult result = updateOp.execute(client);
 
 
         if (result.isSuccess()) {
         if (result.isSuccess()) {
@@ -74,38 +72,13 @@ public class UpdateShareViaLinkOperation extends SyncOperation {
             result = getShareOp.execute(client);
             result = getShareOp.execute(client);
             if (result.isSuccess()) {
             if (result.isSuccess()) {
                 OCShare share = (OCShare) result.getData().get(0);
                 OCShare share = (OCShare) result.getData().get(0);
-                updateData(share);
+                getStorageManager().saveShare(share);
             }
             }
         }
         }
 
 
         return result;
         return result;
     }
     }
 
 
-    private void updateData(OCShare share) {
-        // Update DB with the response
-        share.setPath(path);
-        if (path.endsWith(FileUtils.PATH_SEPARATOR)) {
-            share.setFolder(true);
-        } else {
-            share.setFolder(false);
-        }
-
-        getStorageManager().saveShare(share);   // TODO info about having a password? ask to Gonzalo
-
-        // Update OCFile with data from share: ShareByLink  and publicLink
-        // TODO check & remove if not needed
-        OCFile file = getStorageManager().getFileByPath(path);
-        if (file != null) {
-            file.setPublicLink(share.getShareLink());
-            file.setSharedViaLink(true);
-            getStorageManager().saveFile(file);
-        }
-    }
-
-    public String getPath() {
-        return this.path;
-    }
-
     public String getPassword() {
     public String getPassword() {
         return this.password;
         return this.password;
     }
     }
@@ -114,12 +87,8 @@ public class UpdateShareViaLinkOperation extends SyncOperation {
         this.password = password;
         this.password = password;
     }
     }
 
 
-    public void setPublicUploadOnFolder(Boolean publicUploadOnFolder) {
-        this.publicUploadOnFolder = publicUploadOnFolder;
-    }
-
-    public void setPublicUploadOnFile(Boolean publicUploadOnFile) {
-        this.publicUploadOnFile = publicUploadOnFile;
+    public void setPublicUpload(boolean publicUpload) {
+        this.publicUpload = publicUpload;
     }
     }
 
 
     public void setHideFileDownload(Boolean hideFileDownload) {
     public void setHideFileDownload(Boolean hideFileDownload) {
@@ -129,4 +98,8 @@ public class UpdateShareViaLinkOperation extends SyncOperation {
     public void setExpirationDateInMillis(long expirationDateInMillis) {
     public void setExpirationDateInMillis(long expirationDateInMillis) {
         this.expirationDateInMillis = expirationDateInMillis;
         this.expirationDateInMillis = expirationDateInMillis;
     }
     }
+
+    public void setLabel(String label) {
+        this.label = label;
+    }
 }
 }

+ 20 - 1
src/main/java/com/owncloud/android/providers/FileContentProvider.java

@@ -748,7 +748,8 @@ public class FileContentProvider extends ContentProvider {
                        + ProviderTableMeta.OCSHARES_IS_PASSWORD_PROTECTED + INTEGER
                        + ProviderTableMeta.OCSHARES_IS_PASSWORD_PROTECTED + INTEGER
                        + ProviderTableMeta.OCSHARES_NOTE + TEXT
                        + ProviderTableMeta.OCSHARES_NOTE + TEXT
                        + ProviderTableMeta.OCSHARES_HIDE_DOWNLOAD + INTEGER
                        + ProviderTableMeta.OCSHARES_HIDE_DOWNLOAD + INTEGER
-                       + ProviderTableMeta.OCSHARES_SHARE_LINK + " TEXT );");
+                       + ProviderTableMeta.OCSHARES_SHARE_LINK + TEXT
+                       + ProviderTableMeta.OCSHARES_SHARE_LABEL + " TEXT );");
     }
     }
 
 
     private void createCapabilitiesTable(SQLiteDatabase db) {
     private void createCapabilitiesTable(SQLiteDatabase db) {
@@ -2253,6 +2254,24 @@ public class FileContentProvider extends ContentProvider {
             if (!upgraded) {
             if (!upgraded) {
                 Log_OC.i(SQL, String.format(Locale.ENGLISH, UPGRADE_VERSION_MSG, oldVersion, newVersion));
                 Log_OC.i(SQL, String.format(Locale.ENGLISH, UPGRADE_VERSION_MSG, oldVersion, newVersion));
             }
             }
+
+            if (oldVersion < 59 && newVersion >= 59) {
+                Log_OC.i(SQL, "Entering in the #59 add public label to share table");
+                db.beginTransaction();
+                try {
+                    db.execSQL(ALTER_TABLE + ProviderTableMeta.OCSHARES_TABLE_NAME +
+                                   ADD_COLUMN + ProviderTableMeta.OCSHARES_SHARE_LABEL + " TEXT ");
+
+                    upgraded = true;
+                    db.setTransactionSuccessful();
+                } finally {
+                    db.endTransaction();
+                }
+            }
+
+            if (!upgraded) {
+                Log_OC.i(SQL, String.format(Locale.ENGLISH, UPGRADE_VERSION_MSG, oldVersion, newVersion));
+            }
         }
         }
     }
     }
 }
 }

+ 20 - 15
src/main/java/com/owncloud/android/services/OperationsService.java

@@ -103,6 +103,7 @@ public class OperationsService extends Service {
     public static final String EXTRA_SHARE_EXPIRATION_DATE_IN_MILLIS = "SHARE_EXPIRATION_YEAR";
     public static final String EXTRA_SHARE_EXPIRATION_DATE_IN_MILLIS = "SHARE_EXPIRATION_YEAR";
     public static final String EXTRA_SHARE_PERMISSIONS = "SHARE_PERMISSIONS";
     public static final String EXTRA_SHARE_PERMISSIONS = "SHARE_PERMISSIONS";
     public static final String EXTRA_SHARE_PUBLIC_UPLOAD = "SHARE_PUBLIC_UPLOAD";
     public static final String EXTRA_SHARE_PUBLIC_UPLOAD = "SHARE_PUBLIC_UPLOAD";
+    public static final String EXTRA_SHARE_PUBLIC_LABEL = "SHARE_PUBLIC_LABEL";
     public static final String EXTRA_SHARE_HIDE_FILE_DOWNLOAD = "HIDE_FILE_DOWNLOAD";
     public static final String EXTRA_SHARE_HIDE_FILE_DOWNLOAD = "HIDE_FILE_DOWNLOAD";
     public static final String EXTRA_SHARE_ID = "SHARE_ID";
     public static final String EXTRA_SHARE_ID = "SHARE_ID";
     public static final String EXTRA_SHARE_NOTE = "SHARE_NOTE";
     public static final String EXTRA_SHARE_NOTE = "SHARE_NOTE";
@@ -111,7 +112,8 @@ public class OperationsService extends Service {
     public static final String ACTION_CREATE_SHARE_VIA_LINK = "CREATE_SHARE_VIA_LINK";
     public static final String ACTION_CREATE_SHARE_VIA_LINK = "CREATE_SHARE_VIA_LINK";
     public static final String ACTION_CREATE_SHARE_WITH_SHAREE = "CREATE_SHARE_WITH_SHAREE";
     public static final String ACTION_CREATE_SHARE_WITH_SHAREE = "CREATE_SHARE_WITH_SHAREE";
     public static final String ACTION_UNSHARE = "UNSHARE";
     public static final String ACTION_UNSHARE = "UNSHARE";
-    public static final String ACTION_UPDATE_SHARE = "UPDATE_SHARE";
+    public static final String ACTION_UPDATE_PUBLIC_SHARE = "UPDATE_PUBLIC_SHARE";
+    public static final String ACTION_UPDATE_USER_SHARE = "UPDATE_USER_SHARE";
     public static final String ACTION_UPDATE_SHARE_NOTE = "UPDATE_SHARE_NOTE";
     public static final String ACTION_UPDATE_SHARE_NOTE = "UPDATE_SHARE_NOTE";
     public static final String ACTION_GET_SERVER_INFO = "GET_SERVER_INFO";
     public static final String ACTION_GET_SERVER_INFO = "GET_SERVER_INFO";
     public static final String ACTION_GET_USER_NAME = "GET_USER_NAME";
     public static final String ACTION_GET_USER_NAME = "GET_USER_NAME";
@@ -533,13 +535,11 @@ public class OperationsService extends Service {
                         }
                         }
                         break;
                         break;
 
 
-                    case ACTION_UPDATE_SHARE:
-                        remotePath = operationIntent.getStringExtra(EXTRA_REMOTE_PATH);
+                    case ACTION_UPDATE_PUBLIC_SHARE:
                         shareId = operationIntent.getLongExtra(EXTRA_SHARE_ID, -1);
                         shareId = operationIntent.getLongExtra(EXTRA_SHARE_ID, -1);
 
 
-                        if (!TextUtils.isEmpty(remotePath)) {
-                            UpdateShareViaLinkOperation updateLinkOperation =
-                                new UpdateShareViaLinkOperation(remotePath, shareId);
+                        if (shareId > 0) {
+                            UpdateShareViaLinkOperation updateLinkOperation = new UpdateShareViaLinkOperation(shareId);
 
 
                             password = operationIntent.getStringExtra(EXTRA_SHARE_PASSWORD);
                             password = operationIntent.getStringExtra(EXTRA_SHARE_PASSWORD);
                             updateLinkOperation.setPassword(password);
                             updateLinkOperation.setPassword(password);
@@ -552,23 +552,28 @@ public class OperationsService extends Service {
                             updateLinkOperation.setHideFileDownload(hideFileDownload);
                             updateLinkOperation.setHideFileDownload(hideFileDownload);
 
 
                             if (operationIntent.hasExtra(EXTRA_SHARE_PUBLIC_UPLOAD)) {
                             if (operationIntent.hasExtra(EXTRA_SHARE_PUBLIC_UPLOAD)) {
-                                if (remotePath.endsWith("/")) {
-                                    updateLinkOperation.setPublicUploadOnFolder(
-                                        operationIntent.getBooleanExtra(EXTRA_SHARE_PUBLIC_UPLOAD, false));
-                                } else {
-                                    updateLinkOperation.setPublicUploadOnFile(
-                                        operationIntent.getBooleanExtra(EXTRA_SHARE_PUBLIC_UPLOAD, false));
-                                }
+                                updateLinkOperation.setPublicUpload(true);
                             }
                             }
+
+                            if (operationIntent.hasExtra(EXTRA_SHARE_PUBLIC_LABEL)) {
+                                updateLinkOperation.setLabel(operationIntent.getStringExtra(EXTRA_SHARE_PUBLIC_LABEL));
+                            }
+
                             operation = updateLinkOperation;
                             operation = updateLinkOperation;
-                        } else if (shareId > 0) {
+                        }
+                        break;
+
+                    case ACTION_UPDATE_USER_SHARE:
+                        shareId = operationIntent.getLongExtra(EXTRA_SHARE_ID, -1);
+
+                        if (shareId > 0) {
                             UpdateSharePermissionsOperation updateShare = new UpdateSharePermissionsOperation(shareId);
                             UpdateSharePermissionsOperation updateShare = new UpdateSharePermissionsOperation(shareId);
 
 
                             int permissions = operationIntent.getIntExtra(EXTRA_SHARE_PERMISSIONS, -1);
                             int permissions = operationIntent.getIntExtra(EXTRA_SHARE_PERMISSIONS, -1);
                             updateShare.setPermissions(permissions);
                             updateShare.setPermissions(permissions);
 
 
                             long expirationDateInMillis = operationIntent
                             long expirationDateInMillis = operationIntent
-                                    .getLongExtra(EXTRA_SHARE_EXPIRATION_DATE_IN_MILLIS, 0L);
+                                .getLongExtra(EXTRA_SHARE_EXPIRATION_DATE_IN_MILLIS, 0L);
                             updateShare.setExpirationDateInMillis(expirationDateInMillis);
                             updateShare.setExpirationDateInMillis(expirationDateInMillis);
 
 
                             password = operationIntent.getStringExtra(EXTRA_SHARE_PASSWORD);
                             password = operationIntent.getStringExtra(EXTRA_SHARE_PASSWORD);

+ 4 - 0
src/main/java/com/owncloud/android/ui/adapter/PublicShareViewHolder.java

@@ -24,6 +24,7 @@ package com.owncloud.android.ui.adapter;
 
 
 import android.content.Context;
 import android.content.Context;
 import android.graphics.PorterDuff;
 import android.graphics.PorterDuff;
+import android.text.TextUtils;
 import android.view.View;
 import android.view.View;
 
 
 import com.owncloud.android.R;
 import com.owncloud.android.R;
@@ -48,6 +49,9 @@ class PublicShareViewHolder extends RecyclerView.ViewHolder {
     }
     }
 
 
     public void bind(OCShare publicShare, PublicShareInterface listener) {
     public void bind(OCShare publicShare, PublicShareInterface listener) {
+        if (!TextUtils.isEmpty(publicShare.getLabel())) {
+            binding.publicShareLabel.setText(publicShare.getLabel());
+        }
         binding.copyInternalLinkIcon
         binding.copyInternalLinkIcon
             .getBackground()
             .getBackground()
             .setColorFilter(context.getResources().getColor(R.color.primary_button_background_color),
             .setColorFilter(context.getResources().getColor(R.color.primary_button_background_color),

+ 0 - 24
src/main/java/com/owncloud/android/ui/adapter/ShareeListAdapter.java

@@ -44,7 +44,6 @@ import com.owncloud.android.lib.resources.shares.OCShare;
 import com.owncloud.android.lib.resources.shares.ShareType;
 import com.owncloud.android.lib.resources.shares.ShareType;
 import com.owncloud.android.lib.resources.status.OCCapability;
 import com.owncloud.android.lib.resources.status.OCCapability;
 import com.owncloud.android.lib.resources.status.OwnCloudVersion;
 import com.owncloud.android.lib.resources.status.OwnCloudVersion;
-import com.owncloud.android.services.OperationsService;
 import com.owncloud.android.ui.TextDrawable;
 import com.owncloud.android.ui.TextDrawable;
 import com.owncloud.android.ui.dialog.ExpirationDatePickerDialogFragment;
 import com.owncloud.android.ui.dialog.ExpirationDatePickerDialogFragment;
 import com.owncloud.android.ui.dialog.NoteDialogFragment;
 import com.owncloud.android.ui.dialog.NoteDialogFragment;
@@ -334,16 +333,6 @@ public class ShareeListAdapter extends RecyclerView.Adapter<ShareeListAdapter.Us
                 notifyDataSetChanged();
                 notifyDataSetChanged();
                 return true;
                 return true;
             }
             }
-            case R.id.action_hide_file_listing: {
-                item.setChecked(!item.isChecked());
-                if (capabilities.getFilesFileDrop().isTrue()) {
-                    listener.setHideFileListingPermissionsToShare(share, item.isChecked());
-                } else {
-                    // not supported in ownCloud
-                    listener.showNotSupportedByOcMessage();
-                }
-                return true;
-            }
             case R.id.action_password: {
             case R.id.action_password: {
                 listener.requestPasswordForShare(share);
                 listener.requestPasswordForShare(share);
                 return true;
                 return true;
@@ -434,8 +423,6 @@ public class ShareeListAdapter extends RecyclerView.Adapter<ShareeListAdapter.Us
                                      boolean canEditChange,
                                      boolean canEditChange,
                                      boolean canEditDelete);
                                      boolean canEditDelete);
 
 
-        void updateNoteToShare(OCShare share, String note);
-
         /**
         /**
          * show a snackbar that this feature is not supported by ownCloud.
          * show a snackbar that this feature is not supported by ownCloud.
          */
          */
@@ -447,16 +434,5 @@ public class ShareeListAdapter extends RecyclerView.Adapter<ShareeListAdapter.Us
          * @param share the share for which a password shall be configured/removed
          * @param share the share for which a password shall be configured/removed
          */
          */
         void requestPasswordForShare(OCShare share);
         void requestPasswordForShare(OCShare share);
-
-        /**
-         * Updates a public share on a folder to set its hide file listing permission.
-         * Starts a request to do it in {@link OperationsService}
-         *
-         * @param share           {@link OCShare} instance which permissions will be updated.
-         * @param hideFileListing New state of the permission for editing the folder shared via link.
-         */
-        void setHideFileListingPermissionsToShare(OCShare share, boolean hideFileListing);
-
-        void setHideFileDownloadPermissionToShare(OCFile file, boolean hideFileDownload);
     }
     }
 }
 }

+ 6 - 5
src/main/java/com/owncloud/android/ui/dialog/ExpirationDatePickerDialogFragment.java

@@ -32,6 +32,7 @@ import com.owncloud.android.R;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.lib.resources.shares.OCShare;
 import com.owncloud.android.lib.resources.shares.OCShare;
 import com.owncloud.android.ui.activity.FileActivity;
 import com.owncloud.android.ui.activity.FileActivity;
+import com.owncloud.android.ui.helpers.FileOperationsHelper;
 import com.owncloud.android.utils.ThemeUtils;
 import com.owncloud.android.utils.ThemeUtils;
 
 
 import java.util.Calendar;
 import java.util.Calendar;
@@ -134,8 +135,8 @@ public class ExpirationDatePickerDialogFragment
                 getText(R.string.share_via_link_unset_password),
                 getText(R.string.share_via_link_unset_password),
                 (dialog1, which) -> {
                 (dialog1, which) -> {
                     if (file != null) {
                     if (file != null) {
-                        ((FileActivity) getActivity()).getFileOperationsHelper()
-                                .setExpirationDateToShareViaLink(file, -1);
+                        ((FileActivity) getActivity()).getFileOperationsHelper().setExpirationDateToPublicShare(share,
+                                                                                                                -1);
                     } else if (share != null) {
                     } else if (share != null) {
                         ((FileActivity) getActivity()).getFileOperationsHelper().setExpirationDateToShare(share,-1);
                         ((FileActivity) getActivity()).getFileOperationsHelper().setExpirationDateToShare(share,-1);
                     }
                     }
@@ -175,11 +176,11 @@ public class ExpirationDatePickerDialogFragment
         chosenDate.set(Calendar.DAY_OF_MONTH, dayOfMonth);
         chosenDate.set(Calendar.DAY_OF_MONTH, dayOfMonth);
         long chosenDateInMillis = chosenDate.getTimeInMillis();
         long chosenDateInMillis = chosenDate.getTimeInMillis();
 
 
+        FileOperationsHelper operationsHelper = ((FileActivity) requireActivity()).getFileOperationsHelper();
         if (file != null) {
         if (file != null) {
-            ((FileActivity) getActivity()).getFileOperationsHelper()
-                    .setExpirationDateToShareViaLink(file, chosenDateInMillis);
+            operationsHelper.setExpirationDateToPublicShare(share, chosenDateInMillis);
         } else if (share != null) {
         } else if (share != null) {
-            ((FileActivity) getActivity()).getFileOperationsHelper().setExpirationDateToShare(share,chosenDateInMillis);
+            operationsHelper.setExpirationDateToShare(share, chosenDateInMillis);
         }
         }
     }
     }
 }
 }

+ 34 - 26
src/main/java/com/owncloud/android/ui/dialog/RenameFileDialogFragment.java

@@ -1,4 +1,4 @@
-/**
+/*
  *   ownCloud Android client application
  *   ownCloud Android client application
  *
  *
  *   @author David A. Velasco
  *   @author David A. Velasco
@@ -20,7 +20,7 @@
 
 
 package com.owncloud.android.ui.dialog;
 package com.owncloud.android.ui.dialog;
 
 
-/**
+/*
  *  Dialog to input a new name for an {@link OCFile} being renamed.
  *  Dialog to input a new name for an {@link OCFile} being renamed.
  *
  *
  *  Triggers the rename operation.
  *  Triggers the rename operation.
@@ -36,9 +36,9 @@ import android.view.View;
 import android.view.Window;
 import android.view.Window;
 import android.view.WindowManager.LayoutParams;
 import android.view.WindowManager.LayoutParams;
 import android.widget.EditText;
 import android.widget.EditText;
-import android.widget.TextView;
 
 
 import com.owncloud.android.R;
 import com.owncloud.android.R;
+import com.owncloud.android.databinding.EditBoxDialogBinding;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.lib.resources.files.FileUtils;
 import com.owncloud.android.lib.resources.files.FileUtils;
 import com.owncloud.android.ui.activity.ComponentsGetter;
 import com.owncloud.android.ui.activity.ComponentsGetter;
@@ -60,6 +60,7 @@ public class RenameFileDialogFragment
 
 
     private static final String ARG_TARGET_FILE = "TARGET_FILE";
     private static final String ARG_TARGET_FILE = "TARGET_FILE";
 
 
+    private EditBoxDialogBinding binding;
     private OCFile mTargetFile;
     private OCFile mTargetFile;
 
 
     /**
     /**
@@ -85,44 +86,43 @@ public class RenameFileDialogFragment
 
 
         AlertDialog alertDialog = (AlertDialog) getDialog();
         AlertDialog alertDialog = (AlertDialog) getDialog();
 
 
-        alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(color);
-        alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(color);
+        if (alertDialog != null) {
+            alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(color);
+            alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(color);
+        }
     }
     }
 
 
     @NonNull
     @NonNull
     @Override
     @Override
     public Dialog onCreateDialog(Bundle savedInstanceState) {
     public Dialog onCreateDialog(Bundle savedInstanceState) {
         int accentColor = ThemeUtils.primaryAccentColor(getContext());
         int accentColor = ThemeUtils.primaryAccentColor(getContext());
-        mTargetFile = getArguments().getParcelable(ARG_TARGET_FILE);
+        mTargetFile = requireArguments().getParcelable(ARG_TARGET_FILE);
 
 
         // Inflate the layout for the dialog
         // Inflate the layout for the dialog
-        LayoutInflater inflater = getActivity().getLayoutInflater();
-        View v = inflater.inflate(R.layout.edit_box_dialog, null);
+        LayoutInflater inflater = requireActivity().getLayoutInflater();
+        binding = EditBoxDialogBinding.inflate(inflater, null, false);
+        View view = binding.getRoot();
 
 
         // Setup layout
         // Setup layout
         String currentName = mTargetFile.getFileName();
         String currentName = mTargetFile.getFileName();
-        EditText inputText = v.findViewById(R.id.user_input);
+        EditText inputText = binding.userInput;
         inputText.setHighlightColor(ThemeUtils.primaryColor(getActivity()));
         inputText.setHighlightColor(ThemeUtils.primaryColor(getActivity()));
         inputText.setText(currentName);
         inputText.setText(currentName);
         ThemeUtils.themeEditText(getContext(), inputText, false);
         ThemeUtils.themeEditText(getContext(), inputText, false);
         int selectionStart = 0;
         int selectionStart = 0;
         int extensionStart = mTargetFile.isFolder() ? -1 : currentName.lastIndexOf('.');
         int extensionStart = mTargetFile.isFolder() ? -1 : currentName.lastIndexOf('.');
         int selectionEnd = extensionStart >= 0 ? extensionStart : currentName.length();
         int selectionEnd = extensionStart >= 0 ? extensionStart : currentName.length();
-        if (selectionStart >= 0 && selectionEnd >= 0) {
-            inputText.setSelection(
-                    Math.min(selectionStart, selectionEnd),
-                    Math.max(selectionStart, selectionEnd));
-        }
+        inputText.setSelection(Math.min(selectionStart, selectionEnd), Math.max(selectionStart, selectionEnd));
         inputText.requestFocus();
         inputText.requestFocus();
         inputText.getBackground().setColorFilter(accentColor, PorterDuff.Mode.SRC_ATOP);
         inputText.getBackground().setColorFilter(accentColor, PorterDuff.Mode.SRC_ATOP);
 
 
         // Build the dialog
         // Build the dialog
-        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
-        builder.setView(v)
-                .setPositiveButton(R.string.file_rename, this)
-                .setNegativeButton(R.string.common_cancel, this)
-                .setTitle(ThemeUtils.getColoredTitle(getResources().getString(R.string.rename_dialog_title),
-                        accentColor));
+        AlertDialog.Builder builder = new AlertDialog.Builder(requireActivity());
+        builder.setView(view)
+            .setPositiveButton(R.string.file_rename, this)
+            .setNegativeButton(R.string.common_cancel, this)
+            .setTitle(ThemeUtils.getColoredTitle(getResources().getString(R.string.rename_dialog_title),
+                                                 accentColor));
         Dialog d = builder.create();
         Dialog d = builder.create();
 
 
         Window window = d.getWindow();
         Window window = d.getWindow();
@@ -137,22 +137,30 @@ public class RenameFileDialogFragment
     @Override
     @Override
     public void onClick(DialogInterface dialog, int which) {
     public void onClick(DialogInterface dialog, int which) {
         if (which == AlertDialog.BUTTON_POSITIVE) {
         if (which == AlertDialog.BUTTON_POSITIVE) {
-            String newFileName =
-                ((TextView)(getDialog().findViewById(R.id.user_input)))
-                    .getText().toString().trim();
+            String newFileName = "";
+
+            if (binding.userInput.getText() != null) {
+                newFileName = binding.userInput.getText().toString().trim();
+            }
 
 
             if (TextUtils.isEmpty(newFileName)) {
             if (TextUtils.isEmpty(newFileName)) {
-                DisplayUtils.showSnackMessage(getActivity(), R.string.filename_empty);
+                DisplayUtils.showSnackMessage(requireActivity(), R.string.filename_empty);
                 return;
                 return;
             }
             }
 
 
             if (!FileUtils.isValidName(newFileName)) {
             if (!FileUtils.isValidName(newFileName)) {
-                DisplayUtils.showSnackMessage(getActivity(), R.string.filename_forbidden_charaters_from_server);
+                DisplayUtils.showSnackMessage(requireActivity(), R.string.filename_forbidden_charaters_from_server);
 
 
                 return;
                 return;
             }
             }
 
 
-            ((ComponentsGetter) getActivity()).getFileOperationsHelper().renameFile(mTargetFile, newFileName);
+            ((ComponentsGetter) requireActivity()).getFileOperationsHelper().renameFile(mTargetFile, newFileName);
         }
         }
     }
     }
+
+    @Override
+    public void onDestroyView() {
+        super.onDestroyView();
+        binding = null;
+    }
 }
 }

+ 141 - 0
src/main/java/com/owncloud/android/ui/dialog/RenamePublicShareDialogFragment.java

@@ -0,0 +1,141 @@
+/*
+ * Nextcloud Android client application
+ *
+ * @author Tobias Kaminsky
+ * Copyright (C) 2020 Tobias Kaminsky
+ * Copyright (C) 2020 Nextcloud GmbH.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+package com.owncloud.android.ui.dialog;
+
+import android.app.Dialog;
+import android.content.DialogInterface;
+import android.graphics.PorterDuff;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.Window;
+import android.view.WindowManager.LayoutParams;
+import android.widget.EditText;
+
+import com.owncloud.android.R;
+import com.owncloud.android.databinding.EditBoxDialogBinding;
+import com.owncloud.android.lib.resources.shares.OCShare;
+import com.owncloud.android.ui.activity.ComponentsGetter;
+import com.owncloud.android.utils.DisplayUtils;
+import com.owncloud.android.utils.ThemeUtils;
+
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.AlertDialog;
+import androidx.fragment.app.DialogFragment;
+
+/**
+ * Dialog to rename a public share
+ */
+public class RenamePublicShareDialogFragment
+    extends DialogFragment implements DialogInterface.OnClickListener {
+
+    private static final String ARG_PUBLIC_SHARE = "PUBLIC_SHARE";
+
+    public static final String RENAME_PUBLIC_SHARE_FRAGMENT = "RENAME_PUBLIC_SHARE_FRAGMENT";
+
+    private EditBoxDialogBinding binding;
+    private OCShare publicShare;
+
+    public static RenamePublicShareDialogFragment newInstance(OCShare share) {
+        RenamePublicShareDialogFragment frag = new RenamePublicShareDialogFragment();
+        Bundle args = new Bundle();
+        args.putParcelable(ARG_PUBLIC_SHARE, share);
+        frag.setArguments(args);
+        return frag;
+
+    }
+
+    @Override
+    public void onStart() {
+        super.onStart();
+
+        int color = ThemeUtils.primaryAccentColor(getContext());
+
+        AlertDialog alertDialog = (AlertDialog) getDialog();
+
+        if (alertDialog != null) {
+            alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(color);
+            alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(color);
+        }
+    }
+
+    @NonNull
+    @Override
+    public Dialog onCreateDialog(Bundle savedInstanceState) {
+        int accentColor = ThemeUtils.primaryAccentColor(getContext());
+        publicShare = requireArguments().getParcelable(ARG_PUBLIC_SHARE);
+
+        // Inflate the layout for the dialog
+        LayoutInflater inflater = requireActivity().getLayoutInflater();
+        binding = EditBoxDialogBinding.inflate(inflater, null, false);
+        View view = binding.getRoot();
+
+        // Setup layout
+        EditText inputText = binding.userInput;
+        inputText.setText(publicShare.getLabel());
+        inputText.requestFocus();
+        inputText.getBackground().setColorFilter(accentColor, PorterDuff.Mode.SRC_ATOP);
+        inputText.setHighlightColor(ThemeUtils.primaryColor(getActivity()));
+
+        // Build the dialog
+        AlertDialog.Builder builder = new AlertDialog.Builder(requireActivity());
+        builder.setView(view)
+            .setPositiveButton(R.string.file_rename, this)
+            .setNegativeButton(R.string.common_cancel, this)
+            .setTitle(ThemeUtils.getColoredTitle(getResources().getString(R.string.public_share_name),
+                                                 accentColor));
+        Dialog dialog = builder.create();
+
+        Window window = dialog.getWindow();
+        if (window != null) {
+            window.setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE);
+        }
+
+        return dialog;
+    }
+
+
+    @Override
+    public void onClick(DialogInterface dialog, int which) {
+        if (which == AlertDialog.BUTTON_POSITIVE) {
+            String newName = "";
+            if (binding.userInput.getText() != null) {
+                newName = binding.userInput.getText().toString().trim();
+            }
+
+            if (TextUtils.isEmpty(newName)) {
+                DisplayUtils.showSnackMessage(requireActivity(), R.string.label_empty);
+                return;
+            }
+
+            ((ComponentsGetter) requireActivity()).getFileOperationsHelper().setLabelToPublicShare(publicShare,
+                                                                                                   newName);
+        }
+    }
+
+    @Override
+    public void onDestroyView() {
+        super.onDestroyView();
+        binding = null;
+    }
+}

+ 1 - 1
src/main/java/com/owncloud/android/ui/dialog/SendShareDialog.java

@@ -180,7 +180,7 @@ public class SendShareDialog extends BottomSheetDialogFragment {
             requestPasswordForShareViaLink();
             requestPasswordForShareViaLink();
         } else {
         } else {
             // create without password if not enforced by server or we don't know if enforced;
             // create without password if not enforced by server or we don't know if enforced;
-            ((FileActivity) getActivity()).getFileOperationsHelper().shareFileViaLink(file, null);
+            ((FileActivity) getActivity()).getFileOperationsHelper().shareFileViaPublicShare(file, null);
         }
         }
 
 
         this.dismiss();
         this.dismiss();

+ 2 - 2
src/main/java/com/owncloud/android/ui/dialog/SharePasswordDialogFragment.java

@@ -193,9 +193,9 @@ public class SharePasswordDialogFragment extends DialogFragment implements Dialo
 
 
     private void setPassword(boolean createShare, OCFile file, String password) {
     private void setPassword(boolean createShare, OCFile file, String password) {
         if (createShare) {
         if (createShare) {
-            ((FileActivity) getActivity()).getFileOperationsHelper().shareFileViaLink(file, password);
+            ((FileActivity) getActivity()).getFileOperationsHelper().shareFileViaPublicShare(file, password);
         } else {
         } else {
-            ((FileActivity) getActivity()).getFileOperationsHelper().setPasswordToShareViaLink(file, password);
+            ((FileActivity) getActivity()).getFileOperationsHelper().setPasswordToPublicShare(share, password);
         }
         }
     }
     }
 
 

+ 15 - 25
src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingFragment.java

@@ -62,6 +62,7 @@ import com.owncloud.android.ui.adapter.ShareeListAdapter;
 import com.owncloud.android.ui.decoration.SimpleListItemDividerDecoration;
 import com.owncloud.android.ui.decoration.SimpleListItemDividerDecoration;
 import com.owncloud.android.ui.dialog.ExpirationDatePickerDialogFragment;
 import com.owncloud.android.ui.dialog.ExpirationDatePickerDialogFragment;
 import com.owncloud.android.ui.dialog.NoteDialogFragment;
 import com.owncloud.android.ui.dialog.NoteDialogFragment;
+import com.owncloud.android.ui.dialog.RenamePublicShareDialogFragment;
 import com.owncloud.android.ui.dialog.SharePasswordDialogFragment;
 import com.owncloud.android.ui.dialog.SharePasswordDialogFragment;
 import com.owncloud.android.ui.fragment.util.FileDetailSharingFragmentHelper;
 import com.owncloud.android.ui.fragment.util.FileDetailSharingFragmentHelper;
 import com.owncloud.android.ui.fragment.util.SharingMenuHelper;
 import com.owncloud.android.ui.fragment.util.SharingMenuHelper;
@@ -327,7 +328,7 @@ public class FileDetailSharingFragment extends Fragment implements ShareeListAda
 
 
         } else {
         } else {
             // create without password if not enforced by server or we don't know if enforced;
             // create without password if not enforced by server or we don't know if enforced;
-            fileOperationsHelper.shareFileViaLink(file, null);
+            fileOperationsHelper.shareFileViaPublicShare(file, null);
         }
         }
     }
     }
 
 
@@ -396,14 +397,13 @@ public class FileDetailSharingFragment extends Fragment implements ShareeListAda
             case R.id.action_allow_editing:
             case R.id.action_allow_editing:
                 if (file.isSharedViaLink()) {
                 if (file.isSharedViaLink()) {
                     item.setChecked(!item.isChecked());
                     item.setChecked(!item.isChecked());
-                    fileOperationsHelper.setUploadPermissionsToShare(file,
-                                                                     item.isChecked());
+                    fileOperationsHelper.setUploadPermissionsToPublicShare(publicShare, item.isChecked());
                 }
                 }
                 return true;
                 return true;
             case R.id.action_hide_file_listing: {
             case R.id.action_hide_file_listing: {
                 item.setChecked(!item.isChecked());
                 item.setChecked(!item.isChecked());
                 if (capabilities.getFilesFileDrop().isTrue()) {
                 if (capabilities.getFilesFileDrop().isTrue()) {
-                    setHideFileListingPermissionsToShare(publicShare, item.isChecked());
+                    fileOperationsHelper.setHideFileListingPermissionsToPublicShare(publicShare, item.isChecked());
                 } else {
                 } else {
                     // not supported in ownCloud
                     // not supported in ownCloud
                     showNotSupportedByOcMessage();
                     showNotSupportedByOcMessage();
@@ -412,19 +412,24 @@ public class FileDetailSharingFragment extends Fragment implements ShareeListAda
             }
             }
             case R.id.action_hide_file_download:
             case R.id.action_hide_file_download:
                 item.setChecked(!item.isChecked());
                 item.setChecked(!item.isChecked());
-                setHideFileDownloadPermissionToShare(file, item.isChecked());
+                fileOperationsHelper.setHideFileDownloadPermissionsToPublicShare(publicShare, item.isChecked());
 
 
                 return true;
                 return true;
+            case R.id.action_edit_label:
+                RenamePublicShareDialogFragment renameDialog = RenamePublicShareDialogFragment.newInstance(publicShare);
+                renameDialog.show(fileActivity.getSupportFragmentManager(),
+                                  RenamePublicShareDialogFragment.RENAME_PUBLIC_SHARE_FRAGMENT);
+                return true;
             case R.id.action_password: {
             case R.id.action_password: {
                 requestPasswordForShareViaLink(false,
                 requestPasswordForShareViaLink(false,
                                                capabilities.getFilesSharingPublicAskForOptionalPassword().isTrue());
                                                capabilities.getFilesSharingPublicAskForOptionalPassword().isTrue());
                 return true;
                 return true;
             }
             }
             case R.id.action_share_expiration_date: {
             case R.id.action_share_expiration_date: {
-                ExpirationDatePickerDialogFragment dialog = ExpirationDatePickerDialogFragment
+                ExpirationDatePickerDialogFragment expirationDialog = ExpirationDatePickerDialogFragment
                     .newInstance(file, publicShare.getExpirationDate());
                     .newInstance(file, publicShare.getExpirationDate());
-                dialog.show(fileActivity.getSupportFragmentManager(),
-                            ExpirationDatePickerDialogFragment.DATE_PICKER_DIALOG);
+                expirationDialog.show(fileActivity.getSupportFragmentManager(),
+                                      ExpirationDatePickerDialogFragment.DATE_PICKER_DIALOG);
                 return true;
                 return true;
             }
             }
             case R.id.action_share_send_link: {
             case R.id.action_share_send_link: {
@@ -436,8 +441,8 @@ public class FileDetailSharingFragment extends Fragment implements ShareeListAda
                 return true;
                 return true;
             }
             }
             case R.id.action_share_send_note:
             case R.id.action_share_send_note:
-                NoteDialogFragment dialog = NoteDialogFragment.newInstance(publicShare);
-                dialog.show(fileActivity.getSupportFragmentManager(), NoteDialogFragment.NOTE_FRAGMENT);
+                NoteDialogFragment noteDialog = NoteDialogFragment.newInstance(publicShare);
+                noteDialog.show(fileActivity.getSupportFragmentManager(), NoteDialogFragment.NOTE_FRAGMENT);
                 return true;
                 return true;
             case R.id.action_add_another_public_share_link:
             case R.id.action_add_another_public_share_link:
                 createShareLink();
                 createShareLink();
@@ -450,16 +455,6 @@ public class FileDetailSharingFragment extends Fragment implements ShareeListAda
         }
         }
     }
     }
 
 
-    @Override
-    public void setHideFileListingPermissionsToShare(OCShare share, boolean hideFileListing) {
-        fileOperationsHelper.setHideFileListingPermissionsToShare(share, hideFileListing);
-    }
-
-    @Override
-    public void setHideFileDownloadPermissionToShare(OCFile file, boolean hideFileDownload) {
-        fileOperationsHelper.setHideFileDownloadPermissionsToShare(file, hideFileDownload);
-    }
-
     @Override
     @Override
     public void showNotSupportedByOcMessage() {
     public void showNotSupportedByOcMessage() {
         if (getView() != null) {
         if (getView() != null) {
@@ -523,11 +518,6 @@ public class FileDetailSharingFragment extends Fragment implements ShareeListAda
         return permissions;
         return permissions;
     }
     }
 
 
-    @Override
-    public void updateNoteToShare(OCShare share, String note) {
-        fileOperationsHelper.updateNoteToShare(share, note);
-    }
-
     /**
     /**
      * Starts a dialog that requests a password to the user to protect a share link.
      * Starts a dialog that requests a password to the user to protect a share link.
      *
      *

+ 50 - 36
src/main/java/com/owncloud/android/ui/helpers/FileOperationsHelper.java

@@ -460,7 +460,7 @@ public class FileOperationsHelper {
      * @param file     The file to share.
      * @param file     The file to share.
      * @param password Optional password to protect the public share.
      * @param password Optional password to protect the public share.
      */
      */
-    public void shareFileViaLink(OCFile file, String password) {
+    public void shareFileViaPublicShare(OCFile file, String password) {
         if (file != null) {
         if (file != null) {
             fileActivity.showLoadingDialog(fileActivity.getString(R.string.wait_a_moment));
             fileActivity.showLoadingDialog(fileActivity.getString(R.string.wait_a_moment));
             Intent service = new Intent(fileActivity, OperationsService.class);
             Intent service = new Intent(fileActivity, OperationsService.class);
@@ -580,24 +580,37 @@ public class FileOperationsHelper {
 
 
 
 
     /**
     /**
-     * Updates a public share on a file to set its password.
-     * Starts a request to do it in {@link OperationsService}
+     * Updates a public share on a file to set its password. Starts a request to do it in {@link OperationsService}
      *
      *
-     * @param file     File which public share will be protected with a password.
-     * @param password Password to set for the public link; null or empty string to clear
-     *                 the current password
+     * @param password Password to set for the public link; null or empty string to clear the current password
      */
      */
-    public void setPasswordToShareViaLink(OCFile file, String password) {
+    public void setPasswordToPublicShare(OCShare share, String password) {
         // Set password updating share
         // Set password updating share
         Intent updateShareIntent = new Intent(fileActivity, OperationsService.class);
         Intent updateShareIntent = new Intent(fileActivity, OperationsService.class);
-        updateShareIntent.setAction(OperationsService.ACTION_UPDATE_SHARE);
+        updateShareIntent.setAction(OperationsService.ACTION_UPDATE_PUBLIC_SHARE);
         updateShareIntent.putExtra(OperationsService.EXTRA_ACCOUNT, fileActivity.getAccount());
         updateShareIntent.putExtra(OperationsService.EXTRA_ACCOUNT, fileActivity.getAccount());
-        updateShareIntent.putExtra(OperationsService.EXTRA_REMOTE_PATH, file.getRemotePath());
+        updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_ID, share.getId());
         updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_PASSWORD, (password == null) ? "" : password);
         updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_PASSWORD, (password == null) ? "" : password);
 
 
         queueShareIntent(updateShareIntent);
         queueShareIntent(updateShareIntent);
     }
     }
 
 
+    /**
+     * Updates a public share on a file to set its label. Starts a request to do it in {@link OperationsService}
+     *
+     * @param label new label
+     */
+    public void setLabelToPublicShare(OCShare share, String label) {
+        // Set password updating share
+        Intent updateShareIntent = new Intent(fileActivity, OperationsService.class);
+        updateShareIntent.setAction(OperationsService.ACTION_UPDATE_PUBLIC_SHARE);
+        updateShareIntent.putExtra(OperationsService.EXTRA_ACCOUNT, fileActivity.getAccount());
+        updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_ID, share.getId());
+        updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_PUBLIC_LABEL, (label == null) ? "" : label);
+
+        queueShareIntent(updateShareIntent);
+    }
+
     /**
     /**
      * Updates a share on a file to set its password.
      * Updates a share on a file to set its password.
      * Starts a request to do it in {@link OperationsService}
      * Starts a request to do it in {@link OperationsService}
@@ -608,30 +621,31 @@ public class FileOperationsHelper {
      */
      */
     public void setPasswordToShare(OCShare share, String password) {
     public void setPasswordToShare(OCShare share, String password) {
         Intent updateShareIntent = new Intent(fileActivity, OperationsService.class);
         Intent updateShareIntent = new Intent(fileActivity, OperationsService.class);
-        updateShareIntent.setAction(OperationsService.ACTION_UPDATE_SHARE);
+        if (TextUtils.isEmpty(share.getShareLink())) {
+            updateShareIntent.setAction(OperationsService.ACTION_UPDATE_USER_SHARE);
+        } else {
+            updateShareIntent.setAction(OperationsService.ACTION_UPDATE_PUBLIC_SHARE);
+        }
         updateShareIntent.putExtra(OperationsService.EXTRA_ACCOUNT, fileActivity.getAccount());
         updateShareIntent.putExtra(OperationsService.EXTRA_ACCOUNT, fileActivity.getAccount());
         updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_ID, share.getId());
         updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_ID, share.getId());
-        updateShareIntent.putExtra(
-                OperationsService.EXTRA_SHARE_PASSWORD,
-                (password == null) ? "" : password
-        );
+        updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_PASSWORD, (password == null) ? "" : password);
         queueShareIntent(updateShareIntent);
         queueShareIntent(updateShareIntent);
     }
     }
 
 
 
 
     /**
     /**
-     * Updates a public share on a file to set its expiration date.
-     * Starts a request to do it in {@link OperationsService}
+     * Updates a public share on a file to set its expiration date. Starts a request to do it in {@link
+     * OperationsService}
      *
      *
-     * @param file                   File which public share will be constrained with an expiration date.
-     * @param expirationTimeInMillis Expiration date to set. A negative value clears the current expiration
-     *                               date, leaving the link unrestricted. Zero makes no change.
+     * @param share                  {@link OCShare} instance which permissions will be updated.
+     * @param expirationTimeInMillis Expiration date to set. A negative value clears the current expiration date,
+     *                               leaving the link unrestricted. Zero makes no change.
      */
      */
-    public void setExpirationDateToShareViaLink(OCFile file, long expirationTimeInMillis) {
+    public void setExpirationDateToPublicShare(OCShare share, long expirationTimeInMillis) {
         Intent updateShareIntent = new Intent(fileActivity, OperationsService.class);
         Intent updateShareIntent = new Intent(fileActivity, OperationsService.class);
-        updateShareIntent.setAction(OperationsService.ACTION_UPDATE_SHARE);
+        updateShareIntent.setAction(OperationsService.ACTION_UPDATE_PUBLIC_SHARE);
         updateShareIntent.putExtra(OperationsService.EXTRA_ACCOUNT, fileActivity.getAccount());
         updateShareIntent.putExtra(OperationsService.EXTRA_ACCOUNT, fileActivity.getAccount());
-        updateShareIntent.putExtra(OperationsService.EXTRA_REMOTE_PATH, file.getRemotePath());
+        updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_ID, share.getId());
         updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_EXPIRATION_DATE_IN_MILLIS, expirationTimeInMillis);
         updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_EXPIRATION_DATE_IN_MILLIS, expirationTimeInMillis);
         queueShareIntent(updateShareIntent);
         queueShareIntent(updateShareIntent);
     }
     }
@@ -646,7 +660,7 @@ public class FileOperationsHelper {
      */
      */
     public void setExpirationDateToShare(OCShare share, long expirationTimeInMillis) {
     public void setExpirationDateToShare(OCShare share, long expirationTimeInMillis) {
         Intent updateShareIntent = new Intent(fileActivity, OperationsService.class);
         Intent updateShareIntent = new Intent(fileActivity, OperationsService.class);
-        updateShareIntent.setAction(OperationsService.ACTION_UPDATE_SHARE);
+        updateShareIntent.setAction(OperationsService.ACTION_UPDATE_USER_SHARE);
         updateShareIntent.putExtra(OperationsService.EXTRA_ACCOUNT, fileActivity.getAccount());
         updateShareIntent.putExtra(OperationsService.EXTRA_ACCOUNT, fileActivity.getAccount());
         updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_ID, share.getId());
         updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_ID, share.getId());
         updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_EXPIRATION_DATE_IN_MILLIS, expirationTimeInMillis);
         updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_EXPIRATION_DATE_IN_MILLIS, expirationTimeInMillis);
@@ -663,7 +677,7 @@ public class FileOperationsHelper {
      */
      */
     public void setPermissionsToShare(OCShare share, int permissions) {
     public void setPermissionsToShare(OCShare share, int permissions) {
         Intent updateShareIntent = new Intent(fileActivity, OperationsService.class);
         Intent updateShareIntent = new Intent(fileActivity, OperationsService.class);
-        updateShareIntent.setAction(OperationsService.ACTION_UPDATE_SHARE);
+        updateShareIntent.setAction(OperationsService.ACTION_UPDATE_USER_SHARE);
         updateShareIntent.putExtra(OperationsService.EXTRA_ACCOUNT, fileActivity.getAccount());
         updateShareIntent.putExtra(OperationsService.EXTRA_ACCOUNT, fileActivity.getAccount());
         updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_ID, share.getId());
         updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_ID, share.getId());
         updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_PERMISSIONS, permissions);
         updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_PERMISSIONS, permissions);
@@ -671,17 +685,17 @@ public class FileOperationsHelper {
     }
     }
 
 
     /**
     /**
-     * Updates a public share on a folder to set its editing permission.
-     * Starts a request to do it in {@link OperationsService}
+     * Updates a public share on a folder to set its editing permission. Starts a request to do it in {@link
+     * OperationsService}
      *
      *
-     * @param folder           Folder which editing permission of his public share will be modified.
+     * @param share            {@link OCShare} instance which permissions will be updated.
      * @param uploadPermission New state of the permission for editing the folder shared via link.
      * @param uploadPermission New state of the permission for editing the folder shared via link.
      */
      */
-    public void setUploadPermissionsToShare(OCFile folder, boolean uploadPermission) {
+    public void setUploadPermissionsToPublicShare(OCShare share, boolean uploadPermission) {
         Intent updateShareIntent = new Intent(fileActivity, OperationsService.class);
         Intent updateShareIntent = new Intent(fileActivity, OperationsService.class);
-        updateShareIntent.setAction(OperationsService.ACTION_UPDATE_SHARE);
+        updateShareIntent.setAction(OperationsService.ACTION_UPDATE_PUBLIC_SHARE);
         updateShareIntent.putExtra(OperationsService.EXTRA_ACCOUNT, fileActivity.getAccount());
         updateShareIntent.putExtra(OperationsService.EXTRA_ACCOUNT, fileActivity.getAccount());
-        updateShareIntent.putExtra(OperationsService.EXTRA_REMOTE_PATH, folder.getRemotePath());
+        updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_ID, share.getId());
         updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_PUBLIC_UPLOAD, uploadPermission);
         updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_PUBLIC_UPLOAD, uploadPermission);
         queueShareIntent(updateShareIntent);
         queueShareIntent(updateShareIntent);
     }
     }
@@ -693,9 +707,9 @@ public class FileOperationsHelper {
      * @param share           {@link OCShare} instance which permissions will be updated.
      * @param share           {@link OCShare} instance which permissions will be updated.
      * @param hideFileListing New state of the permission for editing the folder shared via link.
      * @param hideFileListing New state of the permission for editing the folder shared via link.
      */
      */
-    public void setHideFileListingPermissionsToShare(OCShare share, boolean hideFileListing) {
+    public void setHideFileListingPermissionsToPublicShare(OCShare share, boolean hideFileListing) {
         Intent updateShareIntent = new Intent(fileActivity, OperationsService.class);
         Intent updateShareIntent = new Intent(fileActivity, OperationsService.class);
-        updateShareIntent.setAction(OperationsService.ACTION_UPDATE_SHARE);
+        updateShareIntent.setAction(OperationsService.ACTION_UPDATE_PUBLIC_SHARE);
         updateShareIntent.putExtra(OperationsService.EXTRA_ACCOUNT, fileActivity.getAccount());
         updateShareIntent.putExtra(OperationsService.EXTRA_ACCOUNT, fileActivity.getAccount());
         updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_ID, share.getId());
         updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_ID, share.getId());
 
 
@@ -703,17 +717,17 @@ public class FileOperationsHelper {
             updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_PERMISSIONS, OCShare.CREATE_PERMISSION_FLAG);
             updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_PERMISSIONS, OCShare.CREATE_PERMISSION_FLAG);
         } else {
         } else {
             updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_PERMISSIONS,
             updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_PERMISSIONS,
-                    OCShare.FEDERATED_PERMISSIONS_FOR_FOLDER_AFTER_OC9);
+                                       OCShare.FEDERATED_PERMISSIONS_FOR_FOLDER_AFTER_OC9);
         }
         }
 
 
         queueShareIntent(updateShareIntent);
         queueShareIntent(updateShareIntent);
     }
     }
 
 
-    public void setHideFileDownloadPermissionsToShare(OCFile file, boolean hideFileDownload) {
+    public void setHideFileDownloadPermissionsToPublicShare(OCShare share, boolean hideFileDownload) {
         Intent updateShareIntent = new Intent(fileActivity, OperationsService.class);
         Intent updateShareIntent = new Intent(fileActivity, OperationsService.class);
-        updateShareIntent.setAction(OperationsService.ACTION_UPDATE_SHARE);
+        updateShareIntent.setAction(OperationsService.ACTION_UPDATE_PUBLIC_SHARE);
         updateShareIntent.putExtra(OperationsService.EXTRA_ACCOUNT, fileActivity.getAccount());
         updateShareIntent.putExtra(OperationsService.EXTRA_ACCOUNT, fileActivity.getAccount());
-        updateShareIntent.putExtra(OperationsService.EXTRA_REMOTE_PATH, file.getRemotePath());
+        updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_ID, share.getId());
         updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_HIDE_FILE_DOWNLOAD, hideFileDownload);
         updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_HIDE_FILE_DOWNLOAD, hideFileDownload);
 
 
         queueShareIntent(updateShareIntent);
         queueShareIntent(updateShareIntent);

+ 1 - 0
src/main/res/layout/file_details_share_public_link_item.xml

@@ -41,6 +41,7 @@
         android:src="@drawable/shared_via_link" />
         android:src="@drawable/shared_via_link" />
 
 
     <TextView
     <TextView
+        android:id="@+id/public_share_label"
         android:layout_width="wrap_content"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_height="wrap_content"
         android:layout_gravity="center_vertical"
         android:layout_gravity="center_vertical"

+ 5 - 0
src/main/res/menu/fragment_file_detail_sharing_link.xml

@@ -42,6 +42,11 @@
         android:title="@string/share_via_link_hide_download"
         android:title="@string/share_via_link_hide_download"
         android:checkable="true"
         android:checkable="true"
         app:showAsAction="never" />
         app:showAsAction="never" />
+    <item
+        android:id="@+id/action_edit_label"
+        android:showAsAction="never"
+        android:title="@string/edit_label"
+        app:showAsAction="never" />
     <item
     <item
         android:id="@+id/action_password"
         android:id="@+id/action_password"
         android:showAsAction="never"
         android:showAsAction="never"

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

@@ -278,6 +278,7 @@
     <string name="filename_forbidden_characters">Forbidden characters: / \\ &lt; &gt; : " | ? *</string>
     <string name="filename_forbidden_characters">Forbidden characters: / \\ &lt; &gt; : " | ? *</string>
     <string name="filename_forbidden_charaters_from_server">Filename contains at least one invalid character</string>
     <string name="filename_forbidden_charaters_from_server">Filename contains at least one invalid character</string>
     <string name="filename_empty">Filename cannot be empty</string>
     <string name="filename_empty">Filename cannot be empty</string>
+    <string name="label_empty">Label cannot be empty</string>
     <string name="wait_a_moment">Wait a moment…</string>
     <string name="wait_a_moment">Wait a moment…</string>
     <string name="wait_checking_credentials">Checking stored credentials</string>
     <string name="wait_checking_credentials">Checking stored credentials</string>
     <string name="filedisplay_no_file_selected">No file selected</string>
     <string name="filedisplay_no_file_selected">No file selected</string>
@@ -927,4 +928,6 @@
     <string name="unshare">Unshare</string>
     <string name="unshare">Unshare</string>
     <string name="allow_editing">Allow editing</string>
     <string name="allow_editing">Allow editing</string>
     <string name="add_new_public_share">Add new public share link</string>
     <string name="add_new_public_share">Add new public share link</string>
+    <string name="edit_label">Change name</string>
+    <string name="public_share_name">New name</string>
 </resources>
 </resources>