Loading app/build.gradle +7 −2 Original line number Diff line number Diff line Loading @@ -95,12 +95,17 @@ ext { dependencies { coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.4' implementation("com.github.nextcloud:android-library:3d422b28376339c0fbd772e480dbbdc56b7ae1a1") { implementation 'com.google.guava:guava:31.1-android' implementation ('commons-httpclient:commons-httpclient:3.1') { exclude group: 'commons-logging', module: 'commons-logging' } implementation("com.github.nextcloud:android-library:2.19.0") { exclude group: 'org.ogce', module: 'xpp3' } // Nextcloud SSO implementation 'com.github.nextcloud.android-common:ui:0.24.0' implementation 'com.github.nextcloud.android-common:ui:0.23.2' implementation 'com.github.nextcloud:Android-SingleSignOn:1.3.2' implementation 'com.github.stefan-niedermann:android-commons:1.0.2' implementation "com.github.stefan-niedermann.nextcloud-commons:sso-glide:$commonsVersion" Loading app/src/main/java/it/niedermann/owncloud/notes/share/NoteShareFragment.java +34 −38 Original line number Diff line number Diff line Loading @@ -6,6 +6,7 @@ import android.app.SearchManager; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.database.Cursor; import android.graphics.drawable.Drawable; import android.net.Uri; Loading @@ -24,6 +25,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import androidx.appcompat.widget.SearchView; import androidx.core.content.ContextCompat; import androidx.fragment.app.DialogFragment; import androidx.fragment.app.Fragment; import androidx.recyclerview.widget.LinearLayoutManager; Loading @@ -31,6 +33,7 @@ import androidx.recyclerview.widget.LinearLayoutManager; import com.bumptech.glide.Glide; import com.bumptech.glide.request.RequestOptions; import com.google.android.material.snackbar.Snackbar; import com.owncloud.android.lib.common.operations.RemoteOperationResult; import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.lib.resources.shares.OCShare; import com.owncloud.android.lib.resources.shares.ShareType; Loading @@ -53,10 +56,9 @@ import it.niedermann.owncloud.notes.share.dialog.SharePasswordDialogFragment; import it.niedermann.owncloud.notes.share.listener.FileDetailsSharingMenuBottomSheetActions; import it.niedermann.owncloud.notes.share.listener.ShareeListAdapterListener; import it.niedermann.owncloud.notes.share.model.UsersAndGroupsSearchConfig; import it.niedermann.owncloud.notes.share.operations.ClientFactoryImpl; import it.niedermann.owncloud.notes.share.operations.RetrieveHoverCardAsyncTask; import it.niedermann.owncloud.notes.shared.user.User; import it.niedermann.owncloud.notes.shared.util.DisplayUtils; import it.niedermann.owncloud.notes.shared.util.clipboard.ClipboardUtil; import it.niedermann.owncloud.notes.shared.util.extensions.BundleExtensionsKt; public class NoteShareFragment extends Fragment implements ShareeListAdapterListener, FileDetailsSharingMenuBottomSheetActions, QuickSharingPermissionsBottomSheetDialog.QuickPermissionSharingBottomSheetActions { Loading @@ -73,6 +75,7 @@ public class NoteShareFragment extends Fragment implements ShareeListAdapterList private Account account; private OnEditShareListener onEditShareListener; private ClientFactoryImpl clientFactory; public static NoteShareFragment newInstance(Note note, User user, Account account) { NoteShareFragment fragment = new NoteShareFragment(); Loading @@ -88,6 +91,8 @@ public class NoteShareFragment extends Fragment implements ShareeListAdapterList public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); clientFactory = new ClientFactoryImpl(requireContext()); if (savedInstanceState != null) { note = BundleExtensionsKt.getSerializableArgument(savedInstanceState, ARG_NOTE, Note.class); account = BundleExtensionsKt.getSerializableArgument(savedInstanceState, ARG_ACCOUNT, Account.class); Loading Loading @@ -307,6 +312,7 @@ public class NoteShareFragment extends Fragment implements ShareeListAdapterList // TODO: Capabilities in notes app doesn't have following functions... public void createPublicShareLink() { /* if (capabilities != null && (capabilities.getFilesSharingPublicPasswordEnforced().isTrue() || capabilities.getFilesSharingPublicAskForOptionalPassword().isTrue())) { // password enforced by server, request to the user before trying to create Loading @@ -326,10 +332,12 @@ public class NoteShareFragment extends Fragment implements ShareeListAdapterList service.putExtra(OperationsService.EXTRA_REMOTE_PATH, file.getRemotePath()); mWaitingForOpId = fileActivity.getOperationsServiceBinder().queueNewOperation(service); } */ } public void createSecureFileDrop() { fileOperationsHelper.shareFolderViaSecureFileDrop(file); // fileOperationsHelper.shareFolderViaSecureFileDrop(file); } /* Loading @@ -354,6 +362,7 @@ public class NoteShareFragment extends Fragment implements ShareeListAdapterList } */ private void showSendLinkTo(OCShare publicShare) { /* if (file.isSharedViaLink()) { if (TextUtils.isEmpty(publicShare.getShareLink())) { fileOperationsHelper.getFileWithLink(file, viewThemeUtils); Loading @@ -362,9 +371,12 @@ public class NoteShareFragment extends Fragment implements ShareeListAdapterList showShareLinkDialog(); } } */ } public void copyLink(OCShare share) { /* if (file.isSharedViaLink()) { if (TextUtils.isEmpty(share.getShareLink())) { fileOperationsHelper.getFileWithLink(file, viewThemeUtils); Loading @@ -372,6 +384,8 @@ public class NoteShareFragment extends Fragment implements ShareeListAdapterList ClipboardUtil.copyToClipboard(requireActivity(), share.getShareLink()); } } */ } @Override Loading @@ -386,26 +400,6 @@ public class NoteShareFragment extends Fragment implements ShareeListAdapterList new QuickSharingPermissionsBottomSheetDialog(getActivity(), this, share).show(); } /** * Updates the UI after the result of an update operation on the edited {@link OCFile}. * * @param result {@link RemoteOperationResult} of an update on the edited {@link OCFile} sharing information. * @param file the edited {@link OCFile} * @see #onUpdateShareInformation(RemoteOperationResult) */ public void onUpdateShareInformation(RemoteOperationResult result, OCFile file) { this.file = file; onUpdateShareInformation(result); } /** * Updates the UI after the result of an update operation on the edited {@link OCFile}. Keeps the current {@link * OCFile held by this fragment}. * * @param result {@link RemoteOperationResult} of an update on the edited {@link OCFile} sharing information. * @see #onUpdateShareInformation(RemoteOperationResult, OCFile) */ public void onUpdateShareInformation(RemoteOperationResult result) { if (result.isSuccess()) { refreshUiFromDB(); Loading @@ -424,7 +418,7 @@ public class NoteShareFragment extends Fragment implements ShareeListAdapterList } private void unshareWith(OCShare share) { fileOperationsHelper.unshareShare(file, share); // fileOperationsHelper.unshareShare(file, share); } /** Loading Loading @@ -462,7 +456,7 @@ public class NoteShareFragment extends Fragment implements ShareeListAdapterList * Get known server capabilities from DB */ public void refreshCapabilitiesFromDB() { capabilities = fileDataStorageManager.getCapability(user.getAccountName()); // capabilities = fileDataStorageManager.getCapability(user.getAccountName()); } /** Loading @@ -470,6 +464,7 @@ public class NoteShareFragment extends Fragment implements ShareeListAdapterList * before reading database. */ public void refreshSharesFromDB() { /* OCFile newFile = fileDataStorageManager.getFileById(file.getFileId()); if (newFile != null) { file = newFile; Loading Loading @@ -499,8 +494,7 @@ public class NoteShareFragment extends Fragment implements ShareeListAdapterList ShareType.PUBLIC_LINK, ""); if (publicShares.isEmpty() && containsNoNewPublicShare(adapter.getShares()) && (!file.isEncrypted() || capabilities.getEndToEndEncryption().isTrue())) { if (publicShares.isEmpty() && containsNoNewPublicShare(adapter.getShares())) { final OCShare ocShare = new OCShare(); ocShare.setShareType(ShareType.NEW_PUBLIC_LINK); publicShares.add(ocShare); Loading @@ -509,10 +503,12 @@ public class NoteShareFragment extends Fragment implements ShareeListAdapterList } adapter.addShares(publicShares); */ } private void checkContactPermission() { if (PermissionUtil.checkSelfPermission(requireActivity(), Manifest.permission.READ_CONTACTS)) { if (ContextCompat.checkSelfPermission(requireActivity(), Manifest.permission.READ_CONTACTS) == PackageManager.PERMISSION_GRANTED) { pickContactEmail(); } else { requestContactPermissionLauncher.launch(Manifest.permission.READ_CONTACTS); Loading @@ -534,7 +530,7 @@ public class NoteShareFragment extends Fragment implements ShareeListAdapterList // Define the projection to get all email addresses. String[] projection = {ContactsContract.CommonDataKinds.Email.ADDRESS}; Cursor cursor = fileActivity.getContentResolver().query(contactUri, projection, null, null, null); Cursor cursor = requireActivity().getContentResolver().query(contactUri, projection, null, null, null); if (cursor != null) { if (cursor.moveToFirst()) { Loading Loading @@ -584,19 +580,17 @@ public class NoteShareFragment extends Fragment implements ShareeListAdapterList outState.putParcelable(ARG_USER, user); } @Override public void avatarGenerated(Drawable avatarDrawable, Object callContext) { binding.sharedWithYouAvatar.setImageDrawable(avatarDrawable); } @Override public boolean shouldCallGeneratedCallback(String tag, Object callContext) { return false; } private boolean isReshareForbidden(OCShare share) { return ShareType.FEDERATED == share.getShareType() || capabilities != null && capabilities.getFilesSharingResharing().isFalse(); return false; // return ShareType.FEDERATED == share.getShareType() || capabilities != null && capabilities.getFilesSharingResharing().isFalse(); } @VisibleForTesting Loading @@ -607,13 +601,13 @@ public class NoteShareFragment extends Fragment implements ShareeListAdapterList @Override public void advancedPermissions(OCShare share) { modifyExistingShare(share, FileDetailsSharingProcessFragment.SCREEN_TYPE_PERMISSION); // modifyExistingShare(share, FileDetailsSharingProcessFragment.SCREEN_TYPE_PERMISSION); } @Override public void sendNewEmail(OCShare share) { modifyExistingShare(share, FileDetailsSharingProcessFragment.SCREEN_TYPE_NOTE); // modifyExistingShare(share, FileDetailsSharingProcessFragment.SCREEN_TYPE_NOTE); } @Override Loading @@ -630,11 +624,14 @@ public class NoteShareFragment extends Fragment implements ShareeListAdapterList @Override public void sendLink(OCShare share) { /* if (file.isSharedViaLink() && !TextUtils.isEmpty(share.getShareLink())) { FileDisplayActivity.showShareLinkDialog(fileActivity, file, share.getShareLink()); } else { showSendLinkTo(share); } */ } @Override Loading @@ -643,13 +640,12 @@ public class NoteShareFragment extends Fragment implements ShareeListAdapterList } private void modifyExistingShare(OCShare share, int screenTypePermission) { onEditShareListener.editExistingShare(share, screenTypePermission, !isReshareForbidden(share), capabilities.getVersion().isNewerOrEqual(OwnCloudVersion.nextcloud_18)); // onEditShareListener.editExistingShare(share, screenTypePermission, !isReshareForbidden(share), capabilities.getVersion().isNewerOrEqual(OwnCloudVersion.nextcloud_18)); } @Override public void onQuickPermissionChanged(OCShare share, int permission) { fileOperationsHelper.setPermissionsToShare(share, permission); // fileOperationsHelper.setPermissionsToShare(share, permission); } //launcher for contact permission Loading app/src/main/java/it/niedermann/owncloud/notes/share/adapter/holder/LinkShareViewHolder.java +1 −11 Original line number Diff line number Diff line Loading @@ -9,7 +9,6 @@ import androidx.annotation.NonNull; import androidx.core.content.res.ResourcesCompat; import androidx.recyclerview.widget.RecyclerView; import com.nextcloud.android.lib.resources.files.FileDownloadLimit; import com.owncloud.android.lib.resources.shares.OCShare; import com.owncloud.android.lib.resources.shares.ShareType; Loading Loading @@ -59,16 +58,7 @@ public class LinkShareViewHolder extends RecyclerView.ViewHolder { // viewThemeUtils.platform.colorImageViewBackgroundAndIcon(binding.icon); } FileDownloadLimit downloadLimit = publicShare.getFileDownloadLimit(); if (downloadLimit != null && downloadLimit.getLimit() > 0) { int remaining = downloadLimit.getLimit() - downloadLimit.getCount(); String text = context.getResources().getQuantityString(R.plurals.share_download_limit_description, remaining, remaining); binding.subline.setText(text); binding.subline.setVisibility(View.VISIBLE); } else { binding.subline.setVisibility(View.GONE); } String permissionName = SharingMenuHelper.getPermissionName(context, publicShare); setPermissionName(publicShare, permissionName); Loading app/src/main/java/it/niedermann/owncloud/notes/share/dialog/SharePasswordDialogFragment.kt +7 −1 Original line number Diff line number Diff line Loading @@ -138,17 +138,23 @@ class SharePasswordDialogFragment : DialogFragment() { } private fun setPassword(createShare: Boolean, note: Note?, password: String?) { /* val fileOperationsHelper = (requireActivity() as FileActivity).fileOperationsHelper ?: return if (createShare) { fileOperationsHelper.shareFileViaPublicShare(note, password) } else { fileOperationsHelper.setPasswordToShare(share, password) } */ } private fun setPassword(share: OCShare, password: String?) { /* val fileOperationsHelper = (requireActivity() as FileActivity).fileOperationsHelper ?: return fileOperationsHelper.setPasswordToShare(share, password) */ } override fun onDestroyView() { Loading app/src/main/java/it/niedermann/owncloud/notes/share/operations/ClientFactoryImpl.java 0 → 100644 +84 −0 Original line number Diff line number Diff line /* * Nextcloud - Android Client * * SPDX-FileCopyrightText: 2019 Chris Narkiewicz <hello@ezaquarii.com> * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only */ package it.niedermann.owncloud.notes.share.operations; import android.accounts.Account; import android.accounts.AuthenticatorException; import android.accounts.OperationCanceledException; import android.app.Activity; import android.content.Context; import android.net.Uri; import com.nextcloud.common.NextcloudClient; import com.nextcloud.common.PlainClient; import com.owncloud.android.lib.common.OwnCloudClient; import com.owncloud.android.lib.common.OwnCloudClientFactory; import com.owncloud.android.lib.common.OwnCloudClientManagerFactory; import com.owncloud.android.lib.common.accounts.AccountUtils; import java.io.IOException; import it.niedermann.owncloud.notes.shared.user.User; public class ClientFactoryImpl implements ClientFactory { private Context context; public ClientFactoryImpl(Context context) { this.context = context; } @Override public OwnCloudClient create(User user) throws CreationException { try { return OwnCloudClientManagerFactory.getDefaultSingleton().getClientFor(user.toOwnCloudAccount(), context); } catch (OperationCanceledException | AuthenticatorException | IOException e) { throw new CreationException(e); } } @Override public NextcloudClient createNextcloudClient(User user) throws CreationException { try { return OwnCloudClientFactory.createNextcloudClient(user, context); } catch (AccountUtils.AccountNotFoundException e) { throw new CreationException(e); } } @Override public OwnCloudClient create(Account account) throws OperationCanceledException, AuthenticatorException, IOException, AccountUtils.AccountNotFoundException { return OwnCloudClientFactory.createOwnCloudClient(account, context); } @Override public OwnCloudClient create(Account account, Activity currentActivity) throws OperationCanceledException, AuthenticatorException, IOException, AccountUtils.AccountNotFoundException { return OwnCloudClientFactory.createOwnCloudClient(account, context, currentActivity); } @Override public OwnCloudClient create(Uri uri, boolean followRedirects, boolean useNextcloudUserAgent) { return OwnCloudClientFactory.createOwnCloudClient(uri, context, followRedirects); } @Override public OwnCloudClient create(Uri uri, boolean followRedirects) { return OwnCloudClientFactory.createOwnCloudClient(uri, context, followRedirects); } @Override public PlainClient createPlainClient() { return new PlainClient(context); } } Loading
app/build.gradle +7 −2 Original line number Diff line number Diff line Loading @@ -95,12 +95,17 @@ ext { dependencies { coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.4' implementation("com.github.nextcloud:android-library:3d422b28376339c0fbd772e480dbbdc56b7ae1a1") { implementation 'com.google.guava:guava:31.1-android' implementation ('commons-httpclient:commons-httpclient:3.1') { exclude group: 'commons-logging', module: 'commons-logging' } implementation("com.github.nextcloud:android-library:2.19.0") { exclude group: 'org.ogce', module: 'xpp3' } // Nextcloud SSO implementation 'com.github.nextcloud.android-common:ui:0.24.0' implementation 'com.github.nextcloud.android-common:ui:0.23.2' implementation 'com.github.nextcloud:Android-SingleSignOn:1.3.2' implementation 'com.github.stefan-niedermann:android-commons:1.0.2' implementation "com.github.stefan-niedermann.nextcloud-commons:sso-glide:$commonsVersion" Loading
app/src/main/java/it/niedermann/owncloud/notes/share/NoteShareFragment.java +34 −38 Original line number Diff line number Diff line Loading @@ -6,6 +6,7 @@ import android.app.SearchManager; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.database.Cursor; import android.graphics.drawable.Drawable; import android.net.Uri; Loading @@ -24,6 +25,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import androidx.appcompat.widget.SearchView; import androidx.core.content.ContextCompat; import androidx.fragment.app.DialogFragment; import androidx.fragment.app.Fragment; import androidx.recyclerview.widget.LinearLayoutManager; Loading @@ -31,6 +33,7 @@ import androidx.recyclerview.widget.LinearLayoutManager; import com.bumptech.glide.Glide; import com.bumptech.glide.request.RequestOptions; import com.google.android.material.snackbar.Snackbar; import com.owncloud.android.lib.common.operations.RemoteOperationResult; import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.lib.resources.shares.OCShare; import com.owncloud.android.lib.resources.shares.ShareType; Loading @@ -53,10 +56,9 @@ import it.niedermann.owncloud.notes.share.dialog.SharePasswordDialogFragment; import it.niedermann.owncloud.notes.share.listener.FileDetailsSharingMenuBottomSheetActions; import it.niedermann.owncloud.notes.share.listener.ShareeListAdapterListener; import it.niedermann.owncloud.notes.share.model.UsersAndGroupsSearchConfig; import it.niedermann.owncloud.notes.share.operations.ClientFactoryImpl; import it.niedermann.owncloud.notes.share.operations.RetrieveHoverCardAsyncTask; import it.niedermann.owncloud.notes.shared.user.User; import it.niedermann.owncloud.notes.shared.util.DisplayUtils; import it.niedermann.owncloud.notes.shared.util.clipboard.ClipboardUtil; import it.niedermann.owncloud.notes.shared.util.extensions.BundleExtensionsKt; public class NoteShareFragment extends Fragment implements ShareeListAdapterListener, FileDetailsSharingMenuBottomSheetActions, QuickSharingPermissionsBottomSheetDialog.QuickPermissionSharingBottomSheetActions { Loading @@ -73,6 +75,7 @@ public class NoteShareFragment extends Fragment implements ShareeListAdapterList private Account account; private OnEditShareListener onEditShareListener; private ClientFactoryImpl clientFactory; public static NoteShareFragment newInstance(Note note, User user, Account account) { NoteShareFragment fragment = new NoteShareFragment(); Loading @@ -88,6 +91,8 @@ public class NoteShareFragment extends Fragment implements ShareeListAdapterList public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); clientFactory = new ClientFactoryImpl(requireContext()); if (savedInstanceState != null) { note = BundleExtensionsKt.getSerializableArgument(savedInstanceState, ARG_NOTE, Note.class); account = BundleExtensionsKt.getSerializableArgument(savedInstanceState, ARG_ACCOUNT, Account.class); Loading Loading @@ -307,6 +312,7 @@ public class NoteShareFragment extends Fragment implements ShareeListAdapterList // TODO: Capabilities in notes app doesn't have following functions... public void createPublicShareLink() { /* if (capabilities != null && (capabilities.getFilesSharingPublicPasswordEnforced().isTrue() || capabilities.getFilesSharingPublicAskForOptionalPassword().isTrue())) { // password enforced by server, request to the user before trying to create Loading @@ -326,10 +332,12 @@ public class NoteShareFragment extends Fragment implements ShareeListAdapterList service.putExtra(OperationsService.EXTRA_REMOTE_PATH, file.getRemotePath()); mWaitingForOpId = fileActivity.getOperationsServiceBinder().queueNewOperation(service); } */ } public void createSecureFileDrop() { fileOperationsHelper.shareFolderViaSecureFileDrop(file); // fileOperationsHelper.shareFolderViaSecureFileDrop(file); } /* Loading @@ -354,6 +362,7 @@ public class NoteShareFragment extends Fragment implements ShareeListAdapterList } */ private void showSendLinkTo(OCShare publicShare) { /* if (file.isSharedViaLink()) { if (TextUtils.isEmpty(publicShare.getShareLink())) { fileOperationsHelper.getFileWithLink(file, viewThemeUtils); Loading @@ -362,9 +371,12 @@ public class NoteShareFragment extends Fragment implements ShareeListAdapterList showShareLinkDialog(); } } */ } public void copyLink(OCShare share) { /* if (file.isSharedViaLink()) { if (TextUtils.isEmpty(share.getShareLink())) { fileOperationsHelper.getFileWithLink(file, viewThemeUtils); Loading @@ -372,6 +384,8 @@ public class NoteShareFragment extends Fragment implements ShareeListAdapterList ClipboardUtil.copyToClipboard(requireActivity(), share.getShareLink()); } } */ } @Override Loading @@ -386,26 +400,6 @@ public class NoteShareFragment extends Fragment implements ShareeListAdapterList new QuickSharingPermissionsBottomSheetDialog(getActivity(), this, share).show(); } /** * Updates the UI after the result of an update operation on the edited {@link OCFile}. * * @param result {@link RemoteOperationResult} of an update on the edited {@link OCFile} sharing information. * @param file the edited {@link OCFile} * @see #onUpdateShareInformation(RemoteOperationResult) */ public void onUpdateShareInformation(RemoteOperationResult result, OCFile file) { this.file = file; onUpdateShareInformation(result); } /** * Updates the UI after the result of an update operation on the edited {@link OCFile}. Keeps the current {@link * OCFile held by this fragment}. * * @param result {@link RemoteOperationResult} of an update on the edited {@link OCFile} sharing information. * @see #onUpdateShareInformation(RemoteOperationResult, OCFile) */ public void onUpdateShareInformation(RemoteOperationResult result) { if (result.isSuccess()) { refreshUiFromDB(); Loading @@ -424,7 +418,7 @@ public class NoteShareFragment extends Fragment implements ShareeListAdapterList } private void unshareWith(OCShare share) { fileOperationsHelper.unshareShare(file, share); // fileOperationsHelper.unshareShare(file, share); } /** Loading Loading @@ -462,7 +456,7 @@ public class NoteShareFragment extends Fragment implements ShareeListAdapterList * Get known server capabilities from DB */ public void refreshCapabilitiesFromDB() { capabilities = fileDataStorageManager.getCapability(user.getAccountName()); // capabilities = fileDataStorageManager.getCapability(user.getAccountName()); } /** Loading @@ -470,6 +464,7 @@ public class NoteShareFragment extends Fragment implements ShareeListAdapterList * before reading database. */ public void refreshSharesFromDB() { /* OCFile newFile = fileDataStorageManager.getFileById(file.getFileId()); if (newFile != null) { file = newFile; Loading Loading @@ -499,8 +494,7 @@ public class NoteShareFragment extends Fragment implements ShareeListAdapterList ShareType.PUBLIC_LINK, ""); if (publicShares.isEmpty() && containsNoNewPublicShare(adapter.getShares()) && (!file.isEncrypted() || capabilities.getEndToEndEncryption().isTrue())) { if (publicShares.isEmpty() && containsNoNewPublicShare(adapter.getShares())) { final OCShare ocShare = new OCShare(); ocShare.setShareType(ShareType.NEW_PUBLIC_LINK); publicShares.add(ocShare); Loading @@ -509,10 +503,12 @@ public class NoteShareFragment extends Fragment implements ShareeListAdapterList } adapter.addShares(publicShares); */ } private void checkContactPermission() { if (PermissionUtil.checkSelfPermission(requireActivity(), Manifest.permission.READ_CONTACTS)) { if (ContextCompat.checkSelfPermission(requireActivity(), Manifest.permission.READ_CONTACTS) == PackageManager.PERMISSION_GRANTED) { pickContactEmail(); } else { requestContactPermissionLauncher.launch(Manifest.permission.READ_CONTACTS); Loading @@ -534,7 +530,7 @@ public class NoteShareFragment extends Fragment implements ShareeListAdapterList // Define the projection to get all email addresses. String[] projection = {ContactsContract.CommonDataKinds.Email.ADDRESS}; Cursor cursor = fileActivity.getContentResolver().query(contactUri, projection, null, null, null); Cursor cursor = requireActivity().getContentResolver().query(contactUri, projection, null, null, null); if (cursor != null) { if (cursor.moveToFirst()) { Loading Loading @@ -584,19 +580,17 @@ public class NoteShareFragment extends Fragment implements ShareeListAdapterList outState.putParcelable(ARG_USER, user); } @Override public void avatarGenerated(Drawable avatarDrawable, Object callContext) { binding.sharedWithYouAvatar.setImageDrawable(avatarDrawable); } @Override public boolean shouldCallGeneratedCallback(String tag, Object callContext) { return false; } private boolean isReshareForbidden(OCShare share) { return ShareType.FEDERATED == share.getShareType() || capabilities != null && capabilities.getFilesSharingResharing().isFalse(); return false; // return ShareType.FEDERATED == share.getShareType() || capabilities != null && capabilities.getFilesSharingResharing().isFalse(); } @VisibleForTesting Loading @@ -607,13 +601,13 @@ public class NoteShareFragment extends Fragment implements ShareeListAdapterList @Override public void advancedPermissions(OCShare share) { modifyExistingShare(share, FileDetailsSharingProcessFragment.SCREEN_TYPE_PERMISSION); // modifyExistingShare(share, FileDetailsSharingProcessFragment.SCREEN_TYPE_PERMISSION); } @Override public void sendNewEmail(OCShare share) { modifyExistingShare(share, FileDetailsSharingProcessFragment.SCREEN_TYPE_NOTE); // modifyExistingShare(share, FileDetailsSharingProcessFragment.SCREEN_TYPE_NOTE); } @Override Loading @@ -630,11 +624,14 @@ public class NoteShareFragment extends Fragment implements ShareeListAdapterList @Override public void sendLink(OCShare share) { /* if (file.isSharedViaLink() && !TextUtils.isEmpty(share.getShareLink())) { FileDisplayActivity.showShareLinkDialog(fileActivity, file, share.getShareLink()); } else { showSendLinkTo(share); } */ } @Override Loading @@ -643,13 +640,12 @@ public class NoteShareFragment extends Fragment implements ShareeListAdapterList } private void modifyExistingShare(OCShare share, int screenTypePermission) { onEditShareListener.editExistingShare(share, screenTypePermission, !isReshareForbidden(share), capabilities.getVersion().isNewerOrEqual(OwnCloudVersion.nextcloud_18)); // onEditShareListener.editExistingShare(share, screenTypePermission, !isReshareForbidden(share), capabilities.getVersion().isNewerOrEqual(OwnCloudVersion.nextcloud_18)); } @Override public void onQuickPermissionChanged(OCShare share, int permission) { fileOperationsHelper.setPermissionsToShare(share, permission); // fileOperationsHelper.setPermissionsToShare(share, permission); } //launcher for contact permission Loading
app/src/main/java/it/niedermann/owncloud/notes/share/adapter/holder/LinkShareViewHolder.java +1 −11 Original line number Diff line number Diff line Loading @@ -9,7 +9,6 @@ import androidx.annotation.NonNull; import androidx.core.content.res.ResourcesCompat; import androidx.recyclerview.widget.RecyclerView; import com.nextcloud.android.lib.resources.files.FileDownloadLimit; import com.owncloud.android.lib.resources.shares.OCShare; import com.owncloud.android.lib.resources.shares.ShareType; Loading Loading @@ -59,16 +58,7 @@ public class LinkShareViewHolder extends RecyclerView.ViewHolder { // viewThemeUtils.platform.colorImageViewBackgroundAndIcon(binding.icon); } FileDownloadLimit downloadLimit = publicShare.getFileDownloadLimit(); if (downloadLimit != null && downloadLimit.getLimit() > 0) { int remaining = downloadLimit.getLimit() - downloadLimit.getCount(); String text = context.getResources().getQuantityString(R.plurals.share_download_limit_description, remaining, remaining); binding.subline.setText(text); binding.subline.setVisibility(View.VISIBLE); } else { binding.subline.setVisibility(View.GONE); } String permissionName = SharingMenuHelper.getPermissionName(context, publicShare); setPermissionName(publicShare, permissionName); Loading
app/src/main/java/it/niedermann/owncloud/notes/share/dialog/SharePasswordDialogFragment.kt +7 −1 Original line number Diff line number Diff line Loading @@ -138,17 +138,23 @@ class SharePasswordDialogFragment : DialogFragment() { } private fun setPassword(createShare: Boolean, note: Note?, password: String?) { /* val fileOperationsHelper = (requireActivity() as FileActivity).fileOperationsHelper ?: return if (createShare) { fileOperationsHelper.shareFileViaPublicShare(note, password) } else { fileOperationsHelper.setPasswordToShare(share, password) } */ } private fun setPassword(share: OCShare, password: String?) { /* val fileOperationsHelper = (requireActivity() as FileActivity).fileOperationsHelper ?: return fileOperationsHelper.setPasswordToShare(share, password) */ } override fun onDestroyView() { Loading
app/src/main/java/it/niedermann/owncloud/notes/share/operations/ClientFactoryImpl.java 0 → 100644 +84 −0 Original line number Diff line number Diff line /* * Nextcloud - Android Client * * SPDX-FileCopyrightText: 2019 Chris Narkiewicz <hello@ezaquarii.com> * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only */ package it.niedermann.owncloud.notes.share.operations; import android.accounts.Account; import android.accounts.AuthenticatorException; import android.accounts.OperationCanceledException; import android.app.Activity; import android.content.Context; import android.net.Uri; import com.nextcloud.common.NextcloudClient; import com.nextcloud.common.PlainClient; import com.owncloud.android.lib.common.OwnCloudClient; import com.owncloud.android.lib.common.OwnCloudClientFactory; import com.owncloud.android.lib.common.OwnCloudClientManagerFactory; import com.owncloud.android.lib.common.accounts.AccountUtils; import java.io.IOException; import it.niedermann.owncloud.notes.shared.user.User; public class ClientFactoryImpl implements ClientFactory { private Context context; public ClientFactoryImpl(Context context) { this.context = context; } @Override public OwnCloudClient create(User user) throws CreationException { try { return OwnCloudClientManagerFactory.getDefaultSingleton().getClientFor(user.toOwnCloudAccount(), context); } catch (OperationCanceledException | AuthenticatorException | IOException e) { throw new CreationException(e); } } @Override public NextcloudClient createNextcloudClient(User user) throws CreationException { try { return OwnCloudClientFactory.createNextcloudClient(user, context); } catch (AccountUtils.AccountNotFoundException e) { throw new CreationException(e); } } @Override public OwnCloudClient create(Account account) throws OperationCanceledException, AuthenticatorException, IOException, AccountUtils.AccountNotFoundException { return OwnCloudClientFactory.createOwnCloudClient(account, context); } @Override public OwnCloudClient create(Account account, Activity currentActivity) throws OperationCanceledException, AuthenticatorException, IOException, AccountUtils.AccountNotFoundException { return OwnCloudClientFactory.createOwnCloudClient(account, context, currentActivity); } @Override public OwnCloudClient create(Uri uri, boolean followRedirects, boolean useNextcloudUserAgent) { return OwnCloudClientFactory.createOwnCloudClient(uri, context, followRedirects); } @Override public OwnCloudClient create(Uri uri, boolean followRedirects) { return OwnCloudClientFactory.createOwnCloudClient(uri, context, followRedirects); } @Override public PlainClient createPlainClient() { return new PlainClient(context); } }