Subversion Repositories AndroidProjects

Rev

Rev 28 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
25 chris 1
package com.gebauz.KanaQuiz;
2
 
3
import java.util.Timer;
4
import java.util.TimerTask;
5
 
6
import com.google.ads.AdRequest;
7
import com.google.ads.AdSize;
8
import com.google.ads.AdView;
9
 
10
import android.app.Activity;
11
import android.app.AlertDialog;
12
import android.app.Dialog;
13
import android.content.DialogInterface;
14
import android.content.DialogInterface.OnDismissListener;
15
import android.os.Bundle;
16
import android.view.LayoutInflater;
17
import android.view.Menu;
18
import android.view.MenuInflater;
19
import android.view.MenuItem;
20
import android.view.View;
21
import android.view.ViewGroup;
22
import android.widget.AdapterView;
23
import android.widget.GridView;
24
import android.widget.ImageView;
25
import android.widget.LinearLayout;
26
import android.widget.TextView;
27
import android.widget.AdapterView.OnItemClickListener;
28
 
29
public class QuizActivity extends Activity
30
{
31
        private AdView mAdView;
32
 
33
        private int mQuizMode = -1;
34
        private int mQuizCharacters = -1;
35
        private int mAnswerCharacters = -1;
36
 
37
        private KanaTable mZhuyinTable = null;
38
 
39
        private GridAdapter mGridButtonAdapter = null;
40
 
41
        int mCurrentQuizItem = 0;
42
        int mCorrectAnswers = 0;
43
        int mTotalAnswers = 0;
44
 
45
        @Override
46
    public void onCreate(Bundle savedInstanceState)
47
    {
48
        super.onCreate(savedInstanceState);
49
        setContentView(R.layout.quiz);
50
 
51
        // Create the adView
52
        mAdView = new AdView(this, AdSize.BANNER, Constants.ADMOB_PUBLISHER_ID);
53
 
54
        // Lookup your LinearLayout assuming it’s been given
55
        // the attribute android:id="@+id/mainLayout"
56
        LinearLayout layout = (LinearLayout)findViewById(R.id.mainLayout);
57
 
58
        // Add the adView to it
34 chris 59
        layout.addView(mAdView);
25 chris 60
 
61
        // Initiate a generic request to load it with an ad
34 chris 62
        mAdView.loadAd(new AdRequest());
25 chris 63
 
64
        Bundle bundle = this.getIntent().getExtras();
65
        mQuizMode = bundle.getInt("mode");
66
        mQuizCharacters = bundle.getInt("quiz");
67
        mAnswerCharacters = bundle.getInt("input");
68
 
69
        if (mQuizMode == Constants.MODE_ROMAJI)
70
                setTitle(R.string.romaji_mode);
71
        else if (mQuizMode == Constants.MODE_KANA)
72
                setTitle(R.string.kana_mode);
73
 
74
        mZhuyinTable = new KanaTable(mQuizCharacters);
75
 
76
        mGridButtonAdapter = new GridAdapter(this, mZhuyinTable, mQuizMode, mAnswerCharacters);
77
 
78
        GridView gridview = (GridView)findViewById(R.id.gridview);
79
        gridview.setAdapter(mGridButtonAdapter);
80
        gridview.setOnItemClickListener(mItemClickListener);
81
 
82
        nextQuizItem();
83
    }
84
 
85
    @Override
86
    public void onDestroy()
87
    {
88
        mAdView.destroy();
89
        super.onDestroy();
90
    }
91
 
92
    @Override
93
    public boolean onCreateOptionsMenu(Menu menu)
94
    {
95
        MenuInflater inflater = getMenuInflater();
96
        inflater.inflate(R.menu.appmenu, menu);
97
        return true;
98
    }
99
 
100
    @Override
101
    public boolean onOptionsItemSelected(MenuItem item)
102
    {
103
        // Handle item selection
104
        switch (item.getItemId())
105
        {
28 chris 106
        case R.id.katakana_table:
107
                KanaTableActivity.show(this, Constants.QUIZ_KATAKANA);
108
                return true;
109
        case R.id.hiragana_table:
110
                KanaTableActivity.show(this, Constants.QUIZ_HIRAGANA);
25 chris 111
            return true;
112
        case R.id.about:
28 chris 113
                AboutActivity.show(this);
25 chris 114
            return true;
115
        default:
116
            return super.onOptionsItemSelected(item);
117
        }
118
    }
28 chris 119
 
25 chris 120
        private OnItemClickListener mItemClickListener = new OnItemClickListener()
121
        {
122
            public void onItemClick(AdapterView<?> parent, View v, int position, long id)
123
            {
124
                /*Log.d(Constants.LOG_TAG,"Position Clicked [" + position + "] with item id [" +
125
                                mGridButtonAdapter.getActualPinyin(position) + "=" + mGridButtonAdapter.getActualZhuyin(position) +
126
                                "] - current quiz item: " + mCurrentQuizItem);*/
127
 
128
                mTotalAnswers++;
129
                if (mCurrentQuizItem == position)
130
                {
131
                        mCorrectAnswers++;
132
                        showDialog(Constants.DIALOG_CORRECT);
133
                }
134
                else
135
                {
136
                        showDialog(Constants.DIALOG_INCORRECT);
137
                }
138
            }      
139
        };
140
 
141
        @Override
142
        protected Dialog onCreateDialog(int id)
143
        {
144
            switch(id)
145
            {
146
            case Constants.DIALOG_CORRECT:
147
            case Constants.DIALOG_INCORRECT:
148
                return createAnswerDialog(id);
149
            default:
150
                return null;
151
            }
152
        }
153
 
154
        @Override
155
        protected void onPrepareDialog(int id, final Dialog dialog)
156
        {
157
                long timeOut = 1500;
158
 
159
                TextView text = (TextView)dialog.findViewById(R.id.text);
160
                TextView textAnswer = (TextView)dialog.findViewById(R.id.text_answer);
161
 
162
                switch (id)
163
                {
164
                case Constants.DIALOG_CORRECT:
165
                        text.setText(R.string.answer_correct);
166
                        break;          
167
                case Constants.DIALOG_INCORRECT:
168
                        timeOut = 3000;
169
                        text.setText(R.string.answer_incorrect);
170
                        break;
171
                }
172
 
173
                if (mQuizMode == Constants.MODE_ROMAJI)
174
                {
175
                        textAnswer.setText(mGridButtonAdapter.getActualRomaji(mCurrentQuizItem) + " " +
176
                                        mGridButtonAdapter.getActualExtraPronounciation(mCurrentQuizItem) + " = " +
177
                                        mGridButtonAdapter.getActualKana(mCurrentQuizItem));
178
                }
179
                else if (mQuizMode == Constants.MODE_KANA)
180
                {
181
                        textAnswer.setText(mGridButtonAdapter.getActualKana(mCurrentQuizItem) + " = " +
182
                                        mGridButtonAdapter.getActualRomaji(mCurrentQuizItem) + " " +
183
                                        mGridButtonAdapter.getActualExtraPronounciation(mCurrentQuizItem));
184
                }
185
 
186
                dialog.setCancelable(false);
187
                dialog.setOnDismissListener(mDialogDismissListener);
188
                final Timer t = new Timer();
189
            t.schedule(
190
                        new TimerTask()
191
                        {
192
                                public void run()
193
                                {
194
                                        dialog.dismiss();
195
                                        t.cancel();
196
                                }
197
                        },
198
                        timeOut);
199
        }      
200
 
201
        protected Dialog createAnswerDialog(int id)
202
        {
203
                AlertDialog.Builder builder;
204
                AlertDialog alertDialog;
205
 
206
                LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
207
                View layout = inflater.inflate(R.layout.answer,
208
                                               (ViewGroup) findViewById(R.id.layout_root));
209
 
210
                ImageView icon = (ImageView)layout.findViewById(R.id.correct_image);
211
 
212
                if (id == Constants.DIALOG_CORRECT)
213
                        icon.setImageResource(R.drawable.correct);
214
                else
215
                        icon.setImageResource(R.drawable.incorrect);
216
 
217
                builder = new AlertDialog.Builder(this);
218
                builder.setView(layout);
219
                alertDialog = builder.create();
220
 
221
                return alertDialog;
222
        }
223
 
224
        private OnDismissListener mDialogDismissListener = new OnDismissListener()
225
        {
226
//              @Override
227
                public void onDismiss(DialogInterface dialog)
228
                {
229
                        nextQuizItem();
230
                }
231
        };     
232
 
233
        private void nextQuizItem()
234
        {
235
                mCurrentQuizItem = mGridButtonAdapter.nextRandomItem();
236
 
237
                mGridButtonAdapter.jumbleButtons(true);
238
                mGridButtonAdapter.notifyDataSetChanged();
239
 
240
                String displayText = "";
241
                switch (mQuizMode)
242
                {
243
                case Constants.MODE_ROMAJI:
244
                        displayText = mGridButtonAdapter.getActualRomaji(mCurrentQuizItem);
245
                        if (mGridButtonAdapter.getActualExtraPronounciation(mCurrentQuizItem).length() > 0)
246
                                displayText = displayText + " " + mGridButtonAdapter.getActualExtraPronounciation(mCurrentQuizItem);
247
                        break;
248
                case Constants.MODE_KANA:
249
                        displayText = mGridButtonAdapter.getActualKana(mCurrentQuizItem);
250
                        break;
251
                }
252
 
253
                TextView textView = (TextView)findViewById(R.id.characterAsked);
254
                textView.setText(displayText);
255
 
256
                float percentage = 0.0f;
257
                if (mTotalAnswers > 0)
258
                        percentage = (float)mCorrectAnswers / (float)mTotalAnswers;
259
 
260
                TextView statusText = (TextView)findViewById(R.id.statusText);
261
                String correctAnswers = getString(R.string.num_correct_answers);
262
                statusText.setText(String.format(correctAnswers, mCorrectAnswers, mTotalAnswers, percentage*100));
263
        }
264
}
265
 
266