android: Add notification channel for API level 26+

Unfortunately, setLockscreenVisibility() doesn't seem to have any
effect. So the full notification is shown unless the user manually
configures the notification settings.
This commit is contained in:
Tobias Brunner
2018-07-03 11:31:33 +02:00
parent 56dec924ec
commit 6ca0b46c20
8 changed files with 39 additions and 2 deletions
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2012-2017 Tobias Brunner
* Copyright (C) 2012-2018 Tobias Brunner
* Copyright (C) 2012 Giuliano Grassi
* Copyright (C) 2012 Ralf Sager
* HSR Hochschule fuer Technik Rapperswil
@@ -19,6 +19,7 @@ package org.strongswan.android.logic;
import android.annotation.TargetApi;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
@@ -70,6 +71,7 @@ public class CharonVpnService extends VpnService implements Runnable, VpnStateSe
{
private static final String TAG = CharonVpnService.class.getSimpleName();
public static final String DISCONNECT_ACTION = "org.strongswan.android.CharonVpnService.DISCONNECT";
private static final String NOTIFICATION_CHANNEL = "org.strongswan.android.CharonVpnService.VPN_STATE_NOTIFICATION";
public static final String LOG_FILE = "charon.log";
public static final int VPN_STATE_NOTIFICATION_ID = 1;
@@ -162,6 +164,8 @@ public class CharonVpnService extends VpnService implements Runnable, VpnStateSe
/* the thread is started when the service is bound */
bindService(new Intent(this, VpnStateService.class),
mServiceConnection, Service.BIND_AUTO_CREATE);
createNotificationChannel();
}
@Override
@@ -321,6 +325,25 @@ public class CharonVpnService extends VpnService implements Runnable, VpnStateSe
stopForeground(true);
}
/**
* Create a notification channel for Android 8+
*/
private void createNotificationChannel()
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
{
NotificationChannel channel;
channel = new NotificationChannel(NOTIFICATION_CHANNEL, getString(R.string.permanent_notification_name),
NotificationManager.IMPORTANCE_LOW);
channel.setDescription(getString(R.string.permanent_notification_description));
channel.setLockscreenVisibility(Notification.VISIBILITY_SECRET);
channel.setShowBadge(false);
NotificationManager notificationManager = getSystemService(NotificationManager.class);
notificationManager.createNotificationChannel(channel);
}
}
/**
* Build a notification matching the current state
*/
@@ -336,7 +359,7 @@ public class CharonVpnService extends VpnService implements Runnable, VpnStateSe
{
name = profile.getName();
}
android.support.v4.app.NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL)
.setSmallIcon(R.drawable.ic_notification)
.setCategory(NotificationCompat.CATEGORY_SERVICE)
.setVisibility(publicVersion ? NotificationCompat.VISIBILITY_PUBLIC
@@ -29,6 +29,8 @@
<string name="loading">Laden&#8230;</string>
<string name="profile_not_found">Profil nicht gefunden</string>
<string name="strongswan_shortcut">strongSwan-Verknüpfung</string>
<string name="permanent_notification_name">VPN Verbindungsstatus</string>
<string name="permanent_notification_description">Zeigt Informationen zum Verbindungsstatus der VPN Verbindung und dient als permanente Notification dazu, den VPN Dienst im Hintergrund am Laufen zu halten.</string>
<!-- Log view -->
<string name="log_title">Log</string>
@@ -29,6 +29,8 @@
<string name="loading">Wczytywanie&#8230;</string>
<string name="profile_not_found">Nie znaleziono profilu</string>
<string name="strongswan_shortcut">Skrót strongSwan</string>
<string name="permanent_notification_name">VPN connection state</string>
<string name="permanent_notification_description">Provides information about the VPN connection state and serves as permanent notification to keep the VPN service running in the background.</string>
<!-- Log view -->
<string name="log_title">Log</string>
@@ -26,6 +26,8 @@
<string name="loading">Загрузка&#8230;</string>
<string name="profile_not_found">Профиль не найден</string>
<string name="strongswan_shortcut">Ссылка на strongSwan</string>
<string name="permanent_notification_name">VPN connection state</string>
<string name="permanent_notification_description">Provides information about the VPN connection state and serves as permanent notification to keep the VPN service running in the background.</string>
<!-- Log view -->
<string name="log_title">Журнал</string>
@@ -27,6 +27,8 @@
<string name="loading">Завантаження&#8230;</string>
<string name="profile_not_found">Профіль не знайдено</string>
<string name="strongswan_shortcut">strongSwan посилання</string>
<string name="permanent_notification_name">VPN connection state</string>
<string name="permanent_notification_description">Provides information about the VPN connection state and serves as permanent notification to keep the VPN service running in the background.</string>
<!-- Log view -->
<string name="log_title">Журнал</string>
@@ -26,6 +26,8 @@
<string name="loading">载入中&#8230;</string>
<string name="profile_not_found">未找到配置</string>
<string name="strongswan_shortcut">strongSwan快捷方式</string>
<string name="permanent_notification_name">VPN connection state</string>
<string name="permanent_notification_description">Provides information about the VPN connection state and serves as permanent notification to keep the VPN service running in the background.</string>
<!-- Log view -->
<string name="log_title">日志</string>
@@ -26,6 +26,8 @@
<string name="loading">載入中&#8230;</string>
<string name="profile_not_found">沒有找到設定檔</string>
<string name="strongswan_shortcut">strongSwan快速選單</string>
<string name="permanent_notification_name">VPN connection state</string>
<string name="permanent_notification_description">Provides information about the VPN connection state and serves as permanent notification to keep the VPN service running in the background.</string>
<!-- Log view -->
<string name="log_title">日誌</string>
@@ -29,6 +29,8 @@
<string name="loading">Loading&#8230;</string>
<string name="profile_not_found">Profile not found</string>
<string name="strongswan_shortcut">strongSwan shortcut</string>
<string name="permanent_notification_name">VPN connection state</string>
<string name="permanent_notification_description">Provides information about the VPN connection state and serves as permanent notification to keep the VPN service running in the background.</string>
<!-- Log view -->
<string name="log_title">Log</string>