From 85ec9155e40b2dceb9a8f672f8244e228a1692a3 Mon Sep 17 00:00:00 2001 From: santi Date: Fri, 23 May 2025 00:10:51 +0200 Subject: [PATCH] Terminacion de la clase FragmentProfile que ya tiene toda la funcionalidad que a de tener y optimizacion de otras para que funcione y creacion de javas y xml! --- app/src/main/java.zip | Bin 53672 -> 59449 bytes .../santiparra/yomitrack/api/ApiService.java | 22 +++ .../yomitrack/model/RecentActivityModel.java | 17 +- .../RecentActivityAdapter.java | 62 +++++- .../editanime/EditAnimeFragment.java | 52 ++++-- .../editmanga/EditMangaFragment.java | 53 ++++-- .../ui/fragments/home/FragmentHome.java | 4 +- .../ui/fragments/login/LoginFragment.java | 1 - .../ui/fragments/profile/FragmentProfile.java | 176 ++++++++++++++++-- .../yomitrack/utils/ActivityLog.java | 26 ++- app/src/main/res.zip | Bin 11139555 -> 11131876 bytes app/src/main/res/drawable/ic_heart.png | Bin 10858 -> 0 bytes .../main/res/layout/item_activity_card.xml | 156 +++++++--------- app/src/main/res/layout/item_browse_card.xml | 2 +- app/src/main/res/values/colors.xml | 3 +- app/src/main/res/values/ids.xml | 4 + app/src/main/res/values/strings.xml | 2 + 17 files changed, 433 insertions(+), 147 deletions(-) delete mode 100644 app/src/main/res/drawable/ic_heart.png diff --git a/app/src/main/java.zip b/app/src/main/java.zip index f3d60584c1735a2e6a3f5074ad70192210f10a8b..c6dbf95c8d6377c7a11aea4ae3b106b6b057ad1d 100644 GIT binary patch delta 26478 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 Ps0RO=WrlxuAX@(ir}e$q delta 21277 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

y1xGA9BuJ-CFZ{e^O)CkwP->+4(tC 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 y2?S registerUser(@Body UserEntity user); + @POST("users/login") Call loginUser(@Body UserEntity user); @@ -83,9 +86,28 @@ public interface ApiService { @GET("api/activity/list/{userId}") Call> getActivityLog(@Path("userId") int userId); + + @GET("api/activity/comments/{activityId}") + Call> getCommentsByActivity(@Path("activityId") int activityId); + + @GET("/api/activity/like/{userId}/{activityId}") + Call checkLike( + @Path("userId") int userId, + @Path("activityId") int activityId + ); + + @POST("api/activity/like") + Call postLike(@Body JsonObject body); + + @POST("api/activity/comment") + Call postComment(@Body JsonObject body); + @POST("api/activity/add") Call postActivity(@Body Map body); + @HTTP(method = "DELETE", path = "api/activity/like/remove", hasBody = true) + Call deleteLike(@Body JsonObject body); + // ---------------- AniList API ---------------- diff --git a/app/src/main/java/com/santiparra/yomitrack/model/RecentActivityModel.java b/app/src/main/java/com/santiparra/yomitrack/model/RecentActivityModel.java index 208bfca..2a11dfa 100644 --- a/app/src/main/java/com/santiparra/yomitrack/model/RecentActivityModel.java +++ b/app/src/main/java/com/santiparra/yomitrack/model/RecentActivityModel.java @@ -1,20 +1,35 @@ package com.santiparra.yomitrack.model; +import java.util.ArrayList; +import java.util.List; + /** * Modelo de actividad reciente para mostrar acciones de usuario. */ public class RecentActivityModel { + public int activityId; // ← agregar esto public String user; public String action; public String title; public String time; public String imageUrl; + public List comments = new ArrayList<>(); - public RecentActivityModel(String user, String action, String title, String time, String imageUrl) { + public RecentActivityModel(int activityId, String user, String action, String title, String time, String imageUrl) { + this.activityId = activityId; this.user = user; this.action = action; this.title = title; this.time = time; this.imageUrl = imageUrl; } + + public void addComment(CommentModel comment) { + comments.add(comment); + } + + public int getId() { + return activityId; + } } + diff --git a/app/src/main/java/com/santiparra/yomitrack/model/adapters/recentactivity_adapter/RecentActivityAdapter.java b/app/src/main/java/com/santiparra/yomitrack/model/adapters/recentactivity_adapter/RecentActivityAdapter.java index 0548603..a9fd1cb 100644 --- a/app/src/main/java/com/santiparra/yomitrack/model/adapters/recentactivity_adapter/RecentActivityAdapter.java +++ b/app/src/main/java/com/santiparra/yomitrack/model/adapters/recentactivity_adapter/RecentActivityAdapter.java @@ -3,16 +3,17 @@ package com.santiparra.yomitrack.model.adapters.recentactivity_adapter; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.ImageButton; import android.widget.ImageView; +import android.widget.LinearLayout; import android.widget.TextView; - import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; - import com.bumptech.glide.Glide; import com.santiparra.yomitrack.R; +import com.santiparra.yomitrack.model.CommentDialog; +import com.santiparra.yomitrack.model.CommentModel; import com.santiparra.yomitrack.model.RecentActivityModel; - import java.util.List; public class RecentActivityAdapter extends RecyclerView.Adapter { @@ -41,6 +42,36 @@ public class RecentActivityAdapter extends RecyclerView.Adapter { + comment.liked = !comment.liked; + commentLike.setImageResource(comment.liked ? R.drawable.ic_heart_filled : R.drawable.ic_heart); + commentLike.setColorFilter(comment.liked + ? holder.itemView.getContext().getColor(R.color.pink) + : holder.itemView.getContext().getColor(R.color.textPrimary)); + }); + + holder.commentContainer.addView(commentView); + } + } } @Override @@ -48,9 +79,12 @@ public class RecentActivityAdapter extends RecyclerView.Adapter { + isLiked = !isLiked; + likeButton.setImageResource(isLiked ? R.drawable.ic_heart_filled : R.drawable.ic_heart); + likeButton.setColorFilter(isLiked + ? itemView.getContext().getColor(R.color.pink) + : itemView.getContext().getColor(R.color.textPrimary)); + }); + + commentButton.setOnClickListener(v -> { + RecentActivityModel activity = activityList.get(getAdapterPosition()); + int activityId = activity.getId(); + int userId = this.user.getId(); + + CommentDialog dialog = new CommentDialog(itemView.getContext(), userId, activityId, () -> {}); + dialog.show(); + }); } } } diff --git a/app/src/main/java/com/santiparra/yomitrack/ui/fragments/editanime/EditAnimeFragment.java b/app/src/main/java/com/santiparra/yomitrack/ui/fragments/editanime/EditAnimeFragment.java index cceeaec..30c7d8f 100644 --- a/app/src/main/java/com/santiparra/yomitrack/ui/fragments/editanime/EditAnimeFragment.java +++ b/app/src/main/java/com/santiparra/yomitrack/ui/fragments/editanime/EditAnimeFragment.java @@ -19,6 +19,7 @@ import com.santiparra.yomitrack.api.ApiClient; import com.santiparra.yomitrack.api.ApiService; import com.santiparra.yomitrack.db.entities.AnimeEntity; import com.santiparra.yomitrack.model.ApiResponse; +import com.santiparra.yomitrack.ui.fragments.profile.FragmentProfile; import java.util.HashMap; import java.util.Map; @@ -146,7 +147,7 @@ public class EditAnimeFragment extends Fragment { if (response.isSuccessful()) { String message = response.body() != null ? response.body().getMessage() : "Anime actualizado"; Toast.makeText(requireContext(), message, Toast.LENGTH_SHORT).show(); - registrarActividad(anime.getTitle()); + registrarActividad(anime.getTitle(), anime.getImageUrl()); requireContext().getSharedPreferences("user_session", Context.MODE_PRIVATE) .edit().putBoolean("refresh_profile", true).apply(); requireActivity().getSupportFragmentManager().popBackStack(); @@ -165,14 +166,15 @@ public class EditAnimeFragment extends Fragment { } private void deleteAnime() { + registrarActividadEliminacion(anime.getTitle(), anime.getImageUrl()); + api.deleteAnime(anime.getId()).enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { if (!isAdded()) return; if (response.isSuccessful()) { - String message = response.body() != null ? response.body().getMessage() : "Anime eliminado"; - Toast.makeText(requireContext(), message, Toast.LENGTH_SHORT).show(); + Toast.makeText(requireContext(), "Anime eliminado", Toast.LENGTH_SHORT).show(); requireContext().getSharedPreferences("user_session", Context.MODE_PRIVATE) .edit().putBoolean("refresh_profile", true).apply(); requireActivity().getSupportFragmentManager().popBackStack(); @@ -183,35 +185,59 @@ public class EditAnimeFragment extends Fragment { @Override public void onFailure(Call call, Throwable t) { - Log.e("API_RESPONSE", "onFailure eliminar: " + t.getMessage(), t); if (!isAdded()) return; Toast.makeText(requireContext(), "Fallo en la conexión", Toast.LENGTH_SHORT).show(); } }); } - private void registrarActividad(String titulo) { - int userId = requireContext() - .getSharedPreferences("user_session", Context.MODE_PRIVATE) - .getInt("user_id", -1); - + private void registrarActividad(String titulo, String imagen) { + int userId = requireContext().getSharedPreferences("user_session", Context.MODE_PRIVATE).getInt("user_id", -1); if (userId == -1) return; Map actividad = new HashMap<>(); actividad.put("userId", userId); - actividad.put("action", "editó un anime"); + actividad.put("action", "update de un anime"); actividad.put("mediaTitle", titulo); - actividad.put("imageUrl", anime.getImageUrl()); + actividad.put("imageUrl", imagen); api.postActivity(actividad).enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { - Log.d("ACTIVITY_EDIT", "Actividad registrada: " + response.code()); + Log.d("ACTIVITY_DELETE", "Actividad de edicion registrada"); } @Override public void onFailure(Call call, Throwable t) { - Log.e("ACTIVITY_EDIT", "Error al registrar actividad: " + t.getMessage(), t); + Log.e("ACTIVITY_DELETE", "Error al registrar actividad: " + t.getMessage(), t); + } + }); + } + + private void registrarActividadEliminacion(String titulo, String imagen) { + int userId = requireContext().getSharedPreferences("user_session", Context.MODE_PRIVATE).getInt("user_id", -1); + if (userId == -1) return; + + Map actividad = new HashMap<>(); + actividad.put("userId", userId); + actividad.put("action", "eliminó un anime"); + actividad.put("mediaTitle", titulo); + actividad.put("imageUrl", imagen); + + api.postActivity(actividad).enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + Log.d("ACTIVITY_DELETE", "Actividad de eliminación registrada"); + + + if (getParentFragment() instanceof FragmentProfile) { + ((FragmentProfile) getParentFragment()).loadActivity(); + } + } + + @Override + public void onFailure(Call call, Throwable t) { + Log.e("ACTIVITY_DELETE", "Error al registrar actividad: " + t.getMessage(), t); } }); } diff --git a/app/src/main/java/com/santiparra/yomitrack/ui/fragments/editmanga/EditMangaFragment.java b/app/src/main/java/com/santiparra/yomitrack/ui/fragments/editmanga/EditMangaFragment.java index e253e65..cdbddd1 100644 --- a/app/src/main/java/com/santiparra/yomitrack/ui/fragments/editmanga/EditMangaFragment.java +++ b/app/src/main/java/com/santiparra/yomitrack/ui/fragments/editmanga/EditMangaFragment.java @@ -19,6 +19,7 @@ import com.santiparra.yomitrack.api.ApiClient; import com.santiparra.yomitrack.api.ApiService; import com.santiparra.yomitrack.db.entities.MangaEntity; import com.santiparra.yomitrack.model.ApiResponse; +import com.santiparra.yomitrack.ui.fragments.profile.FragmentProfile; import java.util.HashMap; import java.util.Map; @@ -141,7 +142,7 @@ public class EditMangaFragment extends Fragment { if (response.isSuccessful() && response.body() != null) { Toast.makeText(requireContext(), response.body().getMessage(), Toast.LENGTH_SHORT).show(); - registrarActividad(manga.getTitle()); + registrarActividad(manga.getTitle(), manga.getImageUrl()); requireContext().getSharedPreferences("user_session", Context.MODE_PRIVATE) .edit().putBoolean("refresh_profile", true).apply(); requireActivity().getSupportFragmentManager().popBackStack(); @@ -159,13 +160,15 @@ public class EditMangaFragment extends Fragment { } private void deleteManga() { + registrarActividadEliminacionManga(manga.getTitle(), manga.getImageUrl()); + api.deleteManga(manga.getId()).enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { if (!isAdded()) return; - if (response.isSuccessful() && response.body() != null) { - Toast.makeText(requireContext(), response.body().getMessage(), Toast.LENGTH_SHORT).show(); + if (response.isSuccessful()) { + Toast.makeText(requireContext(), "Manga eliminado", Toast.LENGTH_SHORT).show(); requireContext().getSharedPreferences("user_session", Context.MODE_PRIVATE) .edit().putBoolean("refresh_profile", true).apply(); requireActivity().getSupportFragmentManager().popBackStack(); @@ -182,29 +185,55 @@ public class EditMangaFragment extends Fragment { }); } - private void registrarActividad(String titulo) { - int userId = requireContext() - .getSharedPreferences("user_session", Context.MODE_PRIVATE) - .getInt("user_id", -1); - + private void registrarActividad(String titulo, String imagen) { + int userId = requireContext().getSharedPreferences("user_session", Context.MODE_PRIVATE).getInt("user_id", -1); if (userId == -1) return; Map actividad = new HashMap<>(); actividad.put("userId", userId); - actividad.put("action", "editó un manga"); + actividad.put("action", "update de un manga"); actividad.put("mediaTitle", titulo); - actividad.put("imageUrl", manga.getImageUrl()); + actividad.put("imageUrl", imagen); api.postActivity(actividad).enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { - Log.d("ACTIVITY_EDIT_MANGA", "Actividad registrada: " + response.code()); + Log.d("ACTIVITY_DELETE", "Actividad de edicion registrada"); } @Override public void onFailure(Call call, Throwable t) { - Log.e("ACTIVITY_EDIT_MANGA", "Error al registrar actividad: " + t.getMessage(), t); + Log.e("ACTIVITY_DELETE", "Error al registrar actividad: " + t.getMessage(), t); } }); } + + private void registrarActividadEliminacionManga(String titulo, String imagen) { + int userId = requireContext().getSharedPreferences("user_session", Context.MODE_PRIVATE).getInt("user_id", -1); + if (userId == -1) return; + + Map actividad = new HashMap<>(); + actividad.put("userId", userId); + actividad.put("action", "eliminó un manga"); + actividad.put("mediaTitle", titulo); + actividad.put("imageUrl", imagen); + + api.postActivity(actividad).enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + Log.d("ACTIVITY_DELETE", "Actividad de eliminación registrada"); + + if (getParentFragment() instanceof FragmentProfile) { + ((FragmentProfile) getParentFragment()).loadActivity(); + } + } + + @Override + public void onFailure(Call call, Throwable t) { + Log.e("ACTIVITY_DELETE", "Error al registrar actividad: " + t.getMessage(), t); + } + }); + } + + } diff --git a/app/src/main/java/com/santiparra/yomitrack/ui/fragments/home/FragmentHome.java b/app/src/main/java/com/santiparra/yomitrack/ui/fragments/home/FragmentHome.java index f36f5d0..509df28 100644 --- a/app/src/main/java/com/santiparra/yomitrack/ui/fragments/home/FragmentHome.java +++ b/app/src/main/java/com/santiparra/yomitrack/ui/fragments/home/FragmentHome.java @@ -76,8 +76,8 @@ public class FragmentHome extends Fragment { activityRecyclerView.setLayoutManager(new LinearLayoutManager(getContext())); fullRecentActivity.addAll(Arrays.asList( - new RecentActivityModel("Midca", "Read chapters 1 - 60 of", "Choujun! Choujou Senpai", "4 minutes ago", "https://i.imgur.com/7tZ0h8R.jpg"), - new RecentActivityModel("prtrncyon", "Scored 9/10 on", "Chainsaw Man", "12 hours ago", "https://cdn.myanimelist.net/images/manga/2/253146.jpg") + //new RecentActivityModel("Midca", "Read chapters 1 - 60 of", "Choujun! Choujou Senpai", "4 minutes ago", "https://i.imgur.com/7tZ0h8R.jpg"), + //new RecentActivityModel("prtrncyon", "Scored 9/10 on", "Chainsaw Man", "12 hours ago", "https://cdn.myanimelist.net/images/manga/2/253146.jpg") // ... más datos simulados aquí )); diff --git a/app/src/main/java/com/santiparra/yomitrack/ui/fragments/login/LoginFragment.java b/app/src/main/java/com/santiparra/yomitrack/ui/fragments/login/LoginFragment.java index d39395c..7bb56a0 100644 --- a/app/src/main/java/com/santiparra/yomitrack/ui/fragments/login/LoginFragment.java +++ b/app/src/main/java/com/santiparra/yomitrack/ui/fragments/login/LoginFragment.java @@ -80,7 +80,6 @@ public class LoginFragment extends Fragment { } }); } - private void loginAsGuest() { saveUserSession(-1, "Invitado"); goToMainActivity(); diff --git a/app/src/main/java/com/santiparra/yomitrack/ui/fragments/profile/FragmentProfile.java b/app/src/main/java/com/santiparra/yomitrack/ui/fragments/profile/FragmentProfile.java index a4a7179..c2c40ae 100644 --- a/app/src/main/java/com/santiparra/yomitrack/ui/fragments/profile/FragmentProfile.java +++ b/app/src/main/java/com/santiparra/yomitrack/ui/fragments/profile/FragmentProfile.java @@ -3,7 +3,6 @@ package com.santiparra.yomitrack.ui.fragments.profile; import android.content.Context; import android.content.SharedPreferences; import android.content.res.ColorStateList; -import android.graphics.Color; import android.os.Bundle; import android.text.TextUtils; import android.view.LayoutInflater; @@ -16,14 +15,17 @@ import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import com.bumptech.glide.Glide; +import com.google.gson.JsonObject; import com.santiparra.yomitrack.R; import com.santiparra.yomitrack.api.ApiClient; import com.santiparra.yomitrack.api.ApiService; +import com.santiparra.yomitrack.model.CommentDialog; +import com.santiparra.yomitrack.model.CommentModel; import com.santiparra.yomitrack.model.UserStatsResponse; import com.santiparra.yomitrack.utils.ActivityLog; +import com.santiparra.yomitrack.utils.DateUtils; -import com.google.gson.JsonObject; - +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Locale; @@ -151,16 +153,22 @@ public class FragmentProfile extends Fragment { private int getColorForStatus(String status) { switch (status.toLowerCase(Locale.ROOT)) { - case "watching": return requireContext().getColor(R.color.status_watching); - case "completed": return requireContext().getColor(R.color.status_completed); - case "paused": return requireContext().getColor(R.color.status_paused); - case "dropped": return requireContext().getColor(R.color.status_dropped); - case "planning": return requireContext().getColor(R.color.status_planning); - default: return requireContext().getColor(R.color.gray); + case "watching": + return requireContext().getColor(R.color.status_watching); + case "completed": + return requireContext().getColor(R.color.status_completed); + case "paused": + return requireContext().getColor(R.color.status_paused); + case "dropped": + return requireContext().getColor(R.color.status_dropped); + case "planning": + return requireContext().getColor(R.color.status_planning); + default: + return requireContext().getColor(R.color.gray); } } - private void loadActivity() { + public void loadActivity() { api.getActivityLog(userId).enqueue(new Callback>() { @Override public void onResponse(Call> call, Response> response) { @@ -170,14 +178,97 @@ public class FragmentProfile extends Fragment { for (ActivityLog log : response.body()) { View card = inflater.inflate(R.layout.item_activity_card, activityContainer, false); + + LinearLayout commentsContainer = card.findViewById(R.id.commentsContainer); + + commentsContainer.setVisibility(View.GONE); + + card.setOnClickListener(v -> { + if (commentsContainer.getVisibility() == View.VISIBLE) { + commentsContainer.animate().alpha(0).setDuration(150).withEndAction(() -> { + commentsContainer.setVisibility(View.GONE); + }).start(); + } else { + commentsContainer.setAlpha(0); + commentsContainer.setVisibility(View.VISIBLE); + loadComments(log.getId(), commentsContainer); + commentsContainer.animate().alpha(1).setDuration(150).start(); + } + }); + ((TextView) card.findViewById(R.id.activityUser)).setText(username); ((TextView) card.findViewById(R.id.activityAction)).setText(log.getAction()); ((TextView) card.findViewById(R.id.activityTitle)).setText(log.getMediaTitle()); - ((TextView) card.findViewById(R.id.activityTime)).setText(log.getTimestamp()); + ((TextView) card.findViewById(R.id.activityTime)).setText(DateUtils.getRelativeTime(log.getTimestamp())); + ImageView coverImage = card.findViewById(R.id.activityCover); if (!TextUtils.isEmpty(log.getImageUrl())) { - Glide.with(requireContext()).load(log.getImageUrl()).into((ImageView) card.findViewById(R.id.activityCover)); + Glide.with(requireContext()) + .load(log.getImageUrl()) + .placeholder(R.drawable.placeholder_image) + .error(R.drawable.placeholder_image) + .into(coverImage); } + + ImageButton commentButton = card.findViewById(R.id.commentButton); + ImageButton likeButton = card.findViewById(R.id.likeButton); + + commentButton.setOnClickListener(v -> { + CommentDialog dialog = new CommentDialog(requireContext(), userId, log.getId(), () -> { + loadComments(log.getId(), card.findViewById(R.id.commentsContainer)); + }); + dialog.show(); + }); + + api.checkLike(userId, log.getId()).enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful() && response.body() != null) { + final boolean[] isLiked = {response.body().get("liked").getAsBoolean()}; + actualizarCorazon(likeButton, isLiked[0]); + + likeButton.setOnClickListener(v -> { + if (isLiked[0]) { + api.deleteLike(createLikeJson(userId, log.getId())).enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + isLiked[0] = false; + actualizarCorazon(likeButton, false); + } + } + + @Override + public void onFailure(Call call, Throwable t) { + Toast.makeText(getContext(), "Error de conexión", Toast.LENGTH_SHORT).show(); + } + }); + } else { + api.postLike(createLikeJson(userId, log.getId())).enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) { + isLiked[0] = true; + actualizarCorazon(likeButton, true); + } + } + + @Override + public void onFailure(Call call, Throwable t) { + Toast.makeText(getContext(), "Error de conexión", Toast.LENGTH_SHORT).show(); + } + }); + } + }); + } + } + + @Override + public void onFailure(Call call, Throwable t) { + Toast.makeText(getContext(), "Error al verificar like", Toast.LENGTH_SHORT).show(); + } + }); + activityContainer.addView(card); } } @@ -185,7 +276,7 @@ public class FragmentProfile extends Fragment { @Override public void onFailure(Call> call, Throwable t) { - Toast.makeText(getContext(), "Error al cargar actividad", Toast.LENGTH_SHORT).show(); + Toast.makeText(getContext(), "Fallo al cargar actividad", Toast.LENGTH_SHORT).show(); } }); } @@ -219,6 +310,65 @@ public class FragmentProfile extends Fragment { }); } + private void loadComments(int activityId, LinearLayout container) { + api.getCommentsByActivity(activityId).enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + if (response.isSuccessful() && response.body() != null) { + container.removeAllViews(); + LayoutInflater inflater = LayoutInflater.from(getContext()); + + for (CommentModel comment : response.body()) { + View commentView = LayoutInflater.from(getContext()) + .inflate(R.layout.item_comment, container, false); + + TextView usernameView = commentView.findViewById(R.id.commentUsername); + TextView commentText = commentView.findViewById(R.id.commentText); + TextView dateView = commentView.findViewById(R.id.commentDate); + ImageView avatar = commentView.findViewById(R.id.commentAvatar); + + usernameView.setText(comment.getUsername()); + commentText.setText(comment.getText()); + dateView.setText(DateUtils.getRelativeTime(comment.getCreatedAt())); // usa tu util + + if (!TextUtils.isEmpty(comment.getAvatarUrl())) { + Glide.with(getContext()) + .load(comment.getAvatarUrl()) + .placeholder(R.drawable.rectangle_placeholder) + .error(R.drawable.error_image) + .into(avatar); + } + + container.addView(commentView); + } + + } + } + + @Override + public void onFailure(Call> call, Throwable t) { + Toast.makeText(getContext(), "Error al cargar comentarios", Toast.LENGTH_SHORT).show(); + } + }); + } + + private JsonObject createLikeJson(int userId, int activityId) { + JsonObject body = new JsonObject(); + body.addProperty("userId", userId); + body.addProperty("activityId", activityId); + return body; + } + + private void actualizarCorazon(ImageButton likeButton, boolean liked) { + if (liked) { + likeButton.setImageResource(R.drawable.ic_heart_filled); + likeButton.setColorFilter(requireContext().getColor(R.color.pink)); + } else { + likeButton.setImageResource(R.drawable.ic_heart_outline); + likeButton.setColorFilter(requireContext().getColor(R.color.gray)); + } + } + private void saveBiography() { bioPrefs.edit().putString(BIO_KEY, editBiography.getText().toString().trim()).apply(); Toast.makeText(getContext(), "Biografía guardada", Toast.LENGTH_SHORT).show(); diff --git a/app/src/main/java/com/santiparra/yomitrack/utils/ActivityLog.java b/app/src/main/java/com/santiparra/yomitrack/utils/ActivityLog.java index b8437eb..1cc4442 100644 --- a/app/src/main/java/com/santiparra/yomitrack/utils/ActivityLog.java +++ b/app/src/main/java/com/santiparra/yomitrack/utils/ActivityLog.java @@ -4,6 +4,8 @@ import com.google.gson.annotations.SerializedName; public class ActivityLog { + @SerializedName("id") + private int id; @SerializedName("action") private String action; @@ -13,16 +15,26 @@ public class ActivityLog { @SerializedName("timestamp") private String timestamp; - @SerializedName("imagenUrl") + @SerializedName("imageUrl") private String imageUrl; + public int getId() { + return id; + } + + public String getAction() { + return action; + } + + public String getMediaTitle() { + return mediaTitle; + } + + public String getTimestamp() { + return timestamp; + } + public String getImageUrl() { return imageUrl; } - - public String getAction() { return action; } - - public String getMediaTitle() { return mediaTitle; } - - public String getTimestamp() { return timestamp; } } diff --git a/app/src/main/res.zip b/app/src/main/res.zip index 6d43580c3c84bee4da255b12c85a06c77b8ea01a..a262c9fed8476303c5df3b90819f9773c89926f0 100644 GIT binary patch delta 7753 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 delta 15711 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

4@B<%utXh?h+nGBEucv~>Kk2at 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 diff --git a/app/src/main/res/layout/item_activity_card.xml b/app/src/main/res/layout/item_activity_card.xml index abe24e5..0cbcb23 100644 --- a/app/src/main/res/layout/item_activity_card.xml +++ b/app/src/main/res/layout/item_activity_card.xml @@ -1,125 +1,97 @@ - - + android:layout_margin="12dp" + app:cardCornerRadius="24dp" + app:cardElevation="8dp" + app:cardBackgroundColor="@color/primary"> - - - - - + android:gravity="center_vertical"> + + - + android:layout_weight="1"> - + + + + android:text="hace 3 horas" + android:textSize="12sp" + android:textColor="@color/gray" + android:layout_marginTop="4dp" /> - - + - - - - - - - - - - - - - + app:tint="@color/gray" /> - - + + + diff --git a/app/src/main/res/layout/item_browse_card.xml b/app/src/main/res/layout/item_browse_card.xml index 5d6448f..ff89e96 100644 --- a/app/src/main/res/layout/item_browse_card.xml +++ b/app/src/main/res/layout/item_browse_card.xml @@ -11,7 +11,7 @@ android:layout_height="170dp" android:scaleType="centerCrop" android:clipToOutline="true" - android:background="@drawable/sample_cover" /> + /> #121926 #FFFFFF #808080 - #F26D50 + #F26D50 + #FF4081 #4CAF50 diff --git a/app/src/main/res/values/ids.xml b/app/src/main/res/values/ids.xml index 6ff2984..f555780 100644 --- a/app/src/main/res/values/ids.xml +++ b/app/src/main/res/values/ids.xml @@ -52,4 +52,8 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index aa44334..43d99d0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -7,6 +7,8 @@ \n Write a status... + + Anime Manga