mirror of
https://github.com/nextcloud/android.git
synced 2024-11-29 18:59:18 +03:00
#6247 View Binding - ShareFileFragment
This commit is contained in:
parent
8cec637c24
commit
53fcf81b75
1 changed files with 149 additions and 253 deletions
|
@ -31,17 +31,12 @@ import android.os.Bundle;
|
|||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Button;
|
||||
import android.widget.CompoundButton;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.ListView;
|
||||
import android.widget.ScrollView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.google.android.material.button.MaterialButton;
|
||||
import com.google.android.material.snackbar.Snackbar;
|
||||
import com.owncloud.android.R;
|
||||
import com.owncloud.android.databinding.ShareFileLayoutBinding;
|
||||
import com.owncloud.android.datamodel.OCFile;
|
||||
import com.owncloud.android.datamodel.ThumbnailsCacheManager;
|
||||
import com.owncloud.android.lib.common.utils.Log_OC;
|
||||
|
@ -56,6 +51,8 @@ import com.owncloud.android.utils.DisplayUtils;
|
|||
import com.owncloud.android.utils.MimeTypeUtil;
|
||||
import com.owncloud.android.utils.ThemeUtils;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
@ -65,21 +62,21 @@ import androidx.appcompat.widget.SwitchCompat;
|
|||
import androidx.fragment.app.Fragment;
|
||||
|
||||
/**
|
||||
* Fragment for Sharing a file with sharees (users or groups) or creating
|
||||
* a public link.
|
||||
*
|
||||
* Fragment for Sharing a file with sharees (users or groups) or creating a public link.
|
||||
* <p>
|
||||
* A simple {@link Fragment} subclass.
|
||||
*
|
||||
* Activities that contain this fragment must implement the
|
||||
* {@link ShareFragmentListener} interface to handle interaction events.
|
||||
*
|
||||
* Use the {@link ShareFileFragment#newInstance} factory method to
|
||||
* create an instance of this fragment.
|
||||
* <p>
|
||||
* Activities that contain this fragment must implement the {@link ShareFragmentListener} interface to handle
|
||||
* interaction events.
|
||||
* <p>
|
||||
* Use the {@link ShareFileFragment#newInstance} factory method to create an instance of this fragment.
|
||||
*/
|
||||
public class ShareFileFragment extends Fragment implements ShareUserListAdapter.ShareUserAdapterListener {
|
||||
|
||||
private static final String TAG = ShareFileFragment.class.getSimpleName();
|
||||
|
||||
private ShareFileLayoutBinding binding;
|
||||
|
||||
/**
|
||||
* The fragment initialization parameters.
|
||||
*/
|
||||
|
@ -176,99 +173,84 @@ public class ShareFileFragment extends Fragment implements ShareUserListAdapter.
|
|||
|
||||
// use grey as fallback for elements where custom theming is not available
|
||||
if (ThemeUtils.themingEnabled(getContext())) {
|
||||
getContext().getTheme().applyStyle(R.style.FallbackThemingTheme, true);
|
||||
requireContext().getTheme().applyStyle(R.style.FallbackThemingTheme, true);
|
||||
}
|
||||
|
||||
int accentColor = ThemeUtils.primaryAccentColor(getContext());
|
||||
|
||||
// Inflate the layout for this fragment
|
||||
View view = inflater.inflate(R.layout.share_file_layout, container, false);
|
||||
binding = ShareFileLayoutBinding.inflate(inflater);
|
||||
|
||||
// Setup layout
|
||||
// Image
|
||||
ImageView icon = view.findViewById(R.id.shareFileIcon);
|
||||
icon.setImageDrawable(
|
||||
MimeTypeUtil.getFileTypeIcon(mFile.getMimeType(), mFile.getFileName(), mAccount, getContext())
|
||||
);
|
||||
binding.shareFileIcon.setImageDrawable(
|
||||
MimeTypeUtil.getFileTypeIcon(mFile.getMimeType(), mFile.getFileName(), mAccount, getContext())
|
||||
);
|
||||
if (MimeTypeUtil.isImage(mFile)) {
|
||||
String remoteId = String.valueOf(mFile.getRemoteId());
|
||||
Bitmap thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache(remoteId);
|
||||
if (thumbnail != null) {
|
||||
icon.setImageBitmap(thumbnail);
|
||||
binding.shareFileIcon.setImageBitmap(thumbnail);
|
||||
}
|
||||
}
|
||||
|
||||
// Title
|
||||
TextView title = view.findViewById(R.id.shareWithUsersSectionTitle);
|
||||
title.setTextColor(accentColor);
|
||||
binding.shareWithUsersSectionTitle.setTextColor(accentColor);
|
||||
|
||||
// Name
|
||||
TextView fileNameHeader = view.findViewById(R.id.shareFileName);
|
||||
fileNameHeader.setText(getResources().getString(R.string.share_file, mFile.getFileName()));
|
||||
binding.shareFileName.setText(getResources().getString(R.string.share_file, mFile.getFileName()));
|
||||
|
||||
View headerDivider = view.findViewById(R.id.share_header_divider);
|
||||
headerDivider.getBackground().setColorFilter(ThemeUtils.primaryAccentColor(getContext()),
|
||||
PorterDuff.Mode.SRC_ATOP);
|
||||
binding.shareHeaderDivider.getBackground().setColorFilter(ThemeUtils.primaryAccentColor(getContext()),
|
||||
PorterDuff.Mode.SRC_ATOP);
|
||||
|
||||
// Size
|
||||
TextView size = view.findViewById(R.id.shareFileSize);
|
||||
if (mFile.isFolder()) {
|
||||
size.setVisibility(View.GONE);
|
||||
binding.shareFileSize.setVisibility(View.GONE);
|
||||
} else {
|
||||
size.setText(DisplayUtils.bytesToHumanReadable(mFile.getFileLength()));
|
||||
binding.shareFileSize.setText(DisplayUtils.bytesToHumanReadable(mFile.getFileLength()));
|
||||
}
|
||||
|
||||
// Add User Button
|
||||
Button addUserGroupButton = view.findViewById(R.id.addUserButton);
|
||||
addUserGroupButton.getBackground().setColorFilter(accentColor, PorterDuff.Mode.SRC_ATOP);
|
||||
addUserGroupButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
// Show Search Fragment
|
||||
mListener.showSearchUsersAndGroups();
|
||||
}
|
||||
});
|
||||
binding.addUserButton.getBackground().setColorFilter(accentColor, PorterDuff.Mode.SRC_ATOP);
|
||||
// Show Search Fragment
|
||||
binding.addUserButton.setOnClickListener(view -> mListener.showSearchUsersAndGroups());
|
||||
|
||||
// Set listener for user actions on switch for sharing/unsharing via link
|
||||
initShareViaLinkListener(view);
|
||||
initShareViaLinkListener();
|
||||
|
||||
// Set listener for user actions on expiration date
|
||||
initExpirationListener(view);
|
||||
initExpirationListener();
|
||||
|
||||
// Set listener for user actions on password
|
||||
initPasswordListener(view);
|
||||
initPasswordListener();
|
||||
|
||||
// Set listener for user actions on edit permission
|
||||
initEditPermissionListener(view);
|
||||
initEditPermissionListener();
|
||||
|
||||
// Set listener for hide file listing
|
||||
initHideFileListingListener(view);
|
||||
initHideFileListingListener();
|
||||
|
||||
// Hide share features sections that are not enabled
|
||||
hideNotEnabledShareSections(view);
|
||||
hideNotEnabledShareSections();
|
||||
|
||||
return view;
|
||||
return binding.getRoot();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Binds listener for user actions to create or delete a public share
|
||||
* to the views receiving the user events.
|
||||
*
|
||||
* @param shareView Root view in the fragment.
|
||||
* Binds listener for user actions to create or delete a public share to the views receiving the user events.
|
||||
*/
|
||||
private void initShareViaLinkListener(View shareView) {
|
||||
private void initShareViaLinkListener() {
|
||||
mOnShareViaLinkSwitchCheckedChangeListener = new OnShareViaLinkListener();
|
||||
SwitchCompat shareViaLinkSwitch = shareView.findViewById(R.id.shareViaLinkSectionSwitch);
|
||||
ThemeUtils.tintSwitch(shareViaLinkSwitch, ThemeUtils.primaryAccentColor(getContext()), true);
|
||||
shareViaLinkSwitch.setOnCheckedChangeListener(mOnShareViaLinkSwitchCheckedChangeListener);
|
||||
ThemeUtils.tintSwitch(binding.shareViaLinkSectionSwitch, ThemeUtils.primaryAccentColor(getContext()), true);
|
||||
binding.shareViaLinkSectionSwitch.setOnCheckedChangeListener(mOnShareViaLinkSwitchCheckedChangeListener);
|
||||
}
|
||||
|
||||
/**
|
||||
* Listener for user actions that create or delete a public share.
|
||||
*/
|
||||
private class OnShareViaLinkListener
|
||||
implements CompoundButton.OnCheckedChangeListener {
|
||||
implements CompoundButton.OnCheckedChangeListener {
|
||||
|
||||
/**
|
||||
* Called by R.id.shareViaLinkSectionSwitch to create or delete a public link.
|
||||
|
@ -291,7 +273,7 @@ public class ShareFileFragment extends Fragment implements ShareUserListAdapter.
|
|||
mCapabilities.getFilesSharingPublicAskForOptionalPassword().isTrue());
|
||||
} else {
|
||||
// create without password if not enforced by server or we don't know if enforced;
|
||||
((FileActivity) getActivity()).getFileOperationsHelper().shareFileViaLink(mFile, null);
|
||||
((FileActivity) requireActivity()).getFileOperationsHelper().shareFileViaLink(mFile, null);
|
||||
|
||||
// ShareActivity#onCreateShareViaLinkOperationFinish will take care if password
|
||||
// is enforced by the server but app doesn't know, or if server version is
|
||||
|
@ -299,7 +281,7 @@ public class ShareFileFragment extends Fragment implements ShareUserListAdapter.
|
|||
}
|
||||
|
||||
} else {
|
||||
((FileActivity) getActivity()).getFileOperationsHelper().unshareFileViaLink(mFile);
|
||||
((FileActivity) requireActivity()).getFileOperationsHelper().unshareFileViaLink(mFile);
|
||||
}
|
||||
|
||||
// undo the toggle to grant the view will be correct if any intermediate dialog is cancelled or
|
||||
|
@ -311,31 +293,25 @@ public class ShareFileFragment extends Fragment implements ShareUserListAdapter.
|
|||
}
|
||||
|
||||
/**
|
||||
* Binds listener for user actions that start any update on a expiration date
|
||||
* for the public link to the views receiving the user events.
|
||||
*
|
||||
* @param shareView Root view in the fragment.
|
||||
* Binds listener for user actions that start any update on a expiration date for the public link to the views
|
||||
* receiving the user events.
|
||||
*/
|
||||
private void initExpirationListener(View shareView) {
|
||||
private void initExpirationListener() {
|
||||
mOnExpirationDateInteractionListener = new OnExpirationDateInteractionListener();
|
||||
|
||||
SwitchCompat expirationSwitch = shareView.findViewById(R.id.shareViaLinkExpirationSwitch);
|
||||
expirationSwitch.setOnCheckedChangeListener(mOnExpirationDateInteractionListener);
|
||||
binding.shareViaLinkExpirationSwitch.setOnCheckedChangeListener(mOnExpirationDateInteractionListener);
|
||||
|
||||
ThemeUtils.tintSwitch(expirationSwitch, ThemeUtils.primaryAccentColor(getContext()));
|
||||
ThemeUtils.tintSwitch(binding.shareViaLinkExpirationSwitch, ThemeUtils.primaryAccentColor(getContext()));
|
||||
|
||||
shareView.findViewById(R.id.shareViaLinkExpirationLabel).
|
||||
setOnClickListener(mOnExpirationDateInteractionListener);
|
||||
|
||||
shareView.findViewById(R.id.shareViaLinkExpirationValue).
|
||||
setOnClickListener(mOnExpirationDateInteractionListener);
|
||||
binding.shareViaLinkExpirationLabel.setOnClickListener(mOnExpirationDateInteractionListener);
|
||||
binding.shareViaLinkExpirationValue.setOnClickListener(mOnExpirationDateInteractionListener);
|
||||
}
|
||||
|
||||
/**
|
||||
* Listener for user actions that start any update on the expiration date for the public link.
|
||||
*/
|
||||
private class OnExpirationDateInteractionListener
|
||||
implements CompoundButton.OnCheckedChangeListener, View.OnClickListener {
|
||||
implements CompoundButton.OnCheckedChangeListener, View.OnClickListener {
|
||||
|
||||
/**
|
||||
* Called by R.id.shareViaLinkExpirationSwitch to set or clear the expiration date.
|
||||
|
@ -354,12 +330,12 @@ public class ShareFileFragment extends Fragment implements ShareUserListAdapter.
|
|||
ExpirationDatePickerDialogFragment dialog = ExpirationDatePickerDialogFragment
|
||||
.newInstance(mFile, mPublicShare.getExpirationDate());
|
||||
dialog.show(
|
||||
getActivity().getSupportFragmentManager(),
|
||||
ExpirationDatePickerDialogFragment.DATE_PICKER_DIALOG
|
||||
);
|
||||
requireActivity().getSupportFragmentManager(),
|
||||
ExpirationDatePickerDialogFragment.DATE_PICKER_DIALOG
|
||||
);
|
||||
|
||||
} else {
|
||||
((FileActivity) getActivity()).getFileOperationsHelper().setExpirationDateToShareViaLink(mFile, -1);
|
||||
((FileActivity) requireActivity()).getFileOperationsHelper().setExpirationDateToShareViaLink(mFile, -1);
|
||||
}
|
||||
|
||||
// undo the toggle to grant the view will be correct if the dialog is cancelled
|
||||
|
@ -379,12 +355,12 @@ public class ShareFileFragment extends Fragment implements ShareUserListAdapter.
|
|||
if (mPublicShare != null && mPublicShare.getExpirationDate() > 0) {
|
||||
long chosenDateInMillis = mPublicShare.getExpirationDate();
|
||||
ExpirationDatePickerDialogFragment dialog =
|
||||
ExpirationDatePickerDialogFragment
|
||||
.newInstance(mFile, chosenDateInMillis);
|
||||
ExpirationDatePickerDialogFragment
|
||||
.newInstance(mFile, chosenDateInMillis);
|
||||
dialog.show(
|
||||
getActivity().getSupportFragmentManager(),
|
||||
ExpirationDatePickerDialogFragment.DATE_PICKER_DIALOG
|
||||
);
|
||||
requireActivity().getSupportFragmentManager(),
|
||||
ExpirationDatePickerDialogFragment.DATE_PICKER_DIALOG
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -392,19 +368,15 @@ public class ShareFileFragment extends Fragment implements ShareUserListAdapter.
|
|||
/**
|
||||
* Binds listener for user actions that start any update on a password for the public link to the views receiving
|
||||
* the user events.
|
||||
*
|
||||
* @param shareView Root view in the fragment.
|
||||
*/
|
||||
private void initPasswordListener(View shareView) {
|
||||
private void initPasswordListener() {
|
||||
mOnPasswordInteractionListener = new OnPasswordInteractionListener();
|
||||
|
||||
SwitchCompat passwordSwitch = shareView.findViewById(R.id.shareViaLinkPasswordSwitch);
|
||||
passwordSwitch.setOnCheckedChangeListener(mOnPasswordInteractionListener);
|
||||
ThemeUtils.tintSwitch(passwordSwitch, ThemeUtils.primaryAccentColor(getContext()));
|
||||
binding.shareViaLinkPasswordSwitch.setOnCheckedChangeListener(mOnPasswordInteractionListener);
|
||||
ThemeUtils.tintSwitch(binding.shareViaLinkPasswordSwitch, ThemeUtils.primaryAccentColor(getContext()));
|
||||
|
||||
shareView.findViewById(R.id.shareViaLinkPasswordLabel).setOnClickListener(mOnPasswordInteractionListener);
|
||||
|
||||
shareView.findViewById(R.id.shareViaLinkPasswordValue).setOnClickListener(mOnPasswordInteractionListener);
|
||||
binding.shareViaLinkPasswordLabel.setOnClickListener(mOnPasswordInteractionListener);
|
||||
binding.shareViaLinkPasswordValue.setOnClickListener(mOnPasswordInteractionListener);
|
||||
}
|
||||
|
||||
|
||||
|
@ -412,7 +384,7 @@ public class ShareFileFragment extends Fragment implements ShareUserListAdapter.
|
|||
* Listener for user actions that start any update on a password for the public link.
|
||||
*/
|
||||
private class OnPasswordInteractionListener
|
||||
implements CompoundButton.OnCheckedChangeListener, View.OnClickListener {
|
||||
implements CompoundButton.OnCheckedChangeListener, View.OnClickListener {
|
||||
|
||||
/**
|
||||
* Called by R.id.shareViaLinkPasswordSwitch to set or clear the password.
|
||||
|
@ -431,7 +403,8 @@ public class ShareFileFragment extends Fragment implements ShareUserListAdapter.
|
|||
requestPasswordForShareViaLink(false,
|
||||
mCapabilities.getFilesSharingPublicAskForOptionalPassword().isTrue());
|
||||
} else {
|
||||
((FileActivity) getActivity()).getFileOperationsHelper().setPasswordToShareViaLink(mFile, ""); // clears
|
||||
((FileActivity) requireActivity()).getFileOperationsHelper().setPasswordToShareViaLink(mFile, ""); //
|
||||
// clears
|
||||
}
|
||||
|
||||
// undo the toggle to grant the view will be correct if the dialog is cancelled
|
||||
|
@ -441,8 +414,7 @@ public class ShareFileFragment extends Fragment implements ShareUserListAdapter.
|
|||
}
|
||||
|
||||
/**
|
||||
* Called by R.id.shareViaLinkPasswordLabel or R.id.shareViaLinkPasswordValue
|
||||
* to change the current password.
|
||||
* Called by R.id.shareViaLinkPasswordLabel or R.id.shareViaLinkPasswordValue to change the current password.
|
||||
*
|
||||
* @param passwordView Label or value view touched by the user.
|
||||
*/
|
||||
|
@ -456,31 +428,25 @@ public class ShareFileFragment extends Fragment implements ShareUserListAdapter.
|
|||
}
|
||||
|
||||
/**
|
||||
* Binds listener for user actions that start any update the edit permissions
|
||||
* for the public link to the views receiving the user events.
|
||||
*
|
||||
* @param shareView Root view in the fragment.
|
||||
* Binds listener for user actions that start any update the edit permissions for the public link to the views
|
||||
* receiving the user events.
|
||||
*/
|
||||
private void initEditPermissionListener(View shareView) {
|
||||
private void initEditPermissionListener() {
|
||||
mOnEditPermissionInteractionListener = new OnEditPermissionInteractionListener();
|
||||
|
||||
SwitchCompat permissionSwitch = shareView.findViewById(R.id.shareViaLinkEditPermissionSwitch);
|
||||
permissionSwitch.setOnCheckedChangeListener(mOnEditPermissionInteractionListener);
|
||||
ThemeUtils.tintSwitch(permissionSwitch, ThemeUtils.primaryAccentColor(getContext()));
|
||||
binding.shareViaLinkEditPermissionSwitch.setOnCheckedChangeListener(mOnEditPermissionInteractionListener);
|
||||
ThemeUtils.tintSwitch(binding.shareViaLinkEditPermissionSwitch, ThemeUtils.primaryAccentColor(getContext()));
|
||||
}
|
||||
|
||||
/**
|
||||
* 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.
|
||||
* 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.
|
||||
*/
|
||||
private void initHideFileListingListener(View shareView) {
|
||||
private void initHideFileListingListener() {
|
||||
mOnHideFileListingPermissionInteractionListener = new OnHideFileListingPermissionInteractionListener();
|
||||
|
||||
SwitchCompat permissionSwitch = shareView.findViewById(R.id.shareViaLinkFileListingPermissionSwitch);
|
||||
permissionSwitch.setOnCheckedChangeListener(mOnHideFileListingPermissionInteractionListener);
|
||||
ThemeUtils.tintSwitch(permissionSwitch, ThemeUtils.primaryAccentColor(getContext()));
|
||||
binding.shareViaLinkFileListingPermissionSwitch.setOnCheckedChangeListener(mOnHideFileListingPermissionInteractionListener);
|
||||
ThemeUtils.tintSwitch(binding.shareViaLinkFileListingPermissionSwitch, ThemeUtils.primaryAccentColor(getContext()));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -502,7 +468,7 @@ public class ShareFileFragment extends Fragment implements ShareUserListAdapter.
|
|||
return;
|
||||
}
|
||||
|
||||
((FileActivity) getActivity()).getFileOperationsHelper().setUploadPermissionsToShare(mFile, isChecked);
|
||||
((FileActivity) requireActivity()).getFileOperationsHelper().setUploadPermissionsToShare(mFile, isChecked);
|
||||
|
||||
// undo the toggle to grant the view will be correct if the dialog is cancelled
|
||||
switchView.setOnCheckedChangeListener(null);
|
||||
|
@ -531,17 +497,17 @@ public class ShareFileFragment extends Fragment implements ShareUserListAdapter.
|
|||
}
|
||||
|
||||
if (mCapabilities.getFilesFileDrop().isTrue()) {
|
||||
((FileActivity) getActivity()).getFileOperationsHelper().
|
||||
setHideFileListingPermissionsToShare(
|
||||
mPublicShare,
|
||||
isChecked
|
||||
);
|
||||
((FileActivity) requireActivity()).getFileOperationsHelper().
|
||||
setHideFileListingPermissionsToShare(
|
||||
mPublicShare,
|
||||
isChecked
|
||||
);
|
||||
} else {
|
||||
// not supported in ownCloud
|
||||
Snackbar.make(getView(), R.string.files_drop_not_supported, Snackbar.LENGTH_LONG)
|
||||
Snackbar.make(binding.getRoot(), R.string.files_drop_not_supported, Snackbar.LENGTH_LONG)
|
||||
.setAction(R.string.learn_more, v ->
|
||||
DisplayUtils.startLinkIntent(requireActivity(), R.string.url_server_install))
|
||||
.show();
|
||||
.show();
|
||||
}
|
||||
|
||||
// undo the toggle to grant the view will be correct if the dialog is cancelled
|
||||
|
@ -568,7 +534,7 @@ public class ShareFileFragment extends Fragment implements ShareUserListAdapter.
|
|||
}
|
||||
|
||||
@Override
|
||||
public void onAttach(Activity activity) {
|
||||
public void onAttach(@NotNull Activity activity) {
|
||||
super.onAttach(activity);
|
||||
try {
|
||||
mListener = (ShareFragmentListener) activity;
|
||||
|
@ -587,8 +553,8 @@ public class ShareFileFragment extends Fragment implements ShareUserListAdapter.
|
|||
/**
|
||||
* Get known server capabilities from DB
|
||||
* <p/>
|
||||
* Depends on the parent Activity provides a {@link com.owncloud.android.datamodel.FileDataStorageManager}
|
||||
* instance ready to use. If not ready, does nothing.
|
||||
* Depends on the parent Activity provides a {@link com.owncloud.android.datamodel.FileDataStorageManager} instance
|
||||
* ready to use. If not ready, does nothing.
|
||||
*/
|
||||
public void refreshCapabilitiesFromDB() {
|
||||
if (((FileActivity) mListener).getStorageManager() != null) {
|
||||
|
@ -599,8 +565,8 @@ public class ShareFileFragment extends Fragment implements ShareUserListAdapter.
|
|||
/**
|
||||
* Get users and groups from the DB to fill in the "share with" list.
|
||||
* <p/>
|
||||
* Depends on the parent Activity provides a {@link com.owncloud.android.datamodel.FileDataStorageManager}
|
||||
* instance ready to use. If not ready, does nothing.
|
||||
* Depends on the parent Activity provides a {@link com.owncloud.android.datamodel.FileDataStorageManager} instance
|
||||
* ready to use. If not ready, does nothing.
|
||||
*/
|
||||
public void refreshUsersOrGroupsListFromDB() {
|
||||
if (((FileActivity) mListener).getStorageManager() != null) {
|
||||
|
@ -608,7 +574,7 @@ public class ShareFileFragment extends Fragment implements ShareUserListAdapter.
|
|||
mPrivateShares = ((FileActivity) mListener).getStorageManager().getSharesWithForAFile(
|
||||
mFile.getRemotePath(),
|
||||
mAccount.name
|
||||
);
|
||||
);
|
||||
|
||||
// Update list of users/groups
|
||||
updateListOfUserGroups();
|
||||
|
@ -619,28 +585,25 @@ public class ShareFileFragment extends Fragment implements ShareUserListAdapter.
|
|||
// Update list of users/groups
|
||||
// TODO Refactoring: create a new {@link ShareUserListAdapter} instance with every call should not be needed
|
||||
ShareUserListAdapter mUserGroupsAdapter = new ShareUserListAdapter(
|
||||
getActivity(),
|
||||
R.layout.share_user_item,
|
||||
mPrivateShares,
|
||||
this
|
||||
getActivity(),
|
||||
R.layout.share_user_item,
|
||||
mPrivateShares,
|
||||
this
|
||||
);
|
||||
|
||||
// Show data
|
||||
TextView noShares = getView().findViewById(R.id.shareNoUsers);
|
||||
ListView usersList = getView().findViewById(R.id.shareUsersList);
|
||||
|
||||
if (mPrivateShares.size() > 0) {
|
||||
noShares.setVisibility(View.GONE);
|
||||
usersList.setVisibility(View.VISIBLE);
|
||||
usersList.setAdapter(mUserGroupsAdapter);
|
||||
binding.shareNoUsers.setVisibility(View.GONE);
|
||||
binding.shareUsersList.setVisibility(View.VISIBLE);
|
||||
binding.shareUsersList.setAdapter(mUserGroupsAdapter);
|
||||
} else {
|
||||
noShares.setVisibility(View.VISIBLE);
|
||||
usersList.setVisibility(View.GONE);
|
||||
binding.shareNoUsers.setVisibility(View.VISIBLE);
|
||||
binding.shareUsersList.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
// Set Scroll to initial position
|
||||
ScrollView scrollView = getView().findViewById(R.id.shareScroll);
|
||||
scrollView.scrollTo(0, 0);
|
||||
binding.shareScroll.scrollTo(0, 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -662,8 +625,8 @@ public class ShareFileFragment extends Fragment implements ShareUserListAdapter.
|
|||
* <p/>
|
||||
* Takes into account server capabilities before reading database.
|
||||
* <p/>
|
||||
* Depends on the parent Activity provides a {@link com.owncloud.android.datamodel.FileDataStorageManager}
|
||||
* instance ready to use. If not ready, does nothing.
|
||||
* Depends on the parent Activity provides a {@link com.owncloud.android.datamodel.FileDataStorageManager} instance
|
||||
* ready to use. If not ready, does nothing.
|
||||
*/
|
||||
public void refreshPublicShareFromDB() {
|
||||
if (isPublicShareDisabled()) {
|
||||
|
@ -690,21 +653,21 @@ public class ShareFileFragment extends Fragment implements ShareUserListAdapter.
|
|||
}
|
||||
|
||||
/**
|
||||
* Updates in the UI the section about public share with the information in the current public share bound to
|
||||
* mFile, if any.
|
||||
* Updates in the UI the section about public share with the information in the current public share bound to mFile,
|
||||
* if any.
|
||||
*/
|
||||
private void updatePublicShareSection() {
|
||||
if (mPublicShare != null && ShareType.PUBLIC_LINK.equals(mPublicShare.getShareType())) {
|
||||
// public share bound -> expand section
|
||||
updateShareViaLinkSwitch(mOnShareViaLinkSwitchCheckedChangeListener);
|
||||
|
||||
getExpirationDateSection().setVisibility(View.VISIBLE);
|
||||
getPasswordSection().setVisibility(View.VISIBLE);
|
||||
binding.shareViaLinkExpirationSection.setVisibility(View.VISIBLE);
|
||||
binding.shareViaLinkPasswordSection.setVisibility(View.VISIBLE);
|
||||
if (mFile.isFolder() && !mCapabilities.getFilesSharingPublicUpload().isFalse()) {
|
||||
getEditPermissionSection().setVisibility(View.VISIBLE);
|
||||
getHideFileListingPermissionSection().setVisibility(View.VISIBLE);
|
||||
binding.shareViaLinkEditPermissionSection.setVisibility(View.VISIBLE);
|
||||
binding.shareViaLinkHideFileListingPermissionSection.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
getEditPermissionSection().setVisibility(View.GONE);
|
||||
binding.shareViaLinkEditPermissionSection.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
// init link button
|
||||
|
@ -731,7 +694,7 @@ public class ShareFileFragment extends Fragment implements ShareUserListAdapter.
|
|||
|
||||
private void updateShareViaLinkSwitch(
|
||||
CompoundButton.OnCheckedChangeListener onShareViaLinkSwitchCheckedChangeListener) {
|
||||
SwitchCompat shareViaLinkSwitch = getShareViaLinkSwitch();
|
||||
SwitchCompat shareViaLinkSwitch = binding.shareViaLinkSectionSwitch;
|
||||
if (!shareViaLinkSwitch.isChecked()) {
|
||||
// set null listener before setChecked() to prevent infinite loop of calls
|
||||
shareViaLinkSwitch.setOnCheckedChangeListener(null);
|
||||
|
@ -742,9 +705,8 @@ public class ShareFileFragment extends Fragment implements ShareUserListAdapter.
|
|||
|
||||
private void updateHideFileListingPermissionSwitch(
|
||||
int permissions,
|
||||
OnHideFileListingPermissionInteractionListener onHideFileListingPermissionInteractionListener)
|
||||
{
|
||||
SwitchCompat hideFileListingPermissionSwitch = getHideFileListingPermissionSwitch();
|
||||
OnHideFileListingPermissionInteractionListener onHideFileListingPermissionInteractionListener) {
|
||||
SwitchCompat hideFileListingPermissionSwitch = binding.shareViaLinkFileListingPermissionSwitch;
|
||||
|
||||
// set null listener before setChecked() to prevent infinite loop of calls
|
||||
hideFileListingPermissionSwitch.setOnCheckedChangeListener(null);
|
||||
|
@ -758,9 +720,8 @@ public class ShareFileFragment extends Fragment implements ShareUserListAdapter.
|
|||
|
||||
private void updatePermissionSwitch(
|
||||
int permissions,
|
||||
OnEditPermissionInteractionListener onEditPermissionInteractionListener)
|
||||
{
|
||||
SwitchCompat editPermissionSwitch = getEditPermissionSwitch();
|
||||
OnEditPermissionInteractionListener onEditPermissionInteractionListener) {
|
||||
SwitchCompat editPermissionSwitch = binding.shareViaLinkEditPermissionSwitch;
|
||||
|
||||
// set null listener before setChecked() to prevent infinite loop of calls
|
||||
editPermissionSwitch.setOnCheckedChangeListener(null);
|
||||
|
@ -769,12 +730,12 @@ public class ShareFileFragment extends Fragment implements ShareUserListAdapter.
|
|||
if (!editPermissionSwitch.isChecked()) {
|
||||
editPermissionSwitch.toggle();
|
||||
}
|
||||
getHideFileListingPermissionSection().setVisibility(View.VISIBLE);
|
||||
binding.shareViaLinkHideFileListingPermissionSection.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
if (editPermissionSwitch.isChecked()) {
|
||||
editPermissionSwitch.toggle();
|
||||
}
|
||||
getHideFileListingPermissionSection().setVisibility(View.GONE);
|
||||
binding.shareViaLinkHideFileListingPermissionSection.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
// recover listener
|
||||
|
@ -783,9 +744,8 @@ public class ShareFileFragment extends Fragment implements ShareUserListAdapter.
|
|||
|
||||
private void updatePasswordSwitch(
|
||||
boolean isPasswordProtected,
|
||||
OnPasswordInteractionListener onPasswordInteractionListener)
|
||||
{
|
||||
SwitchCompat passwordSwitch = getPasswordSwitch();
|
||||
OnPasswordInteractionListener onPasswordInteractionListener) {
|
||||
SwitchCompat passwordSwitch = binding.shareViaLinkPasswordSwitch;
|
||||
// set null listener before setChecked() to prevent infinite loop of calls
|
||||
passwordSwitch.setOnCheckedChangeListener(null);
|
||||
|
||||
|
@ -793,12 +753,12 @@ public class ShareFileFragment extends Fragment implements ShareUserListAdapter.
|
|||
if (!passwordSwitch.isChecked()) {
|
||||
passwordSwitch.toggle();
|
||||
}
|
||||
getPasswordValue().setVisibility(View.VISIBLE);
|
||||
binding.shareViaLinkPasswordValue.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
if (passwordSwitch.isChecked()) {
|
||||
passwordSwitch.toggle();
|
||||
}
|
||||
getPasswordValue().setVisibility(View.INVISIBLE);
|
||||
binding.shareViaLinkPasswordValue.setVisibility(View.INVISIBLE);
|
||||
}
|
||||
|
||||
// recover listener
|
||||
|
@ -807,9 +767,8 @@ public class ShareFileFragment extends Fragment implements ShareUserListAdapter.
|
|||
|
||||
private void updateExpirationDateSwitch(
|
||||
long expirationDate,
|
||||
OnExpirationDateInteractionListener onExpirationDateInteractionListener)
|
||||
{
|
||||
SwitchCompat expirationDateSwitch = getExpirationDateSwitch();
|
||||
OnExpirationDateInteractionListener onExpirationDateInteractionListener) {
|
||||
SwitchCompat expirationDateSwitch = binding.shareViaLinkExpirationSwitch;
|
||||
// set null listener before setChecked() to prevent infinite loop of calls
|
||||
expirationDateSwitch.setOnCheckedChangeListener(null);
|
||||
|
||||
|
@ -818,12 +777,12 @@ public class ShareFileFragment extends Fragment implements ShareUserListAdapter.
|
|||
expirationDateSwitch.toggle();
|
||||
}
|
||||
String formattedDate = SimpleDateFormat.getDateInstance().format(new Date(expirationDate));
|
||||
getExpirationDateValue().setText(formattedDate);
|
||||
binding.shareViaLinkExpirationValue.setText(formattedDate);
|
||||
} else {
|
||||
if (expirationDateSwitch.isChecked()) {
|
||||
expirationDateSwitch.toggle();
|
||||
}
|
||||
getExpirationDateValue().setText(R.string.empty);
|
||||
binding.shareViaLinkExpirationValue.setText(R.string.empty);
|
||||
}
|
||||
|
||||
// recover listener
|
||||
|
@ -831,98 +790,40 @@ public class ShareFileFragment extends Fragment implements ShareUserListAdapter.
|
|||
}
|
||||
|
||||
private void initLinkButton() {
|
||||
MaterialButton getLinkButton = getGetLinkButton();
|
||||
MaterialButton getLinkButton = binding.shareViaLinkGetLinkButton;
|
||||
getLinkButton.getBackground().setColorFilter(ThemeUtils.primaryColor(getContext()),
|
||||
PorterDuff.Mode.SRC_ATOP);
|
||||
getLinkButton.setVisibility(View.VISIBLE);
|
||||
getLinkButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
//GetLink from the server and show ShareLinkToDialog
|
||||
((FileActivity) getActivity()).getFileOperationsHelper().
|
||||
getFileWithLink(mFile);
|
||||
|
||||
}
|
||||
});
|
||||
//GetLink from the server and show ShareLinkToDialog
|
||||
getLinkButton.setOnClickListener(v -> ((FileActivity) requireActivity()).getFileOperationsHelper().
|
||||
getFileWithLink(mFile));
|
||||
}
|
||||
|
||||
private void collapsePublicShareSection() {
|
||||
SwitchCompat shareViaLinkSwitch = getShareViaLinkSwitch();
|
||||
SwitchCompat shareViaLinkSwitch = binding.shareViaLinkSectionSwitch;
|
||||
if (shareViaLinkSwitch.isChecked()) {
|
||||
shareViaLinkSwitch.setOnCheckedChangeListener(null);
|
||||
getShareViaLinkSwitch().setChecked(false);
|
||||
shareViaLinkSwitch.setOnCheckedChangeListener(
|
||||
mOnShareViaLinkSwitchCheckedChangeListener
|
||||
);
|
||||
binding.shareViaLinkSectionSwitch.setChecked(false);
|
||||
shareViaLinkSwitch.setOnCheckedChangeListener(mOnShareViaLinkSwitchCheckedChangeListener);
|
||||
}
|
||||
getExpirationDateSection().setVisibility(View.GONE);
|
||||
getPasswordSection().setVisibility(View.GONE);
|
||||
getEditPermissionSection().setVisibility(View.GONE);
|
||||
getHideFileListingPermissionSection().setVisibility(View.GONE);
|
||||
getGetLinkButton().setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
|
||||
// BEWARE: following methods will fail with NullPointerException if called before onCreateView() finishes
|
||||
|
||||
private SwitchCompat getShareViaLinkSwitch() {
|
||||
return (SwitchCompat) getView().findViewById(R.id.shareViaLinkSectionSwitch);
|
||||
}
|
||||
|
||||
private View getExpirationDateSection() {
|
||||
return getView().findViewById(R.id.shareViaLinkExpirationSection);
|
||||
}
|
||||
|
||||
private SwitchCompat getExpirationDateSwitch() {
|
||||
return (SwitchCompat) getView().findViewById(R.id.shareViaLinkExpirationSwitch);
|
||||
}
|
||||
|
||||
private TextView getExpirationDateValue() {
|
||||
return (TextView) getView().findViewById(R.id.shareViaLinkExpirationValue);
|
||||
}
|
||||
|
||||
private View getPasswordSection() {
|
||||
return getView().findViewById(R.id.shareViaLinkPasswordSection);
|
||||
}
|
||||
|
||||
private SwitchCompat getPasswordSwitch() {
|
||||
return (SwitchCompat) getView().findViewById(R.id.shareViaLinkPasswordSwitch);
|
||||
}
|
||||
|
||||
private TextView getPasswordValue() {
|
||||
return (TextView) getView().findViewById(R.id.shareViaLinkPasswordValue);
|
||||
}
|
||||
|
||||
private View getEditPermissionSection() {
|
||||
return getView().findViewById(R.id.shareViaLinkEditPermissionSection);
|
||||
}
|
||||
|
||||
private SwitchCompat getEditPermissionSwitch() {
|
||||
return (SwitchCompat) getView().findViewById(R.id.shareViaLinkEditPermissionSwitch);
|
||||
}
|
||||
|
||||
private SwitchCompat getHideFileListingPermissionSwitch() {
|
||||
return (SwitchCompat) getView().findViewById(R.id.shareViaLinkFileListingPermissionSwitch);
|
||||
}
|
||||
|
||||
private View getHideFileListingPermissionSection() {
|
||||
return getView().findViewById(R.id.shareViaLinkHideFileListingPermissionSection);
|
||||
}
|
||||
|
||||
private MaterialButton getGetLinkButton() {
|
||||
return (MaterialButton) getView().findViewById(R.id.shareViaLinkGetLinkButton);
|
||||
binding.shareViaLinkExpirationSection.setVisibility(View.GONE);
|
||||
binding.shareViaLinkPasswordSection.setVisibility(View.GONE);
|
||||
binding.shareViaLinkEditPermissionSection.setVisibility(View.GONE);
|
||||
binding.shareViaLinkHideFileListingPermissionSection.setVisibility(View.GONE);
|
||||
binding.shareViaLinkGetLinkButton.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Hides all the UI elements related to public share
|
||||
*/
|
||||
private void hidePublicShare() {
|
||||
getShareViaLinkSwitch().setVisibility(View.GONE);
|
||||
getExpirationDateSection().setVisibility(View.GONE);
|
||||
getPasswordSection().setVisibility(View.GONE);
|
||||
getEditPermissionSection().setVisibility(View.GONE);
|
||||
getGetLinkButton().setVisibility(View.GONE);
|
||||
getHideFileListingPermissionSection().setVisibility(View.GONE);
|
||||
binding.shareViaLinkSectionSwitch.setVisibility(View.GONE);
|
||||
binding.shareViaLinkExpirationSection.setVisibility(View.GONE);
|
||||
binding.shareViaLinkPasswordSection.setVisibility(View.GONE);
|
||||
binding.shareViaLinkEditPermissionSection.setVisibility(View.GONE);
|
||||
binding.shareViaLinkGetLinkButton.setVisibility(View.GONE);
|
||||
binding.shareViaLinkHideFileListingPermissionSection.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -936,29 +837,24 @@ public class ShareFileFragment extends Fragment implements ShareUserListAdapter.
|
|||
SharePasswordDialogFragment dialog = SharePasswordDialogFragment.newInstance(mFile,
|
||||
createShare,
|
||||
askForPassword);
|
||||
dialog.show(getFragmentManager(), SharePasswordDialogFragment.PASSWORD_FRAGMENT);
|
||||
dialog.show(requireFragmentManager(), SharePasswordDialogFragment.PASSWORD_FRAGMENT);
|
||||
}
|
||||
|
||||
/**
|
||||
* Hide share features sections that are not enabled
|
||||
*
|
||||
* @param view share file view
|
||||
*/
|
||||
private void hideNotEnabledShareSections(View view) {
|
||||
LinearLayout shareWithUsersSection = view.findViewById(R.id.shareWithUsersSection);
|
||||
LinearLayout shareViaLinkSection = view.findViewById(R.id.shareViaLinkSection);
|
||||
|
||||
boolean shareViaLinkAllowed = getActivity().getResources().getBoolean(R.bool.share_via_link_feature);
|
||||
boolean shareWithUsersAllowed = getActivity().getResources().getBoolean(R.bool.share_with_users_feature);
|
||||
private void hideNotEnabledShareSections() {
|
||||
boolean shareViaLinkAllowed = getResources().getBoolean(R.bool.share_via_link_feature);
|
||||
boolean shareWithUsersAllowed = getResources().getBoolean(R.bool.share_with_users_feature);
|
||||
|
||||
// Hide share via link section if it is not enabled
|
||||
if (!shareViaLinkAllowed) {
|
||||
shareViaLinkSection.setVisibility(View.GONE);
|
||||
binding.shareViaLinkSection.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
// Hide share with users section if it is not enabled
|
||||
if (!shareWithUsersAllowed) {
|
||||
shareWithUsersSection.setVisibility(View.GONE);
|
||||
binding.shareWithUsersSection.setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue