diff --git a/build.gradle.kts b/build.gradle.kts index 7b776e9..5535a42 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,4 +2,5 @@ plugins { autowire(libs.plugins.android.application) apply false autowire(libs.plugins.kotlin.jvm) apply false autowire(libs.plugins.kotlin.android) apply false + autowire(libs.plugins.jetbrains.compose) apply false } \ No newline at end of file diff --git a/gradle/sweet-dependency/sweet-dependency-config.yaml b/gradle/sweet-dependency/sweet-dependency-config.yaml index d808eee..1bfb47d 100644 --- a/gradle/sweet-dependency/sweet-dependency-config.yaml +++ b/gradle/sweet-dependency/sweet-dependency-config.yaml @@ -16,7 +16,7 @@ plugins: alias: kotlin-android version-ref: kotlin-jvm org.jetbrains.compose: - alias: kotlin-compose + alias: jetbrains-compose version: 1.5.1 com.android.application: alias: android-application @@ -26,9 +26,21 @@ plugins: version: 0.25.3 libraries: - org.jetbrains.compose.material3: - material3-desktop: - version: 1.5.1 + androidx.compose: + compose-bom: + version: 2023.09.02 + androidx.compose.foundation: + foundation: + version: + androidx.compose.ui: + ui: + version: + androidx.compose.material3: + material3: + version: + androidx.activity: + activity-compose: + version: 1.7.2 androidx.core: core-ktx: version: 1.10.0 @@ -38,9 +50,6 @@ libraries: com.google.android.material: material: version: 1.8.0 - androidx.constraintlayout: - constraintlayout: - version: 2.1.4 androidx.test.ext: junit: version: 1.1.5 diff --git a/samples/demo-android/build.gradle.kts b/samples/demo-android/build.gradle.kts index 2aa4d86..0bb02d1 100644 --- a/samples/demo-android/build.gradle.kts +++ b/samples/demo-android/build.gradle.kts @@ -33,19 +33,26 @@ android { "-Xno-receiver-assertions" ) } + composeOptions { + kotlinCompilerExtensionVersion = "1.5.3" + } buildFeatures { buildConfig = true - viewBinding = true + compose = true } lint { checkReleaseBuilds = false } } dependencies { implementation(projects.yukireflectionCore) + implementation(platform(androidx.compose.compose.bom)) + implementation(androidx.compose.foundation.foundation) + implementation(androidx.compose.ui.ui) + implementation(androidx.compose.material3.material3) + implementation(androidx.activity.activity.compose) implementation(androidx.core.core.ktx) implementation(androidx.appcompat.appcompat) implementation(com.google.android.material.material) - implementation(androidx.constraintlayout.constraintlayout) testImplementation(junit.junit) androidTestImplementation(androidx.test.ext.junit) androidTestImplementation(androidx.test.espresso.espresso.core) diff --git a/samples/demo-android/src/main/java/com/highcapable/yukireflection/demo_app/ui/MainActivity.kt b/samples/demo-android/src/main/java/com/highcapable/yukireflection/demo_app/ui/MainActivity.kt index e48798f..668fe97 100644 --- a/samples/demo-android/src/main/java/com/highcapable/yukireflection/demo_app/ui/MainActivity.kt +++ b/samples/demo-android/src/main/java/com/highcapable/yukireflection/demo_app/ui/MainActivity.kt @@ -25,15 +25,33 @@ * * This file is created by fankes on 2023/1/21. */ -@file:Suppress("SetTextI18n", "UsePropertyAccessSyntax") +@file:Suppress("UsePropertyAccessSyntax") package com.highcapable.yukireflection.demo_app.ui import android.os.Bundle +import androidx.activity.compose.setContent import androidx.appcompat.app.AppCompatActivity +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Button +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.alpha +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import androidx.core.content.ContextCompat import com.highcapable.yukireflection.YukiReflection import com.highcapable.yukireflection.demo_app.BuildConfig -import com.highcapable.yukireflection.demo_app.databinding.ActivityMainBinding +import com.highcapable.yukireflection.demo_app.R import com.highcapable.yukireflection.demo_app.test.Main import com.highcapable.yukireflection.factory.buildOf import com.highcapable.yukireflection.factory.classOf @@ -47,37 +65,85 @@ class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) YukiReflection.configs { isDebug = BuildConfig.DEBUG } - ActivityMainBinding.inflate(layoutInflater).apply { - setContentView(root) - yukiReflectionVersionText.text = "${YukiReflection.TAG} Version: ${YukiReflection.VERSION}" - testObjectDirectlyButton.setOnClickListener { - tipText.text = Main("I am directly call of new object").getContent() - } - testObjectReflectionButton.setOnClickListener { - tipText.text = - classOf
().buildOf("I am reflection call of new object") { param(StringClass) } - ?.current() - ?.method { - name = "getContent" - emptyParam() - }?.string() ?: "" - } - testStaticDirectlyButton.setOnClickListener { - tipText.text = Main.getStaticContent() - } - testStaticReflectionButton.setOnClickListener { - tipText.text = classOf
().method { - name = "getStaticContent" - modifiers { isStatic } - }.get().string() - } - testModifyStaticReflectionButton.setOnClickListener { - classOf
().field { - name = "staticContent" - modifiers { isStatic } - }.get().set("I am static! Modified by reflection") - tipText.text = "Field is modified success" + setContent { + MaterialTheme(colorScheme = MaterialTheme.colorScheme.copy(primary = Color(ContextCompat.getColor(this, R.color.yuki_theme_color)))) { + MainLayout() } } } + + @Composable + fun MainLayout() { + val currentVersion = "${YukiReflection.TAG} Version: ${YukiReflection.VERSION}" + val operationState = remember { mutableStateOf("Waiting for your operation") } + Column( + modifier = Modifier.fillMaxSize(), + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally + ) { + Text( + text = "Using functions below to test", + fontSize = 18.sp, + modifier = Modifier.padding(bottom = 15.dp) + ) + Text( + text = operationState.value, + fontSize = 18.sp, + modifier = Modifier.padding(bottom = 35.dp) + ) + Button( + onClick = { operationState.value = Main("I am directly call of new object").getContent() }, + modifier = Modifier.padding(bottom = 15.dp) + ) { + Text(text = "Create an Object and Call Directly") + } + Button( + onClick = { + operationState.value = + classOf
().buildOf("I am reflection call of new object") { param(StringClass) } + ?.current() + ?.method { + name = "getContent" + emptyParam() + }?.string() ?: "" + }, + modifier = Modifier.padding(bottom = 15.dp) + ) { + Text(text = "Create an Object and Call Reflection") + } + Button( + onClick = { operationState.value = Main.getStaticContent() }, + modifier = Modifier.padding(bottom = 15.dp) + ) { + Text(text = "Get Static and Call Directly") + } + Button( + onClick = { + operationState.value = classOf
().method { + name = "getStaticContent" + modifiers { isStatic } + }.get().string() + }, + modifier = Modifier.padding(bottom = 15.dp) + ) { + Text(text = "Get Static and Call Reflection") + } + Button( + onClick = { + classOf
().field { + name = "staticContent" + modifiers { isStatic } + }.get().set("I am static! Modified by reflection") + operationState.value = "Field is modified success" + } + ) { + Text(text = "Modified Static Field Using Reflection") + } + Text( + text = currentVersion, + fontSize = 15.sp, + modifier = Modifier.padding(top = 35.dp).alpha(0.55f) + ) + } + } } \ No newline at end of file diff --git a/samples/demo-android/src/main/res/layout/activity_main.xml b/samples/demo-android/src/main/res/layout/activity_main.xml deleted file mode 100644 index 18bcbf6..0000000 --- a/samples/demo-android/src/main/res/layout/activity_main.xml +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - -