Warning, /network/kdeconnect-android/src/org/kde/kdeconnect/UserInterface/About/AutoGridLayout.kt is written in an unsupported language. File is not indexed.

0001 /*
0002  * SPDX-FileCopyrightText: 2021 Maxim Leshchenko <cnmaks90@gmail.com>
0003  *
0004  * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005  */
0006 
0007 package org.kde.kdeconnect.UserInterface.About
0008 
0009 import android.content.Context
0010 import android.util.AttributeSet
0011 import androidx.gridlayout.widget.GridLayout
0012 import org.kde.kdeconnect_tp.R
0013 import kotlin.math.max
0014 
0015 /**
0016 * GridLayout that adjusts the number of columns and rows to fill all screen space
0017  */
0018 class AutoGridLayout @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) : GridLayout(context, attrs, defStyleAttr) {
0019     private var defaultColumnCount = 0
0020     private var columnWidth = 0
0021     private var changeColumnCountIfTheyHaveOnlyOneElement = false
0022 
0023     init {
0024         var typedArray = context.obtainStyledAttributes(attrs, R.styleable.AutoGridLayout, 0, defStyleAttr)
0025 
0026         try {
0027             columnWidth = typedArray.getDimensionPixelSize(R.styleable.AutoGridLayout_columnWidth, 0)
0028             changeColumnCountIfTheyHaveOnlyOneElement = typedArray.getBoolean(R.styleable.AutoGridLayout_changeColumnCountIfTheyHaveOnlyOneElement, false)
0029             typedArray = context.obtainStyledAttributes(attrs, intArrayOf(android.R.attr.columnCount), 0, defStyleAttr)
0030             defaultColumnCount = typedArray.getInt(0, 10)
0031         } finally {
0032             typedArray.recycle()
0033         }
0034 
0035         columnCount = 1
0036     }
0037 
0038     override fun onMeasure(widthSpec: Int, heightSpec: Int) {
0039         super.onMeasure(widthSpec, heightSpec)
0040         val width = MeasureSpec.getSize(widthSpec)
0041 
0042         if (columnWidth > 0 && width > 0) {
0043             val totalSpace = width - paddingRight - paddingLeft
0044             var calculatedColumnCount = max(1, totalSpace / columnWidth)
0045 
0046             if (calculatedColumnCount < childCount && changeColumnCountIfTheyHaveOnlyOneElement) {
0047                 calculatedColumnCount = defaultColumnCount
0048             }
0049 
0050             columnCount = calculatedColumnCount
0051         } else {
0052             columnCount = defaultColumnCount
0053         }
0054     }
0055 }