Added new layout to Announcement and assignment with attachment tags

This commit is contained in:
Caesar2011
2018-10-24 00:15:17 +02:00
parent 14cf917ec8
commit dddfe3b1d2
12 changed files with 142 additions and 125 deletions

View File

@@ -103,7 +103,6 @@ class MealAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
string.append(" - ").append(s);
}
viewHolder.mNotes.setText(string.toString());
viewHolder.mCategory.setText(meal.getCategory());
viewHolder.mIconVegan.setVisibility(meal.getVegan() == Meal.VEGAN_VEGAN ? View.VISIBLE : View.GONE);
viewHolder.mIconVegetarian.setVisibility(meal.getVegan() == Meal.VEGAN_VEGETARIAN ? View.VISIBLE : View.GONE);
viewHolder.mIconBio.setVisibility((meal.getCertificates() & Meal.CERT_BIO) != 0 ? View.VISIBLE : View.GONE);

View File

@@ -3,28 +3,29 @@ package de.sebse.fuplanner.fragments.moddetails;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import java.util.ArrayList;
import com.cunoraz.tagview.Tag;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.List;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.RecyclerView;
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.Preferences;
import de.sebse.fuplanner.tools.Regex;
import de.sebse.fuplanner.tools.UtilsDate;
import de.sebse.fuplanner.tools.logging.Logger;
import de.sebse.fuplanner.tools.ui.AnnouncementViewHolder;
import de.sebse.fuplanner.tools.ui.ItemViewHolder;
import de.sebse.fuplanner.tools.ui.MealViewHolder;
import de.sebse.fuplanner.tools.ui.StringViewHolder;
class ModDetailAnnounceAdapter extends RecyclerView.Adapter<AnnouncementViewHolder> {
@Nullable private Modules.Module mModule = null;
private Logger log = new Logger(this);
public void setModule(Modules.Module module) {
this.mModule = module;
@@ -49,16 +50,36 @@ class ModDetailAnnounceAdapter extends RecyclerView.Adapter<AnnouncementViewHold
holder.mTitle.setText(item.getTitle());
holder.mSubTitle.setText(UtilsDate.getModifiedDateTime(holder.mView.getContext(), item.getCreatedOn()));
StringBuilder string = new StringBuilder();
string.append(item.getBody());
List<String> notes = item.getUrls();
for (int i1 = 0, notesSize = notes.size(); i1 < notesSize; i1++) {
if (i1 != 0)
string.append("\n");
String s = notes.get(i1);
string.append(" - ").append(s);
if (!notes.isEmpty()) {
holder.mTagGroup.setVisibility(View.VISIBLE);
for (int i = 0, notesSize = notes.size(); i < notesSize; i++) {
String name;
try {
name = URLDecoder.decode(Regex.regex("/([^/]*)$", notes.get(i)), "UTF-8");
} catch (NoSuchFieldException e) {
e.printStackTrace();
name = holder.mView.getResources().getString(R.string.attachment_nr, i);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
name = holder.mView.getResources().getString(R.string.attachment_nr, i);
}
Tag tag = new Tag(name);
tag.id = i;
tag.layoutColor = ContextCompat.getColor(holder.mView.getContext(), R.color.colorFUBlue);
holder.mTagGroup.addTag(tag);
log.d(notes.get(i));
}
holder.mTagGroup.setOnTagClickListener((tag, i) -> {
String s = notes.get(i);
if (s != null) {
log.d("Download", s);
}
});
} else {
holder.mTagGroup.setVisibility(View.GONE);
}
holder.mNotes.setText(string.toString());
holder.mNotes.setText(item.getBody());
}
@Override

View File

@@ -95,5 +95,4 @@ public class ModDetailAnnounceFragment extends Fragment {
}, forceRefresh);
}
}
}

View File

@@ -3,109 +3,29 @@ package de.sebse.fuplanner.fragments.moddetails;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import com.cunoraz.tagview.Tag;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.List;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.RecyclerView;
import de.sebse.fuplanner.R;
import de.sebse.fuplanner.services.KVV.types.Assignment;
import de.sebse.fuplanner.services.KVV.types.Modules;
import de.sebse.fuplanner.tools.Regex;
import de.sebse.fuplanner.tools.UtilsDate;
import de.sebse.fuplanner.tools.ui.ItemViewHolder;
import de.sebse.fuplanner.tools.ui.StringViewHolder;
import de.sebse.fuplanner.tools.logging.Logger;
import de.sebse.fuplanner.tools.ui.AnnouncementViewHolder;
class ModDetailAssignmentAdapter extends BaseExpandableListAdapter {
class ModDetailAssignmentAdapter extends RecyclerView.Adapter<AnnouncementViewHolder> {
private Modules.Module mModule = null;
@Override
public String getChild(int groupPosition, int childPosition) {
StringBuilder sb = new StringBuilder();
sb.append(this.getGroup(groupPosition).getInstructions());
sb.append("\n\n");
for (String s : this.getGroup(groupPosition).getUrls())
{
sb.append(s);
sb.append("\n\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.closed));
itemHolder.mSubRight.setText(UtilsDate.getModifiedDateTime(parent.getContext(), assignment.getDueDate()));
return convertView;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return false;
}
@Nullable private Modules.Module mModule = null;
private Logger log = new Logger(this);
public void setModule(Modules.Module module) {
this.mModule = module;
@@ -115,4 +35,70 @@ class ModDetailAssignmentAdapter extends BaseExpandableListAdapter {
public void setModule() {
this.notifyDataSetChanged();
}
@NonNull
public AnnouncementViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
View view = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.list_announcement_items, viewGroup, false);
return new AnnouncementViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull AnnouncementViewHolder holder, int position) {
holder.reset();
Assignment item = getAssignment(position);
holder.mTitle.setText(item.getTitle());
holder.mSubTitle.setText(UtilsDate.getModifiedDateTime(holder.mView.getContext(), item.getDueDate()));
List<String> notes = item.getUrls();
if (!notes.isEmpty()) {
holder.mTagGroup.setVisibility(View.VISIBLE);
for (int i = 0, notesSize = notes.size(); i < notesSize; i++) {
String name;
try {
name = URLDecoder.decode(Regex.regex("/([^/]*)$", notes.get(i)), "UTF-8");
} catch (NoSuchFieldException e) {
e.printStackTrace();
name = holder.mView.getResources().getString(R.string.attachment_nr, i);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
name = holder.mView.getResources().getString(R.string.attachment_nr, i);
}
Tag tag = new Tag(name);
tag.id = i;
tag.layoutColor = ContextCompat.getColor(holder.mView.getContext(), R.color.colorFUBlue);
holder.mTagGroup.addTag(tag);
log.d(notes.get(i));
}
holder.mTagGroup.setOnTagClickListener((tag, i) -> {
String s = notes.get(i);
if (s != null) {
log.d("Download", s);
}
});
} else {
holder.mTagGroup.setVisibility(View.GONE);
}
holder.mNotes.setText(item.getInstructions());
}
@Override
public int getItemCount() {
if (mModule != null && mModule.assignments != null)
return mModule.assignments.size();
else
return 0;
}
@Override
public int getItemViewType(int position) {
return 0;
}
private Assignment getAssignment(int index) {
if (mModule != null && mModule.assignments != null)
return mModule.assignments.get(index);
else
return null;
}
}

View File

@@ -9,6 +9,7 @@ import android.widget.ExpandableListView;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.RecyclerView;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import de.sebse.fuplanner.MainActivity;
import de.sebse.fuplanner.R;
@@ -61,9 +62,9 @@ public class ModDetailAssignmentFragment extends Fragment {
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_expandable_list_view, container, false);
View view = inflater.inflate(R.layout.fragment_recycler_view, container, false);
// Set the adapter
ExpandableListView expandableListView = view.findViewById(R.id.list);
RecyclerView expandableListView = view.findViewById(R.id.list);
adapter = new ModDetailAssignmentAdapter();
expandableListView.setAdapter(adapter);
@@ -94,5 +95,4 @@ public class ModDetailAssignmentFragment extends Fragment {
}, forceRefresh);
}
}
}

View File

@@ -4,12 +4,15 @@ import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.cunoraz.tagview.TagView;
import de.sebse.fuplanner.R;
public class AnnouncementViewHolder extends ExpandableCardViewHolder {
public final TextView mTitle;
public final TextView mSubTitle;
public final TextView mNotes;
public final TagView mTagGroup;
public AnnouncementViewHolder(View view) {
@@ -19,6 +22,8 @@ public class AnnouncementViewHolder extends ExpandableCardViewHolder {
mTitle = outerView.findViewById(R.id.title);
mSubTitle = outerView.findViewById(R.id.sub_title);
mNotes = innerView.findViewById(R.id.notes);
mTagGroup = innerView.findViewById(R.id.tag_group);
}
@Override

View File

@@ -9,7 +9,6 @@ import de.sebse.fuplanner.R;
public class MealViewHolder extends ExpandableCardViewHolder {
public final TextView mTitle;
public final TextView mSubTitle;
public final TextView mCategory;
public final TextView mNotes;
public final ImageView mIconVegan;
@@ -25,7 +24,6 @@ public class MealViewHolder extends ExpandableCardViewHolder {
mTitle = outerView.findViewById(R.id.title);
mSubTitle = outerView.findViewById(R.id.sub_title);
mNotes = innerView.findViewById(R.id.notes);
mCategory = innerView.findViewById(R.id.category);
mIconVegan = innerView.findViewById(R.id.icon_vegan);
mIconVegetarian = innerView.findViewById(R.id.icon_vegetarian);
mIconBio = innerView.findViewById(R.id.icon_organic);

View File

@@ -2,10 +2,22 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="20dp">
android:padding="15dp">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/FUTheme.itemValue"
android:id="@+id/notes"/>
<com.cunoraz.tagview.TagView
xmlns:tagview="http://schemas.android.com/apk/res-auto"
android:layout_below="@id/notes"
android:id="@+id/tag_group"
android:layout_width="match_parent"
android:layout_height="match_parent"
tagview:lineMargin="5dp"
tagview:tagMargin="5dp"
tagview:textPaddingLeft="8dp"
tagview:textPaddingTop="5dp"
tagview:textPaddingRight="8dp"
tagview:textPaddingBottom="5dp" />
</RelativeLayout>

View File

@@ -7,12 +7,6 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/FUTheme.itemValue"
android:id="@+id/category"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/category"
style="@style/FUTheme.itemValue"
android:id="@+id/notes"/>
<LinearLayout
android:layout_width="wrap_content"

View File

@@ -67,4 +67,5 @@
<string name="vegan">Vegan</string>
<string name="vegetarian">Vegetarisch</string>
<string name="bio">Aus biologischem Anbau</string>
<string name="attachment_nr">%1$d. Anhang</string>
</resources>

View File

@@ -75,4 +75,5 @@
<string name="vegetarian">Vegetarian</string>
<string name="bio">Organic Food</string>
<string name="msc" translatable="false">MSC</string>
<string name="attachment_nr">Attachment #%1$d</string>
</resources>