Commit da0000c4 authored by Varun Patil's avatar Varun Patil

Add user profile achievements

parent 56844f19
......@@ -3,12 +3,15 @@ package app.insti.adapter;
import androidx.fragment.app.Fragment;
import android.view.View;
import java.util.ArrayList;
import java.util.List;
import app.insti.R;
import app.insti.Utils;
import app.insti.api.model.Achievement;
import app.insti.api.model.Body;
import app.insti.api.model.Event;
import app.insti.api.model.Role;
import app.insti.api.model.User;
import app.insti.interfaces.CardInterface;
......@@ -25,6 +28,17 @@ public class GenericAdapter extends CardAdapter<CardInterface> {
Utils.openBodyFragment((Body) cardInterface, fragment, view.findViewById(R.id.object_picture));
} else if (cardInterface instanceof User) {
Utils.openUserFragment((User) cardInterface, fragment, view.findViewById(R.id.object_picture));
} else if (cardInterface instanceof Role) {
Utils.openBodyFragment(((Role) cardInterface).getRoleBodyDetails(), fragment, view.findViewById(R.id.object_picture));
} else if (cardInterface instanceof Achievement) {
Achievement a = (Achievement) cardInterface;
if (a.getAchievementEvent() != null) {
a.getAchievementEvent().setEventBodies(new ArrayList<>());
a.getAchievementEvent().getEventBodies().add(a.getAchievementBody());
Utils.openEventFragment(a.getAchievementEvent(), fragment, view.findViewById(R.id.object_picture));
} else {
Utils.openBodyFragment(a.getAchievementBody(), fragment, view.findViewById(R.id.object_picture));
}
}
}
......
package app.insti.api.model;
import androidx.annotation.NonNull;
import com.google.gson.annotations.SerializedName;
import java.util.Objects;
import app.insti.interfaces.CardInterface;
public class Achievement implements CardInterface {
@NonNull()
@SerializedName("id")
private String achievementID;
@SerializedName("title")
private String achievementTitle;
@SerializedName("description")
private String achievementDescription;
@SerializedName("body_detail")
private Body achievementBody;
@SerializedName("event_detail")
private Event achievementEvent;
@SerializedName("dismissed")
private boolean achievementDismissed;
@SerializedName("verified")
private boolean achievementVerified;
@SerializedName("user")
private User achivementUser;
@SerializedName("body")
private String achievementBodyId;
@SerializedName("event")
private String achievementEventId;
public Achievement(@NonNull String achievementID, String achievementTitle, String achievementDescription, boolean achievementDismissed, boolean achievementVerified, String achievementBodyId, String achievementEventId) {
this.achievementID = achievementID;
this.achievementTitle = achievementTitle;
this.achievementDescription = achievementDescription;
this.achievementDismissed = achievementDismissed;
this.achievementVerified = achievementVerified;
this.achievementBodyId = achievementBodyId;
this.achievementEventId = achievementEventId;
}
@NonNull
public String getAchievementID() {
return achievementID;
}
public void setAchievementID(@NonNull String achievementID) {
this.achievementID = achievementID;
}
public String getAchievementTitle() {
return achievementTitle;
}
public void setAchievementTitle(String achievementTitle) {
this.achievementTitle = achievementTitle;
}
public String getAchievementDescription() {
return achievementDescription;
}
public void setAchievementDescription(String achievementDescription) {
this.achievementDescription = achievementDescription;
}
public Body getAchievementBody() {
return achievementBody;
}
public void setAchievementBody(Body achievementBody) {
this.achievementBody = achievementBody;
}
public Event getAchievementEvent() {
return achievementEvent;
}
public void setAchievementEvent(Event achievementEvent) {
this.achievementEvent = achievementEvent;
}
public boolean isAchievementDismissed() {
return achievementDismissed;
}
public void setAchievementDismissed(boolean achievementDismissed) {
this.achievementDismissed = achievementDismissed;
}
public boolean isAchievementVerified() {
return achievementVerified;
}
public void setAchievementVerified(boolean achievementVerified) {
this.achievementVerified = achievementVerified;
}
public User getAchivementUser() {
return achivementUser;
}
public void setAchivementUser(User achivementUser) {
this.achivementUser = achivementUser;
}
public String getAchievementBodyId() {
return achievementBodyId;
}
public void setAchievementBodyId(String achievementBodyId) {
this.achievementBodyId = achievementBodyId;
}
public String getAchievementEventId() {
return achievementEventId;
}
public void setAchievementEventId(String achievementEventId) {
this.achievementEventId = achievementEventId;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Achievement achievement = (Achievement) o;
return Objects.equals(achievementID, achievement.achievementID);
}
public long getId() {
return getAchievementID().hashCode();
}
public String getTitle() {
return getAchievementTitle();
}
public String getSubtitle() {
if (getAchievementEvent() != null) {
return getAchievementEvent().getEventName();
}
if (getAchievementBody() != null) {
return getAchievementBody().getBodyName();
}
return getAchievementDescription();
}
public String getAvatarUrl() {
String url = null;
if (getAchievementEvent() != null) {
url = getAchievementEvent().getEventImageURL();
}
if (url == null || url.equals("") && getAchievementBody() != null) {
url = getAchievementBody().getBodyImageURL();
}
return url;
}
}
......@@ -104,7 +104,7 @@ public class Event implements CardInterface {
public String getEventImageURL() {
// Fallback to body image if event has no image
if (eventImageURL == null) {
if (eventImageURL == null && getEventBodies() != null && getEventBodies().size() > 0) {
return getEventBodies().get(0).getBodyImageURL();
}
return eventImageURL;
......
......@@ -56,6 +56,9 @@ public class User implements CardInterface {
@SerializedName("former_roles")
private List<Role> userFormerRoles;
@SerializedName("achievements")
private List<Achievement> userAchievements;
@SerializedName("website_url")
private String userWebsiteURL;
......@@ -220,6 +223,14 @@ public class User implements CardInterface {
this.showContactNumber = showContactNumber;
}
public List<Achievement> getUserAchievements() {
return userAchievements;
}
public void setUserAchievements(List<Achievement> userAchievements) {
this.userAchievements = userAchievements;
}
public String getCurrentRole() {
return currentRole;
}
......
......@@ -57,6 +57,7 @@ import app.insti.ShareURLMaker;
import app.insti.Utils;
import app.insti.activity.MainActivity;
import app.insti.adapter.BodyAdapter;
import app.insti.api.EmptyCallback;
import app.insti.api.RetrofitInterface;
import app.insti.api.model.Body;
import app.insti.api.model.Event;
......@@ -196,6 +197,19 @@ public class EventFragment extends BackHandledFragment implements TransitionTarg
behavior.onNestedPreScroll(mCoordinatorLayour, mAppBarLayout, null, 0, offsetPx, new int[]{0, 0}, 0);
}
private void refreshEvent(Event min_event) {
RetrofitInterface retrofitInterface = Utils.getRetrofitInterface();
retrofitInterface.getEvent(Utils.getSessionIDHeader(), min_event.getEventID()).enqueue(new EmptyCallback<Event>() {
@Override
public void onResponse(Call<Event> call, Response<Event> response) {
if (response.isSuccessful()) {
event = response.body();
inflateViews(event);
}
}
});
}
private void inflateViews(final Event event) {
eventPicture = (ImageView) getActivity().findViewById(R.id.event_picture_2);
final TextView eventTitle = (TextView) getActivity().findViewById(R.id.event_page_title);
......@@ -214,12 +228,18 @@ public class EventFragment extends BackHandledFragment implements TransitionTarg
}
eventTitle.setText(event.getEventName());
Markwon.setMarkdown(eventDescription, event.getEventDescription());
Timestamp timestamp = event.getEventStartTime();
Date Date = new Date(timestamp.getTime());
SimpleDateFormat simpleDateFormatDate = new SimpleDateFormat("dd MMM");
SimpleDateFormat simpleDateFormatTime = new SimpleDateFormat("HH:mm");
// Check for minimal event
if (event.getEventDescription() == null) {
refreshEvent(event);
return;
}
Markwon.setMarkdown(eventDescription, event.getEventDescription());
final List<Body> bodyList = event.getEventBodies();
final RecyclerView bodyRecyclerView = getActivity().findViewById(R.id.body_card_recycler_view);
BodyAdapter bodyAdapter = new BodyAdapter(bodyList, this);
......
package app.insti.fragment;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
import app.insti.Constants;
import app.insti.R;
import app.insti.adapter.GenericAdapter;
import app.insti.adapter.RoleAdapter;
import app.insti.api.model.Role;
import app.insti.interfaces.CardInterface;
/**
* A simple {@link Fragment} subclass..
* Use the {@link GenericRecyclerViewFragment#newInstance} factory method to
* create an instance of this fragment.
*/
public class GenericRecyclerViewFragment extends Fragment implements TransitionTargetFragment, TransitionTargetChild {
public static final String TAG = "GenericRecyclerViewFragment";
public Fragment parentFragment = null;
private List<CardInterface> cardInterfaces;
public GenericRecyclerViewFragment() {
// Required empty public constructor
}
@Override
public void transitionEnd() {
if (parentFragment instanceof TransitionTargetFragment) {
((TransitionTargetFragment) parentFragment).transitionEnd();
}
}
@Override
public Fragment getParent() {
return parentFragment;
}
// TODO: Rename and change types and number of parameters
public static GenericRecyclerViewFragment newInstance(List<CardInterface> cardInterfaces) {
GenericRecyclerViewFragment fragment = new GenericRecyclerViewFragment();
Bundle args = new Bundle();
/* Serialize the objects */
try {
ByteArrayOutputStream bo = new ByteArrayOutputStream();
ObjectOutputStream so = new ObjectOutputStream(bo);
so.writeObject(cardInterfaces);
so.flush();
args.putByteArray(Constants.ROLE_LIST_JSON, bo.toByteArray());
} catch (Exception e) {
Log.wtf("profile", e);
}
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
try {
byte b[] = getArguments().getByteArray(Constants.ROLE_LIST_JSON);
ByteArrayInputStream bi = new ByteArrayInputStream(b);
ObjectInputStream si = new ObjectInputStream(bi);
cardInterfaces = (List<CardInterface>) si.readObject();
} catch (Exception e) {
Log.wtf("profile", e);
cardInterfaces = new ArrayList<>();
}
}
}
@Override
public void onStart() {
super.onStart();
RecyclerView recyclerView = (RecyclerView) getActivity().findViewById(R.id.role_recycler_view);
GenericAdapter genericAdapter = new GenericAdapter(cardInterfaces, this);
genericAdapter.uid = "GRVFrag";
recyclerView.setAdapter(genericAdapter);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_role_recycler_view, container, false);
}
}
\ No newline at end of file
......@@ -16,6 +16,8 @@ import com.google.android.material.tabs.TabLayout;
import androidx.fragment.app.Fragment;
import androidx.viewpager.widget.ViewPager;
import androidx.appcompat.widget.Toolbar;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
......@@ -35,10 +37,12 @@ import app.insti.Utils;
import app.insti.adapter.TabAdapter;
import app.insti.api.EmptyCallback;
import app.insti.api.RetrofitInterface;
import app.insti.api.model.Achievement;
import app.insti.api.model.Body;
import app.insti.api.model.Event;
import app.insti.api.model.Role;
import app.insti.api.model.User;
import app.insti.interfaces.CardInterface;
import retrofit2.Call;
import retrofit2.Response;
......@@ -178,17 +182,21 @@ public class UserFragment extends BackHandledFragment implements TransitionTarge
final List<Role> roleList = user.getUserRoles();
final List<Body> bodyList = user.getUserFollowedBodies();
final List<Event> eventList = user.getUserGoingEvents();
List<Role> formerRoleList = user.getUserFormerRoles();
List<Role> allRoles = new ArrayList<>(roleList);
final List<Role> formerRoleList = user.getUserFormerRoles();
/* Construct user profile */
final List<CardInterface> profile = new ArrayList<>(roleList);
for (Role role : formerRoleList) {
Role temp = new Role(role);
temp.setRoleName("Former " + role.getRoleName() + " " + role.getRoleYear());
allRoles.add(temp);
profile.add(temp);
}
profile.addAll(user.getUserAchievements());
List<Event> eventInterestedList = user.getUserInterestedEvents();
eventList.removeAll(eventInterestedList);
eventList.addAll(eventInterestedList);
RoleRecyclerViewFragment frag1 = RoleRecyclerViewFragment.newInstance(allRoles);
GenericRecyclerViewFragment frag1 = GenericRecyclerViewFragment.newInstance(profile);
BodyRecyclerViewFragment frag2 = BodyRecyclerViewFragment.newInstance(bodyList);
EventRecyclerViewFragment frag3 = EventRecyclerViewFragment.newInstance(eventList);
......@@ -197,7 +205,7 @@ public class UserFragment extends BackHandledFragment implements TransitionTarge
frag3.parentFragment = this;
TabAdapter tabAdapter = new TabAdapter(getChildFragmentManager());
tabAdapter.addFragment(frag1, "Associations");
tabAdapter.addFragment(frag1, "Profile");
tabAdapter.addFragment(frag2, "Following");
tabAdapter.addFragment(frag3, "Events");
......
package app.insti.interfaces;
public interface CardInterface {
import java.io.Serializable;
public interface CardInterface extends Serializable {
long getId();
String getTitle();
String getSubtitle();
......
......@@ -9,7 +9,7 @@ buildscript {
}
dependencies {
classpath 'com.android.tools.build:gradle:3.4.0'
classpath 'com.android.tools.build:gradle:3.4.2'
classpath 'com.google.gms:google-services:4.2.0'
// NOTE: Do not place your application dependencies here; they belong
......
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