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 79de3fa..7922e64 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 @@ -17,25 +17,25 @@ class ModDetailAdapter extends FragmentStatePagerAdapter { super(fm); this.mContext = context; this.mItemPos = itemPosition; - log.d("constructor"); } // Returns total number of pages @Override public int getCount() { - return 2; + return 3; } // Returns the fragment to display for that page @Override public Fragment getItem(int position) { - log.d("getItem"); switch (position) { - case 0: // Fragment # 0 - This will show FirstFragment + case 0: return ModDetailOverviewFragment.newInstance(mItemPos); - case 1: // Fragment # 0 - This will show FirstFragment different title + case 1: return ModDetailAnnounceFragment.newInstance(mItemPos); + case 2: + return ModDetailAssignmentFragment.newInstance(mItemPos); default: return null; } @@ -49,6 +49,8 @@ class ModDetailAdapter extends FragmentStatePagerAdapter { return this.mContext.getResources().getString(R.string.overview); case 1: return this.mContext.getResources().getString(R.string.announcements); + case 2: + return this.mContext.getResources().getString(R.string.assignments); default: return ""; } diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailAssignmentAdapter.java b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailAssignmentAdapter.java new file mode 100644 index 0000000..9ecc73e --- /dev/null +++ b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailAssignmentAdapter.java @@ -0,0 +1,117 @@ +package de.sebse.fuplanner.fragments.moddetails; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseExpandableListAdapter; + +import de.sebse.fuplanner.R; +import de.sebse.fuplanner.services.KVV.types.Announcement; +import de.sebse.fuplanner.services.KVV.types.Assignment; +import de.sebse.fuplanner.services.KVV.types.Modules; +import de.sebse.fuplanner.tools.Conversion; +import de.sebse.fuplanner.tools.ui.ItemViewHolder; +import de.sebse.fuplanner.tools.ui.StringViewHolder; + +public class ModDetailAssignmentAdapter extends BaseExpandableListAdapter { + + private Modules.Module mModule = null; + + @Override + public String getChild(int groupPosition, int childPosititon) { + StringBuilder sb = new StringBuilder(); + for (String s : this.getGroup(groupPosition).getUrls()) + { + sb.append(s); + sb.append("\n"); + } + return sb.toString(); + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return childPosition; + } + + @Override + public View getChildView(int groupPosition, final int childPosition, + boolean isLastChild, View convertView, ViewGroup parent) { + + final String childText = getChild(groupPosition, childPosition); + + if (convertView == null) { + convertView = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.list_all_string, parent, false); + } + + StringViewHolder itemHolder = new StringViewHolder(convertView); + itemHolder.mString.setText(childText); + + return convertView; + } + + @Override + public int getChildrenCount(int groupPosition) { + return 1; + } + + @Override + public Assignment getGroup(int groupPosition) { + if (this.mModule != null && this.mModule.assignments != null) + return this.mModule.assignments.get(groupPosition); + else + return null; + } + + @Override + public int getGroupCount() { + if (this.mModule != null && this.mModule.assignments != null) + return this.mModule.assignments.size(); + else + return 0; + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, + View convertView, ViewGroup parent) { + Assignment assignment = getGroup(groupPosition); + if (convertView == null) { + convertView = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.list_all_items, parent, false); + } + + ItemViewHolder itemHolder = new ItemViewHolder(convertView); + itemHolder.mTitle.setText(assignment.getTitle()); + if(assignment.isOpen()) + itemHolder.mSubLeft.setText(itemHolder.mView.getResources().getText(R.string.open)); + else + itemHolder.mSubLeft.setText(itemHolder.mView.getResources().getText(R.string.close)); + itemHolder.mSubRight.setText(Conversion.getModifiedDateTime(assignment.getDueDate())); + + return convertView; + } + + @Override + public boolean hasStableIds() { + return false; + } + + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return false; + } + + public void setModule(Modules.Module module) { + this.mModule = module; + this.setModule(); + } + + public void setModule() { + this.notifyDataSetChanged(); + } +} \ No newline at end of file diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailAssignmentFragment.java b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailAssignmentFragment.java new file mode 100644 index 0000000..e876ea6 --- /dev/null +++ b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailAssignmentFragment.java @@ -0,0 +1,106 @@ +package de.sebse.fuplanner.fragments.moddetails; + + +import android.content.Context; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.support.v4.widget.SwipeRefreshLayout; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ExpandableListView; + +import de.sebse.fuplanner.MainActivity; +import de.sebse.fuplanner.R; +import de.sebse.fuplanner.services.KVV.KVV; +import de.sebse.fuplanner.services.KVV.types.Modules; +import de.sebse.fuplanner.tools.logging.Logger; + +/** + * A simple {@link Fragment} subclass. + * Use the {@link ModDetailAssignmentFragment#newInstance} factory method to + * create an instance of this fragment. + */ +public class ModDetailAssignmentFragment extends Fragment { + // TODO: Rename parameter arguments, choose names that match + // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER + private static final String ARG_POSITION = "itemPosition"; + + // TODO: Rename and change types of parameters + private int mItemPos; + private Logger log = new Logger(this); + private ModDetailAssignmentAdapter adapter; + private SwipeRefreshLayout swipeLayout; + + + public ModDetailAssignmentFragment() { + // Required empty public constructor + } + + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @param itemPosition Item position in module list. + * @return A new instance of fragment ModDetailAnnounceFragment. + */ + // TODO: Rename and change types and number of parameters + public static ModDetailAssignmentFragment newInstance(int itemPosition) { + ModDetailAssignmentFragment fragment = new ModDetailAssignmentFragment(); + Bundle args = new Bundle(); + args.putInt(ARG_POSITION, itemPosition); + fragment.setArguments(args); + return fragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (getArguments() != null) { + mItemPos = getArguments().getInt(ARG_POSITION); + } + } + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + View view = inflater.inflate(R.layout.fragment_mod_detail_announce, container, false); + // Set the adapter + Context context = view.getContext(); + ExpandableListView expandableListView = view.findViewById(R.id.list); + //expandableListView.setLayoutManager(new LinearLayoutManager(context)); + adapter = new ModDetailAssignmentAdapter(); + expandableListView.setAdapter(adapter); + + // Getting SwipeContainerLayout + swipeLayout = view.findViewById(R.id.swipe_container); + // Adding Listener + swipeLayout.setOnRefreshListener(() -> refresh(true)); + refresh(false); + + return view; + } + + private void refresh(boolean forceRefresh) { + if (getActivity() != null) { + KVV kvv = ((MainActivity) getActivity()).getKVV(); + kvv.getModuleList((Modules success) -> { + Modules.Module module = success.get(mItemPos); + adapter.setModule(module); + kvv.getModuleAssignments(module, success1 -> { + adapter.setModule(); + swipeLayout.setRefreshing(false); + }, error -> { + swipeLayout.setRefreshing(false); + log.e(error); + }); + }, error -> { + swipeLayout.setRefreshing(false); + log.e(error); + }, forceRefresh); + } + } + +} diff --git a/app/src/main/java/de/sebse/fuplanner/services/KVV/KVVModuleList.java b/app/src/main/java/de/sebse/fuplanner/services/KVV/KVVModuleList.java index c2aece0..28adaff 100644 --- a/app/src/main/java/de/sebse/fuplanner/services/KVV/KVVModuleList.java +++ b/app/src/main/java/de/sebse/fuplanner/services/KVV/KVVModuleList.java @@ -141,7 +141,6 @@ public class KVVModuleList extends HTTPService { AtomicReference lastError = new AtomicReference<>(null); final int items = 4; NetworkCallback successCb = success -> { - log.d("items-d", returns.get()); returns.getAndIncrement(); callback.onResponse(Pair.create(module, false)); if (returns.get() == items) { @@ -151,7 +150,6 @@ public class KVVModuleList extends HTTPService { } }; NetworkErrorCallback errorCb = error -> { - log.d("items-e", returns.get()); lastError.set(error); returns.getAndIncrement(); if (returns.get() == items) { diff --git a/app/src/main/java/de/sebse/fuplanner/tools/AsyncQueue.java b/app/src/main/java/de/sebse/fuplanner/tools/AsyncQueue.java index dc3d4d0..a65cba8 100644 --- a/app/src/main/java/de/sebse/fuplanner/tools/AsyncQueue.java +++ b/app/src/main/java/de/sebse/fuplanner/tools/AsyncQueue.java @@ -10,7 +10,6 @@ import de.sebse.fuplanner.tools.network.NetworkErrorCallback; public class AsyncQueue { private HashMap> mQueues = new HashMap<>(); private HashMap mRunnings = new HashMap<>(); - private Logger log = new Logger(this); public void add(String hash, AsyncQueueCallback callback) { if (isRunning(hash)) @@ -22,7 +21,6 @@ public class AsyncQueue { } public void next(String hash) { - log.d("next", hash); AsyncQueueCallback callback = getQueue(hash).pollFirst(); if (callback == null) setRunning(hash, false);