Skip to content

Commit 8932d8a

Browse files
authored
Merge pull request #9 from SurjitSahoo/feat/foss-things
Feat/foss things
2 parents d0ec47e + 0c6febb commit 8932d8a

39 files changed

+326
-142
lines changed

.github/workflows/build_app.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,4 @@ jobs:
4141

4242
# Run Build Project
4343
- name: Build gradle project
44-
run: ./gradlew build
44+
run: ./gradlew assembleFossRelease assemblePlayRelease

.github/workflows/release.yml

Lines changed: 3 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -37,45 +37,20 @@ jobs:
3737
echo "${{ secrets.RELEASE_KEYSTORE_BASE64 }}" | base64 --decode > app/kahani-release.jks
3838
3939
- name: Build Release APK
40-
run: ./gradlew assembleRelease
40+
run: ./gradlew assemblePlayRelease
4141
env:
4242
RELEASE_STORE_FILE: kahani-release.jks
4343
RELEASE_STORE_PASSWORD: ${{ secrets.RELEASE_PASSWORD }}
4444
RELEASE_KEY_ALIAS: ${{ secrets.RELEASE_KEY_ALIAS }}
4545
RELEASE_KEY_PASSWORD: ${{ secrets.RELEASE_KEY_PASSWORD }}
4646

47-
- name: Build Changelog
48-
id: build_changelog
49-
uses: mikepenz/release-changelog-builder-action@v5
50-
env:
51-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
52-
with:
53-
configuration: |
54-
{
55-
"categories": [
56-
{
57-
"title": "## 🚀 Features",
58-
"labels": ["feature", "enhancement"]
59-
},
60-
{
61-
"title": "## 🐛 Bug Fixes",
62-
"labels": ["fix", "bug"]
63-
},
64-
{
65-
"title": "## 📦 Dependencies & Maintenance",
66-
"labels": ["chore", "deps", "dependency", "refactor"]
67-
}
68-
],
69-
"template": "{{CHANGELOG}}"
70-
}
71-
7247
- name: Create Release
7348
uses: softprops/action-gh-release@v2
7449
with:
75-
files: app/build/outputs/apk/release/app-release.apk
50+
files: app/build/outputs/apk/play/release/app-play-release.apk
7651
tag_name: v${{ steps.get_version.outputs.version }}
7752
name: Kahani v${{ steps.get_version.outputs.version }}
78-
body: ${{ steps.build_changelog.outputs.changelog }}
53+
body: "Update the Changelog"
7954
draft: false
8055
prerelease: false
8156
env:

app/build.gradle.kts

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,6 @@ android {
6262

6363
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
6464

65-
buildConfigField("String", "CLARITY_PROJECT_ID", "\"vc8bgk8nk9\"")
66-
6765
signingConfigs {
6866
create("release") {
6967
val envKeyStore = System.getenv("RELEASE_STORE_FILE")
@@ -85,6 +83,23 @@ android {
8583
}
8684
}
8785

86+
flavorDimensions += "distribution"
87+
88+
productFlavors {
89+
create("foss") {
90+
dimension = "distribution"
91+
applicationIdSuffix = ".foss"
92+
buildConfigField("String", "APP_NAME_SUFFIX", "\" (FOSS)\"")
93+
buildConfigField("String", "DISTRIBUTION", "\"foss\"")
94+
}
95+
create("play") {
96+
dimension = "distribution"
97+
buildConfigField("String", "APP_NAME_SUFFIX", "\"\"")
98+
buildConfigField("String", "DISTRIBUTION", "\"play\"")
99+
buildConfigField("String", "CLARITY_PROJECT_ID", "\"vc8bgk8nk9\"")
100+
}
101+
}
102+
88103
buildTypes {
89104
release {
90105
val releaseSigningConfig = signingConfigs.getByName("release")
@@ -127,6 +142,15 @@ android {
127142

128143
}
129144

145+
// Disable Google Services and Crashlytics for FOSS flavor tasks
146+
tasks.configureEach {
147+
if (name.contains("Foss", ignoreCase = true)) {
148+
if (name.contains("GoogleServices") || name.contains("Crashlytics") || name.contains("UploadCrashlyticsMappingFile")) {
149+
enabled = false
150+
}
151+
}
152+
}
153+
130154
dependencies {
131155
implementation(project(":lib"))
132156

@@ -188,11 +212,11 @@ dependencies {
188212
implementation(libs.moshi)
189213
implementation(libs.moshi.kotlin)
190214

191-
implementation(libs.microsoft.clarity)
215+
"playImplementation"(libs.microsoft.clarity)
192216

193-
implementation(platform(libs.firebase.bom))
194-
implementation(libs.firebase.crashlytics)
195-
implementation(libs.firebase.analytics)
217+
"playImplementation"(platform(libs.firebase.bom))
218+
"playImplementation"(libs.firebase.crashlytics)
219+
"playImplementation"(libs.firebase.analytics)
196220

197221
debugImplementation(libs.androidx.ui.tooling)
198222
debugImplementation(libs.androidx.ui.test.manifest)

app/src/main/kotlin/org/grakovne/lissen/analytics/AnalyticsModule.kt renamed to app/src/foss/kotlin/org/grakovne/lissen/analytics/AnalyticsModule.kt

File renamed without changes.
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package org.grakovne.lissen.analytics
2+
3+
import org.grakovne.lissen.common.RunningComponent
4+
import javax.inject.Inject
5+
import javax.inject.Singleton
6+
7+
@Singleton
8+
class ClarityComponent
9+
@Inject
10+
constructor() : RunningComponent {
11+
override fun onCreate() {}
12+
13+
fun updateConsent(accepted: Boolean) {}
14+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package org.grakovne.lissen.analytics
2+
3+
import javax.inject.Inject
4+
import javax.inject.Singleton
5+
6+
@Singleton
7+
class ClarityTracker
8+
@Inject
9+
constructor() {
10+
fun setUser(userId: String) {}
11+
12+
fun trackEvent(eventName: String) {}
13+
14+
fun trackEvent(
15+
eventName: String,
16+
value: String,
17+
) {}
18+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package org.grakovne.lissen.common
2+
3+
import androidx.compose.ui.Modifier
4+
5+
fun Modifier.maskForAnalytics(): Modifier = this
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package org.grakovne.lissen.common
2+
3+
import android.content.Context
4+
import android.os.Looper
5+
import android.widget.Toast
6+
import org.grakovne.lissen.R
7+
8+
class CrashHandler(
9+
context: Context,
10+
private val defaultHandler: Thread.UncaughtExceptionHandler?,
11+
) : Thread.UncaughtExceptionHandler {
12+
private val context = context.applicationContext
13+
14+
override fun uncaughtException(
15+
thread: Thread,
16+
ex: Throwable,
17+
) {
18+
try {
19+
object : Thread() {
20+
override fun run() {
21+
Looper.prepare()
22+
Toast.makeText(context, R.string.app_crash_toast, Toast.LENGTH_LONG).show()
23+
24+
// Schedule the looper to quit so the thread doesn't block indefinitely
25+
android.os.Handler(Looper.myLooper()!!).postDelayed(
26+
{ Looper.myLooper()?.quit() },
27+
TOAST_TIMEOUT + 500,
28+
)
29+
30+
Looper.loop()
31+
}
32+
}.start()
33+
34+
Thread.sleep(TOAST_TIMEOUT)
35+
} catch (e: Exception) {
36+
// Ignore errors in the crash handler itself
37+
} finally {
38+
defaultHandler?.uncaughtException(thread, ex)
39+
}
40+
}
41+
42+
companion object {
43+
private const val TOAST_TIMEOUT = 1000L
44+
}
45+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package org.grakovne.lissen.common
2+
3+
import dagger.Binds
4+
import dagger.Module
5+
import dagger.hilt.InstallIn
6+
import dagger.hilt.components.SingletonComponent
7+
8+
@Module
9+
@InstallIn(SingletonComponent::class)
10+
interface CrashReporterModule {
11+
@Binds
12+
fun bindCrashReporter(reporter: NoOpCrashReporter): CrashReporter
13+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package org.grakovne.lissen.common
2+
3+
import timber.log.Timber
4+
import javax.inject.Inject
5+
import javax.inject.Singleton
6+
7+
@Singleton
8+
class NoOpCrashReporter
9+
@Inject
10+
constructor() : CrashReporter {
11+
override fun setCollectionEnabled(enabled: Boolean) {
12+
// Do nothing in FOSS
13+
}
14+
15+
override fun recordException(ex: Throwable) {
16+
Timber.e(ex, "Crash reported (FOSS mode - no remote reporting)")
17+
}
18+
}

0 commit comments

Comments
 (0)