Overview Listener Implemented

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

View File

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

View File

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

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;
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<RecyclerView.
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 static final int SECTION_EVENTS = 3;
@Nullable private final ModDetailListener mListener;
private Modules.Module mValue;
private final ArrayList<Pair<Integer, Object>> 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<RecyclerView.
public void setModule() {
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_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<RecyclerView.
case TYPE_HEADER:
HeaderViewHolder h = (HeaderViewHolder) holder;
switch ((Integer) data.second) {
case SECTION_DESCRIPTION:
case ModulePart.DESCRIPTION:
h.mCaption.setText(R.string.description);
break;
case SECTION_ANNOUNCEMENT:
case ModulePart.ANNOUNCEMENT:
h.mCaption.setText(h.mView.getResources().getString(R.string.announcements_count, getAnnounceCount()));
break;
case SECTION_ASSIGNMENT:
case ModulePart.ASSIGNMENT:
h.mCaption.setText(h.mView.getResources().getString(R.string.assignments_count, getAssignmentCount()));
break;
case SECTION_EVENTS:
case ModulePart.EVENT:
h.mCaption.setText(h.mView.getResources().getString(R.string.upcoming_events_count, getEventsCount()));
break;
}
@@ -138,14 +136,18 @@ public class ModDetailOverviewAdapter extends RecyclerView.Adapter<RecyclerView.
int index = ((Integer) data.second) / 1024;
ItemViewHolder i = (ItemViewHolder) holder;
switch (section) {
case SECTION_ANNOUNCEMENT:
case ModulePart.ANNOUNCEMENT:
if (mValue.announcements == null) throw new AssertionError();
Announcement announce = mValue.announcements.get(index);
i.mTitle.setText(announce.getTitle());
i.mSubLeft.setText(announce.getCreatedBy());
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;
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<RecyclerView.
else
i.mSubLeft.setText(i.mView.getResources().getText(R.string.close));
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;
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<RecyclerView.
i.mSubRight.setText(i.mView.getResources().getString(R.string.date_scale,
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:
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.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!");
}
}

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) {
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);
}
}