diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailAdapter.java b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailAdapter.java index 630b70f..24a5009 100644 --- a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailAdapter.java +++ b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailAdapter.java @@ -21,22 +21,22 @@ class ModDetailAdapter extends FragmentStatePagerAdapter { // Returns total number of pages @Override public int getCount() { - return 5; + return ModulePart.getPageCount(); } // Returns the fragment to display for that page @Override public Fragment getItem(int position) { - switch (position) { - case 0: + switch (ModulePart.getPartByPage(position)) { + case ModulePart.OVERVIEW: return ModDetailOverviewFragment.newInstance(mItemPos); - case 1: + case ModulePart.ANNOUNCEMENT: return ModDetailAnnounceFragment.newInstance(mItemPos); - case 2: + case ModulePart.ASSIGNMENT: return ModDetailAssignmentFragment.newInstance(mItemPos); - case 3: + case ModulePart.EVENT: return ModDetailEventFragment.newInstance(mItemPos); - case 4: + case ModulePart.GRADEBOOK: return ModDetailGradebookFragment.newInstance(mItemPos); default: return null; @@ -46,16 +46,16 @@ class ModDetailAdapter extends FragmentStatePagerAdapter { // Returns the page title for the top indicator @Override public CharSequence getPageTitle(int position) { - switch (position) { - case 0: + switch (ModulePart.getPartByPage(position)) { + case ModulePart.OVERVIEW: return this.mContext.getResources().getString(R.string.overview); - case 1: + case ModulePart.ANNOUNCEMENT: return this.mContext.getResources().getString(R.string.announcements); - case 2: + case ModulePart.ASSIGNMENT: return this.mContext.getResources().getString(R.string.assignments); - case 3: + case ModulePart.EVENT: return this.mContext.getResources().getString(R.string.events); - case 4: + case ModulePart.GRADEBOOK: return this.mContext.getResources().getString(R.string.gradebook); default: return ""; diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailFragment.java b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailFragment.java index cf5138b..eb2dcc0 100644 --- a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailFragment.java +++ b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailFragment.java @@ -21,7 +21,7 @@ import de.sebse.fuplanner.tools.logging.Logger; * Use the {@link ModDetailFragment#newInstance} factory method to * create an instance of this fragment. */ -public class ModDetailFragment extends Fragment { +public class ModDetailFragment extends Fragment implements ModDetailListener { private static final String ARG_POSITION = "itemPosition"; // Parameters @@ -29,6 +29,7 @@ public class ModDetailFragment extends Fragment { private MainAcitivityListener mListener; private Logger log = new Logger(this); + private ViewPager mViewPager; public ModDetailFragment() { // Required empty public constructor @@ -67,9 +68,9 @@ public class ModDetailFragment extends Fragment { // Inflate the layout for this fragment View v = inflater.inflate(R.layout.fragment_mod_detail, container, false); - ViewPager vpPager = v.findViewById(R.id.vpPager); - ModDetailAdapter adapterViewPager = new ModDetailAdapter(getFragmentManager(), mItemPos, getContext()); - vpPager.setAdapter(adapterViewPager); + mViewPager = v.findViewById(R.id.vpPager); + ModDetailAdapter adapterViewPager = new ModDetailAdapter(getChildFragmentManager(), mItemPos, getContext()); + mViewPager.setAdapter(adapterViewPager); return v; } @@ -89,4 +90,10 @@ public class ModDetailFragment extends Fragment { super.onDetach(); mListener = null; } + + @Override + public void gotoFragmentPart(int part, int index) { + log.d("Reference to:", part, index); + mViewPager.setCurrentItem(ModulePart.getPageByPart(part), true); + } } diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailListener.java b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailListener.java new file mode 100644 index 0000000..fc22cfa --- /dev/null +++ b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailListener.java @@ -0,0 +1,5 @@ +package de.sebse.fuplanner.fragments.moddetails; + +interface ModDetailListener { + void gotoFragmentPart(int section, int index); +} 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 beddc76..a68bd40 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 @@ -1,6 +1,7 @@ package de.sebse.fuplanner.fragments.moddetails; import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.v7.widget.RecyclerView; import android.util.Pair; import android.view.LayoutInflater; @@ -30,19 +31,16 @@ public class ModDetailOverviewAdapter extends RecyclerView.Adapter> mPositionalData; private Logger log = new Logger(this); - ModDetailOverviewAdapter() { + ModDetailOverviewAdapter(@Nullable final ModDetailListener listener) { mValue = null; mPositionalData = new ArrayList<>(); - //mListener = listener; + mListener = listener; } public void setModule(Modules.Module module) { @@ -52,14 +50,14 @@ public class ModDetailOverviewAdapter extends RecyclerView.Adapter(TYPE_HEADER, SECTION_DESCRIPTION)); + mPositionalData.add(new Pair<>(TYPE_HEADER, ModulePart.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); - mPositionalData.add(new Pair<>(TYPE_HEADER, SECTION_EVENTS)); - addPositionalListData(getEventsCount(), SECTION_EVENTS); + mPositionalData.add(new Pair<>(TYPE_HEADER, ModulePart.ANNOUNCEMENT)); + addPositionalListData(getAnnounceCount(), ModulePart.ANNOUNCEMENT); + mPositionalData.add(new Pair<>(TYPE_HEADER, ModulePart.ASSIGNMENT)); + addPositionalListData(getAssignmentCount(), ModulePart.ASSIGNMENT); + mPositionalData.add(new Pair<>(TYPE_HEADER, ModulePart.EVENT)); + addPositionalListData(getEventsCount(), ModulePart.EVENT); this.notifyDataSetChanged(); } @@ -115,16 +113,16 @@ public class ModDetailOverviewAdapter extends RecyclerView.Adapter log.d("Reference to:", SECTION_ANNOUNCEMENT, index)); + i.mView.setOnClickListener(view -> { + if (mListener != null) mListener.gotoFragmentPart(section, index); + }); break; - case SECTION_ASSIGNMENT: + case ModulePart.ASSIGNMENT: + if (mValue.assignments == null) throw new AssertionError(); Assignment assignment = mValue.assignments.get(index); i.mTitle.setText(assignment.getTitle()); if(assignment.isOpen()) @@ -153,9 +155,12 @@ public class ModDetailOverviewAdapter extends RecyclerView.Adapter log.d("Reference to:", SECTION_ASSIGNMENT, index)); + i.mView.setOnClickListener(view -> { + if (mListener != null) mListener.gotoFragmentPart(section, index); + }); break; - case SECTION_EVENTS: + case ModulePart.EVENT: + if (mValue.events == null) throw new AssertionError(); Event event = mValue.events.getUpcoming(index); i.mTitle.setText(event.getTitle()); i.mSubLeft.setText(event.getType()); @@ -171,11 +176,18 @@ public class ModDetailOverviewAdapter extends RecyclerView.Adapter log.d("Reference to:", SECTION_EVENTS, index)); + i.mView.setOnClickListener(view -> { + if (mListener != null) mListener.gotoFragmentPart(section, index); + }); + break; } + break; case TYPE_SHOW_MORE: CustomViewHolder c = (CustomViewHolder) holder; - c.mView.setOnClickListener(view -> log.d("Reference to:", data.second, -1)); + c.mView.setOnClickListener(view -> { + if (mListener != null) mListener.gotoFragmentPart((Integer) data.second, -1); + }); + break; } } diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailOverviewFragment.java b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailOverviewFragment.java index b1fb550..bedb76f 100644 --- a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailOverviewFragment.java +++ b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailOverviewFragment.java @@ -4,6 +4,7 @@ package de.sebse.fuplanner.fragments.moddetails; import android.content.Context; import android.os.Bundle; import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.LinearLayoutManager; @@ -30,6 +31,7 @@ public class ModDetailOverviewFragment extends Fragment { private Logger log = new Logger(this); private ModDetailOverviewAdapter adapter; private SwipeRefreshLayout swipeLayout; + @Nullable private ModDetailListener mListener; public ModDetailOverviewFragment() { @@ -68,7 +70,7 @@ public class ModDetailOverviewFragment extends Fragment { Context context = view.getContext(); RecyclerView recyclerView = view.findViewById(R.id.list); recyclerView.setLayoutManager(new LinearLayoutManager(context)); - adapter = new ModDetailOverviewAdapter(); + adapter = new ModDetailOverviewAdapter(mListener); recyclerView.setAdapter(adapter); // Getting SwipeContainerLayout @@ -100,4 +102,17 @@ public class ModDetailOverviewFragment extends Fragment { } } + @Override + public void onAttach(Context context) { + super.onAttach(context); + Fragment parentFragment = getParentFragment(); + if (parentFragment != null) { + if (parentFragment instanceof ModDetailListener) { + mListener = (ModDetailListener) parentFragment; + } else { + throw new RuntimeException(context.toString() + + " must implement ModDetailListener"); + } + } else log.w("No parent fragment!"); + } } diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModulePart.java b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModulePart.java new file mode 100644 index 0000000..06c0fb4 --- /dev/null +++ b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModulePart.java @@ -0,0 +1,29 @@ +package de.sebse.fuplanner.fragments.moddetails; + +class ModulePart { + static final int DESCRIPTION = 0; + static final int OVERVIEW = 1; + static final int ANNOUNCEMENT = 2; + static final int ASSIGNMENT = 3; + static final int EVENT = 4; + static final int GRADEBOOK = 5; + private static final int[] pages = new int[]{OVERVIEW, ANNOUNCEMENT, ASSIGNMENT, EVENT, GRADEBOOK}; + + static int getPageCount() { + return pages.length; + } + + static int getPartByPage(int page) { + return pages[page]; + } + + public static int getPageByPart(int part) { + for (int i = 0; i < pages.length; i++) { + int page = pages[i]; + if (page == part) { + return i; + } + } + return -1; + } +} diff --git a/app/src/main/java/de/sebse/fuplanner/tools/logging/Logger.java b/app/src/main/java/de/sebse/fuplanner/tools/logging/Logger.java index 4265702..f7dde68 100644 --- a/app/src/main/java/de/sebse/fuplanner/tools/logging/Logger.java +++ b/app/src/main/java/de/sebse/fuplanner/tools/logging/Logger.java @@ -17,28 +17,23 @@ public class Logger { } public void d(Object... msg) { - ld(concat(msg)); + longLog(concat(msg), Log::d); } - private void ld(String content) { - if (content.length() > 4000) { - Log.d(tag, content.substring(0, 4000)); - ld(content.substring(4000)); - } else { - Log.d(tag, content); - } + public void w(Object... msg) { + longLog(concat(msg), Log::w); } public void e(Object... msg) { - le(concat(msg)); + longLog(concat(msg), Log::e); } - private void le(String content) { + private void longLog(String content, LogInterface logInterface) { if (content.length() > 4000) { - Log.e(tag, content.substring(0, 4000)); - ld(content.substring(4000)); + logInterface.run(tag, content.substring(0, 4000)); + longLog(content.substring(4000), logInterface); } else { - Log.e(tag, content); + logInterface.run(tag, content); } } @@ -52,16 +47,7 @@ public class Logger { return string.toString(); } - - - private void reduce(String content) { - if (content==null) { - Log.d(tag, "null"); - } else if (content.length() > 4000) { - Log.d(tag, content.substring(0, 4000)); - reduce(content.substring(4000)); - } else { - Log.d(tag, content); - } + interface LogInterface { + void run(String s1, String s2); } }