diff options
author | Niedermann IT-Dienstleistungen <stefan-niedermann@users.noreply.github.com> | 2021-04-18 14:18:30 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-18 14:18:30 +0300 |
commit | 05486c126a0bdfeaaf1d1230596a09b649d457c6 (patch) | |
tree | 287cce950f0b8303376e7d45b6154ead9859d234 /app | |
parent | 33c323483c88f3c7159ef3e8e079d7d2474d9a18 (diff) |
#864 Show DisplayName instead of UID attribute for LDAP users (#925)
* #864 Show DisplayName instead of UID attribute for LDAP users
Signed-off-by: Stefan Niedermann <info@niedermann.it>
* #864 include accounts username in liveData
* #864 Show DisplayName instead of UID attribute for LDAP users
Signed-off-by: Stefan Niedermann <info@niedermann.it>
* #864 Show DisplayName instead of UID attribute for LDAP users
Signed-off-by: Stefan Niedermann <info@niedermann.it>
Co-authored-by: desperateCoder <echotodevnull@gmail.com>
Diffstat (limited to 'app')
6 files changed, 63 insertions, 14 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/model/Account.java b/app/src/main/java/it/niedermann/nextcloud/deck/model/Account.java index 8abcbced7..19108f353 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/model/Account.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/model/Account.java @@ -4,6 +4,7 @@ import android.net.Uri; import androidx.annotation.ColorInt; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.annotation.Px; import androidx.room.ColumnInfo; import androidx.room.Entity; @@ -34,6 +35,10 @@ public class Account implements Serializable { @NonNull private String userName; + @Ignore + @Nullable + private String userDisplayName; + @NonNull private String url; @@ -183,6 +188,15 @@ public class Account implements Serializable { this.maintenanceEnabled = maintenanceEnabled; } + @Nullable + public String getUserDisplayName() { + return userDisplayName; + } + + public void setUserDisplayName(@Nullable String userDisplayName) { + this.userDisplayName = userDisplayName; + } + public String getEtag() { return etag; } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapter.java index 49face983..c66edbc42 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapter.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapter.java @@ -324,7 +324,7 @@ public class DataBaseAdapter { } if (filter.getFilterText() != null && !filter.getFilterText().isEmpty()) { query.append(" and (c.description like ? or c.title like ?) "); - String filterText = "%"+filter.getFilterText()+"%"; + String filterText = "%" + filter.getFilterText() + "%"; args.add(filterText); args.add(filterText); } @@ -535,13 +535,31 @@ public class DataBaseAdapter { db.getAccountDao().update(account); } + @AnyThread public LiveData<Account> readAccount(long id) { - return distinctUntilChanged(db.getAccountDao().getAccountById(id)); + return fillAccountsUserName(db.getAccountDao().getAccountById(id)); } + @AnyThread public LiveData<Account> readAccount(String name) { - return LiveDataHelper.wrapInLiveData(() -> db.getAccountDao().getAccountByNameDirectly(name)); -// return distinctUntilChanged(db.getAccountDao().getAccountByName(name)); + return fillAccountsUserName(db.getAccountDao().getAccountByName(name)); + } + + @AnyThread + public LiveData<List<Account>> readAccounts() { + return fillAccountsListUserName(db.getAccountDao().getAllAccounts()); + } + + private LiveData<Account> fillAccountsUserName(LiveData<Account> source) { + return LiveDataHelper.interceptLiveData(distinctUntilChanged(source), data -> data.setUserDisplayName(db.getUserDao().getUserNameByUidDirectly(data.getId(), data.getUserName()))); + } + + private LiveData<List<Account>> fillAccountsListUserName(LiveData<List<Account>> source) { + return LiveDataHelper.interceptLiveData(distinctUntilChanged(source), data -> { + for (Account a : data) { + a.setUserDisplayName(db.getUserDao().getUserNameByUidDirectly(a.getId(), a.getUserName())); + } + }); } @WorkerThread @@ -549,9 +567,6 @@ public class DataBaseAdapter { return db.getAccountDao().getAccountByIdDirectly(id); } - public LiveData<List<Account>> readAccounts() { - return distinctUntilChanged(db.getAccountDao().getAllAccounts()); - } public LiveData<List<Board>> getBoards(long accountId) { return distinctUntilChanged(db.getBoardDao().getBoardsForAccount(accountId)); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/UserDao.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/UserDao.java index 6e42cdaae..671f044b0 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/UserDao.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/dao/UserDao.java @@ -20,6 +20,9 @@ public interface UserDao extends GenericDao<User> { @Query("SELECT * FROM user WHERE accountId = :accountId and uid = :uid") LiveData<User> getUserByUid(final long accountId, final String uid); + @Query("SELECT u.displayname FROM user u WHERE accountId = :accountId and uid = :uid") + String getUserNameByUidDirectly(final long accountId, final String uid); + @Query("SELECT u.* FROM user u WHERE accountId = :accountId " + " AND NOT EXISTS (" + " select 1 from joincardwithuser ju" + diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/accountswitcher/AccountSwitcherDialog.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/accountswitcher/AccountSwitcherDialog.java index fc6a93f8f..311857850 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/accountswitcher/AccountSwitcherDialog.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/accountswitcher/AccountSwitcherDialog.java @@ -3,6 +3,7 @@ package it.niedermann.nextcloud.deck.ui.accountswitcher; import android.app.Dialog; import android.net.Uri; import android.os.Bundle; +import android.text.TextUtils; import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; @@ -21,6 +22,7 @@ import it.niedermann.nextcloud.deck.DeckApplication; import it.niedermann.nextcloud.deck.DeckLog; import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.databinding.DialogAccountSwitcherBinding; +import it.niedermann.nextcloud.deck.model.Account; import it.niedermann.nextcloud.deck.ui.MainViewModel; import it.niedermann.nextcloud.deck.ui.manageaccounts.ManageAccountsActivity; @@ -38,12 +40,17 @@ public class AccountSwitcherDialog extends DialogFragment { binding = DialogAccountSwitcherBinding.inflate(requireActivity().getLayoutInflater()); viewModel = new ViewModelProvider(requireActivity()).get(MainViewModel.class); - binding.accountName.setText(viewModel.getCurrentAccount().getUserName()); - binding.accountHost.setText(Uri.parse(viewModel.getCurrentAccount().getUrl()).getHost()); + final Account currentAccount = viewModel.getCurrentAccount(); + binding.accountName.setText( + TextUtils.isEmpty(currentAccount.getUserDisplayName()) + ? currentAccount.getUserName() + : currentAccount.getUserDisplayName() + ); + binding.accountHost.setText(Uri.parse(currentAccount.getUrl()).getHost()); binding.check.setSelected(true); Glide.with(requireContext()) - .load(viewModel.getCurrentAccount().getAvatarUrl(DimensionUtil.INSTANCE.dpToPx(binding.currentAccountItemAvatar.getContext(), R.dimen.avatar_size))) + .load(currentAccount.getAvatarUrl(DimensionUtil.INSTANCE.dpToPx(binding.currentAccountItemAvatar.getContext(), R.dimen.avatar_size))) .placeholder(R.drawable.ic_baseline_account_circle_24) .error(R.drawable.ic_baseline_account_circle_24) .apply(RequestOptions.circleCropTransform()) diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/accountswitcher/AccountSwitcherViewHolder.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/accountswitcher/AccountSwitcherViewHolder.java index a60b6a0ea..345a2fe23 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/accountswitcher/AccountSwitcherViewHolder.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/accountswitcher/AccountSwitcherViewHolder.java @@ -1,6 +1,7 @@ package it.niedermann.nextcloud.deck.ui.accountswitcher; import android.net.Uri; +import android.text.TextUtils; import android.view.View; import androidx.annotation.NonNull; @@ -18,7 +19,7 @@ import it.niedermann.nextcloud.sso.glide.SingleSignOnUrl; public class AccountSwitcherViewHolder extends RecyclerView.ViewHolder { - ItemAccountChooseBinding binding; + private final ItemAccountChooseBinding binding; public AccountSwitcherViewHolder(@NonNull View itemView) { super(itemView); @@ -26,7 +27,11 @@ public class AccountSwitcherViewHolder extends RecyclerView.ViewHolder { } public void bind(@NonNull Account account, @NonNull Consumer<Account> onAccountClick) { - binding.accountName.setText(account.getUserName()); + binding.accountName.setText( + TextUtils.isEmpty(account.getUserDisplayName()) + ? account.getUserName() + : account.getUserDisplayName() + ); binding.accountHost.setText(Uri.parse(account.getUrl()).getHost()); Glide.with(itemView.getContext()) .load(new SingleSignOnUrl(account.getName(), account.getAvatarUrl(DimensionUtil.INSTANCE.dpToPx(binding.accountItemAvatar.getContext(), R.dimen.avatar_size)))) diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/manageaccounts/ManageAccountViewHolder.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/manageaccounts/ManageAccountViewHolder.java index 0892eb437..1eabbd1b6 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/manageaccounts/ManageAccountViewHolder.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/manageaccounts/ManageAccountViewHolder.java @@ -1,6 +1,7 @@ package it.niedermann.nextcloud.deck.ui.manageaccounts; import android.net.Uri; +import android.text.TextUtils; import android.view.View; import androidx.annotation.NonNull; @@ -22,7 +23,7 @@ import static android.view.View.VISIBLE; public class ManageAccountViewHolder extends RecyclerView.ViewHolder { - private ItemAccountChooseBinding binding; + private final ItemAccountChooseBinding binding; public ManageAccountViewHolder(@NonNull View itemView) { super(itemView); @@ -30,7 +31,11 @@ public class ManageAccountViewHolder extends RecyclerView.ViewHolder { } public void bind(@NonNull Account account, @NonNull Consumer<Account> onAccountClick, @Nullable Consumer<Account> onAccountDelete, boolean isCurrentAccount) { - binding.accountName.setText(account.getUserName()); + binding.accountName.setText( + TextUtils.isEmpty(account.getUserDisplayName()) + ? account.getUserName() + : account.getUserDisplayName() + ); binding.accountHost.setText(Uri.parse(account.getUrl()).getHost()); Glide.with(itemView.getContext()) .load(new SingleSignOnUrl(account.getName(), account.getAvatarUrl(DimensionUtil.INSTANCE.dpToPx(binding.accountItemAvatar.getContext(), R.dimen.avatar_size)))) |