Added Event List

This commit is contained in:
Caesar2011
2018-07-13 23:44:06 +02:00
parent 75683960ca
commit 6c297bda9c
11 changed files with 311 additions and 5 deletions

View File

@@ -23,7 +23,7 @@ class ModDetailAdapter extends FragmentStatePagerAdapter {
// Returns total number of pages // Returns total number of pages
@Override @Override
public int getCount() { public int getCount() {
return 3; return 4;
} }
// Returns the fragment to display for that page // Returns the fragment to display for that page
@@ -36,6 +36,8 @@ class ModDetailAdapter extends FragmentStatePagerAdapter {
return ModDetailAnnounceFragment.newInstance(mItemPos); return ModDetailAnnounceFragment.newInstance(mItemPos);
case 2: case 2:
return ModDetailAssignmentFragment.newInstance(mItemPos); return ModDetailAssignmentFragment.newInstance(mItemPos);
case 3:
return ModDetailEventFragment.newInstance(mItemPos);
default: default:
return null; return null;
} }
@@ -51,6 +53,8 @@ class ModDetailAdapter extends FragmentStatePagerAdapter {
return this.mContext.getResources().getString(R.string.announcements); return this.mContext.getResources().getString(R.string.announcements);
case 2: case 2:
return this.mContext.getResources().getString(R.string.assignments); return this.mContext.getResources().getString(R.string.assignments);
case 3:
return this.mContext.getResources().getString(R.string.events);
default: default:
return ""; return "";
} }

View File

@@ -66,7 +66,7 @@ public class ModDetailAnnounceFragment extends Fragment {
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { Bundle savedInstanceState) {
// Inflate the layout for this fragment // Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_mod_detail_announce, container, false); View view = inflater.inflate(R.layout.fragment_expandable_list_view, container, false);
// Set the adapter // Set the adapter
Context context = view.getContext(); Context context = view.getContext();
ExpandableListView expandableListView = view.findViewById(R.id.list); ExpandableListView expandableListView = view.findViewById(R.id.list);

View File

@@ -66,7 +66,7 @@ public class ModDetailAssignmentFragment extends Fragment {
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { Bundle savedInstanceState) {
// Inflate the layout for this fragment // Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_mod_detail_announce, container, false); View view = inflater.inflate(R.layout.fragment_expandable_list_view, container, false);
// Set the adapter // Set the adapter
Context context = view.getContext(); Context context = view.getContext();
ExpandableListView expandableListView = view.findViewById(R.id.list); ExpandableListView expandableListView = view.findViewById(R.id.list);

View File

@@ -0,0 +1,178 @@
package de.sebse.fuplanner.fragments.moddetails;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.util.Pair;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.ms.square.android.expandabletextview.ExpandableTextView;
import java.util.ArrayList;
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.Event;
import de.sebse.fuplanner.services.KVV.types.Modules;
import de.sebse.fuplanner.tools.Conversion;
import de.sebse.fuplanner.tools.logging.Logger;
import de.sebse.fuplanner.tools.ui.CustomViewHolder;
import de.sebse.fuplanner.tools.ui.ItemViewHolder;
public class ModDetailEventAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static final int TYPE_HEADER = 0;
private static final int TYPE_ITEM = 1;
private static final int SECTION_UPCOMING = 0;
private static final int SECTION_PAST = 1;
private Modules.Module mValue;
private final ArrayList<Pair<Integer, Integer>> mPositionalData;
private Logger log = new Logger(this);
//private final ModulesFragment.OnModulesFragmentInteractionListener mListener;
public ModDetailEventAdapter(/*ModulesFragment.OnModulesFragmentInteractionListener listener*/) {
mValue = null;
mPositionalData = new ArrayList<>();
//mListener = listener;
}
public void setModule(Modules.Module module) {
mValue = module;
this.setModule();
}
public void setModule() {
mPositionalData.clear();
addPositionalListData(getUpcomingEventsCount(), SECTION_UPCOMING);
mPositionalData.add(new Pair<>(TYPE_HEADER, SECTION_PAST));
addPositionalListData(getPastEventsCount(), SECTION_PAST);
this.notifyDataSetChanged();
}
private void addPositionalListData(int count, int category) {
for (int i = 0; i < count; i++) {
mPositionalData.add(new Pair<>(TYPE_ITEM, category+1024*i));
}
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view;
switch (viewType) {
case TYPE_HEADER:
view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_all_caption, parent, false);
return new HeaderViewHolder(view);
case TYPE_ITEM:
view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_all_items, parent, false);
return new ItemViewHolder(view);
default:
//noinspection ConstantConditions
return null;
}
}
@Override
public int getItemViewType(int position) {
// Note that unlike in ListView adapters, types don't have to be contiguous
if (position < mPositionalData.size())
return mPositionalData.get(position).first;
else return -1;
}
@Override
public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, int position) {
if (mValue == null || position > mPositionalData.size())
return;
Pair<Integer, Integer> data = mPositionalData.get(position);
switch (data.first) {
case TYPE_HEADER:
HeaderViewHolder h = (HeaderViewHolder) holder;
switch (data.second) {
case SECTION_PAST:
h.mCaption.setText(R.string.past_events);
break;
case SECTION_UPCOMING:
h.mCaption.setText(R.string.upcoming_events);
break;
}
break;
case TYPE_ITEM:
int section = data.second % 1024;
int index = data.second / 1024;
ItemViewHolder i = (ItemViewHolder) holder;
Event event = null;
switch (section) {
case SECTION_UPCOMING:
event = mValue.events.getUpcoming(index);
break;
case SECTION_PAST:
event = mValue.events.getPast(index);
break;
}
//noinspection ConstantConditions
i.mTitle.setText(event.getTitle());
i.mSubLeft.setText(event.getType());
String start, end;
if (Conversion.dateEquals(event.getStartDate(), System.currentTimeMillis()))
start = Conversion.getModifiedTime(i.mView.getContext(), event.getStartDate());
else
start = Conversion.getModifiedDateTime(i.mView.getContext(), event.getStartDate());
if (Conversion.dateEquals(event.getStartDate(), event.getEndDate()))
end = Conversion.getModifiedTime(i.mView.getContext(), event.getEndDate());
else
end = Conversion.getModifiedDateTime(i.mView.getContext(), event.getEndDate());
i.mSubRight.setText(i.mView.getResources().getString(R.string.date_scale,
start, end
));
break;
}
}
@Override
public int getItemCount() {
return mPositionalData.size();
}
private int getUpcomingEventsCount() {
if (mValue.events != null)
return mValue.events.sizeUpcoming();
return 0;
}
private int getPastEventsCount() {
if (mValue.events != null)
return mValue.events.sizePast();
return 0;
}
public class HeaderViewHolder extends CustomViewHolder {
final TextView mCaption;
HeaderViewHolder(View view) {
super(view);
mCaption = view.findViewById(R.id.caption);
}
@Override
public String toString() {
return super.toString() + " '" + mCaption.getText() + "'";
}
}
}

View File

@@ -0,0 +1,107 @@
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 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 ModDetailEventFragment#newInstance} factory method to
* create an instance of this fragment.
*/
public class ModDetailEventFragment 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 ModDetailEventAdapter adapter;
private SwipeRefreshLayout swipeLayout;
public ModDetailEventFragment() {
// 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 ModDetailEventFragment newInstance(int itemPosition) {
ModDetailEventFragment fragment = new ModDetailEventFragment();
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_recycler_view, container, false);
// Set the adapter
Context context = view.getContext();
RecyclerView recyclerView = view.findViewById(R.id.list);
recyclerView.setLayoutManager(new LinearLayoutManager(context));
adapter = new ModDetailEventAdapter();
recyclerView.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.getModuleEvents(module, success1 -> {
adapter.setModule();
swipeLayout.setRefreshing(false);
}, error -> {
swipeLayout.setRefreshing(false);
log.e(error);
});
}, error -> {
swipeLayout.setRefreshing(false);
log.e(error);
}, forceRefresh);
}
}
}

View File

@@ -67,7 +67,7 @@ public class ModDetailOverviewFragment extends Fragment {
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { Bundle savedInstanceState) {
// Inflate the layout for this fragment // Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_mod_detail_overview, container, false); View view = inflater.inflate(R.layout.fragment_recycler_view, container, false);
// Set the adapter // Set the adapter
Context context = view.getContext(); Context context = view.getContext();
RecyclerView recyclerView = view.findViewById(R.id.list); RecyclerView recyclerView = view.findViewById(R.id.list);

View File

@@ -9,16 +9,18 @@ public class ItemViewHolder extends CustomViewHolder {
public final TextView mTitle; public final TextView mTitle;
public final TextView mSubLeft; public final TextView mSubLeft;
public final TextView mSubRight; public final TextView mSubRight;
public final TextView mTopRight;
public ItemViewHolder(View view) { public ItemViewHolder(View view) {
super(view); super(view);
mTitle = view.findViewById(R.id.title); mTitle = view.findViewById(R.id.title);
mSubLeft = view.findViewById(R.id.sub_left); mSubLeft = view.findViewById(R.id.sub_left);
mSubRight = view.findViewById(R.id.sub_right); mSubRight = view.findViewById(R.id.sub_right);
mTopRight = view.findViewById(R.id.top_right);
} }
@Override @Override
public String toString() { public String toString() {
return super.toString() + " '" + mTitle.getText() + "' '" + mSubLeft.getText() + "' '" + mSubRight.getText() + "'"; return super.toString() + " '" + mTitle.getText() + "' '" + mSubLeft.getText() + "' '" + mSubRight.getText() + "' '" + mTopRight.getText() + "'";
} }
} }

View File

@@ -35,4 +35,17 @@
android:layout_alignParentEnd="true" android:layout_alignParentEnd="true"
android:layout_alignParentRight="true" android:layout_alignParentRight="true"
tools:text="20.03.18 18:42 Uhr" /> tools:text="20.03.18 18:42 Uhr" />
<TextView
android:id="@+id/top_right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@id/title"
android:layout_alignBottom="@id/title"
android:textColor="#343434"
android:textSize="12sp"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
tools:text="Raum 105"
tools:ignore="RelativeOverlap" />
</RelativeLayout> </RelativeLayout>

View File

@@ -34,4 +34,6 @@
<string name="hello_blank_fragment" translatable="false">Hello blank fragment</string> <string name="hello_blank_fragment" translatable="false">Hello blank fragment</string>
<string name="enter_offline_mode">Enter Offline Mode (%1$s)</string> <string name="enter_offline_mode">Enter Offline Mode (%1$s)</string>
<string name="no_items_available">No items available!</string> <string name="no_items_available">No items available!</string>
<string name="past_events">Past Events</string>
<string name="events">Events</string>
</resources> </resources>