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

Commit 6fabc135 authored by Fahim Salam Chowdhury's avatar Fahim Salam Chowdhury 👽
Browse files

Merge branch '775-Enable_local_account_support' into 'main'

775-Enable_local_account_support

See merge request !58
parents aac33d26 1cd497f3
Loading
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -56,7 +56,7 @@ dependencies {
    coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.6'

    // Nextcloud SSO
    implementation 'foundation.e.lib:Android-SingleSignOn:1.0.5-alpha'
    implementation 'foundation.e.lib:Android-SingleSignOn:1.0.8-release'
    implementation ('com.github.stefan-niedermann:android-commons:0.2.7') {
        exclude group: 'com.github.nextcloud', module: 'Android-SingleSignOn'
    }
+29 −11
Original line number Diff line number Diff line
@@ -6,8 +6,8 @@ import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.LayerDrawable;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;

import androidx.annotation.NonNull;
import androidx.fragment.app.DialogFragment;
@@ -16,12 +16,16 @@ import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestOptions;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;

import java.util.List;
import java.util.stream.Collectors;

import it.niedermann.owncloud.notes.R;
import it.niedermann.owncloud.notes.branding.BrandedDialogFragment;
import it.niedermann.owncloud.notes.databinding.DialogAccountSwitcherBinding;
import it.niedermann.owncloud.notes.manageaccounts.ManageAccountsActivity;
import it.niedermann.owncloud.notes.persistence.NotesRepository;
import it.niedermann.owncloud.notes.persistence.entity.Account;
import it.niedermann.owncloud.notes.shared.util.AccountSyncUtil;
import it.niedermann.owncloud.notes.shared.util.DisplayUtils;

/**
@@ -66,10 +70,10 @@ public class AccountSwitcherDialog extends BrandedDialogFragment {
            account$.removeObservers(requireActivity());

            binding.accountName.setText(currentLocalAccount.getDisplayName());
            binding.accountHost.setText(Uri.parse(currentLocalAccount.getUrl()).getHost());
            DisplayUtils.setHost(currentLocalAccount, binding.accountHost);
            Glide.with(requireContext())
                    .load(DisplayUtils.getAvatarUrl(currentLocalAccount))
                    .error(R.drawable.ic_account_circle_grey_24dp)
                    .error(R.drawable.ic_account_circle_grey_32dp)
                    .apply(RequestOptions.circleCropTransform())
                    .into(binding.currentAccountItemAvatar);
            binding.accountLayout.setOnClickListener((v) -> dismiss());
@@ -82,18 +86,14 @@ public class AccountSwitcherDialog extends BrandedDialogFragment {
            final var localAccounts$ = repo.getAccounts$();
            localAccounts$.observe(requireActivity(), (localAccounts) -> {
                localAccounts$.removeObservers(requireActivity());
                for (final var localAccount : localAccounts) {
                    if (localAccount.getId() == currentLocalAccount.getId()) {
                        localAccounts.remove(localAccount);
                        break;
                    }
                }
                adapter.setLocalAccounts(localAccounts);

                setAdapterList(currentLocalAccount, adapter, localAccounts);
                setAddLocalAccountButtonVisibility(localAccounts);
            });
        });

        binding.addAccount.setOnClickListener((v) -> {
            accountSwitcherListener.addAccount();
            accountSwitcherListener.onAddAccountButtonClick();
            dismiss();
        });

@@ -102,11 +102,29 @@ public class AccountSwitcherDialog extends BrandedDialogFragment {
            dismiss();
        });

        binding.addLocalAccount.setOnClickListener(view -> {
            accountSwitcherListener.onAddLocalAccountButtonClick();
            dismiss();
        });

        return new MaterialAlertDialogBuilder(requireContext())
                .setView(binding.getRoot())
                .create();
    }

    private void setAddLocalAccountButtonVisibility(List<Account> localAccounts) {
        final boolean isDeviceLocalAccountPresent = localAccounts.stream()
                .anyMatch(account -> AccountSyncUtil.isLocalAccount(requireContext(), account));
        binding.addLocalAccount.setVisibility(isDeviceLocalAccountPresent ? View.GONE : View.VISIBLE);
    }

    private void setAdapterList(Account currentLocalAccount, AccountSwitcherAdapter adapter, List<Account> localAccounts) {
        final List<Account> adapterAccounts = localAccounts.stream()
                .filter(account -> account.getId() != currentLocalAccount.getId())
                .collect(Collectors.toList());
        adapter.setLocalAccounts(adapterAccounts);
    }

    public static DialogFragment newInstance(long currentAccountId) {
        final var dialog = new AccountSwitcherDialog();

+3 −1
Original line number Diff line number Diff line
@@ -5,7 +5,9 @@ import androidx.annotation.NonNull;
import it.niedermann.owncloud.notes.persistence.entity.Account;

public interface AccountSwitcherListener {
    void addAccount();
    void onAddAccountButtonClick();

    void onAccountChosen(@NonNull Account localAccount);

    void onAddLocalAccountButtonClick();
}
+3 −4
Original line number Diff line number Diff line
package it.niedermann.owncloud.notes.accountswitcher;

import android.net.Uri;
import android.view.View;

import androidx.annotation.NonNull;
@@ -26,11 +25,11 @@ public class AccountSwitcherViewHolder extends RecyclerView.ViewHolder {

    public void bind(@NonNull Account localAccount, @NonNull Consumer<Account> onAccountClick) {
        binding.accountName.setText(localAccount.getDisplayName());
        binding.accountHost.setText(Uri.parse(localAccount.getUrl()).getHost());
        DisplayUtils.setHost(localAccount, binding.accountHost);
        Glide.with(itemView.getContext())
                .load(DisplayUtils.getAvatarUrl(localAccount))
                .placeholder(R.drawable.ic_account_circle_grey_24dp)
                .error(R.drawable.ic_account_circle_grey_24dp)
                .placeholder(R.drawable.ic_account_circle_grey_32dp)
                .error(R.drawable.ic_account_circle_grey_32dp)
                .apply(RequestOptions.circleCropTransform())
                .into(binding.accountItemAvatar);
        itemView.setOnClickListener((v) -> onAccountClick.accept(localAccount));
+4 −3
Original line number Diff line number Diff line
package it.niedermann.owncloud.notes.edit;

import static java.lang.Boolean.TRUE;
import static it.niedermann.owncloud.notes.NotesApplication.isDarkThemeActive;
import static it.niedermann.owncloud.notes.branding.BrandingUtil.tintMenuIcon;
import static it.niedermann.owncloud.notes.edit.EditNoteActivity.ACTION_SHORTCUT;
import static it.niedermann.owncloud.notes.shared.util.WidgetUtil.pendingIntentFlagCompat;
@@ -11,7 +10,6 @@ import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import trikita.log.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
@@ -47,9 +45,11 @@ import it.niedermann.owncloud.notes.persistence.entity.Note;
import it.niedermann.owncloud.notes.shared.model.ApiVersion;
import it.niedermann.owncloud.notes.shared.model.DBStatus;
import it.niedermann.owncloud.notes.shared.model.ISyncCallback;
import it.niedermann.owncloud.notes.shared.util.AccountSyncUtil;
import it.niedermann.owncloud.notes.shared.util.ApiVersionUtil;
import it.niedermann.owncloud.notes.shared.util.NoteUtil;
import it.niedermann.owncloud.notes.shared.util.ShareUtil;
import trikita.log.Log;

public abstract class BaseNoteFragment extends BrandedFragment implements CategoryDialogListener, EditTitleListener {

@@ -121,7 +121,8 @@ public abstract class BaseNoteFragment extends BrandedFragment implements Catego
                                requireActivity().invalidateOptionsMenu();
                            }
                        } else {
                            paramNote.setStatus(DBStatus.LOCAL_EDITED);
                            final var status = AccountSyncUtil.isLocalAccount(requireContext(), localAccount) ? DBStatus.VOID : DBStatus.LOCAL_EDITED;
                            paramNote.setStatus(status);
                            note = repo.addNote(localAccount.getId(), paramNote);
                            originalNote = null;
                            requireActivity().runOnUiThread(() -> onNoteLoaded(note));
Loading