package com.barcicki.trio.tutorial; import java.util.ArrayList; import java.util.EnumSet; import android.app.Dialog; import android.os.Bundle; import android.os.Handler; import android.support.v4.app.Fragment; import android.text.TextUtils; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.Window; import android.view.animation.Animation; import android.view.animation.Animation.AnimationListener; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; import com.barcicki.trio.R; import com.barcicki.trio.TrioActivity; import com.barcicki.trio.core.Card; import com.barcicki.trio.core.CardList; import com.barcicki.trio.core.SoundManager; import com.barcicki.trio.core.Trio; import com.barcicki.trio.core.Trio.TrioStatus; import com.barcicki.trio.views.CardView; public class TutorialStepQuizFragment extends Fragment { private static final int NUMBER_OF_ADDITIONAL_CARDS = 4; private int mCurrentSet = 0; private ArrayList<TrioSet> mSets = new ArrayList<TrioSet>(); private Button mPrev; private Button mNext; private CardView mCardA; private CardView mCardB; private CardView mCardToGuess; final private ArrayList<CardView> mOptions = new ArrayList<CardView>(); private TrioActivity mActivity; private Trio mTrio = new Trio(); private Dialog mDialog; @Override public void onCreate(Bundle savedInstanceState) { prepareSets(); super.onCreate(savedInstanceState); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); mActivity = (TrioActivity) getActivity(); mPrev = (Button) getView().findViewById(R.id.buttonPrev); mNext = (Button) getView().findViewById(R.id.buttonNext); mCardA = (CardView) getView().findViewById(R.id.card1); mCardB = (CardView) getView().findViewById(R.id.card2); mCardToGuess = (CardView) getView().findViewById(R.id.card3); mOptions.clear(); for (int id : new int[] { R.id.card4, R.id.card5, R.id.card6, R.id.card7, R.id.card8 }) { mOptions.add((CardView) getView().findViewById(id)); } attachListeners(); showSet(); } private void attachListeners() { mPrev.setOnClickListener(new OnClickListener() { public void onClick(View v) { SoundManager.getInstance(getActivity()).playSound( SoundManager.SOUND_CLICK); onPrevSetClicked(v); } }); mNext.setOnClickListener(new OnClickListener() { public void onClick(View v) { SoundManager.getInstance(getActivity()).playSound( SoundManager.SOUND_CLICK); onNextSetClicked(v); } }); OnClickListener selectCardsListener = new OnClickListener() { public void onClick(View v) { onSelectCard(v); } }; for (CardView view : mOptions) { view.setOnClickListener(selectCardsListener); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.tutorial_step3_fragment, container, false); } public void onSelectCard(final View v) { TrioSet set = mSets.get(mCurrentSet); CardList selection = new CardList(); CardView currentCard = (CardView) v; currentCard.setSelected(true); selection.add(set.getCardA()); selection.add(set.getCardB()); selection.add(currentCard.getCard()); if (selection.hasTrio()) { set.setSolved(true); mCardToGuess.setSwitchAnimationLsitener(new AnimationListener() { public void onAnimationStart(Animation animation) { // TODO Auto-generated method stub } public void onAnimationRepeat(Animation animation) { // TODO Auto-generated method stub } public void onAnimationEnd(Animation animation) { // TODO Auto-generated method stub final Handler handler = new Handler(); handler.postDelayed(new Runnable() { public void run() { onNextSetClicked(null); } }, 300); } }); mCardToGuess.animateSwitchCard(set.getSolution()); if (solvedAllQuizes()) { showEndingDialog(); } SoundManager.getInstance(getActivity()).playSound( SoundManager.SOUND_SUCCESS); } else { SoundManager.getInstance(getActivity()).playSound( SoundManager.SOUND_FAIL); currentCard.animateFail(); EnumSet<TrioStatus> status = Trio.getTrioStatus(selection); ArrayList<String> errors = new ArrayList<String>(); if (status.contains(TrioStatus.WRONG_COLOR)) { errors.add(getString(R.string.tutorial_colour)); } if (status.contains(TrioStatus.WRONG_SHAPE)) { errors.add(getString(R.string.tutorial_shape)); } if (status.contains(TrioStatus.WRONG_FILL)) { errors.add(getString(R.string.tutorial_fill)); } if (status.contains(TrioStatus.WRONG_NUMBER)) { errors.add(getString(R.string.tutorial_number)); } Toast.makeText( getActivity(), getString(R.string.tutorial_wrong_message, TextUtils.join(", ", errors)), Toast.LENGTH_LONG) .show(); } } private boolean solvedAllQuizes() { for (TrioSet set : mSets) { if (!set.isSolved()) return false; } return true; } private void showEndingDialog() { mDialog = new Dialog(getActivity()); mDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); mDialog.setContentView(R.layout.tutorial_dialog); mDialog.setCancelable(true); mDialog.show(); mDialog.findViewById(R.id.justQuit).setOnClickListener(new OnClickListener() { public void onClick(View v) { mActivity.makeClickSound(); mActivity.startHomeActivity(); mActivity.finish(); mDialog.dismiss(); } }); } private void prepareSets() { // 3 common features mSets.add(new TrioSet( new Card(Card.SHAPE_SQUARE, Card.COLOR_RED, Card.FILL_EMPTY, Card.NUMBER_ONE), new Card(Card.SHAPE_SQUARE, Card.COLOR_RED, Card.FILL_EMPTY, Card.NUMBER_TWO))); // 3 common features mSets.add(new TrioSet( new Card(Card.SHAPE_TRIANGLE, Card.COLOR_RED, Card.FILL_FULL, Card.NUMBER_THREE), new Card(Card.SHAPE_TRIANGLE, Card.COLOR_GREEN, Card.FILL_FULL, Card.NUMBER_THREE))); // 2 common features mSets.add(new TrioSet( new Card(Card.SHAPE_CIRCLE, Card.COLOR_RED, Card.FILL_EMPTY, Card.NUMBER_TWO), new Card(Card.SHAPE_SQUARE, Card.COLOR_BLUE, Card.FILL_EMPTY, Card.NUMBER_TWO))); // 2 common features mSets.add(new TrioSet( new Card(Card.SHAPE_SQUARE, Card.COLOR_GREEN, Card.FILL_EMPTY, Card.NUMBER_ONE), new Card(Card.SHAPE_CIRCLE, Card.COLOR_GREEN, Card.FILL_EMPTY, Card.NUMBER_THREE))); // 2 common features mSets.add(new TrioSet( new Card(Card.SHAPE_CIRCLE, Card.COLOR_BLUE, Card.FILL_HALF, Card.NUMBER_THREE), new Card(Card.SHAPE_CIRCLE, Card.COLOR_RED, Card.FILL_EMPTY, Card.NUMBER_THREE))); // 1 common feature mSets.add(new TrioSet( new Card(Card.SHAPE_TRIANGLE, Card.COLOR_RED, Card.FILL_EMPTY, Card.NUMBER_ONE), new Card(Card.SHAPE_TRIANGLE, Card.COLOR_GREEN, Card.FILL_HALF, Card.NUMBER_TWO))); // 1 common feature mSets.add(new TrioSet( new Card(Card.SHAPE_SQUARE, Card.COLOR_BLUE, Card.FILL_EMPTY, Card.NUMBER_TWO), new Card(Card.SHAPE_SQUARE, Card.COLOR_GREEN, Card.FILL_FULL, Card.NUMBER_THREE))); // 1 common feature mSets.add(new TrioSet( new Card(Card.SHAPE_CIRCLE, Card.COLOR_RED, Card.FILL_EMPTY, Card.NUMBER_TWO), new Card(Card.SHAPE_SQUARE, Card.COLOR_BLUE, Card.FILL_FULL, Card.NUMBER_TWO))); // no common features mSets.add(new TrioSet( new Card(Card.SHAPE_TRIANGLE, Card.COLOR_RED, Card.FILL_EMPTY, Card.NUMBER_ONE), new Card(Card.SHAPE_CIRCLE, Card.COLOR_GREEN, Card.FILL_FULL, Card.NUMBER_THREE))); // no common features mSets.add(new TrioSet( new Card(Card.SHAPE_SQUARE, Card.COLOR_BLUE, Card.FILL_HALF, Card.NUMBER_ONE), new Card(Card.SHAPE_CIRCLE, Card.COLOR_GREEN, Card.FILL_EMPTY, Card.NUMBER_THREE))); } public void showSet() { int size = mSets.size(); if (mCurrentSet <= 0) { mCurrentSet = 0; mPrev.setVisibility(View.INVISIBLE); } else { mPrev.setVisibility(View.VISIBLE); } if (mCurrentSet >= size - 1) { mCurrentSet = size - 1; mNext.setVisibility(View.INVISIBLE); } else { mNext.setVisibility(View.VISIBLE); } TextView summary = (TextView) getView().findViewById(R.id.summary); summary.setText((mCurrentSet + 1) + "/" + size); TrioSet quiz = mSets.get(mCurrentSet); mCardA.setCard(quiz.getCardA()); mCardB.setCard(quiz.getCardB()); if (quiz.isSolved()) { mCardToGuess.setCard(quiz.getSolution()); } else { mCardToGuess.setCard(null); } CardList cards = quiz.getTrioQuiz(mTrio.getDeck(), NUMBER_OF_ADDITIONAL_CARDS); if (Trio.LOCAL_LOGV) { Log.v("Trio Tutorial", "Quiz set: " + cards.toString()); } if (!quiz.isSolved()) { cards.shuffle(); } if (mOptions.size() == cards.size()) { int i = 0; for (CardView view : mOptions) { view.setCard(cards.get(i++)); view.setSelected(false); } } else { Log.e("Trio Tutorial", "Some weird problem " + mOptions.size() + " " + cards.size()); } if (Trio.LOCAL_LOGV) { Log.v("Trio Tutorial", "CurrentSet" + mCurrentSet); } } // public void onPrevSetClicked(View v) { mCurrentSet -= 1; showSet(); } public void onNextSetClicked(View v) { mCurrentSet += 1; showSet(); } @Override public void onPause() { if (mDialog != null) { mDialog.dismiss(); } super.onPause(); } // }