package edu.mit.mitmobile2.shuttles;
import java.util.List;
import uk.co.senab.actionbarpulltorefresh.library.PullToRefreshAttacher;
import uk.co.senab.actionbarpulltorefresh.library.PullToRefreshAttacher.OnRefreshListener;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.Spannable;
import android.text.Spannable.Factory;
import android.text.style.TextAppearanceSpan;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.TextView.BufferType;
import edu.mit.mitmobile2.CommonActions;
import edu.mit.mitmobile2.FullScreenLoader;
import edu.mit.mitmobile2.MobileWebApi;
import edu.mit.mitmobile2.NewModule;
import edu.mit.mitmobile2.NewModuleActivity;
import edu.mit.mitmobile2.R;
import edu.mit.mitmobile2.TwoLineActionRow;
import edu.mit.mitmobile2.objs.RouteItem;
import edu.mit.mitmobile2.shuttles.ShuttleRouteArrayAdapter.SectionListItemView;
public class ShuttlesActivity extends NewModuleActivity implements OnRefreshListener {
private static final String TAG = "ShuttlesActivity";
Context ctx;
ListView routeListView;
ShuttleRouteArrayAdapter adapter;
private View mFooterView;
private FullScreenLoader shuttleRouteLoader;
private PullToRefreshAttacher mPullToRefreshAttacher;
static final int MENU_HOME = Menu.FIRST;
static final int MENU_CALL_SAFERIDE = Menu.FIRST+1;
static final int MENU_CALL_PARKING = Menu.FIRST+2;
static final int MENU_REFRESH = Menu.FIRST+3;
/****************************************************/
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.d(TAG,"onCreate()");
super.onCreate(savedInstanceState);
ctx = this;
createView();
}
/****************************************************/
void createView() {
setContentView(R.layout.shuttles);
routeListView = (ListView) findViewById(R.id.routeLV);
shuttleRouteLoader = (FullScreenLoader) findViewById(R.id.shuttleRoutesLoader);
Factory spanFactory = Spannable.Factory.getInstance();
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mFooterView = inflater.inflate(R.layout.shuttle_footer, null);
TwoLineActionRow actionRow = (TwoLineActionRow) mFooterView.findViewById(R.id.shuttleParkingTV);
Spannable span = spanFactory.newSpannable("Parking Office (617.258.6510)");
span.setSpan(new TextAppearanceSpan(this, R.style.ListItemPrimary),
0, 14, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
span.setSpan(new TextAppearanceSpan(this, R.style.ListItemSecondary),
14, span.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
actionRow.setTitle(span, BufferType.SPANNABLE);
actionRow.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:6172586510"));
startActivity(intent);
}
});
actionRow = (TwoLineActionRow) mFooterView.findViewById(R.id.shuttleSaferideTV);
span = spanFactory.newSpannable("Saferide (617.253.2997)");
span.setSpan(new TextAppearanceSpan(this, R.style.ListItemPrimary),
0, 8, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
span.setSpan(new TextAppearanceSpan(this, R.style.ListItemSecondary),
8, span.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
actionRow.setTitle(span, BufferType.SPANNABLE);
actionRow.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:6172532997"));
startActivity(intent);
}
});
// add the external transit links
mFooterView.findViewById(R.id.shuttleMbtaBusTimes).setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
CommonActions.viewURL(ctx, "http://www.nextbus.com/webkit");
}
}
);
mFooterView.findViewById(R.id.shuttleMbtaTrainTimes).setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
CommonActions.viewURL(ctx, "http://www.mbtainfo.com");
}
}
);
mFooterView.findViewById(R.id.shuttleGoogleTransit).setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
CommonActions.viewURL(ctx, "http://www.google.com/transit");
}
}
);
routeListView.addFooterView(mFooterView);
mPullToRefreshAttacher = createPullToRefreshAttacher();
mPullToRefreshAttacher.setRefreshableView(routeListView, this);
mPullToRefreshAttacher.setEnabled(false);
getData(false);
}
/****************************************************/
void updateView() {
shuttleRouteLoader.setVisibility(View.GONE);
List<RouteItem> dayRoutes = ShuttleModel.getRoutes(false);
List<RouteItem> nightRoutes = ShuttleModel.getRoutes(true);
SectionListItemView itemBuilder = new SectionListItemView() {
@Override
public View getView(Object item, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.shuttles_row, null);
}
RouteItem routeItem = (RouteItem) item;
TextView routeTV = (TextView) v.findViewById(R.id.shuttleRowRouteTV);
routeTV.setText(routeItem.title);
ImageView routeIV = (ImageView) v.findViewById(R.id.shuttleRowRouteIV);
if (routeItem.isRunning) {
routeIV.setImageResource(R.drawable.shuttle);
} else {
routeIV.setImageResource(R.drawable.shuttle_off);
}
return v;
}
};
ShuttleRouteArrayAdapter adapter = new ShuttleRouteArrayAdapter(this, itemBuilder);
adapter.addSection(getString(R.string.daytime_shuttle), dayRoutes);
adapter.addSection(getString(R.string.nighttime_shuttle), nightRoutes);
routeListView.setVisibility(View.VISIBLE);
routeListView.setAdapter(adapter);
OnItemClickListener listener = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
if (view == mFooterView) return;
Integer routeInt = (Integer) view.getTag();
Intent i = new Intent(ctx, MITRoutesSliderActivity.class);
i.putExtra(MITRoutesSliderActivity.KEY_POSITION, routeInt);
startActivity(i);
}
};
routeListView.setOnItemClickListener(listener);
mPullToRefreshAttacher.setEnabled(true);
}
/****************************************************/
protected void getData(boolean forceRefresh) {
if (!forceRefresh) {
shuttleRouteLoader.setVisibility(View.VISIBLE);
shuttleRouteLoader.showLoading();
routeListView.setVisibility(View.GONE);
}
// this Handler will run on this thread (UI)
final Handler myHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
mPullToRefreshAttacher.setRefreshComplete();
if(msg.arg1 == MobileWebApi.SUCCESS) {
updateView();
} else {
shuttleRouteLoader.showError();
}
}
};
ShuttleModel.fetchRoutes(ctx, myHandler, forceRefresh);
}
/****************************************************/
@Override
public boolean isModuleHomeActivity() {
return true;
}
@Override
protected NewModule getNewModule() {
return new ShuttlesModule();
}
@Override
protected boolean isScrollable() {
return false;
}
@Override
public void onRefreshStarted(View view) {
getData(true);
}
@Override
protected void onOptionSelected(String optionId) { }
}