diff --git a/samples/calculator/README.md b/samples/calculator/README.md index d21b774dd12..77ff145d6e4 100644 --- a/samples/calculator/README.md +++ b/samples/calculator/README.md @@ -1,9 +1,15 @@ -# iOS calculator sample +# Calculator sample -This example shows how to use Kotlin library compiled to framework from -an existing iOS project (e.g. written in Swift or Objective-C). +This example shows how to use Kotlin library (located in [`src`](src/)) in different environments. +Currently for +* iOS (see [calculator](calculator/)) +* plain JVM (cli) (see [jvmCliApp](jvmCliApp/)) +* Android (see [androidApp](androidApp/)) -To build and run the sample do the following: +## iOS +The iOS project compile the library to a framework. The framework can easily included in an existing iOS project (e.g. written in Swift or Objective-C) + +To build and run the iOS sample do the following: 1. Open `samples/calculator/calculator.xcodeproj` with Xcode. 2. Open the project's target through project navigator, go to tab 'General'. @@ -13,7 +19,7 @@ To build and run the sample do the following: See the [Xcode documentation](https://developer.apple.com/library/content/documentation/IDEs/Conceptual/AppDistributionGuide/ConfiguringYourApp/ConfiguringYourApp.html#//apple_ref/doc/uid/TP40012582-CH28-SW2) for more info. -3. Now build and run the application on a connected iPhone with Xcode. +3. Now build and run the application with Xcode. The sample consists of: @@ -22,17 +28,18 @@ The sample consists of: 2. Kotlin library source code and build script. It is built into Objective-C framework by invoking Gradle from custom "Run Script" build phase, and this framework is imported into the Xcode project. - + ## Using the same code with Kotlin/JVM - The library can also be compiled to a `.jar` by Kotlin/JVM compiler with Gradle. Just run from the [sample root dir](../): ``` ./gradlew calculator:jar ``` This will generate a `calculator.jar` in `build/libs/`. + +## Plain JVM +The plain jvm sample (written in Kotlin/JVM) will use the library as a gradle dependency. -There is also simple Kotlin/JVM CLI app available in `jvmCliApp` subdirectory. To build and run it, use ``` ./gradlew calculator:jvmCliApp:run @@ -44,3 +51,11 @@ To build the distribution: ``` (the result will be available as `jvmCliApp/build/distributions/KotlinCalculator.zip`) + +## Android App +The Android App uses - similar to the plain JVM sample - the library as a gradle dependency. + +To build and run the Android sample do the following: + +1. Open `samples/` in Android Studio +2. Now build and run the androidApp application \ No newline at end of file diff --git a/samples/calculator/androidApp/build.gradle b/samples/calculator/androidApp/build.gradle new file mode 100644 index 00000000000..b091d60dc52 --- /dev/null +++ b/samples/calculator/androidApp/build.gradle @@ -0,0 +1,25 @@ +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' + +android { + compileSdkVersion 27 + defaultConfig { + applicationId "org.konan.calculator" + minSdkVersion 21 + targetSdkVersion 27 + versionCode 1 + versionName "1.0.0" + } +} + +repositories { + google() + mavenCentral() +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" + implementation project.parent + + implementation "com.android.support:appcompat-v7:27.0.2" +} diff --git a/samples/calculator/androidApp/src/main/AndroidManifest.xml b/samples/calculator/androidApp/src/main/AndroidManifest.xml new file mode 100644 index 00000000000..4388566755e --- /dev/null +++ b/samples/calculator/androidApp/src/main/AndroidManifest.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + diff --git a/samples/calculator/androidApp/src/main/kotlin/org/konan/calculator/MainActivity.kt b/samples/calculator/androidApp/src/main/kotlin/org/konan/calculator/MainActivity.kt new file mode 100644 index 00000000000..14f1b8f6cfa --- /dev/null +++ b/samples/calculator/androidApp/src/main/kotlin/org/konan/calculator/MainActivity.kt @@ -0,0 +1,28 @@ +package org.konan.calculator + +import android.os.Bundle +import android.support.v7.app.AppCompatActivity +import android.widget.EditText +import android.widget.TextView +import org.konan.arithmeticparser.parseAndCompute + +class MainActivity : AppCompatActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_main) + + val resultView = findViewById(R.id.computed_result) + + val input = findViewById(R.id.input) + input.setOnEditorActionListener { input, _, _ -> + val inputText = input.text.toString() + val result = parseAndCompute(inputText).expression + with(resultView) { + text = if (result != null) inputText + " = " + result.toString() else "Unable to parse " + inputText + } + true + } + } + +} \ No newline at end of file diff --git a/samples/calculator/androidApp/src/main/res/drawable-v24/ic_launcher_foreground.xml b/samples/calculator/androidApp/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 00000000000..c7bd21dbd86 --- /dev/null +++ b/samples/calculator/androidApp/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + diff --git a/samples/calculator/androidApp/src/main/res/drawable/ic_launcher_background.xml b/samples/calculator/androidApp/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 00000000000..d5fccc538c1 --- /dev/null +++ b/samples/calculator/androidApp/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/calculator/androidApp/src/main/res/layout/activity_main.xml b/samples/calculator/androidApp/src/main/res/layout/activity_main.xml new file mode 100644 index 00000000000..b86099edb22 --- /dev/null +++ b/samples/calculator/androidApp/src/main/res/layout/activity_main.xml @@ -0,0 +1,26 @@ + + + + + + + + + + diff --git a/samples/calculator/androidApp/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/samples/calculator/androidApp/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 00000000000..eca70cfe52e --- /dev/null +++ b/samples/calculator/androidApp/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/samples/calculator/androidApp/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/samples/calculator/androidApp/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 00000000000..eca70cfe52e --- /dev/null +++ b/samples/calculator/androidApp/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/samples/calculator/androidApp/src/main/res/mipmap-hdpi/ic_launcher.png b/samples/calculator/androidApp/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 00000000000..a2f5908281d Binary files /dev/null and b/samples/calculator/androidApp/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/samples/calculator/androidApp/src/main/res/mipmap-hdpi/ic_launcher_round.png b/samples/calculator/androidApp/src/main/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 00000000000..1b523998081 Binary files /dev/null and b/samples/calculator/androidApp/src/main/res/mipmap-hdpi/ic_launcher_round.png differ diff --git a/samples/calculator/androidApp/src/main/res/mipmap-mdpi/ic_launcher.png b/samples/calculator/androidApp/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 00000000000..ff10afd6e18 Binary files /dev/null and b/samples/calculator/androidApp/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/samples/calculator/androidApp/src/main/res/mipmap-mdpi/ic_launcher_round.png b/samples/calculator/androidApp/src/main/res/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 00000000000..115a4c768a2 Binary files /dev/null and b/samples/calculator/androidApp/src/main/res/mipmap-mdpi/ic_launcher_round.png differ diff --git a/samples/calculator/androidApp/src/main/res/mipmap-xhdpi/ic_launcher.png b/samples/calculator/androidApp/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 00000000000..dcd3cd80833 Binary files /dev/null and b/samples/calculator/androidApp/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/samples/calculator/androidApp/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/samples/calculator/androidApp/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 00000000000..459ca609d3a Binary files /dev/null and b/samples/calculator/androidApp/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ diff --git a/samples/calculator/androidApp/src/main/res/mipmap-xxhdpi/ic_launcher.png b/samples/calculator/androidApp/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 00000000000..8ca12fe024b Binary files /dev/null and b/samples/calculator/androidApp/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/samples/calculator/androidApp/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/samples/calculator/androidApp/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 00000000000..8e19b410a1b Binary files /dev/null and b/samples/calculator/androidApp/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ diff --git a/samples/calculator/androidApp/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/samples/calculator/androidApp/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 00000000000..b824ebdd48d Binary files /dev/null and b/samples/calculator/androidApp/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/samples/calculator/androidApp/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/samples/calculator/androidApp/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 00000000000..4c19a13c239 Binary files /dev/null and b/samples/calculator/androidApp/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ diff --git a/samples/calculator/androidApp/src/main/res/values/colors.xml b/samples/calculator/androidApp/src/main/res/values/colors.xml new file mode 100644 index 00000000000..3ab3e9cbce0 --- /dev/null +++ b/samples/calculator/androidApp/src/main/res/values/colors.xml @@ -0,0 +1,6 @@ + + + #3F51B5 + #303F9F + #FF4081 + diff --git a/samples/calculator/androidApp/src/main/res/values/strings.xml b/samples/calculator/androidApp/src/main/res/values/strings.xml new file mode 100644 index 00000000000..c042c2b9aef --- /dev/null +++ b/samples/calculator/androidApp/src/main/res/values/strings.xml @@ -0,0 +1,4 @@ + + Konan Calculator + Enter mathematic exression: + diff --git a/samples/calculator/androidApp/src/main/res/values/styles.xml b/samples/calculator/androidApp/src/main/res/values/styles.xml new file mode 100644 index 00000000000..0eb88fe3350 --- /dev/null +++ b/samples/calculator/androidApp/src/main/res/values/styles.xml @@ -0,0 +1,11 @@ + + + + + + diff --git a/samples/calculator/build.gradle b/samples/calculator/build.gradle index b4eaec3b6c1..398d6e4a6dd 100644 --- a/samples/calculator/build.gradle +++ b/samples/calculator/build.gradle @@ -1,8 +1,14 @@ buildscript { ext.kotlin_version = '1.2.0' + repositories { + google() + jcenter() + } + dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + classpath 'com.android.tools.build:gradle:3.0.1' } } diff --git a/samples/settings.gradle b/samples/settings.gradle index 522fbcf99f6..ea291754f9d 100644 --- a/samples/settings.gradle +++ b/samples/settings.gradle @@ -2,6 +2,7 @@ // please add it into the 'buildSamplesWithPlatfromLibs' task in build.gradle. include ':calculator' include ':calculator:jvmCliApp' +// include ':calculator:androidApp' include ':csvparser' include ':gitchurn' include ':globalState' @@ -13,8 +14,8 @@ include ':socket' include ':tetris' include ':tensorflow' include ':torch' -// Android native activity build requires Android SDK. -// So temporary switching off for now, as it breaks the build +// Android native activity build requires Android SDK. +// So temporary switching off for now, as it breaks the build // of other samples if SDK is not present. // include ':androidNativeActivity' include ':objc' @@ -25,4 +26,3 @@ include ':workers' includeBuild '../shared' includeBuild '../tools/kotlin-native-gradle-plugin' -