Subversion Repositories AndroidProjects

Rev

Rev 22 | Blame | Compare with Previous | Last modification | View Log | RSS feed

package com.gebauz.ZhuyinQuiz;

import java.util.Timer;
import java.util.TimerTask;

import com.google.ads.AdRequest;
import com.google.ads.AdSize;
import com.google.ads.AdView;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.DialogInterface.OnDismissListener;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;

public class QuizActivity extends Activity
{
        private AdView mAdView;
       
        private int mQuizMode = -1;
        private int mQuizCharacters = -1;
        private int mAnswerCharacters = -1;
       
        private ZhuyinTable mZhuyinTable = null;
       
        private GridAdapter mGridButtonAdapter = null;
       
        int mCurrentQuizItem = 0;
        int mCorrectAnswers = 0;
        int mTotalAnswers = 0;

        @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.quiz);
       
        // Create the adView
        mAdView = new AdView(this, AdSize.BANNER, Constants.ADMOB_PUBLISHER_ID);

        // Lookup your LinearLayout assuming itÂ’s been given
        // the attribute android:id="@+id/mainLayout"
        LinearLayout layout = (LinearLayout)findViewById(R.id.mainLayout);

        // Add the adView to it
        layout.addView(mAdView);

        // Initiate a generic request to load it with an ad
        mAdView.loadAd(new AdRequest());
       
        Bundle bundle = this.getIntent().getExtras();
        mQuizMode = bundle.getInt("mode");
        mQuizCharacters = bundle.getInt("quiz");
        mAnswerCharacters = bundle.getInt("input");
       
        if (mQuizMode == Constants.MODE_PINYIN)
                setTitle(R.string.pinyin_mode);
        else if (mQuizMode == Constants.MODE_ZHUYIN)
                setTitle(R.string.zhuyin_mode);
       
        mZhuyinTable = new ZhuyinTable(mQuizCharacters);
       
        mGridButtonAdapter = new GridAdapter(this, mZhuyinTable, mQuizMode, mAnswerCharacters);

        GridView gridview = (GridView)findViewById(R.id.gridview);
        gridview.setAdapter(mGridButtonAdapter);
        gridview.setOnItemClickListener(mItemClickListener);
       
        nextQuizItem();
    }
       
    @Override
    public void onDestroy()
    {
        mAdView.destroy();
        super.onDestroy();
    }
       
    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.appmenu, menu);
        return true;
    }
       
    @Override
    public boolean onOptionsItemSelected(MenuItem item)
    {
        // Handle item selection
        switch (item.getItemId())
        {
        case R.id.zhuyin_table:
                showZhuyinTable();
            return true;
        case R.id.about:
                showAbout();
            return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }
   
    public void showZhuyinTable()
    {
        Intent intent = new Intent(this, ZhuyinTableActivity.class);
        startActivityForResult(intent, 0);     
    }
   
    public void showAbout()
    {
        Intent intent = new Intent(this, AboutActivity.class);
        startActivityForResult(intent, 0);
    }
       
        private OnItemClickListener mItemClickListener = new OnItemClickListener()
        {
            public void onItemClick(AdapterView<?> parent, View v, int position, long id)
            {
                /*Log.d(Constants.LOG_TAG,"Position Clicked [" + position + "] with item id [" +
                                mGridButtonAdapter.getActualPinyin(position) + "=" + mGridButtonAdapter.getActualZhuyin(position) +
                                "] - current quiz item: " + mCurrentQuizItem);*/


                mTotalAnswers++;
                if (mCurrentQuizItem == position)
                {
                        mCorrectAnswers++;
                        showDialog(Constants.DIALOG_CORRECT);
                }
                else
                {
                        showDialog(Constants.DIALOG_INCORRECT);
                }
            }      
        };
       
        @Override
        protected Dialog onCreateDialog(int id)
        {
            switch(id)
            {
            case Constants.DIALOG_CORRECT:
            case Constants.DIALOG_INCORRECT:
                return createAnswerDialog(id);
            default:
                return null;
            }
        }
       
        @Override
        protected void onPrepareDialog(int id, final Dialog dialog)
        {
                long timeOut = 1500;
               
                TextView text = (TextView)dialog.findViewById(R.id.text);
                TextView textAnswer = (TextView)dialog.findViewById(R.id.text_answer);
                               
                switch (id)
                {
                case Constants.DIALOG_CORRECT:
                        text.setText(R.string.answer_correct);
                        break;          
                case Constants.DIALOG_INCORRECT:
                        timeOut = 3000;
                        text.setText(R.string.answer_incorrect);
                        break;
                }
               
                if (mQuizMode == Constants.MODE_PINYIN)
                {
                        textAnswer.setText(mGridButtonAdapter.getActualPinyin(mCurrentQuizItem) + " " +
                                        mGridButtonAdapter.getActualExtraPronounciation(mCurrentQuizItem) + " = " +
                                        mGridButtonAdapter.getActualZhuyin(mCurrentQuizItem));
                }
                else if (mQuizMode == Constants.MODE_ZHUYIN)
                {
                        textAnswer.setText(mGridButtonAdapter.getActualZhuyin(mCurrentQuizItem) + " = " +
                                        mGridButtonAdapter.getActualPinyin(mCurrentQuizItem) + " " +
                                        mGridButtonAdapter.getActualExtraPronounciation(mCurrentQuizItem));
                }
               
                dialog.setCancelable(false);
                dialog.setOnDismissListener(mDialogDismissListener);
                final Timer t = new Timer();
            t.schedule(
                        new TimerTask()
                        {
                                public void run()
                                {
                                        dialog.dismiss();
                                        t.cancel();
                                }
                        },
                        timeOut);
        }      
       
        protected Dialog createAnswerDialog(int id)
        {
                AlertDialog.Builder builder;
                AlertDialog alertDialog;

                LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
                View layout = inflater.inflate(R.layout.answer,
                                               (ViewGroup) findViewById(R.id.layout_root));

                ImageView icon = (ImageView)layout.findViewById(R.id.correct_image);
               
                if (id == Constants.DIALOG_CORRECT)
                        icon.setImageResource(R.drawable.correct);
                else
                        icon.setImageResource(R.drawable.incorrect);
               
                builder = new AlertDialog.Builder(this);
                builder.setView(layout);
                alertDialog = builder.create();
                       
                return alertDialog;
        }
       
        private OnDismissListener mDialogDismissListener = new OnDismissListener()
        {
//              @Override
                public void onDismiss(DialogInterface dialog)
                {
                        nextQuizItem();
                }
        };     
       
        private void nextQuizItem()
        {
                mCurrentQuizItem = mGridButtonAdapter.nextRandomItem();
               
                mGridButtonAdapter.jumbleButtons(true);
                mGridButtonAdapter.notifyDataSetChanged();
               
                String displayText = "";
                switch (mQuizMode)
                {
                case Constants.MODE_PINYIN:
                        displayText = mGridButtonAdapter.getActualPinyin(mCurrentQuizItem);
                        if (mGridButtonAdapter.getActualExtraPronounciation(mCurrentQuizItem).length() > 0)
                                displayText = displayText + " " + mGridButtonAdapter.getActualExtraPronounciation(mCurrentQuizItem);
                        break;
                case Constants.MODE_ZHUYIN:
                        displayText = mGridButtonAdapter.getActualZhuyin(mCurrentQuizItem);
                        break;
                }
               
                TextView textView = (TextView)findViewById(R.id.characterAsked);
                textView.setText(displayText);
               
                float percentage = 0.0f;
                if (mTotalAnswers > 0)
                        percentage = (float)mCorrectAnswers / (float)mTotalAnswers;
               
                TextView statusText = (TextView)findViewById(R.id.statusText);
                String correctAnswers = getString(R.string.num_correct_answers);
                statusText.setText(String.format(correctAnswers, mCorrectAnswers, mTotalAnswers, percentage*100));
        }
}