From 35a60c7072ca4e88e136108eb03efad0e96ff5c3 Mon Sep 17 00:00:00 2001 From: Caesar2011 Date: Thu, 5 Jul 2018 23:35:44 +0200 Subject: [PATCH] Added Announcement detail page --- .idea/misc.xml | 2 +- .idea/modules.xml | 2 +- .idea/vcs.xml | 1 + app/build.gradle | 4 +- .../fuplanner/fragments/ModulesFragment.java | 5 - .../moddetails/ModDetailAnnounceAdapter.java | 108 ++++++++++++++++++ .../moddetails/ModDetailAnnounceFragment.java | 46 +++++++- .../fuplanner/tools/ui/StringViewHolder.java | 20 ++++ .../layout/fragment_mod_detail_announce.xml | 23 ++-- app/src/main/res/layout/list_all_string.xml | 15 +++ 10 files changed, 208 insertions(+), 18 deletions(-) create mode 100644 app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailAnnounceAdapter.java create mode 100644 app/src/main/java/de/sebse/fuplanner/tools/ui/StringViewHolder.java create mode 100644 app/src/main/res/layout/list_all_string.xml 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