blob: e7751456976b0f553a87e4b8101586335e4f8d6c [file] [log] [blame]
/*
* 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.celllayout
import android.graphics.Rect
import android.util.ArrayMap
import android.view.View
import com.android.launcher3.util.CellAndSpan
/** Represents the solution to a reorder of items in the Workspace. */
class ItemConfiguration : CellAndSpan() {
@JvmField val map = ArrayMap<View, CellAndSpan>()
private val savedMap = ArrayMap<View, CellAndSpan>()
@JvmField val sortedViews = ArrayList<View>()
@JvmField var intersectingViews: ArrayList<View> = ArrayList()
@JvmField var isSolution = false
fun save() {
// Copy current state into savedMap
map.forEach { (k, v) -> savedMap[k]?.copyFrom(v) }
}
fun restore() {
// Restore current state from savedMap
savedMap.forEach { (k, v) -> map[k]?.copyFrom(v) }
}
fun add(v: View, cs: CellAndSpan) {
map[v] = cs
savedMap[v] = CellAndSpan()
sortedViews.add(v)
}
fun area(): Int {
return spanX * spanY
}
fun getBoundingRectForViews(views: ArrayList<View>, outRect: Rect) {
views
.mapNotNull { v -> map[v] }
.forEachIndexed { i, c ->
if (i == 0) outRect.set(c.cellX, c.cellY, c.cellX + c.spanX, c.cellY + c.spanY)
else outRect.union(c.cellX, c.cellY, c.cellX + c.spanX, c.cellY + c.spanY)
}
}
}