mirror of
https://github.com/MaintainTeam/LastPipeBender.git
synced 2025-03-04 15:28:21 +03:00
SponsorBlock: Changed how MarkableSeekBar draws markers.
These changes should fix issues on different screen densities. Also removed unnecessary "segment" verbiage from toast notification strings.
This commit is contained in:
parent
f7575da5a5
commit
76c649ada0
4 changed files with 77 additions and 36 deletions
|
@ -648,11 +648,11 @@ public abstract class VideoPlayer extends BasePlayer
|
||||||
new SeekBarMarker(segment.startTime, segment.endTime,
|
new SeekBarMarker(segment.startTime, segment.endTime,
|
||||||
(int) simpleExoPlayer.getDuration(), color);
|
(int) simpleExoPlayer.getDuration(), color);
|
||||||
markableSeekBar.seekBarMarkers.add(seekBarMarker);
|
markableSeekBar.seekBarMarkers.add(seekBarMarker);
|
||||||
markableSeekBar.invalidate();
|
|
||||||
|
|
||||||
Log.d("SPONSOR_BLOCK", "Progress bar marker: "
|
Log.d("SPONSOR_BLOCK", "Progress bar marker: "
|
||||||
+ seekBarMarker.percentStart + ", " + seekBarMarker.percentEnd);
|
+ seekBarMarker.percentStart + ", " + seekBarMarker.percentEnd);
|
||||||
}
|
}
|
||||||
|
markableSeekBar.drawMarkers();
|
||||||
}
|
}
|
||||||
|
|
||||||
private Integer parseSegmentCategory(final String category) {
|
private Integer parseSegmentCategory(final String category) {
|
||||||
|
|
|
@ -1,19 +1,23 @@
|
||||||
package org.schabi.newpipe.views;
|
package org.schabi.newpipe.views;
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.Canvas;
|
import android.graphics.PorterDuff;
|
||||||
import android.graphics.Rect;
|
import android.graphics.PorterDuffColorFilter;
|
||||||
import android.graphics.RectF;
|
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
|
import android.graphics.drawable.LayerDrawable;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
|
|
||||||
import androidx.appcompat.widget.AppCompatSeekBar;
|
import androidx.appcompat.widget.AppCompatSeekBar;
|
||||||
|
import androidx.core.content.ContextCompat;
|
||||||
|
|
||||||
|
import org.schabi.newpipe.R;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
public class MarkableSeekBar extends AppCompatSeekBar {
|
public class MarkableSeekBar extends AppCompatSeekBar {
|
||||||
public ArrayList<SeekBarMarker> seekBarMarkers = new ArrayList<>();
|
public ArrayList<SeekBarMarker> seekBarMarkers = new ArrayList<>();
|
||||||
private RectF markerRect = new RectF();
|
private Drawable originalProgressDrawable;
|
||||||
|
|
||||||
public MarkableSeekBar(final Context context) {
|
public MarkableSeekBar(final Context context) {
|
||||||
super(context);
|
super(context);
|
||||||
|
@ -29,26 +33,72 @@ public class MarkableSeekBar extends AppCompatSeekBar {
|
||||||
super(context, attrs, defStyleAttr);
|
super(context, attrs, defStyleAttr);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected synchronized void onDraw(final Canvas canvas) {
|
@Override
|
||||||
super.onDraw(canvas);
|
public void setProgressDrawable(final Drawable d) {
|
||||||
|
super.setProgressDrawable(d);
|
||||||
|
|
||||||
final Drawable progressDrawable = getProgressDrawable();
|
// stored for when we draw (and potentially re-draw) markers
|
||||||
final Rect progressDrawableBounds = progressDrawable.getBounds();
|
originalProgressDrawable = d;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onSizeChanged(final int w, final int h, final int oldW, final int oldH) {
|
||||||
|
super.onSizeChanged(w, h, oldW, oldH);
|
||||||
|
|
||||||
|
// re-draw markers since the progress bar may have a different width
|
||||||
|
drawMarkers();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void drawMarkers() {
|
||||||
|
if (seekBarMarkers.size() == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Markers are drawn like so:
|
||||||
|
//
|
||||||
|
// - LayerDrawable (original drawable for the SeekBar)
|
||||||
|
// - GradientDrawable (background)
|
||||||
|
// - ScaleDrawable (secondaryProgress)
|
||||||
|
// - ScaleDrawable (progress)
|
||||||
|
// - LayerDrawable (we add our markers in a sub-LayerDrawable)
|
||||||
|
// - Drawable (marker)
|
||||||
|
// - Drawable (marker)
|
||||||
|
// - Drawable (marker)
|
||||||
|
// - etc...
|
||||||
|
|
||||||
final int width = getMeasuredWidth() - (getPaddingStart() + getPaddingEnd());
|
final int width = getMeasuredWidth() - (getPaddingStart() + getPaddingEnd());
|
||||||
final int height = progressDrawable.getIntrinsicHeight();
|
|
||||||
|
|
||||||
for (int i = 0; i < seekBarMarkers.size(); i++) {
|
LayerDrawable layerDrawable = (LayerDrawable) originalProgressDrawable;
|
||||||
final SeekBarMarker marker = seekBarMarkers.get(i);
|
|
||||||
|
|
||||||
markerRect.left = width - (float) Math.floor(width * (1.0 - marker.percentStart))
|
final ArrayList<Drawable> markerDrawables = new ArrayList<>();
|
||||||
+ getPaddingStart();
|
markerDrawables.add(layerDrawable);
|
||||||
markerRect.top = progressDrawableBounds.bottom - height - 1;
|
|
||||||
markerRect.right = width - (float) Math.ceil(width * (1.0 - marker.percentEnd))
|
|
||||||
+ getPaddingStart();
|
|
||||||
markerRect.bottom = progressDrawableBounds.bottom;
|
|
||||||
|
|
||||||
canvas.drawRect(markerRect, marker.paint);
|
for (final SeekBarMarker seekBarMarker : seekBarMarkers) {
|
||||||
|
@SuppressLint("PrivateResource")
|
||||||
|
final Drawable markerDrawable =
|
||||||
|
ContextCompat.getDrawable(
|
||||||
|
getContext(),
|
||||||
|
R.drawable.abc_scrubber_primary_mtrl_alpha);
|
||||||
|
|
||||||
|
final PorterDuffColorFilter colorFilter =
|
||||||
|
new PorterDuffColorFilter(seekBarMarker.color, PorterDuff.Mode.SRC_IN);
|
||||||
|
|
||||||
|
assert markerDrawable != null;
|
||||||
|
markerDrawable.setColorFilter(colorFilter);
|
||||||
|
|
||||||
|
markerDrawables.add(markerDrawable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
layerDrawable = new LayerDrawable(markerDrawables.toArray(new Drawable[0]));
|
||||||
|
|
||||||
|
for (int i = 1; i < layerDrawable.getNumberOfLayers(); i++) {
|
||||||
|
final SeekBarMarker seekBarMarker = seekBarMarkers.get(i - 1);
|
||||||
|
final int l = (int) (width * seekBarMarker.percentStart);
|
||||||
|
final int r = (int) (width * (1.0 - seekBarMarker.percentEnd));
|
||||||
|
|
||||||
|
layerDrawable.setLayerInset(i, l, 0, r, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
super.setProgressDrawable(layerDrawable);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +1,11 @@
|
||||||
package org.schabi.newpipe.views;
|
package org.schabi.newpipe.views;
|
||||||
|
|
||||||
import android.graphics.Paint;
|
|
||||||
|
|
||||||
public class SeekBarMarker {
|
public class SeekBarMarker {
|
||||||
public double startTime;
|
public double startTime;
|
||||||
public double endTime;
|
public double endTime;
|
||||||
public double percentStart;
|
public double percentStart;
|
||||||
public double percentEnd;
|
public double percentEnd;
|
||||||
public Paint paint;
|
public int color;
|
||||||
public Object tag;
|
public Object tag;
|
||||||
|
|
||||||
public SeekBarMarker(final double startTime,
|
public SeekBarMarker(final double startTime,
|
||||||
|
@ -18,19 +16,12 @@ public class SeekBarMarker {
|
||||||
this.endTime = endTime;
|
this.endTime = endTime;
|
||||||
this.percentStart = Math.round((startTime / maxTime) * 100.0) / 100.0;
|
this.percentStart = Math.round((startTime / maxTime) * 100.0) / 100.0;
|
||||||
this.percentEnd = Math.round((endTime / maxTime) * 100.0) / 100.0;
|
this.percentEnd = Math.round((endTime / maxTime) * 100.0) / 100.0;
|
||||||
|
this.color = color;
|
||||||
initPaint(color);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public SeekBarMarker(final double percentStart, final double percentEnd, final int color) {
|
public SeekBarMarker(final double percentStart, final double percentEnd, final int color) {
|
||||||
this.percentStart = percentStart;
|
this.percentStart = percentStart;
|
||||||
this.percentEnd = percentEnd;
|
this.percentEnd = percentEnd;
|
||||||
|
this.color = color;
|
||||||
initPaint(color);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void initPaint(final int color) {
|
|
||||||
this.paint = new Paint();
|
|
||||||
this.paint.setColor(color);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -700,10 +700,10 @@
|
||||||
<string name="sponsorblock_default_api_url">https://sponsor.ajay.app/api/</string>
|
<string name="sponsorblock_default_api_url">https://sponsor.ajay.app/api/</string>
|
||||||
<string name="sponsorblock_privacy_policy_url">https://gist.github.com/ajayyy/aa9f8ded2b573d4f73a3ffa0ef74f796</string>
|
<string name="sponsorblock_privacy_policy_url">https://gist.github.com/ajayyy/aa9f8ded2b573d4f73a3ffa0ef74f796</string>
|
||||||
<string name="sponsorblock_skip_sponsor_message">Skipped sponsor</string>
|
<string name="sponsorblock_skip_sponsor_message">Skipped sponsor</string>
|
||||||
<string name="sponsorblock_skip_intro_message">Skipped intermission/intro segment</string>
|
<string name="sponsorblock_skip_intro_message">Skipped intermission/intro</string>
|
||||||
<string name="sponsorblock_skip_outro_message">Skipped endcards/credits segment</string>
|
<string name="sponsorblock_skip_outro_message">Skipped endcards/credits</string>
|
||||||
<string name="sponsorblock_skip_interaction_message">Skipped interaction reminder segment</string>
|
<string name="sponsorblock_skip_interaction_message">Skipped interaction reminder</string>
|
||||||
<string name="sponsorblock_skip_self_promo_message">Skipped unpaid/self promo segment</string>
|
<string name="sponsorblock_skip_self_promo_message">Skipped unpaid/self promo</string>
|
||||||
<string name="sponsorblock_skip_non_music_message">Skipped non-music segment</string>
|
<string name="sponsorblock_skip_non_music_message">Skipped non-music</string>
|
||||||
<string name="sponsorblock_toggle_skipping">Toggle skipping sponsors</string>
|
<string name="sponsorblock_toggle_skipping">Toggle skipping sponsors</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
Loading…
Add table
Reference in a new issue