Skip to content

Commit 3b10e02

Browse files
committed
ui: handle update signatures
Signed-off-by: Jason A. Donenfeld <[email protected]>
1 parent b1d9d35 commit 3b10e02

File tree

10 files changed

+3123
-15
lines changed

10 files changed

+3123
-15
lines changed

ui/src/main/AndroidManifest.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
<uses-permission android:name="android.permission.CAMERA" />
77
<uses-permission android:name="android.permission.INTERNET" />
88
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
9+
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
910
<uses-permission
1011
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
1112
android:maxSdkVersion="28"
@@ -103,6 +104,7 @@
103104
<intent-filter>
104105
<action android:name="android.intent.action.ACTION_SHUTDOWN" />
105106
<action android:name="android.intent.action.BOOT_COMPLETED" />
107+
<action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
106108
</intent-filter>
107109
</receiver>
108110

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import com.wireguard.android.backend.GoBackend
2222
import com.wireguard.android.backend.WgQuickBackend
2323
import com.wireguard.android.configStore.FileConfigStore
2424
import com.wireguard.android.model.TunnelManager
25+
import com.wireguard.android.updater.Updater
2526
import com.wireguard.android.util.RootShell
2627
import com.wireguard.android.util.ToolsInstaller
2728
import com.wireguard.android.util.UserKnobs
@@ -115,6 +116,7 @@ class Application : android.app.Application() {
115116
Log.e(TAG, Log.getStackTraceString(e))
116117
}
117118
}
119+
Updater.monitorForUpdates()
118120

119121
if (BuildConfig.DEBUG) {
120122
StrictMode.setVmPolicy(VmPolicy.Builder().detectAll().penaltyLog().build())

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

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,27 @@ 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
1112
import com.wireguard.android.backend.WgQuickBackend
13+
import com.wireguard.android.updater.Updater
1214
import com.wireguard.android.util.applicationScope
1315
import kotlinx.coroutines.launch
1416

1517
class BootShutdownReceiver : BroadcastReceiver() {
1618
override fun onReceive(context: Context, intent: Intent) {
19+
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+
1730
applicationScope.launch {
1831
if (Application.getBackend() !is WgQuickBackend) return@launch
19-
val action = intent.action ?: return@launch
2032
val tunnelManager = Application.getTunnelManager()
2133
if (Intent.ACTION_BOOT_COMPLETED == action) {
2234
Log.i(TAG, "Broadcast receiver restoring state (boot)")

ui/src/main/java/com/wireguard/android/fragment/TunnelListFragment.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import com.wireguard.android.databinding.ObservableKeyedRecyclerViewAdapter.RowC
3333
import com.wireguard.android.databinding.TunnelListFragmentBinding
3434
import com.wireguard.android.databinding.TunnelListItemBinding
3535
import com.wireguard.android.model.ObservableTunnel
36+
import com.wireguard.android.updater.SnackbarUpdateShower
3637
import com.wireguard.android.util.ErrorMessages
3738
import com.wireguard.android.util.QrCodeFromFileScanner
3839
import com.wireguard.android.util.TunnelImporter
@@ -122,6 +123,8 @@ class TunnelListFragment : BaseFragment() {
122123
backPressedCallback = requireActivity().onBackPressedDispatcher.addCallback(this) { actionMode?.finish() }
123124
backPressedCallback?.isEnabled = false
124125

126+
SnackbarUpdateShower.attachToActivity(requireActivity(), binding?.mainContainer!!, binding?.createFab)
127+
125128
return binding?.root
126129
}
127130

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

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import android.widget.Toast
1414
import androidx.preference.Preference
1515
import com.google.android.material.dialog.MaterialAlertDialogBuilder
1616
import com.wireguard.android.R
17+
import com.wireguard.android.updater.Updater
1718
import com.wireguard.android.util.ErrorMessages
1819

1920
class DonatePreference(context: Context, attrs: AttributeSet?) : Preference(context, attrs) {
@@ -22,21 +23,8 @@ class DonatePreference(context: Context, attrs: AttributeSet?) : Preference(cont
2223
override fun getTitle() = context.getString(R.string.donate_title)
2324

2425
override fun onClick() {
25-
val installer = try {
26-
val packageName = context.packageName
27-
val pm = context.packageManager
28-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
29-
pm.getInstallSourceInfo(packageName).installingPackageName ?: ""
30-
} else {
31-
@Suppress("DEPRECATION")
32-
pm.getInstallerPackageName(packageName) ?: ""
33-
}
34-
} catch (_: Throwable) {
35-
""
36-
}
37-
3826
/* Google Play Store forbids links to our donation page. */
39-
if (installer == "com.android.vending") {
27+
if (Updater.installerIsGooglePlay()) {
4028
MaterialAlertDialogBuilder(context)
4129
.setTitle(R.string.donate_title)
4230
.setMessage(R.string.donate_google_play_disappointment)

0 commit comments

Comments
 (0)