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 |