Skip to content

Commit cf4fca8

Browse files
committed
gradle: remove runtime detection of play store
Signed-off-by: Jason A. Donenfeld <[email protected]>
1 parent 318f36a commit cf4fca8

File tree

8 files changed

+56
-30
lines changed

8 files changed

+56
-30
lines changed

tunnel/build.gradle.kts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@ android {
4848
}
4949
}
5050
}
51+
create("googleplay") {
52+
initWith(getByName("release"))
53+
}
5154
}
5255
lint {
5356
disable.add("LongLogTag")

ui/build.gradle.kts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ android {
2323
versionCode = providers.gradleProperty("wireguardVersionCode").get().toInt()
2424
versionName = providers.gradleProperty("wireguardVersionName").get()
2525
buildConfigField("int", "MIN_SDK_VERSION", minSdk.toString())
26+
buildConfigField("boolean", "IS_GOOGLE_PLAY", false.toString())
2627
}
2728
compileOptions {
2829
sourceCompatibility = JavaVersion.VERSION_17
@@ -45,6 +46,10 @@ android {
4546
applicationIdSuffix = ".debug"
4647
versionNameSuffix = "-debug"
4748
}
49+
create("googleplay") {
50+
initWith(getByName("release"))
51+
buildConfigField("boolean", "IS_GOOGLE_PLAY", true.toString())
52+
}
4853
}
4954
lint {
5055
disable.add("LongLogTag")

ui/src/googleplay/AndroidManifest.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:tools="http://schemas.android.com/tools">
4+
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" tools:node="remove" />
5+
<application>
6+
<receiver android:name=".updater.Updater$AppUpdatedReceiver" tools:node="remove" />
7+
</application>
8+
</manifest>

ui/src/main/AndroidManifest.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,11 @@
104104
<intent-filter>
105105
<action android:name="android.intent.action.ACTION_SHUTDOWN" />
106106
<action android:name="android.intent.action.BOOT_COMPLETED" />
107+
</intent-filter>
108+
</receiver>
109+
110+
<receiver android:name=".updater.Updater$AppUpdatedReceiver" android:exported="true">
111+
<intent-filter>
107112
<action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
108113
</intent-filter>
109114
</receiver>

ui/src/main/java/com/wireguard/android/BootShutdownReceiver.kt

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,25 +8,13 @@ import android.content.BroadcastReceiver
88
import android.content.Context
99
import android.content.Intent
1010
import android.util.Log
11-
import com.wireguard.android.activity.MainActivity
1211
import com.wireguard.android.backend.WgQuickBackend
13-
import com.wireguard.android.updater.Updater
1412
import com.wireguard.android.util.applicationScope
1513
import kotlinx.coroutines.launch
1614

1715
class BootShutdownReceiver : BroadcastReceiver() {
1816
override fun onReceive(context: Context, intent: Intent) {
1917
val action = intent.action ?: return
20-
21-
if (Intent.ACTION_MY_PACKAGE_REPLACED == action && Updater.installer() == context.packageName) {
22-
/* TODO: does not work because of restrictions placed on broadcast receivers. */
23-
val start = Intent(context, MainActivity::class.java)
24-
start.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
25-
start.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
26-
context.startActivity(start)
27-
return
28-
}
29-
3018
applicationScope.launch {
3119
if (Application.getBackend() !is WgQuickBackend) return@launch
3220
val tunnelManager = Application.getTunnelManager()

ui/src/main/java/com/wireguard/android/preference/DonatePreference.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,12 @@ package com.wireguard.android.preference
88
import android.content.Context
99
import android.content.Intent
1010
import android.net.Uri
11-
import android.os.Build
1211
import android.util.AttributeSet
1312
import android.widget.Toast
1413
import androidx.preference.Preference
1514
import com.google.android.material.dialog.MaterialAlertDialogBuilder
15+
import com.wireguard.android.BuildConfig
1616
import com.wireguard.android.R
17-
import com.wireguard.android.updater.Updater
1817
import com.wireguard.android.util.ErrorMessages
1918

2019
class DonatePreference(context: Context, attrs: AttributeSet?) : Preference(context, attrs) {
@@ -24,7 +23,7 @@ class DonatePreference(context: Context, attrs: AttributeSet?) : Preference(cont
2423

2524
override fun onClick() {
2625
/* Google Play Store forbids links to our donation page. */
27-
if (Updater.installerIsGooglePlay()) {
26+
if (BuildConfig.IS_GOOGLE_PLAY) {
2827
MaterialAlertDialogBuilder(context)
2928
.setTitle(R.string.donate_title)
3029
.setMessage(R.string.donate_google_play_disappointment)

ui/src/main/java/com/wireguard/android/updater/SnackbarUpdateShower.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import androidx.fragment.app.FragmentActivity
1111
import androidx.lifecycle.lifecycleScope
1212
import com.google.android.material.snackbar.BaseTransientBottomBar
1313
import com.google.android.material.snackbar.Snackbar
14+
import com.wireguard.android.BuildConfig
1415
import com.wireguard.android.R
1516
import com.wireguard.android.util.ErrorMessages
1617
import com.wireguard.android.util.QuantityFormatter
@@ -88,6 +89,9 @@ object SnackbarUpdateShower {
8889
}
8990

9091
fun attachToActivity(activity: FragmentActivity, view: View, anchor: View?) {
92+
if (BuildConfig.IS_GOOGLE_PLAY)
93+
return
94+
9195
val snackbar = SwapableSnackbar(activity, view, anchor)
9296
val context = activity.applicationContext
9397

ui/src/main/java/com/wireguard/android/updater/Updater.kt

Lines changed: 29 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import androidx.core.content.ContextCompat
1717
import androidx.core.content.IntentCompat
1818
import com.wireguard.android.Application
1919
import com.wireguard.android.BuildConfig
20+
import com.wireguard.android.activity.MainActivity
2021
import com.wireguard.android.util.UserKnobs
2122
import kotlinx.coroutines.CoroutineScope
2223
import kotlinx.coroutines.Dispatchers
@@ -360,7 +361,7 @@ object Updater {
360361
}
361362

362363
fun monitorForUpdates() {
363-
if (installerIsGooglePlay())
364+
if (BuildConfig.IS_GOOGLE_PLAY)
364365
return
365366

366367
updaterScope.launch {
@@ -400,21 +401,34 @@ object Updater {
400401
}.launchIn(Application.getCoroutineScope())
401402
}
402403

403-
fun installer(): String {
404-
val context = Application.get().applicationContext
405-
return try {
406-
val packageName = context.packageName
407-
val pm = context.packageManager
408-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
409-
pm.getInstallSourceInfo(packageName).installingPackageName ?: ""
410-
} else {
411-
@Suppress("DEPRECATION")
412-
pm.getInstallerPackageName(packageName) ?: ""
404+
class AppUpdatedReceiver : BroadcastReceiver() {
405+
override fun onReceive(context: Context, intent: Intent) {
406+
if (BuildConfig.IS_GOOGLE_PLAY)
407+
return
408+
409+
if (intent.action != Intent.ACTION_MY_PACKAGE_REPLACED)
410+
return
411+
412+
val installer = try {
413+
val packageName = context.packageName
414+
val pm = context.packageManager
415+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
416+
pm.getInstallSourceInfo(packageName).installingPackageName ?: ""
417+
} else {
418+
@Suppress("DEPRECATION")
419+
pm.getInstallerPackageName(packageName) ?: ""
420+
}
421+
} catch (_: Throwable) {
422+
""
413423
}
414-
} catch (_: Throwable) {
415-
""
424+
if (installer != context.packageName)
425+
return
426+
427+
/* TODO: does not work because of restrictions placed on broadcast receivers. */
428+
val start = Intent(context, MainActivity::class.java)
429+
start.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
430+
start.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
431+
context.startActivity(start)
416432
}
417433
}
418-
419-
fun installerIsGooglePlay(): Boolean = installer() == "com.android.vending"
420434
}

0 commit comments

Comments
 (0)