package edu.vanderbilt.vm.guide.ui;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import android.os.Bundle;
import android.text.Html;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import edu.vanderbilt.vm.guide.R;
import edu.vanderbilt.vm.guide.container.Agenda;
import edu.vanderbilt.vm.guide.container.Place;
import edu.vanderbilt.vm.guide.container.Route;
import edu.vanderbilt.vm.guide.util.Geomancer;
import edu.vanderbilt.vm.guide.util.GlobalState;
import edu.vanderbilt.vm.guide.util.ImageDownloader;
public class AgendaNavigatorFragment extends NavigatorFragment {
private View mLocationView;
private ImageView mLocationIv;
private TextView mLocationDesc;
private TextView mLocationName;
private Agenda mUserAgenda = GlobalState.getUserAgenda();
private Route mRoute;
private ImageDownloader.BitmapDownloaderTask mDlTask = null;
private final int DESCRIPTION_LENGTH = 100;
private static final Logger logger = LoggerFactory.getLogger("ui.AgendaNavigatorFrag");
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_agenda_navigator, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
View layout = getView();
mLocationView = layout.findViewById(R.id.current_ll_ref);
mLocationDesc = (TextView)mLocationView.findViewById(R.id.location_prev_desc);
mLocationName = (TextView)mLocationView.findViewById(R.id.location_prev_name);
mLocationName.setText("Next location:");
mLocationIv = (ImageView)mLocationView.findViewById(R.id.current_img);
mRoute = GlobalState.findRoute(Geomancer.getDeviceLocation(), mUserAgenda, getActivity());
mMapper.mapGraph(mRoute.getRouteGraph());
updatePlaceView();
final Button hideButton = (Button)layout.findViewById(R.id.agenda_nav_hide);
final Button visitButton = (Button)layout.findViewById(R.id.nav_mark_visited);
hideButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (mLocationView.isShown()) {
mLocationView.setVisibility(View.GONE);
visitButton.setVisibility(View.GONE);
hideButton.setText("Show Panel");
} else {
mLocationView.setVisibility(View.VISIBLE);
visitButton.setVisibility(View.VISIBLE);
hideButton.setText("Hide Panel");
}
}
});
visitButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mRoute.proceed();
updatePlaceView();
}
});
}
@Override
public void onDestroy() {
super.onDestroy();
if (mDlTask != null) {
logger.trace("Cancelling image download task");
mDlTask.cancel(true);
}
}
private void updatePlaceView() {
if (!mRoute.isFinished()) {
// Update to show next place on the route
Place current = mRoute.getCurrentPlace();
String desc = current.getDescription();
if (desc.length() > DESCRIPTION_LENGTH) {
desc = desc.substring(0, DESCRIPTION_LENGTH).concat("...");
}
mLocationDesc.setText(Html.fromHtml("<b>" + current.getName() + "</b> " + desc));
mDlTask = new ImageDownloader.BitmapDownloaderTask(mLocationIv);
logger.trace("Starting image download task");
mDlTask.execute(current.getPictureLoc());
} else {
mLocationIv.setVisibility(View.GONE);
mLocationName.setText("You have finished the tour");
mLocationDesc.setVisibility(View.GONE);
}
}
}