diff --git a/xml-inflater/src/main/java/com/itsaky/androidide/inflater/AbstractParser.kt b/xml-inflater/src/main/java/com/itsaky/androidide/inflater/AbstractParser.kt index ca73bf2dc..74ebe92c6 100644 --- a/xml-inflater/src/main/java/com/itsaky/androidide/inflater/AbstractParser.kt +++ b/xml-inflater/src/main/java/com/itsaky/androidide/inflater/AbstractParser.kt @@ -31,6 +31,17 @@ import com.itsaky.androidide.inflater.internal.utils.unknownDrawable */ abstract class AbstractParser { + /** + * Parses the given string value representing an ID resource. + * + * @param value The string value. Usually value from attributes. + * @param def The default value. + */ + @JvmOverloads + protected open fun parseId(resName: String, value: String, def: Int = 0): Int { + return com.itsaky.androidide.inflater.internal.utils.parseId(resName, value, def) + } + /** * Parses the given string value representing a float to its actual value. * @@ -53,10 +64,10 @@ abstract class AbstractParser { protected open fun parseInteger(value: String, def: Int = 0): Int { return com.itsaky.androidide.inflater.internal.utils.parseInteger(value = value, def = def) } - + /** - * Parses the given string value representing a reference to an integer array resource to its actual - * value. Returns an empty array if the resource reference cannot be resolved. + * Parses the given string value representing a reference to an integer array resource to its + * actual value. Returns an empty array if the resource reference cannot be resolved. * * @param value The string value. Usually value from attributes. */ diff --git a/xml-inflater/src/main/java/com/itsaky/androidide/inflater/internal/adapters/RelativeLayoutAttrAdapter.kt b/xml-inflater/src/main/java/com/itsaky/androidide/inflater/internal/adapters/RelativeLayoutAttrAdapter.kt new file mode 100644 index 000000000..f6d047630 --- /dev/null +++ b/xml-inflater/src/main/java/com/itsaky/androidide/inflater/internal/adapters/RelativeLayoutAttrAdapter.kt @@ -0,0 +1,60 @@ +/* + * 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.RelativeLayout +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 [RelativeLayout]. + * + * @author Akash Yadav + */ +@AttributeAdapter(RelativeLayout::class) +class RelativeLayoutAttrAdapter : ViewGroupAttrAdapter() { + + override fun apply(view: IView, attribute: IAttribute): Boolean { + return doApply(view, attribute) { + file: LayoutFile, + _: Context, + _: LayoutParams, + _: INamespace, + name: String, + value: String -> + var applied = true + + when (name) { + "gravity" -> gravity = parseGravity(value) + "ignoreGravity" -> ignoreGravity = parseId(file.resName, value) + else -> applied = false + } + + if (!applied) { + applied = super.apply(view, attribute) + } + + return@doApply applied + } + } +}