mirror of
https://gitee.com/zhangsken/AndroidIDE.git
synced 2026-10-16 07:49:44 +08:00
fix(xml-inflater,uidesigner): exclude unsupported view adapters from adapters index
This commit is contained in:
@@ -27,6 +27,7 @@ dependencies {
|
||||
|
||||
implementation(projects.annotations)
|
||||
|
||||
implementation(libs.androidx.annotation)
|
||||
implementation(libs.common.javapoet)
|
||||
implementation(libs.common.ksp)
|
||||
}
|
||||
|
||||
+18
-4
@@ -17,6 +17,7 @@
|
||||
|
||||
package com.itsaky.androidide.annotations.ksp.inflater
|
||||
|
||||
import androidx.annotation.RequiresApi
|
||||
import com.google.devtools.ksp.KspExperimental
|
||||
import com.google.devtools.ksp.getAnnotationsByType
|
||||
import com.google.devtools.ksp.isAnnotationPresent
|
||||
@@ -187,6 +188,11 @@ class ViewAdapterIndexGenerator(private val logger: KSPLogger) {
|
||||
result
|
||||
}
|
||||
} else null
|
||||
|
||||
val requiresApi =
|
||||
if (sym.isAnnotationPresent(RequiresApi::class))
|
||||
sym.getAnnotationsByType(RequiresApi::class).iterator().next()
|
||||
else null
|
||||
|
||||
val viewName = getViewName(viewAdapter)
|
||||
val moduleNs = getModuleNs(viewAdapter)
|
||||
@@ -195,6 +201,12 @@ class ViewAdapterIndexGenerator(private val logger: KSPLogger) {
|
||||
val viewTypeName =
|
||||
ClassName.get(viewName.substringBeforeLast('.'), viewName.substringAfterLast('.'))
|
||||
|
||||
requiresApi?.let { annotation ->
|
||||
val api = if (annotation.value == 1) annotation.api else annotation.value
|
||||
val androidBuild = ClassName.get("android.os", "Build")
|
||||
block.beginControlFlow("if(\$T.VERSION.SDK_INT >= \$L)", androidBuild, api)
|
||||
}
|
||||
|
||||
block.addStatement(
|
||||
"final var adapter = new \$T()",
|
||||
ParameterizedTypeName.get(adapterTypeName, viewTypeName)
|
||||
@@ -213,6 +225,8 @@ class ViewAdapterIndexGenerator(private val logger: KSPLogger) {
|
||||
)
|
||||
}
|
||||
|
||||
requiresApi?.let { block.endControlFlow() }
|
||||
|
||||
indexAddStatements.add("{\n")
|
||||
indexAddStatements.indent()
|
||||
indexAddStatements.add(block.build())
|
||||
@@ -238,7 +252,7 @@ class ViewAdapterIndexGenerator(private val logger: KSPLogger) {
|
||||
)
|
||||
|
||||
indexClassBuilder.addStaticBlock(indexAddStatements.build())
|
||||
|
||||
|
||||
OutputStreamWriter(out).use {
|
||||
val file = JavaFile.builder(INDEX_PACKAGE_NAME, indexClassBuilder.build())
|
||||
file.build().writeTo(it)
|
||||
@@ -256,11 +270,11 @@ class ViewAdapterIndexGenerator(private val logger: KSPLogger) {
|
||||
}
|
||||
|
||||
private fun getViewType(viewAdapter: KSAnnotation) =
|
||||
(getViewAdapterArg(viewAdapter, "forView") as KSType)
|
||||
(getAnnotationArg(viewAdapter, "forView") as KSType)
|
||||
|
||||
private fun getModuleNs(viewAdapter: KSAnnotation) =
|
||||
(getViewAdapterArg(viewAdapter, "moduleNamespace") as String)
|
||||
(getAnnotationArg(viewAdapter, "moduleNamespace") as String)
|
||||
|
||||
private fun getViewAdapterArg(viewAdapter: KSAnnotation, arg: String) =
|
||||
private fun getAnnotationArg(viewAdapter: KSAnnotation, arg: String) =
|
||||
viewAdapter.arguments.first { it.name!!.asString() == arg }.value
|
||||
}
|
||||
|
||||
+4
@@ -20,7 +20,10 @@
|
||||
package com.itsaky.androidide.inflater.internal.adapters
|
||||
|
||||
import android.graphics.BlendMode
|
||||
import android.os.Build
|
||||
import android.os.Build.VERSION_CODES
|
||||
import android.widget.AnalogClock
|
||||
import androidx.annotation.RequiresApi
|
||||
import com.itsaky.androidide.annotations.uidesigner.IncludeInDesigner
|
||||
import com.itsaky.androidide.annotations.uidesigner.IncludeInDesigner.Group.WIDGETS
|
||||
import com.itsaky.androidide.inflater.AttributeHandlerScope
|
||||
@@ -35,6 +38,7 @@ import com.itsaky.androidide.resources.R.string
|
||||
*/
|
||||
@com.itsaky.androidide.annotations.inflater.ViewAdapter(AnalogClock::class)
|
||||
@IncludeInDesigner(group = WIDGETS)
|
||||
@RequiresApi(VERSION_CODES.S)
|
||||
open class AnalogClockAdapter<T : AnalogClock> : ViewAdapter<T>() {
|
||||
|
||||
override fun createAttrHandlers(create: (String, AttributeHandlerScope<T>.() -> Unit) -> Unit) {
|
||||
|
||||
+1
-1
@@ -36,7 +36,7 @@ import com.itsaky.androidide.resources.R.string
|
||||
open class ChronometerAdapter<T : Chronometer> : TextViewAdapter<T>() {
|
||||
override fun createAttrHandlers(create: (String, AttributeHandlerScope<T>.() -> Unit) -> Unit) {
|
||||
super.createAttrHandlers(create)
|
||||
create("countDown") { view.setCountDown(parseBoolean(value)) }
|
||||
create("countDown") { view.isCountDown = parseBoolean(value) }
|
||||
create("format") { view.format = parseString(value) }
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -31,7 +31,7 @@ import com.itsaky.androidide.resources.R.string
|
||||
*/
|
||||
@com.itsaky.androidide.annotations.inflater.ViewAdapter(Space::class)
|
||||
@IncludeInDesigner(group = WIDGETS)
|
||||
open class SpaceAdapter : ViewAdapter<Space>() {
|
||||
open class SpaceAdapter<@Suppress("FINAL_UPPER_BOUND") T : Space> : ViewAdapter<T>() {
|
||||
override fun createUiWidgets(): List<UiWidget> {
|
||||
return listOf(UiWidget(Space::class.java, string.widget_space, drawable.ic_widget_space))
|
||||
}
|
||||
|
||||
-1
@@ -29,7 +29,6 @@ import com.itsaky.androidide.annotations.uidesigner.IncludeInDesigner.Group.WIDG
|
||||
import com.itsaky.androidide.inflater.AttributeHandlerScope
|
||||
import com.itsaky.androidide.inflater.IView
|
||||
import com.itsaky.androidide.inflater.models.UiWidget
|
||||
import com.itsaky.androidide.inflater.utils.newAttribute
|
||||
import com.itsaky.androidide.resources.R
|
||||
import java.util.regex.Pattern
|
||||
|
||||
|
||||
+1
-1
@@ -36,7 +36,7 @@ import com.itsaky.androidide.resources.R.string
|
||||
open class ViewFlipperAdapter<T : ViewFlipper> : ViewAnimatorAdapter<T>() {
|
||||
override fun createAttrHandlers(create: (String, AttributeHandlerScope<T>.() -> Unit) -> Unit) {
|
||||
super.createAttrHandlers(create)
|
||||
create("autoStart") { view.setAutoStart(parseBoolean(value)) }
|
||||
create("autoStart") { view.isAutoStart = parseBoolean(value) }
|
||||
create("flipInterval") { view.flipInterval = parseInteger(value) }
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user