diff --git a/android/build.gradle.kts b/android/build.gradle.kts index 5afd25b0..e9a0a68a 100644 --- a/android/build.gradle.kts +++ b/android/build.gradle.kts @@ -14,6 +14,7 @@ * * along with this program. If not, see . */ +import Extras.Android.Acra import com.android.build.gradle.internal.cxx.configure.gradleLocalProperties import org.jetbrains.compose.compose @@ -22,9 +23,6 @@ plugins { kotlin("android") id("kotlin-parcelize") id("org.jetbrains.compose") - id("com.google.gms.google-services") - id("com.google.firebase.crashlytics") - id("com.google.firebase.firebase-perf") } group = "com.shabinder" @@ -32,6 +30,10 @@ version = Versions.versionName repositories { google() + mavenCentral() + // Remove jcenter as soon as following issue closes + // https://github.com/matomo-org/matomo-sdk-android/issues/301 + jcenter() } android { @@ -126,13 +128,15 @@ dependencies { // Extras Extras.Android.apply { + implementation(Acra.notification) + implementation(Acra.http) implementation(appUpdator) - implementation(razorpay) + implementation(matomo) } implementation("dev.icerock.moko:parcelize:0.6.1") implementation("com.github.shabinder:storage-chooser:2.0.4.45") - implementation("com.google.accompanist:accompanist-insets:0.9.0") + implementation("com.google.accompanist:accompanist-insets:0.9.1") // Test testImplementation("junit:junit:4.13.2") diff --git a/android/src/main/java/com/shabinder/spotiflyer/App.kt b/android/src/main/java/com/shabinder/spotiflyer/App.kt index a2050335..36ffd831 100644 --- a/android/src/main/java/com/shabinder/spotiflyer/App.kt +++ b/android/src/main/java/com/shabinder/spotiflyer/App.kt @@ -17,8 +17,14 @@ package com.shabinder.spotiflyer import android.app.Application +import android.content.Context import com.shabinder.common.di.initKoin import com.shabinder.spotiflyer.di.appModule +import org.acra.config.httpSender +import org.acra.config.notification +import org.acra.data.StringFormat +import org.acra.ktx.initAcra +import org.acra.sender.HttpSender import org.koin.android.ext.koin.androidContext import org.koin.android.ext.koin.androidLogger import org.koin.core.component.KoinComponent @@ -29,11 +35,42 @@ class App: Application(), KoinComponent { super.onCreate() val loggingEnabled = true - + // KOIN - DI initKoin(loggingEnabled) { androidLogger(Level.NONE) // No virtual method elapsedNow androidContext(this@App) modules(appModule(loggingEnabled)) } } + + @Suppress("SpellCheckingInspection") + override fun attachBaseContext(base: Context?) { + super.attachBaseContext(base) + // Crashlytics + initAcra { + buildConfigClass = BuildConfig::class.java + reportFormat = StringFormat.JSON + /* + * Prompt User Before Sending Any Crash Report + * Obeying `F-Droid Inclusion Privacy Rules` + * */ + notification { + title = getString(R.string.acra_notification_title) + text = getString(R.string.acra_notification_text) + channelName = getString(R.string.acra_notification_channel) + channelDescription = getString(R.string.acra_notification_channel_desc) + sendOnClick = true + } + // Send Crash Report to self hosted Acrarium (FOSS) + httpSender { + uri = "https://kind-grasshopper-73.telebit.io/acrarium/report" + basicAuthLogin = "sDj2xCKQIxw0dujf" + basicAuthPassword = "O83du0TsgsDJ69zN" + httpMethod = HttpSender.Method.POST + connectionTimeout = 15000 + socketTimeout = 20000 + compress = true + } + } + } } \ No newline at end of file diff --git a/android/src/main/java/com/shabinder/spotiflyer/MainActivity.kt b/android/src/main/java/com/shabinder/spotiflyer/MainActivity.kt index 7756b10d..72b148e7 100644 --- a/android/src/main/java/com/shabinder/spotiflyer/MainActivity.kt +++ b/android/src/main/java/com/shabinder/spotiflyer/MainActivity.kt @@ -17,7 +17,6 @@ package com.shabinder.spotiflyer import android.annotation.SuppressLint -import android.app.Activity import android.content.BroadcastReceiver import android.content.Context import android.content.Intent @@ -51,12 +50,9 @@ import com.google.accompanist.insets.ProvideWindowInsets import com.google.accompanist.insets.navigationBarsPadding import com.google.accompanist.insets.statusBarsHeight import com.google.accompanist.insets.statusBarsPadding -import com.razorpay.Checkout -import com.razorpay.PaymentResultListener import com.shabinder.common.di.* import com.shabinder.common.di.worker.ForegroundService import com.shabinder.common.models.Actions -import com.shabinder.common.models.AllPlatforms import com.shabinder.common.models.DownloadStatus import com.shabinder.common.models.PlatformActions import com.shabinder.common.models.PlatformActions.Companion.SharedPreferencesKey @@ -71,14 +67,13 @@ import com.shabinder.spotiflyer.ui.NetworkDialog import com.shabinder.spotiflyer.ui.PermissionDialog import kotlinx.coroutines.* import kotlinx.coroutines.flow.* -import org.json.JSONObject import org.koin.android.ext.android.inject import java.io.File const val disableDozeCode = 1223 @ExperimentalAnimationApi -class MainActivity : ComponentActivity(), PaymentResultListener { +class MainActivity : ComponentActivity() { private val fetcher: FetchPlatformQueryResult by inject() private val dir: Dir by inject() @@ -134,7 +129,6 @@ class MainActivity : ComponentActivity(), PaymentResultListener { private fun initialise() { checkIfLatestVersion() - Checkout.preload(applicationContext) handleIntentFromExternalActivity() } @@ -237,11 +231,7 @@ class MainActivity : ComponentActivity(), PaymentResultListener { } override fun giveDonation() { - try { - startPayment(this@MainActivity) - }catch (e:Exception) { - openPlatform("",platformLink = "https://razorpay.com/payment-button/pl_GnKuuDBdBu0ank/view/?utm_source=payment_button&utm_medium=button&utm_campaign=payment_button") - } + openPlatform("",platformLink = "https://razorpay.com/payment-button/pl_GnKuuDBdBu0ank/view/?utm_source=payment_button&utm_medium=button&utm_campaign=payment_button") } override fun shareApp() { @@ -390,50 +380,4 @@ class MainActivity : ComponentActivity(), PaymentResultListener { } } } - - override fun onPaymentError(errorCode: Int, response: String?) { - try{ - showPopUpMessage("Payment Failed, Response:$response") - }catch (e: Exception){ - Log.d("Razorpay Payment","Exception in onPaymentSuccess $response") - } - } - - override fun onPaymentSuccess(razorpayPaymentId: String?) { - try{ - showPopUpMessage("Payment Successful, ThankYou!") - }catch (e: Exception){ - showPopUpMessage("Razorpay Payment, Error Occurred.") - Log.d("Razorpay Payment","Exception in onPaymentSuccess, ${e.message}") - } - } - - /* - * RazorPay Payment - * */ - private fun startPayment(mainActivity: Activity) { - val co = Checkout().apply { - setKeyID("rzp_live_3ZQeoFYOxjmXye") - setImage(com.shabinder.common.di.R.drawable.ic_spotiflyer_logo) - } - - try { - val preFill = JSONObject() - - val options = JSONObject().apply { - put("name", "SpotiFlyer") - put("description", "Thanks For the Donation!") - // You can omit the image option to fetch the image from dashboard - // put("image","https://github.com/Shabinder/SpotiFlyer/raw/master/app/SpotifyDownload.png") - put("currency", "INR") - put("amount", "4900") - put("prefill", preFill) - } - - co.open(mainActivity, options) - } catch (e: Exception) { - // showPop("Error in payment: "+ e.message) - e.printStackTrace() - } - } } diff --git a/android/src/main/res/values/strings.xml b/android/src/main/res/values/strings.xml index 4867d84c..c0eb149b 100644 --- a/android/src/main/res/values/strings.xml +++ b/android/src/main/res/values/strings.xml @@ -30,4 +30,8 @@ Share this app with your friends and family. Made with in India + OOPS, SpotiFlyer Crashed + Please Send Crash Report to App Developers, So this unfortunate event may not happen again. + SpotiFlyer_Crashlytics + Notification Channel to send Spotiflyer Crashes. \ No newline at end of file diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index d2937603..602832db 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -32,9 +32,6 @@ repositories { dependencies { implementation("com.android.tools.build:gradle:4.2.0") - implementation("com.google.gms:google-services:4.3.5") - implementation("com.google.firebase:perf-plugin:1.3.5") - implementation("com.google.firebase:firebase-crashlytics-gradle:2.5.2") implementation("org.jlleitschuh.gradle:ktlint-gradle:${Versions.ktLint}") implementation(JetBrains.Compose.gradlePlugin) implementation(JetBrains.Kotlin.gradlePlugin) diff --git a/buildSrc/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/buildSrc/src/main/kotlin/Versions.kt index 6fdd6c0d..cfea348f 100644 --- a/buildSrc/buildSrc/src/main/kotlin/Versions.kt +++ b/buildSrc/buildSrc/src/main/kotlin/Versions.kt @@ -142,8 +142,14 @@ object Extras { const val jaudioTagger = "com.github.Shabinder:JAudioTagger-Android:1.0" const val kermit = "co.touchlab:kermit:${Versions.kermit}" object Android { - val razorpay = "com.razorpay:checkout:1.6.7" - val fetch = "androidx.tonyodev.fetch2:xfetch2:3.1.6" + object Acra { + // Self Hosted Crashlytics (FOSS) + private const val VERSION = "5.8.1-beta11" + val http = "ch.acra:acra-http:$VERSION" + val notification = "ch.acra:acra-notification:$VERSION" + } + // Self Hosted Analytics (FOSS) + val matomo = "org.matomo.sdk:tracker:4.1.2" val appUpdator = "com.github.amitbd1508:AppUpdater:4.1.0" } } diff --git a/common/dependency-injection/build.gradle.kts b/common/dependency-injection/build.gradle.kts index 89fffbd2..d030b2d9 100644 --- a/common/dependency-injection/build.gradle.kts +++ b/common/dependency-injection/build.gradle.kts @@ -40,7 +40,6 @@ kotlin { androidMain { dependencies { implementation(compose.materialIconsExtended) - implementation(Extras.Android.razorpay) implementation(Extras.mp3agic) implementation("com.github.shabinder:storage-chooser:2.0.4.45") // implementation(files("$rootDir/libs/mobile-ffmpeg.aar")) diff --git a/desktop/build.gradle.kts b/desktop/build.gradle.kts index 8129ed79..eb6360ca 100644 --- a/desktop/build.gradle.kts +++ b/desktop/build.gradle.kts @@ -31,6 +31,7 @@ kotlin { kotlinOptions.jvmTarget = "14" } } + sourceSets { val jvmMain by getting { dependencies { @@ -40,6 +41,7 @@ kotlin { implementation(project(":common:compose")) implementation(project(":common:data-models")) implementation(project(":common:root")) + // Decompose implementation(Decompose.decompose) implementation(Decompose.extensionsCompose) @@ -66,8 +68,10 @@ compose.desktop { packageName = "SpotiFlyer" copyright = "© 2021 Shabinder. All rights reserved." vendor = "Shabinder" + val iconsRoot = project.file("src/jvmMain/resources/drawable") macOS { + bundleID = "com.shabinder.spotiflyer" iconFile.set(iconsRoot.resolve("spotiflyer.icns")) } windows {