From 1f4b6e483a85c60d2a0c2d4d9d4a33c1e9151c9c Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Thu, 14 Jun 2018 16:13:08 +0200 Subject: [PATCH 1/6] Updated seekbar appearance --- .../fdroid/views/LiveSeekBarPreference.java | 2 +- .../fdroid/views/SeekBarForegroundThumb.java | 85 ++++++++++++++++++ app/src/main/res/drawable/seekbar_fill.9.png | Bin 206 -> 0 bytes .../main/res/drawable/seekbar_progress.xml | 12 --- .../main/res/drawable/seekbar_tickmark.xml | 6 +- .../main/res/layout/preference_seekbar.xml | 4 +- app/src/main/res/values/styles.xml | 2 +- 7 files changed, 92 insertions(+), 19 deletions(-) create mode 100644 app/src/main/java/org/fdroid/fdroid/views/SeekBarForegroundThumb.java delete mode 100644 app/src/main/res/drawable/seekbar_fill.9.png delete mode 100644 app/src/main/res/drawable/seekbar_progress.xml 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 3d7427c0bdbd606cbb47e9d0ab327c7d166f9af1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)P!3HG%MVKuHQfx`y?k+$Y2!1;6t_M<_1s;*b z3=De8Ak0{?)V>TT$X?><>&pI!jYCjS^~TiCAR);T*N775{M_8syb=cIqSVBa)D(sC z%#sWRcTeAd@J2pypdvF*7sn8Z%gG52tp6oBI0XdSJvJSPh?N%5I?W^@At@oDz_N*D q5)+$R%G4KDA8(y>IT30xm!IKj2H%A3M|nZ6W$<+Mb6Mw<&;$Uj$u+tF 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 @@ From 53894db91127a4d66c415293f9d860ebf00a9469 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Thu, 14 Jun 2018 16:16:31 +0200 Subject: [PATCH 2/6] Display disabled state --- .../java/org/fdroid/fdroid/views/LiveSeekBarPreference.java | 6 ++++++ 1 file changed, 6 insertions(+) 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 067a904ff..81009edb2 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/LiveSeekBarPreference.java +++ b/app/src/main/java/org/fdroid/fdroid/views/LiveSeekBarPreference.java @@ -66,6 +66,12 @@ public class LiveSeekBarPreference extends SeekBarPreference { } }); seekbar.setProgress(value); + + if (isEnabled()) { + seekbar.setAlpha(1.0f); + } else { + seekbar.setAlpha(0.3f); + } } @Override From 5aca70c7866458d7e3a364f8208ee676880cf1cd Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Thu, 14 Jun 2018 17:44:59 +0200 Subject: [PATCH 3/6] Make checkstyle happy --- .../fdroid/views/SeekBarForegroundThumb.java | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/views/SeekBarForegroundThumb.java b/app/src/main/java/org/fdroid/fdroid/views/SeekBarForegroundThumb.java index 012e9a2c9..08d782cc6 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/SeekBarForegroundThumb.java +++ b/app/src/main/java/org/fdroid/fdroid/views/SeekBarForegroundThumb.java @@ -13,7 +13,7 @@ import org.fdroid.fdroid.R; * Based on https://stackoverflow.com/a/47727128 */ public class SeekBarForegroundThumb extends AppCompatSeekBar { - private Drawable mTickMark; + private Drawable tickMark; private Context context; public SeekBarForegroundThumb(Context context) { @@ -35,9 +35,9 @@ public class SeekBarForegroundThumb extends AppCompatSeekBar { this.context = context; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - mTickMark = context.getDrawable(R.drawable.seekbar_tickmark); + tickMark = context.getDrawable(R.drawable.seekbar_tickmark); } else { - mTickMark = context.getResources().getDrawable(R.drawable.seekbar_tickmark); + tickMark = context.getResources().getDrawable(R.drawable.seekbar_tickmark); } } @@ -61,21 +61,23 @@ public class SeekBarForegroundThumb extends AppCompatSeekBar { } private void drawTickMarks(Canvas canvas) { - if (mTickMark != null) { + if (tickMark != null) { final int count = getMax(); if (count > 1) { - final int w = mTickMark.getIntrinsicWidth(); - final int h = mTickMark.getIntrinsicHeight(); + final int w = tickMark.getIntrinsicWidth(); + final int h = tickMark.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; + tickMark.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); + if(i!=getProgress()) { + tickMark.draw(canvas); + } canvas.translate(spacing, 0); } canvas.restoreToCount(saveCount); From 14d80cf1c9c2022ada534639fe4f2dfbeeeacbcb Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Thu, 14 Jun 2018 17:50:13 +0200 Subject: [PATCH 4/6] Explain null value --- app/src/main/res/values/styles.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index ba1d52dce..be51b33ee 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -319,6 +319,6 @@ From 6b0653a48846bcbac91ad78b85bd65f4cf6c60a1 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Thu, 14 Jun 2018 22:48:04 +0200 Subject: [PATCH 5/6] Code style improvements --- .../java/org/fdroid/fdroid/views/SeekBarForegroundThumb.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/org/fdroid/fdroid/views/SeekBarForegroundThumb.java b/app/src/main/java/org/fdroid/fdroid/views/SeekBarForegroundThumb.java index 08d782cc6..b5715769e 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/SeekBarForegroundThumb.java +++ b/app/src/main/java/org/fdroid/fdroid/views/SeekBarForegroundThumb.java @@ -75,7 +75,7 @@ public class SeekBarForegroundThumb extends AppCompatSeekBar { final int saveCount = canvas.save(); canvas.translate(getPaddingLeft() - getThumbOffset() + halfThumbW, getHeight() / 2); for (int i = 0; i <= count; i++) { - if(i!=getProgress()) { + if (i != getProgress()) { tickMark.draw(canvas); } canvas.translate(spacing, 0); From 55c2cbf9c278fa66fa899a3250823fc26a919bc0 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Fri, 15 Jun 2018 13:47:02 +0200 Subject: [PATCH 6/6] fix pmd "Overriding method merely calls super" --- .../java/org/fdroid/fdroid/views/SeekBarForegroundThumb.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/views/SeekBarForegroundThumb.java b/app/src/main/java/org/fdroid/fdroid/views/SeekBarForegroundThumb.java index b5715769e..4a5f1d509 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/SeekBarForegroundThumb.java +++ b/app/src/main/java/org/fdroid/fdroid/views/SeekBarForegroundThumb.java @@ -55,11 +55,6 @@ public class SeekBarForegroundThumb extends AppCompatSeekBar { drawTickMarks(canvas); } - @Override - public int getThumbOffset() { - return super.getThumbOffset(); - } - private void drawTickMarks(Canvas canvas) { if (tickMark != null) { final int count = getMax();