diff options
Diffstat (limited to 'src/com/android/launcher3/util/IconSizeSteps.kt')
-rw-r--r-- | src/com/android/launcher3/util/IconSizeSteps.kt | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/com/android/launcher3/util/IconSizeSteps.kt b/src/com/android/launcher3/util/IconSizeSteps.kt new file mode 100644 index 0000000000..2a5afe0ce2 --- /dev/null +++ b/src/com/android/launcher3/util/IconSizeSteps.kt @@ -0,0 +1,47 @@ +/* + * 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> + + init { + steps = + res.obtainTypedArray(R.array.icon_size_steps).use { + (0 until it.length()).map { step -> it.getDimensionOrThrow(step).toInt() }.sorted() + } + } + + fun minimumIconSize(): Int = steps[0] + + fun getNextLowerIconSize(iconSizePx: Int): Int { + return steps[max(0, getIndexForIconSize(iconSizePx) - 1)] + } + + fun getIconSmallerThan(cellWidth: Int): Int { + return steps.lastOrNull { it <= cellWidth } ?: steps[0] + } + + private fun getIndexForIconSize(iconSizePx: Int): Int { + return max(0, steps.indexOfFirst { iconSizePx <= it }) + } +} |