aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhil Burk <philburk@mobileer.com>2022-09-25 17:21:16 -0700
committerPhil Burk <philburk@mobileer.com>2022-10-05 13:39:36 -0700
commitd42b99e38a5efd1afcad5400217a3995b4fb5d5c (patch)
tree553c76f3b66ca40661931126a3433dfc06bbf19f
parent2ccbcca8fc2f0d791a278354836797be59743221 (diff)
downloadoboe-d42b99e38a5efd1afcad5400217a3995b4fb5d5c.tar.gz
Update gradle so it builds with Compose supports.
-rw-r--r--samples/LiveEffect/build.gradle2
-rw-r--r--samples/MegaDrone/build.gradle2
-rw-r--r--samples/RhythmGame/build.gradle2
-rw-r--r--samples/SoundBoard/build.gradle4
-rw-r--r--samples/build.gradle11
-rw-r--r--samples/drumthumper/build.gradle16
-rw-r--r--samples/hello-oboe/build.gradle2
-rw-r--r--samples/hello-oboe/src/main/java/com/google/oboe/samples/hellooboe/BackgroundRunner.java20
-rw-r--r--samples/minimaloboe/.gitignore1
-rw-r--r--samples/minimaloboe/build.gradle64
-rw-r--r--samples/minimaloboe/proguard-rules.pro21
-rw-r--r--samples/minimaloboe/src/androidTest/java/com/example/minimaloboe/ExampleInstrumentedTest.kt24
-rw-r--r--samples/minimaloboe/src/main/AndroidManifest.xml25
-rw-r--r--samples/minimaloboe/src/main/java/com/example/minimaloboe/AudioPlayer.kt11
-rw-r--r--samples/minimaloboe/src/main/java/com/example/minimaloboe/MainActivity.kt81
-rw-r--r--samples/minimaloboe/src/main/java/com/example/minimaloboe/ui/theme/Color.kt8
-rw-r--r--samples/minimaloboe/src/main/java/com/example/minimaloboe/ui/theme/Shape.kt11
-rw-r--r--samples/minimaloboe/src/main/java/com/example/minimaloboe/ui/theme/Theme.kt44
-rw-r--r--samples/minimaloboe/src/main/java/com/example/minimaloboe/ui/theme/Type.kt28
-rw-r--r--samples/minimaloboe/src/main/res/drawable-v24/ic_launcher_foreground.xml30
-rw-r--r--samples/minimaloboe/src/main/res/drawable/ic_launcher_background.xml170
-rw-r--r--samples/minimaloboe/src/main/res/mipmap-anydpi-v26/ic_launcher.xml5
-rw-r--r--samples/minimaloboe/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml5
-rw-r--r--samples/minimaloboe/src/main/res/mipmap-hdpi/ic_launcher.webpbin0 -> 1404 bytes
-rw-r--r--samples/minimaloboe/src/main/res/mipmap-hdpi/ic_launcher_round.webpbin0 -> 2898 bytes
-rw-r--r--samples/minimaloboe/src/main/res/mipmap-mdpi/ic_launcher.webpbin0 -> 982 bytes
-rw-r--r--samples/minimaloboe/src/main/res/mipmap-mdpi/ic_launcher_round.webpbin0 -> 1772 bytes
-rw-r--r--samples/minimaloboe/src/main/res/mipmap-xhdpi/ic_launcher.webpbin0 -> 1900 bytes
-rw-r--r--samples/minimaloboe/src/main/res/mipmap-xhdpi/ic_launcher_round.webpbin0 -> 3918 bytes
-rw-r--r--samples/minimaloboe/src/main/res/mipmap-xxhdpi/ic_launcher.webpbin0 -> 2884 bytes
-rw-r--r--samples/minimaloboe/src/main/res/mipmap-xxhdpi/ic_launcher_round.webpbin0 -> 5914 bytes
-rw-r--r--samples/minimaloboe/src/main/res/mipmap-xxxhdpi/ic_launcher.webpbin0 -> 3844 bytes
-rw-r--r--samples/minimaloboe/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webpbin0 -> 7778 bytes
-rw-r--r--samples/minimaloboe/src/main/res/values/colors.xml10
-rw-r--r--samples/minimaloboe/src/main/res/values/strings.xml3
-rw-r--r--samples/minimaloboe/src/main/res/values/themes.xml7
-rw-r--r--samples/minimaloboe/src/test/java/com/example/minimaloboe/ExampleUnitTest.kt17
-rw-r--r--samples/settings.gradle1
38 files changed, 609 insertions, 16 deletions
diff --git a/samples/LiveEffect/build.gradle b/samples/LiveEffect/build.gradle
index 5b491b2f..f336d2e2 100644
--- a/samples/LiveEffect/build.gradle
+++ b/samples/LiveEffect/build.gradle
@@ -32,7 +32,7 @@ android {
}
dependencies {
- implementation 'androidx.appcompat:appcompat:1.0.0-rc02'
+ implementation 'androidx.appcompat:appcompat:1.6.0-rc01'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation project(':audio-device')
}
diff --git a/samples/MegaDrone/build.gradle b/samples/MegaDrone/build.gradle
index 181b65fb..93c372c0 100644
--- a/samples/MegaDrone/build.gradle
+++ b/samples/MegaDrone/build.gradle
@@ -42,6 +42,6 @@ android {
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
- implementation 'androidx.appcompat:appcompat:1.0.0-rc02'
+ implementation 'androidx.appcompat:appcompat:1.6.0-rc01'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
}
diff --git a/samples/RhythmGame/build.gradle b/samples/RhythmGame/build.gradle
index 39114f42..88681f43 100644
--- a/samples/RhythmGame/build.gradle
+++ b/samples/RhythmGame/build.gradle
@@ -63,6 +63,6 @@ android {
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
- implementation 'androidx.appcompat:appcompat:1.0.0-rc02'
+ implementation 'androidx.appcompat:appcompat:1.6.0-rc01'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
}
diff --git a/samples/SoundBoard/build.gradle b/samples/SoundBoard/build.gradle
index a2d125fc..81cb6050 100644
--- a/samples/SoundBoard/build.gradle
+++ b/samples/SoundBoard/build.gradle
@@ -45,6 +45,6 @@ android {
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
- implementation 'androidx.appcompat:appcompat:1.0.0-rc02'
- implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
+ implementation 'androidx.appcompat:appcompat:1.6.0-rc01'
+ implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
}
diff --git a/samples/build.gradle b/samples/build.gradle
index 5ac1c6aa..8cb68645 100644
--- a/samples/build.gradle
+++ b/samples/build.gradle
@@ -20,16 +20,19 @@
buildscript {
- ext.kotlin_version = '1.3.50'
+ ext {
+ compose_version = '1.2.0'
+ kotlin_version = '1.7.0'
+ }
repositories {
google()
- jcenter()
+ mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.2.2'
// NOTE: Do not place your application dependencies here; they belong
- // in the individual module build.gradle files
+ // in the individual module build.gradle files-
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
@@ -37,6 +40,6 @@ buildscript {
allprojects {
repositories {
google()
- jcenter()
+ mavenCentral()
}
}
diff --git a/samples/drumthumper/build.gradle b/samples/drumthumper/build.gradle
index 29a668b2..17a11990 100644
--- a/samples/drumthumper/build.gradle
+++ b/samples/drumthumper/build.gradle
@@ -1,6 +1,7 @@
-apply plugin: 'com.android.application'
-apply plugin: 'kotlin-android'
-apply plugin: 'kotlin-android-extensions'
+plugins {
+ id 'com.android.application'
+ id 'org.jetbrains.kotlin.android'
+}
android {
compileSdkVersion 33
@@ -35,9 +36,12 @@ android {
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
- implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
- implementation 'androidx.appcompat:appcompat:1.2.0'
- implementation 'androidx.core:core-ktx:1.3.1'
+ implementation "androidx.core:core-ktx:$kotlin_version"
+ implementation 'androidx.appcompat:appcompat:1.6.0-rc01'
+ def lifecycle_version = "2.5.1"
+ implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
+ implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
implementation project(path: ':iolib')
implementation project(path: ':parselib')
}
+
diff --git a/samples/hello-oboe/build.gradle b/samples/hello-oboe/build.gradle
index 750efc82..29b6fc26 100644
--- a/samples/hello-oboe/build.gradle
+++ b/samples/hello-oboe/build.gradle
@@ -35,6 +35,6 @@ android {
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation project(':audio-device')
- implementation 'androidx.appcompat:appcompat:1.0.0-rc02'
+ implementation 'androidx.appcompat:appcompat:1.6.0-rc01'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
}
diff --git a/samples/hello-oboe/src/main/java/com/google/oboe/samples/hellooboe/BackgroundRunner.java b/samples/hello-oboe/src/main/java/com/google/oboe/samples/hellooboe/BackgroundRunner.java
new file mode 100644
index 00000000..d976fec0
--- /dev/null
+++ b/samples/hello-oboe/src/main/java/com/google/oboe/samples/hellooboe/BackgroundRunner.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * 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
+ *
+ * http://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.
+ */
+
+package com.google.oboe.samples.hellooboe;
+
+public class BackgroundRunner {
+}
diff --git a/samples/minimaloboe/.gitignore b/samples/minimaloboe/.gitignore
new file mode 100644
index 00000000..42afabfd
--- /dev/null
+++ b/samples/minimaloboe/.gitignore
@@ -0,0 +1 @@
+/build \ No newline at end of file
diff --git a/samples/minimaloboe/build.gradle b/samples/minimaloboe/build.gradle
new file mode 100644
index 00000000..d4ff274d
--- /dev/null
+++ b/samples/minimaloboe/build.gradle
@@ -0,0 +1,64 @@
+plugins {
+ id 'com.android.application'
+ id 'org.jetbrains.kotlin.android'
+}
+
+android {
+ compileSdk 33
+
+ defaultConfig {
+ applicationId "com.example.minimaloboe"
+ minSdk 21
+ targetSdk 32
+ versionCode 1
+ versionName "1.0"
+
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ vectorDrawables {
+ useSupportLibrary true
+ }
+ }
+
+ 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 {
+ compose true
+ }
+ composeOptions {
+ kotlinCompilerExtensionVersion compose_version
+ }
+ packagingOptions {
+ resources {
+ excludes += '/META-INF/{AL2.0,LGPL2.1}'
+ }
+ }
+}
+
+dependencies {
+ implementation "androidx.core:core-ktx:$kotlin_version"
+ def lifecycle_version = "2.5.1"
+ implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
+ implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
+ implementation "androidx.compose.ui:ui:$compose_version"
+ implementation "androidx.compose.material:material:$compose_version"
+ implementation "androidx.compose.ui:ui-tooling-preview:$compose_version"
+ implementation 'androidx.activity:activity-compose:1.3.1'
+ implementation 'androidx.appcompat:appcompat:1.6.0-rc01'
+ testImplementation 'junit:junit:4.13.2'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.3'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
+ androidTestImplementation "androidx.compose.ui:ui-test-junit4:$compose_version"
+ debugImplementation "androidx.compose.ui:ui-tooling:$compose_version"
+ debugImplementation "androidx.compose.ui:ui-test-manifest:$compose_version"
+}
diff --git a/samples/minimaloboe/proguard-rules.pro b/samples/minimaloboe/proguard-rules.pro
new file mode 100644
index 00000000..481bb434
--- /dev/null
+++ b/samples/minimaloboe/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/samples/minimaloboe/src/androidTest/java/com/example/minimaloboe/ExampleInstrumentedTest.kt b/samples/minimaloboe/src/androidTest/java/com/example/minimaloboe/ExampleInstrumentedTest.kt
new file mode 100644
index 00000000..3be414ae
--- /dev/null
+++ b/samples/minimaloboe/src/androidTest/java/com/example/minimaloboe/ExampleInstrumentedTest.kt
@@ -0,0 +1,24 @@
+package com.example.minimaloboe
+
+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.example.minimaloboe", appContext.packageName)
+ }
+} \ No newline at end of file
diff --git a/samples/minimaloboe/src/main/AndroidManifest.xml b/samples/minimaloboe/src/main/AndroidManifest.xml
new file mode 100644
index 00000000..e54acbbc
--- /dev/null
+++ b/samples/minimaloboe/src/main/AndroidManifest.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.example.minimaloboe">
+
+ <application
+ android:allowBackup="true"
+ android:icon="@mipmap/ic_launcher"
+ android:label="@string/app_name"
+ android:roundIcon="@mipmap/ic_launcher_round"
+ android:supportsRtl="true"
+ android:theme="@style/Theme.Samples">
+ <activity
+ android:name=".MainActivity"
+ android:exported="true"
+ android:label="@string/app_name"
+ android:theme="@style/Theme.Samples">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ </application>
+
+</manifest> \ No newline at end of file
diff --git a/samples/minimaloboe/src/main/java/com/example/minimaloboe/AudioPlayer.kt b/samples/minimaloboe/src/main/java/com/example/minimaloboe/AudioPlayer.kt
new file mode 100644
index 00000000..59b2b1ff
--- /dev/null
+++ b/samples/minimaloboe/src/main/java/com/example/minimaloboe/AudioPlayer.kt
@@ -0,0 +1,11 @@
+package com.example.minimaloboe
+
+class AudioPlayer {
+ var mStarted = false;
+ fun startAudio() {
+ mStarted = true;
+ }
+ fun stopAudio() {
+ mStarted = false;
+ }
+} \ No newline at end of file
diff --git a/samples/minimaloboe/src/main/java/com/example/minimaloboe/MainActivity.kt b/samples/minimaloboe/src/main/java/com/example/minimaloboe/MainActivity.kt
new file mode 100644
index 00000000..520d8e32
--- /dev/null
+++ b/samples/minimaloboe/src/main/java/com/example/minimaloboe/MainActivity.kt
@@ -0,0 +1,81 @@
+package com.example.minimaloboe
+
+import android.content.Context
+import android.content.ContextWrapper
+import android.os.Bundle
+import androidx.activity.ComponentActivity
+import androidx.activity.compose.setContent
+import androidx.appcompat.app.AppCompatActivity
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.material.Button
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.Surface
+import androidx.compose.material.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.tooling.preview.Preview
+import com.example.minimaloboe.ui.theme.SamplesTheme
+
+class MainActivity : ComponentActivity() {
+
+ var mPlayer = AudioPlayer()
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContent {
+ SamplesTheme {
+ // A surface container using the 'background' color from the theme
+ Surface(
+ modifier = Modifier.fillMaxSize(),
+ color = MaterialTheme.colors.background
+ ) {
+ MainControls(mPlayer)
+ }
+ }
+ }
+ }
+}
+
+@Composable
+fun StartButton(audioPlayer: AudioPlayer) {
+ Button(onClick = {
+ audioPlayer.startAudio()
+ }) {
+ Text(text = "Start")
+ }
+}
+
+@Composable
+fun StopButton(audioPlayer: AudioPlayer) {
+ Button(onClick = {
+ audioPlayer.stopAudio()
+ }) {
+ Text(text = "Stop")
+ }
+}
+
+@Composable
+fun MainControls(audioPlayer: AudioPlayer) {
+ Column {
+ Text(text = "Minimal Oboe!")
+ StartButton(audioPlayer)
+ StopButton(audioPlayer)
+ }
+}
+
+fun Context.findActivity(): AppCompatActivity? = when (this) {
+ is AppCompatActivity -> this
+ is ContextWrapper -> baseContext.findActivity()
+ else -> null
+}
+
+@Preview(showBackground = true)
+@Composable
+fun DefaultPreview() {
+ var player = AudioPlayer()
+ SamplesTheme {
+ MainControls(player)
+ }
+} \ No newline at end of file
diff --git a/samples/minimaloboe/src/main/java/com/example/minimaloboe/ui/theme/Color.kt b/samples/minimaloboe/src/main/java/com/example/minimaloboe/ui/theme/Color.kt
new file mode 100644
index 00000000..dbff999b
--- /dev/null
+++ b/samples/minimaloboe/src/main/java/com/example/minimaloboe/ui/theme/Color.kt
@@ -0,0 +1,8 @@
+package com.example.minimaloboe.ui.theme
+
+import androidx.compose.ui.graphics.Color
+
+val Purple200 = Color(0xFFBB86FC)
+val Purple500 = Color(0xFF6200EE)
+val Purple700 = Color(0xFF3700B3)
+val Teal200 = Color(0xFF03DAC5) \ No newline at end of file
diff --git a/samples/minimaloboe/src/main/java/com/example/minimaloboe/ui/theme/Shape.kt b/samples/minimaloboe/src/main/java/com/example/minimaloboe/ui/theme/Shape.kt
new file mode 100644
index 00000000..402ee6c5
--- /dev/null
+++ b/samples/minimaloboe/src/main/java/com/example/minimaloboe/ui/theme/Shape.kt
@@ -0,0 +1,11 @@
+package com.example.minimaloboe.ui.theme
+
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.material.Shapes
+import androidx.compose.ui.unit.dp
+
+val Shapes = Shapes(
+ small = RoundedCornerShape(4.dp),
+ medium = RoundedCornerShape(4.dp),
+ large = RoundedCornerShape(0.dp)
+) \ No newline at end of file
diff --git a/samples/minimaloboe/src/main/java/com/example/minimaloboe/ui/theme/Theme.kt b/samples/minimaloboe/src/main/java/com/example/minimaloboe/ui/theme/Theme.kt
new file mode 100644
index 00000000..1902c02f
--- /dev/null
+++ b/samples/minimaloboe/src/main/java/com/example/minimaloboe/ui/theme/Theme.kt
@@ -0,0 +1,44 @@
+package com.example.minimaloboe.ui.theme
+
+import androidx.compose.foundation.isSystemInDarkTheme
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.darkColors
+import androidx.compose.material.lightColors
+import androidx.compose.runtime.Composable
+
+private val DarkColorPalette = darkColors(
+ primary = Purple200,
+ primaryVariant = Purple700,
+ secondary = Teal200
+)
+
+private val LightColorPalette = lightColors(
+ primary = Purple500,
+ primaryVariant = Purple700,
+ secondary = Teal200
+
+ /* Other default colors to override
+ background = Color.White,
+ surface = Color.White,
+ onPrimary = Color.White,
+ onSecondary = Color.Black,
+ onBackground = Color.Black,
+ onSurface = Color.Black,
+ */
+)
+
+@Composable
+fun SamplesTheme(darkTheme: Boolean = isSystemInDarkTheme(), content: @Composable () -> Unit) {
+ val colors = if (darkTheme) {
+ DarkColorPalette
+ } else {
+ LightColorPalette
+ }
+
+ MaterialTheme(
+ colors = colors,
+ typography = Typography,
+ shapes = Shapes,
+ content = content
+ )
+} \ No newline at end of file
diff --git a/samples/minimaloboe/src/main/java/com/example/minimaloboe/ui/theme/Type.kt b/samples/minimaloboe/src/main/java/com/example/minimaloboe/ui/theme/Type.kt
new file mode 100644
index 00000000..1bb75f19
--- /dev/null
+++ b/samples/minimaloboe/src/main/java/com/example/minimaloboe/ui/theme/Type.kt
@@ -0,0 +1,28 @@
+package com.example.minimaloboe.ui.theme
+
+import androidx.compose.material.Typography
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.unit.sp
+
+// Set of Material typography styles to start with
+val Typography = Typography(
+ body1 = TextStyle(
+ fontFamily = FontFamily.Default,
+ fontWeight = FontWeight.Normal,
+ fontSize = 16.sp
+ )
+ /* Other default text styles to override
+ button = TextStyle(
+ fontFamily = FontFamily.Default,
+ fontWeight = FontWeight.W500,
+ fontSize = 14.sp
+ ),
+ caption = TextStyle(
+ fontFamily = FontFamily.Default,
+ fontWeight = FontWeight.Normal,
+ fontSize = 12.sp
+ )
+ */
+) \ No newline at end of file
diff --git a/samples/minimaloboe/src/main/res/drawable-v24/ic_launcher_foreground.xml b/samples/minimaloboe/src/main/res/drawable-v24/ic_launcher_foreground.xml
new file mode 100644
index 00000000..2b068d11
--- /dev/null
+++ b/samples/minimaloboe/src/main/res/drawable-v24/ic_launcher_foreground.xml
@@ -0,0 +1,30 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:aapt="http://schemas.android.com/aapt"
+ android:width="108dp"
+ android:height="108dp"
+ android:viewportWidth="108"
+ android:viewportHeight="108">
+ <path android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z">
+ <aapt:attr name="android:fillColor">
+ <gradient
+ android:endX="85.84757"
+ android:endY="92.4963"
+ android:startX="42.9492"
+ android:startY="49.59793"
+ android:type="linear">
+ <item
+ android:color="#44000000"
+ android:offset="0.0" />
+ <item
+ android:color="#00000000"
+ android:offset="1.0" />
+ </gradient>
+ </aapt:attr>
+ </path>
+ <path
+ android:fillColor="#FFFFFF"
+ android:fillType="nonZero"
+ android:pathData="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z"
+ android:strokeWidth="1"
+ android:strokeColor="#00000000" />
+</vector> \ No newline at end of file
diff --git a/samples/minimaloboe/src/main/res/drawable/ic_launcher_background.xml b/samples/minimaloboe/src/main/res/drawable/ic_launcher_background.xml
new file mode 100644
index 00000000..07d5da9c
--- /dev/null
+++ b/samples/minimaloboe/src/main/res/drawable/ic_launcher_background.xml
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="108dp"
+ android:height="108dp"
+ android:viewportWidth="108"
+ android:viewportHeight="108">
+ <path
+ android:fillColor="#3DDC84"
+ android:pathData="M0,0h108v108h-108z" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M9,0L9,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,0L19,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M29,0L29,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M39,0L39,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M49,0L49,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M59,0L59,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M69,0L69,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M79,0L79,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M89,0L89,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M99,0L99,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,9L108,9"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,19L108,19"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,29L108,29"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,39L108,39"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,49L108,49"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,59L108,59"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,69L108,69"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,79L108,79"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,89L108,89"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,99L108,99"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,29L89,29"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,39L89,39"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,49L89,49"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,59L89,59"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,69L89,69"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,79L89,79"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M29,19L29,89"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M39,19L39,89"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M49,19L49,89"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M59,19L59,89"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M69,19L69,89"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M79,19L79,89"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+</vector>
diff --git a/samples/minimaloboe/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/samples/minimaloboe/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 00000000..eca70cfe
--- /dev/null
+++ b/samples/minimaloboe/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+ <background android:drawable="@drawable/ic_launcher_background" />
+ <foreground android:drawable="@drawable/ic_launcher_foreground" />
+</adaptive-icon> \ No newline at end of file
diff --git a/samples/minimaloboe/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/samples/minimaloboe/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
new file mode 100644
index 00000000..eca70cfe
--- /dev/null
+++ b/samples/minimaloboe/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+ <background android:drawable="@drawable/ic_launcher_background" />
+ <foreground android:drawable="@drawable/ic_launcher_foreground" />
+</adaptive-icon> \ No newline at end of file
diff --git a/samples/minimaloboe/src/main/res/mipmap-hdpi/ic_launcher.webp b/samples/minimaloboe/src/main/res/mipmap-hdpi/ic_launcher.webp
new file mode 100644
index 00000000..c209e78e
--- /dev/null
+++ b/samples/minimaloboe/src/main/res/mipmap-hdpi/ic_launcher.webp
Binary files differ
diff --git a/samples/minimaloboe/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/samples/minimaloboe/src/main/res/mipmap-hdpi/ic_launcher_round.webp
new file mode 100644
index 00000000..b2dfe3d1
--- /dev/null
+++ b/samples/minimaloboe/src/main/res/mipmap-hdpi/ic_launcher_round.webp
Binary files differ
diff --git a/samples/minimaloboe/src/main/res/mipmap-mdpi/ic_launcher.webp b/samples/minimaloboe/src/main/res/mipmap-mdpi/ic_launcher.webp
new file mode 100644
index 00000000..4f0f1d64
--- /dev/null
+++ b/samples/minimaloboe/src/main/res/mipmap-mdpi/ic_launcher.webp
Binary files differ
diff --git a/samples/minimaloboe/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/samples/minimaloboe/src/main/res/mipmap-mdpi/ic_launcher_round.webp
new file mode 100644
index 00000000..62b611da
--- /dev/null
+++ b/samples/minimaloboe/src/main/res/mipmap-mdpi/ic_launcher_round.webp
Binary files differ
diff --git a/samples/minimaloboe/src/main/res/mipmap-xhdpi/ic_launcher.webp b/samples/minimaloboe/src/main/res/mipmap-xhdpi/ic_launcher.webp
new file mode 100644
index 00000000..948a3070
--- /dev/null
+++ b/samples/minimaloboe/src/main/res/mipmap-xhdpi/ic_launcher.webp
Binary files differ
diff --git a/samples/minimaloboe/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/samples/minimaloboe/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
new file mode 100644
index 00000000..1b9a6956
--- /dev/null
+++ b/samples/minimaloboe/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
Binary files differ
diff --git a/samples/minimaloboe/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/samples/minimaloboe/src/main/res/mipmap-xxhdpi/ic_launcher.webp
new file mode 100644
index 00000000..28d4b77f
--- /dev/null
+++ b/samples/minimaloboe/src/main/res/mipmap-xxhdpi/ic_launcher.webp
Binary files differ
diff --git a/samples/minimaloboe/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/samples/minimaloboe/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
new file mode 100644
index 00000000..9287f508
--- /dev/null
+++ b/samples/minimaloboe/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
Binary files differ
diff --git a/samples/minimaloboe/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/samples/minimaloboe/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
new file mode 100644
index 00000000..aa7d6427
--- /dev/null
+++ b/samples/minimaloboe/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
Binary files differ
diff --git a/samples/minimaloboe/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/samples/minimaloboe/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
new file mode 100644
index 00000000..9126ae37
--- /dev/null
+++ b/samples/minimaloboe/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
Binary files differ
diff --git a/samples/minimaloboe/src/main/res/values/colors.xml b/samples/minimaloboe/src/main/res/values/colors.xml
new file mode 100644
index 00000000..f8c6127d
--- /dev/null
+++ b/samples/minimaloboe/src/main/res/values/colors.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <color name="purple_200">#FFBB86FC</color>
+ <color name="purple_500">#FF6200EE</color>
+ <color name="purple_700">#FF3700B3</color>
+ <color name="teal_200">#FF03DAC5</color>
+ <color name="teal_700">#FF018786</color>
+ <color name="black">#FF000000</color>
+ <color name="white">#FFFFFFFF</color>
+</resources> \ No newline at end of file
diff --git a/samples/minimaloboe/src/main/res/values/strings.xml b/samples/minimaloboe/src/main/res/values/strings.xml
new file mode 100644
index 00000000..67117ecb
--- /dev/null
+++ b/samples/minimaloboe/src/main/res/values/strings.xml
@@ -0,0 +1,3 @@
+<resources>
+ <string name="app_name">MinimalOboe</string>
+</resources> \ No newline at end of file
diff --git a/samples/minimaloboe/src/main/res/values/themes.xml b/samples/minimaloboe/src/main/res/values/themes.xml
new file mode 100644
index 00000000..4a836ffe
--- /dev/null
+++ b/samples/minimaloboe/src/main/res/values/themes.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+ <style name="Theme.Samples" parent="android:Theme.Material.Light.NoActionBar">
+ <item name="android:statusBarColor">@color/purple_700</item>
+ </style>
+</resources> \ No newline at end of file
diff --git a/samples/minimaloboe/src/test/java/com/example/minimaloboe/ExampleUnitTest.kt b/samples/minimaloboe/src/test/java/com/example/minimaloboe/ExampleUnitTest.kt
new file mode 100644
index 00000000..6d67075f
--- /dev/null
+++ b/samples/minimaloboe/src/test/java/com/example/minimaloboe/ExampleUnitTest.kt
@@ -0,0 +1,17 @@
+package com.example.minimaloboe
+
+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)
+ }
+} \ No newline at end of file
diff --git a/samples/settings.gradle b/samples/settings.gradle
index 88694a29..ddec58eb 100644
--- a/samples/settings.gradle
+++ b/samples/settings.gradle
@@ -24,3 +24,4 @@ include ':SoundBoard'
include ':drumthumper'
include ':parselib'
include ':iolib'
+include ':minimaloboe'