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,
|
||||
(int) simpleExoPlayer.getDuration(), color);
|
||||
markableSeekBar.seekBarMarkers.add(seekBarMarker);
|
||||
markableSeekBar.invalidate();
|
||||
|
||||
Log.d("SPONSOR_BLOCK", "Progress bar marker: "
|
||||
+ seekBarMarker.percentStart + ", " + seekBarMarker.percentEnd);
|
||||
}
|
||||
markableSeekBar.drawMarkers();
|
||||
}
|
||||
|
||||
private Integer parseSegmentCategory(final String category) {
|
||||
|
|
|
@ -1,19 +1,23 @@
|
|||
package org.schabi.newpipe.views;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.RectF;
|
||||
import android.graphics.PorterDuff;
|
||||
import android.graphics.PorterDuffColorFilter;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.graphics.drawable.LayerDrawable;
|
||||
import android.util.AttributeSet;
|
||||
|
||||
import androidx.appcompat.widget.AppCompatSeekBar;
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
import org.schabi.newpipe.R;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class MarkableSeekBar extends AppCompatSeekBar {
|
||||
public ArrayList<SeekBarMarker> seekBarMarkers = new ArrayList<>();
|
||||
private RectF markerRect = new RectF();
|
||||
private Drawable originalProgressDrawable;
|
||||
|
||||
public MarkableSeekBar(final Context context) {
|
||||
super(context);
|
||||
|
@ -29,26 +33,72 @@ public class MarkableSeekBar extends AppCompatSeekBar {
|
|||
super(context, attrs, defStyleAttr);
|
||||
}
|
||||
|
||||
protected synchronized void onDraw(final Canvas canvas) {
|
||||
super.onDraw(canvas);
|
||||
@Override
|
||||
public void setProgressDrawable(final Drawable d) {
|
||||
super.setProgressDrawable(d);
|
||||
|
||||
final Drawable progressDrawable = getProgressDrawable();
|
||||
final Rect progressDrawableBounds = progressDrawable.getBounds();
|
||||
// stored for when we draw (and potentially re-draw) markers
|
||||
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 height = progressDrawable.getIntrinsicHeight();
|
||||
|
||||
for (int i = 0; i < seekBarMarkers.size(); i++) {
|
||||
final SeekBarMarker marker = seekBarMarkers.get(i);
|
||||
LayerDrawable layerDrawable = (LayerDrawable) originalProgressDrawable;
|
||||
|
||||
markerRect.left = width - (float) Math.floor(width * (1.0 - marker.percentStart))
|
||||
+ getPaddingStart();
|
||||
markerRect.top = progressDrawableBounds.bottom - height - 1;
|
||||
markerRect.right = width - (float) Math.ceil(width * (1.0 - marker.percentEnd))
|
||||
+ getPaddingStart();
|
||||
markerRect.bottom = progressDrawableBounds.bottom;
|
||||
final ArrayList<Drawable> markerDrawables = new ArrayList<>();
|
||||
markerDrawables.add(layerDrawable);
|
||||
|
||||
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;
|
||||
|
||||
import android.graphics.Paint;
|
||||
|
||||
public class SeekBarMarker {
|
||||
public double startTime;
|
||||
public double endTime;
|
||||
public double percentStart;
|
||||
public double percentEnd;
|
||||
public Paint paint;
|
||||
public int color;
|
||||
public Object tag;
|
||||
|
||||
public SeekBarMarker(final double startTime,
|
||||
|
@ -18,19 +16,12 @@ public class SeekBarMarker {
|
|||
this.endTime = endTime;
|
||||
this.percentStart = Math.round((startTime / maxTime) * 100.0) / 100.0;
|
||||
this.percentEnd = Math.round((endTime / maxTime) * 100.0) / 100.0;
|
||||
|
||||
initPaint(color);
|
||||
this.color = color;
|
||||
}
|
||||
|
||||
public SeekBarMarker(final double percentStart, final double percentEnd, final int color) {
|
||||
this.percentStart = percentStart;
|
||||
this.percentEnd = percentEnd;
|
||||
|
||||
initPaint(color);
|
||||
}
|
||||
|
||||
private void initPaint(final int color) {
|
||||
this.paint = new Paint();
|
||||
this.paint.setColor(color);
|
||||
this.color = color;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -700,10 +700,10 @@
|
|||
<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_skip_sponsor_message">Skipped sponsor</string>
|
||||
<string name="sponsorblock_skip_intro_message">Skipped intermission/intro segment</string>
|
||||
<string name="sponsorblock_skip_outro_message">Skipped endcards/credits segment</string>
|
||||
<string name="sponsorblock_skip_interaction_message">Skipped interaction reminder segment</string>
|
||||
<string name="sponsorblock_skip_self_promo_message">Skipped unpaid/self promo segment</string>
|
||||
<string name="sponsorblock_skip_non_music_message">Skipped non-music segment</string>
|
||||
<string name="sponsorblock_skip_intro_message">Skipped intermission/intro</string>
|
||||
<string name="sponsorblock_skip_outro_message">Skipped endcards/credits</string>
|
||||
<string name="sponsorblock_skip_interaction_message">Skipped interaction reminder</string>
|
||||
<string name="sponsorblock_skip_self_promo_message">Skipped unpaid/self promo</string>
|
||||
<string name="sponsorblock_skip_non_music_message">Skipped non-music</string>
|
||||
<string name="sponsorblock_toggle_skipping">Toggle skipping sponsors</string>
|
||||
</resources>
|
||||
|
|
Loading…
Add table
Reference in a new issue