diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailOverviewAdapter.java b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailOverviewAdapter.java index 87fa3d1..de3db3e 100644 --- a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailOverviewAdapter.java +++ b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailOverviewAdapter.java @@ -2,6 +2,7 @@ package de.sebse.fuplanner.fragments.moddetails; import android.support.annotation.NonNull; import android.support.v7.widget.RecyclerView; +import android.util.Pair; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -9,32 +10,63 @@ import android.widget.TextView; import com.ms.square.android.expandabletextview.ExpandableTextView; +import java.util.ArrayList; + import de.sebse.fuplanner.R; import de.sebse.fuplanner.services.KVV.Announcement; import de.sebse.fuplanner.services.KVV.Assignment; import de.sebse.fuplanner.services.KVV.Modules; import de.sebse.fuplanner.tools.Conversion; +import de.sebse.fuplanner.tools.logging.Logger; import de.sebse.fuplanner.tools.ui.CustomViewHolder; public class ModDetailOverviewAdapter extends RecyclerView.Adapter { + private static final int MAX_ITEMS_PER_PREVIEW = 2; + private static final int TYPE_HEADER = 0; private static final int TYPE_DESCRIPTION = 1; private static final int TYPE_ITEM = 2; private static final int TYPE_SHOW_MORE = 3; + private static final int SECTION_DESCRIPTION = 0; + private static final int SECTION_ANNOUNCEMENT = 1; + private static final int SECTION_ASSIGNMENT = 2; + private Modules.Module mValue; + private final ArrayList> mPositionalData; + private Logger log = new Logger(this); //private final ModulesFragment.OnModulesFragmentInteractionListener mListener; public ModDetailOverviewAdapter(/*ModulesFragment.OnModulesFragmentInteractionListener listener*/) { mValue = null; + mPositionalData = new ArrayList<>(); //mListener = listener; } public void setModule(Modules.Module module) { mValue = module; + this.setModule(); + } + + public void setModule() { + mPositionalData.clear(); + mPositionalData.add(new Pair<>(TYPE_HEADER, SECTION_DESCRIPTION)); + mPositionalData.add(new Pair<>(TYPE_DESCRIPTION, null)); + mPositionalData.add(new Pair<>(TYPE_HEADER, SECTION_ANNOUNCEMENT)); + addPositionalListData(getAnnounceCount(), SECTION_ANNOUNCEMENT); + mPositionalData.add(new Pair<>(TYPE_HEADER, SECTION_ASSIGNMENT)); + addPositionalListData(getAssignmentCount(), SECTION_ASSIGNMENT); this.notifyDataSetChanged(); } + private void addPositionalListData(int count, int category) { + for (int i = 0; i < Math.min(MAX_ITEMS_PER_PREVIEW, count); i++) { + mPositionalData.add(new Pair<>(TYPE_ITEM, category+1024*i)); + } + if (count > MAX_ITEMS_PER_PREVIEW) + mPositionalData.add(new Pair<>(TYPE_SHOW_MORE, category)); + } + @NonNull @Override public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { @@ -64,66 +96,64 @@ public class ModDetailOverviewAdapter extends RecyclerView.Adapter mPositionalData.size()) return; - if (position == 0) { - HeaderViewHolder h = (HeaderViewHolder) holder; - h.mCaption.setText(R.string.description); - } else if (position == 1) { - DescriptionViewHolder d = (DescriptionViewHolder) holder; - d.mText.setText(mValue.description); - } else if (position == 2) { - HeaderViewHolder h = (HeaderViewHolder) holder; - h.mCaption.setText(h.mView.getResources().getString(R.string.announcements_count, getAnnounceCount())); - } else if (position <= getAnnounceCount(2)+2) { - ItemViewHolder a = (ItemViewHolder) holder; - Announcement announce = mValue.announcements.get(position - 3); - a.mTitle.setText(announce.getTitle()); - a.mSubLeft.setText(announce.getCreatedBy()); - a.mSubRight.setText(Conversion.getModifiedDate(announce.getCreatedOn())); - } else if (position <= getAnnounceCount(3)+getAssignmentCount(2)+3) { - ItemViewHolder a = (ItemViewHolder) holder; - Assignment assignment = mValue.assignments.get(position - 3); - a.mTitle.setText(assignment.getTitle()); - a.mSubLeft.setText(assignment.getStatus()); - a.mSubRight.setText(Conversion.getModifiedDate(assignment.getDueDate())); + Pair data = mPositionalData.get(position); + switch (data.first) { + case TYPE_HEADER: + HeaderViewHolder h = (HeaderViewHolder) holder; + switch ((Integer) data.second) { + case SECTION_DESCRIPTION: + h.mCaption.setText(R.string.description); + break; + case SECTION_ANNOUNCEMENT: + h.mCaption.setText(h.mView.getResources().getString(R.string.announcements_count, getAnnounceCount())); + break; + case SECTION_ASSIGNMENT: + h.mCaption.setText(h.mView.getResources().getString(R.string.assignments_count, getAssignmentCount())); + break; + } + break; + case TYPE_DESCRIPTION: + DescriptionViewHolder d = (DescriptionViewHolder) holder; + d.mText.setText(mValue.description); + break; + case TYPE_ITEM: + int section = ((Integer) data.second) % 1024; + int index = ((Integer) data.second) / 1024; + ItemViewHolder i = (ItemViewHolder) holder; + switch (section) { + case SECTION_ANNOUNCEMENT: + Announcement announce = mValue.announcements.get(index); + i.mTitle.setText(announce.getTitle()); + i.mSubLeft.setText(announce.getCreatedBy()); + i.mSubRight.setText(Conversion.getModifiedDate(announce.getCreatedOn())); + i.mView.setOnClickListener(view -> log.d("Reference to:", SECTION_ANNOUNCEMENT, index)); + break; + case SECTION_ASSIGNMENT: + Assignment assignment = mValue.assignments.get(index); + i.mTitle.setText(assignment.getTitle()); + i.mSubLeft.setText(assignment.getStatus()); + i.mSubRight.setText(Conversion.getModifiedDate(assignment.getDueDate())); + i.mView.setOnClickListener(view -> log.d("Refeerence to:", SECTION_ASSIGNMENT, index)); + } + case TYPE_SHOW_MORE: + CustomViewHolder c = (CustomViewHolder) holder; + c.mView.setOnClickListener(view -> log.d("Refeerence to:", data.second, -1)); } } @Override public int getItemCount() { - if (mValue != null) { - return 4+getAnnounceCount(3)+getAssignmentCount(3); - } - return 0; + return mPositionalData.size(); } private int getAnnounceCount() { @@ -132,20 +162,12 @@ public class ModDetailOverviewAdapter extends RecyclerView.Adapter - FU Planner + FU Planner Open navigation drawer Close navigation drawer @@ -9,7 +9,7 @@ Overview Announcements - Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. + Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Description Announcements (%1$d) App Icon @@ -24,4 +24,6 @@ Username Password Show All + Assignments (%1$d) + Assignments