package com.github.takahirom.materialelement.motion.movement;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.CollapsingToolbarLayout;
import android.support.v4.app.ActivityCompat;
import android.support.v4.view.animation.FastOutSlowInInterpolator;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.CardView;
import android.support.v7.widget.Toolbar;
import android.transition.Scene;
import android.transition.Transition;
import android.transition.TransitionInflater;
import android.transition.TransitionManager;
import android.view.View;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.Toast;
import com.github.takahirom.materialelement.MaterialElementActivity;
import com.github.takahirom.materialelement.animation.OnetimeViewTreeObserver;
import com.github.takahirom.materialelement.animation.transition.TransitionUtils;
import com.github.takahirom.materialelement.main.ImplementationItem;
import com.github.takahirom.materialelement.R;
import com.github.takahirom.materialelement.util.AndroidVersionUtil;
import com.github.takahirom.materialelement.util.ScreenUtil;
public class MovementActivity extends MaterialElementActivity {
public final static String RESULT_EXTRA_ITEM_ID = "RESULT_EXTRA_ITEM_ID";
public static final String INTENT_EXTRA_ITEM = "item";
private ImplementationItem item;
private Scene arcScene1;
private Scene arcScene2;
private Scene notArcScene1;
private Scene notArcScene2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_movement);
item = getIntent().getParcelableExtra(INTENT_EXTRA_ITEM);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
setupViews();
}
public void setupViews() {
final CollapsingToolbarLayout collapsingToolbarLayout = (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar);
final ImageView imageView = (ImageView) findViewById(R.id.detail_image);
// collapsingToolbarLayout.setExpandedTitleColor(ContextCompat.getColor(MovementActivity.this, android.R.color.white));
imageView.setImageResource(item.imageRes);
TransitionUtils.setSharedElementEnterTransitionEndListenerCompat(getWindow(), new TransitionUtils.OnSharedElementEnterTransitionEndListener() {
@Override
public void onEnd(Transition transition) {
collapsingToolbarLayout.setTitleEnabled(true);
collapsingToolbarLayout.setTitle(item.title);
TransitionManager.go(arcScene1);
TransitionManager.go(notArcScene1);
}
});
setupArcMotion();
setupNotArcMotion();
final CardView cardView = (CardView) findViewById(R.id.inset_card);
final View fab = findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (cardView.getTranslationY() > 0) {
cardView
.animate()
.translationY(0)
.setInterpolator(new FastOutSlowInInterpolator())
.start();
} else {
cardView
.animate()
.translationY(cardView.getHeight())
.setInterpolator(new FastOutSlowInInterpolator())
.start();
}
}
});
}
private void setupArcMotion() {
final RelativeLayout sceneRoot = (RelativeLayout) findViewById(R.id.arc_scene_root);
if (AndroidVersionUtil.isGreaterThanL()) {
arcScene1 = Scene.getSceneForLayout(sceneRoot, R.layout.card_arc_scene1, this);
arcScene2 = Scene.getSceneForLayout(sceneRoot, R.layout.card_arc_scene2, this);
sceneRoot.setOnClickListener(new View.OnClickListener() {
boolean isScene2 = false;
@Override
public void onClick(View v) {
final Transition transition = TransitionInflater.from(MovementActivity.this).inflateTransition(R.transition.movement_change_bounds_arc);
if (isScene2) {
TransitionManager.go(arcScene1, transition);
} else {
TransitionManager.go(arcScene2, transition);
}
isScene2 = !isScene2;
}
});
} else {
sceneRoot.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MovementActivity.this, R.string.all_not_support_os_version, Toast.LENGTH_LONG).show();
}
});
}
}
private void setupNotArcMotion() {
final RelativeLayout sceneRoot = (RelativeLayout) findViewById(R.id.not_arc_scene_root);
if (AndroidVersionUtil.isGreaterThanL()) {
notArcScene1 = Scene.getSceneForLayout(sceneRoot, R.layout.card_not_arc_scene1, this);
notArcScene2 = Scene.getSceneForLayout(sceneRoot, R.layout.card_not_arc_scene2, this);
sceneRoot.setOnClickListener(new View.OnClickListener() {
boolean isScene2 = false;
@Override
public void onClick(View v) {
if (isScene2) {
TransitionManager.go(notArcScene1, TransitionInflater.from(MovementActivity.this).inflateTransition(R.transition.movement_change_bounds_arc));
} else {
TransitionManager.go(notArcScene2, TransitionInflater.from(MovementActivity.this).inflateTransition(R.transition.movement_change_bounds_arc));
}
isScene2 = !isScene2;
}
});
} else {
sceneRoot.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MovementActivity.this, R.string.all_not_support_os_version, Toast.LENGTH_LONG).show();
}
});
}
}
@Override
public void onBackPressed() {
setResultAndFinish();
}
void setResultAndFinish() {
final Intent resultData = new Intent();
resultData.putExtra(RESULT_EXTRA_ITEM_ID, item.itemId);
setResult(RESULT_OK, resultData);
ActivityCompat.finishAfterTransition(this);
}
}