MarketSelection.java :  » App » betonthemove » org » betonthemove » ui » android » Android Open Source

Android Open Source » App » betonthemove 
betonthemove » org » betonthemove » ui » android » MarketSelection.java
/*
 * Copyright 2009 Gary Brown
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 *
 * Change History:
 * 7 Mar 2009 : Initial version created by gary
 */
package org.betonthemove.ui.android;

import org.betonthemove.platform.BettingPlatform;
import org.betonthemove.platform.BettingPlatformFactory;
import org.betonthemove.platform.Market;
import org.betonthemove.platform.MarketGroup;

import android.app.Dialog;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Configuration;

public class MarketSelection extends ListActivity
              implements Runnable {

  //private static final int MAX_MARKET_ENTRANTS = 500;
  private static final String SEVENDAYS_PREF_VALUE = "sevendays";
  private static final String THREEDAYS_PREF_VALUE = "threedays";
  private static final String TODAY_PREF_VALUE = "today";
  private static final String TIME_RANGE_PREFERENCE = "time_range";
  private static final String GBR_PREF_VALUE = "GBR";
  private static final String UNLIMITED_PREF_VALUE = "unlimited";
  private static final String COUNTRIES_PREFERENCE = "countries";
  public static final String MARKET_GROUP_ATTR = "org.betonthemove.MarketGroup";

  private static final int WAITING_DIALOG = 1;
    private static final int ERROR_DIALOG = 2;
    private static final int ERROR_MESSAGE_DISPLAY_DELAY = 4000;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    m_eventTypeId = getIntent().getIntExtra(EventTypeSelection.EVENT_TYPE_ID_ATTR, -1);
    m_marketGroup = (MarketGroup)
        getIntent().getSerializableExtra(MARKET_GROUP_ATTR);
    
        java.util.List<String> list=new java.util.Vector<String>();
        
        setListAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, list));
        getListView().setTextFilterEnabled(true);
        
    if (m_marketGroup != null) {
        BettingPlatform platform=BettingPlatformFactory.getBettingPlatform();

        try {
          m_subGroups=platform.getSubGroups(m_marketGroup);
          
        for (int i=0; m_subGroups != null &&
              i < m_subGroups.size(); i++) {
          list.add(m_subGroups.get(i).getName()+" ...");
        }
        
          m_markets=platform.getMarkets(m_marketGroup);
        
        for (int i=0; i < m_markets.size(); i++) {
          String text=m_markets.get(i).getMarketName();
          
          if (m_eventTypeId == 7) {
            // Horse racing
            java.util.Date d=new java.util.Date(m_markets.get(i).getStartDate());
            
            String mins=""+d.getMinutes();
            if (d.getMinutes() < 10) {
              mins = "0"+mins;
            }
            
            text += " ("+d.getHours()+":"+mins+")";
          }
          
          list.add(text);
        }
        } catch(Exception e) {
            m_error = "ERROR: "+e.getLocalizedMessage();
            m_state = 5;
        }
    } else {
      runOnUiThread(this);
    }
    }

    protected void onListItemClick(ListView l, View v, int position, long id) {
        Intent intent = new Intent();
        
        if (m_subGroups == null || position >= m_subGroups.size()) {
          intent.setClass(MarketSelection.this, MarketView.class);
        
          if (m_subGroups != null) {
            position -= m_subGroups.size();
          }
          
          Market market=m_markets.get(position);
          
             intent.putExtra(MarketView.MARKET_ID_ATTR,
              market.getMarketId());
            
             intent.putExtra(EventTypeSelection.EVENT_TYPE_ID_ATTR,
              m_eventTypeId);
            
          intent.putExtra(MarketView.MARKET_NAME_ATTR,
              market.getMarketName());
          
          String category=market.getMenuPath();
          int index=category.lastIndexOf('\\');
          
          if (index != -1) {
            category = category.substring(index+1);
          }
          
          intent.putExtra(MarketView.MARKET_CATEGORY_ATTR,
              category);
          
          intent.putExtra(MarketView.MARKET_START_DATE_ATTR,
              market.getStartDate());
            
          intent.putExtra(MarketView.MARKET_DUE_IN_PLAY_ATTR,
              market.isDueInPlay());
        } else {
          intent.setClass(MarketSelection.this, MarketSelection.class);
          
             intent.putExtra(EventTypeSelection.EVENT_TYPE_ID_ATTR,
              m_eventTypeId);

             intent.putExtra(MarketSelection.MARKET_GROUP_ATTR,
                m_subGroups.get(position));
        }
        
        startActivity(intent);
  }
    
    public void run() {
      
      if (m_state == 0) {
        showDialog(WAITING_DIALOG);
        
        m_state++;
        
        new Thread(this).start();
      } else if (m_state == 1) {

        BettingPlatform platform=BettingPlatformFactory.getBettingPlatform();
        
          try {
            int days=getDaysLookahead();
            java.util.List<String> countries=getCountries();
            
            m_marketGroup=platform.getMarkets(m_eventTypeId, days,
                      countries);
            
            if (m_marketGroup != null) {
            m_subGroups=platform.getSubGroups(m_marketGroup);
            m_markets=platform.getMarkets(m_marketGroup);
              
            /* May need to restrict size of compressed
             * prices that can be processed
             * 
              if (m_marketGroup.getMarketCount() > MAX_MARKET_ENTRANTS) {
                throw new BettingException("Too many markets. You need to adjust preferences " +
                    "to reduce number of markets returned");
              }
              */
            }
            
            m_state++;
            
          } catch(Throwable e) {
            
            if (e instanceof java.lang.OutOfMemoryError) {
              m_error = "ERROR: "+
                "Too many markets. You need to adjust preferences " +
                "to reduce number of markets returned";
            } else {
              m_error = "ERROR: "+e.getLocalizedMessage();
            }
            
            m_state = 5;
          }

          runOnUiThread(this);
      } else if (m_state == 2) {        
      if (m_marketGroup != null) {
        for (int i=0; m_subGroups != null &&
                i < m_subGroups.size(); i++) {
          ((ArrayAdapter<String>)getListAdapter()).add(m_subGroups.get(i).getName()+" ...");
        }
        for (int i=0; m_markets != null &&
                i < m_markets.size(); i++) {
          String text=m_markets.get(i).getMarketName();
          
          if (m_eventTypeId == 7) {
            // Horse racing
            java.util.Date d=new java.util.Date(m_markets.get(i).getStartDate());
            
            String mins=""+d.getMinutes();
            if (d.getMinutes() < 10) {
              mins = "0"+mins;
            }
            
            text += " ("+d.getHours()+":"+mins+")";
          }
          
          ((ArrayAdapter<String>)getListAdapter()).add(text);
        }
        
            dismissDialog(WAITING_DIALOG);
      } else {
        m_error = "No markets currently available "+
              "for this event type";
        
        m_state = 5;
        
        runOnUiThread(this);
      }

      } else if (m_state == 5) {

        dismissDialog(WAITING_DIALOG);
          
          showDialog(ERROR_DIALOG);
          
          m_state++;
          
          new Thread(this).start();
          
      } else if (m_state == 6) {

        try {
          synchronized(this) {
            wait(ERROR_MESSAGE_DISPLAY_DELAY);
          }
        } catch(Exception e) {
          e.printStackTrace();
        }
        
        m_state++;
        
        runOnUiThread(this);
        
      } else if (m_state == 7) {
        
        dismissDialog(ERROR_DIALOG);
        
        m_error = null;
        
        if (m_marketGroup == null) {
          finish();
        } else {
          // Go back to refresh state
          m_state = 2;
          
            runOnUiThread(this);
        }
      }
    }

    @Override
    protected Dialog onCreateDialog(int id) {
        switch (id) {
            case WAITING_DIALOG: {
                ProgressDialog dialog = new ProgressDialog(this);
                dialog.setMessage("Retrieving markets...");
                dialog.setIndeterminate(true);
                dialog.setCancelable(true);
                return dialog;
            }
            case ERROR_DIALOG: {
                ProgressDialog dialog = new ProgressDialog(this);
                dialog.setMessage(m_error);
                dialog.setIndeterminate(true);
                dialog.setCancelable(true);
                return dialog;
            }
        }
        return null;
    }
  
  /* Creates the menu items */
  public boolean onCreateOptionsMenu(Menu menu) {
      return(OptionsMenuSupport.onCreateOptionsMenu(menu));
  }

  /* Handles item selections */
  public boolean onOptionsItemSelected(MenuItem item) {
      return(OptionsMenuSupport.onOptionsItemSelected(MarketSelection.this, item));
  }

  public int getDaysLookahead() {
    int ret=7;
    
    SharedPreferences prefs=PreferenceManager.getDefaultSharedPreferences(this);
    
    if (prefs != null) {
      String timeRange=prefs.getString(TIME_RANGE_PREFERENCE, SEVENDAYS_PREF_VALUE);
  
      if (timeRange.equals(TODAY_PREF_VALUE)) {
        ret = 1;
      } else if (timeRange.equals(THREEDAYS_PREF_VALUE)) {
        ret = 3;
      } else if (timeRange.equals(SEVENDAYS_PREF_VALUE)) {
        ret = 7;
      } else if (timeRange.equals(UNLIMITED_PREF_VALUE)) {
        ret = 0;
      }
    }
    
    return(ret);
  }
  
  public java.util.List<String> getCountries() {
    java.util.List<String> ret=new java.util.Vector<String>();
    
    SharedPreferences prefs=PreferenceManager.getDefaultSharedPreferences(this);
    
    if (prefs != null) {
      String countries=prefs.getString(COUNTRIES_PREFERENCE, GBR_PREF_VALUE);
      
      if (countries.equals(GBR_PREF_VALUE)) {
        ret.add(countries);
      } else if (countries.equals(UNLIMITED_PREF_VALUE)) {
        // Return empty list
      }
    }
  
    return(ret);
  }
  
  public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);    
  }

  private int m_state=0;
    private int m_eventTypeId=0;
    private MarketGroup m_marketGroup=null;
    private java.util.List<MarketGroup> m_subGroups=null;
    private java.util.List<Market> m_markets=null;
  private String m_error=null;
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.