From 8d676ea556147fa2dc2c6d4e160e632379225bdb Mon Sep 17 00:00:00 2001 From: tobiasKaminsky Date: Tue, 6 Nov 2018 14:17:06 +0100 Subject: [PATCH 1/3] Add hide download option to share via link Signed-off-by: tobiasKaminsky --- build.gradle | 6 +- .../datamodel/FileDataStorageManager.java | 4 + .../com/owncloud/android/db/ProviderMeta.java | 3 +- .../UpdateShareViaLinkOperation.java | 59 +++++++-------- .../providers/FileContentProvider.java | 21 +++++- .../android/services/OperationsService.java | 75 ++++++++++--------- .../android/ui/adapter/UserListAdapter.java | 4 +- .../fragment/FileDetailSharingFragment.java | 19 ++++- .../ui/fragment/util/SharingMenuHelper.java | 15 ++++ .../ui/helpers/FileOperationsHelper.java | 40 ++++------ .../menu/file_detail_sharing_link_menu.xml | 6 ++ src/main/res/values/strings.xml | 1 + 12 files changed, 152 insertions(+), 101 deletions(-) diff --git a/build.gradle b/build.gradle index 7d5c18eaf9a8..d7ceef55bb6f 100644 --- a/build.gradle +++ b/build.gradle @@ -209,9 +209,9 @@ dependencies { // dependencies for app building implementation 'com.android.support:multidex:1.0.3' // implementation project('nextcloud-android-library') - genericImplementation "com.github.nextcloud:android-library:master-SNAPSHOT" - gplayImplementation "com.github.nextcloud:android-library:master-SNAPSHOT" - versionDevImplementation "com.github.nextcloud:android-library:master-SNAPSHOT" // use always latest master + genericImplementation "com.github.nextcloud:android-library:hideDownload-SNAPSHOT" + gplayImplementation "com.github.nextcloud:android-library:hideDownload-SNAPSHOT" + versionDevImplementation "com.github.nextcloud:android-library:hideDownload-SNAPSHOT" // use always latest master implementation 'com.android.support.constraint:constraint-layout:1.1.3' implementation "com.android.support:support-v4:${supportLibraryVersion}" implementation "com.android.support:design:${supportLibraryVersion}" diff --git a/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java b/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java index b580bfe488e4..ab12c32e2680 100644 --- a/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java +++ b/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java @@ -993,6 +993,7 @@ public boolean saveShare(OCShare share) { cv.put(ProviderTableMeta.OCSHARES_ACCOUNT_OWNER, account.name); cv.put(ProviderTableMeta.OCSHARES_IS_PASSWORD_PROTECTED, share.isPasswordProtected() ? 1 : 0); cv.put(ProviderTableMeta.OCSHARES_NOTE, share.getNote()); + cv.put(ProviderTableMeta.OCSHARES_HIDE_DOWNLOAD, share.isHideFileDownload()); if (shareExistsForRemoteId(share.getRemoteId())) {// for renamed files; no more delete and create overriden = true; @@ -1199,6 +1200,7 @@ private OCShare createShareInstance(Cursor c) { share.setIdRemoteShared(c.getLong(c.getColumnIndex(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED))); share.setIsPasswordProtected(c.getInt(c.getColumnIndex(ProviderTableMeta.OCSHARES_IS_PASSWORD_PROTECTED)) == 1); share.setNote(c.getString(c.getColumnIndex(ProviderTableMeta.OCSHARES_NOTE))); + share.setHideFileDownload(c.getInt(c.getColumnIndex(ProviderTableMeta.OCSHARES_HIDE_DOWNLOAD)) == 1); } return share; } @@ -1304,6 +1306,7 @@ public void saveShares(Collection shares) { cv.put(ProviderTableMeta.OCSHARES_ACCOUNT_OWNER, account.name); cv.put(ProviderTableMeta.OCSHARES_IS_PASSWORD_PROTECTED, share.isPasswordProtected() ? 1 : 0); cv.put(ProviderTableMeta.OCSHARES_NOTE, share.getNote()); + cv.put(ProviderTableMeta.OCSHARES_HIDE_DOWNLOAD, share.isHideFileDownload()); if (shareExistsForRemoteId(share.getRemoteId())) { // updating an existing file @@ -1584,6 +1587,7 @@ private ArrayList prepareInsertShares( cv.put(ProviderTableMeta.OCSHARES_ACCOUNT_OWNER, account.name); cv.put(ProviderTableMeta.OCSHARES_IS_PASSWORD_PROTECTED, share.isPasswordProtected() ? 1 : 0); cv.put(ProviderTableMeta.OCSHARES_NOTE, share.getNote()); + cv.put(ProviderTableMeta.OCSHARES_HIDE_DOWNLOAD, share.isHideFileDownload()); // adding a new share resource operations.add(ContentProviderOperation.newInsert( diff --git a/src/main/java/com/owncloud/android/db/ProviderMeta.java b/src/main/java/com/owncloud/android/db/ProviderMeta.java index 28bc7bcd16f6..a90fb19bea9a 100644 --- a/src/main/java/com/owncloud/android/db/ProviderMeta.java +++ b/src/main/java/com/owncloud/android/db/ProviderMeta.java @@ -32,7 +32,7 @@ public class ProviderMeta { public static final String DB_NAME = "filelist"; - public static final int DB_VERSION = 36; + public static final int DB_VERSION = 37; private ProviderMeta() { } @@ -132,6 +132,7 @@ static public class ProviderTableMeta implements BaseColumns { public static final String OCSHARES_ACCOUNT_OWNER = "owner_share"; public static final String OCSHARES_IS_PASSWORD_PROTECTED = "is_password_protected"; public static final String OCSHARES_NOTE = "note"; + public static final String OCSHARES_HIDE_DOWNLOAD = "hide_download"; public static final String OCSHARES_DEFAULT_SORT_ORDER = OCSHARES_FILE_SOURCE + " collate nocase asc"; diff --git a/src/main/java/com/owncloud/android/operations/UpdateShareViaLinkOperation.java b/src/main/java/com/owncloud/android/operations/UpdateShareViaLinkOperation.java index 4d756449cdb3..35ea60cd3a3b 100644 --- a/src/main/java/com/owncloud/android/operations/UpdateShareViaLinkOperation.java +++ b/src/main/java/com/owncloud/android/operations/UpdateShareViaLinkOperation.java @@ -1,4 +1,4 @@ -/** +/* * ownCloud Android client application * * @author David A. Velasco @@ -37,10 +37,11 @@ */ public class UpdateShareViaLinkOperation extends SyncOperation { - private String mPath; - private String mPassword; - private Boolean mPublicUpload; - private long mExpirationDateInMillis; + private String path; + private String password; + private Boolean publicUpload; + private Boolean hideFileDownload; + private long expirationDateInMillis; /** * Constructor @@ -48,8 +49,8 @@ public class UpdateShareViaLinkOperation extends SyncOperation { * @param path Full path of the file/folder being shared. Mandatory argument */ public UpdateShareViaLinkOperation(String path) { - mPath = path; - mExpirationDateInMillis = 0; + this.path = path; + expirationDateInMillis = 0; } /** @@ -60,7 +61,7 @@ public UpdateShareViaLinkOperation(String path) { * Null results in no update applied to the password. */ public void setPassword(String password) { - mPassword = password; + this.password = password; } /** @@ -72,7 +73,11 @@ public void setPassword(String password) { * the expiration date. */ public void setExpirationDate(long expirationDateInMillis) { - mExpirationDateInMillis = expirationDateInMillis; + this.expirationDateInMillis = expirationDateInMillis; + } + + public void setHideFileDownload(boolean hideFileDownload) { + this.hideFileDownload = hideFileDownload; } /** @@ -82,32 +87,23 @@ public void setExpirationDate(long expirationDateInMillis) { * Null results in no update applied to the upload permission. */ public void setPublicUpload(Boolean publicUpload) { - mPublicUpload = publicUpload; + this.publicUpload = publicUpload; } @Override protected RemoteOperationResult run(OwnCloudClient client) { - - OCShare publicShare = getStorageManager().getFirstShareByPathAndType( - mPath, - ShareType.PUBLIC_LINK, - "" - ); + OCShare publicShare = getStorageManager().getFirstShareByPathAndType(path, ShareType.PUBLIC_LINK, ""); if (publicShare == null) { // TODO try to get remote share before failing? - return new RemoteOperationResult( - RemoteOperationResult.ResultCode.SHARE_NOT_FOUND - ); + return new RemoteOperationResult(RemoteOperationResult.ResultCode.SHARE_NOT_FOUND); } - // Update remote share with password - UpdateRemoteShareOperation updateOp = new UpdateRemoteShareOperation( - publicShare.getRemoteId() - ); - updateOp.setPassword(mPassword); - updateOp.setExpirationDate(mExpirationDateInMillis); - updateOp.setPublicUpload(mPublicUpload); + UpdateRemoteShareOperation updateOp = new UpdateRemoteShareOperation(publicShare.getRemoteId()); + updateOp.setPassword(password); + updateOp.setExpirationDate(expirationDateInMillis); + updateOp.setPublicUpload(publicUpload); + updateOp.setHideFileDownload(hideFileDownload); RemoteOperationResult result = updateOp.execute(client); if (result.isSuccess()) { @@ -124,17 +120,17 @@ protected RemoteOperationResult run(OwnCloudClient client) { } public String getPath() { - return mPath; + return path; } public String getPassword() { - return mPassword; + return password; } private void updateData(OCShare share) { // Update DB with the response - share.setPath(mPath); - if (mPath.endsWith(FileUtils.PATH_SEPARATOR)) { + share.setPath(path); + if (path.endsWith(FileUtils.PATH_SEPARATOR)) { share.setIsFolder(true); } else { share.setIsFolder(false); @@ -144,7 +140,7 @@ private void updateData(OCShare share) { // Update OCFile with data from share: ShareByLink and publicLink // TODO check & remove if not needed - OCFile file = getStorageManager().getFileByPath(mPath); + OCFile file = getStorageManager().getFileByPath(path); if (file != null) { file.setPublicLink(share.getShareLink()); file.setSharedViaLink(true); @@ -152,4 +148,3 @@ private void updateData(OCShare share) { } } } - diff --git a/src/main/java/com/owncloud/android/providers/FileContentProvider.java b/src/main/java/com/owncloud/android/providers/FileContentProvider.java index b6584ed8f190..78c6f2c84920 100644 --- a/src/main/java/com/owncloud/android/providers/FileContentProvider.java +++ b/src/main/java/com/owncloud/android/providers/FileContentProvider.java @@ -772,7 +772,8 @@ private void createOCSharesTable(SQLiteDatabase db) { + ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED + INTEGER + ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + TEXT + ProviderTableMeta.OCSHARES_IS_PASSWORD_PROTECTED + INTEGER - + ProviderTableMeta.OCSHARES_NOTE + " TEXT );"); + + ProviderTableMeta.OCSHARES_NOTE + TEXT + + ProviderTableMeta.OCSHARES_HIDE_DOWNLOAD + " INTEGER );"); } private void createCapabilitiesTable(SQLiteDatabase db) { @@ -1783,6 +1784,24 @@ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { if (!upgraded) { Log_OC.i(SQL, String.format(Locale.ENGLISH, UPGRADE_VERSION_MSG, oldVersion, newVersion)); } + + if (oldVersion < 37 && newVersion >= 37) { + Log_OC.i(SQL, "Entering in the #37 add hide-download to share table"); + db.beginTransaction(); + try { + db.execSQL(ALTER_TABLE + ProviderTableMeta.OCSHARES_TABLE_NAME + + ADD_COLUMN + ProviderTableMeta.OCSHARES_HIDE_DOWNLOAD + " INTEGER "); + + upgraded = true; + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + } + } + + if (!upgraded) { + Log_OC.i(SQL, String.format(Locale.ENGLISH, UPGRADE_VERSION_MSG, oldVersion, newVersion)); + } } @Override diff --git a/src/main/java/com/owncloud/android/services/OperationsService.java b/src/main/java/com/owncloud/android/services/OperationsService.java index 5944466c099e..b876b53d821e 100644 --- a/src/main/java/com/owncloud/android/services/OperationsService.java +++ b/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_PERMISSIONS = "SHARE_PERMISSIONS"; public static final String EXTRA_SHARE_PUBLIC_UPLOAD = "SHARE_PUBLIC_UPLOAD"; + 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_NOTE = "SHARE_NOTE"; public static final String EXTRA_USER_ID = "USER_ID"; @@ -151,7 +152,7 @@ public Target(Account account, Uri serverUrl, String cookie) { mCookie = cookie; } } - + /** * Service initialization */ @@ -160,14 +161,14 @@ public void onCreate() { super.onCreate(); Log_OC.d(TAG, "Creating service"); - /// First worker thread for most of operations + // First worker thread for most of operations HandlerThread thread = new HandlerThread("Operations thread", Process.THREAD_PRIORITY_BACKGROUND); thread.start(); mOperationsHandler = new ServiceHandler(thread.getLooper(), this); mOperationsBinder = new OperationsServiceBinder(mOperationsHandler); - - /// Separated worker thread for download of folders (WIP) + + // Separated worker thread for download of folders (WIP) thread = new HandlerThread("Syncfolder thread", Process.THREAD_PRIORITY_BACKGROUND); thread.start(); mSyncFolderHandler = new SyncFolderHandler(thread.getLooper(), this); @@ -211,7 +212,7 @@ public int onStartCommand(Intent intent, int flags, int startId) { msg.arg1 = startId; mOperationsHandler.sendMessage(msg); } - + return START_NOT_STICKY; } @@ -316,8 +317,8 @@ public void addOperationListener (OnRemoteOperationListener listener, /** * Removes a listener from the list of objects interested in the being reported about * the end of operations. - * - * @param listener Object to notify about progress of transfer. + * + * @param listener Object to notify about progress of transfer. */ public void removeOperationListener(OnRemoteOperationListener listener) { synchronized (mBoundListeners) { @@ -339,9 +340,9 @@ public boolean isPerformingBlockingOperation() { /** * Creates and adds to the queue a new operation, as described by operationIntent. - * + * * Calls startService to make the operation is processed by the ServiceHandler. - * + * * @param operationIntent Intent describing a new operation to queue and execute. * @return Identifier of the operation created, or null if failed. */ @@ -351,7 +352,7 @@ public long queueNewOperation(Intent operationIntent) { mServiceHandler.mPendingOperations.add(itemToQueue); startService(new Intent(OperationsService.this, OperationsService.class)); return itemToQueue.second.hashCode(); - + } else { return Long.MAX_VALUE; } @@ -359,7 +360,7 @@ public long queueNewOperation(Intent operationIntent) { public boolean dispatchResultIfFinished(int operationId, OnRemoteOperationListener listener) { - Pair undispatched = + Pair undispatched = mUndispatchedFinishedOperations.remove(operationId); if (undispatched != null) { listener.onRemoteOperationFinish(undispatched.first, undispatched.second); @@ -368,14 +369,14 @@ public boolean dispatchResultIfFinished(int operationId, return !mServiceHandler.mPendingOperations.isEmpty(); } } - + /** * Returns True when the file described by 'file' in the ownCloud account 'account' is * downloading or waiting to download. - * + * * If 'file' is a directory, returns 'true' if some of its descendant files is downloading * or waiting to download. - * + * * @param account ownCloud account where the remote file is stored. * @param file File to check if something is synchronizing * / downloading / uploading inside. @@ -390,13 +391,13 @@ public boolean isSynchronizing(Account account, OCFile file) { /** * Operations worker. Performs the pending operations in the order they were requested. * - * Created with the Looper of a new thread, started in {@link OperationsService#onCreate()}. + * Created with the Looper of a new thread, started in {@link OperationsService#onCreate()}. */ private static class ServiceHandler extends Handler { // don't make it a final class, and don't remove the static ; lint will warn about a p // ossible memory leak - - + + OperationsService mService; @@ -406,8 +407,8 @@ private static class ServiceHandler extends Handler { private Target mLastTarget; private OwnCloudClient mOwnCloudClient; private FileDataStorageManager mStorageManager; - - + + public ServiceHandler(Looper looper, OperationsService service) { super(looper); if (service == null) { @@ -422,21 +423,21 @@ public void handleMessage(Message msg) { Log_OC.d(TAG, "Stopping after command with id " + msg.arg1); mService.stopSelf(msg.arg1); } - + /** * Performs the next operation in the queue */ private void nextOperation() { - + //Log_OC.e(TAG, "nextOperation init" ); - + Pair next = null; synchronized(mPendingOperations) { next = mPendingOperations.peek(); } if (next != null) { - + mCurrentOperation = next.second; RemoteOperationResult result = null; try { @@ -453,7 +454,7 @@ private void nextOperation() { mOwnCloudClient.setOwnCloudVersion(version); mStorageManager = new FileDataStorageManager( - mLastTarget.mAccount, + mLastTarget.mAccount, mService.getContentResolver() ); } else { @@ -492,7 +493,7 @@ private void nextOperation() { mLastTarget.mAccount.name, e); } result = new RemoteOperationResult(e); - + } catch (IOException e) { if (mLastTarget.mAccount == null) { Log_OC.e(TAG, "Error while trying to get authorization for a NULL account", @@ -509,13 +510,13 @@ private void nextOperation() { Log_OC.e(TAG, "Unexpected error for " + mLastTarget.mAccount.name, e); } result = new RemoteOperationResult(e); - + } finally { synchronized(mPendingOperations) { mPendingOperations.poll(); } } - + //sendBroadcastOperationFinished(mLastTarget, mCurrentOperation, result); mService.dispatchResultToOperationListeners(mCurrentOperation, result); } @@ -525,9 +526,9 @@ private void nextOperation() { /** * Creates a new operation, as described by operationIntent. - * + * * TODO - move to ServiceHandler (probably) - * + * * @param operationIntent Intent describing a new operation to queue and execute. * @return Pair with the new operation object and the information about its * target server. @@ -536,7 +537,7 @@ private Pair newOperation(Intent operationIntent) { RemoteOperation operation = null; Target target = null; try { - if (!operationIntent.hasExtra(EXTRA_ACCOUNT) && + if (!operationIntent.hasExtra(EXTRA_ACCOUNT) && !operationIntent.hasExtra(EXTRA_SERVER_URL)) { Log_OC.e(TAG, "Not enough information provided in intent"); @@ -545,11 +546,11 @@ private Pair newOperation(Intent operationIntent) { String serverUrl = operationIntent.getStringExtra(EXTRA_SERVER_URL); String cookie = operationIntent.getStringExtra(EXTRA_COOKIE); target = new Target( - account, + account, (serverUrl == null) ? null : Uri.parse(serverUrl), cookie ); - + String action = operationIntent.getAction(); String remotePath; String password; @@ -579,6 +580,10 @@ private Pair newOperation(Intent operationIntent) { long expirationDate = operationIntent.getLongExtra(EXTRA_SHARE_EXPIRATION_DATE_IN_MILLIS, 0); updateLinkOperation.setExpirationDate(expirationDate); + boolean hideFileDownload = operationIntent.getBooleanExtra(EXTRA_SHARE_HIDE_FILE_DOWNLOAD, + false); + updateLinkOperation.setHideFileDownload(hideFileDownload); + if (operationIntent.hasExtra(EXTRA_SHARE_PUBLIC_UPLOAD)) { updateLinkOperation.setPublicUpload( operationIntent.getBooleanExtra(EXTRA_SHARE_PUBLIC_UPLOAD, false)); @@ -712,14 +717,14 @@ private Pair newOperation(Intent operationIntent) { break; } } - + } catch (IllegalArgumentException e) { Log_OC.e(TAG, "Bad information provided in intent: " + e.getMessage()); operation = null; } if (operation != null) { - return new Pair(target, operation); + return new Pair(target, operation); } else { return null; } @@ -740,7 +745,7 @@ protected void dispatchResultToOperationListeners( while (listeners.hasNext()) { final OnRemoteOperationListener listener = listeners.next(); final Handler handler = mOperationsBinder.mBoundListeners.get(listener); - if (handler != null) { + if (handler != null) { handler.post(new Runnable() { @Override public void run() { diff --git a/src/main/java/com/owncloud/android/ui/adapter/UserListAdapter.java b/src/main/java/com/owncloud/android/ui/adapter/UserListAdapter.java index 8440cc64477b..28dc8b14b129 100644 --- a/src/main/java/com/owncloud/android/ui/adapter/UserListAdapter.java +++ b/src/main/java/com/owncloud/android/ui/adapter/UserListAdapter.java @@ -413,7 +413,7 @@ int updatePermissionsToShare(OCShare share, boolean canEditDelete); void updateNoteToShare(OCShare share, String note); - + /** * show a snackbar that this feature is not supported by ownCloud. */ @@ -434,5 +434,7 @@ int updatePermissionsToShare(OCShare share, * @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); } } diff --git a/src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingFragment.java b/src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingFragment.java index 1f52aa81da8a..ef78c1601493 100644 --- a/src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingFragment.java +++ b/src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingFragment.java @@ -308,6 +308,8 @@ private void prepareOptionsMenu(Menu menu) { shareByLinkAllowEditing.isChecked(), publicShare.getPermissions() ); + SharingMenuHelper.setupHideFileDownload(menu.findItem(R.id.action_hide_file_download), + publicShare.isHideFileDownload(), file.isFolder()); SharingMenuHelper.setupPasswordMenuItem( menu.findItem(R.id.action_password), publicShare.isPasswordProtected() @@ -333,16 +335,19 @@ private boolean optionsItemSelected(MenuItem item) { } return true; } + case R.id.action_hide_file_download: + item.setChecked(!item.isChecked()); + setHideFileDownloadPermissionToShare(file, item.isChecked()); + + return true; case R.id.action_password: { requestPasswordForShareViaLink(false); return true; } case R.id.action_share_expiration_date: { ExpirationDatePickerDialogFragment dialog = ExpirationDatePickerDialogFragment.newInstance(file, -1); - dialog.show( - getActivity().getSupportFragmentManager(), - ExpirationDatePickerDialogFragment.DATE_PICKER_DIALOG - ); + dialog.show(getActivity().getSupportFragmentManager(), + ExpirationDatePickerDialogFragment.DATE_PICKER_DIALOG); return true; } case R.id.action_share_send_link: { @@ -368,6 +373,12 @@ public void setHideFileListingPermissionsToShare(OCShare share, boolean hideFile setHideFileListingPermissionsToShare(share, hideFileListing); } + @Override + public void setHideFileDownloadPermissionToShare(OCFile file, boolean hideFileDownload) { + ((FileActivity) getActivity()).getFileOperationsHelper(). + setHideFileDownloadPermissionsToShare(file, hideFileDownload); + } + @Override public void showNotSupportedByOcMessage() { if (getView() != null) { diff --git a/src/main/java/com/owncloud/android/ui/fragment/util/SharingMenuHelper.java b/src/main/java/com/owncloud/android/ui/fragment/util/SharingMenuHelper.java index c7742595ada1..5c5ad040cf13 100644 --- a/src/main/java/com/owncloud/android/ui/fragment/util/SharingMenuHelper.java +++ b/src/main/java/com/owncloud/android/ui/fragment/util/SharingMenuHelper.java @@ -62,6 +62,21 @@ public static void setupHideFileListingMenuItem(MenuItem fileListing, } } + /** + * Sets checked/visibility state on the given {@link MenuItem} based on the given criteria. + * + * @param fileListing the {@link MenuItem} to be setup + * @param isFolder flag if it is a folder + */ + public static void setupHideFileDownload(MenuItem fileListing, boolean hideFileDownload, boolean isFolder) { + if (isFolder) { + fileListing.setVisible(false); + } else { + fileListing.setVisible(true); + fileListing.setChecked(hideFileDownload); + } + } + /** * sets up the password {@link MenuItem}'s title based on the fact if a password is present. * diff --git a/src/main/java/com/owncloud/android/ui/helpers/FileOperationsHelper.java b/src/main/java/com/owncloud/android/ui/helpers/FileOperationsHelper.java index ff4e137b5b0d..fa297058abb3 100755 --- a/src/main/java/com/owncloud/android/ui/helpers/FileOperationsHelper.java +++ b/src/main/java/com/owncloud/android/ui/helpers/FileOperationsHelper.java @@ -535,10 +535,7 @@ public void setPasswordToShareViaLink(OCFile file, String password) { updateShareIntent.setAction(OperationsService.ACTION_UPDATE_SHARE); updateShareIntent.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount()); updateShareIntent.putExtra(OperationsService.EXTRA_REMOTE_PATH, file.getRemotePath()); - updateShareIntent.putExtra( - OperationsService.EXTRA_SHARE_PASSWORD, - (password == null) ? "" : password - ); + updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_PASSWORD, (password == null) ? "" : password); queueShareIntent(updateShareIntent); } @@ -577,10 +574,7 @@ public void setExpirationDateToShareViaLink(OCFile file, long expirationTimeInMi updateShareIntent.setAction(OperationsService.ACTION_UPDATE_SHARE); updateShareIntent.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount()); updateShareIntent.putExtra(OperationsService.EXTRA_REMOTE_PATH, file.getRemotePath()); - updateShareIntent.putExtra( - OperationsService.EXTRA_SHARE_EXPIRATION_DATE_IN_MILLIS, - expirationTimeInMillis - ); + updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_EXPIRATION_DATE_IN_MILLIS, expirationTimeInMillis); queueShareIntent(updateShareIntent); } @@ -597,14 +591,8 @@ public void setExpirationDateToShare(OCShare share, long expirationTimeInMillis) updateShareIntent.setAction(OperationsService.ACTION_UPDATE_SHARE); updateShareIntent.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount()); updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_ID, share.getId()); - updateShareIntent.putExtra( - OperationsService.EXTRA_SHARE_EXPIRATION_DATE_IN_MILLIS, - expirationTimeInMillis - ); - updateShareIntent.putExtra( - OperationsService.EXTRA_SHARE_PERMISSIONS, - 0 - ); + updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_EXPIRATION_DATE_IN_MILLIS, expirationTimeInMillis); + updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_PERMISSIONS, 0); queueShareIntent(updateShareIntent); } @@ -620,10 +608,7 @@ public void setPermissionsToShare(OCShare share, int permissions) { updateShareIntent.setAction(OperationsService.ACTION_UPDATE_SHARE); updateShareIntent.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount()); updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_ID, share.getId()); - updateShareIntent.putExtra( - OperationsService.EXTRA_SHARE_PERMISSIONS, - permissions - ); + updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_PERMISSIONS, permissions); queueShareIntent(updateShareIntent); } @@ -639,10 +624,7 @@ public void setUploadPermissionsToShare(OCFile folder, boolean uploadPermission) updateShareIntent.setAction(OperationsService.ACTION_UPDATE_SHARE); updateShareIntent.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount()); updateShareIntent.putExtra(OperationsService.EXTRA_REMOTE_PATH, folder.getRemotePath()); - updateShareIntent.putExtra( - OperationsService.EXTRA_SHARE_PUBLIC_UPLOAD, - uploadPermission - ); + updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_PUBLIC_UPLOAD, uploadPermission); queueShareIntent(updateShareIntent); } @@ -669,6 +651,16 @@ public void setHideFileListingPermissionsToShare(OCShare share, boolean hideFile queueShareIntent(updateShareIntent); } + public void setHideFileDownloadPermissionsToShare(OCFile file, boolean hideFileDownload) { + Intent updateShareIntent = new Intent(mFileActivity, OperationsService.class); + updateShareIntent.setAction(OperationsService.ACTION_UPDATE_SHARE); + updateShareIntent.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount()); + updateShareIntent.putExtra(OperationsService.EXTRA_REMOTE_PATH, file.getRemotePath()); + updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_HIDE_FILE_DOWNLOAD, hideFileDownload); + + queueShareIntent(updateShareIntent); + } + public void updateNoteToShare(OCShare share, String note) { Intent updateShareIntent = new Intent(mFileActivity, OperationsService.class); updateShareIntent.setAction(OperationsService.ACTION_UPDATE_SHARE_NOTE); diff --git a/src/main/res/menu/file_detail_sharing_link_menu.xml b/src/main/res/menu/file_detail_sharing_link_menu.xml index e44b5cf55510..fea092d99224 100644 --- a/src/main/res/menu/file_detail_sharing_link_menu.xml +++ b/src/main/res/menu/file_detail_sharing_link_menu.xml @@ -28,6 +28,12 @@ android:title="@string/share_via_link_hide_file_listing_permission_label" android:checkable="true" app:showAsAction="never" /> + Note No app available to handle links No App available to handle PDF + Hide download From 350f9e9ef4927899b8a5459f943a493c128fcad5 Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Wed, 7 Nov 2018 21:23:10 +0100 Subject: [PATCH 2/3] Revert lib back to master --- build.gradle | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index d7ceef55bb6f..7d5c18eaf9a8 100644 --- a/build.gradle +++ b/build.gradle @@ -209,9 +209,9 @@ dependencies { // dependencies for app building implementation 'com.android.support:multidex:1.0.3' // implementation project('nextcloud-android-library') - genericImplementation "com.github.nextcloud:android-library:hideDownload-SNAPSHOT" - gplayImplementation "com.github.nextcloud:android-library:hideDownload-SNAPSHOT" - versionDevImplementation "com.github.nextcloud:android-library:hideDownload-SNAPSHOT" // use always latest master + genericImplementation "com.github.nextcloud:android-library:master-SNAPSHOT" + gplayImplementation "com.github.nextcloud:android-library:master-SNAPSHOT" + versionDevImplementation "com.github.nextcloud:android-library:master-SNAPSHOT" // use always latest master implementation 'com.android.support.constraint:constraint-layout:1.1.3' implementation "com.android.support:support-v4:${supportLibraryVersion}" implementation "com.android.support:design:${supportLibraryVersion}" From 77211f2cf036f08d8ad25238c19c97c2c4d60d3f Mon Sep 17 00:00:00 2001 From: nextcloud-android-bot <> Date: Wed, 7 Nov 2018 21:01:24 +0000 Subject: [PATCH 3/3] Drone: update Lint results to reflect reduced error/warning count [skip ci] --- scripts/analysis/lint-results.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/analysis/lint-results.txt b/scripts/analysis/lint-results.txt index 95dc13070f69..586c6ae18a3d 100644 --- a/scripts/analysis/lint-results.txt +++ b/scripts/analysis/lint-results.txt @@ -1,2 +1,2 @@ DO NOT TOUCH; GENERATED BY DRONE - Lint Report: 96 warnings + Lint Report: 95 warnings