From 0248187f413929ad7d70a1ad18c9c01abf38ae68 Mon Sep 17 00:00:00 2001 From: antonio Date: Sun, 4 Jun 2023 19:38:24 +0200 Subject: [PATCH] feat: add functionality to delete podcast episodes and channels via bottom sheet --- .../play/repository/PodcastRepository.java | 34 +++++++ .../subsonic/api/podcast/PodcastClient.java | 10 ++ .../subsonic/api/podcast/PodcastService.java | 6 ++ .../ui/fragment/HomeTabPodcastFragment.java | 21 ++-- .../PodcastChannelBottomSheetDialog.java | 96 +++++++++++++++++++ ...a => PodcastEpisodeBottomSheetDialog.java} | 32 +++---- .../PodcastBottomSheetViewModel.java | 29 ------ .../PodcastChannelBottomSheetViewModel.java | 34 +++++++ .../PodcastEpisodeBottomSheetViewModel.java | 33 +++++++ .../bottom_sheet_podcast_channel_dialog.xml | 67 +++++++++++++ ...> bottom_sheet_podcast_episode_dialog.xml} | 42 ++++---- app/src/main/res/navigation/nav_graph.xml | 13 ++- app/src/main/res/values/strings.xml | 1 + 13 files changed, 336 insertions(+), 82 deletions(-) create mode 100644 app/src/main/java/com/cappielloantonio/play/ui/fragment/bottomsheetdialog/PodcastChannelBottomSheetDialog.java rename app/src/main/java/com/cappielloantonio/play/ui/fragment/bottomsheetdialog/{PodcastBottomSheetDialog.java => PodcastEpisodeBottomSheetDialog.java} (81%) delete mode 100644 app/src/main/java/com/cappielloantonio/play/viewmodel/PodcastBottomSheetViewModel.java create mode 100644 app/src/main/java/com/cappielloantonio/play/viewmodel/PodcastChannelBottomSheetViewModel.java create mode 100644 app/src/main/java/com/cappielloantonio/play/viewmodel/PodcastEpisodeBottomSheetViewModel.java create mode 100644 app/src/main/res/layout/bottom_sheet_podcast_channel_dialog.xml rename app/src/main/res/layout/{bottom_sheet_podcast_dialog.xml => bottom_sheet_podcast_episode_dialog.xml} (83%) diff --git a/app/src/main/java/com/cappielloantonio/play/repository/PodcastRepository.java b/app/src/main/java/com/cappielloantonio/play/repository/PodcastRepository.java index 3d23a349..593165f1 100644 --- a/app/src/main/java/com/cappielloantonio/play/repository/PodcastRepository.java +++ b/app/src/main/java/com/cappielloantonio/play/repository/PodcastRepository.java @@ -82,4 +82,38 @@ public class PodcastRepository { } }); } + + public void deletePodcastChannel(String channelId) { + App.getSubsonicClientInstance(false) + .getPodcastClient() + .deletePodcastChannel(channelId) + .enqueue(new Callback() { + @Override + public void onResponse(@NonNull Call call, @NonNull Response response) { + + } + + @Override + public void onFailure(@NonNull Call call, @NonNull Throwable t) { + + } + }); + } + + public void deletePodcastEpisode(String episodeId) { + App.getSubsonicClientInstance(false) + .getPodcastClient() + .deletePodcastEpisode(episodeId) + .enqueue(new Callback() { + @Override + public void onResponse(@NonNull Call call, @NonNull Response response) { + + } + + @Override + public void onFailure(@NonNull Call call, @NonNull Throwable t) { + + } + }); + } } diff --git a/app/src/main/java/com/cappielloantonio/play/subsonic/api/podcast/PodcastClient.java b/app/src/main/java/com/cappielloantonio/play/subsonic/api/podcast/PodcastClient.java index 0bb3d156..fe7306e7 100644 --- a/app/src/main/java/com/cappielloantonio/play/subsonic/api/podcast/PodcastClient.java +++ b/app/src/main/java/com/cappielloantonio/play/subsonic/api/podcast/PodcastClient.java @@ -43,4 +43,14 @@ public class PodcastClient { Log.d(TAG, "refreshPodcasts()"); return podcastService.refreshPodcasts(subsonic.getParams()); } + + public Call deletePodcastChannel(String channelId) { + Log.d(TAG, "deletePodcastChannel()"); + return podcastService.deletePodcastChannel(subsonic.getParams(), channelId); + } + + public Call deletePodcastEpisode(String episodeId) { + Log.d(TAG, "deletePodcastEpisode()"); + return podcastService.deletePodcastEpisode(subsonic.getParams(), episodeId); + } } diff --git a/app/src/main/java/com/cappielloantonio/play/subsonic/api/podcast/PodcastService.java b/app/src/main/java/com/cappielloantonio/play/subsonic/api/podcast/PodcastService.java index 10ee90d8..e7bef3ad 100644 --- a/app/src/main/java/com/cappielloantonio/play/subsonic/api/podcast/PodcastService.java +++ b/app/src/main/java/com/cappielloantonio/play/subsonic/api/podcast/PodcastService.java @@ -19,4 +19,10 @@ public interface PodcastService { @GET("refreshPodcasts") Call refreshPodcasts(@QueryMap Map params); + + @GET("deletePodcastChannel") + Call deletePodcastChannel(@QueryMap Map params, @Query("id") String id); + + @GET("deletePodcastEpisode") + Call deletePodcastEpisode(@QueryMap Map params, @Query("id") String id); } diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/HomeTabPodcastFragment.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/HomeTabPodcastFragment.java index af0328c1..64ea7392 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/fragment/HomeTabPodcastFragment.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/HomeTabPodcastFragment.java @@ -1,29 +1,20 @@ package com.cappielloantonio.play.ui.fragment; import android.content.ComponentName; -import android.content.res.TypedArray; -import android.graphics.drawable.Drawable; -import android.graphics.drawable.InsetDrawable; import android.os.Bundle; -import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.core.view.ViewCompat; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; import androidx.media3.common.util.UnstableApi; import androidx.media3.session.MediaBrowser; import androidx.media3.session.SessionToken; import androidx.navigation.Navigation; -import androidx.recyclerview.widget.DividerItemDecoration; -import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.viewpager2.widget.ViewPager2; import com.cappielloantonio.play.R; import com.cappielloantonio.play.databinding.FragmentHomeTabPodcastBinding; @@ -37,8 +28,6 @@ import com.cappielloantonio.play.util.Constants; import com.cappielloantonio.play.util.Preferences; import com.cappielloantonio.play.util.UIUtil; import com.cappielloantonio.play.viewmodel.PodcastViewModel; -import com.google.android.material.divider.MaterialDividerItemDecoration; -import com.google.android.material.snackbar.Snackbar; import com.google.common.util.concurrent.ListenableFuture; import java.util.Objects; @@ -109,8 +98,10 @@ public class HomeTabPodcastFragment extends Fragment implements ClickCallback { if (bind != null) bind.homePodcastChannelsSector.setVisibility(View.GONE); if (bind != null) bind.emptyPodcastLayout.setVisibility(View.GONE); } else { - if (bind != null) bind.homePodcastChannelsSector.setVisibility(!podcastChannels.isEmpty() ? View.VISIBLE : View.GONE); - if (bind != null) bind.emptyPodcastLayout.setVisibility(podcastChannels.isEmpty() ? View.VISIBLE : View.GONE); + if (bind != null) + bind.homePodcastChannelsSector.setVisibility(!podcastChannels.isEmpty() ? View.VISIBLE : View.GONE); + if (bind != null) + bind.emptyPodcastLayout.setVisibility(podcastChannels.isEmpty() ? View.VISIBLE : View.GONE); } }); } @@ -166,7 +157,7 @@ public class HomeTabPodcastFragment extends Fragment implements ClickCallback { @Override public void onPodcastEpisodeLongClick(Bundle bundle) { - Navigation.findNavController(requireView()).navigate(R.id.podcastBottomSheetDialog, bundle); + Navigation.findNavController(requireView()).navigate(R.id.podcastEpisodeBottomSheetDialog, bundle); } @Override @@ -176,6 +167,6 @@ public class HomeTabPodcastFragment extends Fragment implements ClickCallback { @Override public void onPodcastChannelLongClick(Bundle bundle) { - Toast.makeText(requireContext(), "Long click!", Toast.LENGTH_SHORT).show(); + Navigation.findNavController(requireView()).navigate(R.id.podcastChannelBottomSheetDialog, bundle); } } diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/bottomsheetdialog/PodcastChannelBottomSheetDialog.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/bottomsheetdialog/PodcastChannelBottomSheetDialog.java new file mode 100644 index 00000000..77f77b7e --- /dev/null +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/bottomsheetdialog/PodcastChannelBottomSheetDialog.java @@ -0,0 +1,96 @@ +package com.cappielloantonio.play.ui.fragment.bottomsheetdialog; + +import android.content.ComponentName; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.lifecycle.ViewModelProvider; +import androidx.media3.common.util.UnstableApi; +import androidx.media3.session.MediaBrowser; +import androidx.media3.session.SessionToken; + +import com.cappielloantonio.play.R; +import com.cappielloantonio.play.glide.CustomGlideRequest; +import com.cappielloantonio.play.service.MediaService; +import com.cappielloantonio.play.subsonic.models.PodcastChannel; +import com.cappielloantonio.play.util.Constants; +import com.cappielloantonio.play.util.MusicUtil; +import com.cappielloantonio.play.viewmodel.PodcastChannelBottomSheetViewModel; +import com.google.android.material.bottomsheet.BottomSheetDialogFragment; +import com.google.common.util.concurrent.ListenableFuture; + +@UnstableApi +public class PodcastChannelBottomSheetDialog extends BottomSheetDialogFragment implements View.OnClickListener { + private PodcastChannelBottomSheetViewModel podcastChannelBottomSheetViewModel; + private PodcastChannel podcastChannel; + + private ListenableFuture mediaBrowserListenableFuture; + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.bottom_sheet_podcast_channel_dialog, container, false); + + podcastChannel = requireArguments().getParcelable(Constants.PODCAST_CHANNEL_OBJECT); + + podcastChannelBottomSheetViewModel = new ViewModelProvider(requireActivity()).get(PodcastChannelBottomSheetViewModel.class); + podcastChannelBottomSheetViewModel.setPodcastChannel(podcastChannel); + + init(view); + + return view; + } + + @Override + public void onStart() { + super.onStart(); + + initializeMediaBrowser(); + } + + @Override + public void onStop() { + releaseMediaBrowser(); + super.onStop(); + } + + private void init(View view) { + ImageView coverPodcast = view.findViewById(R.id.podcast_cover_image_view); + + CustomGlideRequest.Builder + .from(requireContext(), podcastChannelBottomSheetViewModel.getPodcastChannel().getCoverArtId()) + .build() + .into(coverPodcast); + + TextView titlePodcast = view.findViewById(R.id.podcast_title_text_view); + titlePodcast.setText(MusicUtil.getReadableString(podcastChannelBottomSheetViewModel.getPodcastChannel().getTitle())); + + TextView delete = view.findViewById(R.id.delete_text_view); + delete.setOnClickListener(v -> { + podcastChannelBottomSheetViewModel.deletePodcastChannel(); + dismissBottomSheet(); + }); + } + + @Override + public void onClick(View v) { + dismissBottomSheet(); + } + + private void dismissBottomSheet() { + dismiss(); + } + + private void initializeMediaBrowser() { + mediaBrowserListenableFuture = new MediaBrowser.Builder(requireContext(), new SessionToken(requireContext(), new ComponentName(requireContext(), MediaService.class))).buildAsync(); + } + + private void releaseMediaBrowser() { + MediaBrowser.releaseFuture(mediaBrowserListenableFuture); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/bottomsheetdialog/PodcastBottomSheetDialog.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/bottomsheetdialog/PodcastEpisodeBottomSheetDialog.java similarity index 81% rename from app/src/main/java/com/cappielloantonio/play/ui/fragment/bottomsheetdialog/PodcastBottomSheetDialog.java rename to app/src/main/java/com/cappielloantonio/play/ui/fragment/bottomsheetdialog/PodcastEpisodeBottomSheetDialog.java index a68221fc..5fe80759 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/fragment/bottomsheetdialog/PodcastBottomSheetDialog.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/bottomsheetdialog/PodcastEpisodeBottomSheetDialog.java @@ -15,9 +15,6 @@ import androidx.media3.common.util.UnstableApi; import androidx.media3.session.MediaBrowser; import androidx.media3.session.SessionToken; -import com.bumptech.glide.load.resource.bitmap.CenterCrop; -import com.bumptech.glide.load.resource.bitmap.RoundedCorners; -import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions; import com.cappielloantonio.play.R; import com.cappielloantonio.play.glide.CustomGlideRequest; import com.cappielloantonio.play.service.MediaService; @@ -25,26 +22,26 @@ import com.cappielloantonio.play.subsonic.models.PodcastEpisode; import com.cappielloantonio.play.ui.activity.MainActivity; import com.cappielloantonio.play.util.Constants; import com.cappielloantonio.play.util.MusicUtil; -import com.cappielloantonio.play.viewmodel.PodcastBottomSheetViewModel; +import com.cappielloantonio.play.viewmodel.PodcastEpisodeBottomSheetViewModel; import com.google.android.material.bottomsheet.BottomSheetDialogFragment; import com.google.common.util.concurrent.ListenableFuture; @UnstableApi -public class PodcastBottomSheetDialog extends BottomSheetDialogFragment implements View.OnClickListener { - private PodcastBottomSheetViewModel podcastBottomSheetViewModel; - private PodcastEpisode podcast; +public class PodcastEpisodeBottomSheetDialog extends BottomSheetDialogFragment implements View.OnClickListener { + private PodcastEpisodeBottomSheetViewModel podcastEpisodeBottomSheetViewModel; + private PodcastEpisode podcastEpisode; private ListenableFuture mediaBrowserListenableFuture; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.bottom_sheet_podcast_dialog, container, false); + View view = inflater.inflate(R.layout.bottom_sheet_podcast_episode_dialog, container, false); - podcast = requireArguments().getParcelable(Constants.PODCAST_OBJECT); + podcastEpisode = requireArguments().getParcelable(Constants.PODCAST_OBJECT); - podcastBottomSheetViewModel = new ViewModelProvider(requireActivity()).get(PodcastBottomSheetViewModel.class); - podcastBottomSheetViewModel.setPodcast(podcast); + podcastEpisodeBottomSheetViewModel = new ViewModelProvider(requireActivity()).get(PodcastEpisodeBottomSheetViewModel.class); + podcastEpisodeBottomSheetViewModel.setPodcastEpisode(podcastEpisode); init(view); @@ -68,18 +65,15 @@ public class PodcastBottomSheetDialog extends BottomSheetDialogFragment implemen ImageView coverPodcast = view.findViewById(R.id.podcast_cover_image_view); CustomGlideRequest.Builder - .from(requireContext(), podcastBottomSheetViewModel.getPodcast().getCoverArtId()) + .from(requireContext(), podcastEpisodeBottomSheetViewModel.getPodcastEpisode().getCoverArtId()) .build() .into(coverPodcast); TextView titlePodcast = view.findViewById(R.id.podcast_title_text_view); - titlePodcast.setText(MusicUtil.getReadableString(podcastBottomSheetViewModel.getPodcast().getTitle())); + titlePodcast.setText(MusicUtil.getReadableString(podcastEpisodeBottomSheetViewModel.getPodcastEpisode().getTitle())); titlePodcast.setSelected(true); - TextView channel = view.findViewById(R.id.podcast_artist_text_view); - channel.setText(MusicUtil.getReadableString(podcastBottomSheetViewModel.getPodcast().getArtist())); - TextView playNext = view.findViewById(R.id.play_next_text_view); playNext.setOnClickListener(v -> { // TODO @@ -118,6 +112,12 @@ public class PodcastBottomSheetDialog extends BottomSheetDialogFragment implemen initDownloadUI(download, remove); + TextView delete = view.findViewById(R.id.delete_text_view); + delete.setOnClickListener(v -> { + podcastEpisodeBottomSheetViewModel.deletePodcastEpisode(); + dismissBottomSheet(); + }); + TextView goToChannel = view.findViewById(R.id.go_to_channel_text_view); goToChannel.setOnClickListener(v -> { Toast.makeText(requireContext(), "Open the channel", Toast.LENGTH_SHORT).show(); diff --git a/app/src/main/java/com/cappielloantonio/play/viewmodel/PodcastBottomSheetViewModel.java b/app/src/main/java/com/cappielloantonio/play/viewmodel/PodcastBottomSheetViewModel.java deleted file mode 100644 index 78b72e33..00000000 --- a/app/src/main/java/com/cappielloantonio/play/viewmodel/PodcastBottomSheetViewModel.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.cappielloantonio.play.viewmodel; - -import android.app.Application; - -import androidx.annotation.NonNull; -import androidx.lifecycle.AndroidViewModel; - -import com.cappielloantonio.play.repository.PodcastRepository; -import com.cappielloantonio.play.subsonic.models.PodcastEpisode; - -public class PodcastBottomSheetViewModel extends AndroidViewModel { - private final PodcastRepository podcastRepository; - - private PodcastEpisode podcast; - - public PodcastBottomSheetViewModel(@NonNull Application application) { - super(application); - - podcastRepository = new PodcastRepository(); - } - - public PodcastEpisode getPodcast() { - return podcast; - } - - public void setPodcast(PodcastEpisode podcast) { - this.podcast = podcast; - } -} diff --git a/app/src/main/java/com/cappielloantonio/play/viewmodel/PodcastChannelBottomSheetViewModel.java b/app/src/main/java/com/cappielloantonio/play/viewmodel/PodcastChannelBottomSheetViewModel.java new file mode 100644 index 00000000..f572ee0c --- /dev/null +++ b/app/src/main/java/com/cappielloantonio/play/viewmodel/PodcastChannelBottomSheetViewModel.java @@ -0,0 +1,34 @@ +package com.cappielloantonio.play.viewmodel; + +import android.app.Application; + +import androidx.annotation.NonNull; +import androidx.lifecycle.AndroidViewModel; + +import com.cappielloantonio.play.repository.PodcastRepository; +import com.cappielloantonio.play.subsonic.models.PodcastChannel; +import com.cappielloantonio.play.subsonic.models.PodcastEpisode; + +public class PodcastChannelBottomSheetViewModel extends AndroidViewModel { + private final PodcastRepository podcastRepository; + + private PodcastChannel podcastChannel; + + public PodcastChannelBottomSheetViewModel(@NonNull Application application) { + super(application); + + podcastRepository = new PodcastRepository(); + } + + public PodcastChannel getPodcastChannel() { + return podcastChannel; + } + + public void setPodcastChannel(PodcastChannel podcastChannel) { + this.podcastChannel = podcastChannel; + } + + public void deletePodcastChannel() { + if (podcastChannel != null) podcastRepository.deletePodcastChannel(podcastChannel.getId()); + } +} diff --git a/app/src/main/java/com/cappielloantonio/play/viewmodel/PodcastEpisodeBottomSheetViewModel.java b/app/src/main/java/com/cappielloantonio/play/viewmodel/PodcastEpisodeBottomSheetViewModel.java new file mode 100644 index 00000000..94cbef7b --- /dev/null +++ b/app/src/main/java/com/cappielloantonio/play/viewmodel/PodcastEpisodeBottomSheetViewModel.java @@ -0,0 +1,33 @@ +package com.cappielloantonio.play.viewmodel; + +import android.app.Application; + +import androidx.annotation.NonNull; +import androidx.lifecycle.AndroidViewModel; + +import com.cappielloantonio.play.repository.PodcastRepository; +import com.cappielloantonio.play.subsonic.models.PodcastEpisode; + +public class PodcastEpisodeBottomSheetViewModel extends AndroidViewModel { + private final PodcastRepository podcastRepository; + + private PodcastEpisode podcastEpisode; + + public PodcastEpisodeBottomSheetViewModel(@NonNull Application application) { + super(application); + + podcastRepository = new PodcastRepository(); + } + + public PodcastEpisode getPodcastEpisode() { + return podcastEpisode; + } + + public void setPodcastEpisode(PodcastEpisode podcast) { + this.podcastEpisode = podcast; + } + + public void deletePodcastEpisode() { + if (podcastEpisode != null) podcastRepository.deletePodcastEpisode(podcastEpisode.getId()); + } +} diff --git a/app/src/main/res/layout/bottom_sheet_podcast_channel_dialog.xml b/app/src/main/res/layout/bottom_sheet_podcast_channel_dialog.xml new file mode 100644 index 00000000..eada951d --- /dev/null +++ b/app/src/main/res/layout/bottom_sheet_podcast_channel_dialog.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/bottom_sheet_podcast_dialog.xml b/app/src/main/res/layout/bottom_sheet_podcast_episode_dialog.xml similarity index 83% rename from app/src/main/res/layout/bottom_sheet_podcast_dialog.xml rename to app/src/main/res/layout/bottom_sheet_podcast_episode_dialog.xml index 14d18a78..5c4fc254 100644 --- a/app/src/main/res/layout/bottom_sheet_podcast_dialog.xml +++ b/app/src/main/res/layout/bottom_sheet_podcast_episode_dialog.xml @@ -28,27 +28,15 @@ style="@style/LabelMedium" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginTop="8dp" android:ellipsize="marquee" android:paddingStart="12dp" android:paddingEnd="12dp" android:singleLine="true" android:text="@string/label_placeholder" + app:layout_constraintBottom_toBottomOf="@+id/podcast_cover_image_view" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@+id/podcast_cover_image_view" - app:layout_constraintTop_toTopOf="parent" /> - - + app:layout_constraintTop_toTopOf="@+id/podcast_cover_image_view" /> @@ -73,7 +61,8 @@ android:paddingTop="12dp" android:paddingEnd="20dp" android:paddingBottom="12dp" - android:text="@string/podcast_bottom_sheet_play_next" /> + android:text="@string/podcast_bottom_sheet_play_next" + android:visibility="gone" /> + android:text="@string/podcast_bottom_sheet_add_to_queue" + android:visibility="gone" /> + android:text="@string/podcast_bottom_sheet_download" + android:visibility="gone" /> + android:text="@string/podcast_bottom_sheet_remove" + android:visibility="gone" /> + + diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml index e7f408f0..be011226 100644 --- a/app/src/main/res/navigation/nav_graph.xml +++ b/app/src/main/res/navigation/nav_graph.xml @@ -313,8 +313,13 @@ android:label="AlbumBottomSheetDialog" tools:layout="@layout/bottom_sheet_album_dialog" /> + android:id="@+id/podcastEpisodeBottomSheetDialog" + android:name="com.cappielloantonio.play.ui.fragment.bottomsheetdialog.PodcastEpisodeBottomSheetDialog" + android:label="PodcastEpisodeBottomSheetDialog" + tools:layout="@layout/bottom_sheet_podcast_episode_dialog" /> + \ 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 745ebf2a..9b172dd4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -243,6 +243,7 @@ Channels Searching… Go to channel + Delete Remove Download Add to queue