package edu.mit.mitmobile2.libraries;
import java.text.DateFormat;
import java.util.Locale;
import android.app.Activity;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.SpannableStringBuilder;
import android.text.style.TextAppearanceSpan;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import edu.mit.mitmobile2.CommonActions;
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.TwoLineActionRow;
import edu.mit.mitmobile2.libraries.LibraryItem.Hours;
import edu.mit.mitmobile2.libraries.LibraryItem.Schedule;
public class LibraryDetailView implements SliderInterface {
private Activity mActivity;
private LibraryItem mLibraryItem;
private LockingScrollView mView;
private FullScreenLoader mLoaderView;
private TwoLineActionRow mDetailTitle;
private TwoLineActionRow mDetailPhone;
private View mDetailPhoneDivider;
private TwoLineActionRow mDetailRoom;
private View mDetailRoomDivider;
private TextView mDetailInfo;
public LibraryDetailView(Activity activity, LibraryItem libraryItem) {
mActivity = activity;
mLibraryItem = libraryItem;
LayoutInflater inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mView = (LockingScrollView) inflater.inflate(R.layout.library_detail, null);
mLoaderView = (FullScreenLoader) mView.findViewById(R.id.libraryDetailLoading);
mDetailTitle = (TwoLineActionRow) mView.findViewById(R.id.libraryDetailTitle);
mDetailTitle.setTitle(mLibraryItem.library);
mDetailPhone = (TwoLineActionRow) mView.findViewById(R.id.libraryDetailPhone);
ImageView phoneImage = (ImageView) mDetailPhone.findViewById(R.id.simpleRowActionIcon);
phoneImage.setImageResource(R.drawable.action_phone);
mDetailPhone.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CommonActions.callPhone(mActivity, mLibraryItem.tel);
}
});
mDetailPhoneDivider = mView.findViewById(R.id.libraryDetailPhoneDivider);
mDetailRoom = (TwoLineActionRow) mView.findViewById(R.id.libraryDetailRoom);
ImageView mapImage = (ImageView) mDetailRoom.findViewById(R.id.simpleRowActionIcon);
mapImage.setImageResource(R.drawable.action_map);
mDetailRoom.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CommonActions.searchMap(mActivity, mLibraryItem.location);
}
});
mDetailRoomDivider = mView.findViewById(R.id.libraryDetailRoomDivider);
mDetailInfo = (TextView) mView.findViewById(R.id.libraryDetailInfo);
if(mLibraryItem.isDetailLoaded) {
loadDetails();
}
}
@Override
public LockingScrollView getVerticalScrollView() {
return mView;
}
@Override
public View getView() {
return mView;
}
@Override
public void onDestroy() {
}
@Override
public void onSelected() {
if (mLibraryItem.isDetailLoaded) {
return;
}
// mLoaderView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
mLoaderView.setVisibility(View.VISIBLE);
mLoaderView.showLoading();
LibraryModel.fetchLibraryDetail(mLibraryItem, mActivity, new Handler() {
@Override
public void handleMessage(Message message) {
if (message.arg1 == MobileWebApi.SUCCESS) {
loadDetails();
} else {
mLoaderView.showError();
}
}
});
}
private void loadDetails() {
mLoaderView.setVisibility(View.GONE);
mDetailPhone.setTitle(mLibraryItem.tel);
mDetailPhone.setVisibility(View.VISIBLE);
mDetailPhoneDivider.setVisibility(View.VISIBLE);
mDetailRoom.setTitle("Room " + mLibraryItem.location);
mDetailRoom.setVisibility(View.VISIBLE);
mDetailRoomDivider.setVisibility(View.VISIBLE);
mDetailInfo.setText(composeDetailInfo(), TextView.BufferType.SPANNABLE);
mDetailInfo.setVisibility(View.VISIBLE);
}
@Override
public void updateView() {
}
private Spannable composeDetailInfo() {
SpannableStringBuilder builder = new SpannableStringBuilder();
builder.append(bold("Today's Hours: "));
builder.append(bodyText(mLibraryItem.hoursToday));
builder.append("\n\n");
addTermContent(builder, mLibraryItem.currentTerm);
for (Schedule term : mLibraryItem.previousTerms) {
addTermContent(builder, term);
}
for (Schedule term : mLibraryItem.nextTerms) {
addTermContent(builder, term);
}
return builder;
}
private void addTermContent(SpannableStringBuilder builder, Schedule termItem) {
String hoursTitle = termItem.name + " Hours (";
DateFormat formatter = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.US);
String start = formatter.format(termItem.range_start);
String end = formatter.format(termItem.range_end);
hoursTitle += start + "-" + end + ")";
builder.append(bold(hoursTitle.trim() + "\n"));
for (Hours hours : termItem.hours) {
String aDetailLine = hours.title + " " + hours.description + "\n";
builder.append(normal(aDetailLine));
}
builder.append("\n");
}
private Spannable bold(String text) {
Spannable span = new SpannableString(text);
span.setSpan(new TextAppearanceSpan(mActivity, R.style.ListItemPrimary), 0, text.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
return span;
}
private Spannable normal(String text) {
Spannable span = new SpannableString(text);
span.setSpan(new TextAppearanceSpan(mActivity, R.style.ListItemSecondary), 0, text.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
return span;
}
private Spannable bodyText(String text) {
Spannable span = new SpannableString(text);
span.setSpan(new TextAppearanceSpan(mActivity, R.style.BodyText), 0, text.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
return span;
}
}