package com.byoutline.kickmaterial.activities;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import com.byoutline.kickmaterial.KickMaterialApp;
import com.byoutline.kickmaterial.R;
import com.byoutline.kickmaterial.adapters.RewardAdapter;
import com.byoutline.kickmaterial.adapters.RewardClickListener;
import com.byoutline.kickmaterial.managers.LoginManager;
import com.byoutline.kickmaterial.model.ProjectDetails;
import com.byoutline.kickmaterial.utils.LUtils;
import com.byoutline.kickmaterial.views.CategoriesListSeparator;
import com.byoutline.secretsauce.utils.ViewUtils;
import com.byoutline.secretsauce.views.RoundedImageView;
import com.squareup.otto.Bus;
import com.squareup.picasso.Picasso;
import com.squareup.picasso.Target;
import org.parceler.Parcels;
import timber.log.Timber;
import javax.annotation.Nonnull;
import javax.inject.Inject;
/**
* @author Pawel Karczewski <pawel.karczewski at byoutline.com> on 2015-01-03
*/
public class RewardsListActivity extends KickMaterialBaseActivity implements RewardClickListener {
private static final String PROJECT_ARG = "project_arg";
public static final float TRANSLATION_IMAGE_RATION = 0.3f;
@Inject
Bus bus;
@Inject
LoginManager loginManager;
@BindView(R.id.category_circle_iv)
ImageView categoryCircleIv;
@BindView(R.id.categories_header_ll)
View headerContainer;
@BindView(R.id.rewards_list_image_container)
View imageContainer;
@BindView(R.id.category_circle_reveal_iv)
ImageView categoryCircleRevealIv;
@BindView(R.id.selected_category_iv)
RoundedImageView selectedCategoryIv;
@BindView(R.id.select_category_tv)
TextView selectCategoryTv;
@BindView(R.id.categories_rv)
RecyclerView rewardsListRv;
private RewardAdapter adapter;
private ProjectDetails project;
private int summaryScrolledValue;
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public static void launch(@Nonnull Activity activity, @Nonnull ProjectDetails project, View sharedElement) {
final Bundle options = KickMaterialBaseActivity.getSharedElementsBundle(activity, sharedElement);
Intent intent = new Intent(activity, RewardsListActivity.class);
Parcelable wrapped = Parcels.wrap(project);
intent.putExtra(PROJECT_ARG, wrapped);
ActivityCompat.startActivity(activity, intent, options);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_rewards_list);
ButterKnife.bind(this);
KickMaterialApp.component.inject(this);
handleArguments();
loadProjectData();
setUpAdapters();
adapter.setItems(project.rewards);
setUpListeners();
}
private void setUpListeners() {
rewardsListRv.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
summaryScrolledValue += dy;
imageContainer.setTranslationY(-TRANSLATION_IMAGE_RATION * summaryScrolledValue);
headerContainer.setTranslationY(-summaryScrolledValue);
}
});
}
private void loadProjectData() {
selectCategoryTv.setText(R.string.select_pledge);
selectCategoryTv.setBackgroundColor(Color.TRANSPARENT);
categoryCircleIv.setVisibility(View.GONE);
Picasso.with(getApplicationContext()).load(project.getPhotoUrl()).into(new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
selectedCategoryIv.setImageBitmap(bitmap);
LUtils.toGrayscale(selectedCategoryIv);
selectedCategoryIv.getDrawable().setColorFilter(ContextCompat.getColor(RewardsListActivity.this, R.color.green_dark), PorterDuff.Mode.MULTIPLY);
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
selectedCategoryIv.setImageResource(0);
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
selectedCategoryIv.setImageResource(0);
}
});
}
private void handleArguments() {
Bundle args = getIntent().getExtras();
if (args != null && args.containsKey(PROJECT_ARG)) {
project = Parcels.unwrap(args.getParcelable(PROJECT_ARG));
} else {
Timber.e("Project not passed");
}
}
@Override
public void onResume() {
super.onResume();
bus.register(this);
rewardsListRv.post(() -> rewardsListRv.startAnimation(LUtils.loadAnimationWithLInterpolator(getApplicationContext(), R.anim.slide_from_bottom)));
}
@Override
public void onPause() {
bus.unregister(this);
super.onPause();
}
private void setUpAdapters() {
/** NEW ADAPTER **/
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
rewardsListRv.setLayoutManager(layoutManager);
rewardsListRv.addItemDecoration(new CategoriesListSeparator(getApplicationContext(), 0));
adapter = new RewardAdapter(this, this);
rewardsListRv.setAdapter(adapter);
}
@Override
public void rewardClicked(int position) {
ViewUtils.showDebugToast("RewardClicked " + position);
}
@Override
public void setToolbarAlpha(float alpha) {
}
@OnClick(R.id.close_categories_iv)
public void onCloseCategories() {
ActivityCompat.finishAfterTransition(this);
}
}