diff --git a/app/src/google/java/net/vonforst/evmap/auto/ChargepriceScreen.kt b/app/src/google/java/net/vonforst/evmap/auto/ChargepriceScreen.kt index 2cd77fa9..27266b7a 100644 --- a/app/src/google/java/net/vonforst/evmap/auto/ChargepriceScreen.kt +++ b/app/src/google/java/net/vonforst/evmap/auto/ChargepriceScreen.kt @@ -206,7 +206,7 @@ class ChargepriceScreen(ctx: CarContext, val charger: ChargeLocation) : Screen(c } private fun loadPrices(model: Model?) { - val dataAdapter = ChargepriceApi.getDataAdapter(charger) ?: return + val dataAdapter = ChargepriceApi.getDataAdapter(charger) val manufacturer = model?.manufacturer?.value val modelName = getVehicleModel(model?.manufacturer?.value, model?.name?.value) lifecycleScope.launch { diff --git a/app/src/google/java/net/vonforst/evmap/auto/MapScreen.kt b/app/src/google/java/net/vonforst/evmap/auto/MapScreen.kt index 7405745d..4403339c 100644 --- a/app/src/google/java/net/vonforst/evmap/auto/MapScreen.kt +++ b/app/src/google/java/net/vonforst/evmap/auto/MapScreen.kt @@ -335,7 +335,7 @@ class MapScreen(ctx: CarContext, val session: EVMapSession) : availabilities[charger.id]?.second?.let { av -> val status = av.status.values.flatten() val available = availabilityText(status) - val total = charger.chargepoints.sumBy { it.count } + val total = charger.chargepoints.sumOf { it.count } if (text.isNotEmpty()) text.append(" ยท ") text.append( @@ -476,7 +476,7 @@ class MapScreen(ctx: CarContext, val session: EVMapSession) : val location = location val heading = heading?.orientations?.value?.get(0) ?: if (location?.hasBearing() == true) location.bearing else null - return heading?.let { heading -> + return heading?.let { if (!prefs.showChargersAheadAndroidAuto) return@let chargers chargers?.filter { diff --git a/app/src/google/java/net/vonforst/evmap/auto/PermissionScreen.kt b/app/src/google/java/net/vonforst/evmap/auto/PermissionScreen.kt index 46c454de..53d97f13 100644 --- a/app/src/google/java/net/vonforst/evmap/auto/PermissionScreen.kt +++ b/app/src/google/java/net/vonforst/evmap/auto/PermissionScreen.kt @@ -46,7 +46,7 @@ class PermissionScreen( } private fun requestPermissions() { - carContext.requestPermissions(permissions) { granted, rejected -> + carContext.requestPermissions(permissions) { granted, _ -> if (granted.containsAll(permissions)) { screenManager.pop() } else { diff --git a/app/src/google/java/net/vonforst/evmap/auto/SettingsScreens.kt b/app/src/google/java/net/vonforst/evmap/auto/SettingsScreens.kt index 4af50031..2dee75ee 100644 --- a/app/src/google/java/net/vonforst/evmap/auto/SettingsScreens.kt +++ b/app/src/google/java/net/vonforst/evmap/auto/SettingsScreens.kt @@ -15,10 +15,7 @@ import androidx.car.app.model.* import androidx.core.graphics.drawable.IconCompat import androidx.lifecycle.lifecycleScope import kotlinx.coroutines.launch -import net.vonforst.evmap.BuildConfig -import net.vonforst.evmap.EXTRA_DONATE -import net.vonforst.evmap.MapsActivity -import net.vonforst.evmap.R +import net.vonforst.evmap.* import net.vonforst.evmap.api.chargeprice.ChargepriceApi import net.vonforst.evmap.api.chargeprice.ChargepriceCar import net.vonforst.evmap.api.chargeprice.ChargepriceTariff @@ -718,7 +715,7 @@ class DeveloperOptionsScreen(ctx: CarContext) : Screen(ctx) { val hostPackage = carContext.hostInfo?.packageName val hostVersion = hostPackage?.let { try { - carContext.packageManager.getPackageInfo(it, 0).versionName + carContext.packageManager.getPackageInfoCompat(it).versionName } catch (e: NameNotFoundException) { null } diff --git a/app/src/google/java/net/vonforst/evmap/auto/Utils.kt b/app/src/google/java/net/vonforst/evmap/auto/Utils.kt index 5ac0d11b..dda75a38 100644 --- a/app/src/google/java/net/vonforst/evmap/auto/Utils.kt +++ b/app/src/google/java/net/vonforst/evmap/auto/Utils.kt @@ -19,6 +19,7 @@ import androidx.core.graphics.drawable.IconCompat import net.vonforst.evmap.BuildConfig import net.vonforst.evmap.R import net.vonforst.evmap.api.availability.ChargepointStatus +import net.vonforst.evmap.getPackageInfoCompat import java.util.* import kotlin.math.roundToInt @@ -196,7 +197,7 @@ fun List.paginate(nSingle: Int, nFirst: Int, nOther: Int, nLast: Int): Li } fun getAndroidAutoVersion(ctx: Context): List { - val info = ctx.packageManager.getPackageInfo("com.google.android.projection.gearhead", 0) + val info = ctx.packageManager.getPackageInfoCompat("com.google.android.projection.gearhead", 0) return info.versionName.split(".") } diff --git a/app/src/main/java/net/vonforst/evmap/MapsActivity.kt b/app/src/main/java/net/vonforst/evmap/MapsActivity.kt index 89e259fb..9d27d2e6 100644 --- a/app/src/main/java/net/vonforst/evmap/MapsActivity.kt +++ b/app/src/main/java/net/vonforst/evmap/MapsActivity.kt @@ -76,7 +76,7 @@ class MapsActivity : AppCompatActivity(), val navView = findViewById(R.id.nav_view) navView.setupWithNavController(navController) - ViewCompat.setOnApplyWindowInsetsListener(navView) { v, insets -> + ViewCompat.setOnApplyWindowInsetsListener(navView) { _, insets -> val header = navView.getHeaderView(0) header.setPadding(0, insets.getInsets(WindowInsetsCompat.Type.statusBars()).top, 0, 0) insets diff --git a/app/src/main/java/net/vonforst/evmap/Utils.kt b/app/src/main/java/net/vonforst/evmap/Utils.kt index 22a981dc..91604dc2 100644 --- a/app/src/main/java/net/vonforst/evmap/Utils.kt +++ b/app/src/main/java/net/vonforst/evmap/Utils.kt @@ -1,8 +1,11 @@ package net.vonforst.evmap import android.content.Context +import android.content.pm.PackageInfo +import android.content.pm.PackageManager import android.content.res.Configuration import android.graphics.Typeface +import android.os.Build import android.os.Bundle import android.text.* import android.text.style.StyleSpan @@ -88,4 +91,11 @@ const val meterPerFt = 0.3048 fun shouldUseImperialUnits(): Boolean { return Locale.getDefault().country in listOf("US", "GB", "MM", "LR") -} \ No newline at end of file +} + +fun PackageManager.getPackageInfoCompat(packageName: String, flags: Int = 0): PackageInfo = + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + getPackageInfo(packageName, PackageManager.PackageInfoFlags.of(flags.toLong())) + } else { + @Suppress("DEPRECATION") getPackageInfo(packageName, flags) + } \ No newline at end of file diff --git a/app/src/main/java/net/vonforst/evmap/adapter/DataBindingAdapters.kt b/app/src/main/java/net/vonforst/evmap/adapter/DataBindingAdapters.kt index af7b460a..1a626756 100644 --- a/app/src/main/java/net/vonforst/evmap/adapter/DataBindingAdapters.kt +++ b/app/src/main/java/net/vonforst/evmap/adapter/DataBindingAdapters.kt @@ -1,7 +1,6 @@ package net.vonforst.evmap.adapter import android.view.LayoutInflater -import android.view.View import android.view.ViewGroup import androidx.databinding.DataBindingUtil import androidx.databinding.ViewDataBinding @@ -166,7 +165,7 @@ class CheckableConnectorAdapter : DataBindingAdapter() { root.setOnClickListener { root.isChecked = true } - root.setOnCheckedChangeListener { v: View, checked: Boolean -> + root.setOnCheckedChangeListener { _, checked: Boolean -> if (checked) { checkedItem = holder.bindingAdapterPosition.takeIf { it != -1 } root.post { @@ -205,7 +204,7 @@ class CheckableChargepriceCarAdapter : DataBindingAdapter() { root.setOnClickListener { root.isChecked = true } - root.setOnCheckedChangeListener { v: View, checked: Boolean -> + root.setOnCheckedChangeListener { _, checked: Boolean -> if (checked && item != checkedItem) { checkedItem = item root.post { diff --git a/app/src/main/java/net/vonforst/evmap/adapter/FilterProfilesAdapter.kt b/app/src/main/java/net/vonforst/evmap/adapter/FilterProfilesAdapter.kt index 83db87d4..cca6e2b4 100644 --- a/app/src/main/java/net/vonforst/evmap/adapter/FilterProfilesAdapter.kt +++ b/app/src/main/java/net/vonforst/evmap/adapter/FilterProfilesAdapter.kt @@ -25,7 +25,7 @@ class FilterProfilesAdapter( super.bind(holder, item) val binding = holder.binding as ItemFilterProfileBinding - binding.handle.setOnTouchListener { v, event -> + binding.handle.setOnTouchListener { _, event -> if (event?.action == MotionEvent.ACTION_DOWN) { dragHelper.startDrag(holder) } diff --git a/app/src/main/java/net/vonforst/evmap/api/availability/AvailabilityDetector.kt b/app/src/main/java/net/vonforst/evmap/api/availability/AvailabilityDetector.kt index a817d81b..65383e06 100644 --- a/app/src/main/java/net/vonforst/evmap/api/availability/AvailabilityDetector.kt +++ b/app/src/main/java/net/vonforst/evmap/api/availability/AvailabilityDetector.kt @@ -71,19 +71,19 @@ abstract class BaseAvailabilityDetector(private val client: OkHttpClient) : Avai connectors: Map>, chargepoints: List ): Map> { - var chargepoints = chargepoints + var cpts = chargepoints // iterate over each connector type val types = connectors.map { it.value.second }.distinct().toSet() val equivalentTypes = types.map { equivalentPlugTypes(it).plus(it) }.cartesianProduct() - var geTypes = chargepoints.map { it.type }.distinct().toSet() + var geTypes = cpts.map { it.type }.distinct().toSet() if (!equivalentTypes.any { it == geTypes } && geTypes.size > 1 && geTypes.contains( Chargepoint.SCHUKO )) { // If charger has household plugs and other plugs, try removing the household plugs // (common e.g. in Hamburg -> 2x Type 2 + 2x Schuko, but NM only lists Type 2) geTypes = geTypes.filter { it != Chargepoint.SCHUKO }.toSet() - chargepoints = chargepoints.filter { it.type != Chargepoint.SCHUKO } + cpts = cpts.filter { it.type != Chargepoint.SCHUKO } } if (!equivalentTypes.any { it == geTypes }) throw AvailabilityDetectorException("chargepoints do not match") return types.flatMap { type -> @@ -93,14 +93,14 @@ abstract class BaseAvailabilityDetector(private val client: OkHttpClient) : Avai val powers = connsOfType.map { it.value.first }.distinct().sorted() // find corresponding powers in GE data val gePowers = - chargepoints.filter { equivalentPlugTypes(it.type).any { it == type } } + cpts.filter { equivalentPlugTypes(it.type).any { it == type } } .mapNotNull { it.power }.distinct().sorted() // if the distinct number of powers is the same, try to match. if (powers.size == gePowers.size) { gePowers.zip(powers).map { (gePower, power) -> val chargepoint = - chargepoints.find { equivalentPlugTypes(it.type).any { it == type } && it.power == gePower }!! + cpts.find { equivalentPlugTypes(it.type).any { it == type } && it.power == gePower }!! val ids = connsOfType.filter { it.value.first == power }.keys if (chargepoint.count != ids.size) { throw AvailabilityDetectorException("chargepoints do not match") @@ -108,7 +108,7 @@ abstract class BaseAvailabilityDetector(private val client: OkHttpClient) : Avai chargepoint to ids } } else if (powers.size == 1 && gePowers.size == 2 - && chargepoints.sumOf { it.count } == connsOfType.size + && cpts.sumOf { it.count } == connsOfType.size ) { // special case: dual charger(s) with load balancing // GoingElectric shows 2 different powers, NewMotion just one @@ -116,7 +116,7 @@ abstract class BaseAvailabilityDetector(private val client: OkHttpClient) : Avai var i = 0 gePowers.map { gePower -> val chargepoint = - chargepoints.find { it.type in equivalentPlugTypes(type) && it.power == gePower }!! + cpts.find { it.type in equivalentPlugTypes(type) && it.power == gePower }!! val ids = allIds.subList(i, i + chargepoint.count).toSet() i += chargepoint.count chargepoint to ids diff --git a/app/src/main/java/net/vonforst/evmap/api/availability/ChargecloudAvailabilityDetector.kt b/app/src/main/java/net/vonforst/evmap/api/availability/ChargecloudAvailabilityDetector.kt index 9dd03b8a..884c2091 100644 --- a/app/src/main/java/net/vonforst/evmap/api/availability/ChargecloudAvailabilityDetector.kt +++ b/app/src/main/java/net/vonforst/evmap/api/availability/ChargecloudAvailabilityDetector.kt @@ -51,7 +51,7 @@ interface ChargecloudApi { ) companion object { - fun create(client: OkHttpClient, baseUrl: String? = null): ChargecloudApi { + fun create(client: OkHttpClient, baseUrl: String): ChargecloudApi { val retrofit = Retrofit.Builder() .baseUrl(baseUrl) .addConverterFactory(MoshiConverterFactory.create()) diff --git a/app/src/main/java/net/vonforst/evmap/api/availability/NewMotionAvailabilityDetector.kt b/app/src/main/java/net/vonforst/evmap/api/availability/NewMotionAvailabilityDetector.kt index 52358f52..95a3c322 100644 --- a/app/src/main/java/net/vonforst/evmap/api/availability/NewMotionAvailabilityDetector.kt +++ b/app/src/main/java/net/vonforst/evmap/api/availability/NewMotionAvailabilityDetector.kt @@ -140,7 +140,7 @@ class NewMotionAvailabilityDetector(client: OkHttpClient, baseUrl: String? = nul connectorStatus.forEach { (connector, statusStr, evseId) -> val id = connector.uid val power = connector.electricalProperties.getPower() - val type = when (connector.connectorType.toLowerCase(Locale.ROOT)) { + val type = when (connector.connectorType.lowercase(Locale.ROOT)) { "type3" -> Chargepoint.TYPE_3 "type2" -> Chargepoint.TYPE_2_UNKNOWN "type1" -> Chargepoint.TYPE_1 diff --git a/app/src/main/java/net/vonforst/evmap/api/goingelectric/GoingElectricAdapters.kt b/app/src/main/java/net/vonforst/evmap/api/goingelectric/GoingElectricAdapters.kt index b59d65d3..efde294f 100644 --- a/app/src/main/java/net/vonforst/evmap/api/goingelectric/GoingElectricAdapters.kt +++ b/app/src/main/java/net/vonforst/evmap/api/goingelectric/GoingElectricAdapters.kt @@ -71,10 +71,10 @@ internal class JsonObjectOrFalseAdapter private constructor( private val clazz: Class<*> ) : JsonAdapter() { - class Factory() : JsonAdapter.Factory { + class Factory : JsonAdapter.Factory { override fun create( type: Type, - annotations: Set?, + annotations: Set, moshi: Moshi ): JsonAdapter? { val clazz = Types.getRawType(type) diff --git a/app/src/main/java/net/vonforst/evmap/api/goingelectric/GoingElectricApi.kt b/app/src/main/java/net/vonforst/evmap/api/goingelectric/GoingElectricApi.kt index e7d693ca..27acd518 100644 --- a/app/src/main/java/net/vonforst/evmap/api/goingelectric/GoingElectricApi.kt +++ b/app/src/main/java/net/vonforst/evmap/api/goingelectric/GoingElectricApi.kt @@ -399,10 +399,10 @@ class GoingElectricApiWrapper( referenceData: ReferenceData, sp: StringProvider ): List> { - val referenceData = referenceData as GEReferenceData - val plugs = referenceData.plugs - val networks = referenceData.networks - val chargeCards = referenceData.chargecards + val refData = referenceData as GEReferenceData + val plugs = refData.plugs + val networks = refData.networks + val chargeCards = refData.chargecards val plugMap = plugs.map { plug -> plug to nameForPlugType(sp, GEChargepoint.convertTypeFromGE(plug)) diff --git a/app/src/main/java/net/vonforst/evmap/api/openchargemap/OpenChargeMapApi.kt b/app/src/main/java/net/vonforst/evmap/api/openchargemap/OpenChargeMapApi.kt index cd43624b..df976934 100644 --- a/app/src/main/java/net/vonforst/evmap/api/openchargemap/OpenChargeMapApi.kt +++ b/app/src/main/java/net/vonforst/evmap/api/openchargemap/OpenChargeMapApi.kt @@ -120,7 +120,7 @@ class OpenChargeMapApiWrapper( zoom: Float, filters: FilterValues?, ): Resource> { - val referenceData = referenceData as OCMReferenceData + val refData = referenceData as OCMReferenceData val minPower = filters?.getSliderValue("min_power")?.toDouble() val minConnectors = filters?.getSliderValue("min_connectors") @@ -160,7 +160,7 @@ class OpenChargeMapApiWrapper( minPower, connectorsVal, minConnectors, - referenceData, + refData, zoom ) return Resource.success(result) @@ -176,7 +176,7 @@ class OpenChargeMapApiWrapper( zoom: Float, filters: FilterValues? ): Resource> { - val referenceData = referenceData as OCMReferenceData + val refData = referenceData as OCMReferenceData val minPower = filters?.getSliderValue("min_power")?.toDouble() val minConnectors = filters?.getSliderValue("min_connectors") @@ -214,7 +214,7 @@ class OpenChargeMapApiWrapper( minPower, connectorsVal, minConnectors, - referenceData, + refData, zoom ) return Resource.success(result) @@ -254,11 +254,11 @@ class OpenChargeMapApiWrapper( referenceData: ReferenceData, id: Long ): Resource { - val referenceData = referenceData as OCMReferenceData + val refData = referenceData as OCMReferenceData try { val response = api.getChargepointDetail(id) if (response.isSuccessful && response.body()?.size == 1) { - return Resource.success(response.body()!![0].convert(referenceData, true)) + return Resource.success(response.body()!![0].convert(refData, true)) } else { return Resource.error(response.message(), null) } @@ -284,10 +284,10 @@ class OpenChargeMapApiWrapper( referenceData: ReferenceData, sp: StringProvider ): List> { - val referenceData = referenceData as OCMReferenceData + val refData = referenceData as OCMReferenceData - val operatorsMap = referenceData.operators.map { it.id.toString() to it.title }.toMap() - val plugMap = referenceData.connectionTypes.map { it.id.toString() to it.title }.toMap() + val operatorsMap = refData.operators.map { it.id.toString() to it.title }.toMap() + val plugMap = refData.connectionTypes.map { it.id.toString() to it.title }.toMap() return listOf( // supported by OCM API diff --git a/app/src/main/java/net/vonforst/evmap/fragment/FavoritesFragment.kt b/app/src/main/java/net/vonforst/evmap/fragment/FavoritesFragment.kt index 2beba7cf..5a839237 100644 --- a/app/src/main/java/net/vonforst/evmap/fragment/FavoritesFragment.kt +++ b/app/src/main/java/net/vonforst/evmap/fragment/FavoritesFragment.kt @@ -44,8 +44,7 @@ class FavoritesFragment : Fragment() { private val vm: FavoritesViewModel by viewModels(factoryProducer = { viewModelFactory { FavoritesViewModel( - requireActivity().application, - getString(R.string.goingelectric_key) + requireActivity().application ) } }) diff --git a/app/src/main/java/net/vonforst/evmap/fragment/FilterFragment.kt b/app/src/main/java/net/vonforst/evmap/fragment/FilterFragment.kt index 32ec3a6d..1addb690 100644 --- a/app/src/main/java/net/vonforst/evmap/fragment/FilterFragment.kt +++ b/app/src/main/java/net/vonforst/evmap/fragment/FilterFragment.kt @@ -120,7 +120,7 @@ class FilterFragment : Fragment(), MenuProvider { dialog.setTitle(R.string.save_as_profile) .setMessage(R.string.save_profile_enter_name) - .setPositiveButton(R.string.ok) { di, button -> + .setPositiveButton(R.string.ok) { _, _ -> if (input.text.isBlank()) { saveProfile(true) } else { @@ -130,7 +130,7 @@ class FilterFragment : Fragment(), MenuProvider { } } } - .setNegativeButton(R.string.cancel) { di, button -> + .setNegativeButton(R.string.cancel) { _, _ -> } } diff --git a/app/src/main/java/net/vonforst/evmap/fragment/FilterProfilesFragment.kt b/app/src/main/java/net/vonforst/evmap/fragment/FilterProfilesFragment.kt index 4c432170..1279a017 100644 --- a/app/src/main/java/net/vonforst/evmap/fragment/FilterProfilesFragment.kt +++ b/app/src/main/java/net/vonforst/evmap/fragment/FilterProfilesFragment.kt @@ -188,12 +188,12 @@ class FilterProfilesFragment : Fragment() { dialog.setTitle(R.string.rename) .setMessage(R.string.save_profile_enter_name) - .setPositiveButton(R.string.ok) { di, button -> + .setPositiveButton(R.string.ok) { _, _ -> lifecycleScope.launch { vm.update(fp.copy(name = input.text.toString())) } } - .setNegativeButton(R.string.cancel) { di, button -> + .setNegativeButton(R.string.cancel) { _, _ -> } } diff --git a/app/src/main/java/net/vonforst/evmap/fragment/MapFragment.kt b/app/src/main/java/net/vonforst/evmap/fragment/MapFragment.kt index ad8fbf34..2262cfd2 100644 --- a/app/src/main/java/net/vonforst/evmap/fragment/MapFragment.kt +++ b/app/src/main/java/net/vonforst/evmap/fragment/MapFragment.kt @@ -197,7 +197,7 @@ class MapFragment : Fragment(), OnMapReadyCallback, MapsActivity.FragmentCallbac ViewCompat.setOnApplyWindowInsetsListener( binding.root - ) { v, insets -> + ) { _, insets -> ViewCompat.onApplyWindowInsets(binding.root, insets) val systemWindowInsetTop = insets.getInsets(WindowInsetsCompat.Type.statusBars()).top @@ -465,7 +465,7 @@ class MapFragment : Fragment(), OnMapReadyCallback, MapsActivity.FragmentCallbac } ) } - binding.search.onFocusChangeListener = View.OnFocusChangeListener { v, hasFocus -> + binding.search.onFocusChangeListener = View.OnFocusChangeListener { _, hasFocus -> if (hasFocus) { binding.search.keyListener = searchKeyListener binding.search.text = binding.search.text // workaround to fix copy/paste diff --git a/app/src/main/java/net/vonforst/evmap/fragment/MultiSelectDialog.kt b/app/src/main/java/net/vonforst/evmap/fragment/MultiSelectDialog.kt index 85dc871d..663b2ac0 100644 --- a/app/src/main/java/net/vonforst/evmap/fragment/MultiSelectDialog.kt +++ b/app/src/main/java/net/vonforst/evmap/fragment/MultiSelectDialog.kt @@ -71,7 +71,7 @@ class MultiSelectDialog : MaterialDialogFragment() { binding.btnAll.visibility = if (showAllButton) View.VISIBLE else View.INVISIBLE items = data.entries.toList() - .sortedBy { it.value.toLowerCase(Locale.getDefault()) } + .sortedBy { it.value.lowercase(Locale.getDefault()) } .sortedBy { when { selected.contains(it.key) && commonChoices?.contains(it.key) == true -> 0 @@ -117,7 +117,7 @@ private fun search( ): List { return items.filter { item -> // search for string within name - text.toLowerCase(Locale.getDefault()) in item.name.toLowerCase(Locale.getDefault()) + text.lowercase(Locale.getDefault()) in item.name.lowercase(Locale.getDefault()) } } diff --git a/app/src/main/java/net/vonforst/evmap/model/ChargersModel.kt b/app/src/main/java/net/vonforst/evmap/model/ChargersModel.kt index afb7760c..3428b043 100644 --- a/app/src/main/java/net/vonforst/evmap/model/ChargersModel.kt +++ b/app/src/main/java/net/vonforst/evmap/model/ChargersModel.kt @@ -111,7 +111,7 @@ data class ChargeLocation( // check if there is more than one plug for any connector type val chargepointsPerConnector = - connectors.map { conn -> chargepoints.filter { it.type == conn }.sumBy { it.count } } + connectors.map { conn -> chargepoints.filter { it.type == conn }.sumOf { it.count } } return chargepointsPerConnector.any { it > 1 } } @@ -127,13 +127,13 @@ data class ChargeLocation( return variants.map { variant -> val count = chargepoints .filter { it.type == variant.type && it.power == variant.power } - .sumBy { it.count } + .sumOf { it.count } Chargepoint(variant.type, variant.power, count) } } val totalChargepoints: Int - get() = chargepoints.sumBy { it.count } + get() = chargepoints.sumOf { it.count } fun formatChargepoints(sp: StringProvider): String { return chargepointsMerged.map { diff --git a/app/src/main/java/net/vonforst/evmap/ui/BarGraphView.kt b/app/src/main/java/net/vonforst/evmap/ui/BarGraphView.kt index 68566970..90b7e3c9 100644 --- a/app/src/main/java/net/vonforst/evmap/ui/BarGraphView.kt +++ b/app/src/main/java/net/vonforst/evmap/ui/BarGraphView.kt @@ -211,12 +211,12 @@ class BarGraphView(context: Context, attrs: AttributeSet) : View(context, attrs) private fun drawBubble(canvas: Canvas, data: SortedMap, maxValue: Int) { val bubbleBounds = bubbleBounds ?: return val graphBounds = graphBounds ?: return - val data = data.toList() + val d = data.toList() - if (data.size <= selectedBar) return + if (d.size <= selectedBar) return canvas.apply { val center = graphBounds.left + selectedBar * (barWidth + barMargin) + barWidth * 0.5f - val (t, v) = data[selectedBar] + val (t, v) = d[selectedBar] val tformat = context.getString( R.string.prediction_time_colon, t.withZoneSameInstant(ZoneId.systemDefault()).format(timeFormat) diff --git a/app/src/main/java/net/vonforst/evmap/ui/BindingAdapters.kt b/app/src/main/java/net/vonforst/evmap/ui/BindingAdapters.kt index 301ae87a..dda156bb 100644 --- a/app/src/main/java/net/vonforst/evmap/ui/BindingAdapters.kt +++ b/app/src/main/java/net/vonforst/evmap/ui/BindingAdapters.kt @@ -121,6 +121,7 @@ private fun activeTint( } @BindingAdapter("data") +@Suppress("UNCHECKED_CAST") fun setRecyclerViewData(recyclerView: RecyclerView, items: List?) { if (recyclerView.adapter is ListAdapter<*, *>) { (recyclerView.adapter as ListAdapter).submitList(items) @@ -128,6 +129,7 @@ fun setRecyclerViewData(recyclerView: RecyclerView, items: List?) { } @BindingAdapter("data") +@Suppress("UNCHECKED_CAST") fun setRecyclerViewData(recyclerView: ViewPager2, items: List?) { if (recyclerView.adapter is ListAdapter<*, *>) { (recyclerView.adapter as ListAdapter).submitList(items) @@ -325,10 +327,10 @@ fun distance(meters: Number?): String? { } } -@InverseBindingAdapter(attribute = "app:values") +@InverseBindingAdapter(attribute = "values") fun getRangeSliderValue(slider: RangeSlider) = slider.values -@BindingAdapter("app:valuesAttrChanged") +@BindingAdapter("valuesAttrChanged") fun setRangeSliderListeners(slider: RangeSlider, attrChange: InverseBindingListener) { slider.addOnChangeListener { _, _, _ -> attrChange.onChange() @@ -348,7 +350,7 @@ fun colorEnabled(ctx: Context, enabled: Boolean): Int { return color } -@BindingAdapter("app:tint") +@BindingAdapter("tint") fun setImageTintList(view: ImageView, @ColorInt color: Int) { view.imageTintList = ColorStateList.valueOf(color) } diff --git a/app/src/main/java/net/vonforst/evmap/ui/RangeSliderPreference.kt b/app/src/main/java/net/vonforst/evmap/ui/RangeSliderPreference.kt index fd082288..e18d2f07 100644 --- a/app/src/main/java/net/vonforst/evmap/ui/RangeSliderPreference.kt +++ b/app/src/main/java/net/vonforst/evmap/ui/RangeSliderPreference.kt @@ -89,12 +89,12 @@ class RangeSliderPreference(context: Context, attrs: AttributeSet) : Preference( slider.valueTo = valueTo stepSize?.let { slider.stepSize = it } - slider.addOnChangeListener { slider, value, fromUser -> + slider.addOnChangeListener { slider, _, fromUser -> if (fromUser && (updatesContinuously || !dragging)) { syncValueInternal(slider) } } - slider.setOnTouchListener { v, event -> + slider.setOnTouchListener { _, event -> when (event.actionMasked) { MotionEvent.ACTION_DOWN -> dragging = true MotionEvent.ACTION_UP -> dragging = false diff --git a/app/src/main/java/net/vonforst/evmap/viewmodel/FavoritesViewModel.kt b/app/src/main/java/net/vonforst/evmap/viewmodel/FavoritesViewModel.kt index 87c8abbb..7002a8c5 100644 --- a/app/src/main/java/net/vonforst/evmap/viewmodel/FavoritesViewModel.kt +++ b/app/src/main/java/net/vonforst/evmap/viewmodel/FavoritesViewModel.kt @@ -16,7 +16,7 @@ import net.vonforst.evmap.model.FavoriteWithDetail import net.vonforst.evmap.storage.AppDatabase import net.vonforst.evmap.utils.distanceBetween -class FavoritesViewModel(application: Application, geApiKey: String) : +class FavoritesViewModel(application: Application) : AndroidViewModel(application) { private var db = AppDatabase.getInstance(application) @@ -69,7 +69,7 @@ class FavoritesViewModel(application: Application, geApiKey: String) : FavoritesListItem( favorite, totalAvailable(charger.id), - charger.chargepoints.sumBy { it.count }, + charger.chargepoints.sumOf { it.count }, location.value.let { loc -> if (loc == null) null else { distanceBetween( diff --git a/app/src/main/java/net/vonforst/evmap/viewmodel/Utils.kt b/app/src/main/java/net/vonforst/evmap/viewmodel/Utils.kt index a5e8bc5b..0a8fa0d0 100644 --- a/app/src/main/java/net/vonforst/evmap/viewmodel/Utils.kt +++ b/app/src/main/java/net/vonforst/evmap/viewmodel/Utils.kt @@ -13,7 +13,7 @@ import java.util.concurrent.atomic.AtomicBoolean @Suppress("UNCHECKED_CAST") inline fun viewModelFactory(crossinline f: () -> VM) = object : ViewModelProvider.Factory { - override fun create(aClass: Class): T = f() as T + override fun create(modelClass: Class): T = f() as T } @Suppress("UNCHECKED_CAST") @@ -106,7 +106,8 @@ fun throttleLatest( } } -public suspend fun LiveData.await(): T { +@ExperimentalCoroutinesApi +suspend fun LiveData.await(): T { return suspendCancellableCoroutine { continuation -> val observer = object : Observer { override fun onChanged(value: T?) { @@ -124,7 +125,8 @@ public suspend fun LiveData.await(): T { } } -public suspend fun LiveData>.awaitFinished(): Resource { +@ExperimentalCoroutinesApi +suspend fun LiveData>.awaitFinished(): Resource { return suspendCancellableCoroutine { continuation -> val observer = object : Observer> { override fun onChanged(value: Resource) {