Skip to content

Commit

Permalink
Extract avatar loading logic to a helper class
Browse files Browse the repository at this point in the history
  • Loading branch information
renanferrari committed May 28, 2020
1 parent 4316725 commit 508e49d
Show file tree
Hide file tree
Showing 4 changed files with 98 additions and 92 deletions.
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package org.wordpress.android.login;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextUtils;
Expand All @@ -21,24 +20,18 @@
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.widget.Toolbar;

import com.bumptech.glide.Glide;
import com.bumptech.glide.load.DataSource;
import com.bumptech.glide.load.engine.GlideException;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.RequestOptions;
import com.bumptech.glide.request.target.Target;

import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import org.wordpress.android.login.LoginWpcomService.LoginState;
import org.wordpress.android.login.LoginWpcomService.OnCredentialsOK;
import org.wordpress.android.login.util.AvatarHelper;
import org.wordpress.android.login.util.AvatarHelper.AvatarRequestListener;
import org.wordpress.android.login.util.SiteUtils;
import org.wordpress.android.login.widgets.WPLoginInputRow;
import org.wordpress.android.login.widgets.WPLoginInputRow.OnEditorCommitListener;
import org.wordpress.android.util.AppLog;
import org.wordpress.android.util.AppLog.T;
import org.wordpress.android.util.AutoForeground;
import org.wordpress.android.util.GravatarUtils;
import org.wordpress.android.util.NetworkUtils;
import org.wordpress.android.util.ToastUtils;
import org.wordpress.android.util.ToastUtils.Duration;
Expand Down Expand Up @@ -177,28 +170,11 @@ public void onClick(View v) {

emailView.setText(mEmailAddress);

Glide.with(this)
.load(GravatarUtils.gravatarFromEmail(mEmailAddress,
getContext().getResources().getDimensionPixelSize(R.dimen.avatar_sz_login)))
.apply(RequestOptions.circleCropTransform())
.apply(RequestOptions.placeholderOf(R.drawable.ic_gridicons_user_circle_100dp))
.apply(RequestOptions.errorOf(R.drawable.ic_gridicons_user_circle_100dp))
.listener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object o, Target<Drawable> target,
boolean b) {
avatarProgressBar.setVisibility(View.GONE);
return false;
}

@Override
public boolean onResourceReady(Drawable drawable, Object o, Target<Drawable> target,
DataSource dataSource, boolean b) {
avatarProgressBar.setVisibility(View.GONE);
return false;
}
})
.into(avatarView);
AvatarHelper.loadAvatarFromEmail(this, mEmailAddress, avatarView, new AvatarRequestListener() {
@Override public void onRequestFinished() {
avatarProgressBar.setVisibility(View.GONE);
}
});
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.Html;
import android.view.LayoutInflater;
Expand All @@ -23,13 +22,6 @@
import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.Fragment;

import com.bumptech.glide.Glide;
import com.bumptech.glide.load.DataSource;
import com.bumptech.glide.load.engine.GlideException;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.RequestOptions;
import com.bumptech.glide.request.target.Target;

import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import org.wordpress.android.fluxc.Dispatcher;
Expand All @@ -39,8 +31,9 @@
import org.wordpress.android.fluxc.store.AccountStore.AuthEmailPayloadScheme;
import org.wordpress.android.fluxc.store.AccountStore.AuthEmailPayloadSource;
import org.wordpress.android.fluxc.store.AccountStore.OnAuthEmailSent;
import org.wordpress.android.login.util.AvatarHelper;
import org.wordpress.android.login.util.AvatarHelper.AvatarRequestListener;
import org.wordpress.android.util.AppLog;
import org.wordpress.android.util.GravatarUtils;
import org.wordpress.android.util.NetworkUtils;
import org.wordpress.android.util.ToastUtils;

Expand Down Expand Up @@ -172,28 +165,11 @@ public void onClick(View v) {

mRequestMagicLinkButton.setText(getString(R.string.send_verification_email));
} else {
Glide.with(this)
.load(GravatarUtils.gravatarFromEmail(mEmail,
getContext().getResources().getDimensionPixelSize(R.dimen.avatar_sz_login)))
.apply(RequestOptions.circleCropTransform())
.apply(RequestOptions.placeholderOf(R.drawable.ic_gridicons_user_circle_100dp))
.apply(RequestOptions.errorOf(R.drawable.ic_gridicons_user_circle_100dp))
.listener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object o, Target<Drawable> target,
boolean b) {
mAvatarProgressBar.setVisibility(View.GONE);
return false;
}

@Override
public boolean onResourceReady(Drawable drawable, Object o, Target<Drawable> target,
DataSource dataSource, boolean b) {
mAvatarProgressBar.setVisibility(View.GONE);
return false;
}
})
.into(avatarView);
AvatarHelper.loadAvatarFromEmail(this, mEmail, avatarView, new AvatarRequestListener() {
@Override public void onRequestFinished() {
mAvatarProgressBar.setVisibility(View.GONE);
}
});
}

return view;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package org.wordpress.android.login;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
Expand All @@ -18,14 +17,8 @@
import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.Fragment;

import com.bumptech.glide.Glide;
import com.bumptech.glide.load.DataSource;
import com.bumptech.glide.load.engine.GlideException;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.RequestOptions;
import com.bumptech.glide.request.target.Target;

import org.wordpress.android.util.GravatarUtils;
import org.wordpress.android.login.util.AvatarHelper;
import org.wordpress.android.login.util.AvatarHelper.AvatarRequestListener;

import javax.inject.Inject;

Expand Down Expand Up @@ -88,27 +81,11 @@ public void onClick(View v) {
TextView emailView = view.findViewById(R.id.email);
emailView.setText(mEmail);

Glide.with(this)
.load(GravatarUtils.gravatarFromEmail(mEmail,
getContext().getResources().getDimensionPixelSize(R.dimen.avatar_sz_login)))
.apply(RequestOptions.circleCropTransform())
.apply(RequestOptions.placeholderOf(R.drawable.ic_gridicons_user_circle_100dp))
.apply(RequestOptions.errorOf(R.drawable.ic_gridicons_user_circle_100dp))
.listener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object o, Target<Drawable> target, boolean b) {
avatarProgressBar.setVisibility(View.GONE);
return false;
}

@Override
public boolean onResourceReady(Drawable drawable, Object o, Target<Drawable> target,
DataSource dataSource, boolean b) {
avatarProgressBar.setVisibility(View.GONE);
return false;
}
})
.into(avatarView);
AvatarHelper.loadAvatarFromEmail(this, mEmail, avatarView, new AvatarRequestListener() {
@Override public void onRequestFinished() {
avatarProgressBar.setVisibility(View.GONE);
}
});

return view;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
package org.wordpress.android.login.util

import android.graphics.drawable.Drawable
import android.widget.ImageView
import androidx.fragment.app.Fragment
import com.bumptech.glide.Glide
import com.bumptech.glide.load.DataSource
import com.bumptech.glide.load.engine.GlideException
import com.bumptech.glide.request.RequestListener
import com.bumptech.glide.request.RequestOptions
import com.bumptech.glide.request.target.Target
import org.wordpress.android.login.R
import org.wordpress.android.login.util.AvatarHelper.FakeGravatarUtils.DefaultImage.STATUS_404
import org.wordpress.android.util.StringUtils

object AvatarHelper {
@JvmStatic fun loadAvatarFromEmail(
fragment: Fragment,
email: String?,
avatarView: ImageView,
listener: AvatarRequestListener
) {
val avatarSize = fragment.resources.getDimensionPixelSize(R.dimen.avatar_sz_login)
val avatarUrl = FakeGravatarUtils.gravatarFromEmail(email, avatarSize, STATUS_404)
Glide.with(fragment)
.load(avatarUrl)
.apply(RequestOptions.circleCropTransform())
.apply(RequestOptions.placeholderOf(R.drawable.ic_user_circle_no_padding_grey_24dp))
.apply(RequestOptions.errorOf(R.drawable.ic_user_circle_no_padding_grey_24dp))
.listener(object : RequestListener<Drawable?> {
override fun onLoadFailed(
e: GlideException?,
model: Any,
target: Target<Drawable?>,
isFirstResource: Boolean
): Boolean {
listener.onRequestFinished()
return false
}

override fun onResourceReady(
drawable: Drawable?,
model: Any,
target: Target<Drawable?>,
dataSource: DataSource,
isFirstResource: Boolean
): Boolean {
listener.onRequestFinished()
return false
}
})
.into(avatarView)
}

interface AvatarRequestListener {
fun onRequestFinished()
}

// This should be replaced by the GravatarUtils from the WordPress-Utils library, once it allows us to use a
// different DefaultImage (right now it's private)
object FakeGravatarUtils {
fun gravatarFromEmail(email: String?, size: Int, defaultImage: DefaultImage) =
"http://gravatar.com/avatar/${StringUtils.getMd5Hash(email.orEmpty())}?d=$defaultImage&size=$size"

enum class DefaultImage(private val parameterName: String) {
MYSTERY_MAN("mm"),
STATUS_404("404"),
IDENTICON("identicon"),
MONSTER("monsterid"),
WAVATAR("wavatar"),
RETRO("retro"),
BLANK("blank");

override fun toString() = parameterName
}
}
}

0 comments on commit 508e49d

Please sign in to comment.