Bimba.git

ref: 027a562d35ed8083380a96a5501b7a08a9dd9c83

app/src/main/java/xyz/apiote/bimba/czwek/repo/StopStub.kt


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
// SPDX-FileCopyrightText: Adam Evyčędo
//
// SPDX-License-Identifier: GPL-3.0-or-later

package xyz.apiote.bimba.czwek.repo

import android.content.Context
import android.content.res.Configuration
import android.content.res.TypedArray
import android.graphics.Bitmap
import android.graphics.drawable.BitmapDrawable
import android.graphics.drawable.Drawable
import android.os.Parcelable
import androidx.appcompat.content.res.AppCompatResources
import androidx.core.graphics.ColorUtils
import androidx.core.graphics.drawable.toBitmap
import kotlinx.parcelize.Parcelize
import xyz.apiote.bimba.czwek.R
import xyz.apiote.bimba.czwek.api.StopStub
import xyz.apiote.bimba.czwek.dpToPixelI
import java.util.zip.Adler32

@Parcelize
data class StopStub(val name: String, val nodeName: String, val code: String, val zone: String, val onDemand: Boolean) :
	Parcelable {
	constructor(stopStub: StopStub) : this(
		stopStub.name,
		stopStub.nodeName,
		stopStub.code,
		stopStub.zone,
		stopStub.onDemand
	)
	fun icon(context: Context, scale: Float = 1f): Drawable {
		// TODO same is in Stop
		val md = Adler32().let {
			it.update(nodeName.toByteArray())
			it.value
		}
		val h = md % 359f
		val s = 1.0f
		val a: TypedArray = context.theme.obtainStyledAttributes(
			R.style.Theme_Bimba, intArrayOf(R.attr.randomColourLightness)
		)
		val l = a.getFloat(0, when (context.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK) {
			Configuration.UI_MODE_NIGHT_YES -> 1f
			Configuration.UI_MODE_NIGHT_NO -> 0f
			Configuration.UI_MODE_NIGHT_UNDEFINED -> 0f
			else -> 0f
		})
		a.recycle()
		val bg = AppCompatResources.getDrawable(context, R.drawable.stop)!!.mutate().apply {
			setTint(ColorUtils.HSLToColor(floatArrayOf(h, s, l)))
		}
		return BitmapDrawable(
			context.resources,
			bg.toBitmap(dpToPixelI(24f / scale), dpToPixelI(24f / scale), Bitmap.Config.ARGB_8888)
		)
	}
}