package by.fksis.schedule.app; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.TextView; import by.fksis.schedule.Preferences; import by.fksis.schedule.R; import by.fksis.schedule.Util; import by.fksis.schedule.dal.Broadcast; import by.fksis.schedule.dal.Database; import by.fksis.schedule.dal.ScheduleClass; import com.danikula.aibolit.Aibolit; import com.danikula.aibolit.annotation.InjectView; import com.ormy.Application; import com.ormy.DatabaseObserver; import com.ormy.Model; import java.util.Calendar; import java.util.List; public class DayScheduleFragment extends Fragment implements DatabaseObserver { private Calendar date; private int weekNumber, dayOfWeek; public DayScheduleFragment() { } public DayScheduleFragment(Calendar date) { this.date = date; dayOfWeek = Util.getDayOfWeekIndex(date); weekNumber = Util.getScheduleWeek(date.getTime()); } @Override public void onResume() { super.onResume(); Application.getDatabase().registerObserver(this); refresh(); } @Override public void onPause() { super.onPause(); Application.getDatabase().unregisterObserver(this); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup c, Bundle savedInstanceState) { View view = LayoutInflater.from(getActivity()).inflate(R.layout.fragment_day_schedule, c, false); Aibolit.doInjections(this, view); return view; } public void refresh() { broadcastContainer.removeAllViews(); List<Broadcast> broadcasts = Broadcast.get(Broadcast.class) .filter("groupList%", "%" + new Preferences(getActivity()).getGroup() + "%") .list(); for (Broadcast broadcast : broadcasts) if (!broadcast.isExpired()) { View broadcastView = LayoutInflater.from(getActivity()).inflate(R.layout.day_broadcast_line, broadcastContainer, false); TextView text = (TextView) broadcastView; text.setText(broadcast.text); broadcastContainer.addView(broadcastView); } container.removeAllViews(); List<ScheduleClass> classes = ScheduleClass.get(ScheduleClass.class) .filter("weeks%", "%" + weekNumber + "%") .filter("day", dayOfWeek) .filter("studentGroup", new Preferences(getActivity()).getGroup()) .filter("subgroups%", "%" + new Preferences(getActivity()).getSubgroupString() + "%") .list(); for (ScheduleClass clazz : classes) { View lineView = LayoutInflater.from(getActivity()).inflate(R.layout.day_schedule_line, container, false); LineViewHolder holder = new LineViewHolder(); Aibolit.doInjections(holder, lineView); holder.name.setText(clazz.name); String subgroupText = ""; if (clazz.subgroups.length() != 2) subgroupText = ", " + getActivity().getString(R.string.subgroup_text) + " " + clazz.subgroups; holder.teacher.setText(Util.defaultValue(clazz.type, "") + " " + Util.defaultValue(clazz.teacher, "")); holder.time.setText(getResources().getStringArray(R.array.timeSlotStart)[clazz.timeSlot]); holder.time2.setText(getResources().getStringArray(R.array.timeSlotEnd)[clazz.timeSlot]); holder.room.setText(clazz.room); container.addView(lineView); } } // ViewPager onPause() fix @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); setUserVisibleHint(true); } @InjectView(R.id.container) private LinearLayout container; @InjectView(R.id.broadcast_container) private LinearLayout broadcastContainer; @Override public void databaseObjectUpdated(Model<?> model) { if (Database.autoRefresh) getActivity().runOnUiThread(new Runnable() { @Override public void run() { refresh(); } }); } private class LineViewHolder { @InjectView(R.id.name) public TextView name; @InjectView(R.id.time) public TextView time; @InjectView(R.id.time2) public TextView time2; @InjectView(R.id.teacher) public TextView teacher; @InjectView(R.id.room) public TextView room; } }