package com.richardradics.cleanaa.ui;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.ActivityOptionsCompat;
import android.support.v4.view.ViewCompat;
import android.support.v7.graphics.Palette;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.github.ksoichiro.android.observablescrollview.ObservableScrollView;
import com.github.ksoichiro.android.observablescrollview.ObservableScrollViewCallbacks;
import com.github.ksoichiro.android.observablescrollview.ScrollState;
import com.github.ksoichiro.android.observablescrollview.ScrollUtils;
import com.nineoldandroids.view.ViewHelper;
import com.richardradics.cleanaa.R;
import com.richardradics.cleanaa.app.CleanActivity;
import com.squareup.picasso.Picasso;
import com.squareup.picasso.Target;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.OptionsItem;
import org.androidannotations.annotations.OptionsMenu;
import org.androidannotations.annotations.ViewById;
import org.androidannotations.annotations.res.ColorRes;
import org.androidannotations.annotations.res.DimensionPixelSizeRes;
@EActivity
@OptionsMenu(R.menu.menu_detail)
public class DetailActivity extends CleanActivity implements ObservableScrollViewCallbacks, Palette.PaletteAsyncListener {
public static final String EXTRA_IMAGE = "DetailActivity:image";
public static final String EXTRA_TITLE = "DetailActivity:title";
private static boolean TOOLBAR_IS_STICKY = false;
private static float MAX_TEXT_SCALE_DELTA = 0.3f;
@DimensionPixelSizeRes(R.dimen.flexible_space_image_height)
int mFlexibleSpaceImageHeight;
@ViewById(R.id.image)
ImageView image;
@ColorRes(R.color.primary)
int mToolBarColor;
@ViewById(R.id.overlay)
View mOverlayView;
@ViewById(R.id.scroll)
ObservableScrollView mScollView;
@ViewById(R.id.body)
TextView bodyTextview;
Integer mActionBarSize;
private Target bitmapImageViewTarget;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
mActionBarSize = getActionBarSize();
if (!TOOLBAR_IS_STICKY) {
toolbar.setBackgroundColor(Color.TRANSPARENT);
}
image = (ImageView) findViewById(R.id.image);
ViewCompat.setTransitionName(image, EXTRA_IMAGE);
titleTextView.setText(getIntent().getStringExtra(EXTRA_TITLE));
bitmapImageViewTarget = new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
Palette.generateAsync(bitmap, DetailActivity.this);
image.setImageBitmap(bitmap);
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
};
Picasso.with(this).load(getIntent().getStringExtra(EXTRA_IMAGE)).into(bitmapImageViewTarget);
setTitle(null);
mScollView.setScrollViewCallbacks(this);
ScrollUtils.addOnGlobalLayoutListener(mScollView, new Runnable() {
@Override
public void run() {
mScollView.scrollTo(0, mFlexibleSpaceImageHeight - mActionBarSize);
mScollView.scrollTo(0, 1);
}
});
}
public static void launch(CleanActivity activity, View transitionView, String url, String title) {
ActivityOptionsCompat options =
ActivityOptionsCompat.makeSceneTransitionAnimation(
activity, transitionView, EXTRA_IMAGE);
Intent intent = new Intent(activity, DetailActivity_.class);
intent.putExtra(EXTRA_IMAGE, url);
intent.putExtra(EXTRA_TITLE, title);
ActivityCompat.startActivity(activity, intent, options.toBundle());
}
@Override
public void onScrollChanged(int scrollY, boolean firstScroll, boolean dragging) {
float flexibleRange = mFlexibleSpaceImageHeight - mActionBarSize;
float minOverLayTransitionY = mActionBarSize - mOverlayView.getHeight();
ViewHelper.setTranslationY(mOverlayView, ScrollUtils.getFloat((-scrollY), minOverLayTransitionY, 0F));
ViewHelper.setTranslationY(image, ScrollUtils.getFloat((-scrollY / 2), minOverLayTransitionY, 0F));
// Change alpha of overlay
ViewHelper.setAlpha(mOverlayView, ScrollUtils.getFloat(scrollY / flexibleRange, 0F, 1F));
// Scale title text
float scale = 1 + ScrollUtils.getFloat((flexibleRange - scrollY) / flexibleRange, 0F, MAX_TEXT_SCALE_DELTA);
ViewHelper.setPivotX(titleTextView, 0F);
ViewHelper.setPivotY(titleTextView, 0F);
ViewHelper.setScaleX(titleTextView, scale);
ViewHelper.setScaleY(titleTextView, scale);
// Translate title text
float maxTitleTranslationY = (mFlexibleSpaceImageHeight - titleTextView.getHeight() * scale);
float titleTranslationY = maxTitleTranslationY - scrollY;
if (TOOLBAR_IS_STICKY) {
titleTranslationY = Math.max(0, titleTranslationY);
}
ViewHelper.setTranslationY(titleTextView, titleTranslationY);
if (TOOLBAR_IS_STICKY) {
// Change alpha of toolbar background
if (-scrollY + mFlexibleSpaceImageHeight <= mActionBarSize) {
toolbar.setBackgroundColor(ScrollUtils.getColorWithAlpha(1F, mToolBarColor));
} else {
toolbar.setBackgroundColor(ScrollUtils.getColorWithAlpha(0F, mToolBarColor));
}
} else {
// Translate Toolbar
if (scrollY < mFlexibleSpaceImageHeight) {
ViewHelper.setTranslationY(toolbar, 0F);
} else {
ViewHelper.setTranslationY(toolbar, (-scrollY));
}
}
}
@OptionsItem(android.R.id.home)
protected void homeSelected() {
onBackPressed();
}
@Override
public void onDownMotionEvent() {
}
@Override
public void onUpOrCancelMotionEvent(ScrollState scrollState) {
}
@Override
public void onGenerated(Palette palette) {
try {
if (palette != null) {
final Palette.Swatch darkVibrantSwatch = palette.getDarkVibrantSwatch();
final Palette.Swatch darkMutedSwatch = palette.getDarkMutedSwatch();
final Palette.Swatch lightVibrantSwatch = palette.getLightVibrantSwatch();
final Palette.Swatch lightMutedSwatch = palette.getLightMutedSwatch();
final Palette.Swatch vibrantSwatch = palette.getVibrantSwatch();
final Palette.Swatch backgroundAndContentColors = (darkVibrantSwatch != null)
? darkVibrantSwatch : darkMutedSwatch;
final Palette.Swatch titleAndFabColors = (darkVibrantSwatch != null)
? lightVibrantSwatch : lightMutedSwatch;
mToolBarColor = backgroundAndContentColors.getRgb();
bodyTextview.setBackgroundColor(backgroundAndContentColors.getRgb());
titleTextView.setTextColor(titleAndFabColors.getRgb());
}
} catch (Exception e) {
cleanErrorHandler.logExpception(e);
}
}
}