package edu.mit.mitmobile2.events;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.webkit.WebView;
import android.widget.LinearLayout;
import android.widget.TextView;
import edu.mit.mitmobile2.AttributesParser;
import edu.mit.mitmobile2.CommonActions;
import edu.mit.mitmobile2.DividerView;
import edu.mit.mitmobile2.FullScreenLoader;
import edu.mit.mitmobile2.LockingScrollView;
import edu.mit.mitmobile2.MobileWebApi;
import edu.mit.mitmobile2.R;
import edu.mit.mitmobile2.SliderInterface;
import edu.mit.mitmobile2.StyledContentHTML;
import edu.mit.mitmobile2.TwoLineActionRow;
import edu.mit.mitmobile2.objs.EventDetailsItem;
public class EventDetailsView extends LockingScrollView implements SliderInterface {
private Activity mActivity;
private EventDetailsItem mBriefDetails;
private boolean mBriefMode;
private LinearLayout mLinearLayout;
private EventDetailsItem mFullDetails = null;
private FullScreenLoader mLoaderView = null;
private WebView mDescriptionView;
public static final String TAG = "EventDetailsView";
public EventDetailsView(Activity activity, EventDetailsItem briefDetails, boolean briefMode) {
super(activity);
mActivity = activity;
mBriefDetails = briefDetails;
mBriefMode = briefMode;
LayoutInflater inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.event_details, this);
mLinearLayout = (LinearLayout) findViewById(R.id.eventDetailsLinearLayout);
if(briefDetails.description != null && !briefDetails.description.equals("")) {
mFullDetails = mBriefDetails;
}
// configure action buttons
findViewById(R.id.eventDetailsShareButton).setOnClickListener(
new OnClickListener() {
@Override
public void onClick(View v) {
shareEvent();
}
}
);
findViewById(R.id.eventDetailsAddToCalendarButton).setOnClickListener(
new OnClickListener() {
@Override
public void onClick(View v) {
addEvent();
}
}
);
}
public boolean hasLoadingCompleted() {
return (mFullDetails != null) || (mBriefMode);
}
void addEvent() {
Intent intent = new Intent(Intent.ACTION_EDIT);
intent.setType("vnd.android.cursor.item/event");
EventDetailsItem eventDetails = mBriefMode ? mBriefDetails : mFullDetails;
intent.putExtra("beginTime", eventDetails.start * 1000);
intent.putExtra("endTime", eventDetails.end * 1000);
intent.putExtra("title", eventDetails.title);
intent.putExtra("description", eventDetails.description);
if (eventDetails.location.length() > 0) {
intent.putExtra("eventLocation", eventDetails.location);
} else {
intent.putExtra("eventLocation", eventDetails.shortloc);
}
mActivity.startActivity(Intent.createChooser(intent, "Calendar"));
}
void shareEvent() {
EventDetailsItem eventDetails = mBriefMode ? mBriefDetails : mFullDetails;
String url = eventDetails.infourl;
//String url = "http://" + Config.MOBILE_WEB_DOMAIN + "/e/" + IdEncoder.shortenId(eventDetails.id);
CommonActions.shareContent(mActivity, eventDetails.title, eventDetails.description, url);
}
@Override
public void updateView() {
int rowBackgroundColor = mActivity.getResources().getColor(R.color.rowBackground);
TextView titleView = (TextView) findViewById(R.id.eventDetailsTitleTV);
titleView.setText(mBriefDetails.title);
TextView dateView = (TextView) findViewById(R.id.eventDetailsDateTV);
Log.d(TAG,"event date = " + mBriefDetails.getStartDate().toString());
dateView.setText(mBriefDetails.getTimeSummary(EventDetailsItem.LONG_DAY_TIME));
// add the location row
if(mBriefDetails.getLocationName() != null) {
TwoLineActionRow locationRow = new TwoLineActionRow(mActivity);
locationRow.setBackgroundColor(rowBackgroundColor);
locationRow.setTitle(mBriefDetails.getLocationName());
if (mBriefDetails.coordinates != null) {
locationRow.setActionIconResource(R.drawable.action_map);
locationRow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CommonActions.searchMap(mActivity, mBriefDetails.shortloc);
}
});
}
mLinearLayout.addView(locationRow);
mLinearLayout.addView(new DividerView(mActivity, null));
}
if(mFullDetails != null) {
populateFullDetails();
} else if(!mBriefMode) {
// loader for more detail info
mLoaderView = new FullScreenLoader(mActivity, null);
mLoaderView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, AttributesParser.parseDimension("200dip", mActivity)));
mLinearLayout.addView(mLoaderView);
}
}
@Override
public View getView() {
return this;
}
@Override
public void onSelected() {
if(mBriefMode || mFullDetails != null) {
// nothing to load (in brief mode) or already loaded
return;
}
mLoaderView.showLoading();
EventsModel.fetchEventDetails(mBriefDetails.id, mActivity,
new Handler () {
@Override
public void handleMessage(Message message) {
if(mFullDetails != null) {
// exit early already loaded
return;
}
if(message.arg1 == MobileWebApi.SUCCESS) {
mFullDetails = EventsModel.getFullEvent(mBriefDetails.id);
mLoaderView.setVisibility(GONE);
populateFullDetails();
} else {
mLoaderView.showError();
}
}
}
);
}
private void populateFullDetails() {
int rowBackgroundColor = mActivity.getResources().getColor(R.color.rowBackground);
// add the phone row
if(!mFullDetails.infophone.equals("")) {
TwoLineActionRow phoneRow = new TwoLineActionRow(mActivity);
phoneRow.setBackgroundColor(rowBackgroundColor);
phoneRow.setTitle(mFullDetails.infophone);
phoneRow.setActionIconResource(R.drawable.action_phone);
phoneRow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CommonActions.callPhone(mActivity, mFullDetails.infophone);
}
});
mLinearLayout.addView(phoneRow);
mLinearLayout.addView(new DividerView(mActivity, null));
}
// add the external link row
if(!mFullDetails.infourl.equals("")) {
TwoLineActionRow urlRow = new TwoLineActionRow(mActivity);
urlRow.setBackgroundColor(rowBackgroundColor);
urlRow.setTitle(mFullDetails.infourl);
urlRow.setActionIconResource(R.drawable.action_external);
urlRow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String url = mFullDetails.infourl;
if(!CommonActions.hasProtocol(url)) {
url = "http://" + url;
}
CommonActions.viewURL(mActivity, url);
}
});
mLinearLayout.addView(urlRow);
mLinearLayout.addView(new DividerView(mActivity, null));
}
// add description
if(!mFullDetails.description.equals("")) {
mDescriptionView = new WebView(mActivity);
mDescriptionView.setFocusable(false);
mDescriptionView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
mDescriptionView.loadDataWithBaseURL(null, StyledContentHTML.html(mActivity, mFullDetails.description), "text/html", "utf-8", null);
mLinearLayout.addView(mDescriptionView);
mLinearLayout.addView(new DividerView(mActivity, null));
}
}
@Override
public LockingScrollView getVerticalScrollView() {
return null;
}
@Override
public void onDestroy() {
if(mDescriptionView != null) {
mDescriptionView.destroy();
}
removeAllViews();
}
}