diff --git a/.github/workflows/Semgrep.yml b/.github/workflows/Semgrep.yml index 91f455c7..f4dbc32c 100644 --- a/.github/workflows/Semgrep.yml +++ b/.github/workflows/Semgrep.yml @@ -13,7 +13,7 @@ jobs: issues: write steps: - name: Checkout code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Install Semgrep and jq run: | @@ -33,7 +33,7 @@ jobs: cat pretty-results.json - name: Add comment on PR if findings are found - uses: actions/github-script@v6 + uses: actions/github-script@v7 with: script: | // Ensure the context has a pull_request diff --git a/.github/workflows/beta_release.yml b/.github/workflows/beta_release.yml index a4c7adad..cc40ca6b 100644 --- a/.github/workflows/beta_release.yml +++ b/.github/workflows/beta_release.yml @@ -8,11 +8,17 @@ jobs: build-sdk: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 with: fetch-depth: 0 token: ${{ secrets.PAT_ACTIONS }} + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '17' + - name: Get the current branch id: check_step run: | @@ -50,7 +56,7 @@ jobs: git push origin - name: Validate Gradle wrapper - uses: gradle/wrapper-validation-action@e6e38bacfdf1a337459f332974bb2327a31aaf4b + uses: gradle/wrapper-validation-action@v3 - name: Publish package run: | chmod +x gradlew diff --git a/.github/workflows/internal_release.yml b/.github/workflows/internal_release.yml index ca9f0043..658c2916 100644 --- a/.github/workflows/internal_release.yml +++ b/.github/workflows/internal_release.yml @@ -15,15 +15,16 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 with: token: ${{ secrets.PAT_ACTIONS }} fetch-depth: 0 - - name: Set up JDK 12 - uses: actions/setup-java@v1 + - name: Set up JDK 17 + uses: actions/setup-java@v4 with: - java-version: 12 + distribution: 'temurin' + java-version: '17' - name: Get Previous tag id: previoustag @@ -55,7 +56,7 @@ jobs: git push origin - name: Validate Gradle wrapper - uses: gradle/wrapper-validation-action@e6e38bacfdf1a337459f332974bb2327a31aaf4b + uses: gradle/wrapper-validation-action@v3 - name: Publish package run: | chmod +x gradlew diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 8d5f5ce7..849ad2c6 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -19,29 +19,31 @@ jobs: check-code-quality: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - name: set up JDK - uses: actions/setup-java@v1 + - uses: actions/checkout@v4 + - name: set up JDK 17 + uses: actions/setup-java@v4 with: - java-version: 12 + distribution: 'temurin' + java-version: '17' - name: Grant permissions to gradlew run: chmod +x gradlew - name: Run Android Linter - run: ./gradlew lint + run: ./gradlew :Skyflow:lint build: - + runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - name: set up JDK - uses: actions/setup-java@v1 + - uses: actions/checkout@v4 + - name: set up JDK 17 + uses: actions/setup-java@v4 with: - java-version: 12 + distribution: 'temurin' + java-version: '17' - name: Grant permissions to gradlew run: chmod +x gradlew - name: Build SDK - run: ./gradlew build + run: ./gradlew :Skyflow:build - name: Run Tests id: tests - run: ./gradlew test \ No newline at end of file + run: ./gradlew :Skyflow:test \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index cd71eeec..e47c3f75 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -8,12 +8,17 @@ jobs: build-sdk: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 with: fetch-depth: 0 ref: main token: ${{ secrets.PAT_ACTIONS }} + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '17' - name: Get Previous tag id: previoustag @@ -35,7 +40,7 @@ jobs: git push origin - name: Validate Gradle wrapper - uses: gradle/wrapper-validation-action@e6e38bacfdf1a337459f332974bb2327a31aaf4b + uses: gradle/wrapper-validation-action@v3 - name: Publish package run: | chmod +x gradlew diff --git a/.gitignore b/.gitignore index 8ccc4f86..2aee3dcf 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,4 @@ .externalNativeBuild .cxx local.properties +/android \ No newline at end of file diff --git a/Skyflow/build.gradle b/Skyflow/build.gradle index 162b1c16..e94816a7 100644 --- a/Skyflow/build.gradle +++ b/Skyflow/build.gradle @@ -1,9 +1,7 @@ plugins { id 'com.android.library' - id 'kotlin-android' id 'maven-publish' } -apply plugin: 'kotlin-android' //group='com.github.skyflowapi' //version = rootProject.ext.versionName ext { @@ -17,11 +15,12 @@ ext { } android { - compileSdk 31 + namespace "com.skyflow_android" + compileSdk 35 defaultConfig { minSdk 21 - targetSdk 31 + targetSdk 35 versionCode 1 versionName "1.0" @@ -36,6 +35,10 @@ android { } + buildFeatures { + buildConfig true + } + buildTypes { release { minifyEnabled false @@ -51,17 +54,20 @@ android { } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 } - kotlinOptions { - jvmTarget = '1.8' + publishing { + singleVariant('release') { + withSourcesJar() + } } } -task androidSourcesJar(type: Jar) { - archiveClassifier.set('sources') - from android.sourceSets.main.java.srcDirs +kotlin { + compilerOptions { + jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17) + } } def isBeta = project.hasProperty('beta') ? project.getProperty('beta') : false @@ -77,7 +83,6 @@ afterEvaluate { version mVersionName from components.release - artifact androidSourcesJar pom { name = mLibraryName @@ -91,7 +96,6 @@ afterEvaluate { version mVersionName from components.release - artifact androidSourcesJar pom { name = mLibraryName @@ -105,7 +109,6 @@ afterEvaluate { version mVersionName from components.release - artifact androidSourcesJar pom { name = mLibraryName @@ -127,22 +130,13 @@ afterEvaluate { } } dependencies { - implementation 'androidx.core:core-ktx:1.6.0' - implementation 'androidx.appcompat:appcompat:1.3.1' - implementation 'com.google.android.material:material:1.4.0' - implementation 'androidx.constraintlayout:constraintlayout:2.1.1' + implementation 'androidx.core:core-ktx:1.16.0' + implementation 'com.google.android.material:material:1.12.0' + implementation 'com.squareup.okhttp3:okhttp:4.12.0' testImplementation 'junit:junit:4.13.2' - testImplementation 'org.mockito:mockito-core:4.0.0' + testImplementation 'org.robolectric:robolectric:4.14.1' + testImplementation 'io.mockk:mockk:1.14.11' androidTestImplementation 'androidx.test.ext:junit:1.1.3' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' - implementation 'com.squareup.okhttp3:okhttp:4.9.0' - implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9") - implementation 'com.google.code.gson:gson:2.8.7' - implementation "androidx.core:core-ktx:1.6.0" - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - testImplementation "org.robolectric:robolectric:4.6.1" - testImplementation 'io.mockk:mockk:1.8.5' - androidTestImplementation "org.robolectric:robolectric:4.6.1" } publish.dependsOn assemble diff --git a/Skyflow/src/main/AndroidManifest.xml b/Skyflow/src/main/AndroidManifest.xml index caeaaca6..695c502d 100644 --- a/Skyflow/src/main/AndroidManifest.xml +++ b/Skyflow/src/main/AndroidManifest.xml @@ -1,6 +1,5 @@ - + diff --git a/Skyflow/src/main/kotlin/Skyflow/TextField.kt b/Skyflow/src/main/kotlin/Skyflow/TextField.kt index 8887cca3..e2c9188f 100644 --- a/Skyflow/src/main/kotlin/Skyflow/TextField.kt +++ b/Skyflow/src/main/kotlin/Skyflow/TextField.kt @@ -253,8 +253,8 @@ class TextField @JvmOverloads constructor( private fun changeExpireDateValidations() { validationRules.rules.clear() val expireDateList = mutableListOf("mm/yy", "mm/yyyy", "yy/mm", "yyyy/mm") - if (expireDateList.contains(options.format.toLowerCase())) { - expiryDateFormat = options.format.toLowerCase() + if (expireDateList.contains(options.format.lowercase())) { + expiryDateFormat = options.format.lowercase() validationRules.add(SkyflowValidateExpireDate(format = expiryDateFormat)) } else { Logger.warn(tag, "invalid format for EXPIRATION_DATE", optionsForLogging.logLevel) @@ -270,8 +270,8 @@ class TextField @JvmOverloads constructor( private fun changeYearValidations() { validationRules.rules.clear() val yearList = mutableListOf("yy", "yyyy") - if (yearList.contains(options.format.toLowerCase())) { - yearFormat = options.format.toLowerCase() + if (yearList.contains(options.format.lowercase())) { + yearFormat = options.format.lowercase() validationRules.add(SkyflowValidateYear(format = yearFormat)) } else { Logger.warn(tag, "invalid format for EXPIRATION_YEAR", optionsForLogging.logLevel) diff --git a/Skyflow/src/main/kotlin/Skyflow/collect/elements/validations/SkyflowValidateExpireDate.kt b/Skyflow/src/main/kotlin/Skyflow/collect/elements/validations/SkyflowValidateExpireDate.kt index b7691778..45b769cd 100644 --- a/Skyflow/src/main/kotlin/Skyflow/collect/elements/validations/SkyflowValidateExpireDate.kt +++ b/Skyflow/src/main/kotlin/Skyflow/collect/elements/validations/SkyflowValidateExpireDate.kt @@ -36,7 +36,7 @@ internal class SkyflowValidateExpireDate(var format:String ="mm/yy", override va var monthString = "" var yearString = "" - if(format.toLowerCase().startsWith("m")) { + if(format.lowercase().startsWith("m")) { monthString = text.substring(0, monthChars) yearString = text.substring(text.length - yearChars, text.length) } diff --git a/build.gradle b/build.gradle index 0658edd0..09ed153b 100644 --- a/build.gradle +++ b/build.gradle @@ -1,26 +1,9 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. -buildscript { - ext.kotlin_version = '1.6.0-M1' - repositories { - google() - mavenCentral() - } - dependencies { - classpath 'com.android.tools.build:gradle:7.4.2' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.0" - classpath "com.github.dcendents:android-maven-gradle-plugin:2.0" - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - // NOTE: Do not place your application dependencies here; they belong - // in the individual module build.gradle files - } +plugins { + id 'com.android.library' version '9.2.0' apply false + id 'com.android.application' version '9.2.0' apply false } -//ext { -// compileSdkVersion = 29 -// buildToolsVersion = '29.0.2' -// versionName = '1.0.0' -//} - task clean(type: Delete) { delete rootProject.buildDir } diff --git a/gradle.properties b/gradle.properties index 98bed167..f20a5218 100644 --- a/gradle.properties +++ b/gradle.properties @@ -15,7 +15,5 @@ org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 # Android operating system, and which are packaged with your app"s APK # https://developer.android.com/topic/libraries/support-library/androidx-rn android.useAndroidX=true -# Automatically convert third-party libraries to use AndroidX -android.enableJetifier=true # Kotlin code style for this project: "official" or "obsolete": -kotlin.code.style=official \ No newline at end of file +kotlin.code.style=official diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index f398c33c..5b59ea8e 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-bin.zip networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/samples/build.gradle b/samples/build.gradle index 4605b071..0a2da7e8 100644 --- a/samples/build.gradle +++ b/samples/build.gradle @@ -1,19 +1,21 @@ plugins { id 'com.android.application' - id 'kotlin-android' - id 'org.jetbrains.kotlin.android' } def localProperties = new Properties() -localProperties.load(new FileInputStream(rootProject.file("local.properties"))) +def localPropertiesFile = rootProject.file("local.properties") +if (localPropertiesFile.exists()) { + localProperties.load(new FileInputStream(localPropertiesFile)) +} android { - compileSdk 31 + namespace "com.Skyflow" + compileSdk 35 defaultConfig { applicationId "com.skyflow_android" minSdk 21 - targetSdk 31 + targetSdk 35 versionCode 1 versionName "1.0" @@ -27,6 +29,7 @@ android { buildFeatures { viewBinding true + buildConfig true } buildTypes { @@ -48,28 +51,26 @@ android { } } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - kotlinOptions { - jvmTarget = '1.8' + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 } } -configurations.all { - resolutionStrategy { force 'androidx.core:core-ktx:1.6.0' } + +kotlin { + compilerOptions { + jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17) + } } dependencies { - implementation 'androidx.core:core-ktx:1.6.0' - implementation 'androidx.appcompat:appcompat:1.3.1' - implementation 'com.google.android.material:material:1.4.0' - implementation 'androidx.constraintlayout:constraintlayout:2.1.0' + implementation 'androidx.core:core-ktx:1.16.0' + implementation 'androidx.appcompat:appcompat:1.7.0' + implementation 'com.google.android.material:material:1.12.0' + implementation 'androidx.constraintlayout:constraintlayout:2.2.1' implementation project(path: ':Skyflow') testImplementation 'junit:junit:4.13.2' - implementation 'com.squareup.okhttp3:okhttp:4.9.0' + implementation 'com.squareup.okhttp3:okhttp:4.12.0' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' - implementation "androidx.core:core-ktx:+" - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0") - implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.0") + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1") + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1") } \ No newline at end of file diff --git a/samples/src/main/AndroidManifest.xml b/samples/src/main/AndroidManifest.xml index e0a03908..00503362 100644 --- a/samples/src/main/AndroidManifest.xml +++ b/samples/src/main/AndroidManifest.xml @@ -1,7 +1,6 @@ + xmlns:tools="http://schemas.android.com/tools"> diff --git a/settings.gradle b/settings.gradle index 712e465a..92946936 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,3 +1,11 @@ +pluginManagement { + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { @@ -11,3 +19,4 @@ dependencyResolutionManagement { } rootProject.name = "Skyflow-android" include ':Skyflow' +include ':samples' \ No newline at end of file