package com.hannesdorfmann.mosby3.sample.mail.profile; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.graphics.Color; import android.graphics.PorterDuff; import android.os.Bundle; import android.support.v4.view.ViewPager; import android.support.v7.widget.Toolbar; import android.view.View; import android.widget.ImageView; import android.widget.TextView; import com.astuetz.PagerSlidingTabStrip; import com.hannesdorfmann.mosby3.mvp.viewstate.lce.ParcelableLceViewState; import com.hannesdorfmann.mosby3.mvp.viewstate.lce.data.CastedArrayListLceViewState; import com.hannesdorfmann.mosby3.sample.mail.MailApplication; import com.hannesdorfmann.mosby3.sample.mail.R; import com.hannesdorfmann.mosby3.sample.mail.base.view.BaseLceActivity; import com.hannesdorfmann.mosby3.sample.mail.model.contact.Person; import com.hannesdorfmann.mosby3.sample.mail.model.contact.ProfileScreen; import com.hannesdorfmann.mosby3.sample.mail.utils.BuildUtils; import com.hannesdorfmann.mosby3.sample.mail.utils.MathUtils; import butterknife.BindView; import github.chenupt.dragtoplayout.DragTopLayout; import java.util.List; /** * @author Hannes Dorfmann */ public class ProfileActivity extends BaseLceActivity<DragTopLayout, List<ProfileScreen>, ProfileView, ProfilePresenter> implements ProfileView { public static final String KEY_PERSON = "com.hannesdorfmann.mosby.sample.mail.profile.ProfileActivity.PERSON"; private Person person; private ProfileScreensAdapter adapter; private ProfileComponent profileComponent; @BindView(R.id.viewPager) ViewPager viewPager; @BindView(R.id.tabs) PagerSlidingTabStrip tabs; @BindView(R.id.fadingToolbarHelper) View fadingToolbarHelper; @BindView(R.id.separatorLine) View separatorLine; @BindView(R.id.toolbar) Toolbar toolbar; @BindView(R.id.toolbarTitle) TextView toolbarTitle; @BindView(R.id.profileHeaderPic) ImageView headerImage; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_profile); person = getIntent().getParcelableExtra(KEY_PERSON); headerImage.setImageResource(person.getImageRes()); headerImage.setColorFilter(Color.parseColor("#32000000"), PorterDuff.Mode.SRC_ATOP); toolbarTitle.setText(person.getName()); toolbar.setNavigationIcon(BuildUtils.getBackArrowDrawable(this)); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); contentView.listener(new DragTopLayout.SimplePanelListener() { @Override public void onSliding(float v) { fadingToolbarHelper.setAlpha(1f - v); headerImage.setTranslationY(MathUtils.mapPoint(v, 0f, 1f, -(headerImage.getHeight() - toolbar.getHeight() - tabs.getHeight()), 0f) * 0.5f); toolbarTitle.setAlpha(MathUtils.mapPoint(v, 0, 0.4f, 1f, 0f)); separatorLine.setAlpha(MathUtils.mapPoint(v, 0, 0.4f, 1f, 0f)); } }); } @Override protected String getErrorMessage(Throwable e, boolean pullToRefresh) { return getString(R.string.error_has_occurred); } @Override public ProfilePresenter createPresenter() { return profileComponent.presenter(); } @Override public void setData(List<ProfileScreen> data) { adapter = new ProfileScreensAdapter(getSupportFragmentManager(), person); adapter.setScreens(data); viewPager.setAdapter(adapter); tabs.setViewPager(viewPager); } @Override public void loadData(boolean pullToRefresh) { presenter.loadScreens(person); } @Override public ParcelableLceViewState<List<ProfileScreen>, ProfileView> createViewState() { return new CastedArrayListLceViewState<>(); } @Override public List<ProfileScreen> getData() { return adapter == null ? null : adapter.getScreens(); } @Override protected void animateContentViewIn() { if (contentView.getVisibility() != View.VISIBLE) { AnimatorSet animations = new AnimatorSet(); animations.playTogether(ObjectAnimator.ofFloat(contentView, "alpha", 0f, 1f), ObjectAnimator.ofFloat(loadingView, "alpha", 1f, 0f), ObjectAnimator.ofFloat(headerImage, "alpha", 0f, 1f), ObjectAnimator.ofFloat(toolbar, "alpha", 0f, 1f) ); animations.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationStart(Animator animation) { contentView.setVisibility(View.VISIBLE); } @Override public void onAnimationEnd(Animator animation) { loadingView.setVisibility(View.GONE); } }); animations.setDuration(500); animations.start(); } else { contentView.setVisibility(View.VISIBLE); errorView.setVisibility(View.GONE); loadingView.setVisibility(View.GONE); toolbar.setAlpha(1f); headerImage.setVisibility(View.VISIBLE); headerImage.setAlpha(1f); } } @Override protected void injectDependencies() { profileComponent = DaggerProfileComponent.builder() .mailAppComponent(MailApplication.getMailComponents()) .build(); } }