Skip to content
This repository was archived by the owner on Aug 20, 2025. It is now read-only.

Commit 5f834f8

Browse files
committed
Accord: Pre alpha-12 changes
Signed-off-by: Kotonoha Akane <[email protected]>
1 parent 8808dd4 commit 5f834f8

38 files changed

+1009
-277
lines changed

app/src/main/java/com/google/android/material/slider/BaseOverlaySlider.java

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@
8080
import androidx.annotation.NonNull;
8181
import androidx.annotation.Nullable;
8282
import androidx.annotation.VisibleForTesting;
83+
import androidx.core.content.ContextCompat;
8384
import androidx.core.graphics.drawable.DrawableCompat;
8485
import androidx.core.view.ViewCompat;
8586
import androidx.core.view.accessibility.AccessibilityNodeInfoCompat;
@@ -250,6 +251,7 @@ abstract class BaseOverlaySlider<
250251

251252
@NonNull private final Paint inactiveTrackPaint;
252253
@NonNull private final Paint inactiveTrackPaintUnder;
254+
@NonNull private final Paint inactiveTrackPaintUnderOverlay;
253255
@NonNull private final Paint activeTrackPaint;
254256
@NonNull private final Paint thumbPaint;
255257
@NonNull private final Paint haloPaint;
@@ -363,8 +365,13 @@ public BaseOverlaySlider(
363365
inactiveTrackPaintUnder = new Paint();
364366
inactiveTrackPaintUnder.setStyle(Style.STROKE);
365367
inactiveTrackPaintUnder.setStrokeCap(Cap.ROUND);
366-
inactiveTrackPaintUnder.setColor(Color.parseColor("#80FFFFFF"));
367-
inactiveTrackPaintUnder.setXfermode(new PorterDuffXfermode(Mode.OVERLAY));
368+
inactiveTrackPaintUnder.setColor(ContextCompat.getColor(context, org.akanework.gramophone.R.color.contrast_colorSecondaryBackOverlayActivated));
369+
370+
inactiveTrackPaintUnderOverlay = new Paint();
371+
inactiveTrackPaintUnderOverlay.setStyle(Style.STROKE);
372+
inactiveTrackPaintUnderOverlay.setStrokeCap(Cap.ROUND);
373+
inactiveTrackPaintUnderOverlay.setXfermode(new PorterDuffXfermode(Mode.OVERLAY));
374+
inactiveTrackPaintUnderOverlay.setColor(ContextCompat.getColor(context, org.akanework.gramophone.R.color.contrast_colorSecondaryTopOverlayActivated));
368375

369376
inactiveTrackPaint = new Paint();
370377
inactiveTrackPaint.setStyle(Style.STROKE);
@@ -1788,9 +1795,11 @@ protected void onDraw(@NonNull Canvas canvas) {
17881795

17891796
int yCenter = calculateTrackCenter();
17901797

1798+
drawBottomTrackOverlay(canvas, trackWidth, yCenter);
1799+
17911800
drawBottomTrack(canvas, trackWidth, yCenter);
17921801

1793-
drawInactiveTrack(canvas, trackWidth, yCenter);
1802+
// drawInactiveTrack(canvas, trackWidth, yCenter);
17941803
if (max(getValues()) > valueFrom) {
17951804
drawActiveTrack(canvas, trackWidth, yCenter);
17961805
}
@@ -1849,6 +1858,16 @@ private void drawBottomTrack(@NonNull Canvas canvas, int width, int yCenter) {
18491858
);
18501859
}
18511860

1861+
private void drawBottomTrackOverlay(@NonNull Canvas canvas, int width, int yCenter) {
1862+
canvas.drawLine(
1863+
trackSidePadding,
1864+
yCenter,
1865+
trackSidePadding + width,
1866+
yCenter,
1867+
inactiveTrackPaintUnderOverlay
1868+
);
1869+
}
1870+
18521871
/**
18531872
* Returns a number between 0 and 1 indicating where on the track this value should sit with 0
18541873
* being on the far left, and 1 on the far right.
@@ -2040,6 +2059,11 @@ public void updateBottomTrackColor(int color) {
20402059
postInvalidate();
20412060
}
20422061

2062+
public void updateBottomTrackOverlayColor(int color) {
2063+
inactiveTrackPaintUnderOverlay.setColor(color);
2064+
postInvalidate();
2065+
}
2066+
20432067
/**
20442068
* Calculates the index the closest tick coordinates that the thumb should snap to.
20452069
*
@@ -2351,9 +2375,10 @@ private void setValueForLabel(TooltipDrawable label, float value) {
23512375
}
23522376

23532377
private void invalidateTrack() {
2354-
inactiveTrackPaint.setStrokeWidth(trackHeight);
2378+
// inactiveTrackPaint.setStrokeWidth(trackHeight);
23552379
activeTrackPaint.setStrokeWidth(trackHeight);
23562380
inactiveTrackPaintUnder.setStrokeWidth(trackHeight);
2381+
inactiveTrackPaintUnderOverlay.setStrokeWidth(trackHeight);
23572382
}
23582383

23592384
/**

app/src/main/java/org/akanework/gramophone/GramophoneApplication.kt

Lines changed: 55 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,12 @@ import android.app.Application
2121
import android.app.NotificationManager
2222
import android.content.Intent
2323
import android.content.SharedPreferences
24+
import android.media.ThumbnailUtils
2425
import android.os.StrictMode
2526
import android.os.StrictMode.ThreadPolicy
2627
import android.os.StrictMode.VmPolicy
2728
import android.util.Log
29+
import android.util.Size
2830
import androidx.annotation.OptIn
2931
import androidx.appcompat.app.AppCompatDelegate
3032
import androidx.media3.common.util.UnstableApi
@@ -33,10 +35,21 @@ import androidx.preference.PreferenceManager
3335
import coil3.ImageLoader
3436
import coil3.PlatformContext
3537
import coil3.SingletonImageLoader
36-
import coil3.util.DebugLogger
38+
import coil3.annotation.ExperimentalCoilApi
39+
import coil3.asCoilImage
40+
import coil3.decode.DataSource
41+
import coil3.fetch.Fetcher
42+
import coil3.fetch.ImageFetchResult
43+
import coil3.request.NullRequestDataException
44+
import coil3.request.allowHardware
45+
import coil3.size.pxOrElse
46+
import coil3.util.Logger
3747
import org.akanework.gramophone.logic.getStringStrict
48+
import org.akanework.gramophone.logic.hasScopedStorageV1
3849
import org.akanework.gramophone.logic.needsMissingOnDestroyCallWorkarounds
3950
import org.akanework.gramophone.ui.BugHandlerActivity
51+
import java.io.File
52+
import java.io.FileNotFoundException
4053
import kotlin.system.exitProcess
4154

4255
/**
@@ -99,12 +112,52 @@ class GramophoneApplication : Application(), SingletonImageLoader.Factory {
99112
}
100113
}
101114

115+
@kotlin.OptIn(ExperimentalCoilApi::class)
102116
override fun newImageLoader(context: PlatformContext): ImageLoader {
103117
return ImageLoader.Builder(context)
104118
.diskCache(null)
119+
.allowHardware(false)
120+
.components {
121+
if (hasScopedStorageV1()) {
122+
add(Fetcher.Factory { data, options, _ ->
123+
if (data !is Pair<*, *>) return@Factory null
124+
val size = data.second
125+
if (size !is Size?) return@Factory null
126+
val file = data.first as? File ?: return@Factory null
127+
return@Factory Fetcher {
128+
// TODO what if theres no cover? does this work correctly at all?
129+
ImageFetchResult(
130+
ThumbnailUtils.createAudioThumbnail(file, options.size.let {
131+
Size(it.width.pxOrElse { size?.width ?: 10000 },
132+
it.height.pxOrElse { size?.height ?: 10000 })
133+
}, null).asCoilImage(), true, DataSource.DISK)
134+
}
135+
})
136+
}
137+
}
105138
.run {
106139
if (!BuildConfig.DEBUG) this else
107-
logger(DebugLogger())
140+
logger(object : Logger {
141+
override var minLevel = Logger.Level.Verbose
142+
override fun log(
143+
tag: String,
144+
level: Logger.Level,
145+
message: String?,
146+
throwable: Throwable?
147+
) {
148+
if (level < minLevel) return
149+
val priority = level.ordinal + 2 // obviously the best way to do it
150+
if (message != null) {
151+
Log.println(priority, tag, message)
152+
}
153+
// Let's keep the log readable and ignore normal events' stack traces.
154+
if (throwable != null && throwable !is NullRequestDataException
155+
&& (throwable !is FileNotFoundException
156+
|| throwable.message != "No album art found")) {
157+
Log.println(priority, tag, Log.getStackTraceString(throwable))
158+
}
159+
}
160+
})
108161
}
109162
.build()
110163
}

0 commit comments

Comments
 (0)