From 53ee3490a494bb5004aa3d5b090c8b6b8b098ad3 Mon Sep 17 00:00:00 2001 From: Akash Yadav Date: Sun, 6 Nov 2022 22:34:01 +0530 Subject: [PATCH] Implemented GridLayoutAttrAdapter --- .../adapters/GridLayoutAttrAdapter.kt | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 xml-inflater/src/main/java/com/itsaky/androidide/inflater/internal/adapters/GridLayoutAttrAdapter.kt diff --git a/xml-inflater/src/main/java/com/itsaky/androidide/inflater/internal/adapters/GridLayoutAttrAdapter.kt b/xml-inflater/src/main/java/com/itsaky/androidide/inflater/internal/adapters/GridLayoutAttrAdapter.kt new file mode 100644 index 000000000..f1aa639c5 --- /dev/null +++ b/xml-inflater/src/main/java/com/itsaky/androidide/inflater/internal/adapters/GridLayoutAttrAdapter.kt @@ -0,0 +1,75 @@ +/* + * This file is part of AndroidIDE. + * + * AndroidIDE is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * AndroidIDE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with AndroidIDE. If not, see . + */ + +package com.itsaky.androidide.inflater.internal.adapters + +import android.content.Context +import android.view.ViewGroup.LayoutParams +import android.widget.GridLayout +import com.itsaky.androidide.annotations.inflater.AttributeAdapter +import com.itsaky.androidide.inflater.IAttribute +import com.itsaky.androidide.inflater.INamespace +import com.itsaky.androidide.inflater.IView +import com.itsaky.androidide.inflater.internal.LayoutFile + +/** + * Attribute adapter for [GridLayout]. + * + * @author Akash Yadav + */ +@AttributeAdapter(GridLayout::class) +open class GridLayoutAttrAdapter : ViewGroupAttrAdapter() { + override fun apply(view: IView, attribute: IAttribute): Boolean { + return doApply(view, attribute) { + _: LayoutFile, + _: Context, + _: LayoutParams, + _: INamespace, + name: String, + value: String -> + var applied = true + when (name) { + "alignmentMode" -> alignmentMode = parseAlignmentMode(value) + "columnCount" -> columnCount = parseInteger(value, Int.MIN_VALUE) + "columnOrderPreserved" -> isColumnOrderPreserved = parseBoolean(value) + "orientation" -> orientation = parseOrientation(value) + "rowCount" -> rowCount = parseInteger(value, Int.MIN_VALUE) + "rowOrderPreserved" -> isRowOrderPreserved = parseBoolean(value) + "useDefaultMargins" -> useDefaultMargins = parseBoolean(value) + else -> applied = false + } + + if (!applied) { + applied = super.apply(view, attribute) + } + + return@doApply applied + } + } + + protected open fun parseOrientation(value: String): Int { + return if ("vertical" == value) { + GridLayout.VERTICAL + } else GridLayout.HORIZONTAL + } + + protected open fun parseAlignmentMode(value: String): Int { + return if ("alignBounds" == value) { + GridLayout.ALIGN_BOUNDS + } else GridLayout.ALIGN_MARGINS + } +}