From 1ace509e4f5183c64e3b07753e0e090446d9fe69 Mon Sep 17 00:00:00 2001 From: tobiasKaminsky Date: Mon, 18 Jul 2016 17:27:38 +0200 Subject: [PATCH 01/11] wip --- res/layout/share_file_layout.xml | 34 +++++++++++++++++++ res/values/strings.xml | 1 + .../ui/fragment/ShareFileFragment.java | 29 ++++++++++++++++ 3 files changed, 64 insertions(+) diff --git a/res/layout/share_file_layout.xml b/res/layout/share_file_layout.xml index b2fe3f6a62a8..b6910ddafe9c 100644 --- a/res/layout/share_file_layout.xml +++ b/res/layout/share_file_layout.xml @@ -190,6 +190,40 @@ + + + + + + + + Password protect Secured Allow editing + Hide file listing Get link Share with … Share with %1$s diff --git a/src/com/owncloud/android/ui/fragment/ShareFileFragment.java b/src/com/owncloud/android/ui/fragment/ShareFileFragment.java index a0e3086cb63d..24eeb2e39169 100644 --- a/src/com/owncloud/android/ui/fragment/ShareFileFragment.java +++ b/src/com/owncloud/android/ui/fragment/ShareFileFragment.java @@ -674,6 +674,7 @@ private void updatePublicShareSection() { getPasswordSection().setVisibility(View.VISIBLE); if (mFile.isFolder() && !mCapabilities.getFilesSharingPublicUpload().isFalse()) { getEditPermissionSection().setVisibility(View.VISIBLE); + getFileListingPermissionSection().setVisibility(View.VISIBLE); } else { getEditPermissionSection().setVisibility(View.GONE); } @@ -754,6 +755,26 @@ public void onClick(View v) { mOnEditPermissionInteractionListener ); + /// update state of the hide file listing permission switch + SwitchCompat hideFileListingPermissionSwitch = getHideFileListingPermissionSwitch(); + + // set null listener before setChecked() to prevent infinite loop of calls + hideFileListingPermissionSwitch.setOnCheckedChangeListener(null); + if (mPublicShare.getPermissions() > OCShare.READ_PERMISSION_FLAG) { + if (!hideFileListingPermissionSwitch.isChecked()) { + hideFileListingPermissionSwitch.toggle(); + } + } else { + if (hideFileListingPermissionSwitch.isChecked()) { + hideFileListingPermissionSwitch.toggle(); + } + } + // recover listener + // TODO Tobi +// hideFileListingPermissionSwitch.setOnCheckedChangeListener( +// mOnEditPermissionInteractionListener +// ); + } else { /// no public share -> collapse section SwitchCompat shareViaLinkSwitch = getShareViaLinkSwitch(); @@ -810,6 +831,14 @@ private SwitchCompat getEditPermissionSwitch() { return (SwitchCompat) getView().findViewById(R.id.shareViaLinkEditPermissionSwitch); } + private View getFileListingPermissionSection() { + return getView().findViewById(R.id.shareViaLinkHideListPermissionSection); + } + + private SwitchCompat getHideFileListingPermissionSwitch() { + return (SwitchCompat) getView().findViewById(R.id.shareViaLinkHideListPermissionSwitch); + } + private AppCompatButton getGetLinkButton() { return (AppCompatButton) getView().findViewById(R.id.shareViaLinkGetLinkButton); } From 5890f554cdca6170bac03d59d41fe6cddd672f44 Mon Sep 17 00:00:00 2001 From: tobiasKaminsky Date: Mon, 18 Jul 2016 18:39:59 +0200 Subject: [PATCH 02/11] wip --- .../android/files/FileOperationsHelper.java | 30 ++++++++++++ .../ui/fragment/ShareFileFragment.java | 46 +++++++++++++++++-- 2 files changed, 72 insertions(+), 4 deletions(-) diff --git a/src/com/owncloud/android/files/FileOperationsHelper.java b/src/com/owncloud/android/files/FileOperationsHelper.java index 149abbf0acbc..4e688d0808ff 100644 --- a/src/com/owncloud/android/files/FileOperationsHelper.java +++ b/src/com/owncloud/android/files/FileOperationsHelper.java @@ -36,6 +36,7 @@ import com.owncloud.android.R; import com.owncloud.android.authentication.AccountUtils; +import com.owncloud.android.datamodel.FileDataStorageManager; import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.db.OCUpload; import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder; @@ -397,6 +398,35 @@ public void setUploadPermissionsToShare(OCFile folder, boolean uploadPermission) queueShareIntent(updateShareIntent); } + /** + * 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. + */ + public void setHideFileListingPermissionsToShare(OCShare share, boolean hideFileListing) { + Intent updateShareIntent = new Intent(mFileActivity, OperationsService.class); + updateShareIntent.setAction(OperationsService.ACTION_UPDATE_SHARE); + updateShareIntent.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount()); + updateShareIntent.putExtra(OperationsService.EXTRA_SHARE_ID, share.getId()); + + int permission = share.getPermissions(); + share.setPermissions(permission); + + if(!hideFileListing) { + permission |= OCShare.READ_PERMISSION_FLAG; + } else { + permission &= ~OCShare.READ_PERMISSION_FLAG; + } + + updateShareIntent.putExtra( + OperationsService.EXTRA_SHARE_PERMISSIONS, + permission + ); + queueShareIntent(updateShareIntent); + } + /** * @return 'True' if the server supports the Search Users API diff --git a/src/com/owncloud/android/ui/fragment/ShareFileFragment.java b/src/com/owncloud/android/ui/fragment/ShareFileFragment.java index 24eeb2e39169..c21fd9370328 100644 --- a/src/com/owncloud/android/ui/fragment/ShareFileFragment.java +++ b/src/com/owncloud/android/ui/fragment/ShareFileFragment.java @@ -142,6 +142,11 @@ public class ShareFileFragment extends Fragment */ private OnEditPermissionInteractionListener mOnEditPermissionInteractionListener = null; + /** + * Listener for user actions to set or unset hide file listing permission on public link + */ + private OnHideFileListingPermissionInteractionListener mOnHideFileListingPermissionInteractionListener = null; + /** * Public factory method to create new ShareFileFragment instances. @@ -509,6 +514,40 @@ public void onCheckedChanged(CompoundButton switchView, boolean isChecked) { } + /** + * Listener for user actions that start any update on the hide file listing permissions for the public link. + */ + private class OnHideFileListingPermissionInteractionListener + implements CompoundButton.OnCheckedChangeListener { + + /** + * Called by R.id.shareViaLinkHideListPermissionSwitch to set or clear the edit permission. + * + * @param switchView {@link SwitchCompat} toggled by the user, R.id.shareViaLinkHideListPermissionSwitch + * @param isChecked New switch state. + */ + @Override + public void onCheckedChanged(CompoundButton switchView, boolean isChecked) { + if (!isResumed()) { + // very important, setChecked(...) is called automatically during + // Fragment recreation on device rotations + return; + } + + ((FileActivity) getActivity()).getFileOperationsHelper(). + setHideFileListingPermissionsToShare( + mPublicShare, + isChecked + ); + ; + + // undo the toggle to grant the view will be correct if the dialog is cancelled + switchView.setOnCheckedChangeListener(null); + switchView.toggle(); + switchView.setOnCheckedChangeListener(mOnHideFileListingPermissionInteractionListener); + } + } + @Override public void onActivityCreated(Bundle savedInstanceState) { @@ -770,10 +809,9 @@ public void onClick(View v) { } } // recover listener - // TODO Tobi -// hideFileListingPermissionSwitch.setOnCheckedChangeListener( -// mOnEditPermissionInteractionListener -// ); + hideFileListingPermissionSwitch.setOnCheckedChangeListener( + mOnHideFileListingPermissionInteractionListener + ); } else { /// no public share -> collapse section From 923d4b6293d4b2ba2c0936c62d8bbece26116b25 Mon Sep 17 00:00:00 2001 From: tobiasKaminsky Date: Wed, 20 Jul 2016 20:18:18 +0200 Subject: [PATCH 03/11] wip --- .../ui/fragment/ShareFileFragment.java | 42 +++++++++++++++---- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/src/com/owncloud/android/ui/fragment/ShareFileFragment.java b/src/com/owncloud/android/ui/fragment/ShareFileFragment.java index c21fd9370328..e98f48bd4a84 100644 --- a/src/com/owncloud/android/ui/fragment/ShareFileFragment.java +++ b/src/com/owncloud/android/ui/fragment/ShareFileFragment.java @@ -247,6 +247,10 @@ public void onClick(View view) { // Set listener for user actions on edit permission initEditPermissionListener(view); + // Set listener for hide file listing + // TODO only if "allow editing" is true + initHideFileListingListener(view); + // Hide share features sections that are not enabled hideNotEnabledShareSections(view); @@ -479,6 +483,21 @@ private void initEditPermissionListener(View shareView) { } + /** + * Binds listener for user actions that start any update the hide file listing permissions + * for the public link to the views receiving the user events. + * + * @param shareView Root view in the fragment. + */ + private void initHideFileListingListener(View shareView) { + mOnHideFileListingPermissionInteractionListener = + new OnHideFileListingPermissionInteractionListener(); + + ((SwitchCompat) shareView.findViewById(R.id.shareViaLinkHideListPermissionSwitch)). + setOnCheckedChangeListener(mOnHideFileListingPermissionInteractionListener); + + } + /** * Listener for user actions that start any update on the edit permissions for the public link. */ @@ -799,15 +818,20 @@ public void onClick(View v) { // set null listener before setChecked() to prevent infinite loop of calls hideFileListingPermissionSwitch.setOnCheckedChangeListener(null); - if (mPublicShare.getPermissions() > OCShare.READ_PERMISSION_FLAG) { - if (!hideFileListingPermissionSwitch.isChecked()) { - hideFileListingPermissionSwitch.toggle(); - } - } else { - if (hideFileListingPermissionSwitch.isChecked()) { - hideFileListingPermissionSwitch.toggle(); - } - } + + boolean readOnly = (mPublicShare.getPermissions() & OCShare.READ_PERMISSION_FLAG) != 0; + hideFileListingPermissionSwitch.setChecked(!readOnly); + +// if ((mPublicShare.getPermissions() & OCShare.READ_PERMISSION_FLAG) != 0) { +// if (!hideFileListingPermissionSwitch.isChecked()) { +// +// } +// } else { +// if (hideFileListingPermissionSwitch.isChecked()) { +// hideFileListingPermissionSwitch.toggle(); +// } +// } + // recover listener hideFileListingPermissionSwitch.setOnCheckedChangeListener( mOnHideFileListingPermissionInteractionListener From e26dc7654d5150c54090b76054a2a56f152c96a5 Mon Sep 17 00:00:00 2001 From: tobiasKaminsky Date: Thu, 21 Jul 2016 18:17:46 +0200 Subject: [PATCH 04/11] wip --- .../android/ui/fragment/ShareFileFragment.java | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/src/com/owncloud/android/ui/fragment/ShareFileFragment.java b/src/com/owncloud/android/ui/fragment/ShareFileFragment.java index e98f48bd4a84..7b0a05a29292 100644 --- a/src/com/owncloud/android/ui/fragment/ShareFileFragment.java +++ b/src/com/owncloud/android/ui/fragment/ShareFileFragment.java @@ -803,10 +803,12 @@ public void onClick(View v) { if (!editPermissionSwitch.isChecked()) { editPermissionSwitch.toggle(); } + getHideFileListingPermissionSection().setVisibility(View.VISIBLE); } else { if (editPermissionSwitch.isChecked()) { editPermissionSwitch.toggle(); } + getHideFileListingPermissionSection().setVisibility(View.GONE); } // recover listener editPermissionSwitch.setOnCheckedChangeListener( @@ -822,16 +824,6 @@ public void onClick(View v) { boolean readOnly = (mPublicShare.getPermissions() & OCShare.READ_PERMISSION_FLAG) != 0; hideFileListingPermissionSwitch.setChecked(!readOnly); -// if ((mPublicShare.getPermissions() & OCShare.READ_PERMISSION_FLAG) != 0) { -// if (!hideFileListingPermissionSwitch.isChecked()) { -// -// } -// } else { -// if (hideFileListingPermissionSwitch.isChecked()) { -// hideFileListingPermissionSwitch.toggle(); -// } -// } - // recover listener hideFileListingPermissionSwitch.setOnCheckedChangeListener( mOnHideFileListingPermissionInteractionListener @@ -901,6 +893,10 @@ private SwitchCompat getHideFileListingPermissionSwitch() { return (SwitchCompat) getView().findViewById(R.id.shareViaLinkHideListPermissionSwitch); } + private View getHideFileListingPermissionSection() { + return getView().findViewById(R.id.shareViaLinkHideListPermissionSection); + } + private AppCompatButton getGetLinkButton() { return (AppCompatButton) getView().findViewById(R.id.shareViaLinkGetLinkButton); } @@ -914,6 +910,7 @@ private void hidePublicShare() { getPasswordSection().setVisibility(View.GONE); getEditPermissionSection().setVisibility(View.GONE); getGetLinkButton().setVisibility(View.GONE); + getHideFileListingPermissionSection().setVisibility(View.GONE); } public static void setListViewHeightBasedOnChildren(ListView listView) { From 352ea77aa801f61cfbc861d5595280cf89caf76b Mon Sep 17 00:00:00 2001 From: tobiasKaminsky Date: Thu, 21 Jul 2016 18:26:52 +0200 Subject: [PATCH 05/11] wip --- src/com/owncloud/android/files/FileOperationsHelper.java | 6 ------ .../owncloud/android/ui/fragment/ShareFileFragment.java | 7 +------ 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/src/com/owncloud/android/files/FileOperationsHelper.java b/src/com/owncloud/android/files/FileOperationsHelper.java index 4e688d0808ff..a4376d8b35b5 100644 --- a/src/com/owncloud/android/files/FileOperationsHelper.java +++ b/src/com/owncloud/android/files/FileOperationsHelper.java @@ -36,11 +36,8 @@ import com.owncloud.android.R; import com.owncloud.android.authentication.AccountUtils; -import com.owncloud.android.datamodel.FileDataStorageManager; import com.owncloud.android.datamodel.OCFile; -import com.owncloud.android.db.OCUpload; import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder; -import com.owncloud.android.files.services.FileUploader; import com.owncloud.android.files.services.FileUploader.FileUploaderBinder; import com.owncloud.android.lib.common.network.WebdavUtils; import com.owncloud.android.lib.common.utils.Log_OC; @@ -52,13 +49,10 @@ import com.owncloud.android.ui.activity.FileActivity; import com.owncloud.android.ui.activity.ShareActivity; import com.owncloud.android.ui.dialog.ShareLinkToDialog; -import com.owncloud.android.ui.dialog.SharePasswordDialogFragment; import java.util.Collection; import java.util.List; -import java.util.ArrayList; - /** * */ diff --git a/src/com/owncloud/android/ui/fragment/ShareFileFragment.java b/src/com/owncloud/android/ui/fragment/ShareFileFragment.java index 7b0a05a29292..30f531763ea9 100644 --- a/src/com/owncloud/android/ui/fragment/ShareFileFragment.java +++ b/src/com/owncloud/android/ui/fragment/ShareFileFragment.java @@ -248,7 +248,6 @@ public void onClick(View view) { initEditPermissionListener(view); // Set listener for hide file listing - // TODO only if "allow editing" is true initHideFileListingListener(view); // Hide share features sections that are not enabled @@ -732,7 +731,7 @@ private void updatePublicShareSection() { getPasswordSection().setVisibility(View.VISIBLE); if (mFile.isFolder() && !mCapabilities.getFilesSharingPublicUpload().isFalse()) { getEditPermissionSection().setVisibility(View.VISIBLE); - getFileListingPermissionSection().setVisibility(View.VISIBLE); + getHideFileListingPermissionSection().setVisibility(View.VISIBLE); } else { getEditPermissionSection().setVisibility(View.GONE); } @@ -885,10 +884,6 @@ private SwitchCompat getEditPermissionSwitch() { return (SwitchCompat) getView().findViewById(R.id.shareViaLinkEditPermissionSwitch); } - private View getFileListingPermissionSection() { - return getView().findViewById(R.id.shareViaLinkHideListPermissionSection); - } - private SwitchCompat getHideFileListingPermissionSwitch() { return (SwitchCompat) getView().findViewById(R.id.shareViaLinkHideListPermissionSwitch); } From 9cf1676cc75ee714f6cfa31d07d0dab6e666367a Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Tue, 2 Aug 2016 17:17:20 +0200 Subject: [PATCH 06/11] hide file listing switch visibility fix when share link gets deactivated --- src/com/owncloud/android/ui/fragment/ShareFileFragment.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/com/owncloud/android/ui/fragment/ShareFileFragment.java b/src/com/owncloud/android/ui/fragment/ShareFileFragment.java index 30f531763ea9..a08480db9b27 100644 --- a/src/com/owncloud/android/ui/fragment/ShareFileFragment.java +++ b/src/com/owncloud/android/ui/fragment/ShareFileFragment.java @@ -841,6 +841,7 @@ public void onClick(View v) { getExpirationDateSection().setVisibility(View.GONE); getPasswordSection().setVisibility(View.GONE); getEditPermissionSection().setVisibility(View.GONE); + getHideFileListingPermissionSection().setVisibility(View.GONE); getGetLinkButton().setVisibility(View.GONE); } } From 8c53483f1e873a898dce06ccc234c7cab89ac080 Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Tue, 2 Aug 2016 17:53:27 +0200 Subject: [PATCH 07/11] minor formattings --- .../android/ui/fragment/ShareFileFragment.java | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/com/owncloud/android/ui/fragment/ShareFileFragment.java b/src/com/owncloud/android/ui/fragment/ShareFileFragment.java index a08480db9b27..926ecc74e2f0 100644 --- a/src/com/owncloud/android/ui/fragment/ShareFileFragment.java +++ b/src/com/owncloud/android/ui/fragment/ShareFileFragment.java @@ -489,19 +489,16 @@ private void initEditPermissionListener(View shareView) { * @param shareView Root view in the fragment. */ private void initHideFileListingListener(View shareView) { - mOnHideFileListingPermissionInteractionListener = - new OnHideFileListingPermissionInteractionListener(); + mOnHideFileListingPermissionInteractionListener = new OnHideFileListingPermissionInteractionListener(); ((SwitchCompat) shareView.findViewById(R.id.shareViaLinkHideListPermissionSwitch)). setOnCheckedChangeListener(mOnHideFileListingPermissionInteractionListener); - } /** * Listener for user actions that start any update on the edit permissions for the public link. */ - private class OnEditPermissionInteractionListener - implements CompoundButton.OnCheckedChangeListener { + private class OnEditPermissionInteractionListener implements CompoundButton.OnCheckedChangeListener { /** * Called by R.id.shareViaLinkEditPermissionSwitch to set or clear the edit permission. @@ -535,8 +532,7 @@ public void onCheckedChanged(CompoundButton switchView, boolean isChecked) { /** * Listener for user actions that start any update on the hide file listing permissions for the public link. */ - private class OnHideFileListingPermissionInteractionListener - implements CompoundButton.OnCheckedChangeListener { + private class OnHideFileListingPermissionInteractionListener implements CompoundButton.OnCheckedChangeListener { /** * Called by R.id.shareViaLinkHideListPermissionSwitch to set or clear the edit permission. @@ -599,7 +595,6 @@ public void onDetach() { mListener = null; } - /** * Get known server capabilities from DB *

@@ -613,7 +608,6 @@ public void refreshCapabilitiesFromDB() { } } - /** * Get users and groups from the DB to fill in the "share with" list. *

From 90f582105f5eb7809bc5ba2e46ca8e86a2bdcce5 Mon Sep 17 00:00:00 2001 From: tobiasKaminsky Date: Mon, 5 Sep 2016 16:22:03 +0200 Subject: [PATCH 08/11] show compatibility warning --- res/values/setup.xml | 1 + res/values/strings.xml | 2 ++ .../datamodel/FileDataStorageManager.java | 3 ++ src/com/owncloud/android/db/ProviderMeta.java | 3 +- .../android/files/FileOperationsHelper.java | 6 ++-- .../providers/FileContentProvider.java | 18 +++++++++++- .../ui/fragment/ShareFileFragment.java | 28 +++++++++++++++---- 7 files changed, 50 insertions(+), 11 deletions(-) diff --git a/res/values/setup.xml b/res/values/setup.xml index 43f16524924e..3ea27878a35b 100644 --- a/res/values/setup.xml +++ b/res/values/setup.xml @@ -66,6 +66,7 @@ "mailto:" "mailto:android@nextcloud.com" "https://play.google.com/store/apps/details?id=com.nextcloud.client" + https://nextcloud.com/install diff --git a/res/values/strings.xml b/res/values/strings.xml index b0e1589e5261..1747aa64f194 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -465,6 +465,8 @@ Do you really want to remove the selected items and their contents? Waiting for device charging Search + This is a Nextcloud feature, please update. + Learn more + android:versionCode="10030001" + android:versionName="1.3.0 RC1">