Skip to content

Commit c9cab89

Browse files
Merge pull request #2456 from hussainmohd-a/main
2 parents 2f4ce71 + feeaee4 commit c9cab89

File tree

262 files changed

+12416
-3548
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

262 files changed

+12416
-3548
lines changed

.github/detekt-config.yml

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,31 @@
1+
# Detekt configuration file
2+
# Excludes test files from code scanning
3+
14
style:
2-
MaxLineLength:
5+
MaxLineLength:
36
active: true
47
maxLineLength: 1400
58
excludePackageStatements: true
69
excludeImportStatements: true
710
excludeCommentStatements: false
811
excludeRawStrings: true
12+
ForbiddenComment:
13+
active: false
14+
15+
exceptions:
16+
TooGenericExceptionCaught:
17+
active: true
18+
exceptionNames:
19+
- Throwable
20+
- Error
21+
22+
coroutines:
23+
RedundantSuspendModifier:
24+
active: false
25+
26+
complexity:
27+
TooManyFunctions:
28+
active: false
29+
LargeClass:
30+
active: false
931

.github/workflows/sa.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ jobs:
3333
java -jar detekt-cli-all.jar \
3434
--build-upon-default-config \
3535
--config .github/detekt-config.yml \
36+
--excludes '**/src/test/**,**/src/androidTest/**,**/src/testDebug/**,**/src/testRelease/**,**/src/androidTestDebug/**,**/src/androidTestRelease/**,**/*Test.kt,**/*Tests.kt,**/*Spec.kt' \
3637
--fail-on-severity ${SEV} \
3738
--analysis-mode full \
3839
--api-version ${KOTLIN_VER} \
@@ -70,6 +71,7 @@ jobs:
7071
# category: rethink-app
7172

7273
- name: 🗃️ Artifact
74+
if: always()
7375
uses: actions/upload-artifact@v4
7476
with:
7577
name: "rethink-app-detekt-${{ github.run_id }}.sarif"

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,6 @@ app/src/headless/assets
2828
/tools
2929
/.kotlin/sessions
3030
app/google-services.json
31+
app/fdroidFull/release
32+
app/playFull/release
33+
app/websiteFull/release

app/build.gradle

Lines changed: 34 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,35 @@ plugins {
44
id 'kotlin-android'
55
}
66

7+
// ensure consistent JVM version for Java and Kotlin compilation
8+
// kotl.in/gradle/jvm/toolchain
9+
java {
10+
toolchain {
11+
languageVersion = JavaLanguageVersion.of(17)
12+
}
13+
}
14+
15+
kotlin {
16+
jvmToolchain(17)
17+
}
18+
719
// apply Google Services and Firebase Crashlytics plugins conditionally
820
// strategy: For command-line builds, check task names. For IDE, always apply plugins
921
// but they'll only process play/website variants (Firebase deps are scoped to those variants)
1022
def taskNames = gradle.startParameter.taskNames.join(',').toLowerCase()
11-
def isFdroidBuild = taskNames.contains("fdroid")
23+
def apkBuild = taskNames.contains("full")
24+
def fdroidBuild = taskNames.contains("fdroid")
25+
26+
// check for fdroidserver value is set in system env
27+
def fdroidBuildServer = System.getenv("fdroidserver")
28+
def isFdroidBuildServer = fdroidBuildServer != null && !fdroidBuildServer.isEmpty() && fdroidBuildServer != "null"
29+
def deGoogled = !apkBuild || fdroidBuild || isFdroidBuildServer
1230

1331
println("app-task names: '$taskNames'")
14-
println("app; is fdroid build? $isFdroidBuild")
32+
println("gradle deGoogled? $deGoogled (fdroidBuild: $fdroidBuild, fdroidBuildServer: $isFdroidBuildServer, apkBuild: $apkBuild)")
1533

1634
// don't apply firebase plugins for fdroid CLI builds
17-
if (!isFdroidBuild) {
35+
if (!deGoogled) {
1836
apply plugin: 'com.google.gms.google-services'
1937
apply plugin: 'com.google.firebase.crashlytics'
2038
println("app firebase plugins applied")
@@ -145,7 +163,7 @@ android {
145163
// This reduces the total symbol data Crashlytics needs to process
146164
abiFilters 'arm64-v8a', 'armeabi-v7a', 'x86_64'
147165
}
148-
if (!isFdroidBuild) {
166+
if (!deGoogled) {
149167
firebaseCrashlytics {
150168
// Enable processing and uploading of native symbols to Firebase servers.
151169
nativeSymbolUploadEnabled true
@@ -168,7 +186,7 @@ android {
168186

169187
// fix: injectCrashlyticsBuildIds task has a buffer overflow bug
170188
// apply crashlytics configuration to firebase builds only
171-
if (!isFdroidBuild) {
189+
if (!deGoogled) {
172190
// workaround for crashlytics gradle plugin bug with large native symbols
173191
afterEvaluate {
174192
tasks.configureEach { task ->
@@ -187,6 +205,12 @@ android {
187205
}
188206
}
189207
}
208+
kotlinOptions {
209+
jvmTarget = '17'
210+
freeCompilerArgs += [
211+
'-Xsuppress-warning=SENSELESS_COMPARISON'
212+
]
213+
}
190214

191215
buildFeatures {
192216
viewBinding true
@@ -292,13 +316,13 @@ dependencies {
292316
implementation 'com.google.android.material:material:1.13.0'
293317
fullImplementation 'androidx.viewpager2:viewpager2:1.1.0'
294318

295-
fullImplementation 'com.squareup.okhttp3:okhttp:5.2.1'
296-
fullImplementation 'com.squareup.okhttp3:okhttp-dnsoverhttps:5.2.1'
319+
fullImplementation 'com.squareup.okhttp3:okhttp:5.3.2'
320+
fullImplementation 'com.squareup.okhttp3:okhttp-dnsoverhttps:5.3.2'
297321

298322
fullImplementation 'com.squareup.retrofit2:retrofit:3.0.0'
299323
fullImplementation 'com.squareup.retrofit2:converter-gson:3.0.0'
300324

301-
implementation 'com.squareup.okio:okio-jvm:3.16.2'
325+
implementation 'com.squareup.okio:okio-jvm:3.16.4'
302326
// Glide
303327
fullImplementation('com.github.bumptech.glide:glide:5.0.5') {
304328
exclude group: 'glide-parent'
@@ -397,17 +421,12 @@ dependencies {
397421
// battery optimization permission helper
398422
implementation 'com.waseemsabir:betterypermissionhelper:1.0.3'
399423

400-
// Facebook battery metrics
401-
implementation 'com.facebook.battery:metrics:1.0.0'
402-
implementation 'com.facebook.battery:reporters:1.0.0'
403-
implementation 'com.facebook.battery:serializers:1.0.0'
404-
405424
// Firebase dependencies for error reporting (website and play variants only)
406-
websiteImplementation platform('com.google.firebase:firebase-bom:34.4.0')
425+
websiteImplementation platform('com.google.firebase:firebase-bom:34.6.0')
407426
websiteImplementation 'com.google.firebase:firebase-crashlytics'
408427
websiteImplementation 'com.google.firebase:firebase-crashlytics-ndk'
409428

410-
playImplementation platform('com.google.firebase:firebase-bom:34.4.0')
429+
playImplementation platform('com.google.firebase:firebase-bom:34.6.0')
411430
playImplementation 'com.google.firebase:firebase-crashlytics'
412431
playImplementation 'com.google.firebase:firebase-crashlytics-ndk'
413432
}

app/lint.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,10 @@
44
<issue id="all">
55
<ignore regexp=".*/src/.*/res/values(?:-[^/]+)?/strings\.xml" />
66
</issue>
7+
8+
<!-- Explicitly suppress StringFormatInvalid errors for translation files -->
9+
<issue id="StringFormatInvalid" severity="ignore" />
10+
11+
<!-- Suppress StringFormatMatches errors for translation files (argument count mismatches) -->
12+
<issue id="StringFormatMatches" severity="ignore" />
713
</lint>

app/src/fdroid/java/com/celzero/bravedns/util/FirebaseErrorReporting.kt

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -20,59 +20,59 @@ import Logger.LOG_FIREBASE
2020
import org.koin.core.component.KoinComponent
2121

2222
/**
23-
* Firebase Error Reporting Manager for F-Droid variant
24-
* This is a stub implementation since Firebase is not available in F-Droid builds
23+
* Firebase Error Reporting Manager for fdroid variant
24+
* This is a stub implementation since Firebase is not available in fdroid builds
2525
*/
2626
object FirebaseErrorReporting : KoinComponent {
2727

2828
const val TOKEN_REGENERATION_PERIOD_DAYS: Long = 45
2929
const val TOKEN_LENGTH = 16
3030
/**
31-
* Initialize Firebase Crashlytics - No-op for F-Droid variant
31+
* Initialize Firebase Crashlytics - no-op for fdroid variant
3232
*/
3333
fun initialize() {
34-
Logger.i(LOG_FIREBASE, "crashlytics not available in F-Droid variant")
34+
Logger.i(LOG_FIREBASE, "crashlytics not available in fdroid variant")
3535
}
3636

3737
/**
38-
* Enable or disable Firebase Crashlytics data collection - No-op for F-Droid variant
38+
* Enable or disable Firebase Crashlytics data collection - no-op for fdroid variant
3939
*/
4040
fun setEnabled(enabled: Boolean) {
41-
Logger.i(LOG_FIREBASE, "crashlytics not available in F-Droid variant")
41+
Logger.i(LOG_FIREBASE, "crashlytics not available in fdroid variant")
4242
}
4343

4444
/**
45-
* Check if Firebase Crashlytics is available - Always false for F-Droid variant
45+
* Check if Firebase Crashlytics is available - Always false for fdroid variant
4646
*/
4747
fun isAvailable(): Boolean {
4848
return false
4949
}
5050

5151
/**
52-
* Log a custom message - No-op for F-Droid variant
52+
* Log a custom message - no-op for fdroid variant
5353
*/
54-
fun log(message: String) {
55-
// No-op: Firebase not available in F-Droid variant
54+
fun log(msg: String) {
55+
// no-op: firebase not available in fdroid variant
5656
}
5757

5858
/**
59-
* Record a non-fatal exception - No-op for F-Droid variant
59+
* Record a non-fatal exception - no-op for fdroid variant
6060
*/
6161
fun recordException(throwable: Throwable) {
62-
// No-op: Firebase not available in F-Droid variant
62+
// no-op: firebase not available in fdroid variant
6363
}
6464

6565
/**
66-
* Set user ID - No-op for F-Droid variant
66+
* Set user ID - no-op for fdroid variant
6767
*/
68-
fun setUserId(userId: String) {
69-
// No-op: Firebase not available in F-Droid variant
68+
fun setUserId(uid: String) {
69+
// no-op: firebase not available in fdroid variant
7070
}
7171

7272
/**
73-
* Set custom key-value pairs - No-op for F-Droid variant
73+
* Set custom key-value pairs - no-op for fdroid variant
7474
*/
7575
fun setCustomKey(key: String, value: String) {
76-
// No-op: Firebase not available in F-Droid variant
76+
// no-op: firebase not available in fdroid variant
7777
}
7878
}

app/src/full/AndroidManifest.xml

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,9 @@
33
xmlns:tools="http://schemas.android.com/tools">
44

55
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
6-
<uses-permission
7-
android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
8-
tools:ignore="ScopedStorage" />
9-
<uses-permission
10-
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
11-
android:maxSdkVersion="32"
12-
tools:ignore="ScopedStorage" />
136

147
<application
158
android:name=".RethinkDnsApplication"
16-
android:requestLegacyExternalStorage="true"
179
android:theme="@style/AppThemeInitial">
1810
<meta-data
1911
android:name="android.webkit.WebView.MetricsOptOut"
@@ -140,6 +132,8 @@
140132
android:finishOnTaskLaunch="true" />
141133
<activity android:name=".ui.activity.ConsoleLogActivity"
142134
android:finishOnTaskLaunch="true" />
135+
<activity android:name=".ui.activity.EventsActivity"
136+
android:finishOnTaskLaunch="true" />
143137
<activity
144138
android:name=".ui.NotificationHandlerActivity"
145139
android:excludeFromRecents="true"
@@ -176,6 +170,14 @@
176170
android:finishOnTaskLaunch="true" />
177171
<activity android:name=".ui.activity.RpnWinProxyDetailsActivity"
178172
android:finishOnTaskLaunch="true" />
173+
<activity
174+
android:name=".ui.activity.BubbleActivity"
175+
android:allowEmbedded="true"
176+
android:resizeableActivity="true"
177+
android:exported="false"
178+
android:excludeFromRecents="true"
179+
android:taskAffinity=""
180+
android:launchMode="standard"/>
179181
<!-- <activity android:name=".ui.location.LocationSelectorActivity"
180182
android:finishOnTaskLaunch="true" />-->
181183

@@ -187,7 +189,6 @@
187189
android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
188190
<intent-filter android:priority="999">
189191
<action android:name="android.intent.action.BOOT_COMPLETED" />
190-
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
191192
<action android:name="android.intent.action.REBOOT" />
192193
<action android:name="android.intent.action.USER_UNLOCKED" />
193194
<action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
@@ -212,6 +213,9 @@
212213
<action android:name="android.intent.action.USER_PRESENT" />
213214
</intent-filter>
214215
</receiver>
216+
<receiver
217+
android:name=".receiver.BubbleDismissReceiver"
218+
android:exported="false" />
215219

216220
<service
217221
android:name="androidx.appcompat.app.AppLocalesMetadataHolderService"

app/src/full/java/com/celzero/bravedns/RethinkDnsApplication.kt

Lines changed: 1 addition & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,9 @@ package com.celzero.bravedns
1717

1818
import Logger
1919
import Logger.LOG_TAG_SCHEDULER
20-
import android.app.Activity
2120
import android.app.Application
2221
import android.content.pm.ApplicationInfo
23-
import android.os.Bundle
2422
import android.os.StrictMode
25-
import com.celzero.bravedns.battery.BatteryStatsLogger
26-
import com.celzero.bravedns.battery.BatteryStatsProvider.logMetrics
2723
import com.celzero.bravedns.scheduler.ScheduleManager
2824
import com.celzero.bravedns.scheduler.WorkScheduler
2925
import com.celzero.bravedns.util.FirebaseErrorReporting
@@ -36,7 +32,7 @@ import org.koin.android.ext.koin.androidContext
3632
import org.koin.android.ext.koin.androidLogger
3733
import org.koin.core.context.startKoin
3834

39-
class RethinkDnsApplication : Application(), Application.ActivityLifecycleCallbacks {
35+
class RethinkDnsApplication : Application() {
4036
companion object {
4137
var DEBUG: Boolean = false
4238
}
@@ -57,20 +53,11 @@ class RethinkDnsApplication : Application(), Application.ActivityLifecycleCallba
5753
GlobalExceptionHandler.initialize(this)
5854
FirebaseErrorReporting.initialize()
5955

60-
// initialize battery stats provider (facebook battery-metrics)
61-
try {
62-
BatteryStatsLogger.start(this)
63-
} catch (e: Exception) {
64-
Logger.w(LOG_TAG_SCHEDULER, "battery-stats-init-failed: ${e.message}", e)
65-
}
66-
6756
turnOnStrictMode()
6857

6958
CoroutineScope(SupervisorJob()).launch {
7059
scheduleJobs()
7160
}
72-
73-
registerActivityLifecycleCallbacks(this)
7461
}
7562

7663
private suspend fun scheduleJobs() {
@@ -104,22 +91,4 @@ class RethinkDnsApplication : Application(), Application.ActivityLifecycleCallba
10491
.build()
10592
)
10693
}
107-
108-
override fun onActivityCreated(p0: Activity, p1: Bundle?) {}
109-
110-
override fun onActivityDestroyed(p0: Activity) {}
111-
112-
override fun onActivityPaused(p0: Activity) {
113-
logMetrics("foreground")
114-
}
115-
116-
override fun onActivityResumed(p0: Activity) {
117-
logMetrics("background")
118-
}
119-
120-
override fun onActivitySaveInstanceState(p0: Activity, p1: Bundle) {}
121-
122-
override fun onActivityStarted(p0: Activity) {}
123-
124-
override fun onActivityStopped(p0: Activity) {}
12594
}

0 commit comments

Comments
 (0)