diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java index bf9d554cd..6b36986cf 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java @@ -12,6 +12,7 @@ import android.view.Menu; import android.view.MenuInflater; import android.view.View; +import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -40,8 +41,10 @@ import org.schabi.newpipe.views.SuperScrollLayoutManager; import javax.annotation.Nonnull; +import java.util.HashSet; import java.util.List; import java.util.Queue; +import java.util.Set; import java.util.function.Supplier; public abstract class BaseListFragment extends BaseStateFragment @@ -278,6 +281,12 @@ public void held(final StreamInfoItem selectedItem) { @Override public void selected(final ChannelInfoItem selectedItem) { try { + if (isChannelBlocked(selectedItem.getName())) { + Toast.makeText(requireContext(), + R.string.channel_is_blocked, + Toast.LENGTH_SHORT).show(); + return; + } onItemSelected(selectedItem); NavigationHelper.openChannelFragment(getFM(), selectedItem.getServiceId(), @@ -294,6 +303,12 @@ public void selected(final ChannelInfoItem selectedItem) { @Override public void selected(final PlaylistInfoItem selectedItem) { try { + if (isChannelBlocked(selectedItem.getUploaderName())) { + Toast.makeText(requireContext(), + R.string.channel_is_blocked, + Toast.LENGTH_SHORT).show(); + return; + } onItemSelected(selectedItem); NavigationHelper.openPlaylistFragment(getFM(), selectedItem.getServiceId(), @@ -542,4 +557,21 @@ public void onSharedPreferenceChanged(final SharedPreferences sharedPreferences, protected ItemViewMode getItemViewMode() { return ThemeHelper.getItemViewMode(requireContext()); } + + /** + * Check if a channel name is in the user's block list. + * @param channelName the channel name to check + * @return true if the channel is blocked + */ + protected boolean isChannelBlocked(@Nullable final String channelName) { + if (channelName == null || channelName.isEmpty()) { + return false; + } + final SharedPreferences prefs = PreferenceManager + .getDefaultSharedPreferences(requireContext()); + final Set blockedChannels = prefs.getStringSet( + getString(R.string.filter_by_channel_key) + "_set", + new HashSet<>()); + return blockedChannels.contains(channelName); + } } diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java index c5cf267cd..9c4c175c2 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java @@ -11,6 +11,7 @@ import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -39,8 +40,10 @@ import org.schabi.newpipe.util.StateSaver; import org.schabi.newpipe.util.external_communication.ShareUtils; +import java.util.HashSet; import java.util.List; import java.util.Queue; +import java.util.Set; import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; import io.reactivex.rxjava3.core.Observable; @@ -396,6 +399,26 @@ private void runWorker(final boolean forceLoad) { @Override public void handleResult(@NonNull final ChannelInfo result) { super.handleResult(result); + + // Safety net: if the channel is in the block list, prevent access + final String channelName = result.getName(); + if (channelName != null && !channelName.isEmpty()) { + final SharedPreferences prefs = PreferenceManager + .getDefaultSharedPreferences(requireContext()); + final Set blockedChannels = prefs.getStringSet( + getString(R.string.filter_by_channel_key) + "_set", + new HashSet<>()); + if (blockedChannels.contains(channelName)) { + Toast.makeText(requireContext(), + R.string.channel_is_blocked, + Toast.LENGTH_SHORT).show(); + if (getParentFragmentManager().getBackStackEntryCount() > 0) { + getParentFragmentManager().popBackStack(); + } + return; + } + } + currentInfo = result; setInitialData(result.getServiceId(), result.getOriginalUrl(), result.getName()); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6092917d7..85d1861f6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -954,6 +954,7 @@ Search results Apply Filter To Channel videos +This channel is in your block list Success Proxy (Supporters) Token