package com.mediamonks.googleflip.pages.home; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ValueAnimator; import android.app.Activity; import android.bluetooth.BluetoothAdapter; import android.content.Intent; import android.graphics.Point; import android.graphics.Rect; import android.os.Bundle; import android.os.Handler; import android.view.View; import android.view.animation.DecelerateInterpolator; import android.widget.ImageView; import com.mediamonks.googleflip.GoogleFlipGameApplication; import com.mediamonks.googleflip.R; import com.mediamonks.googleflip.data.constants.ActivityRequestCode; import com.mediamonks.googleflip.data.constants.Fragments; import com.mediamonks.googleflip.data.constants.GameType; import com.mediamonks.googleflip.data.constants.IntentKeys; import com.mediamonks.googleflip.data.constants.PrefKeys; import com.mediamonks.googleflip.data.services.DataService; import com.mediamonks.googleflip.pages.calibration.CalibrationActivity; import com.mediamonks.googleflip.pages.connect.ConnectActivity; import com.mediamonks.googleflip.pages.game_flow.singleplayer.SinglePlayerGameFlowActivity; import com.mediamonks.googleflip.ui.RegisteredFragmentActivity; import com.mediamonks.googleflip.util.SoundManager; import com.pixplicity.easyprefs.library.Prefs; import butterknife.Bind; import butterknife.ButterKnife; import butterknife.OnClick; import temple.core.net.BroadcastReceiver; import temple.core.ui.CustomButton; import temple.core.ui.CustomTextView; import temple.core.utils.AlertUtils; /** * Activity for home screen */ public class HomeActivity extends RegisteredFragmentActivity { private static String TAG = HomeActivity.class.getSimpleName(); @Bind(R.id.logo_circle) protected View _logoCircle; @Bind(R.id.explanation) protected CustomTextView _explanation; @Bind(R.id.logo) protected ImageView _logo; @Bind(R.id.android_experiment) protected ImageView _androidExperiment; @Bind(R.id.single_player_button) protected CustomButton _singlePlayerButton; @Bind(R.id.multi_player_button) protected CustomButton _multiPlayerButton; private Point _basePos = new Point(); private float _maskSize; private float _buttonOffsetY; private ValueAnimator _maskAnimator; private ValueAnimator _buttonsAnimator; private BroadcastReceiver _broadcastReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_home); ButterKnife.bind(this); boolean isDataLoaded = GoogleFlipGameApplication.getUserModel().isDataLoaded(); if (!isDataLoaded) { _broadcastReceiver = new BroadcastReceiver(this, true); _broadcastReceiver.addActionHandler(DataService.ACTION_LOAD_LEVELS, new BroadcastReceiver.ActionHandler() { @Override public void onAction(String action, Intent intent) { onDataLoaded(); } }); _multiPlayerButton.setEnabled(false); _singlePlayerButton.setEnabled(false); } else { onDataLoaded(); } getWindow().getDecorView().setBackgroundColor(getResources().getColor(R.color.purple)); if (!Prefs.contains(PrefKeys.CALIBRATION_X)) { _explanation.setAlpha(0); _multiPlayerButton.setVisibility(View.GONE); _singlePlayerButton.setVisibility(View.GONE); startCalibrationDelay(); } else { _logoCircle.setVisibility(View.GONE); if (GoogleFlipGameApplication.getIsLanding()) { GoogleFlipGameApplication.setIsLanding(false); _explanation.setAlpha(0); _singlePlayerButton.setVisibility(View.GONE); _multiPlayerButton.setVisibility(View.GONE); setAnimation(); } else { _androidExperiment.setVisibility(View.GONE); getWindow().getDecorView().setBackgroundColor(getResources().getColor(R.color.purple_dark)); } } SoundManager.getInstance().load(R.raw.tap); } private void onDataLoaded() { enableButtons(); if (_broadcastReceiver != null) { _broadcastReceiver.onPause(); _broadcastReceiver = null; } } private void enableButtons() { _singlePlayerButton.setEnabled(true); _multiPlayerButton.setEnabled(true); } private void setAnimation() { _maskAnimator = ValueAnimator.ofFloat(0, 1); _maskAnimator.setInterpolator(new DecelerateInterpolator()); _maskAnimator.setDuration(800); _maskAnimator.setStartDelay(1000); _maskAnimator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { getWindow().getDecorView().setBackgroundColor(getResources().getColor(R.color.purple_dark)); _logoCircle.setVisibility(View.INVISIBLE); _androidExperiment.setVisibility(View.GONE); _multiPlayerButton.setVisibility(View.INVISIBLE); _singlePlayerButton.setVisibility(View.INVISIBLE); _explanation.setAlpha(1); } }); _maskAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { public void onAnimationUpdate(ValueAnimator animation) { float value = (float) animation.getAnimatedValue(); if (_logoCircle.getVisibility() == View.GONE) { Rect posRect = new Rect(); Point size = new Point(); float scale = (_logo.getDrawable().getBounds().width() / 171f); getWindowManager().getDefaultDisplay().getSize(size); _logo.getGlobalVisibleRect(posRect); _basePos.set((int) (posRect.centerX() - (scale * 24.5f)), (int) (posRect.centerY() - (scale * 36.5f))); _maskSize = (getResources().getDisplayMetrics().heightPixels * 1.5f) / getResources().getDisplayMetrics().density; _logoCircle.setVisibility(View.VISIBLE); } _logoCircle.setScaleX(_maskSize * value); _logoCircle.setScaleY(_maskSize * value); _logoCircle.setX(_basePos.x - _logoCircle.getWidth()); _logoCircle.setY(_basePos.y - _logoCircle.getHeight()); _androidExperiment.setAlpha(1 - Math.max(0, Math.min(1, value * 1.5f))); _explanation.setAlpha(Math.max(0, Math.min(1, (value - .25f) * 1.5f))); } }); _buttonsAnimator = ValueAnimator.ofFloat(0, 1); _buttonsAnimator.setInterpolator(new DecelerateInterpolator()); _buttonsAnimator.setDuration(300); _buttonsAnimator.setStartDelay(1800); _buttonsAnimator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { _singlePlayerButton.setTranslationY(0); _multiPlayerButton.setTranslationY(0); } }); _buttonsAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { public void onAnimationUpdate(ValueAnimator animation) { float value = (float) animation.getAnimatedValue(); if (_singlePlayerButton.getVisibility() == View.INVISIBLE) { _buttonOffsetY = _singlePlayerButton.getHeight() * 1.1f; _singlePlayerButton.setVisibility(View.VISIBLE); _multiPlayerButton.setVisibility(View.VISIBLE); } _singlePlayerButton.setTranslationY(_buttonOffsetY - (_buttonOffsetY * value)); _multiPlayerButton.setTranslationY(_buttonOffsetY - (_buttonOffsetY * value)); } }); _maskAnimator.start(); _buttonsAnimator.start(); } private void startCalibrationDelay() { new Handler().postDelayed( new Runnable() { @Override public void run() { Intent intent = new Intent(new Intent(HomeActivity.this, CalibrationActivity.class)); intent.putExtra(IntentKeys.FROM, HomeActivity.TAG); startActivity(intent); } } , 2500); } @OnClick(R.id.single_player_button) protected void onSinglePlayerButtonClick() { SoundManager.getInstance().play(R.raw.tap); GoogleFlipGameApplication.getOrientationProvider(this).start(); GoogleFlipGameApplication.getUserModel().selectNextLockedLevel(); Prefs.putInt(PrefKeys.GAME_TYPE, GameType.SINGLE_PLAYER.ordinal()); Intent intent = new Intent(this, SinglePlayerGameFlowActivity.class); intent.putExtra(IntentKeys.FRAGMENT, Fragments.GAME_FLOW_SELECT_LEVEL); startActivity(intent); overridePendingTransition(R.anim.slide_up_in, R.anim.slide_up_out); } @OnClick(R.id.multi_player_button) protected void onMultiPlayerButtonClick() { SoundManager.getInstance().play(R.raw.tap); Prefs.putInt(PrefKeys.GAME_TYPE, GameType.MULTI_PLAYER.ordinal()); BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter(); if (adapter == null) { AlertUtils.showAlert(this, R.string.no_bluetooth_message, R.string.no_bluetooth_title, R.string.btn_ok); } else if (!adapter.isEnabled()) { startActivityForResult(new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE), ActivityRequestCode.REQUEST_ENABLE_BT); } else { startMultiplayer(); } } private void startMultiplayer() { GoogleFlipGameApplication.getOrientationProvider(this).start(); startActivity(new Intent(HomeActivity.this, ConnectActivity.class)); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == ActivityRequestCode.REQUEST_ENABLE_BT) { if (resultCode == Activity.RESULT_OK) { startMultiplayer(); } } } @Override protected void onStart() { super.onStart(); GoogleFlipGameApplication.getOrientationProvider(this).stop(); } @Override public void onBackPressed() { finish(); } @Override protected void onDestroy() { if (_maskAnimator != null) { _maskAnimator.cancel(); _maskAnimator = null; } if (_buttonsAnimator != null) { _buttonsAnimator.cancel(); _buttonsAnimator = null; } ButterKnife.unbind(this); super.onDestroy(); } @Override protected void onResume() { super.onResume(); GoogleFlipGameApplication.setScreenRotation(getWindowManager().getDefaultDisplay().getRotation()); if (_broadcastReceiver != null) { if (GoogleFlipGameApplication.getUserModel().isDataLoaded()) { onDataLoaded(); } else { _broadcastReceiver.onResume(); } } } @Override protected void onPause() { super.onPause(); if (_broadcastReceiver != null) { _broadcastReceiver.onPause(); } } }