Subversion Repositories AndroidProjects

Rev

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

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