summaryrefslogtreecommitdiffhomepage
path: root/android
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-08-23 10:40:57 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-08-29 11:13:16 +0000
commit570aa1f3aa328fb330a500630698604b7b5204c8 (patch)
tree8e40b326cadb5241bbdd0885b8b09537b2478456 /android
parent454e6893985b010a8ca2c07d288d44995348bd48 (diff)
downloadmullvadvpn-570aa1f3aa328fb330a500630698604b7b5204c8.tar.xz
mullvadvpn-570aa1f3aa328fb330a500630698604b7b5204c8.zip
Show foreground notification for VPN service
Diffstat (limited to 'android')
-rw-r--r--android/src/main/AndroidManifest.xml1
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadVpnService.kt21
-rw-r--r--android/src/main/res/drawable-hdpi/notification.pngbin0 -> 755 bytes
-rw-r--r--android/src/main/res/drawable-mdpi/notification.pngbin0 -> 505 bytes
-rw-r--r--android/src/main/res/drawable-xhdpi/notification.pngbin0 -> 1000 bytes
-rw-r--r--android/src/main/res/drawable-xxhdpi/notification.pngbin0 -> 1570 bytes
-rw-r--r--android/src/main/res/drawable-xxxhdpi/notification.pngbin0 -> 2143 bytes
7 files changed, 22 insertions, 0 deletions
diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml
index 9dbdab3612..5cacbd46b2 100644
--- a/android/src/main/AndroidManifest.xml
+++ b/android/src/main/AndroidManifest.xml
@@ -4,6 +4,7 @@
package="net.mullvad.mullvadvpn"
>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+ <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.INTERNET" />
<application
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadVpnService.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadVpnService.kt
index 2c51a9ecde..d624b9fe62 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadVpnService.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/MullvadVpnService.kt
@@ -9,15 +9,20 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import android.app.Activity
+import android.app.Notification
+import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import android.net.VpnService
import android.os.Binder
import android.os.IBinder
+import android.support.v4.app.NotificationCompat
import net.mullvad.mullvadvpn.dataproxy.AppVersionInfoFetcher
import net.mullvad.mullvadvpn.model.TunConfig
+val ONGOING_NOTIFICATION_ID: Int = 1
+
class MullvadVpnService : VpnService() {
private val created = CompletableDeferred<Unit>()
private val binder = LocalBinder()
@@ -28,6 +33,7 @@ class MullvadVpnService : VpnService() {
override fun onCreate() {
versionInfoFetcher = AppVersionInfoFetcher(daemon, this)
+ startForeground(ONGOING_NOTIFICATION_ID, buildNotification())
created.complete(Unit)
}
@@ -39,6 +45,7 @@ class MullvadVpnService : VpnService() {
versionInfoFetcher.stop()
daemon.cancel()
created.cancel()
+ stopForeground(ONGOING_NOTIFICATION_ID)
}
fun createTun(config: TunConfig): Int {
@@ -82,6 +89,20 @@ class MullvadVpnService : VpnService() {
}
}
+ private fun buildNotification(): Notification {
+ val intent = Intent(this, MainActivity::class.java)
+ .setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP)
+ .setAction(Intent.ACTION_MAIN)
+
+ val pendingIntent =
+ PendingIntent.getActivity(this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT)
+
+ return NotificationCompat.Builder(this)
+ .setSmallIcon(R.drawable.notification)
+ .setContentIntent(pendingIntent)
+ .build()
+ }
+
private fun startDaemon() = GlobalScope.async(Dispatchers.Default) {
created.await()
ApiRootCaFile().extract(application)
diff --git a/android/src/main/res/drawable-hdpi/notification.png b/android/src/main/res/drawable-hdpi/notification.png
new file mode 100644
index 0000000000..a6aa370201
--- /dev/null
+++ b/android/src/main/res/drawable-hdpi/notification.png
Binary files differ
diff --git a/android/src/main/res/drawable-mdpi/notification.png b/android/src/main/res/drawable-mdpi/notification.png
new file mode 100644
index 0000000000..d1a7dc4d5f
--- /dev/null
+++ b/android/src/main/res/drawable-mdpi/notification.png
Binary files differ
diff --git a/android/src/main/res/drawable-xhdpi/notification.png b/android/src/main/res/drawable-xhdpi/notification.png
new file mode 100644
index 0000000000..7ce258b490
--- /dev/null
+++ b/android/src/main/res/drawable-xhdpi/notification.png
Binary files differ
diff --git a/android/src/main/res/drawable-xxhdpi/notification.png b/android/src/main/res/drawable-xxhdpi/notification.png
new file mode 100644
index 0000000000..edebf879d3
--- /dev/null
+++ b/android/src/main/res/drawable-xxhdpi/notification.png
Binary files differ
diff --git a/android/src/main/res/drawable-xxxhdpi/notification.png b/android/src/main/res/drawable-xxxhdpi/notification.png
new file mode 100644
index 0000000000..b2b88998cb
--- /dev/null
+++ b/android/src/main/res/drawable-xxxhdpi/notification.png
Binary files differ