diff --git a/app/build.gradle b/app/build.gradle
index 7b742bc2a..0c8554aa6 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -116,8 +116,6 @@ dependencies {
implementation 'eu.davidea:flexible-adapter:5.0.0-rc4'
implementation 'eu.davidea:flexible-adapter-ui:1.0.0-b1'
- implementation 'cn.carbs.android:AvatarImageView:1.0.4'
-
implementation 'com.github.bumptech.glide:glide:4.3.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.3.0'
implementation 'com.github.bumptech.glide:okhttp3-integration:4.3.0@aar'
diff --git a/app/src/main/java/com/nextcloud/talk/adapters/items/AdvancedUserItem.java b/app/src/main/java/com/nextcloud/talk/adapters/items/AdvancedUserItem.java
new file mode 100644
index 000000000..e398145e0
--- /dev/null
+++ b/app/src/main/java/com/nextcloud/talk/adapters/items/AdvancedUserItem.java
@@ -0,0 +1,150 @@
+/*
+ * Nextcloud Talk application
+ *
+ * @author Mario Danic
+ * Copyright (C) 2017 Mario Danic (mario@lovelyhq.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
+ * the Free Software Foundation, either version 3 of the License, or
+ * at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+package com.nextcloud.talk.adapters.items;
+
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.bumptech.glide.load.engine.DiskCacheStrategy;
+import com.bumptech.glide.load.model.GlideUrl;
+import com.bumptech.glide.load.model.LazyHeaders;
+import com.bumptech.glide.load.resource.bitmap.CircleCrop;
+import com.bumptech.glide.request.RequestOptions;
+import com.nextcloud.talk.R;
+import com.nextcloud.talk.api.helpers.api.ApiHelper;
+import com.nextcloud.talk.api.models.json.participants.Participant;
+import com.nextcloud.talk.application.NextcloudTalkApplication;
+import com.nextcloud.talk.persistence.entities.UserEntity;
+import com.nextcloud.talk.utils.glide.GlideApp;
+
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.List;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import eu.davidea.flexibleadapter.FlexibleAdapter;
+import eu.davidea.flexibleadapter.items.AbstractFlexibleItem;
+import eu.davidea.flexibleadapter.items.IFilterable;
+import eu.davidea.flexibleadapter.utils.FlexibleUtils;
+import eu.davidea.viewholders.FlexibleViewHolder;
+
+public class AdvancedUserItem extends AbstractFlexibleItem implements IFilterable {
+
+ private Participant participant;
+ private UserEntity userEntity;
+
+ public AdvancedUserItem(Participant participant, UserEntity userEntity) {
+ this.participant = participant;
+ this.userEntity = userEntity;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (o instanceof UserItem) {
+ UserItem inItem = (UserItem) o;
+ return participant.equals(inItem.getModel());
+ }
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ return participant.hashCode();
+ }
+
+ /**
+ * @return the model object
+ */
+
+ public Participant getModel() {
+ return participant;
+ }
+
+ public UserEntity getEntity() {
+ return userEntity;
+ }
+
+ @Override
+ public int getLayoutRes() {
+ return R.layout.rv_item_call;
+ }
+
+ @Override
+ public UserItemViewHolder createViewHolder(View view, FlexibleAdapter adapter) {
+ return new UserItemViewHolder(view, adapter);
+ }
+
+ @Override
+ public void bindViewHolder(FlexibleAdapter adapter, UserItemViewHolder holder, int position, List payloads) {
+ if (adapter.hasSearchText()) {
+ FlexibleUtils.highlightText(holder.contactDisplayName, participant.getName(), adapter.getSearchText());
+ } else {
+ holder.contactDisplayName.setText(participant.getName());
+ }
+
+ holder.serverUrl.setText(userEntity.getBaseUrl());
+
+ GlideUrl glideUrl = new GlideUrl(ApiHelper.getUrlForAvatarWithName(userEntity.getBaseUrl(),
+ participant.getUserId()), new LazyHeaders.Builder()
+ .setHeader("Accept", "image/*")
+ .setHeader("User-Agent", ApiHelper.getUserAgent())
+ .build());
+
+ GlideApp.with(NextcloudTalkApplication.getSharedApplication().getApplicationContext())
+ .asBitmap()
+ .skipMemoryCache(true)
+ .diskCacheStrategy(DiskCacheStrategy.NONE)
+ .load(glideUrl)
+ .centerInside()
+ .apply(RequestOptions.bitmapTransform(new CircleCrop()))
+ .into(holder.avatarImageView)
+ ;
+ }
+
+ @Override
+ public boolean filter(String constraint) {
+ return participant.getName() != null &&
+ StringUtils.containsIgnoreCase(participant.getName().trim(), constraint);
+ }
+
+
+ static class UserItemViewHolder extends FlexibleViewHolder {
+
+ @BindView(R.id.name_text)
+ public TextView contactDisplayName;
+ @BindView(R.id.secondary_text)
+ public TextView serverUrl;
+ @BindView(R.id.avatar_image)
+ public ImageView avatarImageView;
+
+ /**
+ * Default constructor.
+ */
+ UserItemViewHolder(View view, FlexibleAdapter adapter) {
+ super(view, adapter);
+ ButterKnife.bind(this, view);
+ }
+ }
+
+
+}
diff --git a/app/src/main/java/com/nextcloud/talk/adapters/items/CallItem.java b/app/src/main/java/com/nextcloud/talk/adapters/items/CallItem.java
index 015a442d5..d2040bc9e 100644
--- a/app/src/main/java/com/nextcloud/talk/adapters/items/CallItem.java
+++ b/app/src/main/java/com/nextcloud/talk/adapters/items/CallItem.java
@@ -24,18 +24,20 @@ import android.text.TextUtils;
import android.text.format.DateUtils;
import android.view.View;
import android.widget.ImageButton;
+import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.load.model.GlideUrl;
import com.bumptech.glide.load.model.LazyHeaders;
+import com.bumptech.glide.load.resource.bitmap.CircleCrop;
+import com.bumptech.glide.request.RequestOptions;
import com.nextcloud.talk.R;
import com.nextcloud.talk.api.helpers.api.ApiHelper;
import com.nextcloud.talk.api.models.json.rooms.Room;
import com.nextcloud.talk.application.NextcloudTalkApplication;
import com.nextcloud.talk.events.MoreMenuClickEvent;
import com.nextcloud.talk.persistence.entities.UserEntity;
-import com.nextcloud.talk.utils.ColorUtils;
import com.nextcloud.talk.utils.glide.GlideApp;
import org.apache.commons.lang3.StringUtils;
@@ -45,7 +47,6 @@ import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
-import cn.carbs.android.avatarimageview.library.AvatarImageView;
import eu.davidea.flexibleadapter.FlexibleAdapter;
import eu.davidea.flexibleadapter.items.AbstractFlexibleItem;
import eu.davidea.flexibleadapter.items.IFilterable;
@@ -119,9 +120,6 @@ public class CallItem extends AbstractFlexibleItem
holder.avatarImageView.setVisibility(View.VISIBLE);
if (!TextUtils.isEmpty(room.getName())) {
- holder.avatarImageView.setTextAndColorSeed(String.valueOf(room.getName().
- toUpperCase().charAt(0)), ColorUtils.colorSeed);
-
GlideUrl glideUrl = new GlideUrl(ApiHelper.getUrlForAvatarWithName(userEntity.getBaseUrl(),
room.getName()), new LazyHeaders.Builder()
.setHeader("Accept", "image/*")
@@ -133,8 +131,8 @@ public class CallItem extends AbstractFlexibleItem
.skipMemoryCache(true)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.load(glideUrl)
- .circleCrop()
.centerInside()
+ .apply(RequestOptions.bitmapTransform(new CircleCrop()))
.into(holder.avatarImageView);
} else {
@@ -168,10 +166,10 @@ public class CallItem extends AbstractFlexibleItem
@BindView(R.id.name_text)
public TextView roomDisplayName;
- @BindView(R.id.timestamp_text)
+ @BindView(R.id.secondary_text)
public TextView roomLastPing;
@BindView(R.id.avatar_image)
- public AvatarImageView avatarImageView;
+ public ImageView avatarImageView;
@BindView(R.id.more_menu)
public ImageButton moreMenuButton;
diff --git a/app/src/main/java/com/nextcloud/talk/adapters/items/UserItem.java b/app/src/main/java/com/nextcloud/talk/adapters/items/UserItem.java
index ada1ae54e..2edb14182 100644
--- a/app/src/main/java/com/nextcloud/talk/adapters/items/UserItem.java
+++ b/app/src/main/java/com/nextcloud/talk/adapters/items/UserItem.java
@@ -21,17 +21,19 @@
package com.nextcloud.talk.adapters.items;
import android.view.View;
+import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.load.model.GlideUrl;
import com.bumptech.glide.load.model.LazyHeaders;
+import com.bumptech.glide.load.resource.bitmap.CircleCrop;
+import com.bumptech.glide.request.RequestOptions;
import com.nextcloud.talk.R;
import com.nextcloud.talk.api.helpers.api.ApiHelper;
import com.nextcloud.talk.api.models.json.participants.Participant;
import com.nextcloud.talk.application.NextcloudTalkApplication;
import com.nextcloud.talk.persistence.entities.UserEntity;
-import com.nextcloud.talk.utils.ColorUtils;
import com.nextcloud.talk.utils.glide.GlideApp;
import org.apache.commons.lang3.StringUtils;
@@ -40,7 +42,6 @@ import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
-import cn.carbs.android.avatarimageview.library.AvatarImageView;
import eu.davidea.flexibleadapter.FlexibleAdapter;
import eu.davidea.flexibleadapter.items.AbstractFlexibleItem;
import eu.davidea.flexibleadapter.items.IFilterable;
@@ -101,10 +102,6 @@ public class UserItem extends AbstractFlexibleItem
holder.contactDisplayName.setText(participant.getName());
}
- // Awful hack
- holder.avatarImageView.setTextAndColorSeed(String.valueOf(participant.getName().
- toUpperCase().charAt(0)), ColorUtils.colorSeed);
-
GlideUrl glideUrl = new GlideUrl(ApiHelper.getUrlForAvatarWithName(userEntity.getBaseUrl(),
participant.getUserId()), new LazyHeaders.Builder()
.setHeader("Accept", "image/*")
@@ -116,8 +113,8 @@ public class UserItem extends AbstractFlexibleItem
.skipMemoryCache(true)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.load(glideUrl)
- .circleCrop()
.centerInside()
+ .apply(RequestOptions.bitmapTransform(new CircleCrop()))
.into(holder.avatarImageView);
}
@@ -133,7 +130,7 @@ public class UserItem extends AbstractFlexibleItem
@BindView(R.id.name_text)
public TextView contactDisplayName;
@BindView(R.id.avatar_image)
- public AvatarImageView avatarImageView;
+ public ImageView avatarImageView;
/**
* Default constructor.
diff --git a/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.java b/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.java
index d2db4d1f2..252a5e460 100644
--- a/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.java
+++ b/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.java
@@ -30,12 +30,15 @@ import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.ImageView;
import android.widget.TextView;
import com.bluelinelabs.conductor.RouterTransaction;
import com.bluelinelabs.conductor.changehandler.VerticalChangeHandler;
import com.bumptech.glide.load.model.GlideUrl;
import com.bumptech.glide.load.model.LazyHeaders;
+import com.bumptech.glide.load.resource.bitmap.CircleCrop;
+import com.bumptech.glide.request.RequestOptions;
import com.evernote.android.job.JobRequest;
import com.nextcloud.talk.BuildConfig;
import com.nextcloud.talk.R;
@@ -45,7 +48,6 @@ import com.nextcloud.talk.application.NextcloudTalkApplication;
import com.nextcloud.talk.controllers.base.BaseController;
import com.nextcloud.talk.jobs.AccountRemovalJob;
import com.nextcloud.talk.persistence.entities.UserEntity;
-import com.nextcloud.talk.utils.ColorUtils;
import com.nextcloud.talk.utils.ErrorMessageHolder;
import com.nextcloud.talk.utils.database.user.UserUtils;
import com.nextcloud.talk.utils.glide.GlideApp;
@@ -70,7 +72,6 @@ import javax.inject.Inject;
import autodagger.AutoInjector;
import butterknife.BindView;
-import cn.carbs.android.avatarimageview.library.AvatarImageView;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
@@ -102,7 +103,7 @@ public class SettingsController extends BaseController {
MaterialStandardPreference versionInfo;
@BindView(R.id.avatar_image)
- AvatarImageView avatarImageView;
+ ImageView avatarImageView;
@BindView(R.id.display_name_text)
TextView displayNameTextView;
@@ -264,10 +265,7 @@ public class SettingsController extends BaseController {
reauthorizeButton.setEnabled(true);
});
- // Awful hack
if (userEntity.getDisplayName() != null) {
- avatarImageView.setTextAndColorSeed(String.valueOf(userEntity.getDisplayName().
- toUpperCase().charAt(0)), ColorUtils.colorSeed);
displayNameTextView.setText(userEntity.getDisplayName());
}
@@ -279,8 +277,8 @@ public class SettingsController extends BaseController {
GlideApp.with(NextcloudTalkApplication.getSharedApplication().getApplicationContext())
.load(glideUrl)
- .circleCrop()
.centerInside()
+ .apply(RequestOptions.bitmapTransform(new CircleCrop()))
.into(avatarImageView);
profileQueryDisposable = ncApi.getUserProfile(ApiHelper.getCredentials(userEntity.getUsername(),
diff --git a/app/src/main/java/com/nextcloud/talk/controllers/SwitchAccountController.java b/app/src/main/java/com/nextcloud/talk/controllers/SwitchAccountController.java
index 532a881ed..7bd417e73 100644
--- a/app/src/main/java/com/nextcloud/talk/controllers/SwitchAccountController.java
+++ b/app/src/main/java/com/nextcloud/talk/controllers/SwitchAccountController.java
@@ -30,7 +30,7 @@ import android.view.View;
import android.view.ViewGroup;
import com.nextcloud.talk.R;
-import com.nextcloud.talk.adapters.items.UserItem;
+import com.nextcloud.talk.adapters.items.AdvancedUserItem;
import com.nextcloud.talk.api.models.json.participants.Participant;
import com.nextcloud.talk.application.NextcloudTalkApplication;
import com.nextcloud.talk.controllers.base.BaseController;
@@ -47,6 +47,7 @@ import autodagger.AutoInjector;
import butterknife.BindView;
import eu.davidea.flexibleadapter.FlexibleAdapter;
import eu.davidea.flexibleadapter.common.SmoothScrollLinearLayoutManager;
+import eu.davidea.flexibleadapter.items.AbstractFlexibleItem;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
@@ -64,15 +65,15 @@ public class SwitchAccountController extends BaseController {
@BindView(R.id.swipe_refresh_layout)
SwipeRefreshLayout swipeRefreshLayout;
- private FlexibleAdapter adapter;
- private List userItems = new ArrayList<>();
+ private FlexibleAdapter adapter;
+ private List userItems = new ArrayList<>();
private FlexibleAdapter.OnItemClickListener onItemClickListener =
new FlexibleAdapter.OnItemClickListener() {
@Override
public boolean onItemClick(int position) {
if (userItems.size() > position) {
- UserEntity userEntity = userItems.get(position).getEntity();
+ UserEntity userEntity = ((AdvancedUserItem) userItems.get(position)).getEntity();
userUtils.createOrUpdateUser(userEntity.getUsername(),
userEntity.getToken(), userEntity.getBaseUrl(), null,
null, true)
@@ -128,7 +129,7 @@ public class SwitchAccountController extends BaseController {
participant = new Participant();
participant.setName(userEntity.getDisplayName());
participant.setUserId(userEntity.getUsername());
- userItems.add(new UserItem(participant, userEntity));
+ userItems.add(new AdvancedUserItem(participant, userEntity));
}
}
diff --git a/app/src/main/res/layout/controller_settings.xml b/app/src/main/res/layout/controller_settings.xml
index 970e2e481..4a94939cf 100644
--- a/app/src/main/res/layout/controller_settings.xml
+++ b/app/src/main/res/layout/controller_settings.xml
@@ -47,15 +47,11 @@
android:layout_width="match_parent"
android:layout_height="wrap_content">
-
+ android:layout_centerHorizontal="true"/>
-
+ android:layout_marginStart="@dimen/activity_horizontal_margin"/>
-
+ android:layout_marginStart="@dimen/activity_horizontal_margin"/>