package oxim.digital.rxanimations.colorpicker;
import android.content.res.Resources;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.CardView;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import butterknife.Bind;
import butterknife.ButterKnife;
import butterknife.OnClick;
import oxim.digital.rxanimations.R;
import rx.Completable;
import rx.subjects.BehaviorSubject;
import static oxim.digital.rxanim.RxAnimations.animateTogether;
import static oxim.digital.rxanim.RxAnimations.enterViewsWithDelay;
import static oxim.digital.rxanim.RxAnimations.enterWithRotation;
import static oxim.digital.rxanim.RxAnimations.fadeIn;
import static oxim.digital.rxanim.RxAnimations.hide;
import static oxim.digital.rxanim.RxAnimations.hideViewGroupChildren;
import static oxim.digital.rxanim.RxAnimations.show;
public final class ColorPickerActivity extends AppCompatActivity implements ColorPickerContract.View {
private static final int LANGUAGE_ICON_ANIMATION_DURATION = 800;
private static final int ICONS_ANIMATION_DURATION = 600;
private static final int ITEMS_HORIZONTAL_OFFSET = -56;
private static final int CARDS_HORIZONTAL_OFFSET = -160;
private static final int CARD_INITIAL_DELAY = 400;
private static final int CARDS_DELAY = 260;
private static final int CARDS_ANIMATION_DURATION = 400;
private static final int LE_COLORS_GROUP_INITIAL_DELAY = 1000;
private static final int LANGUAGE_DETAILS_DELAY = 200;
private static final int WELCOME_TEXT_INITIAL_DELAY = 500;
private static final int WELCOME_TEXT_DELAY = 600;
private static final int SETTINGS_ICON_DELAY = 600;
private static final int SETTINGS_ICON_ROTATION = -60;
@Bind(R.id.palette_background)
ImageView paletteBackground;
@Bind(R.id.user_welcome_message)
TextView userWelcomeMessage;
@Bind(R.id.username)
TextView username;
@Bind(R.id.le_colors_label)
TextView leColorsLabel;
@Bind(R.id.hello_text_container)
LinearLayout helloTextContainer;
@Bind(R.id.see_more_button)
TextView seeMoreColorsButton;
@Bind(R.id.language_container)
LinearLayout languageContainer;
@Bind(R.id.settings_icon)
ImageView settingsIcon;
@Bind(R.id.color_cards_layout)
ViewGroup colorCardsLayout;
@Bind(R.id.color_card_one)
CardView colorCardOne;
@Bind(R.id.color_card_two)
CardView colorCardTwo;
@Bind(R.id.color_card_three)
CardView colorCardThree;
@Bind(R.id.color_card_four)
CardView colorCardFour;
private BehaviorSubject<Boolean> viewReadySignal = BehaviorSubject.create(false);
private ColorPickerContract.Presenter presenter;
@Override
protected void onCreate(@Nullable final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_color_picker);
ButterKnife.bind(this);
setCardColors();
presenter = new ColorPickerPresenter();
presenter.bind(this);
}
private void setCardColors() {
final Resources resources = getResources();
colorCardOne.setCardBackgroundColor(resources.getColor(R.color.color_one));
colorCardTwo.setCardBackgroundColor(resources.getColor(R.color.color_two));
colorCardThree.setCardBackgroundColor(resources.getColor(R.color.color_three));
colorCardFour.setCardBackgroundColor(resources.getColor(R.color.color_four));
}
@Override
public void onWindowFocusChanged(final boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (!viewReadySignal.hasCompleted() && hasFocus) {
viewReadySignal.onCompleted();
}
}
@Override
public Completable setupInitialAnimation() {
return animateTogether(hideViewGroupChildren(helloTextContainer, languageContainer),
hide(paletteBackground, settingsIcon, colorCardsLayout));
}
@Override
public Completable startInitialAnimation() {
return viewReadyCompletable().concatWith(
animateTogether(fadeIn(paletteBackground, LANGUAGE_ICON_ANIMATION_DURATION),
enterViewsWithDelay(CARD_INITIAL_DELAY, CARDS_DELAY, CARDS_ANIMATION_DURATION, CARDS_HORIZONTAL_OFFSET,
colorCardOne, colorCardTwo, colorCardThree, colorCardFour),
show(colorCardsLayout),
enterViewsWithDelay(WELCOME_TEXT_INITIAL_DELAY, WELCOME_TEXT_DELAY, WELCOME_TEXT_DELAY,
ITEMS_HORIZONTAL_OFFSET, userWelcomeMessage, username),
enterViewsWithDelay(LE_COLORS_GROUP_INITIAL_DELAY, LANGUAGE_DETAILS_DELAY, ICONS_ANIMATION_DURATION,
ITEMS_HORIZONTAL_OFFSET, leColorsLabel, seeMoreColorsButton),
enterWithRotation(settingsIcon, ICONS_ANIMATION_DURATION, ITEMS_HORIZONTAL_OFFSET,
0, SETTINGS_ICON_DELAY, SETTINGS_ICON_ROTATION)));
}
private Completable viewReadyCompletable() {
return viewReadySignal.toCompletable();
}
@OnClick(R.id.root_container)
public void onRootViewClick() {
presenter.refreshView();
}
}