Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit 12856e9b authored by alperozturk's avatar alperozturk
Browse files

first successfull build

parent 1847eda7
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -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"
+34 −38
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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;
@@ -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 {
@@ -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();
@@ -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);
@@ -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
@@ -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);
    }

    /*
@@ -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);
@@ -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);
@@ -372,6 +384,8 @@ public class NoteShareFragment extends Fragment implements ShareeListAdapterList
                ClipboardUtil.copyToClipboard(requireActivity(), share.getShareLink());
            }
        }
         */

    }

    @Override
@@ -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();
@@ -424,7 +418,7 @@ public class NoteShareFragment extends Fragment implements ShareeListAdapterList
    }

    private void unshareWith(OCShare share) {
        fileOperationsHelper.unshareShare(file, share);
        // fileOperationsHelper.unshareShare(file, share);
    }

    /**
@@ -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());
    }

    /**
@@ -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;
@@ -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);
@@ -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);
@@ -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()) {
@@ -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
@@ -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
@@ -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
@@ -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
+1 −11
Original line number Diff line number Diff line
@@ -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;

@@ -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);
+7 −1
Original line number Diff line number Diff line
@@ -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() {
+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