diff --git a/apps/readest-app/scripts/release-google-play.sh b/apps/readest-app/scripts/release-google-play.sh index 3535c0bd..8eef6d31 100755 --- a/apps/readest-app/scripts/release-google-play.sh +++ b/apps/readest-app/scripts/release-google-play.sh @@ -38,8 +38,9 @@ if grep -q 'MANAGE_EXTERNAL_STORAGE' "$MANIFEST"; then fi fi -echo "🚀 Running: pnpm tauri android build" -# pnpm tauri android build --config src-tauri/tauri.playstore.conf.json +source .env.google-play.local +echo "🚀 Running: pnpm tauri android build (googleplay flavor)" +ORG_GRADLE_PROJECT_storeFlavor=googleplay pnpm tauri android build --config src-tauri/tauri.playstore.conf.json # --- ADD PERMISSION BACK AFTER BUILD --- if ! grep -q 'REQUEST_INSTALL_PACKAGES' "$MANIFEST"; then @@ -56,7 +57,6 @@ if ! grep -q 'MANAGE_EXTERNAL_STORAGE' "$MANIFEST"; then " "$MANIFEST" fi -source .env.google-play.local if [[ -z "$GOOGLE_PLAY_JSON_KEY_FILE" ]]; then echo "❌ GOOGLE_PLAY_JSON_KEY_FILE is not set" exit 1 diff --git a/apps/readest-app/src-tauri/gen/android/app/build.gradle.kts b/apps/readest-app/src-tauri/gen/android/app/build.gradle.kts index 02d48d62..6c9bef7f 100644 --- a/apps/readest-app/src-tauri/gen/android/app/build.gradle.kts +++ b/apps/readest-app/src-tauri/gen/android/app/build.gradle.kts @@ -29,6 +29,8 @@ android { targetSdk = 36 versionCode = tauriProperties.getProperty("tauri.android.versionCode", "1").toInt() versionName = tauriProperties.getProperty("tauri.android.versionName", "1.0") + val storeFlavor = project.findProperty("storeFlavor")?.toString() ?: "foss" + missingDimensionStrategy("store", storeFlavor) } signingConfigs { if (keystorePropertiesFile.exists()) { diff --git a/apps/readest-app/src-tauri/gen/android/app/src/main/java/com/bilingify/readest/MainActivity.kt b/apps/readest-app/src-tauri/gen/android/app/src/main/java/com/bilingify/readest/MainActivity.kt index 014e87e1..63601f96 100644 --- a/apps/readest-app/src-tauri/gen/android/app/src/main/java/com/bilingify/readest/MainActivity.kt +++ b/apps/readest-app/src-tauri/gen/android/app/src/main/java/com/bilingify/readest/MainActivity.kt @@ -30,11 +30,6 @@ class MainActivity : TauriActivity(), KeyDownInterceptor { override fun onWebViewCreate(webView: WebView) { wv = webView - // Disable native long-click on the WebView to prevent the system image context menu. - // On Android 8.0 (Oreo), the native image context menu can freeze the entire touch system, - // requiring a forced reboot. Text selection still works as it's handled by WebView internally. - webView.isLongClickable = false - webView.setOnLongClickListener { true } } private val keyEventMap = mapOf( diff --git a/apps/readest-app/src-tauri/plugins/tauri-plugin-native-bridge/android/build.gradle.kts b/apps/readest-app/src-tauri/plugins/tauri-plugin-native-bridge/android/build.gradle.kts index f864ee86..63a5ec15 100644 --- a/apps/readest-app/src-tauri/plugins/tauri-plugin-native-bridge/android/build.gradle.kts +++ b/apps/readest-app/src-tauri/plugins/tauri-plugin-native-bridge/android/build.gradle.kts @@ -30,10 +30,21 @@ android { kotlinOptions { jvmTarget = "1.8" } + + flavorDimensions += "store" + productFlavors { + create("foss") { + dimension = "store" + } + create("googleplay") { + dimension = "store" + } + } } dependencies { - implementation("com.android.billingclient:billing-ktx:7.1.1") + "googleplayImplementation"("com.android.billingclient:billing-ktx:7.1.1") + "googleplayImplementation"("com.google.android.gms:play-services-base:18.5.0") implementation("androidx.core:core-ktx:1.12.0") implementation("androidx.appcompat:appcompat:1.6.1") implementation("androidx.browser:browser:1.8.0") diff --git a/apps/readest-app/src-tauri/plugins/tauri-plugin-native-bridge/android/src/foss/java/com/readest/native_bridge/BillingManager.kt b/apps/readest-app/src-tauri/plugins/tauri-plugin-native-bridge/android/src/foss/java/com/readest/native_bridge/BillingManager.kt new file mode 100644 index 00000000..8608e3f3 --- /dev/null +++ b/apps/readest-app/src-tauri/plugins/tauri-plugin-native-bridge/android/src/foss/java/com/readest/native_bridge/BillingManager.kt @@ -0,0 +1,31 @@ +package com.readest.native_bridge + +import android.app.Activity +import android.util.Log + +class BillingManager(private val activity: Activity) { + companion object { + private const val TAG = "BillingManager" + } + + fun isBillingAvailable(): Boolean { + return false + } + + fun initialize(callback: (Boolean) -> Unit) { + Log.d(TAG, "Google Play billing not available in this build") + callback(false) + } + + fun fetchProducts(productIds: List, callback: (List) -> Unit) { + callback(emptyList()) + } + + fun purchaseProduct(productId: String, callback: (PurchaseData?) -> Unit) { + callback(null) + } + + fun restorePurchases(callback: (List) -> Unit) { + callback(emptyList()) + } +} diff --git a/apps/readest-app/src-tauri/plugins/tauri-plugin-native-bridge/android/src/main/java/BillingManager.kt b/apps/readest-app/src-tauri/plugins/tauri-plugin-native-bridge/android/src/googleplay/java/com/readest/native_bridge/BillingManager.kt similarity index 100% rename from apps/readest-app/src-tauri/plugins/tauri-plugin-native-bridge/android/src/main/java/BillingManager.kt rename to apps/readest-app/src-tauri/plugins/tauri-plugin-native-bridge/android/src/googleplay/java/com/readest/native_bridge/BillingManager.kt