package edu.mit.mitmobile2.dining; import java.util.ArrayList; import java.util.List; import java.util.Map; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.widget.TabHost; import edu.mit.mitmobile2.NewModule; import edu.mit.mitmobile2.NewModuleActivity; import edu.mit.mitmobile2.TabConfigurator; import edu.mit.mitmobile2.dining.DiningModel.DiningHall; import edu.mit.mitmobile2.dining.DiningModel.DiningHallLocation; import edu.mit.mitmobile2.dining.DiningModel.DiningVenues; import edu.mit.mitmobile2.maps.MITMapView; import edu.mit.mitmobile2.R; public class DiningMapActivity extends NewModuleActivity implements TabHost.OnTabChangeListener{ public static final String sHouseTab = "HOUSE DINING"; public static final String sRetailTab = "RETAIL"; private MITMapView mMapView; TabHost mTabHost; private DiningVenues mDiningVenues; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.dining_map); mDiningVenues = DiningModel.getDiningVenues(); if (mDiningVenues == null) { // fail gracefully finish(); return; } mTabHost = (TabHost) findViewById(R.id.diningMapTabHost); mTabHost.setup(); TabConfigurator tabConfigurator = new TabConfigurator(this, mTabHost); tabConfigurator.addTab(sHouseTab, android.R.id.tabcontent); tabConfigurator.addTab(sRetailTab, android.R.id.tabcontent); tabConfigurator.setUnderlineColor(getResources().getColor(R.color.diningTabUnderline)); tabConfigurator.setTextStyleResID(R.style.DiningTabTitle); tabConfigurator.configureTabs(); mTabHost.setOnTabChangedListener(this); mMapView = (MITMapView) findViewById(R.id.diningMapView); String tabIndex = getIntent().getStringExtra(DiningHomeActivity.SELECTED_TAB); mTabHost.setCurrentTabByTag(tabIndex); onTabChanged(mTabHost.getCurrentTabTag()); } // onTabChangedListener @Override public void onTabChanged(String tabId) { Log.d("TAB", "Tab changed to id : " + tabId); mMapView.clearMapItems(); if (tabId.equals(sHouseTab)) { annotateHouseVenues(); } else if (tabId.equals(sRetailTab)) { annotateRetailVenues(); } if (mMapView.isLoaded()) { mMapView.syncGraphicsLayers(); } } private void annotateHouseVenues() { boolean needsRecenter = false; for (DiningHall hall : mDiningVenues.getHouses()) { DiningHallLocation location = hall.getLocation(); if (location.getMapPoints().size() > 0) { mMapView.addMapItem(location); needsRecenter = true; } } if (needsRecenter) { mMapView.fitMapItems(); } } private void annotateRetailVenues() { mMapView.pause(); boolean needsRecenter = false; Map<String, List<? extends DiningHall>> retailVenues = mDiningVenues.getRetail(); for (String buildingID : mDiningVenues.getRetailBuildingNumbers()) { for (DiningHall hall : retailVenues.get(buildingID)) { DiningHallLocation location = hall.getLocation(); if (location.getMapPoints().size() > 0) { mMapView.addMapItem(location); needsRecenter = true; } } } if (needsRecenter) { mMapView.fitMapItems(); } mMapView.unpause(); } @Override public void onBackPressed() { Intent returnIntent = new Intent(); returnIntent.putExtra(DiningHomeActivity.SELECTED_TAB, mTabHost.getCurrentTabTag()); setResult(RESULT_OK, returnIntent); finish(); } @Override protected NewModule getNewModule() { return new DiningModule(); } @Override protected boolean isScrollable() { return false; } @Override protected List<String> getMenuItemBlackList() { ArrayList<String> list = new ArrayList<String>(); list.add(DiningModule.FILTER_ITEM_ID); list.add(DiningModule.MAPVIEW_ITEM_ID); return list; } @Override protected void onOptionSelected(String optionId) { if (optionId.equals(DiningModule.LISTVIEW_ITEM_ID)) { onBackPressed(); } } @Override protected boolean isModuleHomeActivity() { return false; } }