Subversion Repositories AndroidProjects

Rev

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

package com.gebauz.KanaQuiz;

import java.util.Random;

import android.content.Context;
import android.graphics.Color;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.TextView;

public class GridAdapter extends BaseAdapter
{
    private Context mContext;
    private KanaTable mKanaTable;
    private int mQuizMode = -1;
    private int mAnswerCharacters = -1;
       
    private Random mRandomizer = new Random();
    private int[] mJumbledIds;
   
    public GridAdapter(Context c, KanaTable table, int quizMode, int answerCharacters)
    {
        mContext = c;
        mKanaTable = table;
        mQuizMode = quizMode;
        mAnswerCharacters = answerCharacters;
       
        mJumbledIds = new int[mKanaTable.getCount()];
       
        jumbleButtons(false);
    }
   
    public void jumbleButtons(boolean doJumble)
    {
        for (int i = 0; i < mJumbledIds.length; i++)
        {
                mJumbledIds[i] = i;
        }
       
        if (doJumble)
        {
                // Fisher-Yates shuffle algorithm
                        for (int i = (mJumbledIds.length-1); i > 0; i--)
                        {
                                int j = mRandomizer.nextInt(i);
                                int temp = mJumbledIds[j];
                                mJumbledIds[j] = mJumbledIds[i];
                                mJumbledIds[i] = temp;
                        }
        }
    }
   
    public int getActualItem(int position)
    {
        return mJumbledIds[position];
    }
   
    public String getActualExtraPronounciation(int position)
    {
        return mKanaTable.getExtraPronounciation(getActualItem(position));
    }
   
    public String getActualKana(int position)
    {
        return mKanaTable.getKana(getActualItem(position));
    }

    public String getActualRomaji(int position)
    {
        return mKanaTable.getRomaji(getActualItem(position));
    }
   
    public int nextRandomItem()
    {
        if (mAnswerCharacters == Constants.INPUT_SMALL)
                return mRandomizer.nextInt(Constants.INPUT_SMALL_COUNT);
        return mRandomizer.nextInt(mKanaTable.getCount());
    }
   
    public int getCount()
    {
        if (mAnswerCharacters == Constants.INPUT_SMALL)
                return Constants.INPUT_SMALL_COUNT;
       
        return mKanaTable.getCount();
    }

    public Object getItem(int position)
    {
        return null;
    }

    public long getItemId(int position)
    {
        return 0;
    }
   
    // create a new ImageView for each item referenced by the Adapter
    public View getView(int position, View convertView, ViewGroup parent)
    {
        TextView button;
        if (convertView == null)
        {
                // if it's not recycled, initialize some attributes
                button = new TextView(mContext);
               
                final float scale = mContext.getResources().getDisplayMetrics().density;
                int buttonSize = (int) (Constants.GRID_BUTTON_SIZE_DIP * scale + 0.5f);
               
                button.setLayoutParams(new GridView.LayoutParams(buttonSize, buttonSize));
                button.setPadding(8, 8, 8, 8);
                button.setTextColor(Color.WHITE);
                button.setBackgroundColor(Constants.GRID_BACKGROUND_COLOR);
                button.setGravity(Gravity.CENTER);
        }
        else
        {
                button = (TextView)convertView;
        }
       
        int actualItem = getActualItem(position);
               
        String textItem = "-";
        switch (mQuizMode)
        {
        case Constants.MODE_ROMAJI:
                // need zhuyin table in pinyin quiz mode
                textItem = mKanaTable.getKana(actualItem);
                break;
        case Constants.MODE_KANA:
                // need pinyin table in zhuyin quiz mode
                textItem = mKanaTable.getRomaji(actualItem);
                if (mKanaTable.getExtraPronounciation(actualItem).length() > 0)
                        textItem = textItem + "\n" + mKanaTable.getExtraPronounciation(actualItem);
                break;
        }
       
        // make text size smaller for longer texts
        if (textItem.length() > 4)
                button.setTextSize(Constants.GRID_TEXT_SIZE_LONG_ITEM);
        else
                button.setTextSize(Constants.GRID_TEXT_SIZE_SHORT_ITEM);
       
        button.setText(textItem);
        return button;
    }
}