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!

This commit is contained in:
santi 2025-05-27 00:04:46 +02:00
parent b7770c9fc6
commit 589b948054
6 changed files with 361 additions and 0 deletions

View File

@ -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<AniListSearchAdapter.ViewHolder> {
private final List<AniListMedia> mediaList;
private final Context context;
private final String mediaType;
public AniListSearchAdapter(Context context, List<AniListMedia> 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<String, Object> 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<String, Object> 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);
}
}
}

View File

@ -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<HomeCardAdapter.ViewHolder> {
public interface OnItemClickListener {
void onItemClick(ItemModel item);
}
private final List<ItemModel> itemList;
private final OnItemClickListener listener;
public HomeCardAdapter(List<ItemModel> 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);
}
}
}

View File

@ -0,0 +1,5 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/primary"/>
<corners android:radius="24dp"/>
</shape>

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FF000000"
android:pathData="M10,9V5L3,12l7,7v-4c4.55,0 7.5,1.43 9.5,4.29 -1.14,-4.57 -4.34,-8.29 -9.5,-8.29z" />
</vector>

View File

@ -0,0 +1,53 @@
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="12dp"
card_view:cardCornerRadius="16dp"
card_view:cardElevation="6dp"
android:layout_margin="8dp"
card_view:cardBackgroundColor="@color/primary">
<LinearLayout
android:orientation="horizontal"
android:padding="12dp"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/itemImage"
android:layout_width="90dp"
android:layout_height="130dp"
android:scaleType="centerCrop"
android:layout_marginEnd="12dp" />
<LinearLayout
android:orientation="vertical"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:gravity="center_vertical">
<TextView
android:id="@+id/itemTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Título"
android:textColor="@android:color/white"
android:textStyle="bold"
android:textSize="16sp"
android:maxLines="2"
android:ellipsize="end"/>
<Button
android:id="@+id/btnAdd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="AÑADIR"
android:textAllCaps="true"
android:layout_marginTop="8dp"
android:backgroundTint="#3A3D42"
android:textColor="@android:color/white"/>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>

View File

@ -0,0 +1,49 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/cardItem"
android:layout_width="160dp"
android:layout_height="wrap_content"
android:layout_marginEnd="12dp"
android:layout_marginBottom="8dp"
android:layout_marginTop="4dp"
android:layout_marginStart="4dp"
android:backgroundTint="@color/primary"
android:elevation="4dp"
android:clickable="true"
android:focusable="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="8dp">
<ImageView
android:id="@+id/itemImage"
android:layout_width="match_parent"
android:layout_height="180dp"
android:scaleType="centerCrop"
android:contentDescription="@string/cover_image" />
<TextView
android:id="@+id/itemTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/textPrimary"
android:textSize="14sp"
android:maxLines="2"
android:ellipsize="end"
android:layout_marginTop="8dp"
android:text="Title" />
<TextView
android:id="@+id/itemProgress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/textPrimary"
android:textSize="12sp"
android:layout_marginTop="4dp"
android:text="0/0" />
</LinearLayout>
</androidx.cardview.widget.CardView>