commit d7adb561971584523dd1e08ded9dedd19ed64f0a Author: ml Date: Mon Jun 1 15:53:11 2026 +0200 Initial commit, adding original binaries, initial watch and companion apps which can talk diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..dd32a51 --- /dev/null +++ b/.gitignore @@ -0,0 +1,20 @@ +/*.txt +*.iml +.gradle +.DS_Store +.externalNativeBuild +.cxx +local.properties +.lock* + +/SchwertUndMagieOnPebbleCompanionApp/local.properties +/SchwertUndMagieOnPebbleCompanionApp/.idea/caches +/SchwertUndMagieOnPebbleCompanionApp/.idea/libraries +/SchwertUndMagieOnPebbleCompanionApp/.idea/modules.xml +/SchwertUndMagieOnPebbleCompanionApp/.idea/workspace.xml +/SchwertUndMagieOnPebbleCompanionApp/.idea/navEditor.xml +/SchwertUndMagieOnPebbleCompanionApp/.idea/assetWizardSettings.xml +/SchwertUndMagieOnPebbleCompanionApp/build +/SchwertUndMagieOnPebbleCompanionApp/captures + +/SchwertUndMagieOnPebbleWatchApp/build diff --git a/SchwertUndMagieOnPebbleCompanionApp/.gitignore b/SchwertUndMagieOnPebbleCompanionApp/.gitignore new file mode 100644 index 0000000..aa724b7 --- /dev/null +++ b/SchwertUndMagieOnPebbleCompanionApp/.gitignore @@ -0,0 +1,15 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx +local.properties diff --git a/SchwertUndMagieOnPebbleCompanionApp/.idea/.gitignore b/SchwertUndMagieOnPebbleCompanionApp/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/SchwertUndMagieOnPebbleCompanionApp/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/SchwertUndMagieOnPebbleCompanionApp/.idea/AndroidProjectSystem.xml b/SchwertUndMagieOnPebbleCompanionApp/.idea/AndroidProjectSystem.xml new file mode 100644 index 0000000..4a53bee --- /dev/null +++ b/SchwertUndMagieOnPebbleCompanionApp/.idea/AndroidProjectSystem.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/SchwertUndMagieOnPebbleCompanionApp/.idea/codeStyles/Project.xml b/SchwertUndMagieOnPebbleCompanionApp/.idea/codeStyles/Project.xml new file mode 100644 index 0000000..7643783 --- /dev/null +++ b/SchwertUndMagieOnPebbleCompanionApp/.idea/codeStyles/Project.xml @@ -0,0 +1,123 @@ + + + + + + + + + + \ No newline at end of file diff --git a/SchwertUndMagieOnPebbleCompanionApp/.idea/codeStyles/codeStyleConfig.xml b/SchwertUndMagieOnPebbleCompanionApp/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000..79ee123 --- /dev/null +++ b/SchwertUndMagieOnPebbleCompanionApp/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/SchwertUndMagieOnPebbleCompanionApp/.idea/compiler.xml b/SchwertUndMagieOnPebbleCompanionApp/.idea/compiler.xml new file mode 100644 index 0000000..b86273d --- /dev/null +++ b/SchwertUndMagieOnPebbleCompanionApp/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/SchwertUndMagieOnPebbleCompanionApp/.idea/deploymentTargetSelector.xml b/SchwertUndMagieOnPebbleCompanionApp/.idea/deploymentTargetSelector.xml new file mode 100644 index 0000000..c959717 --- /dev/null +++ b/SchwertUndMagieOnPebbleCompanionApp/.idea/deploymentTargetSelector.xml @@ -0,0 +1,18 @@ + + + + + + + + + \ No newline at end of file diff --git a/SchwertUndMagieOnPebbleCompanionApp/.idea/deviceManager.xml b/SchwertUndMagieOnPebbleCompanionApp/.idea/deviceManager.xml new file mode 100644 index 0000000..91f9558 --- /dev/null +++ b/SchwertUndMagieOnPebbleCompanionApp/.idea/deviceManager.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/SchwertUndMagieOnPebbleCompanionApp/.idea/gradle.xml b/SchwertUndMagieOnPebbleCompanionApp/.idea/gradle.xml new file mode 100644 index 0000000..02c4aa5 --- /dev/null +++ b/SchwertUndMagieOnPebbleCompanionApp/.idea/gradle.xml @@ -0,0 +1,18 @@ + + + + + + + \ No newline at end of file diff --git a/SchwertUndMagieOnPebbleCompanionApp/.idea/misc.xml b/SchwertUndMagieOnPebbleCompanionApp/.idea/misc.xml new file mode 100644 index 0000000..b2c751a --- /dev/null +++ b/SchwertUndMagieOnPebbleCompanionApp/.idea/misc.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/SchwertUndMagieOnPebbleCompanionApp/.idea/runConfigurations.xml b/SchwertUndMagieOnPebbleCompanionApp/.idea/runConfigurations.xml new file mode 100644 index 0000000..16660f1 --- /dev/null +++ b/SchwertUndMagieOnPebbleCompanionApp/.idea/runConfigurations.xml @@ -0,0 +1,17 @@ + + + + + + \ No newline at end of file diff --git a/SchwertUndMagieOnPebbleCompanionApp/app/.gitignore b/SchwertUndMagieOnPebbleCompanionApp/app/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/SchwertUndMagieOnPebbleCompanionApp/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/SchwertUndMagieOnPebbleCompanionApp/app/build.gradle.kts b/SchwertUndMagieOnPebbleCompanionApp/app/build.gradle.kts new file mode 100644 index 0000000..a0a94ce --- /dev/null +++ b/SchwertUndMagieOnPebbleCompanionApp/app/build.gradle.kts @@ -0,0 +1,49 @@ +plugins { + alias(libs.plugins.android.application) +} + +android { + namespace = "de.ladkau.schwertundmagieonpebblecompanionapp" + compileSdk { + version = release(36) { + minorApiLevel = 1 + } + } + + defaultConfig { + applicationId = "de.ladkau.schwertundmagieonpebblecompanionapp" + minSdk = 24 + targetSdk = 36 + versionCode = 1 + versionName = "1.0" + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + isMinifyEnabled = false + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } +} + +dependencies { + implementation(libs.androidx.activity.ktx) + implementation(libs.androidx.appcompat) + implementation(libs.androidx.constraintlayout) + implementation(libs.androidx.core.ktx) + implementation(libs.material) + implementation(libs.nanohttpd) + implementation(libs.pebblekit) + testImplementation(libs.junit) + androidTestImplementation(libs.androidx.espresso.core) + androidTestImplementation(libs.androidx.junit) +} diff --git a/SchwertUndMagieOnPebbleCompanionApp/app/proguard-rules.pro b/SchwertUndMagieOnPebbleCompanionApp/app/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/SchwertUndMagieOnPebbleCompanionApp/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/SchwertUndMagieOnPebbleCompanionApp/app/src/androidTest/java/de/ladkau/schwertundmagieonpebblecompanionapp/ExampleInstrumentedTest.kt b/SchwertUndMagieOnPebbleCompanionApp/app/src/androidTest/java/de/ladkau/schwertundmagieonpebblecompanionapp/ExampleInstrumentedTest.kt new file mode 100644 index 0000000..4319780 --- /dev/null +++ b/SchwertUndMagieOnPebbleCompanionApp/app/src/androidTest/java/de/ladkau/schwertundmagieonpebblecompanionapp/ExampleInstrumentedTest.kt @@ -0,0 +1,24 @@ +package de.ladkau.schwertundmagieonpebblecompanionapp + +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("de.ladkau.schwertundmagieonpebblecompanionapp", appContext.packageName) + } +} \ No newline at end of file diff --git a/SchwertUndMagieOnPebbleCompanionApp/app/src/main/AndroidManifest.xml b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..d741679 --- /dev/null +++ b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/AndroidManifest.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SchwertUndMagieOnPebbleCompanionApp/app/src/main/java/de/ladkau/schwertundmagieonpebblecompanionapp/C64Engine.kt b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/java/de/ladkau/schwertundmagieonpebblecompanionapp/C64Engine.kt new file mode 100644 index 0000000..9e4af57 --- /dev/null +++ b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/java/de/ladkau/schwertundmagieonpebblecompanionapp/C64Engine.kt @@ -0,0 +1,37 @@ +package de.ladkau.schwertundmagieonpebblecompanionapp + +import android.graphics.Bitmap +import java.nio.ByteBuffer + +class C64Engine { + // Native hooks representing underlying open-source emulator loops (e.g., Frodo Core) + external fun initEmulator(romPath: String): Boolean + external fun runFrame() + external fun getRawVideoBuffer(buffer: ByteBuffer) // Populates native 320x200 ARGB pixels + external fun injectNativeKey(keyCode: Int, isPressed: Boolean) + + companion object { + init { + System.loadLibrary("frodoc64_core") + } + } + + // Maps standard incoming string commands to traditional C64 matrix keycodes + fun handleWatchInput(command: String) { + val c64KeyCode = when (command) { + "1" -> 0x31 // C64 '1' + "2" -> 0x32 // C64 '2' + "3" -> 0x33 // C64 '3' + "Y" -> 0x59 // C64 'Y' + "N" -> 0x4E // C64 'N' + else -> return + } + + // Simulates a clean hardware keypress cycle + Thread { + injectNativeKey(c64KeyCode, true) + Thread.sleep(100) // Hold down frame duration + injectNativeKey(c64KeyCode, false) + }.start() + } +} \ No newline at end of file diff --git a/SchwertUndMagieOnPebbleCompanionApp/app/src/main/java/de/ladkau/schwertundmagieonpebblecompanionapp/EmulatorService.kt b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/java/de/ladkau/schwertundmagieonpebblecompanionapp/EmulatorService.kt new file mode 100644 index 0000000..a5ba29c --- /dev/null +++ b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/java/de/ladkau/schwertundmagieonpebblecompanionapp/EmulatorService.kt @@ -0,0 +1,74 @@ +package de.ladkau.schwertundmagieonpebblecompanionapp + +import android.app.Service +import android.content.Context +import android.content.Intent +import android.os.IBinder +import com.getpebble.android.kit.PebbleKit +import com.getpebble.android.kit.PebbleKit.PebbleDataReceiver +import com.getpebble.android.kit.util.PebbleDictionary +import java.util.UUID + +class EmulatorService : Service() { + private val PEBBLE_APP_UUID = UUID.fromString("6d616769-652d-c64p-ebbl-e57591684000") + private val KEY_COMMAND = 1 + + private lateinit var emulatorEngine: C64Engine + private lateinit var watchStreamer: PebbleStreamer + private var isRunning = false + private var pebbleDataReceiver: PebbleDataReceiver? = null + + override fun onCreate() { + super.onCreate() + emulatorEngine = C64Engine() + watchStreamer = PebbleStreamer(this) + + // Boot standard disk path containing Schwert und Magie Part 1 + val romPath = filesDir.absolutePath + "/schwert_und_magie_1.d64" + emulatorEngine.initEmulator(romPath) + + setupPebbleInputReceiver() + startEmulationLoop() + } + + private fun setupPebbleInputReceiver() { + pebbleDataReceiver = object : PebbleDataReceiver(PEBBLE_APP_UUID) { + override fun receiveData(context: Context?, transactionId: Int, data: PebbleDictionary) { + // Read ASCII string parsed by watch selections + val command = data.getString(KEY_COMMAND) + if (command != null) { + emulatorEngine.handleWatchInput(command) + } + } + } + PebbleKit.registerReceivedDataHandler(this, pebbleDataReceiver) + } + + private fun startEmulationLoop() { + isRunning = true + Thread { + val TargetFrameTimeMs = 33 // Aiming roughly around standard video refresh increments + while (isRunning) { + val startTime = System.currentTimeMillis() + + emulatorEngine.runFrame() + watchStreamer.processAndStreamFrame(emulatorEngine) + + val elapsed = System.currentTimeMillis() - startTime + if (elapsed < TargetFrameTimeMs) { + Thread.sleep(TargetFrameTimeMs - elapsed) + } + } + }.start() + } + + override fun onDestroy() { + isRunning = false + super.onDestroy() + try { + unregisterReceiver(pebbleDataReceiver) + } catch (e: Exception) { /* Context safety cleanup */ } + } + + override fun onBind(intent: Intent?): IBinder? = null +} \ No newline at end of file diff --git a/SchwertUndMagieOnPebbleCompanionApp/app/src/main/java/de/ladkau/schwertundmagieonpebblecompanionapp/MainActivity.kt b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/java/de/ladkau/schwertundmagieonpebblecompanionapp/MainActivity.kt new file mode 100644 index 0000000..5ce6dc2 --- /dev/null +++ b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/java/de/ladkau/schwertundmagieonpebblecompanionapp/MainActivity.kt @@ -0,0 +1,100 @@ +package de.ladkau.schwertundmagieonpebblecompanionapp + +import android.os.Bundle +import android.os.Handler +import android.os.Looper +import android.util.Log +import android.widget.ScrollView +import android.widget.TextView +import androidx.appcompat.app.AppCompatActivity +import fi.iki.elonen.NanoHTTPD +import java.text.SimpleDateFormat +import java.util.Date +import java.util.Locale + +private const val PORT = 8888 +private const val TAG = "SuM" + +class MainActivity : AppCompatActivity() { + + private lateinit var tvStatus: TextView + private lateinit var tvTime: TextView + private lateinit var tvLog: TextView + private lateinit var scrollLog: ScrollView + + private val mainHandler = Handler(Looper.getMainLooper()) + private val timeFormat = SimpleDateFormat("HH:mm:ss", Locale.getDefault()) + private var server: CompanionServer? = null + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_main) + + tvStatus = findViewById(R.id.tv_status) + tvTime = findViewById(R.id.tv_time) + tvLog = findViewById(R.id.tv_log) + scrollLog = findViewById(R.id.scroll_log) + + server = CompanionServer(PORT, timeFormat, + onTimeFetched = { time -> + mainHandler.post { tvTime.text = "Serving time: $time" } + }, + onKey = { cmd -> + Log.d(TAG, "Key received: $cmd") + mainHandler.post { appendLog(cmd) } + } + ) + try { + server?.start() + tvStatus.text = "Listening on localhost:$PORT" + Log.d(TAG, "HTTP server started on port $PORT") + } catch (e: Exception) { + tvStatus.text = "Server error: ${e.message}" + Log.e(TAG, "Failed to start server", e) + } + } + + private fun appendLog(entry: String) { + val timestamp = timeFormat.format(Date()) + tvLog.text = "[$timestamp] $entry\n${tvLog.text}" + scrollLog.post { scrollLog.scrollTo(0, 0) } + } + + override fun onDestroy() { + super.onDestroy() + server?.stop() + } +} + +class CompanionServer( + port: Int, + private val timeFormat: SimpleDateFormat, + private val onTimeFetched: (String) -> Unit, + private val onKey: (String) -> Unit +) : NanoHTTPD(port) { + + override fun serve(session: IHTTPSession): Response { + Log.d(TAG, "HTTP ${session.method} ${session.uri} params=${session.parameters}") + val response = when (session.uri) { + "/time" -> { + val time = timeFormat.format(Date()) + onTimeFetched(time) + newFixedLengthResponse( + Response.Status.OK, + "application/json", + """{"time":"$time"}""" + ) + } + "/key" -> { + val cmd = session.parameters["cmd"]?.firstOrNull().orEmpty() + if (cmd.isNotEmpty()) onKey(cmd) + newFixedLengthResponse(Response.Status.OK, "text/plain", "ok") + } + else -> newFixedLengthResponse( + Response.Status.NOT_FOUND, "text/plain", "not found" + ) + } + response.addHeader("Access-Control-Allow-Origin", "*") + return response + } +} diff --git a/SchwertUndMagieOnPebbleCompanionApp/app/src/main/java/de/ladkau/schwertundmagieonpebblecompanionapp/PebbleStreamer.kt b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/java/de/ladkau/schwertundmagieonpebblecompanionapp/PebbleStreamer.kt new file mode 100644 index 0000000..440eaa6 --- /dev/null +++ b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/java/de/ladkau/schwertundmagieonpebblecompanionapp/PebbleStreamer.kt @@ -0,0 +1,76 @@ +package de.ladkau.schwertundmagieonpebblecompanionapp + +import android.content.Context +import android.graphics.Bitmap +import com.getpebble.android.kit.PebbleKit +import com.getpebble.android.kit.util.PebbleDictionary +import java.nio.ByteBuffer +import java.util.UUID + +class PebbleStreamer(private val context: Context) { + // Matches the unique watch app configuration ID + private val PEBBLE_APP_UUID = UUID.fromString("6d616769-652d-c64p-ebbl-e57591684000") + private val KEY_FRAMEBUFFER = 0 + + private val c64Width = 320 + private val c64Height = 200 + private val targetWidth = 144 + private val targetHeight = 168 + + private val rawVideoByteBuffer = ByteBuffer.allocateDirect(c64Width * c64Height * 4) + private val previousPackedFrame = ByteArray(3024) // Base baseline to identify delta frames + + fun processAndStreamFrame(engine: C64Engine) { + rawVideoByteBuffer.clear() + engine.getRawVideoBuffer(rawVideoByteBuffer) + rawVideoByteBuffer.rewind() + + // 1. Downsample raw output directly to 144x168 target matrix via threshold loop + val packedFrame = ByteArray(3024) // 144 * 168 / 8 bits + var byteIndex = 0 + var bitCounter = 0 + var currentByte = 0 + + // Calculate steps for nearest-neighbor scaling while stripping non-essential margins + val scaleX = c64Width.toFloat() / targetWidth.toFloat() + val scaleY = c64Height.toFloat() / targetHeight.toFloat() + + for (y in 0 until targetHeight) { + val sourceY = (y * scaleY).toInt().coerceIn(0, c64Height - 1) + for (x in 0 until targetWidth) { + val sourceX = (x * scaleX).toInt().coerceIn(0, c64Width - 1) + + // Read Pixel Integer (ARGB) + val pixelIdx = (sourceY * c64Width + sourceX) * 4 + val r = rawVideoByteBuffer.get(pixelIdx + 1).toInt() and 0xFF + val g = rawVideoByteBuffer.get(pixelIdx + 2).toInt() and 0xFF + val b = rawVideoByteBuffer.get(pixelIdx + 3).toInt() and 0xFF + + // Traditional relative luminance formula for 1-bit thresholding + val luminance = (0.299 * r + 0.587 * g + 0.114 * b) + val bit = if (luminance > 128) 1 else 0 // 1 = White background, 0 = Dark Text + + // Pack bits securely into destination byte indices + currentByte = (currentByte shl 1) or bit + bitCounter++ + + if (bitCounter == 8) { + packedFrame[byteIndex++] = currentByte.toByte() + currentByte = 0 + bitCounter = 0 + } + } + } + + // 2. Perform simple Dirty Frame Check to preserve BLE airwaves + if (packedFrame.contentEquals(previousPackedFrame)) { + return // Game screen is currently static; abort transfer + } + System.arraycopy(packedFrame, 0, previousPackedFrame, 0, packedFrame.size) + + // 3. Dispatch the payload out to the connected Pebble Watch + val dict = PebbleDictionary() + dict.addBytes(KEY_FRAMEBUFFER, packedFrame) + PebbleKit.sendDataToPebble(context, PEBBLE_APP_UUID, dict) + } +} \ No newline at end of file diff --git a/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/drawable/ic_launcher_background.xml b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..07d5da9 --- /dev/null +++ b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/drawable/ic_launcher_foreground.xml b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 0000000..2b068d1 --- /dev/null +++ b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/layout/activity_main.xml b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..595b6d8 --- /dev/null +++ b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + diff --git a/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..6f3b755 --- /dev/null +++ b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..6f3b755 --- /dev/null +++ b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/mipmap-hdpi/ic_launcher.webp new file mode 100644 index 0000000..c209e78 Binary files /dev/null and b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/mipmap-hdpi/ic_launcher.webp differ diff --git a/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp new file mode 100644 index 0000000..b2dfe3d Binary files /dev/null and b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ diff --git a/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/mipmap-mdpi/ic_launcher.webp new file mode 100644 index 0000000..4f0f1d6 Binary files /dev/null and b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/mipmap-mdpi/ic_launcher.webp differ diff --git a/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp new file mode 100644 index 0000000..62b611d Binary files /dev/null and b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ diff --git a/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/mipmap-xhdpi/ic_launcher.webp new file mode 100644 index 0000000..948a307 Binary files /dev/null and b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/mipmap-xhdpi/ic_launcher.webp differ diff --git a/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp new file mode 100644 index 0000000..1b9a695 Binary files /dev/null and b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ diff --git a/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp new file mode 100644 index 0000000..28d4b77 Binary files /dev/null and b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ diff --git a/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp new file mode 100644 index 0000000..9287f50 Binary files /dev/null and b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ diff --git a/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp new file mode 100644 index 0000000..aa7d642 Binary files /dev/null and b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ diff --git a/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp new file mode 100644 index 0000000..9126ae3 Binary files /dev/null and b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ diff --git a/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/values-night/themes.xml b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/values-night/themes.xml new file mode 100644 index 0000000..9470a10 --- /dev/null +++ b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/values-night/themes.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/values/colors.xml b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..c8524cd --- /dev/null +++ b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/values/colors.xml @@ -0,0 +1,5 @@ + + + #FF000000 + #FFFFFFFF + \ No newline at end of file diff --git a/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/values/strings.xml b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..f39ec7b --- /dev/null +++ b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + SchwertUndMagieOnPebbleCompanionApp + \ No newline at end of file diff --git a/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/values/themes.xml b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/values/themes.xml new file mode 100644 index 0000000..7723318 --- /dev/null +++ b/SchwertUndMagieOnPebbleCompanionApp/app/src/main/res/values/themes.xml @@ -0,0 +1,9 @@ + + + + +