package ru.ltst.u2020mvp.base.navigation.activity; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.ActivityOptionsCompat; import android.support.v4.view.ViewCompat; import android.view.View; import ru.ltst.u2020mvp.base.navigation.Screen; public abstract class ActivityScreen implements Screen { private static final String BF_TRANSITION_VIEW = "ActivityScreen.transitionView"; @Nullable private View transitionView; public void attachTransitionView(@Nullable View view) { transitionView = view; } @Nullable protected View detachTransitionView() { View view = transitionView; transitionView = null; return view; } @NonNull protected final Intent intent(Context context) { Intent intent = new Intent(context, activityClass()); configureIntent(intent); return intent; } protected final Bundle activityOptions(Activity activity) { View transitionView = detachTransitionView(); if (transitionView == null) { return null; } return ActivityOptionsCompat.makeSceneTransitionAnimation(activity, transitionView, BF_TRANSITION_VIEW).toBundle(); } protected abstract void configureIntent(@NonNull Intent intent); protected abstract Class<? extends Activity> activityClass(); public static void setTransitionView(View view) { ViewCompat.setTransitionName(view, BF_TRANSITION_VIEW); } }