Overview Listener Implemented
This commit is contained in:
@@ -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 "";
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
package de.sebse.fuplanner.fragments.moddetails;
|
||||
|
||||
interface ModDetailListener {
|
||||
void gotoFragmentPart(int section, int index);
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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!");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user