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 {