From 589b94805480c7b2a041e8101b4456bedaee02a4 Mon Sep 17 00:00:00 2001 From: santi Date: Tue, 27 May 2025 00:04:46 +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! --- .../anilist_adapter/AniListSearchAdapter.java | 176 ++++++++++++++++++ .../adapters/homeadapter/HomeCardAdapter.java | 69 +++++++ app/src/main/res/drawable/bg_search_box.xml | 5 + app/src/main/res/drawable/ic_reply.xml | 9 + .../main/res/layout/item_anilist_search.xml | 53 ++++++ app/src/main/res/layout/item_home_card.xml | 49 +++++ 6 files changed, 361 insertions(+) create mode 100644 app/src/main/java/com/santiparra/yomitrack/model/adapters/anilist_adapter/AniListSearchAdapter.java create mode 100644 app/src/main/java/com/santiparra/yomitrack/model/adapters/homeadapter/HomeCardAdapter.java create mode 100644 app/src/main/res/drawable/bg_search_box.xml create mode 100644 app/src/main/res/drawable/ic_reply.xml create mode 100644 app/src/main/res/layout/item_anilist_search.xml create mode 100644 app/src/main/res/layout/item_home_card.xml diff --git a/app/src/main/java/com/santiparra/yomitrack/model/adapters/anilist_adapter/AniListSearchAdapter.java b/app/src/main/java/com/santiparra/yomitrack/model/adapters/anilist_adapter/AniListSearchAdapter.java new file mode 100644 index 0000000..6c28d19 --- /dev/null +++ b/app/src/main/java/com/santiparra/yomitrack/model/adapters/anilist_adapter/AniListSearchAdapter.java @@ -0,0 +1,176 @@ +package com.santiparra.yomitrack.model.adapters.anilist_adapter; + +import android.content.Context; +import android.content.SharedPreferences; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.santiparra.yomitrack.R; +import com.santiparra.yomitrack.api.ApiClient; +import com.santiparra.yomitrack.api.ApiService; +import com.santiparra.yomitrack.db.entities.AnimeEntity; +import com.santiparra.yomitrack.db.entities.MangaEntity; +import com.santiparra.yomitrack.model.AniListMedia; +import com.santiparra.yomitrack.utils.ActivityLog; +import com.santiparra.yomitrack.utils.DateUtils; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class AniListSearchAdapter extends RecyclerView.Adapter { + + private final List mediaList; + private final Context context; + private final String mediaType; + + public AniListSearchAdapter(Context context, List mediaList, String mediaType) { + this.context = context; + this.mediaList = mediaList; + this.mediaType = mediaType; + } + + @NonNull + @Override + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.item_anilist_search, parent, false); + return new ViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ViewHolder holder, int position) { + AniListMedia item = mediaList.get(position); + holder.title.setText(item.getTitle()); + + Glide.with(context).load(item.getImageUrl()).into(holder.cover); + + holder.btnAdd.setOnClickListener(v -> { + SharedPreferences prefs = context.getSharedPreferences("user_session", Context.MODE_PRIVATE); + int userId = prefs.getInt("user_id", -1); + + if (userId == -1) { + Toast.makeText(context, "Función solo disponible para usuarios registrados", Toast.LENGTH_SHORT).show(); + return; + } + + ApiService apiService = ApiClient.getClient().create(ApiService.class); + + if (mediaType.equals("ANIME")) { + AnimeEntity anime = new AnimeEntity( + item.getId(), + item.getTitle(), + "Watching", + userId, + item.getImageUrl(), + 0, + 0, + 0 + ); + anime.setType("TV"); + + apiService.insertAnime(anime).enqueue(new Callback<>() { + @Override + public void onResponse(Call call, Response response) { + Toast.makeText(context, "Anime añadido", Toast.LENGTH_SHORT).show(); + + // 🔁 Registrar actividad usando Map + Map body = new HashMap<>(); + body.put("userId", userId); + body.put("action", "añadió"); + body.put("mediaTitle", item.getTitle()); + body.put("timestamp", DateUtils.getCurrentTimestamp()); + body.put("imageUrl", item.getImageUrl()); + + apiService.postActivity(body).enqueue(new Callback<>() { + @Override + public void onResponse(Call call, Response response) {} + + @Override + public void onFailure(Call call, Throwable t) { + t.printStackTrace(); + } + }); + } + + @Override + public void onFailure(Call call, Throwable t) { + Toast.makeText(context, "Error al añadir anime", Toast.LENGTH_SHORT).show(); + } + }); + + } else { + MangaEntity manga = new MangaEntity( + item.getId(), + item.getTitle(), + "Reading", + userId, + item.getImageUrl(), + 0, + 0, + 0 + ); + manga.setType("Manga"); + + apiService.insertManga(manga).enqueue(new Callback<>() { + @Override + public void onResponse(Call call, Response response) { + Toast.makeText(context, "Manga añadido", Toast.LENGTH_SHORT).show(); + + Map body = new HashMap<>(); + body.put("userId", userId); + body.put("action", "añadió"); + body.put("mediaTitle", item.getTitle()); + body.put("timestamp", DateUtils.getCurrentTimestamp()); + body.put("imageUrl", item.getImageUrl()); + + apiService.postActivity(body).enqueue(new Callback<>() { + @Override + public void onResponse(Call call, Response response) {} + + @Override + public void onFailure(Call call, Throwable t) { + t.printStackTrace(); + } + }); + } + + @Override + public void onFailure(Call call, Throwable t) { + Toast.makeText(context, "Error al añadir manga", Toast.LENGTH_SHORT).show(); + } + }); + } + }); + } + + @Override + public int getItemCount() { + return mediaList.size(); + } + + public static class ViewHolder extends RecyclerView.ViewHolder { + TextView title; + ImageView cover; + Button btnAdd; + + public ViewHolder(View itemView) { + super(itemView); + title = itemView.findViewById(R.id.itemTitle); + cover = itemView.findViewById(R.id.itemImage); + btnAdd = itemView.findViewById(R.id.btnAdd); + } + } +} diff --git a/app/src/main/java/com/santiparra/yomitrack/model/adapters/homeadapter/HomeCardAdapter.java b/app/src/main/java/com/santiparra/yomitrack/model/adapters/homeadapter/HomeCardAdapter.java new file mode 100644 index 0000000..4f30552 --- /dev/null +++ b/app/src/main/java/com/santiparra/yomitrack/model/adapters/homeadapter/HomeCardAdapter.java @@ -0,0 +1,69 @@ +package com.santiparra.yomitrack.model.adapters.homeadapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.cardview.widget.CardView; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.santiparra.yomitrack.R; +import com.santiparra.yomitrack.model.ItemModel; + +import java.util.List; + +public class HomeCardAdapter extends RecyclerView.Adapter { + + public interface OnItemClickListener { + void onItemClick(ItemModel item); + } + + private final List itemList; + private final OnItemClickListener listener; + + public HomeCardAdapter(List itemList, OnItemClickListener listener) { + this.itemList = itemList; + this.listener = listener; + } + + @NonNull + @Override + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_home_card, parent, false); + return new ViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ViewHolder holder, int position) { + ItemModel item = itemList.get(position); + holder.title.setText(item.getTitle()); + holder.progress.setText(item.getProgress()); + Glide.with(holder.itemView.getContext()).load(item.getImageUrl()).into(holder.cover); + + holder.card.setOnClickListener(v -> listener.onItemClick(item)); + } + + @Override + public int getItemCount() { + return itemList.size(); + } + + public static class ViewHolder extends RecyclerView.ViewHolder { + TextView title, progress; + ImageView cover; + CardView card; + + public ViewHolder(@NonNull View itemView) { + super(itemView); + title = itemView.findViewById(R.id.itemTitle); + progress = itemView.findViewById(R.id.itemProgress); + cover = itemView.findViewById(R.id.itemImage); + card = itemView.findViewById(R.id.cardItem); + } + } +} diff --git a/app/src/main/res/drawable/bg_search_box.xml b/app/src/main/res/drawable/bg_search_box.xml new file mode 100644 index 0000000..284b0b5 --- /dev/null +++ b/app/src/main/res/drawable/bg_search_box.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_reply.xml b/app/src/main/res/drawable/ic_reply.xml new file mode 100644 index 0000000..efda782 --- /dev/null +++ b/app/src/main/res/drawable/ic_reply.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/item_anilist_search.xml b/app/src/main/res/layout/item_anilist_search.xml new file mode 100644 index 0000000..bc831fb --- /dev/null +++ b/app/src/main/res/layout/item_anilist_search.xml @@ -0,0 +1,53 @@ + + + + + + + + + + +