Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 8 additions & 5 deletions .github/workflows/continuous-integration.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,11 @@ on:
- synchronize
- ready_for_review

permissions:
contents: read
pull-requests: write
checks: write

env:
GRADLE_OPTS: -Dorg.gradle.daemon=false -Dorg.gradle.jvmargs="-XX:+HeapDumpOnOutOfMemoryError"

Expand Down Expand Up @@ -37,20 +42,18 @@ jobs:
run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties

- name: Set up JDK 17
uses: actions/setup-java@v3
uses: actions/setup-java@v4
with:
distribution: 'zulu'
java-version: 17
cache: 'gradle'

- name: Setup Gradle
uses: gradle/gradle-build-action@v2
uses: gradle/actions/setup-gradle@v4

- name: "Lint Project"
run: "support/scripts/lint"

- name: "Gradle cache"
uses: gradle/gradle-build-action@v2

- name: "Build and Run Unit Tests"
run: "support/scripts/unit-test"

Expand Down
19 changes: 12 additions & 7 deletions .github/workflows/continuous_deployment.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,11 @@ on:
push:
branches: [main]

permissions:
contents: read

concurrency:
group: cd-${{ github.head_ref }}
group: cd-${{ github.ref }}
cancel-in-progress: true

env:
Expand All @@ -31,17 +34,18 @@ jobs:
run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties

- name: Set up JDK 17
uses: actions/setup-java@v3
uses: actions/setup-java@v4
with:
distribution: 'zulu'
java-version: 17
cache: 'gradle'

- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4

- name: "Lint Project"
run: "support/scripts/lint"

- name: "Gradle cache"
uses: gradle/gradle-build-action@v2

- name: "Build and Run Unit Tests"
run: "support/scripts/unit-test"

Expand Down Expand Up @@ -80,12 +84,13 @@ jobs:
uses: actions/download-artifact@v4
with:
name: app-bundle
path: .

- name: "Upload bundle to Play Store"
uses: r0adkll/upload-google-play@v1
uses: r0adkll/upload-google-play@v1.1.3
with:
serviceAccountJsonPlainText: ${{ secrets.GOOGLE_SERVICE_ACCOUNT }}
packageName: com.simplecityapps.shuttle
releaseFiles: bundle/release/app-release.aab
releaseFiles: android/app/build/outputs/bundle/release/app-release.aab
track: internal
status: completed
8 changes: 6 additions & 2 deletions .github/workflows/shellcheck.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,18 @@ on:
- '.github/workflows/shellcheck.yml'
- 'support/scripts/**'

permissions:
contents: read
pull-requests: write

jobs:
shellcheck:
name: ShellCheck
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: ShellCheck Support Scripts
uses: reviewdog/action-shellcheck@v1.15
uses: reviewdog/action-shellcheck@v1.27
with:
reporter: github-pr-review
path: "support/scripts"
Expand Down
9 changes: 7 additions & 2 deletions .github/workflows/yamllint.yml
Original file line number Diff line number Diff line change
@@ -1,17 +1,22 @@
name: Yaml Lint

on:
pull_request:
branches: [main]
paths:
- '**.yml'

permissions:
contents: read
pull-requests: write

jobs:
yamllint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: yaml-lint
uses: reviewdog/action-yamllint@v1.6
uses: reviewdog/action-yamllint@v1.20
with:
level: error
reporter: github-pr-review
Expand Down
10 changes: 0 additions & 10 deletions .idea/deploymentTargetSelector.xml

This file was deleted.

Empty file.
13 changes: 9 additions & 4 deletions android/app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,12 @@ plugins {

android {

compileSdk = 35
compileSdk = 36

defaultConfig {
applicationId = "com.simplecityapps.shuttle"
minSdk = 21
targetSdk = 35
minSdk = 23
targetSdk = 36
versionName = versionName()
versionCode = versionCode()
vectorDrawables.useSupportLibrary = true
Expand Down Expand Up @@ -79,7 +79,10 @@ android {

kotlinOptions {
jvmTarget = JavaVersion.VERSION_11.toString()
freeCompilerArgs = freeCompilerArgs + "-Xopt-in=kotlin.RequiresOptIn"
freeCompilerArgs = freeCompilerArgs + listOf(
"-Xopt-in=kotlin.RequiresOptIn",
"-Xopt-in=kotlin.time.ExperimentalTime"
)
}
lint {
abortOnError = false
Expand All @@ -99,7 +102,9 @@ android {
implementation(composeBom)
androidTestImplementation(composeBom)
implementation(libs.kotlinx.collections.immutable)
implementation(libs.kotlinx.datetime)
implementation(libs.androidx.material3)
implementation("androidx.compose.material:material-icons-extended")

// Android Studio Preview support
implementation(libs.androidx.ui.tooling.preview)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ import android.view.View
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import androidx.fragment.app.FragmentManager
import com.google.firebase.crashlytics.ktx.crashlytics
import com.google.firebase.ktx.Firebase
import com.google.firebase.Firebase
import com.google.firebase.crashlytics.crashlytics
import com.simplecityapps.shuttle.BuildConfig
import com.simplecityapps.shuttle.persistence.GeneralPreferenceManager
import com.simplecityapps.shuttle.ui.common.ActivityLifecycleCallbacksAdapter
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ constructor(
Timber.v("Billing client available")
billingManager.queryPurchases()
coroutineScope.launch {
billingManager.querySkuDetails()
billingManager.queryProductDetails()
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,7 @@ constructor(
withContext(Dispatchers.Main) {
view?.setLoading(TagEditorContract.LoadingState.WritingTags(index, editables.size))
}
return@mapIndexed song to kTagLib.writeMetadata(pfd.detachFd(), metadata)
return@mapIndexed song to kTagLib.writeMetadata(pfd.detachFd(), metadata, uri.lastPathSegment)
}
} catch (e: IllegalStateException) {
Timber.e(e, "Failed to update tags")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,12 +45,12 @@ import com.squareup.phrase.Phrase
import dagger.hilt.android.AndroidEntryPoint
import java.util.Calendar
import javax.inject.Inject
import kotlin.time.Instant.Companion.fromEpochMilliseconds
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.cancelChildren
import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.launch
import kotlinx.datetime.Instant.Companion.fromEpochMilliseconds

@AndroidEntryPoint
class HomeFragment :
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.simplecityapps.shuttle.ui.screens.main

import com.google.firebase.crashlytics.ktx.crashlytics
import com.google.firebase.ktx.Firebase
import com.google.firebase.Firebase
import com.google.firebase.crashlytics.crashlytics
import com.simplecityapps.playback.queue.QueueChangeCallback
import com.simplecityapps.playback.queue.QueueManager
import com.simplecityapps.playback.queue.QueueWatcher
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import androidx.fragment.app.DialogFragment
import androidx.fragment.app.FragmentManager
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.RecyclerView
import com.android.billingclient.api.SkuDetails
import com.android.billingclient.api.ProductDetails
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.firebase.remoteconfig.FirebaseRemoteConfig
import com.simplecityapps.adapter.RecyclerAdapter
Expand All @@ -22,7 +22,7 @@ import kotlinx.coroutines.flow.onEach

@AndroidEntryPoint
class PurchaseDialogFragment : DialogFragment() {
private var enabledSkus =
private var enabledProductIds =
listOf(
"s2_subscription_full_version_monthly",
"s2_subscription_full_version_yearly",
Expand All @@ -39,7 +39,7 @@ class PurchaseDialogFragment : DialogFragment() {

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
if (firebaseConfig.getString("pricing_tier") == "low") {
enabledSkus =
enabledProductIds =
listOf(
"s2_subscription_full_version_yearly_low",
"s2_iap_full_version_low"
Expand All @@ -48,17 +48,17 @@ class PurchaseDialogFragment : DialogFragment() {

adapter = RecyclerAdapter(lifecycleScope)

billingManager.skuDetails
billingManager.productDetails
.onEach { detailsList ->
adapter.update(
detailsList
.filter { enabledSkus.contains(it.sku) }
.map { skuDetails ->
.filter { enabledProductIds.contains(it.productId) }
.map { productDetails ->
SkuBinder(
skuDetails,
productDetails,
object : SkuBinder.Listener {
override fun onClick(skuDetails: SkuDetails) {
billingManager.launchPurchaseFlow(requireActivity(), skuDetails)
override fun onClick(productDetails: ProductDetails) {
billingManager.launchPurchaseFlow(requireActivity(), productDetails)
dismiss()
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,14 @@ import android.widget.Button
import android.widget.TextView
import androidx.core.view.isInvisible
import com.android.billingclient.api.BillingClient
import com.android.billingclient.api.SkuDetails
import com.android.billingclient.api.ProductDetails
import com.simplecityapps.adapter.ViewBinder
import com.simplecityapps.shuttle.R
import com.simplecityapps.shuttle.ui.common.recyclerview.ViewTypes

class SkuBinder(val skuDetails: SkuDetails, val litener: Listener) : ViewBinder {
class SkuBinder(val productDetails: ProductDetails, val litener: Listener) : ViewBinder {
interface Listener {
fun onClick(skuDetails: SkuDetails)
fun onClick(productDetails: ProductDetails)
}

override fun createViewHolder(parent: ViewGroup): ViewHolder = ViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.list_item_sku, parent, false))
Expand All @@ -29,7 +29,7 @@ class SkuBinder(val skuDetails: SkuDetails, val litener: Listener) : ViewBinder

init {
itemView.setOnClickListener {
viewBinder?.litener?.onClick(viewBinder!!.skuDetails)
viewBinder?.litener?.onClick(viewBinder!!.productDetails)
}
}

Expand All @@ -39,12 +39,15 @@ class SkuBinder(val skuDetails: SkuDetails, val litener: Listener) : ViewBinder
) {
super.bind(viewBinder, isPartial)

title.text = viewBinder.skuDetails.title.substringBefore('(')
subtitle.text = viewBinder.skuDetails.description
price.text = viewBinder.skuDetails.price
priceOutlined.text = viewBinder.skuDetails.price
price.isInvisible = viewBinder.skuDetails.type == BillingClient.SkuType.SUBS
priceOutlined.isInvisible = viewBinder.skuDetails.type == BillingClient.SkuType.INAPP
title.text = viewBinder.productDetails.name.substringBefore('(')
subtitle.text = viewBinder.productDetails.description
val formattedPrice = viewBinder.productDetails.oneTimePurchaseOfferDetails?.formattedPrice
?: viewBinder.productDetails.subscriptionOfferDetails?.firstOrNull()?.pricingPhases?.pricingPhaseList?.firstOrNull()?.formattedPrice
?: ""
price.text = formattedPrice
priceOutlined.text = formattedPrice
price.isInvisible = viewBinder.productDetails.productType == BillingClient.ProductType.SUBS
priceOutlined.isInvisible = viewBinder.productDetails.productType == BillingClient.ProductType.INAPP
}
}
}
4 changes: 2 additions & 2 deletions android/core/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@ apply plugin: 'com.google.devtools.ksp'
apply plugin: 'dagger.hilt.android.plugin'

android {
compileSdk 35
compileSdk 36

defaultConfig {
minSdkVersion 21
targetSdkVersion 35
targetSdkVersion 36
buildConfigField("String", "PROXY_ADDR", "\"192.168.0.14\"")
buildConfigField("Integer", "PROXY_PORT", "8888")
}
Expand Down
14 changes: 10 additions & 4 deletions android/data/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ plugins {
}

android {
compileSdk = 35
compileSdk = 36

defaultConfig {
minSdk = 21
minSdk = 23
}
namespace = "com.simplecityapps.shuttle.data"

Expand All @@ -20,8 +20,14 @@ android {
kotlinOptions {
jvmTarget = JavaVersion.VERSION_11.toString()
}
}

dependencies {
implementation(libs.kotlinx.datetime)
kotlin {
compilerOptions {
optIn.add("kotlin.time.ExperimentalTime")
}
}

dependencies {
implementation(libs.kotlinx.datetime)
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ import com.simplecityapps.shuttle.model.MediaProviderType
import com.simplecityapps.shuttle.model.Song
import com.simplecityapps.shuttle.parcel.InstantParceler
import com.simplecityapps.shuttle.sorting.SongSortOrder
import kotlin.time.Clock
import kotlin.time.Duration.Companion.days
import kotlin.time.ExperimentalTime
import kotlinx.datetime.Clock
import kotlinx.datetime.Instant
import kotlinx.parcelize.Parcelize
import kotlinx.parcelize.TypeParceler
Expand Down
Loading