From d5626fc29ddff0fcc86c91f4ab673773abd564ab Mon Sep 17 00:00:00 2001 From: Carlos Ballesteros Velasco Date: Tue, 26 Jan 2021 23:45:37 +0100 Subject: [PATCH] Add android integration sample (#38) * Added Android integration sample https://github.com/korlibs/korge-next/pull/117 Thanks @pablocaviglia-baires ! * com.korge -> org.korge --- build.gradle.kts | 1 - integrations/android/.gitignore | 10 + integrations/android/app/.gitignore | 1 + integrations/android/app/build.gradle | 61 ++++++ integrations/android/app/proguard-rules.pro | 21 ++ .../android/app/src/main/AndroidManifest.xml | 18 ++ .../android/app/src/main/assets/korge.png | Bin 0 -> 14015 bytes .../korge/korgeviewexample/CustomModule.kt | 28 +++ .../org/korge/korgeviewexample/CustomScene.kt | 45 +++++ .../korge/korgeviewexample/MainActivity.kt | 57 ++++++ .../app/src/main/res/layout/activity_main.xml | 38 ++++ integrations/android/build.gradle | 32 +++ integrations/android/gradle.properties | 21 ++ .../android/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59203 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 + integrations/android/gradlew | 185 ++++++++++++++++++ integrations/android/gradlew.bat | 89 +++++++++ integrations/android/settings.gradle | 2 + sample/length/src/commonMain/kotlin/main.kt | 16 +- 19 files changed, 622 insertions(+), 9 deletions(-) create mode 100644 integrations/android/.gitignore create mode 100644 integrations/android/app/.gitignore create mode 100644 integrations/android/app/build.gradle create mode 100644 integrations/android/app/proguard-rules.pro create mode 100644 integrations/android/app/src/main/AndroidManifest.xml create mode 100644 integrations/android/app/src/main/assets/korge.png create mode 100644 integrations/android/app/src/main/java/org/korge/korgeviewexample/CustomModule.kt create mode 100644 integrations/android/app/src/main/java/org/korge/korgeviewexample/CustomScene.kt create mode 100644 integrations/android/app/src/main/java/org/korge/korgeviewexample/MainActivity.kt create mode 100644 integrations/android/app/src/main/res/layout/activity_main.xml create mode 100644 integrations/android/build.gradle create mode 100644 integrations/android/gradle.properties create mode 100644 integrations/android/gradle/wrapper/gradle-wrapper.jar create mode 100644 integrations/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 integrations/android/gradlew create mode 100644 integrations/android/gradlew.bat create mode 100644 integrations/android/settings.gradle diff --git a/build.gradle.kts b/build.gradle.kts index 1d1bf3d..a3f39d1 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -3,7 +3,6 @@ buildscript { repositories { mavenLocal() - maven { url = uri("https://dl.bintray.com/korlibs/korlibs") } maven { url = uri("https://plugins.gradle.org/m2/") } mavenCentral() google() diff --git a/integrations/android/.gitignore b/integrations/android/.gitignore new file mode 100644 index 0000000..f533313 --- /dev/null +++ b/integrations/android/.gitignore @@ -0,0 +1,10 @@ +*.iml +/.gradle +/.idea +/local.properties +/build +/captures +.DS_Store +.externalNativeBuild +.cxx +local.properties diff --git a/integrations/android/app/.gitignore b/integrations/android/app/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/integrations/android/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/integrations/android/app/build.gradle b/integrations/android/app/build.gradle new file mode 100644 index 0000000..60f023e --- /dev/null +++ b/integrations/android/app/build.gradle @@ -0,0 +1,61 @@ +plugins { + id 'com.android.application' + id 'kotlin-android' +} + +android { + compileSdkVersion 30 + buildToolsVersion "30.0.2" + + defaultConfig { + applicationId "org.korge.korgeviewexample" + minSdkVersion 21 + targetSdkVersion 30 + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + kotlinOptions { + jvmTarget = '1.8' + } + buildFeatures { + viewBinding true + } + sourceSets { + main { + //assets.srcDirs += [file("src/main/assets")] + } + } +} + +dependencies { + + //implementation (name:'KorgeMPExample-debug', ext:'aar') + implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" + implementation 'androidx.core:core-ktx:1.3.2' + implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'com.google.android.material:material:1.2.1' + implementation 'androidx.constraintlayout:constraintlayout:2.0.4' + + // korge + api "com.soywiz.korlibs.korge2:korge-android:$korge_version" + api "com.soywiz.korlibs.korgw:korgw-android:$korge_version" + api "com.soywiz.korlibs.korvi:korvi-android:$korge_version" + api "com.soywiz.korlibs.korim:korim-android:$korge_version" + api "com.soywiz.korlibs.korau:korau-android:$korge_version" + api "com.soywiz.korlibs.kds:kds-android:$korge_version" + api "com.soywiz.korlibs.korma:korma-android:$korge_version" + +} diff --git a/integrations/android/app/proguard-rules.pro b/integrations/android/app/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/integrations/android/app/proguard-rules.pro @@ -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 \ No newline at end of file diff --git a/integrations/android/app/src/main/AndroidManifest.xml b/integrations/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..8a872b3 --- /dev/null +++ b/integrations/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + diff --git a/integrations/android/app/src/main/assets/korge.png b/integrations/android/app/src/main/assets/korge.png new file mode 100644 index 0000000000000000000000000000000000000000..0526e1d1470a3c7c09588e9328e3489f8af32233 GIT binary patch literal 14015 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 jqbt!ax&i#JwB{t(>|?3qNX+;julCwFSU Unit) : Module() { + + companion object { + const val DEFAULT_WIDTH = 1920 + const val DEFAULT_HEIGHT = 1080 + } + + override val size: SizeInt + get() = SizeInt.invoke(width, height) + + override val windowSize: SizeInt + get() = SizeInt.invoke(width, height) + + override val mainScene: KClass = CustomScene::class + + override suspend fun AsyncInjector.configure() { + mapPrototype { CustomScene(width, height, callback) } + } +} diff --git a/integrations/android/app/src/main/java/org/korge/korgeviewexample/CustomScene.kt b/integrations/android/app/src/main/java/org/korge/korgeviewexample/CustomScene.kt new file mode 100644 index 0000000..6c16e95 --- /dev/null +++ b/integrations/android/app/src/main/java/org/korge/korgeviewexample/CustomScene.kt @@ -0,0 +1,45 @@ +package org.korge.korgeviewexample + +import com.soywiz.klock.seconds +import com.soywiz.korge.animate.animate +import com.soywiz.korge.input.onClick +import com.soywiz.korge.resources.resourceBitmap +import com.soywiz.korge.scene.Scene +import com.soywiz.korge.view.* +import com.soywiz.korim.color.Colors +import com.soywiz.korio.async.launchImmediately +import com.soywiz.korio.resources.ResourcesContainer +import com.soywiz.korma.geom.Angle +import com.soywiz.korma.interpolation.Easing + +class CustomScene(private val widthParam: Int, private val heightParam: Int, val callback: () -> Unit) : Scene() { + + val ResourcesContainer.korge_png by resourceBitmap("korge.png") + + override suspend fun Container.sceneInit() { + + solidRect(widthParam, heightParam, Colors.GREEN) { + position(0, 0) + } + + image(korge_png) { + + anchor(.5, .5) + position(widthParam / 2, heightParam / 2) + onClick { + callback() + } + + launchImmediately { + animate(completeOnCancel = true) { + parallel { + sequence(looped = true) { + rotateTo(Angle.Companion.fromDegrees(45), 1.5.seconds, Easing.EASE_IN_OUT_QUAD) + rotateTo(Angle.Companion.fromDegrees(-45), 1.5.seconds, Easing.EASE_IN_OUT_QUAD) + } + } + } + } + } + } +} diff --git a/integrations/android/app/src/main/java/org/korge/korgeviewexample/MainActivity.kt b/integrations/android/app/src/main/java/org/korge/korgeviewexample/MainActivity.kt new file mode 100644 index 0000000..0188051 --- /dev/null +++ b/integrations/android/app/src/main/java/org/korge/korgeviewexample/MainActivity.kt @@ -0,0 +1,57 @@ +package org.korge.korgeviewexample + +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import org.korge.korgeviewexample.databinding.ActivityMainBinding +import com.soywiz.korge.android.KorgeAndroidView + +class MainActivity : AppCompatActivity() { + + private lateinit var korgeAndroidView: KorgeAndroidView + private lateinit var binding: ActivityMainBinding + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + binding = ActivityMainBinding.inflate(layoutInflater) + val view = binding.root + setContentView(view) + + korgeAndroidView = KorgeAndroidView(this) + binding.toolContainer.addView(korgeAndroidView) + + binding.loadViewButton.setOnClickListener { + binding.loadViewButton.isEnabled = false + binding.unloadViewButton.isEnabled = true + loadToolModule() + } + + binding.unloadViewButton.setOnClickListener { + binding.loadViewButton.isEnabled = true + binding.unloadViewButton.isEnabled = false + unloadToolModule() + } + } + + override fun onResume() { + super.onResume() + binding.loadViewButton.isEnabled = true + binding.unloadViewButton.isEnabled = false + + } + + override fun onPause() { + super.onPause() + unloadToolModule() + } + + private fun loadToolModule() { + korgeAndroidView.loadModule(CustomModule(width = 1920, height = 1080, callback = { + println("Callback from android app") + })) + } + + private fun unloadToolModule() { + korgeAndroidView.unloadModule() + } +} diff --git a/integrations/android/app/src/main/res/layout/activity_main.xml b/integrations/android/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..800ca41 --- /dev/null +++ b/integrations/android/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,38 @@ + + + +