Commit d61135c1 authored by Sajal Narang's avatar Sajal Narang

Implement News Feed API

parent 8219ecaf
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
<component name="ProjectModuleManager"> <component name="ProjectModuleManager">
<modules> <modules>
<module fileurl="file://$PROJECT_DIR$/IITB-App.iml" filepath="$PROJECT_DIR$/IITB-App.iml" /> <module fileurl="file://$PROJECT_DIR$/IITB-App.iml" filepath="$PROJECT_DIR$/IITB-App.iml" />
<module fileurl="file://$PROJECT_DIR$/IITBApp.iml" filepath="$PROJECT_DIR$/IITBApp.iml" />
<module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" /> <module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" />
</modules> </modules>
</component> </component>
......
...@@ -28,6 +28,7 @@ ext { ...@@ -28,6 +28,7 @@ ext {
appAuthVersion = '0.2.0' appAuthVersion = '0.2.0'
retrofitVersion = '2.1.0' retrofitVersion = '2.1.0'
okhttpVersion = '3.4.1' okhttpVersion = '3.4.1'
picassoVersion = '2.5.0'
} }
...@@ -49,5 +50,6 @@ dependencies { ...@@ -49,5 +50,6 @@ dependencies {
compile "com.squareup.retrofit2:converter-gson:${retrofitVersion}" compile "com.squareup.retrofit2:converter-gson:${retrofitVersion}"
compile "com.squareup.okhttp3:okhttp:${okhttpVersion}" compile "com.squareup.okhttp3:okhttp:${okhttpVersion}"
compile "com.squareup.okhttp3:logging-interceptor:${okhttpVersion}" compile "com.squareup.okhttp3:logging-interceptor:${okhttpVersion}"
compile "com.squareup.picasso:picasso:${picassoVersion}"
} }
apply plugin: 'com.google.gms.google-services' apply plugin: 'com.google.gms.google-services'
package in.ac.iitb.gymkhana.iitbapp;
import android.view.View;
public interface ItemClickListener {
void onItemClick(View v, int position);
}
package in.ac.iitb.gymkhana.iitbapp.adapter;
import android.content.Context;
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.squareup.picasso.Picasso;
import java.util.List;
import in.ac.iitb.gymkhana.iitbapp.ItemClickListener;
import in.ac.iitb.gymkhana.iitbapp.R;
import in.ac.iitb.gymkhana.iitbapp.api.model.Event;
public class FeedAdapter extends RecyclerView.Adapter<FeedAdapter.ViewHolder> {
private List<Event> posts;
private Context context;
private ItemClickListener itemClickListener;
public FeedAdapter(List<Event> posts, ItemClickListener itemClickListener) {
this.posts = posts;
this.itemClickListener = itemClickListener;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
context = viewGroup.getContext();
LayoutInflater inflater = LayoutInflater.from(context);
View postView = inflater.inflate(R.layout.post, viewGroup, false);
final ViewHolder postViewHolder = new ViewHolder(postView);
postView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
itemClickListener.onItemClick(v, postViewHolder.getAdapterPosition());
}
});
return postViewHolder;
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
Event currentEvent = posts.get(i);
viewHolder.eventTitle.setText(currentEvent.getEventName());
viewHolder.eventDetails.setText(currentEvent.getEventDescription());
Picasso.with(context).load(currentEvent.getEventImage()).into(viewHolder.eventPicture);
}
@Override
public int getItemCount() {
return posts.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
private ImageView eventPicture;
private TextView eventTitle;
private TextView eventDetails;
private ImageView eventEnthu;
public ViewHolder(View itemView) {
super(itemView);
eventPicture = (ImageView) itemView.findViewById(R.id.event_picture);
eventTitle = (TextView) itemView.findViewById(R.id.event_title);
eventDetails = (TextView) itemView.findViewById(R.id.event_details);
eventEnthu = (ImageView) itemView.findViewById(R.id.event_enthu);
}
}
}
...@@ -2,11 +2,18 @@ package in.ac.iitb.gymkhana.iitbapp.api; ...@@ -2,11 +2,18 @@ package in.ac.iitb.gymkhana.iitbapp.api;
import in.ac.iitb.gymkhana.iitbapp.api.model.LoginRequest; import in.ac.iitb.gymkhana.iitbapp.api.model.LoginRequest;
import in.ac.iitb.gymkhana.iitbapp.api.model.LoginResponse; import in.ac.iitb.gymkhana.iitbapp.api.model.LoginResponse;
import in.ac.iitb.gymkhana.iitbapp.api.model.NewsFeedRequest;
import in.ac.iitb.gymkhana.iitbapp.api.model.NewsFeedResponse;
import retrofit2.Call; import retrofit2.Call;
import retrofit2.http.Body; import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.POST; import retrofit2.http.POST;
import retrofit2.http.PUT;
public interface RetrofitInterface { public interface RetrofitInterface {
@POST("/login/") @POST("login/")
Call<LoginResponse> login(@Body LoginRequest loginRequest); Call<LoginResponse> login(@Body LoginRequest loginRequest);
@GET("getNewsFeed/")
Call<NewsFeedResponse> getNewsFeed(@Body NewsFeedRequest newsFeedRequest);
} }
package in.ac.iitb.gymkhana.iitbapp.api.model;
import com.google.gson.annotations.SerializedName;
public class Event {
@SerializedName("event_name")
String eventName;
@SerializedName("event_description")
String eventDescription;
@SerializedName("event_image")
String eventImage;
@SerializedName("event_creator_name")
String eventCreatorName;
@SerializedName("event_creator_id")
String eventCreatorId;
@SerializedName("event_going_status")
int eventEnthu;
public Event(String eventName, String eventDescription, String eventImage, String eventCreatorName, String eventCreatorId, int eventEnthu) {
this.eventName = eventName;
this.eventDescription = eventDescription;
this.eventImage = eventImage;
this.eventCreatorName = eventCreatorName;
this.eventCreatorId = eventCreatorId;
this.eventEnthu = eventEnthu;
}
public String getEventName() {
return eventName;
}
public void setEventName(String eventName) {
this.eventName = eventName;
}
public String getEventDescription() {
return eventDescription;
}
public void setEventDescription(String eventDescription) {
this.eventDescription = eventDescription;
}
public String getEventImage() {
return eventImage;
}
public void setEventImage(String eventImage) {
this.eventImage = eventImage;
}
public String getEventCreatorName() {
return eventCreatorName;
}
public void setEventCreatorName(String eventCreatorName) {
this.eventCreatorName = eventCreatorName;
}
public String getEventCreatorId() {
return eventCreatorId;
}
public void setEventCreatorId(String eventCreatorId) {
this.eventCreatorId = eventCreatorId;
}
public int getEventEnthu() {
return eventEnthu;
}
public void setEventEnthu(int eventEnthu) {
this.eventEnthu = eventEnthu;
}
}
package in.ac.iitb.gymkhana.iitbapp.api.model;
public class NewsFeedRequest {
public static final int FOLLOWED = 0;
public static final int POPULAR = 1;
private int type;
private int from;
private int to;
public NewsFeedRequest(int type, int from, int to) {
this.type = type;
this.from = from;
this.to = to;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public int getFrom() {
return from;
}
public void setFrom(int from) {
this.from = from;
}
public int getTo() {
return to;
}
public void setTo(int to) {
this.to = to;
}
}
package in.ac.iitb.gymkhana.iitbapp.api.model;
import com.google.gson.annotations.SerializedName;
import java.util.List;
public class NewsFeedResponse {
@SerializedName("posts")
private List<Event> events;
public NewsFeedResponse(List<Event> events) {
this.events = events;
}
public List<Event> getEvents() {
return events;
}
public void setEvents(List<Event> events) {
this.events = events;
}
}
...@@ -3,17 +3,32 @@ package in.ac.iitb.gymkhana.iitbapp.fragment; ...@@ -3,17 +3,32 @@ package in.ac.iitb.gymkhana.iitbapp.fragment;
import android.os.Bundle; import android.os.Bundle;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import java.util.List;
import in.ac.iitb.gymkhana.iitbapp.ItemClickListener;
import in.ac.iitb.gymkhana.iitbapp.R; import in.ac.iitb.gymkhana.iitbapp.R;
import in.ac.iitb.gymkhana.iitbapp.adapter.FeedAdapter;
import in.ac.iitb.gymkhana.iitbapp.api.RetrofitInterface;
import in.ac.iitb.gymkhana.iitbapp.api.ServiceGenerator;
import in.ac.iitb.gymkhana.iitbapp.api.model.Event;
import in.ac.iitb.gymkhana.iitbapp.api.model.NewsFeedRequest;
import in.ac.iitb.gymkhana.iitbapp.api.model.NewsFeedResponse;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
/** /**
* A simple {@link Fragment} subclass. * A simple {@link Fragment} subclass.
*/ */
public class FeedFragment extends Fragment { public class FeedFragment extends Fragment {
RecyclerView feedRecyclerView;
public FeedFragment() { public FeedFragment() {
// Required empty public constructor // Required empty public constructor
...@@ -27,4 +42,36 @@ public class FeedFragment extends Fragment { ...@@ -27,4 +42,36 @@ public class FeedFragment extends Fragment {
return inflater.inflate(R.layout.fragment_feed, container, false); return inflater.inflate(R.layout.fragment_feed, container, false);
} }
@Override
public void onStart() {
super.onStart();
NewsFeedRequest newsFeedRequest = new NewsFeedRequest(NewsFeedRequest.FOLLOWED, 0, 20);
RetrofitInterface retrofitInterface = ServiceGenerator.createService(RetrofitInterface.class);
retrofitInterface.getNewsFeed().enqueue(new Callback<NewsFeedResponse>() {
@Override
public void onResponse(Call<NewsFeedResponse> call, Response<NewsFeedResponse> response) {
if (response.isSuccessful()) {
NewsFeedResponse newsFeedResponse = response.body();
List<Event> events = newsFeedResponse.getEvents();
FeedAdapter feedAdapter = new FeedAdapter(events, new ItemClickListener() {
@Override
public void onItemClick(View v, int position) {
// TODO: Launch EventFragment
}
});
feedRecyclerView = (RecyclerView) getActivity().findViewById(R.id.feed_recycler_view);
feedRecyclerView.setAdapter(feedAdapter);
feedRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
}
//Server Error
}
@Override
public void onFailure(Call<NewsFeedResponse> call, Throwable t) {
//Network Error
}
});
}
} }
...@@ -4,10 +4,9 @@ ...@@ -4,10 +4,9 @@
android:layout_height="match_parent" android:layout_height="match_parent"
tools:context="in.ac.iitb.gymkhana.iitbapp.fragment.FeedFragment"> tools:context="in.ac.iitb.gymkhana.iitbapp.fragment.FeedFragment">
<!-- TODO: Update blank fragment layout --> <android.support.v7.widget.RecyclerView
<TextView android:id="@+id/feed_recycler_view"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent" />
android:text="@string/hello_blank_fragment" />
</FrameLayout> </FrameLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="8dp"
android:orientation="horizontal">
<ImageView
android:layout_weight="1"
android:layout_width="0dp"
android:id="@+id/event_picture"
android:layout_height="50dp" />
<LinearLayout
android:orientation="vertical"
android:layout_width="0dp"
android:layout_weight="3"
android:layout_height="wrap_content">
<TextView
android:textColor="@android:color/black"
android:textSize="24sp"
android:id="@+id/event_title"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/event_details"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
<ImageView
android:src="@drawable/ic_input_add"
android:id="@+id/event_enthu"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content" />
</LinearLayout>
\ No newline at end of file
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