Implemented News with Demo Entries

This commit is contained in:
Caesar2011
2018-11-18 11:12:13 +01:00
parent 8e3360549f
commit 50d07193a0
22 changed files with 399 additions and 34 deletions

View File

@@ -270,7 +270,7 @@ public class MainActivity extends AppCompatActivity
} }
private int getDefaultFragmentAfterLogin() { private int getDefaultFragmentAfterLogin() {
return FRAGMENT_MODULES; return FRAGMENT_NEWS;
} }
private void toLogoutState() { private void toLogoutState() {

View File

@@ -48,7 +48,7 @@ public class CanteensFragment extends Fragment {
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_modules_list, 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

@@ -47,7 +47,7 @@ public class ModulesFragment extends Fragment {
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_modules_list, 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

@@ -0,0 +1,61 @@
package de.sebse.fuplanner.fragments;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import de.sebse.fuplanner.R;
import de.sebse.fuplanner.fragments.ModulesFragment.OnModulesFragmentInteractionListener;
import de.sebse.fuplanner.services.KVV.types.Modules;
import de.sebse.fuplanner.tools.UtilsDate;
import de.sebse.fuplanner.tools.types.News;
import de.sebse.fuplanner.tools.types.NewsList;
import de.sebse.fuplanner.tools.ui.NewsViewHolder;
/**
* {@link RecyclerView.Adapter} that can display a {@link Modules.Module} and makes a call to the
* specified {@link OnModulesFragmentInteractionListener}.
*/
class NewsAdapter extends RecyclerView.Adapter<NewsViewHolder> {
private NewsList mValues;
NewsAdapter() {
mValues = null;
}
public void setNews(NewsList news) {
mValues = news;
this.notifyDataSetChanged();
}
@NonNull
@Override
public NewsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_news_item, parent, false);
return new NewsViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull NewsViewHolder holder, int position) {
News news = mValues.getPast(position);
holder.mHeader.setText(news.getTitle());
switch (news.getCategory()) {
case News.CATEGORY_UPDATE:
holder.mSubLeft.setText(R.string.update_news);
case News.CATEGORY_TRICKS:
holder.mSubLeft.setText(R.string.tricks);
}
holder.mSubRight.setText(UtilsDate.getModifiedDate(news.getDate()));
holder.mText.setText(news.getText());
}
@Override
public int getItemCount() {
return mValues != null ? mValues.sizePast() : 0;
}
}

View File

@@ -1,6 +1,7 @@
package de.sebse.fuplanner.fragments; package de.sebse.fuplanner.fragments;
import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
@@ -10,7 +11,22 @@ import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.io.InputStream;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import de.sebse.fuplanner.R; import de.sebse.fuplanner.R;
import de.sebse.fuplanner.tools.DateSortedList;
import de.sebse.fuplanner.tools.MainActivityListener;
import de.sebse.fuplanner.tools.UtilsDate;
import de.sebse.fuplanner.tools.logging.Logger;
import de.sebse.fuplanner.tools.types.News;
import de.sebse.fuplanner.tools.types.NewsList;
/** /**
* A simple {@link Fragment} subclass. * A simple {@link Fragment} subclass.
@@ -18,6 +34,9 @@ import de.sebse.fuplanner.R;
* create an instance of this fragment. * create an instance of this fragment.
*/ */
public class NewsFragment extends Fragment { public class NewsFragment extends Fragment {
private Logger log = new Logger(this);
private MainActivityListener mListener;
private NewsAdapter mAdapter;
// TODO: Rename parameter arguments, choose names that match // TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
@@ -42,11 +61,86 @@ public class NewsFragment extends Fragment {
return fragment; return fragment;
} }
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof MainActivityListener) {
mListener = (MainActivityListener) context;
mListener.onTitleTextChange(R.string.news);
}
else
throw new RuntimeException(context.toString() + " must implement MainActivityListener");
refresh();
}
@Override
public void onDetach() {
super.onDetach();
mListener = null;
}
private String loadJSONFromAsset() {
if (getActivity() == null)
return null;
String json = null;
try {
InputStream is = getActivity().getResources().openRawResource(R.raw.news);
int size = is.available();
byte[] buffer = new byte[size];
is.read(buffer);
is.close();
json = new String(buffer, "UTF-8");
} catch (IOException ex) {
ex.printStackTrace();
return null;
}
return json;
}
@Override @Override
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 View view = inflater.inflate(R.layout.fragment_recycler_norefresh, container, false);
return inflater.inflate(R.layout.fragment_news, container, false); // Set the adapter
Context context = view.getContext();
RecyclerView recyclerView = view.findViewById(R.id.list);
recyclerView.setLayoutManager(new LinearLayoutManager(context));
mAdapter = new NewsAdapter();
recyclerView.setAdapter(mAdapter);
refresh();
return view;
}
private void refresh() {
if (mAdapter == null)
return;
String fromAsset = loadJSONFromAsset();
if (fromAsset != null) {
try {
JSONObject json = new JSONObject(fromAsset);
JSONArray news = json.getJSONArray("news");
NewsList dates = new NewsList();
for (int i = news.length() - 1; i >= 0; i--) {
String title = news.getJSONObject(i).getString("title");
String categoryString = news.getJSONObject(i).getString("category");
int category;
if (categoryString.equals("CATEGORY_TRICKS"))
category = News.CATEGORY_TRICKS;
else
category = News.CATEGORY_UPDATE;
String dateString = news.getJSONObject(i).getString("date");
long date = UtilsDate.stringToMillis(dateString, "dd.MM.yyyy");
String text = news.getJSONObject(i).getString("text");
News event = new News(title, category, date, text);
dates.add(event);
}
mAdapter.setNews(dates);
} catch (JSONException e) {
e.printStackTrace();
}
}
} }
} }

View File

@@ -7,6 +7,7 @@ import android.os.Build;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import android.text.format.DateFormat; import android.text.format.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import java.util.Locale; import java.util.Locale;
@@ -65,4 +66,17 @@ public class UtilsDate {
public static boolean dateEquals(long a, long b) { public static boolean dateEquals(long a, long b) {
return a / 86400000 == b / 86400000; return a / 86400000 == b / 86400000;
} }
public static long stringToMillis(String dateString, String format) {
try {
@SuppressLint("SimpleDateFormat") SimpleDateFormat sdf = new SimpleDateFormat(format);
Date date = sdf.parse(dateString);
return date.getTime();
} catch (ParseException e) {
e.printStackTrace();
return 0;
}
}
} }

View File

@@ -0,0 +1,48 @@
package de.sebse.fuplanner.tools.types;
import androidx.annotation.NonNull;
public class News {
public static final int CATEGORY_TRICKS = 0;
public static final int CATEGORY_UPDATE = 1;
private String title;
private int category;
private long date;
private String text;
public News(String title, int category, long date, String text) {
this.title = title;
this.category = category;
this.date = date;
this.text = text;
}
public String getTitle() {
return title;
}
public int getCategory() {
return category;
}
public long getDate() {
return date;
}
public String getText() {
return text;
}
@Override
public String toString() {
return "News{" +
"title='" + title + '\'' +
", category=" + category +
", date=" + date +
", text='" + text + '\'' +
'}';
}
}

View File

@@ -0,0 +1,15 @@
package de.sebse.fuplanner.tools.types;
import de.sebse.fuplanner.tools.DateSortedList;
public class NewsList extends DateSortedList<News> {
@Override
protected long getDateByItem(News item) {
return item.getDate();
}
@Override
protected boolean reversed() {
return true;
}
}

View File

@@ -0,0 +1,28 @@
package de.sebse.fuplanner.tools.ui;
import android.view.View;
import android.widget.TextView;
import androidx.annotation.NonNull;
import de.sebse.fuplanner.R;
public class NewsViewHolder extends CustomViewHolder {
public final TextView mHeader;
public final TextView mSubLeft;
public final TextView mSubRight;
public final TextView mText;
public NewsViewHolder(View view) {
super(view);
mHeader = view.findViewById(R.id.header);
mSubLeft = view.findViewById(R.id.sub_left);
mSubRight = view.findViewById(R.id.sub_right);
mText = view.findViewById(R.id.text);
}
@NonNull
@Override
public String toString() {
return super.toString() + " '" + mHeader.getText() + "' '" + mSubLeft.getText() + "' '" + mSubRight.getText() + "' '" + mText.getText() + "'";
}
}

View File

@@ -1,17 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/swipe_container"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem="@layout/list_all_caption" />
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.recyclerview.widget.RecyclerView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem="@layout/list_all_items" />

View File

@@ -4,16 +4,14 @@
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/swipe_container" android:id="@+id/swipe_container"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/list" android:id="@+id/list"
android:name=".fragments.moddetails.ModDetailOverviewFragment"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:context=".fragments.moddetails.ModDetailOverviewFragment" tools:listitem="@layout/list_all_items" />
tools:listitem="@layout/list_all_caption" />
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout> </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>

View File

@@ -9,7 +9,12 @@
android:id="@+id/string" android:id="@+id/string"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="@dimen/text_margin" android:layout_marginLeft="@dimen/cardview_margin"
android:layout_marginStart="@dimen/cardview_margin"
android:layout_marginTop="@dimen/text_margin"
android:layout_marginBottom="@dimen/text_margin"
android:layout_marginRight="@dimen/cardview_margin"
android:layout_marginEnd="@dimen/cardview_margin"
tools:text="Caption" tools:text="Caption"
android:textAppearance="@style/Base.TextAppearance.AppCompat.Headline" /> android:textAppearance="@style/Base.TextAppearance.AppCompat.Headline" />
</LinearLayout> </LinearLayout>

View File

@@ -4,12 +4,14 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="4dp"> xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_margin="@dimen/cardview_margin"
card_view:cardElevation="@dimen/cardview_elevation">
<RelativeLayout <RelativeLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal" android:orientation="horizontal"
android:padding="5dip" > android:padding="@dimen/cardview_padding" >
<TextView <TextView
android:id="@+id/title" android:id="@+id/title"
android:layout_width="wrap_content" android:layout_width="wrap_content"

View File

@@ -4,12 +4,12 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="4dp"> android:layout_margin="@dimen/cardview_margin">
<RelativeLayout <RelativeLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal" android:orientation="horizontal"
android:padding="5dip" > android:padding="@dimen/cardview_padding" >
<TextView <TextView
android:id="@+id/title" android:id="@+id/title"
android:layout_width="wrap_content" android:layout_width="wrap_content"

View File

@@ -1,9 +1,11 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<de.sebse.fuplanner.tools.ui.cardview.ExpandableCardView xmlns:android="http://schemas.android.com/apk/res/android" <de.sebse.fuplanner.tools.ui.cardview.ExpandableCardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:card_view="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="4dp" android:layout_margin="@dimen/cardview_margin"
card_view:cardElevation="@dimen/card_elevation"
app:animationDuration="300" app:animationDuration="300"
app:inner_view="@layout/list_announcement_body" app:inner_view="@layout/list_announcement_body"
app:outer_view="@layout/list_announcement_header" app:outer_view="@layout/list_announcement_header"

View File

@@ -1,9 +1,11 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<de.sebse.fuplanner.tools.ui.cardview.ExpandableCardView xmlns:android="http://schemas.android.com/apk/res/android" <de.sebse.fuplanner.tools.ui.cardview.ExpandableCardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:card_view="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="4dp" android:layout_margin="@dimen/cardview_margin"
card_view:cardElevation="@dimen/card_elevation"
app:animationDuration="300" app:animationDuration="300"
app:inner_view="@layout/list_canteen_body" app:inner_view="@layout/list_canteen_body"
app:outer_view="@layout/list_canteen_header" app:outer_view="@layout/list_canteen_header"

View File

@@ -0,0 +1,60 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/card_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/cardview_margin"
card_view:cardElevation="@dimen/cardview_elevation">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<!-- This is the specific part you asked to color -->
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorFUBlue"
android:padding="@dimen/cardview_padding"
android:orientation="vertical">
<TextView
android:id="@+id/header"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:text="Neues Feature mit einer sehr sehr langen Überschrift!"
android:textColor="@color/colorFUWhite"
android:textStyle="bold"
android:textSize="16sp" />
<TextView
android:id="@+id/sub_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:text="Tipps/Tricks"
android:textColor="@color/colorFUOrange"
android:layout_below="@id/header"
/>
<TextView
android:id="@+id/sub_right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:text="20.09.2018"
android:textColor="@color/colorFUOrange"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_below="@id/header" />
</RelativeLayout>
<TextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/cardview_padding"
tools:text="@string/lorem_ipsum_100" />
</LinearLayout>
</androidx.cardview.widget.CardView>

View File

@@ -0,0 +1,34 @@
{
"news": [
{
"title": "Linear Motion",
"date": "18.11.2018",
"category": "CATEGORY_TRICKS",
"text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet,"
},
{
"title": "Linear Motion",
"date": "20.06.2019",
"category": "CATEGORY_TRICKS",
"text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet,"
},
{
"title": "Linear Motion",
"date": "20.03.2019",
"category": "CATEGORY_UPDATE",
"text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet,"
},
{
"title": "Linear Motion",
"date": "30.03.2019",
"category": "CATEGORY_TRICKS",
"text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet,"
},
{
"title": "Linear Motion",
"date": "20.03.2018",
"category": "CATEGORY_UPDATE",
"text": "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet,"
}
]
}

View File

@@ -79,4 +79,6 @@
<string name="mail_icon">Mail Icon</string> <string name="mail_icon">Mail Icon</string>
<string name="mail_default_text">Hallo %1$s, \n\n\n\nMit freundlichen Grüßen\n\n\n\nGesendet von der FUPlanner Android App</string> <string name="mail_default_text">Hallo %1$s, \n\n\n\nMit freundlichen Grüßen\n\n\n\nGesendet von der FUPlanner Android App</string>
<string name="news">Neuigkeiten</string> <string name="news">Neuigkeiten</string>
<string name="update_news">Update-News</string>
<string name="tricks">Tipps/Tricks</string>
</resources> </resources>

View File

@@ -5,6 +5,9 @@
<dimen name="nav_header_vertical_spacing">16dp</dimen> <dimen name="nav_header_vertical_spacing">16dp</dimen>
<dimen name="nav_header_height">170dp</dimen> <dimen name="nav_header_height">170dp</dimen>
<dimen name="text_margin">16dp</dimen> <dimen name="text_margin">16dp</dimen>
<dimen name="cardview_margin">4dp</dimen>
<dimen name="cardview_padding">5dp</dimen>
<dimen name="cardview_elevation">4dp</dimen>
</resources> </resources>

View File

@@ -87,4 +87,6 @@
<string name="mail_icon">Mail Icon</string> <string name="mail_icon">Mail Icon</string>
<string name="mail_default_text">Dear %1$s, \n\n\n\nYours sincerely\n\n\n\nSend by FUPlanner Android App</string> <string name="mail_default_text">Dear %1$s, \n\n\n\nYours sincerely\n\n\n\nSend by FUPlanner Android App</string>
<string name="news">News</string> <string name="news">News</string>
<string name="update_news">Update News</string>
<string name="tricks">Tips/Tricks</string>
</resources> </resources>