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 |