diff --git a/.idea/misc.xml b/.idea/misc.xml
index a8cce1b..4e024a8 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -25,5 +25,5 @@
-
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
index 62306f1..bee9e70 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -2,7 +2,7 @@
-
+
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
index 35eb1dd..8306744 100644
--- a/.idea/vcs.xml
+++ b/.idea/vcs.xml
@@ -2,5 +2,6 @@
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index c2b5fe0..5ce95fe 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -34,7 +34,7 @@ dependencies {
})
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support:design:27.1.1'
- implementation 'com.android.support.constraint:constraint-layout:1.1.1'
+ implementation 'com.android.support.constraint:constraint-layout:1.1.2'
implementation 'com.android.volley:volley:1.0.0'
//noinspection GradleDependency
implementation 'com.google.android.gms:play-services-auth:15.0.0'
@@ -47,5 +47,7 @@ dependencies {
implementation 'org.jetbrains:annotations-java5:15.0'
implementation 'com.github.alamkanak:android-week-view:1.2.6'
implementation 'com.ms-square:expandableTextView:0.1.4'
+ // https://github.com/bignerdranch/expandable-recycler-view
+ implementation 'com.bignerdranch.android:expandablerecyclerview:3.0.0-RC1'
implementation files('libs/jericho-html-3.4.jar')
}
diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/ModulesFragment.java b/app/src/main/java/de/sebse/fuplanner/fragments/ModulesFragment.java
index c4c23d6..8deaf4a 100644
--- a/app/src/main/java/de/sebse/fuplanner/fragments/ModulesFragment.java
+++ b/app/src/main/java/de/sebse/fuplanner/fragments/ModulesFragment.java
@@ -45,7 +45,6 @@ public class ModulesFragment extends Fragment {
public static ModulesFragment newInstance() {
ModulesFragment fragment = new ModulesFragment();
Bundle args = new Bundle();
- /*args.putInt(ARG_COLUMN_COUNT, columnCount);*/
fragment.setArguments(args);
return fragment;
}
@@ -53,10 +52,6 @@ public class ModulesFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
-
- /*if (getArguments() != null) {
- mColumnCount = getArguments().getInt(ARG_COLUMN_COUNT);
- }*/
}
@Override
diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailAnnounceAdapter.java b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailAnnounceAdapter.java
new file mode 100644
index 0000000..25a6bcb
--- /dev/null
+++ b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailAnnounceAdapter.java
@@ -0,0 +1,108 @@
+package de.sebse.fuplanner.fragments.moddetails;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseExpandableListAdapter;
+import android.widget.TextView;
+
+import de.sebse.fuplanner.R;
+import de.sebse.fuplanner.services.KVV.types.Announcement;
+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 ModDetailAnnounceAdapter extends BaseExpandableListAdapter {
+
+ private Modules.Module mModule = null;
+
+ @Override
+ public String getChild(int groupPosition, int childPosititon) {
+ return this.getGroup(groupPosition).getBody();
+ }
+
+ @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 Announcement getGroup(int groupPosition) {
+ if (this.mModule != null && this.mModule.announcements != null)
+ return this.mModule.announcements.get(groupPosition);
+ else
+ return null;
+ }
+
+ @Override
+ public int getGroupCount() {
+ if (this.mModule != null && this.mModule.announcements != null)
+ return this.mModule.announcements.size();
+ else
+ return 0;
+ }
+
+ @Override
+ public long getGroupId(int groupPosition) {
+ return groupPosition;
+ }
+
+ @Override
+ public View getGroupView(int groupPosition, boolean isExpanded,
+ View convertView, ViewGroup parent) {
+ Announcement announce = 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(announce.getTitle());
+ itemHolder.mSubLeft.setText(announce.getCreatedBy());
+ itemHolder.mSubRight.setText(Conversion.getModifiedDateTime(announce.getCreatedOn()));
+
+ 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/ModDetailAnnounceFragment.java b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailAnnounceFragment.java
index f0f0b6d..e08deb8 100644
--- a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailAnnounceFragment.java
+++ b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailAnnounceFragment.java
@@ -1,14 +1,22 @@
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.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
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;
/**
@@ -24,6 +32,8 @@ public class ModDetailAnnounceFragment extends Fragment {
// TODO: Rename and change types of parameters
private int mItemPos;
private Logger log = new Logger(this);
+ private ModDetailAnnounceAdapter adapter;
+ private SwipeRefreshLayout swipeLayout;
public ModDetailAnnounceFragment() {
@@ -58,7 +68,41 @@ public class ModDetailAnnounceFragment extends Fragment {
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
- return inflater.inflate(R.layout.fragment_mod_detail_announce, container, false);
+ 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 ModDetailAnnounceAdapter();
+ 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.getModuleAnnouncements(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/tools/ui/StringViewHolder.java b/app/src/main/java/de/sebse/fuplanner/tools/ui/StringViewHolder.java
new file mode 100644
index 0000000..65aa3c7
--- /dev/null
+++ b/app/src/main/java/de/sebse/fuplanner/tools/ui/StringViewHolder.java
@@ -0,0 +1,20 @@
+package de.sebse.fuplanner.tools.ui;
+
+import android.view.View;
+import android.widget.TextView;
+
+import de.sebse.fuplanner.R;
+
+public class StringViewHolder extends CustomViewHolder {
+ public final TextView mString;
+
+ public StringViewHolder(View view) {
+ super(view);
+ mString = view.findViewById(R.id.string);
+ }
+
+ @Override
+ public String toString() {
+ return super.toString() + " '" + mString.getText() + "'";
+ }
+}
diff --git a/app/src/main/res/layout/fragment_mod_detail_announce.xml b/app/src/main/res/layout/fragment_mod_detail_announce.xml
index 99b4da7..5ecf219 100644
--- a/app/src/main/res/layout/fragment_mod_detail_announce.xml
+++ b/app/src/main/res/layout/fragment_mod_detail_announce.xml
@@ -1,14 +1,19 @@
-
-
-
-
+
-
-
\ No newline at end of file
+ android:layout_marginLeft="16dp"
+ android:layout_marginRight="16dp"
+ app:layoutManager="android.support.v7.widget.LinearLayoutManager"
+ tools:context=".fragments.moddetails.ModDetailAnnounceFragment"
+ tools:listitem="@layout/list_all_caption" />
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/list_all_string.xml b/app/src/main/res/layout/list_all_string.xml
new file mode 100644
index 0000000..ee17e94
--- /dev/null
+++ b/app/src/main/res/layout/list_all_string.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
\ No newline at end of file