Loading app/build.gradle +1 −1 Original line number Diff line number Diff line Loading @@ -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' } Loading app/src/main/java/it/niedermann/owncloud/notes/accountswitcher/AccountSwitcherDialog.java +29 −11 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; /** Loading Loading @@ -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()); Loading @@ -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(); }); Loading @@ -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(); Loading app/src/main/java/it/niedermann/owncloud/notes/accountswitcher/AccountSwitcherListener.java +3 −1 Original line number Diff line number Diff line Loading @@ -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(); } app/src/main/java/it/niedermann/owncloud/notes/accountswitcher/AccountSwitcherViewHolder.java +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; Loading @@ -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)); Loading app/src/main/java/it/niedermann/owncloud/notes/edit/BaseNoteFragment.java +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; Loading @@ -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; Loading Loading @@ -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 { Loading Loading @@ -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 Loading
app/build.gradle +1 −1 Original line number Diff line number Diff line Loading @@ -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' } Loading
app/src/main/java/it/niedermann/owncloud/notes/accountswitcher/AccountSwitcherDialog.java +29 −11 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; /** Loading Loading @@ -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()); Loading @@ -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(); }); Loading @@ -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(); Loading
app/src/main/java/it/niedermann/owncloud/notes/accountswitcher/AccountSwitcherListener.java +3 −1 Original line number Diff line number Diff line Loading @@ -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(); }
app/src/main/java/it/niedermann/owncloud/notes/accountswitcher/AccountSwitcherViewHolder.java +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; Loading @@ -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)); Loading
app/src/main/java/it/niedermann/owncloud/notes/edit/BaseNoteFragment.java +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; Loading @@ -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; Loading Loading @@ -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 { Loading Loading @@ -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