Play.java :  » Game » namethat » com » grasscove » namethat » Android Open Source

Android Open Source » Game » namethat 
namethat » com » grasscove » namethat » Play.java
package com.grasscove.namethat;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.graphics.Color;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.TextView;

import com.grasscove.namethat.adapters.WordsDbAdapter;

public class Play extends Activity
{
  private static final int DIALOG_TIME_UP = 0;
  private static final int DIALOG_WINNER = 1;
  private static final int DIALOG_WORD_LIMIT = 2;

  private final SimpleDateFormat mFormat = new SimpleDateFormat("mm:ss");

  private WordsDbAdapter mDbAdapter;
  private Intent mIntent;
  private Cursor mCursor;
  private SharedPreferences mSettings;
  private MediaPlayer mMp;
  private CountDownTimer mTimer;

  private TextView mCategoryWord;
  private TextView mTimerView;
  private TextView mNextWord;
  private TextView mTeam1ScoreView;
  private TextView mTeam2ScoreView;
  private TextView mTeam1TextView;
  private TextView mTeam2TextView;
  private TextView mCategory;

  private int mCategoryId;
  private int mTeam1Score = 0;
  private int mTeam2Score = 0;
  private int mActiveTeam = 1;
  private int mMinutes = 0;

  private ArrayList<Integer> mUsedWords = new ArrayList<Integer>();
  private Integer wordId = 0;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    mDbAdapter = new WordsDbAdapter(this);
    mDbAdapter.open();

    setContentView(R.layout.play);

    mIntent = getIntent();
    mCategory = (TextView)findViewById(R.id.play_cat);
    mCategoryId = mIntent.getIntExtra("category", 0);
    mCategory.setText(CategoriesList.CATEGORIES[mCategoryId].toString());

    mMp = MediaPlayer.create(this, R.raw.tick);
    mMp.setLooping(true);
    mSettings = getSharedPreferences("settings", MODE_PRIVATE);

    mTeam1TextView = (TextView)findViewById(R.id.team1_text);
    mTeam2TextView = (TextView)findViewById(R.id.team2_text);
    mTeam1ScoreView = (TextView)findViewById(R.id.team1_score);
    mTeam2ScoreView = (TextView)findViewById(R.id.team2_score);
    mTimerView = (TextView)findViewById(R.id.play_timer);
    mCategoryWord = (TextView)findViewById(R.id.play_word_bubble);

    mNextWord = (TextView)findViewById(R.id.play_next_word);
    mNextWord.setOnTouchListener(new OnTouchListener() {
      @Override
      public boolean onTouch(View v, MotionEvent event) {
        int action = event.getAction();
        if(action == MotionEvent.ACTION_DOWN) {
          v.setBackgroundDrawable(getResources().getDrawable(R.drawable.button_lg));
        } else if(action == MotionEvent.ACTION_UP) {
          v.setBackgroundDrawable(getResources().getDrawable(R.drawable.button_lg_select));
        }
        return false;
      }
        });

    if(mIntent.hasExtra("team1Score")) {
      mTeam1ScoreView.setText(mIntent.getStringExtra("team1Score"));
    }
    if(mIntent.hasExtra("team2Score")) {
      mTeam2ScoreView.setText(mIntent.getStringExtra("team2Score"));
    }

    mTeam1ScoreView.setTextColor(Color.WHITE);
  }

  @Override
  protected void onResume() {
    super.onResume();

    mCursor = mDbAdapter.getRandomFromCategory(mCategoryId);
        startManagingCursor(mCursor);

        mCursor.moveToFirst();
        mCategoryWord.setText(mCursor.getString(mCursor.getColumnIndex(WordsDbAdapter.KEY_WORD)));

        mMinutes = mSettings.getInt("countdown_time", 0) + 1;
        mTimerView.setText(mMinutes +":00");

        if(mActiveTeam == 1) {
          mActiveTeam = 2;
          mTeam2ScoreView.setTextColor(Color.GREEN);
          mTeam1ScoreView.setTextColor(Color.WHITE);

          mTeam2TextView.setTextColor(Color.GREEN);
          mTeam1TextView.setTextColor(Color.WHITE);
        } else {
          mActiveTeam = 1;
          mTeam1ScoreView.setTextColor(Color.GREEN);
          mTeam2ScoreView.setTextColor(Color.WHITE);

          mTeam1TextView.setTextColor(Color.GREEN);
          mTeam2TextView.setTextColor(Color.WHITE);
        }

        if(mTimer == null) {
          mTimer = new CountDownTimer(mMinutes * 60000, 1000) {
            public void onTick(long millisUntilFinished) {
                  if(millisUntilFinished <= 20000) {
                    mMp.start();
                  }
                  mTimerView.setText(mFormat.format(millisUntilFinished));
                }

                public void onFinish() {
                  mMp.stop();
                  mTimerView.setText("done!");
                  if(mActiveTeam == 2) {
                      mTeam1ScoreView.setText(Integer.toString(++mTeam1Score));
                      if(mTeam1Score == 7) {
                        mTimer.cancel();
                        showDialog(DIALOG_WINNER);
                      } else {
                       showDialog(DIALOG_TIME_UP);
                      }
                    } else {
                      mTeam2ScoreView.setText(Integer.toString(++mTeam2Score));
                      if(mTeam2Score == 7) {
                       mTimer.cancel();
                       showDialog(DIALOG_WINNER);
                       } else {
                         showDialog(DIALOG_TIME_UP);
                       }
                    }
                }
            };
           mTimer.start();
        }
  }

  /**
   * TODO: PAUSE TIMER
   */
  @Override
  protected void onPause() {
    super.onPause();

    mMp.pause();
  }

  @Override
  protected void onStop() {
    super.onStop();

    //mMp.setVolume(0, 0);
    mMp.stop();
  }

  @Override
  protected void onDestroy() {
    super.onDestroy();

    mTimer.cancel();
  }

  public void onClickListener(View target) {
      switch(target.getId()) {
        case R.id.play_next_word:
          mCursor = mDbAdapter.getRandomFromCategory(mCategoryId);
              startManagingCursor(mCursor);
              mCursor.moveToFirst();

              /**
               * Test if the word has been used before during this round.
               */
              wordId = mCursor.getInt(mCursor.getColumnIndex(WordsDbAdapter.KEY_ID));
              while(mUsedWords.contains(wordId)) {
                if(mUsedWords.size() > 100) {
                  showDialog(DIALOG_WORD_LIMIT);
                  return;
                }
                mCursor.close();
                mCursor = mDbAdapter.getRandomFromCategory(mCategoryId);
                mCursor.moveToFirst();
                wordId = mCursor.getInt(mCursor.getColumnIndex(WordsDbAdapter.KEY_ID));
              }

              startManagingCursor(mCursor);

              mUsedWords.add(wordId);

              mCategoryWord.setText(mCursor.getString(mCursor.getColumnIndex(WordsDbAdapter.KEY_WORD)));
              if(mActiveTeam == 1) {
                mActiveTeam = 2;
                mTeam2ScoreView.setTextColor(Color.GREEN);
                mTeam1ScoreView.setTextColor(Color.WHITE);

                mTeam2TextView.setTextColor(Color.GREEN);
                mTeam1TextView.setTextColor(Color.WHITE);
              } else {
                mActiveTeam = 1;
                mTeam1ScoreView.setTextColor(Color.GREEN);
                mTeam2ScoreView.setTextColor(Color.WHITE);

                mTeam1TextView.setTextColor(Color.GREEN);
                mTeam2TextView.setTextColor(Color.WHITE);
              }
        break;
        default:
          break;
      }
    }

  @Override
  public boolean onTouchEvent(MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_DOWN) {
          
        }
    return true;
  }

  @Override
  protected Dialog onCreateDialog(int id) {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    String team = (mActiveTeam == 1) ? "Two" : "One";

      switch(id) {
        case DIALOG_TIME_UP:
          team = (mActiveTeam == 1) ? "Two" : "One";
          builder
            .setCancelable(false)
          .setTitle("Times up!")
          .setMessage("Team "+ team +" gained a point!")
          .setNeutralButton("Ok", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
              mTimerView.setText(mMinutes +":00");
              mTimer.start();
              dialog.dismiss();
            }
          });
      return builder.create();
        case DIALOG_WINNER:
          builder
            .setCancelable(false)
          .setTitle("Winner!")
          .setMessage("Team "+ team +" won!  Do you want to play again?")
          .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
              mTeam1Score = 0;
              mTeam2Score = 0;
              mTeam1ScoreView.setText("0");
              mTeam2ScoreView.setText("0");
  
              mTimerView.setText(mMinutes +":00");
              mTimer.start();
              mUsedWords = new ArrayList<Integer>();
              dialog.dismiss();
            }
          })
          .setNegativeButton("No", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
              finish();
            }
          });
          return builder.create();
        case DIALOG_WORD_LIMIT:
          mTimer.cancel();
          mMp.stop();

          builder
            .setCancelable(false)
          .setTitle("Limit reached")
          .setMessage("You have reached the word limit for one round.  "+ team +" wins! \n\nDo you want to play again?")
          .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
              mTeam1Score = 0;
              mTeam2Score = 0;
              mTeam1ScoreView.setText("0");
              mTeam2ScoreView.setText("0");
  
              mTimerView.setText(mMinutes +":00");
              mTimer.start();
              mUsedWords = new ArrayList<Integer>();
              dialog.dismiss();
            }
          })
          .setNegativeButton("No", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
              finish();
            }
          });
        return builder.create();
        default:
          return null;
      }
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.