Overview Listener Implemented
This commit is contained in:
@@ -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 "";
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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!");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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) {
|
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user