diff --git a/app/src/main/java/org/fdroid/fdroid/views/LiveSeekBarPreference.java b/app/src/main/java/org/fdroid/fdroid/views/LiveSeekBarPreference.java index f1fda57f7..067a904ff 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/LiveSeekBarPreference.java +++ b/app/src/main/java/org/fdroid/fdroid/views/LiveSeekBarPreference.java @@ -37,7 +37,7 @@ public class LiveSeekBarPreference extends SeekBarPreference { public void onBindViewHolder(final PreferenceViewHolder holder) { super.onBindViewHolder(holder); - SeekBar seekbar = holder.itemView.findViewById(R.id.seekbar); + SeekBarForegroundThumb seekbar = holder.itemView.findViewById(R.id.seekbar); seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { diff --git a/app/src/main/java/org/fdroid/fdroid/views/SeekBarForegroundThumb.java b/app/src/main/java/org/fdroid/fdroid/views/SeekBarForegroundThumb.java new file mode 100644 index 000000000..012e9a2c9 --- /dev/null +++ b/app/src/main/java/org/fdroid/fdroid/views/SeekBarForegroundThumb.java @@ -0,0 +1,85 @@ +package org.fdroid.fdroid.views; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.drawable.Drawable; +import android.os.Build; +import android.support.v7.widget.AppCompatSeekBar; +import android.util.AttributeSet; +import org.fdroid.fdroid.R; + +/** + * SeekBar that does not show the TickMark above the thumb + * Based on https://stackoverflow.com/a/47727128 + */ +public class SeekBarForegroundThumb extends AppCompatSeekBar { + private Drawable mTickMark; + private Context context; + + public SeekBarForegroundThumb(Context context) { + super(context); + init(context); + } + + public SeekBarForegroundThumb(Context context, AttributeSet attrs) { + super(context, attrs); + init(context); + } + + public SeekBarForegroundThumb(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(context); + } + + private void init(Context context) { + this.context = context; + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + mTickMark = context.getDrawable(R.drawable.seekbar_tickmark); + } else { + mTickMark = context.getResources().getDrawable(R.drawable.seekbar_tickmark); + } + } + + private Drawable getThumbCompat() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { + return getThumb(); + } else { + return context.getResources().getDrawable(R.drawable.seekbar_thumb); + } + } + + @Override + protected synchronized void onDraw(Canvas canvas) { + super.onDraw(canvas); + drawTickMarks(canvas); + } + + @Override + public int getThumbOffset() { + return super.getThumbOffset(); + } + + private void drawTickMarks(Canvas canvas) { + if (mTickMark != null) { + final int count = getMax(); + if (count > 1) { + final int w = mTickMark.getIntrinsicWidth(); + final int h = mTickMark.getIntrinsicHeight(); + final int halfThumbW = getThumbCompat().getIntrinsicWidth() / 2; + final int halfW = w >= 0 ? w / 2 : 1; + final int halfH = h >= 0 ? h / 2 : 1; + mTickMark.setBounds(-halfW, -halfH, halfW, halfH); + final float spacing = (getWidth() - getPaddingLeft() - getPaddingRight() + getThumbOffset() * 2 - halfThumbW * 2) / (float) count; + final int saveCount = canvas.save(); + canvas.translate(getPaddingLeft() - getThumbOffset() + halfThumbW, getHeight() / 2); + for (int i = 0; i <= count; i++) { + if(i!=getProgress()) + mTickMark.draw(canvas); + canvas.translate(spacing, 0); + } + canvas.restoreToCount(saveCount); + } + } + } +} diff --git a/app/src/main/res/drawable/seekbar_fill.9.png b/app/src/main/res/drawable/seekbar_fill.9.png deleted file mode 100644 index 3d7427c0b..000000000 Binary files a/app/src/main/res/drawable/seekbar_fill.9.png and /dev/null differ diff --git a/app/src/main/res/drawable/seekbar_progress.xml b/app/src/main/res/drawable/seekbar_progress.xml deleted file mode 100644 index 72c15e8c5..000000000 --- a/app/src/main/res/drawable/seekbar_progress.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/seekbar_tickmark.xml b/app/src/main/res/drawable/seekbar_tickmark.xml index 7c11d874e..cae711ded 100644 --- a/app/src/main/res/drawable/seekbar_tickmark.xml +++ b/app/src/main/res/drawable/seekbar_tickmark.xml @@ -2,10 +2,10 @@ - + + android:width="6dp" + android:height="6dp"/> \ No newline at end of file diff --git a/app/src/main/res/layout/preference_seekbar.xml b/app/src/main/res/layout/preference_seekbar.xml index 06356ad03..b3b91d9a9 100644 --- a/app/src/main/res/layout/preference_seekbar.xml +++ b/app/src/main/res/layout/preference_seekbar.xml @@ -39,14 +39,14 @@ android:visibility="gone" android:textSize="0sp"/> - diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 5f5980f83..ba1d52dce 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -319,6 +319,6 @@