Commit f05bad14 authored by Varun Patil's avatar Varun Patil

Add clickable notifications

parent 7cd72b00
......@@ -180,15 +180,12 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_notifications) {
showNotifications = true;
// fetchNotifications();
NotificationsFragment notificationsFragment = new NotificationsFragment();
updateFragment(notificationsFragment);
return true;
}
return super.onOptionsItemSelected(item);
......
......@@ -5,20 +5,26 @@ import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.google.gson.Gson;
import com.squareup.picasso.Picasso;
import java.util.List;
import app.insti.ItemClickListener;
import app.insti.R;
import app.insti.api.model.AppNotification;
import app.insti.data.Event;
import app.insti.data.Notification;
public class NotificationsAdapter extends RecyclerView.Adapter<NotificationsAdapter.Viewholder> {
private List<AppNotification> notifications;
private List<Notification> notifications;
private Context context;
private ItemClickListener itemClickListener;
public NotificationsAdapter(List<AppNotification> notifications, ItemClickListener itemClickListener) {
public NotificationsAdapter(List<Notification> notifications, ItemClickListener itemClickListener) {
this.notifications = notifications;
this.itemClickListener = itemClickListener;
}
......@@ -27,7 +33,7 @@ public class NotificationsAdapter extends RecyclerView.Adapter<NotificationsAdap
public Viewholder onCreateViewHolder(ViewGroup viewGroup, int i) {
context = viewGroup.getContext();
LayoutInflater inflater = LayoutInflater.from(context);
View notificationView = inflater.inflate(R.layout.notification, viewGroup, false);
View notificationView = inflater.inflate(R.layout.body_card_view, viewGroup, false);
final Viewholder notificationsViewHolder = new Viewholder(notificationView);
notificationView.setOnClickListener(new View.OnClickListener() {
......@@ -41,8 +47,14 @@ public class NotificationsAdapter extends RecyclerView.Adapter<NotificationsAdap
@Override
public void onBindViewHolder(Viewholder viewholder, int i) {
AppNotification appNotification = notifications.get(i);
viewholder.notificationTitle.setText(appNotification.getNotificationName());
Gson gson = new Gson();
Notification appNotification = notifications.get(i);
viewholder.notificationVerb.setText(appNotification.getNotificationVerb());
if (appNotification.getNotificationActorType().contains("event")) {
Event event = gson.fromJson(gson.toJson(appNotification.getNotificationActor()), Event.class);
Picasso.get().load(event.getEventImageURL()).into(viewholder.notificationPicture);
viewholder.notificationTitle.setText(event.getEventName());
}
}
@Override
......@@ -52,11 +64,15 @@ public class NotificationsAdapter extends RecyclerView.Adapter<NotificationsAdap
public class Viewholder extends RecyclerView.ViewHolder {
private TextView notificationTitle;
private ImageView notificationPicture;
private TextView notificationVerb;
public Viewholder(View itemView) {
super(itemView);
notificationTitle = (TextView) itemView.findViewById(R.id.notification_title);
notificationPicture = (ImageView) itemView.findViewById(R.id.body_card_avatar);
notificationTitle = (TextView) itemView.findViewById(R.id.body_card_name);
notificationVerb = (TextView) itemView.findViewById(R.id.body_card_description);
}
}
}
......@@ -10,6 +10,7 @@ import app.insti.api.model.LoginResponse;
import app.insti.api.model.NewsFeedResponse;
import app.insti.data.HostelMessMenu;
import app.insti.data.NewsArticle;
import app.insti.data.Notification;
import app.insti.data.PlacementBlogPost;
import app.insti.data.TrainingBlogPost;
import app.insti.data.User;
......@@ -64,6 +65,9 @@ public interface RetrofitInterface {
@GET("news")
Call<List<NewsArticle>> getNews(@Header("Cookie") String sessionID);
@GET("notifications")
Call<List<Notification>> getNotifications(@Header("Cookie") String sessionID);
@GET("logout")
Call<Void> logout(@Header("Cookie") String sessionID);
......
package app.insti.data;
import android.arch.persistence.room.ColumnInfo;
import android.arch.persistence.room.Entity;
import android.arch.persistence.room.PrimaryKey;
import android.support.annotation.NonNull;
import com.google.gson.annotations.SerializedName;
@Entity(tableName = "news")
public class Notification {
@NonNull()
@PrimaryKey()
@ColumnInfo(name = "id")
@SerializedName("id")
private Integer notificationId;
@ColumnInfo(name = "verb")
@SerializedName("verb")
private String notificationVerb;
@ColumnInfo(name = "unread")
@SerializedName("unread")
private boolean notificationUnread;
@ColumnInfo(name = "actor_type")
@SerializedName("actor_type")
private String notificationActorType;
@ColumnInfo(name = "actor")
@SerializedName("actor")
private Object notificationActor;
public Notification(@NonNull Integer notificationId, String notificationVerb, boolean notificationUnread, String notificationActorType, Object notificationActor) {
this.notificationId = notificationId;
this.notificationVerb = notificationVerb;
this.notificationUnread = notificationUnread;
this.notificationActorType = notificationActorType;
this.notificationActor = notificationActor;
}
@NonNull
public Integer getNotificationId() {
return notificationId;
}
public void setNotificationId(@NonNull Integer notificationId) {
this.notificationId = notificationId;
}
public String getNotificationVerb() {
return notificationVerb;
}
public void setNotificationVerb(String notificationVerb) {
this.notificationVerb = notificationVerb;
}
public boolean isNotificationUnread() {
return notificationUnread;
}
public void setNotificationUnread(boolean notificationUnread) {
this.notificationUnread = notificationUnread;
}
public String getNotificationActorType() {
return notificationActorType;
}
public void setNotificationActorType(String notificationActorType) {
this.notificationActorType = notificationActorType;
}
public Object getNotificationActor() {
return notificationActor;
}
public void setNotificationActor(Object notificationActor) {
this.notificationActor = notificationActor;
}
}
......@@ -3,12 +3,15 @@ package app.insti.fragment;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import com.google.gson.Gson;
......@@ -16,10 +19,17 @@ import java.util.List;
import app.insti.Constants;
import app.insti.ItemClickListener;
import app.insti.MainActivity;
import app.insti.R;
import app.insti.adapter.NotificationsAdapter;
import app.insti.api.RetrofitInterface;
import app.insti.api.ServiceGenerator;
import app.insti.api.model.AppNotification;
import app.insti.api.model.NotificationsResponse;
import app.insti.data.Notification;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
/**
* A simple {@link Fragment} subclass.
......@@ -28,6 +38,8 @@ public class NotificationsFragment extends BaseFragment {
RecyclerView notificationsRecyclerView;
List<Notification> notifications;
public NotificationsFragment() {
// Required empty public constructor
}
......@@ -47,18 +59,44 @@ public class NotificationsFragment extends BaseFragment {
Toolbar toolbar = getActivity().findViewById(R.id.toolbar);
toolbar.setTitle("Notifications");
Bundle bundle = getArguments();
String notificationsResponseJson = bundle.getString(Constants.NOTIFICATIONS_RESPONSE_JSON);
NotificationsResponse notificationsResponse = new Gson().fromJson(notificationsResponseJson, NotificationsResponse.class);
showNotifications(notificationsResponse);
RetrofitInterface retrofitInterface = ServiceGenerator.createService(RetrofitInterface.class);
retrofitInterface.getNotifications(((MainActivity)getActivity()).getSessionIDHeader()).enqueue(new Callback<List<Notification>>() {
@Override
public void onResponse(Call<List<Notification>> call, Response<List<Notification>> response) {
if (response.isSuccessful()) {
notifications = response.body();
showNotifications(notifications);
}
}
private void showNotifications(NotificationsResponse notificationsResponse) {
List<AppNotification> notifications = notificationsResponse.getNotifications();
@Override
public void onFailure(Call<List<Notification>> call, Throwable t) {
}
});
}
private void showNotifications(final List<Notification> notifications) {
NotificationsAdapter notificationsAdapter = new NotificationsAdapter(notifications, new ItemClickListener() {
@Override
public void onItemClick(View v, int position) {
//TODO: What to do?
/* Get the notification */
Notification notification = notifications.get(position);
/* Open event */
if (notification.getNotificationActorType().contains("event")) {
String eventJson = new Gson().toJson(notification.getNotificationActor());
Bundle bundle = getArguments();
if (bundle == null) bundle = new Bundle();
bundle.putString(Constants.EVENT_JSON, eventJson);
EventFragment eventFragment = new EventFragment();
eventFragment.setArguments(bundle);
FragmentManager manager = getActivity().getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left, R.anim.slide_in_right, R.anim.slide_out_right);
transaction.replace(R.id.framelayout_for_fragment, eventFragment, eventFragment.getTag());
transaction.addToBackStack(eventFragment.getTag()).commit();
}
}
});
notificationsRecyclerView = (RecyclerView) getActivity().findViewById(R.id.notifications_recycler_view);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment