package de.tum.in.tumcampusapp.fragments;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.widget.SimpleCursorAdapter;
import android.support.v4.widget.SimpleCursorAdapter.ViewBinder;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.text.method.LinkMovementMethod;
import android.text.util.Linkify;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.regex.Pattern;
import de.tum.in.tumcampusapp.R;
import de.tum.in.tumcampusapp.activities.OpeningHoursDetailActivity;
import de.tum.in.tumcampusapp.activities.OpeningHoursListActivity;
import de.tum.in.tumcampusapp.auxiliary.Const;
import de.tum.in.tumcampusapp.auxiliary.Utils;
import de.tum.in.tumcampusapp.managers.OpenHoursManager;
/**
* A fragment representing a single Item detail screen. This fragment is either
* contained in a {@link OpeningHoursListActivity} in two-pane mode (on tablets)
* or a {@link OpeningHoursDetailActivity} on handsets.
* <p/>
* NEEDS: ARG_ITEM_ID and ARG_ITEM_CONTENT set in arguments
*/
public class OpeningHoursDetailFragment extends Fragment implements ViewBinder {
public static final String ARG_ITEM_ID = "item_id";
public static final String ARG_ITEM_CONTENT = "item_content";
public static final String TWO_PANE = "two_pane";
private static final Pattern COMPILE = Pattern.compile("\\\\n");
private int mItemId;
private String mItemContent;
/**
* Mandatory empty constructor for the fragment manager to instantiate the
* fragment (e.g. upon screen orientation changes).
*/
public OpeningHoursDetailFragment() {
// NOP
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments().containsKey(ARG_ITEM_ID)) {
mItemId = getArguments().getInt(ARG_ITEM_ID);
mItemContent = getArguments().getString(ARG_ITEM_CONTENT);
}
if (getArguments().containsKey(TWO_PANE) && !getArguments().getBoolean(TWO_PANE)) {
getActivity().setTitle(mItemContent);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_item_detail, container, false);
// click on category in list
OpenHoursManager lm = new OpenHoursManager(getActivity());
String[] categories = {"library", "info", "cafeteria_gar", "cafeteria_grh", "cafeteria", "cafeteria_pas", "cafeteria_wst"};
Cursor c = lm.getAllHoursFromDb(categories[mItemId]);
RecyclerView recyclerView = (RecyclerView) rootView.findViewById(R.id.fragment_item_detail_recyclerview);
recyclerView.setAdapter(new OpeningHoursDetailAdapter(c));
final LinearLayoutManager layoutManager = new LinearLayoutManager(getContext());
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setHasFixedSize(true);
return rootView;
}
/**
* change presentation of locations in the list
*/
@Override
public boolean setViewValue(View view, Cursor c, int index) {
if (view.getId() == android.R.id.text2) {
String transport = c.getString(c.getColumnIndex(Const.TRANSPORT_COLUMN));
String address = c.getString(c.getColumnIndex(Const.ADDRESS_COLUMN));
String hours = c.getString(c.getColumnIndex(Const.HOURS_COLUMN));
String remark = c.getString(c.getColumnIndex(Const.REMARK_COLUMN));
String room = c.getString(c.getColumnIndex(Const.ROOM_COLUMN));
StringBuilder sb = new StringBuilder(hours).append('\n').append(address);
if (!room.isEmpty()) {
sb.append(", ").append(room);
}
if (!transport.isEmpty()) {
sb.append(" (").append(transport).append(')');
}
if (!remark.isEmpty()) {
sb.append('\n').append(COMPILE.matcher(remark).replaceAll("\n"));
}
TextView tv = (TextView) view;
tv.setText(sb.toString());
// link email addresses and phone numbers (e.g. 089-123456)
Linkify.addLinks(tv, Linkify.EMAIL_ADDRESSES);
Linkify.addLinks(tv, Pattern.compile("[0-9-]{6,}"), "tel:");
return true;
} else if (view.getId() == R.id.text3) {
StringBuilder url = new StringBuilder(c.getString(c.getColumnIndex(Const.URL_COLUMN)));
TextView tv = (TextView) view;
if (url.toString().isEmpty()) {
tv.setVisibility(View.GONE);
} else {
url.insert(0, "<a href=\"").append("\">").append(getString(R.string.website)).append("</a>");
tv.setMovementMethod(LinkMovementMethod.getInstance());
tv.setText(Utils.fromHtml(url.toString()));
}
return true;
}
return false;
}
private class OpeningHoursDetailAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
final SimpleCursorAdapter cursorAdapter;
OpeningHoursDetailAdapter(Cursor c) {
cursorAdapter = new SimpleCursorAdapter(getActivity(),
R.layout.two_line_list_item, c, c.getColumnNames(),
new int[]{android.R.id.text1, android.R.id.text2, R.id.text3}, 0) {
@Override
public boolean isEnabled(int position) {
// disable onclick
return false;
}
};
cursorAdapter.setViewBinder(OpeningHoursDetailFragment.this);
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = cursorAdapter.newView(getContext(), cursorAdapter.getCursor(), parent);
return new RecyclerView.ViewHolder(v) {
};
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
cursorAdapter.getCursor().moveToPosition(position);
cursorAdapter.bindView(holder.itemView, getContext(), cursorAdapter.getCursor());
}
@Override
public int getItemCount() {
return cursorAdapter.getCount();
}
}
}