Skip to content

Commit

Permalink
Accord: Pre alpha-12 changes
Browse files Browse the repository at this point in the history
Signed-off-by: Kotonoha Akane <[email protected]>
  • Loading branch information
AkaneTan committed Apr 30, 2024
1 parent 8808dd4 commit 5f834f8
Show file tree
Hide file tree
Showing 38 changed files with 1,009 additions and 277 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.core.content.ContextCompat;
import androidx.core.graphics.drawable.DrawableCompat;
import androidx.core.view.ViewCompat;
import androidx.core.view.accessibility.AccessibilityNodeInfoCompat;
Expand Down Expand Up @@ -250,6 +251,7 @@ abstract class BaseOverlaySlider<

@NonNull private final Paint inactiveTrackPaint;
@NonNull private final Paint inactiveTrackPaintUnder;
@NonNull private final Paint inactiveTrackPaintUnderOverlay;
@NonNull private final Paint activeTrackPaint;
@NonNull private final Paint thumbPaint;
@NonNull private final Paint haloPaint;
Expand Down Expand Up @@ -363,8 +365,13 @@ public BaseOverlaySlider(
inactiveTrackPaintUnder = new Paint();
inactiveTrackPaintUnder.setStyle(Style.STROKE);
inactiveTrackPaintUnder.setStrokeCap(Cap.ROUND);
inactiveTrackPaintUnder.setColor(Color.parseColor("#80FFFFFF"));
inactiveTrackPaintUnder.setXfermode(new PorterDuffXfermode(Mode.OVERLAY));
inactiveTrackPaintUnder.setColor(ContextCompat.getColor(context, org.akanework.gramophone.R.color.contrast_colorSecondaryBackOverlayActivated));

inactiveTrackPaintUnderOverlay = new Paint();
inactiveTrackPaintUnderOverlay.setStyle(Style.STROKE);
inactiveTrackPaintUnderOverlay.setStrokeCap(Cap.ROUND);
inactiveTrackPaintUnderOverlay.setXfermode(new PorterDuffXfermode(Mode.OVERLAY));
inactiveTrackPaintUnderOverlay.setColor(ContextCompat.getColor(context, org.akanework.gramophone.R.color.contrast_colorSecondaryTopOverlayActivated));

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

int yCenter = calculateTrackCenter();

drawBottomTrackOverlay(canvas, trackWidth, yCenter);

drawBottomTrack(canvas, trackWidth, yCenter);

drawInactiveTrack(canvas, trackWidth, yCenter);
// drawInactiveTrack(canvas, trackWidth, yCenter);
if (max(getValues()) > valueFrom) {
drawActiveTrack(canvas, trackWidth, yCenter);
}
Expand Down Expand Up @@ -1849,6 +1858,16 @@ private void drawBottomTrack(@NonNull Canvas canvas, int width, int yCenter) {
);
}

private void drawBottomTrackOverlay(@NonNull Canvas canvas, int width, int yCenter) {
canvas.drawLine(
trackSidePadding,
yCenter,
trackSidePadding + width,
yCenter,
inactiveTrackPaintUnderOverlay
);
}

/**
* Returns a number between 0 and 1 indicating where on the track this value should sit with 0
* being on the far left, and 1 on the far right.
Expand Down Expand Up @@ -2040,6 +2059,11 @@ public void updateBottomTrackColor(int color) {
postInvalidate();
}

public void updateBottomTrackOverlayColor(int color) {
inactiveTrackPaintUnderOverlay.setColor(color);
postInvalidate();
}

/**
* Calculates the index the closest tick coordinates that the thumb should snap to.
*
Expand Down Expand Up @@ -2351,9 +2375,10 @@ private void setValueForLabel(TooltipDrawable label, float value) {
}

private void invalidateTrack() {
inactiveTrackPaint.setStrokeWidth(trackHeight);
// inactiveTrackPaint.setStrokeWidth(trackHeight);
activeTrackPaint.setStrokeWidth(trackHeight);
inactiveTrackPaintUnder.setStrokeWidth(trackHeight);
inactiveTrackPaintUnderOverlay.setStrokeWidth(trackHeight);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,12 @@ import android.app.Application
import android.app.NotificationManager
import android.content.Intent
import android.content.SharedPreferences
import android.media.ThumbnailUtils
import android.os.StrictMode
import android.os.StrictMode.ThreadPolicy
import android.os.StrictMode.VmPolicy
import android.util.Log
import android.util.Size
import androidx.annotation.OptIn
import androidx.appcompat.app.AppCompatDelegate
import androidx.media3.common.util.UnstableApi
Expand All @@ -33,10 +35,21 @@ import androidx.preference.PreferenceManager
import coil3.ImageLoader
import coil3.PlatformContext
import coil3.SingletonImageLoader
import coil3.util.DebugLogger
import coil3.annotation.ExperimentalCoilApi
import coil3.asCoilImage
import coil3.decode.DataSource
import coil3.fetch.Fetcher
import coil3.fetch.ImageFetchResult
import coil3.request.NullRequestDataException
import coil3.request.allowHardware
import coil3.size.pxOrElse
import coil3.util.Logger
import org.akanework.gramophone.logic.getStringStrict
import org.akanework.gramophone.logic.hasScopedStorageV1
import org.akanework.gramophone.logic.needsMissingOnDestroyCallWorkarounds
import org.akanework.gramophone.ui.BugHandlerActivity
import java.io.File
import java.io.FileNotFoundException
import kotlin.system.exitProcess

/**
Expand Down Expand Up @@ -99,12 +112,52 @@ class GramophoneApplication : Application(), SingletonImageLoader.Factory {
}
}

@kotlin.OptIn(ExperimentalCoilApi::class)
override fun newImageLoader(context: PlatformContext): ImageLoader {
return ImageLoader.Builder(context)
.diskCache(null)
.allowHardware(false)
.components {
if (hasScopedStorageV1()) {
add(Fetcher.Factory { data, options, _ ->
if (data !is Pair<*, *>) return@Factory null
val size = data.second
if (size !is Size?) return@Factory null
val file = data.first as? File ?: return@Factory null
return@Factory Fetcher {
// TODO what if theres no cover? does this work correctly at all?
ImageFetchResult(
ThumbnailUtils.createAudioThumbnail(file, options.size.let {
Size(it.width.pxOrElse { size?.width ?: 10000 },
it.height.pxOrElse { size?.height ?: 10000 })
}, null).asCoilImage(), true, DataSource.DISK)
}
})
}
}
.run {
if (!BuildConfig.DEBUG) this else
logger(DebugLogger())
logger(object : Logger {
override var minLevel = Logger.Level.Verbose
override fun log(
tag: String,
level: Logger.Level,
message: String?,
throwable: Throwable?
) {
if (level < minLevel) return
val priority = level.ordinal + 2 // obviously the best way to do it
if (message != null) {
Log.println(priority, tag, message)
}
// Let's keep the log readable and ignore normal events' stack traces.
if (throwable != null && throwable !is NullRequestDataException
&& (throwable !is FileNotFoundException
|| throwable.message != "No album art found")) {
Log.println(priority, tag, Log.getStackTraceString(throwable))
}
}
})
}
.build()
}
Expand Down
Loading

0 comments on commit 5f834f8

Please sign in to comment.