package org.gdg.frisbee.android.common;
import android.support.annotation.Nullable;
import android.text.TextUtils;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
import com.squareup.picasso.Picasso;
import org.gdg.frisbee.android.R;
import org.gdg.frisbee.android.api.Callback;
import org.gdg.frisbee.android.api.PlusApi;
import org.gdg.frisbee.android.api.model.plus.Cover;
import org.gdg.frisbee.android.api.model.plus.Person;
import org.gdg.frisbee.android.app.App;
import org.gdg.frisbee.android.cache.ModelCache;
import org.gdg.frisbee.android.view.CircleTransform;
import org.joda.time.DateTime;
import butterknife.BindView;
import butterknife.ButterKnife;
class DrawerHeaderDisplayer {
private final PlusApi plusApi;
private final ModelCache modelCache;
private final Picasso picasso;
@BindView(R.id.navdrawer_image) ImageView mDrawerImage;
@BindView(R.id.navdrawer_user_picture) ImageView mDrawerUserPicture;
@BindView(R.id.navdrawer_user_name) TextView mDrawerUserName;
private String mStoredHomeChapterId;
DrawerHeaderDisplayer(View headerView, View.OnClickListener onClickListener) {
ButterKnife.bind(this, headerView);
headerView.setOnClickListener(onClickListener);
App app = App.from(headerView.getContext());
plusApi = app.getPlusApi();
modelCache = app.getModelCache();
picasso = app.getPicasso();
}
void updateUserDetails(@Nullable GoogleSignInAccount account) {
if (account == null) {
mDrawerUserPicture.setImageDrawable(null);
mDrawerUserName.setText(R.string.login_register);
return;
}
if (account.getPhotoUrl() != null) {
picasso.load(account.getPhotoUrl())
.transform(new CircleTransform())
.into(mDrawerUserPicture);
}
String displayName = account.getDisplayName();
if (!TextUtils.isEmpty(displayName)) {
mDrawerUserName.setText(displayName);
}
}
void maybeUpdateChapterImage(String newHomeChapterId) {
if (isHomeChapterOutdated(newHomeChapterId)) {
updateChapterImage(newHomeChapterId);
}
}
private boolean isHomeChapterOutdated(final String currentHomeChapterId) {
return currentHomeChapterId != null
&& (mStoredHomeChapterId == null || !mStoredHomeChapterId.equals(currentHomeChapterId));
}
private void updateChapterImage(final String homeChapterId) {
modelCache.getAsync(ModelCache.KEY_PERSON + homeChapterId,
true, new ModelCache.CacheListener() {
@Override
public void onGet(Object person) {
mStoredHomeChapterId = homeChapterId;
updateChapterCover(((Person) person).getCover());
}
@Override
public void onNotFound(final String key) {
plusApi.getPerson(homeChapterId).enqueue(new Callback<Person>() {
@Override
public void onSuccess(Person person) {
if (person != null) {
modelCache.putAsync(key, person, DateTime.now().plusDays(1));
mStoredHomeChapterId = homeChapterId;
updateChapterCover(person.getCover());
}
}
});
}
});
}
private void updateChapterCover(@Nullable Cover cover) {
if (cover != null) {
picasso.load(cover.getCoverPhoto().getUrl())
.into(mDrawerImage);
}
}
}