remove posts

This commit is contained in:
Benedek László 2024-05-08 13:50:00 +02:00
parent a3eb670595
commit 2ffc8db200
4 changed files with 91 additions and 15 deletions

View File

@ -3,12 +3,17 @@ package com.dowerx.quack.fragment;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import android.annotation.SuppressLint;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView; import android.widget.TextView;
import com.dowerx.quack.databinding.FragmentPostBinding; import com.dowerx.quack.databinding.FragmentPostBinding;
import com.dowerx.quack.model.Post; import com.dowerx.quack.model.Post;
import com.dowerx.quack.service.AuthService;
import com.dowerx.quack.service.PostService;
import java.util.List; import java.util.List;
public class PostRecyclerViewAdapter extends RecyclerView.Adapter<PostRecyclerViewAdapter.ViewHolder> { public class PostRecyclerViewAdapter extends RecyclerView.Adapter<PostRecyclerViewAdapter.ViewHolder> {
@ -30,7 +35,21 @@ public class PostRecyclerViewAdapter extends RecyclerView.Adapter<PostRecyclerVi
holder.mItem = mValues.get(position); holder.mItem = mValues.get(position);
holder.username.setText(holder.mItem.getUser().getUsername()); holder.username.setText(holder.mItem.getUser().getUsername());
holder.content.setText(holder.mItem.getContent()); holder.content.setText(holder.mItem.getContent());
holder.likes.setText("Likes " + holder.mItem.getLikes()); holder.like.setText("Likes " + holder.mItem.getLikes());
if (!AuthService.getId().equals(holder.mItem.getUser().getId())) {
holder.remove.setAlpha(0.5f);
holder.remove.setClickable(false);
} else {
holder.remove.setOnClickListener(v -> {
PostService.RemovePost task = new PostService.RemovePost(()-> {
this.mValues.remove(position);
this.notifyItemRemoved(position);
this.notifyItemRangeChanged(position, mValues.size());
return null;
}, v.getContext());
task.execute(holder.mItem.getId());
});
}
} }
@Override @Override
@ -41,14 +60,16 @@ public class PostRecyclerViewAdapter extends RecyclerView.Adapter<PostRecyclerVi
public class ViewHolder extends RecyclerView.ViewHolder { public class ViewHolder extends RecyclerView.ViewHolder {
public final TextView username; public final TextView username;
public final TextView content; public final TextView content;
public final TextView likes; public final Button like;
public final Button remove;
public Post mItem; public Post mItem;
public ViewHolder(@NonNull FragmentPostBinding binding) { public ViewHolder(@NonNull FragmentPostBinding binding) {
super(binding.getRoot()); super(binding.getRoot());
username = binding.username; username = binding.username;
content = binding.content; content = binding.content;
likes = binding.likes; like = binding.like;
remove = binding.remove;
} }
@NonNull @NonNull

View File

@ -29,6 +29,7 @@ import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
@ -160,4 +161,43 @@ public class PostService {
} }
} }
} }
public static class RemovePost extends AsyncTask<String, Void, Boolean> {
Callable<Void> callback;
Context context;
public RemovePost(Callable<Void> callback, Context context) {
this.callback = callback;
this.context = context;
}
@Override
protected Boolean doInBackground(String... strings) {
FirebaseFirestore db = FirebaseFirestore.getInstance();
try {
Tasks.await(db.document("/post/"+strings[0]).delete());
} catch (ExecutionException | InterruptedException e) {
return false;
}
return true;
}
@Override
protected void onPostExecute(Boolean result) {
if (result) {
try {
this.callback.call();
} catch (Exception e) {
throw new RuntimeException(e);
}
} else {
Toast toast = new Toast(context);
toast.setDuration(Toast.LENGTH_LONG);
toast.setText("failed to remove post");
toast.show();
}
}
}
} }

View File

@ -10,10 +10,8 @@
android:id="@+id/username" android:id="@+id/username"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="16dp" android:layout_margin="20dp"
android:text="@string/placeholder_name" android:text=""
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.067"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
@ -21,19 +19,35 @@
android:id="@+id/content" android:id="@+id/content"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="some random placeeholder post content" android:text=""
app:layout_constraintTop_toBottomOf="@+id/username" app:layout_constraintTop_toBottomOf="@+id/username"
android:layout_margin="20dp"/> android:layout_margin="20dp"/>
<TextView <LinearLayout
android:id="@+id/likes" android:id="@+id/post_buttons"
android:layout_width="wrap_content" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="20dp" android:layout_margin="20dp"
android:layout_marginTop="20dp"
android:text="Likes 0"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/content" /> app:layout_constraintTop_toBottomOf="@+id/content">
<Button
android:id="@+id/like"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Likes 0"/>
<Button
android:id="@+id/remove"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/remove_btn"/>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -15,4 +15,5 @@
<!-- TODO: Remove or change this placeholder text --> <!-- TODO: Remove or change this placeholder text -->
<string name="hello_blank_fragment">Hello blank fragment</string> <string name="hello_blank_fragment">Hello blank fragment</string>
<string name="post_btn">Post</string> <string name="post_btn">Post</string>
<string name="remove_btn">Remove</string>
</resources> </resources>