Bump hikage-core, hikage-extension, hikage-extension-betterandroid, hikage-extension-compose, hikage-compiler, hikage-widget-androidx, hikage-widget-material version to 1.0.0

This commit is contained in:
2025-04-20 05:32:06 +08:00
parent 794c535789
commit 99abe3cd18
218 changed files with 13256 additions and 627 deletions

View File

@@ -0,0 +1,51 @@
plugins {
autowire(libs.plugins.android.library)
autowire(libs.plugins.kotlin.android)
autowire(libs.plugins.kotlin.dokka)
autowire(libs.plugins.maven.publish)
}
group = property.project.groupName
version = property.project.hikage.extension.version
android {
namespace = property.project.hikage.extension.betterandroid.namespace
compileSdk = property.project.android.compileSdk
defaultConfig {
minSdk = property.project.android.minSdk
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro")
}
buildTypes {
release {
isMinifyEnabled = false
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = "17"
freeCompilerArgs = listOf(
"-Xno-param-assertions",
"-Xno-call-assertions",
"-Xno-receiver-assertions"
)
}
}
dependencies {
implementation(projects.hikageCore)
implementation(com.highcapable.yukireflection.api)
implementation(com.highcapable.betterandroid.ui.component)
implementation(com.highcapable.betterandroid.ui.extension)
implementation(com.highcapable.betterandroid.system.extension)
implementation(androidx.core.core.ktx)
implementation(androidx.appcompat.appcompat)
testImplementation(junit.junit)
androidTestImplementation(androidx.test.ext.junit)
androidTestImplementation(androidx.test.espresso.espresso.core)
}

View File

@@ -0,0 +1,21 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

View File

@@ -0,0 +1,25 @@
package com.highcapable.hikage
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.ext.junit.runners.AndroidJUnit4
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.Assert.*
/**
* Instrumented test, which will execute on an Android device.
*
* See [testing documentation](http://d.android.com/tools/testing).
*/
@RunWith(AndroidJUnit4::class)
class ExampleInstrumentedTest {
@Test
fun useAppContext() {
// Context of the app under test.
val appContext = InstrumentationRegistry.getInstrumentation().targetContext
assertEquals("com.highcapable.hikage.test", appContext.packageName)
}
}

View File

@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest />

View File

@@ -0,0 +1,76 @@
/*
* Hikage - An Android responsive UI building tool.
* Copyright (C) 2019 HighCapable
* https://github.com/BetterAndroid/Hikage
*
* Apache License Version 2.0
*
* 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
*
* https://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.
*
* This file is created by fankes on 2025/3/10.
*/
@file:Suppress("LocalVariableName")
@file:JvmName("CommonAdapterBuilderUtils")
package com.highcapable.hikage.extension.betterandroid.ui.component.adapter
import android.view.ViewGroup
import com.highcapable.betterandroid.ui.component.adapter.CommonAdapterBuilder
import com.highcapable.hikage.core.Hikage
import com.highcapable.hikage.core.base.HikagePerformer
import com.highcapable.hikage.core.base.Hikageable
import com.highcapable.hikage.extension.betterandroid.ui.component.adapter.viewholder.HikageHolderDelegate
/**
* Create and add view holder from [Hikage.Delegate].
*
* Usage:
*
* ```kotlin
* onBindItemView(
* Hikageable = {
* TextView(
* id = "text",
* lparams = LayoutParams(widthMatchParent = true)
* ) {
* text = "Item"
* textSize = 20f
* }
* }
* ) { hikage, entity, position ->
* hikage.get<TextView>("text").text = "Item ${entity.name} of ${position + 1}"
* }
* ```
* @see CommonAdapterBuilder.onBindItemView
* @receiver [CommonAdapterBuilder]<[E]>
* @param Hikageable the performer body.
* @return [CommonAdapterBuilder]<[E]>
*/
@JvmOverloads
fun <E> CommonAdapterBuilder<E>.onBindItemView(
Hikageable: HikagePerformer<ViewGroup.LayoutParams>,
viewHolder: (hikage: Hikage, entity: E, position: Int) -> Unit = { _, _, _ -> }
) = onBindItemView(Hikageable(performer = Hikageable), viewHolder)
/**
* Create and add view holder from [Hikage.Delegate].
* @see CommonAdapterBuilder.onBindItemView
* @receiver [CommonAdapterBuilder]<[E]>
* @param delegate the delegate.
* @return [CommonAdapterBuilder]<[E]>
*/
@JvmOverloads
fun <E> CommonAdapterBuilder<E>.onBindItemView(
delegate: Hikage.Delegate<*>,
viewHolder: (hikage: Hikage, entity: E, position: Int) -> Unit = { _, _, _ -> }
) = onBindItemView(HikageHolderDelegate(delegate), viewHolder)

View File

@@ -0,0 +1,87 @@
/*
* Hikage - An Android responsive UI building tool.
* Copyright (C) 2019 HighCapable
* https://github.com/BetterAndroid/Hikage
*
* Apache License Version 2.0
*
* 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
*
* https://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.
*
* This file is created by fankes on 2025/3/10.
*/
@file:Suppress("LocalVariableName")
@file:JvmName("PagerAdapterBuilderUtils")
package com.highcapable.hikage.extension.betterandroid.ui.component.adapter
import android.view.ViewGroup
import com.highcapable.betterandroid.ui.component.adapter.PagerAdapterBuilder
import com.highcapable.hikage.core.Hikage
import com.highcapable.hikage.core.base.HikagePerformer
import com.highcapable.hikage.core.base.Hikageable
import com.highcapable.hikage.extension.betterandroid.ui.component.adapter.viewholder.HikageHolderDelegate
/**
* Create and add view holder from [Hikage.Delegate].
*
* Usage:
*
* ```kotlin
* onBindPageView(
* Hikageable = {
* LinearLayout(
* id = "container",
* lparams = LayoutParams(matchParent = true),
* init = {
* orientation = LinearLayout.VERTICAL
* gravity = Gravity.CENTER
* }
* ) {
* TextView(
* id = "text",
* lparams = LayoutParams {
* gravity = Gravity.CENTER
* }
* ) {
* text = "Page"
* textSize = 20f
* }
* }
* }
* ) { hikage, entity, position ->
* hikage.get<TextView>("text").text = "Page ${entity.name} of ${position + 1}"
* }
* ```
* @see PagerAdapterBuilder.onBindPageView
* @receiver [PagerAdapterBuilder]<[E]>
* @param Hikageable the performer body.
* @return [PagerAdapterBuilder]<[E]>
*/
@JvmOverloads
fun <E> PagerAdapterBuilder<E>.onBindPageView(
Hikageable: HikagePerformer<ViewGroup.LayoutParams>,
viewHolder: (hikage: Hikage, entity: E, position: Int) -> Unit = { _, _, _ -> }
) = onBindPageView(Hikageable(performer = Hikageable), viewHolder)
/**
* Create and add view holder from [Hikage.Delegate].
* @see PagerAdapterBuilder.onBindPageView
* @receiver [PagerAdapterBuilder]<[E]>
* @param delegate the delegate.
* @return [PagerAdapterBuilder]<[E]>
*/
@JvmOverloads
fun <E> PagerAdapterBuilder<E>.onBindPageView(
delegate: Hikage.Delegate<*>,
viewHolder: (hikage: Hikage, entity: E, position: Int) -> Unit = { _, _, _ -> }
) = onBindPageView(HikageHolderDelegate(delegate), viewHolder)

View File

@@ -0,0 +1,163 @@
/*
* Hikage - An Android responsive UI building tool.
* Copyright (C) 2019 HighCapable
* https://github.com/BetterAndroid/Hikage
*
* Apache License Version 2.0
*
* 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
*
* https://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.
*
* This file is created by fankes on 2025/3/10.
*/
@file:Suppress("LocalVariableName")
@file:JvmName("RecyclerAdapterBuilderUtils")
package com.highcapable.hikage.extension.betterandroid.ui.component.adapter
import android.view.ViewGroup
import com.highcapable.betterandroid.ui.component.adapter.RecyclerAdapterBuilder
import com.highcapable.betterandroid.ui.component.adapter.entity.AdapterPosition
import com.highcapable.hikage.core.Hikage
import com.highcapable.hikage.core.base.HikagePerformer
import com.highcapable.hikage.core.base.Hikageable
import com.highcapable.hikage.extension.betterandroid.ui.component.adapter.viewholder.HikageHolderDelegate
/**
* Create and add view holder from [Hikage.Delegate] for a header view.
*
* Usage:
*
* ```kotlin
* onBindHeaderView(
* Hikageable = {
* TextView(
* id = "text",
* lparams = LayoutParams(widthMatchParent = true)
* ) {
* text = "Header"
* textSize = 20f
* }
* }
* ) { hikage ->
* hikage.get<TextView>("text").text = "Header with redefined text"
* }
* ```
* @see RecyclerAdapterBuilder.onBindHeaderView
* @param Hikageable the performer body.
* @return [RecyclerAdapterBuilder]<[E]>
*/
@JvmOverloads
fun <E> RecyclerAdapterBuilder<E>.onBindHeaderView(
Hikageable: HikagePerformer<ViewGroup.LayoutParams>,
viewHolder: (hikage: Hikage) -> Unit = {}
) = onBindHeaderView(Hikageable(performer = Hikageable), viewHolder)
/**
* Create and add view holder from [Hikage.Delegate] for a header view.
* @see RecyclerAdapterBuilder.onBindHeaderView
* @param delegate the delegate.
* @return [RecyclerAdapterBuilder]<[E]>
*/
@JvmOverloads
fun <E> RecyclerAdapterBuilder<E>.onBindHeaderView(
delegate: Hikage.Delegate<*>,
viewHolder: (hikage: Hikage) -> Unit = {}
) = onBindHeaderView(HikageHolderDelegate(delegate), viewHolder)
/**
* Create and add view holder from [Hikage.Delegate] for a footer view.
*
* Usage:
*
* ```kotlin
* onBindFooterView(
* Hikageable = {
* TextView(
* id = "text",
* lparams = LayoutParams(widthMatchParent = true)
* ) {
* text = "Footer"
* textSize = 20f
* }
* }
* ) { hikage ->
* hikage.get<TextView>("text").text = "Footer with redefined text"
* }
* ```
* @see RecyclerAdapterBuilder.onBindFooterView
* @param Hikageable the performer body.
* @return [RecyclerAdapterBuilder]<[E]>
*/
@JvmOverloads
fun <E> RecyclerAdapterBuilder<E>.onBindFooterView(
Hikageable: HikagePerformer<ViewGroup.LayoutParams>,
viewHolder: (hikage: Hikage) -> Unit = {}
) = onBindFooterView(Hikageable(performer = Hikageable), viewHolder)
/**
* Create and add view holder from [Hikage.Delegate] for a footer view.
* @see RecyclerAdapterBuilder.onBindFooterView
* @param delegate the delegate.
* @return [RecyclerAdapterBuilder]<[E]>
*/
@JvmOverloads
fun <E> RecyclerAdapterBuilder<E>.onBindFooterView(
delegate: Hikage.Delegate<*>,
viewHolder: (hikage: Hikage) -> Unit = {}
) = onBindFooterView(HikageHolderDelegate(delegate), viewHolder)
/**
* Create and add view holder from [Hikage.Delegate].
*
* Usage:
*
* ```kotlin
* onBindItemView(
* Hikageable = {
* TextView(
* id = "text",
* lparams = LayoutParams(widthMatchParent = true)
* ) {
* text = "Item"
* textSize = 20f
* }
* }
* ) { hikage, entity, position ->
* hikage.get<TextView>("text").text = "Item ${entity.name} of ${position.value + 1}"
* }
* ```
* @see RecyclerAdapterBuilder.onBindItemView
* @receiver [RecyclerAdapterBuilder]<[E]>
* @param Hikageable the performer body.
* @return [RecyclerAdapterBuilder]<[E]>
*/
@JvmOverloads
fun <E> RecyclerAdapterBuilder<E>.onBindItemView(
Hikageable: HikagePerformer<ViewGroup.LayoutParams>,
viewType: Int = RecyclerAdapterBuilder.DEFAULT_VIEW_TYPE,
viewHolder: (hikage: Hikage, entity: E, position: AdapterPosition) -> Unit = { _, _, _ -> }
) = onBindItemView(Hikageable(performer = Hikageable), viewType, viewHolder)
/**
* Create and add view holder from [Hikage.Delegate].
* @see RecyclerAdapterBuilder.onBindItemView
* @receiver [RecyclerAdapterBuilder]<[E]>
* @param delegate the delegate.
* @return [RecyclerAdapterBuilder]<[E]>
*/
@JvmOverloads
fun <E> RecyclerAdapterBuilder<E>.onBindItemView(
delegate: Hikage.Delegate<*>,
viewType: Int = RecyclerAdapterBuilder.DEFAULT_VIEW_TYPE,
viewHolder: (hikage: Hikage, entity: E, position: AdapterPosition) -> Unit = { _, _, _ -> }
) = onBindItemView(HikageHolderDelegate(delegate), viewType, viewHolder)

View File

@@ -0,0 +1,37 @@
/*
* Hikage - An Android responsive UI building tool.
* Copyright (C) 2019 HighCapable
* https://github.com/BetterAndroid/Hikage
*
* Apache License Version 2.0
*
* 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
*
* https://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.
*
* This file is created by fankes on 2025/3/10.
*/
package com.highcapable.hikage.extension.betterandroid.ui.component.adapter.viewholder
import android.content.Context
import android.view.ViewGroup
import com.highcapable.betterandroid.ui.component.adapter.viewholder.delegate.base.ViewHolderDelegate
import com.highcapable.hikage.core.Hikage
/**
* [Hikage.Delegate] type view holder delegate.
* @param delegate the [Hikage.Delegate] instance.
*/
class HikageHolderDelegate internal constructor(private val delegate: Hikage.Delegate<*>) : ViewHolderDelegate<Hikage>() {
override fun create(context: Context, parent: ViewGroup?) = delegate.create(context, parent, attachToParent = false)
override fun getView(instance: Hikage) = instance.root
}

View File

@@ -0,0 +1,18 @@
package com.highcapable.hikage
import org.junit.Test
import org.junit.Assert.*
/**
* Example local unit test, which will execute on the development machine (host).
*
* See [testing documentation](http://d.android.com/tools/testing).
*/
class ExampleUnitTest {
@Test
fun addition_isCorrect() {
assertEquals(4, 2 + 2)
}
}