account: refactor getting account name
Change-Id: I158c37b2765ffb77bcb1ef41a1386bd0ec7a5e87
diff --git a/ring-android/app/src/main/java/cx/ring/account/JamiAccountSummaryFragment.java b/ring-android/app/src/main/java/cx/ring/account/JamiAccountSummaryFragment.java
index a7aa444..b8837f8 100644
--- a/ring-android/app/src/main/java/cx/ring/account/JamiAccountSummaryFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/account/JamiAccountSummaryFragment.java
@@ -27,7 +27,6 @@
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
-import android.graphics.Typeface;
import android.net.Uri;
import android.os.Bundle;
@@ -38,26 +37,14 @@
import androidx.annotation.Nullable;
import android.provider.MediaStore;
-import android.text.Editable;
-import android.text.Layout;
-import android.text.Spannable;
-import android.text.SpannableString;
import android.text.TextUtils;
-import android.text.TextWatcher;
-import android.text.style.AlignmentSpan;
-import android.text.style.RelativeSizeSpan;
-import android.text.style.StyleSpan;
import android.util.Log;
-import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
-import android.view.inputmethod.EditorInfo;
-import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
-import android.widget.TextView;
import android.widget.Toast;
import java.io.File;
@@ -66,7 +53,6 @@
import javax.inject.Inject;
import androidx.core.content.FileProvider;
-import androidx.core.util.Pair;
import cx.ring.R;
import cx.ring.application.JamiApplication;
@@ -188,13 +174,10 @@
mProfileDisposable.clear();
mProfileDisposable.add(AvatarDrawable.load(context, account)
- .map(avatar -> new Pair<>(account, avatar))
.observeOn(AndroidSchedulers.mainThread())
- .subscribe(d -> {
- mBinding.userPhoto.setImageDrawable(d.second);
- if (!mBinding.username.getText().equals(getAccountAlias(d.first))) {
- mBinding.username.setText(getAccountAlias(d.first));
- }
+ .subscribe(avatar -> {
+ mBinding.userPhoto.setImageDrawable(avatar);
+ mBinding.username.setText(account.getLoadedProfile().blockingGet().first);
}, e -> Log.e(TAG, "Error loading avatar", e)));
}
@@ -271,7 +254,7 @@
mAccountId = account.getAccountID();
mBestName = account.getRegisteredName();
if (mBestName.isEmpty()) {
- mBestName = account.getAlias();
+ mBestName = account.getDisplayUsername();
if (mBestName.isEmpty()) {
mBestName = account.getUsername();
}
@@ -635,40 +618,6 @@
.subscribe(avatar -> mProfilePhoto.setImageDrawable(avatar), e-> Log.e(TAG, "Error loading image", e)));
}
- private String getAccountAlias(Account account) {
- if (account == null) {
- cx.ring.utils.Log.e(TAG, "Not able to get account alias");
- return null;
- }
- String alias = getAlias(account);
- return (alias == null) ? account.getAlias() : alias;
- }
-
- private String getAlias(Account account) {
- if (account == null) {
- cx.ring.utils.Log.e(TAG, "Not able to get alias");
- return null;
- }
- VCard vcard = account.getProfile();
- if (vcard != null) {
- FormattedName name = vcard.getFormattedName();
- if (name != null) {
- String name_value = name.getValue();
- if (name_value != null && !name_value.isEmpty()) {
- return name_value;
- }
- }
- }
- return null;
- }
-
- private String getUri(Account account, CharSequence defaultNameSip) {
- if (account.isIP2IP()) {
- return defaultNameSip.toString();
- }
- return account.getDisplayUri();
- }
-
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
diff --git a/ring-android/app/src/main/java/cx/ring/client/ToolbarSpinnerAdapter.java b/ring-android/app/src/main/java/cx/ring/client/AccountSpinnerAdapter.java
similarity index 76%
rename from ring-android/app/src/main/java/cx/ring/client/ToolbarSpinnerAdapter.java
rename to ring-android/app/src/main/java/cx/ring/client/AccountSpinnerAdapter.java
index 9dccb11..148b7e4 100644
--- a/ring-android/app/src/main/java/cx/ring/client/ToolbarSpinnerAdapter.java
+++ b/ring-android/app/src/main/java/cx/ring/client/AccountSpinnerAdapter.java
@@ -35,21 +35,19 @@
import cx.ring.databinding.ItemToolbarSpinnerBinding;
import cx.ring.model.Account;
import cx.ring.views.AvatarDrawable;
-import ezvcard.VCard;
-import ezvcard.property.FormattedName;
import io.reactivex.android.schedulers.AndroidSchedulers;
-import io.reactivex.disposables.Disposable;
+import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.schedulers.Schedulers;
-public class ToolbarSpinnerAdapter extends ArrayAdapter<Account> {
- private static final String TAG = ToolbarSpinnerAdapter.class.getSimpleName();
+public class AccountSpinnerAdapter extends ArrayAdapter<Account> {
+ private static final String TAG = AccountSpinnerAdapter.class.getSimpleName();
public static final int TYPE_ACCOUNT = 0;
public static final int TYPE_CREATE_JAMI = 1;
public static final int TYPE_CREATE_SIP = 2;
private final LayoutInflater mInflater;
private final int logoSize;
- public ToolbarSpinnerAdapter(@NonNull Context context, List<Account> accounts){
+ public AccountSpinnerAdapter(@NonNull Context context, List<Account> accounts){
super(context, R.layout.item_toolbar_spinner, accounts);
mInflater = LayoutInflater.from(context);
logoSize = context.getResources().getDimensionPixelSize(R.dimen.list_medium_icon_size);
@@ -68,9 +66,7 @@
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
- if (holder.loader != null) {
- holder.loader.dispose();
- }
+ holder.loader.clear();
}
holder.binding.logo.setVisibility(View.GONE);
@@ -80,7 +76,9 @@
holder.binding.title.setLayoutParams(params);
if (type == TYPE_ACCOUNT) {
Account account = getItem(position);
- holder.binding.title.setText(getAccountAlias(account));
+ holder.loader.add(account.getAccountAlias()
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(alias -> holder.binding.title.setText(alias)));
}
return convertView;
@@ -98,28 +96,36 @@
rowView.setTag(holder);
} else {
holder = (ViewHolder) rowView.getTag();
- if (holder.loader != null) {
- holder.loader.dispose();
- }
+ holder.loader.clear();
}
holder.binding.logo.setVisibility(View.VISIBLE);
ViewGroup.LayoutParams logoParam = holder.binding.logo.getLayoutParams();
if (type == TYPE_ACCOUNT) {
Account account = getItem(position);
- holder.binding.subtitle.setVisibility(View.VISIBLE);
- holder.binding.title.setText(getAccountAlias(account));
- holder.binding.subtitle.setText(getUri(account, rowView.getContext().getString(R.string.account_type_ip2ip)));
+ CharSequence ip2ipString = rowView.getContext().getString(R.string.account_type_ip2ip);
+ holder.loader.add(account.getAccountAlias()
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(alias -> {
+ String subtitle = getUri(account, ip2ipString);
+ holder.binding.title.setText(alias);
+ if (alias.equals(subtitle)) {
+ holder.binding.subtitle.setVisibility(View.GONE);
+ } else {
+ holder.binding.subtitle.setVisibility(View.VISIBLE);
+ holder.binding.subtitle.setText(subtitle);
+ }
+ }));
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) holder.binding.title.getLayoutParams();
params.removeRule(RelativeLayout.CENTER_VERTICAL);
holder.binding.title.setLayoutParams(params);
logoParam.width = logoSize;
logoParam.height = logoSize;
holder.binding.logo.setLayoutParams(logoParam);
- holder.loader = AvatarDrawable.load(getContext(), account)
+ holder.loader.add(AvatarDrawable.load(getContext(), account)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
- .subscribe(avatar -> holder.binding.logo.setImageDrawable(avatar), e -> Log.e(TAG, "Error loading avatar", e));
+ .subscribe(avatar -> holder.binding.logo.setImageDrawable(avatar), e -> Log.e(TAG, "Error loading avatar", e)));
} else {
if (type == TYPE_CREATE_JAMI)
holder.binding.title.setText(R.string.add_ring_account_title);
@@ -157,34 +163,7 @@
private static class ViewHolder {
ItemToolbarSpinnerBinding binding;
- Disposable loader;
- }
-
- private String getAccountAlias(Account account) {
- if (account == null) {
- Log.e(TAG, "Not able to get account alias");
- return null;
- }
- String alias = getAlias(account);
- return (alias == null) ? account.getAlias() : alias;
- }
-
- private String getAlias(Account account) {
- if (account == null) {
- Log.e(TAG, "Not able to get alias");
- return null;
- }
- VCard vcard = account.getProfile();
- if (vcard != null) {
- FormattedName name = vcard.getFormattedName();
- if (name != null) {
- String name_value = name.getValue();
- if (name_value != null && !name_value.isEmpty()) {
- return name_value;
- }
- }
- }
- return null;
+ final CompositeDisposable loader = new CompositeDisposable();
}
private String getUri(Account account, CharSequence defaultNameSip) {
diff --git a/ring-android/app/src/main/java/cx/ring/client/HomeActivity.java b/ring-android/app/src/main/java/cx/ring/client/HomeActivity.java
index f4d9ac2..411aba7 100644
--- a/ring-android/app/src/main/java/cx/ring/client/HomeActivity.java
+++ b/ring-android/app/src/main/java/cx/ring/client/HomeActivity.java
@@ -112,7 +112,7 @@
protected Fragment fContent;
protected ConversationFragment fConversation;
- private ToolbarSpinnerAdapter mAccountAdapter;
+ private AccountSpinnerAdapter mAccountAdapter;
private BackHandlerInterface mAccountFragmentBackHandlerInterface;
private ViewOutlineProvider mOutlineProvider;
@@ -317,7 +317,7 @@
.observeOn(AndroidSchedulers.mainThread())
.subscribe(accounts -> {
if (mAccountAdapter == null) {
- mAccountAdapter = new ToolbarSpinnerAdapter(HomeActivity.this, accounts);
+ mAccountAdapter = new AccountSpinnerAdapter(HomeActivity.this, accounts);
mAccountAdapter.setNotifyOnChange(false);
binding.spinnerToolbar.setAdapter(mAccountAdapter);
} else {
@@ -561,11 +561,11 @@
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
int type = mAccountAdapter.getItemViewType(position);
- if (type == ToolbarSpinnerAdapter.TYPE_ACCOUNT) {
+ if (type == AccountSpinnerAdapter.TYPE_ACCOUNT) {
mAccountService.setCurrentAccount(mAccountAdapter.getItem(position));
} else {
Intent intent = new Intent(HomeActivity.this, AccountWizardActivity.class);
- if (type == ToolbarSpinnerAdapter.TYPE_CREATE_SIP) {
+ if (type == AccountSpinnerAdapter.TYPE_CREATE_SIP) {
intent.setAction(AccountConfig.ACCOUNT_TYPE_SIP);
}
startActivity(intent);
diff --git a/ring-android/app/src/main/java/cx/ring/services/VCardServiceImpl.java b/ring-android/app/src/main/java/cx/ring/services/VCardServiceImpl.java
index 944dfd9..c374624 100644
--- a/ring-android/app/src/main/java/cx/ring/services/VCardServiceImpl.java
+++ b/ring-android/app/src/main/java/cx/ring/services/VCardServiceImpl.java
@@ -45,7 +45,7 @@
public class VCardServiceImpl extends VCardService {
- private Context mContext;
+ private final Context mContext;
public VCardServiceImpl(Context context) {
this.mContext = context;
diff --git a/ring-android/app/src/main/java/cx/ring/tv/account/TVProfileEditingFragment.java b/ring-android/app/src/main/java/cx/ring/tv/account/TVProfileEditingFragment.java
index 79216d7..5edbd10 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/account/TVProfileEditingFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/account/TVProfileEditingFragment.java
@@ -123,7 +123,7 @@
String title = getString(R.string.profile);
String breadcrumb = "";
String description = getString(R.string.profile_message_warning);
- Drawable icon = getResources().getDrawable(R.drawable.ic_contact_picture_fallback);
+ Drawable icon = requireContext().getDrawable(R.drawable.ic_contact_picture_fallback);
return new GuidanceStylist.Guidance(title, description, breadcrumb, icon);
}
@@ -169,7 +169,7 @@
return;
}
- String alias = presenter.getAlias(account);
+ String alias = viewModel.getAlias();
GuidedAction action = actions.isEmpty() ? null : actions.get(0);
if (action != null && action.getId() == USER_NAME) {
if (TextUtils.isEmpty(alias)) {
diff --git a/ring-android/app/src/main/java/cx/ring/tv/main/MainPresenter.java b/ring-android/app/src/main/java/cx/ring/tv/main/MainPresenter.java
index 744499a..357a4a6 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/main/MainPresenter.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/main/MainPresenter.java
@@ -189,7 +189,7 @@
.observeOn(mUiScheduler)
.subscribe(
accounts -> getView().displayAccountInfos(
- new HomeNavigationViewModel(accounts.isEmpty() ? null : accounts.get(0), accounts)),
+ new HomeNavigationViewModel(accounts.isEmpty() ? null : accounts.get(0), null)),
e-> Log.d(TAG, "reloadAccountInfos getProfileAccountList onError", e)));
mCompositeDisposable.add(mAccountService.getObservableAccounts()
.observeOn(mUiScheduler)
@@ -197,7 +197,7 @@
MainView v = getView();
if (v != null)
v.updateModel(account);
- }, e -> cx.ring.utils.Log.e(TAG, "Error loading account list !", e)));
+ }, e -> Log.e(TAG, "Error loading account list !", e)));
}
public void onExportClicked() {
diff --git a/ring-android/libringclient/src/main/java/cx/ring/account/JamiAccountSummaryPresenter.java b/ring-android/libringclient/src/main/java/cx/ring/account/JamiAccountSummaryPresenter.java
index ef46ece..3e31037 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/account/JamiAccountSummaryPresenter.java
+++ b/ring-android/libringclient/src/main/java/cx/ring/account/JamiAccountSummaryPresenter.java
@@ -226,32 +226,4 @@
}
}
- public String getAlias(Account account) {
- if (account == null) {
- Log.e(TAG, "Not able to get alias");
- return null;
- }
- VCard vcard = account.getProfile();
- if (vcard != null) {
- FormattedName name = vcard.getFormattedName();
- if (name != null) {
- String name_value = name.getValue();
- if (name_value != null && !name_value.isEmpty()) {
- return name_value;
- }
- }
- }
- return null;
- }
-
- public String getAccountAlias(Account account) {
- if (account == null) {
- cx.ring.utils.Log.e(TAG, "Not able to get account alias");
- return null;
- }
- String alias = getAlias(account);
- return (alias == null) ? account.getAlias() : alias;
- }
-
-
}
diff --git a/ring-android/libringclient/src/main/java/cx/ring/model/Account.java b/ring-android/libringclient/src/main/java/cx/ring/model/Account.java
index 45a5d83..b88e337 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/model/Account.java
+++ b/ring-android/libringclient/src/main/java/cx/ring/model/Account.java
@@ -988,9 +988,26 @@
}
public Single<String> getAccountAlias() {
- if (mLoadedProfile == null)
- return Single.just(getAlias());
- return mLoadedProfile.map(p -> StringUtils.isEmpty(p.first) ? getAlias() : p.first);
+ if (isJami()) {
+ if (mLoadedProfile == null)
+ return Single.just(getJamiAlias());
+ return mLoadedProfile.map(p -> StringUtils.isEmpty(p.first) ? getJamiAlias() : p.first);
+ } else {
+ if (mLoadedProfile == null)
+ return Single.just(getAlias());
+ return mLoadedProfile.map(p -> StringUtils.isEmpty(p.first) ? getAlias() : p.first);
+ }
+ }
+
+ /**
+ * Registered name, fallback to Alias
+ */
+ private String getJamiAlias() {
+ String registeredName = getRegisteredName();
+ if (StringUtils.isEmpty(registeredName))
+ return getAlias();
+ else
+ return registeredName;
}
public void setProfile(VCard vcard) {
diff --git a/ring-android/libringclient/src/main/java/cx/ring/navigation/HomeNavigationPresenter.java b/ring-android/libringclient/src/main/java/cx/ring/navigation/HomeNavigationPresenter.java
index d8deffe..8746d13 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/navigation/HomeNavigationPresenter.java
+++ b/ring-android/libringclient/src/main/java/cx/ring/navigation/HomeNavigationPresenter.java
@@ -33,9 +33,8 @@
import cx.ring.services.HardwareService;
import cx.ring.utils.Log;
import cx.ring.utils.StringUtils;
+import cx.ring.utils.Tuple;
import cx.ring.utils.VCardUtils;
-import ezvcard.VCard;
-import ezvcard.property.FormattedName;
import ezvcard.property.Photo;
import ezvcard.property.RawProperty;
import ezvcard.property.Uid;
@@ -68,11 +67,13 @@
public void bindView(HomeNavigationView view) {
super.bindView(view);
mCompositeDisposable.add(mAccountService.getProfileAccountList()
+ .filter(accounts -> !accounts.isEmpty())
+ .switchMapSingle(accounts -> accounts.get(0).getAccountAlias().map(alias -> new Tuple<>(accounts.get(0), alias)))
.observeOn(mUiScheduler)
- .subscribe(accounts -> {
+ .subscribe(alias -> {
HomeNavigationView v = getView();
if (v != null)
- v.showViewModel(new HomeNavigationViewModel(accounts.isEmpty() ? null : accounts.get(0), accounts));
+ v.showViewModel(new HomeNavigationViewModel(alias.first, alias.second));
}, e -> Log.e(TAG, "Error loading account list !", e)));
mCompositeDisposable.add(mAccountService.getObservableAccounts()
.observeOn(mUiScheduler)
@@ -143,10 +144,8 @@
if (!StringUtils.isEmpty(username)) {
vcard.setFormattedName(username);
}
- if (photo != null) {
- vcard.removeProperties(Photo.class);
- vcard.addPhoto(pic);
- }
+ vcard.removeProperties(Photo.class);
+ vcard.addPhoto(pic);
vcard.removeProperties(RawProperty.class);
return vcard;
})
@@ -158,33 +157,6 @@
}, e -> Log.e(TAG, "Error saving vCard !", e)));
}
- public String getAlias(Account account) {
- if (account == null) {
- Log.e(TAG, "Not able to get alias");
- return null;
- }
- VCard vcard = account.getProfile();
- if (vcard != null) {
- FormattedName name = vcard.getFormattedName();
- if (name != null) {
- String name_value = name.getValue();
- if (name_value != null && !name_value.isEmpty()) {
- return name_value;
- }
- }
- }
- return null;
- }
-
- public String getAccountAlias(Account account) {
- if (account == null) {
- Log.e(TAG, "Not able to get account alias");
- return null;
- }
- String alias = getAlias(account);
- return (alias == null) ? account.getAlias() : alias;
- }
-
public String getUri(Account account, CharSequence defaultNameSip) {
if (account.isIP2IP()) {
return defaultNameSip.toString();
diff --git a/ring-android/libringclient/src/main/java/cx/ring/navigation/HomeNavigationViewModel.java b/ring-android/libringclient/src/main/java/cx/ring/navigation/HomeNavigationViewModel.java
index 30a7c44..69c5b55 100644
--- a/ring-android/libringclient/src/main/java/cx/ring/navigation/HomeNavigationViewModel.java
+++ b/ring-android/libringclient/src/main/java/cx/ring/navigation/HomeNavigationViewModel.java
@@ -1,7 +1,8 @@
/*
- * Copyright (C) 2004-2019 Savoir-faire Linux Inc.
+ * Copyright (C) 2004-2020 Savoir-faire Linux Inc.
*
* Author: Aline Bonnet <aline.bonnet@savoirfairelinux.com>
+ * Author: Adrien Béraud <adrien.beraud@savoirfairelinux.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -20,24 +21,22 @@
package cx.ring.navigation;
-import java.util.List;
-
import cx.ring.model.Account;
public class HomeNavigationViewModel {
final private Account mAccount;
- final private List<Account> mAccounts;
+ final private String mAlias;
- public HomeNavigationViewModel(Account account, List<Account> accounts) {
+ public HomeNavigationViewModel(Account account, String alias) {
mAccount = account;
- mAccounts = accounts;
+ mAlias = alias;
}
public Account getAccount() {
return mAccount;
}
- public List<Account> getAccounts() {
- return mAccounts;
+ public String getAlias() {
+ return mAlias;
}
}