package com.wangdaye.mysplash.me.view.widget; import android.annotation.SuppressLint; import android.content.Context; import android.support.annotation.Nullable; import android.support.transition.TransitionManager; import android.text.TextUtils; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.ViewParent; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; import com.github.rahatarmanahmed.cpv.CircularProgressView; import com.wangdaye.mysplash.Mysplash; import com.wangdaye.mysplash.R; import com.wangdaye.mysplash.common.data.entity.unsplash.Me; import com.wangdaye.mysplash.common.ui.widget.nestedScrollView.NestedScrollAppBarLayout; import com.wangdaye.mysplash.common.ui.widget.rippleButton.RippleButton; import com.wangdaye.mysplash.common.utils.DisplayUtils; import com.wangdaye.mysplash.common.utils.helper.IntentHelper; import com.wangdaye.mysplash.common.utils.manager.AuthManager; import com.wangdaye.mysplash.common.i.model.LoadModel; import com.wangdaye.mysplash.common.i.presenter.LoadPresenter; import com.wangdaye.mysplash.common.i.view.LoadView; import com.wangdaye.mysplash.common.utils.AnimUtils; import com.wangdaye.mysplash.common.utils.manager.ThemeManager; import com.wangdaye.mysplash.me.model.widget.LoadObject; import com.wangdaye.mysplash.me.presenter.widget.LoadImplementor; import butterknife.BindView; import butterknife.ButterKnife; /** * Me profile view. * * This view is used to show application's profile. * * */ public class MeProfileView extends FrameLayout implements LoadView, RippleButton.OnSwitchListener { @BindView(R.id.container_user_profile_progressView) CircularProgressView progressView; @BindView(R.id.container_user_profile_profileContainer) RelativeLayout profileContainer; @BindView(R.id.container_user_profile_followBtn) RippleButton rippleButton; @BindView(R.id.container_user_profile_locationTxt) TextView locationTxt; @BindView(R.id.container_user_profile_bio) TextView bioTxt; private LoadModel loadModel; private LoadPresenter loadPresenter; public MeProfileView(Context context) { super(context); this.initialize(); } public MeProfileView(Context context, AttributeSet attrs) { super(context, attrs); this.initialize(); } public MeProfileView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); this.initialize(); } // init. @SuppressLint("InflateParams") private void initialize() { View v = LayoutInflater.from(getContext()).inflate(R.layout.container_user_profile, null); addView(v); ButterKnife.bind(this, this); initModel(); initPresenter(); initView(); } // init. private void initModel() { this.loadModel = new LoadObject(LoadObject.LOADING_STATE); } private void initPresenter() { this.loadPresenter = new LoadImplementor(loadModel, this); } private void initView() { progressView.setVisibility(VISIBLE); rippleButton.setDontAnimate(true); rippleButton.setOnSwitchListener(this); profileContainer.setVisibility(GONE); DisplayUtils.setTypeface(getContext(), locationTxt); DisplayUtils.setTypeface(getContext(), bioTxt); ImageView locationIcon = ButterKnife.findById(this, R.id.container_user_profile_locationIcon); ThemeManager.setImageResource( locationIcon, R.drawable.ic_location_light, R.drawable.ic_location_dark); } // control. @SuppressLint("SetTextI18n") public void drawMeProfile(Me me) { ViewParent parent = getAppBarParent(); if (parent != null && parent instanceof NestedScrollAppBarLayout) { TransitionManager.beginDelayedTransition((ViewGroup) parent); } rippleButton.forceSwitch(true); rippleButton.setButtonTitles( new String[] { getContext().getString(R.string.my_follow).toUpperCase(), getContext().getString(R.string.my_follow).toUpperCase()}); if (!TextUtils.isEmpty(me.location)) { locationTxt.setText(me.location); } else { locationTxt.setText("Unknown"); } if (!TextUtils.isEmpty(me.bio)) { bioTxt.setText(me.bio); } else { bioTxt.setVisibility(GONE); } loadPresenter.setNormalState(); } @Nullable private ViewParent getAppBarParent() { ViewParent parent = getParent(); while (parent != null && !(parent instanceof NestedScrollAppBarLayout)) { parent = parent.getParent(); } return parent; } public void setLoading() { loadPresenter.setLoadingState(); } // interface. // on switch listener. @Override public void onSwitch(boolean switchTo) { if (AuthManager.getInstance().isAuthorized()) { IntentHelper.startMyFollowActivity(Mysplash.getInstance().getTopActivity()); } } // view. // load view. @Override public void animShow(final View v) { AnimUtils.animShow(v); } @Override public void animHide(final View v) { AnimUtils.animHide(v); } @Override public void setLoadingState() { // do nothing. } @Override public void setFailedState() { // do nothing. } @Override public void setNormalState() { animShow(profileContainer); animHide(progressView); } @Override public void resetLoadingState() { // do nothing. } }