Files
Lawnchair/src/com/android/launcher3/util/IconSizeSteps.kt
T
Jordan Silva 10ce3f5fe2 Reduce the iconSize to fit inside the cellSize when display size largest
For some cases, even after reducing the iconSize and iconTextSize the content of the cell does not fit inside the cell height. This issue leads the icons or labels of the folders and workspace to crop. To prevent the icons of cropping when the display size or font size is largest (for acessibility) we allow the icons and labels shrink until it fits inside the defined cell height.

Bug: 314285621
Bug: 316087877
Flag: ACONFIG com.android.launcher3.enable_responsive_workspace TEAMFOOD
Test: NexusLauncherImageTests
Change-Id: Id8da3ee89658b9fc53a36d8605b9bd56ce168834
2024-01-05 13:24:32 -03:00

58 lines
1.9 KiB
Kotlin

/*
* Copyright (C) 2023 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.launcher3.util
import android.content.res.Resources
import androidx.core.content.res.getDimensionOrThrow
import androidx.core.content.res.use
import com.android.launcher3.R
import kotlin.math.max
class IconSizeSteps(res: Resources) {
private val steps: List<Int>
val minimumIconLabelSize: Int
init {
steps =
res.obtainTypedArray(R.array.icon_size_steps).use {
(0 until it.length()).map { step -> it.getDimensionOrThrow(step).toInt() }.sorted()
}
minimumIconLabelSize = res.getDimensionPixelSize(R.dimen.minimum_icon_label_size)
}
fun minimumIconSize(): Int = steps[0]
fun getNextLowerIconSize(iconSizePx: Int): Int {
return steps[max(0, getIndexForIconSize(iconSizePx) - 1)]
}
fun getIconSmallerThan(cellSize: Int): Int {
return steps.lastOrNull { it <= cellSize } ?: steps[0]
}
private fun getIndexForIconSize(iconSizePx: Int): Int {
return max(0, steps.indexOfFirst { iconSizePx <= it })
}
companion object {
internal const val TEXT_STEP = 1
// This icon extra step is used for stepping down logic in extreme cases when it's
// necessary to reduce the icon size below minimum size available in [icon_size_steps].
internal const val ICON_SIZE_STEP_EXTRA = 2
}
}