diff --git a/.github/workflows/android-test.yaml b/.github/workflows/android-test.yaml
index 03f6211..9182b8b 100644
--- a/.github/workflows/android-test.yaml
+++ b/.github/workflows/android-test.yaml
@@ -16,7 +16,7 @@ jobs:
steps:
- name: Checkout code
- uses: actions/checkout@v2
+ uses: actions/checkout@v4
- run: echo API_KEY=${{ secrets.TEST_API_KEY }} > example/.env
@@ -26,18 +26,14 @@ jobs:
flutter-version: ${{ env.FLUTTER_VERSION }}
channel: ${{ env.FLUTTER_CHANNEL }}
- # This step enables KVM (Kernel-based Virtual Machine).
- # KVM is a virtualization module in the Linux kernel that allows the
- # kernel to function as a hypervisor. This is necessary for running
- # virtual machines on the host system.
- name: Enable KVM
run: |
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
sudo udevadm control --reload-rules
sudo udevadm trigger --name-match=kvm
- - name: run android tests
+ - name: Run integration test on Android emulator
uses: reactivecircus/android-emulator-runner@v2
with:
api-level: 29
- script: cd example && flutter drive --driver=test_drive/integration_test.dart --target=test/widget_test.dart
\ No newline at end of file
+ script: cd example && flutter drive --driver=test_drive/integration_test.dart --target=test/widget_test.dart
diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index 82a7ebc..b8164e8 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -8,7 +8,7 @@ on:
- '*'
jobs:
build:
- runs-on: macos-latest
+ runs-on: ubuntu-latest
env:
FLUTTER_CHANNEL: stable
@@ -16,16 +16,7 @@ jobs:
steps:
- name: Checkout code
- uses: actions/checkout@v2
-
- - name: fetch submodules
- run: git submodule update --init --recursive
-
- - name: Set up JDK 17
- uses: actions/setup-java@v3
- with:
- java-version: 17
- distribution: 'zulu'
+ uses: actions/checkout@v4
- name: Set up Flutter
uses: subosito/flutter-action@v2
@@ -33,27 +24,13 @@ jobs:
flutter-version: ${{ env.FLUTTER_VERSION }}
channel: ${{ env.FLUTTER_CHANNEL }}
- - name: Install dependencies
- working-directory: example
- run: flutter pub get
-
- run: echo API_KEY=${{ secrets.TEST_API_KEY }} > example/.env
- - name: Build Android
- working-directory: example
- run: flutter build apk --release
-
- - name: Copy iOS
- working-directory: ios/Classes
- run: cp -r confidence-sdk/Sources/Confidence .
- - name: Remove the submodule
- working-directory: ios/Classes
- run: rm -rf confidence-sdk
+ - name: Install dependencies
+ run: flutter pub get
- - name: Remove git submodule
- working-directory: ios/Classes
- run: git rm confidence-sdk
+ - name: Analyze
+ run: flutter analyze
- - name: Build iOS
- working-directory: example
- run: flutter build ios --release --no-codesign
+ - name: Run tests
+ run: flutter test
diff --git a/.github/workflows/ios-test.yaml b/.github/workflows/ios-test.yaml
index 6d8b59f..2bdce66 100644
--- a/.github/workflows/ios-test.yaml
+++ b/.github/workflows/ios-test.yaml
@@ -16,22 +16,7 @@ jobs:
steps:
- name: Checkout code
- uses: actions/checkout@v2
-
- - name: fetch submodules
- run: git submodule update --init --recursive
-
- - name: Copy iOS
- working-directory: ios/Classes
- run: cp -r confidence-sdk/Sources/Confidence .
-
- - name: Remove the submodule
- working-directory: ios/Classes
- run: rm -rf confidence-sdk
-
- - name: Remove git submodule
- working-directory: ios/Classes
- run: git rm confidence-sdk
+ uses: actions/checkout@v4
- uses: futureware-tech/simulator-action@v3
with:
diff --git a/.gitmodules b/.gitmodules
deleted file mode 100644
index 60a0f27..0000000
--- a/.gitmodules
+++ /dev/null
@@ -1,3 +0,0 @@
-[submodule "ios/Classes/confidence-sdk"]
- path = ios/Classes/confidence-sdk
- url = https://github.com/spotify/confidence-sdk-swift
diff --git a/android/.gitignore b/android/.gitignore
deleted file mode 100644
index 161bdcd..0000000
--- a/android/.gitignore
+++ /dev/null
@@ -1,9 +0,0 @@
-*.iml
-.gradle
-/local.properties
-/.idea/workspace.xml
-/.idea/libraries
-.DS_Store
-/build
-/captures
-.cxx
diff --git a/android/build.gradle b/android/build.gradle
deleted file mode 100644
index 36bc0c4..0000000
--- a/android/build.gradle
+++ /dev/null
@@ -1,71 +0,0 @@
-group = "com.example.confidence_flutter_sdk"
-version = "1.0-SNAPSHOT"
-
-buildscript {
- ext.kotlin_version = "2.1.0"
- repositories {
- google()
- mavenCentral()
- }
-
- dependencies {
- classpath("com.android.tools.build:gradle:8.7.3")
- classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version")
- }
-}
-
-allprojects {
- repositories {
- google()
- mavenCentral()
- }
-}
-
-apply plugin: "com.android.library"
-apply plugin: "kotlin-android"
-
-android {
- if (project.android.hasProperty("namespace")) {
- namespace = "com.example.confidence_flutter_sdk"
- }
-
- compileSdk = 34
-
- compileOptions {
- sourceCompatibility = JavaVersion.VERSION_17
- targetCompatibility = JavaVersion.VERSION_17
- }
-
- kotlinOptions {
- jvmTarget = "17"
- }
-
- sourceSets {
- main.java.srcDirs += "src/main/kotlin"
- test.java.srcDirs += "src/test/kotlin"
- }
-
- defaultConfig {
- consumerProguardFiles "proguard-rules.pro"
- }
-
- dependencies {
- implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0")
- implementation("com.spotify.confidence:confidence-sdk-android:0.6.2")
- implementation("org.jetbrains.kotlin:kotlin-reflect:2.1.0")
- testImplementation("org.jetbrains.kotlin:kotlin-test")
- testImplementation("org.mockito:mockito-core:5.1.0")
- }
-
- testOptions {
- unitTests.all {
- useJUnitPlatform()
-
- testLogging {
- events "passed", "skipped", "failed", "standardOut", "standardError"
- outputs.upToDateWhen {false}
- showStandardStreams = true
- }
- }
- }
-}
diff --git a/android/proguard-rules.pro b/android/proguard-rules.pro
deleted file mode 100644
index 8b8eee1..0000000
--- a/android/proguard-rules.pro
+++ /dev/null
@@ -1,17 +0,0 @@
-# ProGuard rules for Confidence Flutter SDK
-# These rules suppress warnings for optional dependencies that may not be present at runtime
-
-# BouncyCastle JSSE Provider warnings
--dontwarn org.bouncycastle.jsse.BCSSLParameters
--dontwarn org.bouncycastle.jsse.BCSSLSocket
--dontwarn org.bouncycastle.jsse.provider.BouncyCastleJsseProvider
-
-# Conscrypt warnings
--dontwarn org.conscrypt.Conscrypt$Version
--dontwarn org.conscrypt.Conscrypt
--dontwarn org.conscrypt.ConscryptHostnameVerifier
-
-# OpenJSSE warnings
--dontwarn org.openjsse.javax.net.ssl.SSLParameters
--dontwarn org.openjsse.javax.net.ssl.SSLSocket
--dontwarn org.openjsse.net.ssl.OpenJSSE
diff --git a/android/settings.gradle b/android/settings.gradle
deleted file mode 100644
index 3fda612..0000000
--- a/android/settings.gradle
+++ /dev/null
@@ -1 +0,0 @@
-rootProject.name = 'confidence_flutter_sdk'
diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml
deleted file mode 100644
index 6e8c0d3..0000000
--- a/android/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
diff --git a/android/src/main/kotlin/com/example/confidence_flutter_sdk/ConfidenceFlutterSdkPlugin.kt b/android/src/main/kotlin/com/example/confidence_flutter_sdk/ConfidenceFlutterSdkPlugin.kt
deleted file mode 100644
index 6c74c37..0000000
--- a/android/src/main/kotlin/com/example/confidence_flutter_sdk/ConfidenceFlutterSdkPlugin.kt
+++ /dev/null
@@ -1,182 +0,0 @@
-package com.example.confidence_flutter_sdk
-
-import android.content.Context
-import com.spotify.confidence.Confidence
-import com.spotify.confidence.ConfidenceFactory
-import com.spotify.confidence.ConfidenceValue
-import com.spotify.confidence.LoggingLevel
-import com.spotify.confidence.FlagResolution
-import com.spotify.confidence.client.SdkMetadata
-import io.flutter.embedding.engine.plugins.FlutterPlugin
-import io.flutter.embedding.engine.plugins.activity.ActivityAware
-import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding
-import io.flutter.plugin.common.MethodCall
-import io.flutter.plugin.common.MethodChannel
-import io.flutter.plugin.common.MethodChannel.MethodCallHandler
-import io.flutter.plugin.common.MethodChannel.Result
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.launch
-import kotlinx.serialization.json.Json
-import java.io.File
-
-/** ConfidenceFlutterSdkPlugin */
-class ConfidenceFlutterSdkPlugin: FlutterPlugin, MethodCallHandler, ActivityAware {
- /// The MethodChannel that will the communication between Flutter and native Android
- ///
- /// This local reference serves to register the plugin with the Flutter Engine and unregister it
- /// when the Flutter Engine is detached from the Activity
- private lateinit var channel : MethodChannel
- private lateinit var confidence: Confidence
- private val coroutineScope = CoroutineScope(Dispatchers.IO)
- private lateinit var context: Context
-
- override fun onAttachedToEngine(flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) {
- channel = MethodChannel(flutterPluginBinding.binaryMessenger, "confidence_flutter_sdk")
- channel.setMethodCallHandler(this)
- }
-
- override fun onMethodCall(call: MethodCall, result: Result) {
- when(call.method) {
- "flush" -> {
- confidence.flush()
- }
- "setup" -> {
- val apiKey = call.argument("apiKey")!!
- val loggingLevel = call.argument("loggingLevel")!!
- confidence = ConfidenceFactory.create(
- context,
- apiKey,
- loggingLevel = LoggingLevel.valueOf(loggingLevel)
- )
- result.success(null)
- }
- "fetchAndActivate" -> {
- coroutineScope.launch {
- confidence.fetchAndActivate()
- result.success(null)
- }
- }
- "activateAndFetchAsync" -> {
- coroutineScope.launch {
- confidence.activate()
- confidence.asyncFetch()
- result.success(null)
- }
- }
- "isStorageEmpty" -> {
- val isEmpty = confidence.isStorageEmpty()
- result.success(isEmpty)
- }
- "getString" -> {
- val key = call.argument("key")!!
- val defaultValue = call.argument("defaultValue")
- val value = confidence.getValue(key, defaultValue)
- result.success(value)
- }
- "getDouble" -> {
- val key = call.argument("key")!!
- val defaultValue = call.argument("defaultValue")
- val value = confidence.getValue(key, defaultValue)
- result.success(value)
- }
- "getBool" -> {
- val key = call.argument("key")!!
- val defaultValue = call.argument("defaultValue")
- val value = confidence.getValue(key, defaultValue)
- result.success(value)
- }
- "getInt" -> {
- val key = call.argument("key")!!
- val defaultValue = call.argument("defaultValue")
- val value = confidence.getValue(key, defaultValue)
- result.success(value)
- }
- "getObject" -> {
- val key = call.argument("key")!!
- val wrappedDefaultValue = call.argument