Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 08facdc

Browse files
committed
user side news display datePosted
1 parent 6b6743c commit 08facdc

File tree

2 files changed

+189
-20
lines changed

2 files changed

+189
-20
lines changed

app/src/main/java/com/example/nobulijava/adapters/NewsAdapter.java

Lines changed: 51 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.example.nobulijava.adapters;
22

33
import android.app.Activity;
4-
import android.content.Context;
54
import android.content.DialogInterface;
65
import android.content.Intent;
76
import android.net.Uri;
@@ -18,15 +17,12 @@
1817

1918
import com.bumptech.glide.Glide;
2019
import com.example.nobulijava.R;
21-
import com.example.nobulijava.activity.AdminDashboardActivity;
2220
import com.example.nobulijava.activity.AdminNewsEditActivity;
23-
import com.example.nobulijava.activity.AdminNewsListActivity;
24-
import com.example.nobulijava.activity.AdminQuizEditActivity;
2521
import com.example.nobulijava.activity.LoginActivity;
26-
import com.example.nobulijava.activity.UserDashboardActivity;
2722
import com.example.nobulijava.activity.UserNewsDetailsActivity;
2823
import com.example.nobulijava.model.NewsObj;
2924
import com.example.nobulijava.model.UserObj;
25+
import com.example.nobulijava.utils.DateTimeCalculator;
3026
import com.google.android.gms.tasks.OnSuccessListener;
3127
import com.google.firebase.auth.FirebaseUser;
3228
import com.google.firebase.database.DataSnapshot;
@@ -37,9 +33,17 @@
3733
import com.google.firebase.storage.FirebaseStorage;
3834
import com.google.firebase.storage.StorageReference;
3935

36+
import java.time.LocalDate;
37+
import java.time.LocalTime;
38+
import java.time.Year;
39+
import java.time.YearMonth;
40+
import java.time.format.DateTimeFormatter;
41+
import java.time.temporal.ChronoUnit;
4042
import java.util.ArrayList;
4143

42-
public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.NewsViewHolder>{
44+
import com.example.nobulijava.utils.DateTimeCalculator;
45+
46+
public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.NewsViewHolder> {
4347
private ArrayList<NewsObj> newsDataSet;
4448
private DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference();
4549
private final Activity context;
@@ -67,15 +71,16 @@ public int getItemCount() {
6771
return newsDataSet.size();
6872
}
6973

70-
public class NewsViewHolder extends RecyclerView.ViewHolder{
74+
public class NewsViewHolder extends RecyclerView.ViewHolder {
7175
private final TextView textViewTitle;
7276
private final TextView textViewContent;
7377
private final TextView textViewDatePosted;
7478
private final ImageView imageViewNews;
7579

7680
String FOLDER_NAME = "news_image";
7781
FirebaseStorage storage = FirebaseStorage.getInstance();
78-
Uri uriSelectedImage;
82+
FirebaseUser firebaseCurrentUser = LoginActivity.mAuth.getCurrentUser();
83+
UserObj currentUserObj;
7984

8085
public NewsViewHolder(@NonNull View itemView) {
8186
super(itemView);
@@ -85,12 +90,11 @@ public NewsViewHolder(@NonNull View itemView) {
8590
textViewDatePosted = (TextView) itemView.findViewById(R.id.textView_newsList_datePosted);
8691
imageViewNews = (ImageView) itemView.findViewById(R.id.imageView_newsList_image);
8792

88-
FirebaseUser currentUser = LoginActivity.mAuth.getCurrentUser();
89-
mDatabase.child("User").child(currentUser.getUid()).addValueEventListener(new ValueEventListener() {
93+
mDatabase.child("User").child(firebaseCurrentUser.getUid()).addValueEventListener(new ValueEventListener() {
9094
@Override
9195
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
92-
UserObj user = dataSnapshot.getValue(UserObj.class);
93-
if (user.getIsAdmin()) {
96+
currentUserObj = dataSnapshot.getValue(UserObj.class);
97+
if (currentUserObj.getIsAdmin()) {
9498
itemView.setOnClickListener(new View.OnClickListener() {
9599
@Override
96100
public void onClick(View v) {
@@ -156,22 +160,49 @@ public void onCancelled(@NonNull DatabaseError error) {
156160

157161
}
158162

159-
public void bind(NewsObj newsObj, Integer position){
163+
public void bind(NewsObj newsObj, Integer position) {
160164
textViewTitle.setText(newsObj.getTitle());
161-
if (newsObj.getContent().length() > 105){
165+
if (newsObj.getContent().length() > 105) {
162166
textViewContent.setText(newsObj.getContent().substring(0, 105) + "...");
163-
} else{
167+
} else {
164168
textViewContent.setText(newsObj.getContent());
165169
}
166-
textViewDatePosted.setText(newsObj.getDatePosted());
167170

168-
StorageReference gsReference = storage.getReferenceFromUrl("gs://nobulibot-ysta.appspot.com/" + FOLDER_NAME + "/" + newsObj.getNewsID());
169-
gsReference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
171+
mDatabase.child("User").child(firebaseCurrentUser.getUid()).addValueEventListener(new ValueEventListener() {
170172
@Override
171-
public void onSuccess(Uri uri) {
172-
Glide.with(context).load(uri).into(imageViewNews);
173+
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
174+
currentUserObj = dataSnapshot.getValue(UserObj.class);
175+
if (currentUserObj.getIsAdmin()) {
176+
textViewDatePosted.setText(newsObj.getDatePosted());
177+
} else {
178+
String[] simpleDurationDetails = DateTimeCalculator.simpleDuration(newsObj.getDatePosted());
179+
String toPrint = "";
180+
for (String string: simpleDurationDetails){
181+
toPrint += " " + string;
182+
}
183+
textViewDatePosted.setText(toPrint + " Ago");
184+
185+
System.out.println("Simple duration: " + toPrint);
186+
187+
}
188+
}
189+
190+
@Override
191+
public void onCancelled(@NonNull DatabaseError error) {
192+
173193
}
174194
});
195+
196+
197+
StorageReference gsReference = storage.getReferenceFromUrl("gs://nobulibot-ysta.appspot.com/" + FOLDER_NAME + "/" + newsObj.getNewsID());
198+
gsReference.getDownloadUrl().
199+
200+
addOnSuccessListener(new OnSuccessListener<Uri>() {
201+
@Override
202+
public void onSuccess(Uri uri) {
203+
Glide.with(context).load(uri).into(imageViewNews);
204+
}
205+
});
175206
}
176207
}
177208
}
Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
package com.example.nobulijava.utils;
2+
3+
import java.time.LocalDate;
4+
import java.time.LocalDateTime;
5+
import java.time.LocalTime;
6+
import java.time.Year;
7+
import java.time.YearMonth;
8+
import java.time.format.DateTimeFormatter;
9+
import java.time.temporal.ChronoUnit;
10+
11+
//Java class to do dateTime conversion
12+
//Source dateTime is a String the format of "yyyy/MM/dd HH:mm:ss"
13+
public class DateTimeCalculator {
14+
public static LocalDate getDate(String dateTimeString) {
15+
String dateString = dateTimeString.substring(0, 10);
16+
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
17+
LocalDate localDate = LocalDate.parse(dateString, dateFormatter);
18+
return localDate;
19+
}
20+
21+
public static LocalTime getTime(String dateTimeString) {
22+
String timeString = dateTimeString.substring(11, 19);
23+
DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss");
24+
LocalTime localTime = LocalTime.parse(timeString, timeFormatter);
25+
return localTime;
26+
}
27+
28+
public static long yearsAgo(String startDateTimeString) {
29+
LocalDate startDate = getDate(startDateTimeString);
30+
LocalDate endDate = LocalDate.now();
31+
32+
long yearsAgo = ChronoUnit.YEARS.between(
33+
Year.from(startDate),
34+
Year.from(endDate)
35+
);
36+
37+
return yearsAgo;
38+
}
39+
40+
public static long monthsAgo(String startDateTimeString) {
41+
LocalDate startDate = getDate(startDateTimeString);
42+
LocalDate endDate = LocalDate.now();
43+
44+
long monthsAgo = ChronoUnit.MONTHS.between(
45+
YearMonth.from(startDate),
46+
YearMonth.from(endDate)
47+
);
48+
49+
return monthsAgo;
50+
}
51+
52+
public static long daysAgo(String startDateTimeString) {
53+
LocalDate startDate = getDate(startDateTimeString);
54+
LocalDate endDate = LocalDate.now();
55+
56+
long daysAgo = ChronoUnit.DAYS.between(
57+
startDate,
58+
endDate
59+
);
60+
61+
return daysAgo;
62+
}
63+
64+
public static long hoursAgo(String startDateTimeString) {
65+
LocalTime startTime = getTime(startDateTimeString);
66+
LocalTime endTime = LocalTime.now();
67+
long hoursAgo = ChronoUnit.HOURS.between(
68+
startTime,
69+
endTime
70+
71+
);
72+
73+
return hoursAgo;
74+
}
75+
76+
public static long minutesAgo(String startDateTimeString) {
77+
LocalTime startTime = getTime(startDateTimeString);
78+
LocalTime endTime = LocalTime.now();
79+
long minutesAgo = ChronoUnit.MINUTES.between(
80+
startTime,
81+
endTime
82+
83+
);
84+
85+
return minutesAgo;
86+
}
87+
88+
public static long secondsAgo(String startDateTimeString) {
89+
LocalTime startTime = getTime(startDateTimeString);
90+
LocalTime endTime = LocalTime.now();
91+
long secondsAgo = ChronoUnit.SECONDS.between(
92+
startTime,
93+
endTime
94+
95+
);
96+
97+
return secondsAgo;
98+
}
99+
100+
//Method to round of the time ago to the nearest single unit of time.
101+
public static String[] simpleDuration(String startDateTimeString) {
102+
long yearsAgo = DateTimeCalculator.yearsAgo(startDateTimeString);
103+
long monthsAgo = DateTimeCalculator.monthsAgo(startDateTimeString);
104+
long daysAgo = DateTimeCalculator.daysAgo(startDateTimeString);
105+
long hoursAgo = DateTimeCalculator.hoursAgo(startDateTimeString);
106+
long minutesAgo = DateTimeCalculator.minutesAgo(startDateTimeString);
107+
long secondsAgo = DateTimeCalculator.secondsAgo(startDateTimeString);
108+
109+
String[] durationDetails = {"-", "-"};
110+
111+
if (yearsAgo >= 1) {
112+
durationDetails[0] = Long.toString(yearsAgo);
113+
durationDetails[1] = "Year(s)";
114+
115+
} else if (monthsAgo >= 1) {
116+
durationDetails[0] = Long.toString(monthsAgo);
117+
durationDetails[1] = "Month(s)";
118+
119+
} else if (daysAgo >= 1) {
120+
durationDetails[0] = Long.toString(daysAgo);
121+
durationDetails[1] = "Day(s)";
122+
123+
} else if (hoursAgo >= 1) {
124+
durationDetails[0] = Long.toString(hoursAgo);
125+
durationDetails[1] = "Hour(s)";
126+
127+
} else if (minutesAgo >= 1) {
128+
durationDetails[0] = Long.toString(minutesAgo);
129+
durationDetails[1] = "Minute(s)";
130+
131+
} else if (secondsAgo >= 1) {
132+
durationDetails[0] = Long.toString(secondsAgo);
133+
durationDetails[1] = "Second(s)";
134+
135+
}
136+
return durationDetails;
137+
}
138+
}

0 commit comments

Comments
 (0)