Overview Listener Implemented

This commit is contained in:
Caesar2011
2018-07-28 14:47:58 +02:00
parent f1d1e1c5dc
commit 9939d6542a
7 changed files with 120 additions and 66 deletions

View File

@@ -21,22 +21,22 @@ class ModDetailAdapter extends FragmentStatePagerAdapter {
// Returns total number of pages // Returns total number of pages
@Override @Override
public int getCount() { public int getCount() {
return 5; return ModulePart.getPageCount();
} }
// Returns the fragment to display for that page // Returns the fragment to display for that page
@Override @Override
public Fragment getItem(int position) { public Fragment getItem(int position) {
switch (position) { switch (ModulePart.getPartByPage(position)) {
case 0: case ModulePart.OVERVIEW:
return ModDetailOverviewFragment.newInstance(mItemPos); return ModDetailOverviewFragment.newInstance(mItemPos);
case 1: case ModulePart.ANNOUNCEMENT:
return ModDetailAnnounceFragment.newInstance(mItemPos); return ModDetailAnnounceFragment.newInstance(mItemPos);
case 2: case ModulePart.ASSIGNMENT:
return ModDetailAssignmentFragment.newInstance(mItemPos); return ModDetailAssignmentFragment.newInstance(mItemPos);
case 3: case ModulePart.EVENT:
return ModDetailEventFragment.newInstance(mItemPos); return ModDetailEventFragment.newInstance(mItemPos);
case 4: case ModulePart.GRADEBOOK:
return ModDetailGradebookFragment.newInstance(mItemPos); return ModDetailGradebookFragment.newInstance(mItemPos);
default: default:
return null; return null;
@@ -46,16 +46,16 @@ class ModDetailAdapter extends FragmentStatePagerAdapter {
// Returns the page title for the top indicator // Returns the page title for the top indicator
@Override @Override
public CharSequence getPageTitle(int position) { public CharSequence getPageTitle(int position) {
switch (position) { switch (ModulePart.getPartByPage(position)) {
case 0: case ModulePart.OVERVIEW:
return this.mContext.getResources().getString(R.string.overview); return this.mContext.getResources().getString(R.string.overview);
case 1: case ModulePart.ANNOUNCEMENT:
return this.mContext.getResources().getString(R.string.announcements); return this.mContext.getResources().getString(R.string.announcements);
case 2: case ModulePart.ASSIGNMENT:
return this.mContext.getResources().getString(R.string.assignments); return this.mContext.getResources().getString(R.string.assignments);
case 3: case ModulePart.EVENT:
return this.mContext.getResources().getString(R.string.events); return this.mContext.getResources().getString(R.string.events);
case 4: case ModulePart.GRADEBOOK:
return this.mContext.getResources().getString(R.string.gradebook); return this.mContext.getResources().getString(R.string.gradebook);
default: default:
return ""; return "";

View File

@@ -21,7 +21,7 @@ import de.sebse.fuplanner.tools.logging.Logger;
* Use the {@link ModDetailFragment#newInstance} factory method to * Use the {@link ModDetailFragment#newInstance} factory method to
* create an instance of this fragment. * 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"; private static final String ARG_POSITION = "itemPosition";
// Parameters // Parameters
@@ -29,6 +29,7 @@ public class ModDetailFragment extends Fragment {
private MainAcitivityListener mListener; private MainAcitivityListener mListener;
private Logger log = new Logger(this); private Logger log = new Logger(this);
private ViewPager mViewPager;
public ModDetailFragment() { public ModDetailFragment() {
// Required empty public constructor // Required empty public constructor
@@ -67,9 +68,9 @@ public class ModDetailFragment extends Fragment {
// Inflate the layout for this fragment // Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_mod_detail, container, false); View v = inflater.inflate(R.layout.fragment_mod_detail, container, false);
ViewPager vpPager = v.findViewById(R.id.vpPager); mViewPager = v.findViewById(R.id.vpPager);
ModDetailAdapter adapterViewPager = new ModDetailAdapter(getFragmentManager(), mItemPos, getContext()); ModDetailAdapter adapterViewPager = new ModDetailAdapter(getChildFragmentManager(), mItemPos, getContext());
vpPager.setAdapter(adapterViewPager); mViewPager.setAdapter(adapterViewPager);
return v; return v;
} }
@@ -89,4 +90,10 @@ public class ModDetailFragment extends Fragment {
super.onDetach(); super.onDetach();
mListener = null; mListener = null;
} }
@Override
public void gotoFragmentPart(int part, int index) {
log.d("Reference to:", part, index);
mViewPager.setCurrentItem(ModulePart.getPageByPart(part), true);
}
} }

View File

@@ -0,0 +1,5 @@
package de.sebse.fuplanner.fragments.moddetails;
interface ModDetailListener {
void gotoFragmentPart(int section, int index);
}

View File

@@ -1,6 +1,7 @@
package de.sebse.fuplanner.fragments.moddetails; package de.sebse.fuplanner.fragments.moddetails;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.util.Pair; import android.util.Pair;
import android.view.LayoutInflater; import android.view.LayoutInflater;
@@ -30,19 +31,16 @@ public class ModDetailOverviewAdapter extends RecyclerView.Adapter<RecyclerView.
private static final int TYPE_ITEM = 2; private static final int TYPE_ITEM = 2;
private static final int TYPE_SHOW_MORE = 3; private static final int TYPE_SHOW_MORE = 3;
private static final int SECTION_DESCRIPTION = 0; @Nullable private final ModDetailListener mListener;
private static final int SECTION_ANNOUNCEMENT = 1;
private static final int SECTION_ASSIGNMENT = 2;
private static final int SECTION_EVENTS = 3;
private Modules.Module mValue; private Modules.Module mValue;
private final ArrayList<Pair<Integer, Object>> mPositionalData; private final ArrayList<Pair<Integer, Object>> mPositionalData;
private Logger log = new Logger(this); private Logger log = new Logger(this);
ModDetailOverviewAdapter() { ModDetailOverviewAdapter(@Nullable final ModDetailListener listener) {
mValue = null; mValue = null;
mPositionalData = new ArrayList<>(); mPositionalData = new ArrayList<>();
//mListener = listener; mListener = listener;
} }
public void setModule(Modules.Module module) { public void setModule(Modules.Module module) {
@@ -52,14 +50,14 @@ public class ModDetailOverviewAdapter extends RecyclerView.Adapter<RecyclerView.
public void setModule() { public void setModule() {
mPositionalData.clear(); mPositionalData.clear();
mPositionalData.add(new Pair<>(TYPE_HEADER, SECTION_DESCRIPTION)); mPositionalData.add(new Pair<>(TYPE_HEADER, ModulePart.DESCRIPTION));
mPositionalData.add(new Pair<>(TYPE_DESCRIPTION, null)); mPositionalData.add(new Pair<>(TYPE_DESCRIPTION, null));
mPositionalData.add(new Pair<>(TYPE_HEADER, SECTION_ANNOUNCEMENT)); mPositionalData.add(new Pair<>(TYPE_HEADER, ModulePart.ANNOUNCEMENT));
addPositionalListData(getAnnounceCount(), SECTION_ANNOUNCEMENT); addPositionalListData(getAnnounceCount(), ModulePart.ANNOUNCEMENT);
mPositionalData.add(new Pair<>(TYPE_HEADER, SECTION_ASSIGNMENT)); mPositionalData.add(new Pair<>(TYPE_HEADER, ModulePart.ASSIGNMENT));
addPositionalListData(getAssignmentCount(), SECTION_ASSIGNMENT); addPositionalListData(getAssignmentCount(), ModulePart.ASSIGNMENT);
mPositionalData.add(new Pair<>(TYPE_HEADER, SECTION_EVENTS)); mPositionalData.add(new Pair<>(TYPE_HEADER, ModulePart.EVENT));
addPositionalListData(getEventsCount(), SECTION_EVENTS); addPositionalListData(getEventsCount(), ModulePart.EVENT);
this.notifyDataSetChanged(); this.notifyDataSetChanged();
} }
@@ -115,16 +113,16 @@ public class ModDetailOverviewAdapter extends RecyclerView.Adapter<RecyclerView.
case TYPE_HEADER: case TYPE_HEADER:
HeaderViewHolder h = (HeaderViewHolder) holder; HeaderViewHolder h = (HeaderViewHolder) holder;
switch ((Integer) data.second) { switch ((Integer) data.second) {
case SECTION_DESCRIPTION: case ModulePart.DESCRIPTION:
h.mCaption.setText(R.string.description); h.mCaption.setText(R.string.description);
break; break;
case SECTION_ANNOUNCEMENT: case ModulePart.ANNOUNCEMENT:
h.mCaption.setText(h.mView.getResources().getString(R.string.announcements_count, getAnnounceCount())); h.mCaption.setText(h.mView.getResources().getString(R.string.announcements_count, getAnnounceCount()));
break; break;
case SECTION_ASSIGNMENT: case ModulePart.ASSIGNMENT:
h.mCaption.setText(h.mView.getResources().getString(R.string.assignments_count, getAssignmentCount())); h.mCaption.setText(h.mView.getResources().getString(R.string.assignments_count, getAssignmentCount()));
break; break;
case SECTION_EVENTS: case ModulePart.EVENT:
h.mCaption.setText(h.mView.getResources().getString(R.string.upcoming_events_count, getEventsCount())); h.mCaption.setText(h.mView.getResources().getString(R.string.upcoming_events_count, getEventsCount()));
break; break;
} }
@@ -138,14 +136,18 @@ public class ModDetailOverviewAdapter extends RecyclerView.Adapter<RecyclerView.
int index = ((Integer) data.second) / 1024; int index = ((Integer) data.second) / 1024;
ItemViewHolder i = (ItemViewHolder) holder; ItemViewHolder i = (ItemViewHolder) holder;
switch (section) { switch (section) {
case SECTION_ANNOUNCEMENT: case ModulePart.ANNOUNCEMENT:
if (mValue.announcements == null) throw new AssertionError();
Announcement announce = mValue.announcements.get(index); Announcement announce = mValue.announcements.get(index);
i.mTitle.setText(announce.getTitle()); i.mTitle.setText(announce.getTitle());
i.mSubLeft.setText(announce.getCreatedBy()); i.mSubLeft.setText(announce.getCreatedBy());
i.mSubRight.setText(DateUtils.getModifiedDateTime(i.mView.getContext(), announce.getCreatedOn())); i.mSubRight.setText(DateUtils.getModifiedDateTime(i.mView.getContext(), announce.getCreatedOn()));
i.mView.setOnClickListener(view -> log.d("Reference to:", SECTION_ANNOUNCEMENT, index)); i.mView.setOnClickListener(view -> {
if (mListener != null) mListener.gotoFragmentPart(section, index);
});
break; break;
case SECTION_ASSIGNMENT: case ModulePart.ASSIGNMENT:
if (mValue.assignments == null) throw new AssertionError();
Assignment assignment = mValue.assignments.get(index); Assignment assignment = mValue.assignments.get(index);
i.mTitle.setText(assignment.getTitle()); i.mTitle.setText(assignment.getTitle());
if(assignment.isOpen()) if(assignment.isOpen())
@@ -153,9 +155,12 @@ public class ModDetailOverviewAdapter extends RecyclerView.Adapter<RecyclerView.
else else
i.mSubLeft.setText(i.mView.getResources().getText(R.string.close)); i.mSubLeft.setText(i.mView.getResources().getText(R.string.close));
i.mSubRight.setText(DateUtils.getModifiedDateTime(i.mView.getContext(), assignment.getDueDate())); i.mSubRight.setText(DateUtils.getModifiedDateTime(i.mView.getContext(), assignment.getDueDate()));
i.mView.setOnClickListener(view -> log.d("Reference to:", SECTION_ASSIGNMENT, index)); i.mView.setOnClickListener(view -> {
if (mListener != null) mListener.gotoFragmentPart(section, index);
});
break; break;
case SECTION_EVENTS: case ModulePart.EVENT:
if (mValue.events == null) throw new AssertionError();
Event event = mValue.events.getUpcoming(index); Event event = mValue.events.getUpcoming(index);
i.mTitle.setText(event.getTitle()); i.mTitle.setText(event.getTitle());
i.mSubLeft.setText(event.getType()); i.mSubLeft.setText(event.getType());
@@ -171,11 +176,18 @@ public class ModDetailOverviewAdapter extends RecyclerView.Adapter<RecyclerView.
i.mSubRight.setText(i.mView.getResources().getString(R.string.date_scale, i.mSubRight.setText(i.mView.getResources().getString(R.string.date_scale,
start, end start, end
)); ));
i.mView.setOnClickListener(view -> log.d("Reference to:", SECTION_EVENTS, index)); i.mView.setOnClickListener(view -> {
if (mListener != null) mListener.gotoFragmentPart(section, index);
});
break;
} }
break;
case TYPE_SHOW_MORE: case TYPE_SHOW_MORE:
CustomViewHolder c = (CustomViewHolder) holder; 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;
} }
} }

View File

@@ -4,6 +4,7 @@ package de.sebse.fuplanner.fragments.moddetails;
import android.content.Context; import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
import android.support.v4.widget.SwipeRefreshLayout; import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.LinearLayoutManager;
@@ -30,6 +31,7 @@ public class ModDetailOverviewFragment extends Fragment {
private Logger log = new Logger(this); private Logger log = new Logger(this);
private ModDetailOverviewAdapter adapter; private ModDetailOverviewAdapter adapter;
private SwipeRefreshLayout swipeLayout; private SwipeRefreshLayout swipeLayout;
@Nullable private ModDetailListener mListener;
public ModDetailOverviewFragment() { public ModDetailOverviewFragment() {
@@ -68,7 +70,7 @@ public class ModDetailOverviewFragment extends Fragment {
Context context = view.getContext(); Context context = view.getContext();
RecyclerView recyclerView = view.findViewById(R.id.list); RecyclerView recyclerView = view.findViewById(R.id.list);
recyclerView.setLayoutManager(new LinearLayoutManager(context)); recyclerView.setLayoutManager(new LinearLayoutManager(context));
adapter = new ModDetailOverviewAdapter(); adapter = new ModDetailOverviewAdapter(mListener);
recyclerView.setAdapter(adapter); recyclerView.setAdapter(adapter);
// Getting SwipeContainerLayout // 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!");
}
} }

View File

@@ -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;
}
}

View File

@@ -17,28 +17,23 @@ public class Logger {
} }
public void d(Object... msg) { public void d(Object... msg) {
ld(concat(msg)); longLog(concat(msg), Log::d);
} }
private void ld(String content) { public void w(Object... msg) {
if (content.length() > 4000) { longLog(concat(msg), Log::w);
Log.d(tag, content.substring(0, 4000));
ld(content.substring(4000));
} else {
Log.d(tag, content);
}
} }
public void e(Object... msg) { 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) { if (content.length() > 4000) {
Log.e(tag, content.substring(0, 4000)); logInterface.run(tag, content.substring(0, 4000));
ld(content.substring(4000)); longLog(content.substring(4000), logInterface);
} else { } else {
Log.e(tag, content); logInterface.run(tag, content);
} }
} }
@@ -52,16 +47,7 @@ public class Logger {
return string.toString(); return string.toString();
} }
interface LogInterface {
void run(String s1, String s2);
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);
}
} }
} }