From 752e3d50c1fabfefe3a5ed025673c35c4e8ac23c Mon Sep 17 00:00:00 2001 From: Thomas Date: Tue, 6 Oct 2020 16:05:34 +0200 Subject: [PATCH] some fixes --- .../fedilabtube/drawer/PeertubeAdapter.java | 117 +++++++++++++++++- .../fedilabtube/viewmodel/PlaylistsVM.java | 2 +- 2 files changed, 112 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/app/fedilab/fedilabtube/drawer/PeertubeAdapter.java b/app/src/main/java/app/fedilab/fedilabtube/drawer/PeertubeAdapter.java index f720c8c..5ae7dcf 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/drawer/PeertubeAdapter.java +++ b/app/src/main/java/app/fedilab/fedilabtube/drawer/PeertubeAdapter.java @@ -14,18 +14,26 @@ package app.fedilab.fedilabtube.drawer; * You should have received a copy of the GNU General Public License along with TubeLab; if not, * see . */ +import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import androidx.annotation.NonNull; +import androidx.appcompat.widget.PopupMenu; +import androidx.lifecycle.LifecycleOwner; +import androidx.lifecycle.ViewModelProvider; +import androidx.lifecycle.ViewModelStoreOwner; import androidx.recyclerview.widget.RecyclerView; import java.util.List; @@ -34,24 +42,47 @@ import app.fedilab.fedilabtube.PeertubeActivity; import app.fedilab.fedilabtube.PeertubeEditUploadActivity; import app.fedilab.fedilabtube.R; import app.fedilab.fedilabtube.ShowChannelActivity; +import app.fedilab.fedilabtube.client.APIResponse; +import app.fedilab.fedilabtube.client.RetrofitPeertubeAPI; +import app.fedilab.fedilabtube.client.data.PlaylistData; import app.fedilab.fedilabtube.client.data.VideoData; +import app.fedilab.fedilabtube.client.entities.Report; import app.fedilab.fedilabtube.helper.Helper; +import app.fedilab.fedilabtube.viewmodel.PlaylistsVM; +import app.fedilab.fedilabtube.viewmodel.PostActionsVM; +import app.fedilab.fedilabtube.viewmodel.TimelineVM; +import es.dmoral.toasty.Toasty; + +import static app.fedilab.fedilabtube.viewmodel.TimelineVM.TimelineType.MY_VIDEOS; +import static app.fedilab.fedilabtube.viewmodel.TimelineVM.TimelineType.VIDEOS_IN_PLAYLIST; public class PeertubeAdapter extends RecyclerView.Adapter { private List videos; private Context context; - private boolean myVideos; + private TimelineVM.TimelineType timelineType; + private PlaylistData.Playlist playlist; - public PeertubeAdapter(List videos, boolean myVideos) { + public PeertubeAdapter(List videos, TimelineVM.TimelineType timelineType) { this.videos = videos; - this.myVideos = myVideos; + this.timelineType = timelineType; + } + + public PeertubeAdapter(List videos, PlaylistData.Playlist playlist) { + this.videos = videos; + this.playlist = playlist; + this.timelineType = VIDEOS_IN_PLAYLIST; + } + + public AllVideoRemoved allVideoRemoved; + + public interface AllVideoRemoved{ + void onAllVideoRemoved(); } public PeertubeAdapter(List videos) { this.videos = videos; - this.myVideos = false; } @NonNull @@ -77,7 +108,7 @@ public class PeertubeAdapter extends RecyclerView.Adapter { + PopupMenu popup = new PopupMenu(context, holder.more_actions); + popup.getMenuInflater() + .inflate(R.menu.video_drawer_menu, popup.getMenu()); + if (timelineType == MY_VIDEOS) { + popup.getMenu().findItem(R.id.action_report).setVisible(false); + }else { + if( timelineType == VIDEOS_IN_PLAYLIST) { + popup.getMenu().findItem(R.id.action_edit).setVisible(false); + }else { + popup.getMenu().findItem(R.id.action_edit).setVisible(false); + popup.getMenu().findItem(R.id.action_remove_playlist).setVisible(false); + } + } + popup.setOnMenuItemClickListener(item -> { + switch (item.getItemId()) { + case R.id.action_remove_playlist: + new Thread(() -> { + PlaylistsVM playlistsViewModel = new ViewModelProvider((ViewModelStoreOwner) context).get(PlaylistsVM.class); + playlistsViewModel.manage(PlaylistsVM.action.DELETE_VIDEOS, playlist, video.getId()); + Handler mainHandler = new Handler(Looper.getMainLooper()); + Runnable myRunnable = () -> { + videos.remove(video); + notifyDataSetChanged(); + if (videos.size() == 0) { + allVideoRemoved.onAllVideoRemoved(); + } + }; + mainHandler.post(myRunnable); + }).start(); + break; + case R.id.action_edit: + Intent intent = new Intent(context, PeertubeEditUploadActivity.class); + Bundle b = new Bundle(); + b.putString("video_id", video.getUuid()); + intent.putExtras(b); + context.startActivity(intent); + break; + case R.id.action_report: + androidx.appcompat.app.AlertDialog.Builder dialogBuilder = new androidx.appcompat.app.AlertDialog.Builder(context); + LayoutInflater inflater1 = ((Activity)context).getLayoutInflater(); + View dialogView = inflater1.inflate(R.layout.popup_report, new LinearLayout(context), false); + dialogBuilder.setView(dialogView); + EditText report_content = dialogView.findViewById(R.id.report_content); + dialogBuilder.setNeutralButton(R.string.cancel, (dialog, id) -> dialog.dismiss()); + dialogBuilder.setPositiveButton(R.string.report, (dialog, id) -> { + if (report_content.getText().toString().trim().length() == 0) { + Toasty.info(context, context.getString(R.string.report_comment_size), Toasty.LENGTH_LONG).show(); + } else { + PostActionsVM viewModel = new ViewModelProvider((ViewModelStoreOwner) context).get(PostActionsVM.class); + Report report = new Report(); + Report.VideoReport videoReport = new Report.VideoReport(); + videoReport.setId(video.getId()); + report.setVideo(videoReport); + report.setReason(report_content.getText().toString()); + viewModel.report(report).observe((LifecycleOwner) context, apiResponse -> manageVIewPostActions(RetrofitPeertubeAPI.ActionType.REPORT_VIDEO, apiResponse)); + dialog.dismiss(); + } + }); + androidx.appcompat.app.AlertDialog alertDialog2 = dialogBuilder.create(); + alertDialog2.show(); + break; + } + return true; + }); + popup.show(); + }); if (!ownVideos) { holder.bottom_container.setOnClickListener(v -> { @@ -158,11 +256,17 @@ public class PeertubeAdapter extends RecyclerView.Adapter()); } else { Log.v(Helper.TAG,"managePlaylists: " + account); - apiResponse = new RetrofitPeertubeAPI(_mContext).playlistAction(apiAction, playlist != null ? playlist.getId() : null, videoId, account.getAcct()); + apiResponse = new RetrofitPeertubeAPI(_mContext).playlistAction(apiAction, playlist != null ? playlist.getUuid() : null, videoId, account.getAcct()); } Handler mainHandler = new Handler(Looper.getMainLooper()); if (apiResponse != null) {