package com.wangdaye.mysplash.common.ui.activity;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.support.design.widget.CoordinatorLayout;
import android.view.View;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;
import android.widget.LinearLayout;
import com.wangdaye.mysplash.Mysplash;
import com.wangdaye.mysplash.R;
import com.wangdaye.mysplash.common._basic.Previewable;
import com.wangdaye.mysplash.common._basic.MysplashActivity;
import com.wangdaye.mysplash.common.ui.widget.SwipeBackCoordinatorLayout;
import com.wangdaye.mysplash.common.ui.widget.nestedScrollView.NestedScrollPhotoView;
import com.wangdaye.mysplash.common.utils.helper.ImageHelper;
import com.wangdaye.mysplash.common.utils.manager.ThemeManager;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import butterknife.OnLongClick;
/**
* Preview activity.
*
* This activity is used to preview a picture.
*
* */
public class PreviewActivity extends MysplashActivity
implements SwipeBackCoordinatorLayout.OnSwipeListener {
@BindView(R.id.activity_preview_container)
CoordinatorLayout container;
@BindView(R.id.activity_preview_widgetContainer)
LinearLayout widgetContainer;
@BindView(R.id.activity_preview_iconContainer)
LinearLayout iconContainer;
private Previewable previewable; // this object will provide data for picture.
private boolean showIcon = false; // If set true, the icon view will become visible when user tap picture.
private boolean showingIcon = false; // If set true, it means the icon view is visible.
public static final String KEY_PREVIEW_ACTIVITY_PREVIEW = "preview_activity_preview";
public static final String KEY_PREVIEW_ACTIVITY_SHOW_ICON = "preview_activity_show_icon";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_preview);
}
@Override
protected void onStart() {
super.onStart();
if (!isStarted()) {
setStarted();
ButterKnife.bind(this);
initData();
initWidget();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
Mysplash.getInstance().removeActivity(this);
}
@Override
protected void setTheme() {
if (ThemeManager.getInstance(this).isLightTheme()) {
setTheme(R.style.MysplashTheme_light_Translucent_Preview);
} else {
setTheme(R.style.MysplashTheme_dark_Translucent_Preview);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
getWindow().addFlags(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
}
}
@Override
protected boolean operateStatusBarBySelf() {
return true;
}
@Override
public void finishActivity(int dir) {
finish();
switch (dir) {
case SwipeBackCoordinatorLayout.UP_DIR:
overridePendingTransition(0, R.anim.activity_slide_out_top);
break;
case SwipeBackCoordinatorLayout.DOWN_DIR:
overridePendingTransition(0, R.anim.activity_slide_out_bottom);
break;
}
}
@Override
protected void backToTop() {
// do nothing.
}
@Override
public void handleBackPressed() {
finishActivity(SwipeBackCoordinatorLayout.DOWN_DIR);
}
@Override
public CoordinatorLayout getSnackbarContainer() {
return container;
}
// init.
private void initData() {
this.previewable = getIntent().getParcelableExtra(KEY_PREVIEW_ACTIVITY_PREVIEW);
this.showIcon = getIntent().getBooleanExtra(KEY_PREVIEW_ACTIVITY_SHOW_ICON, false);
}
private void initWidget() {
SwipeBackCoordinatorLayout swipeBackView = ButterKnife.findById(
this, R.id.activity_preview_swipeBackView);
swipeBackView.setOnSwipeListener(this);
final NestedScrollPhotoView photoView = ButterKnife.findById(this, R.id.activity_preview_photoView);
photoView.enable();
photoView.enableRotate();
photoView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
photoView.setMaxScale(calcMaxiScale());
ImageHelper.loadFullPhoto(
this, photoView, previewable.getFullUrl(), previewable.getRegularUrl(),
new ImageHelper.OnLoadImageListener() {
@Override
public void onLoadSucceed() {
photoView.setMaxScale(2 * calcMaxiScale());
}
@Override
public void onLoadFailed() {
// do nothing.
}
});
}
// control.
private void showIcons() {
TranslateAnimation show = new TranslateAnimation(
0, 0,
0, -iconContainer.getMeasuredHeight());
show.setFillEnabled(true);
show.setFillAfter(true);
show.setDuration(200);
iconContainer.clearAnimation();
iconContainer.startAnimation(show);
}
private void hideIcons() {
TranslateAnimation hide = new TranslateAnimation(
0, 0,
-iconContainer.getMeasuredHeight(), 0);
hide.setFillEnabled(true);
hide.setFillAfter(true);
hide.setDuration(200);
iconContainer.clearAnimation();
iconContainer.startAnimation(hide);
}
private void showWidget() {
TranslateAnimation show = new TranslateAnimation(
0, 0,
0, widgetContainer.getMeasuredHeight());
show.setFillEnabled(true);
show.setFillAfter(true);
show.setDuration(200);
widgetContainer.clearAnimation();
widgetContainer.startAnimation(show);
}
private void hideWidget() {
TranslateAnimation hide = new TranslateAnimation(
0, 0,
widgetContainer.getMeasuredHeight(), 0);
hide.setFillEnabled(true);
hide.setFillAfter(true);
hide.setDuration(200);
widgetContainer.clearAnimation();
widgetContainer.startAnimation(hide);
}
private float calcMaxiScale() {
if (previewable.getWidth() == 128) {
return 0.5F;
} else {
return 5;
}
}
// interface.
// on click listener.
@OnClick(R.id.activity_preview_photoView) void tapPicture() {
if (showIcon) {
if (showingIcon) {
showingIcon = false;
hideWidget();
hideIcons();
} else {
showingIcon = true;
showWidget();
showIcons();
}
}
}
// on long click listener.
@OnLongClick(R.id.activity_preview_photoView) boolean longClickPicture() {
// TODO: 2017/3/31 download.
return true;
}
// on swipe listener.
@Override
public boolean canSwipeBack(int dir) {
return true;
}
@Override
public void onSwipeProcess(float percent) {
container.setBackgroundColor(
Color.argb(
(int) (255 * 0.5 * (2 - percent)),
0, 0, 0));
}
@Override
public void onSwipeFinish(int dir) {
finishActivity(dir);
}
}