Refactor foreground notification text
This commit is contained in:
@@ -35,7 +35,7 @@ See also https://dontkillmyapp.com for phone manufacturer specific instructions
|
|||||||
|
|
||||||
*Only possible for Android version >= 8*
|
*Only possible for Android version >= 8*
|
||||||
|
|
||||||
The foreground notification with content like `Listening to https://push.yourdomain.eu` can be manually minimized to be less intrusive:
|
The foreground notification showing the connection status can be manually minimized to be less intrusive:
|
||||||
|
|
||||||
* Open Settings -> Apps -> Gotify
|
* Open Settings -> Apps -> Gotify
|
||||||
* Click Notifications
|
* Click Notifications
|
||||||
|
|||||||
@@ -243,7 +243,7 @@ class WebSocketConnection {
|
|||||||
}
|
}
|
||||||
|
|
||||||
interface OnNetworkFailureRunnable {
|
interface OnNetworkFailureRunnable {
|
||||||
void execute(long millis);
|
void execute(int minutes);
|
||||||
}
|
}
|
||||||
|
|
||||||
enum State {
|
enum State {
|
||||||
|
|||||||
@@ -93,7 +93,7 @@ public class WebSocketService extends Service {
|
|||||||
|
|
||||||
private void startPushService() {
|
private void startPushService() {
|
||||||
UncaughtExceptionHandler.registerCurrentThread();
|
UncaughtExceptionHandler.registerCurrentThread();
|
||||||
foreground(getString(R.string.websocket_init));
|
showForegroundNotification(getString(R.string.websocket_init));
|
||||||
|
|
||||||
if (lastReceivedMessage.get() == NOT_LOADED) {
|
if (lastReceivedMessage.get() == NOT_LOADED) {
|
||||||
missingMessageUtil.lastReceivedMessage(lastReceivedMessage::set);
|
missingMessageUtil.lastReceivedMessage(lastReceivedMessage::set);
|
||||||
@@ -113,8 +113,7 @@ public class WebSocketService extends Service {
|
|||||||
.onOpen(this::onOpen)
|
.onOpen(this::onOpen)
|
||||||
.onClose(this::onClose)
|
.onClose(this::onClose)
|
||||||
.onBadRequest(this::onBadRequest)
|
.onBadRequest(this::onBadRequest)
|
||||||
.onNetworkFailure(
|
.onNetworkFailure(this::onNetworkFailure)
|
||||||
(min) -> foreground(getString(R.string.websocket_failed, min)))
|
|
||||||
.onMessage(this::onMessage)
|
.onMessage(this::onMessage)
|
||||||
.onReconnected(this::notifyMissedNotifications)
|
.onReconnected(this::notifyMissedNotifications)
|
||||||
.start();
|
.start();
|
||||||
@@ -126,7 +125,8 @@ public class WebSocketService extends Service {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void onClose() {
|
private void onClose() {
|
||||||
foreground(getString(R.string.websocket_closed_try_reconnect));
|
showForegroundNotification(
|
||||||
|
getString(R.string.websocket_closed), getString(R.string.websocket_reconnect));
|
||||||
ClientFactory.userApiWithToken(settings)
|
ClientFactory.userApiWithToken(settings)
|
||||||
.currentUser()
|
.currentUser()
|
||||||
.enqueue(
|
.enqueue(
|
||||||
@@ -134,7 +134,9 @@ public class WebSocketService extends Service {
|
|||||||
(ignored) -> this.doReconnect(),
|
(ignored) -> this.doReconnect(),
|
||||||
(exception) -> {
|
(exception) -> {
|
||||||
if (exception.code() == 401) {
|
if (exception.code() == 401) {
|
||||||
foreground(getString(R.string.websocket_closed_logout));
|
showForegroundNotification(
|
||||||
|
getString(R.string.user_action),
|
||||||
|
getString(R.string.websocket_closed_logout));
|
||||||
} else {
|
} else {
|
||||||
Log.i(
|
Log.i(
|
||||||
"WebSocket closed but the user still authenticated, trying to reconnect");
|
"WebSocket closed but the user still authenticated, trying to reconnect");
|
||||||
@@ -152,11 +154,20 @@ public class WebSocketService extends Service {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void onBadRequest(String message) {
|
private void onBadRequest(String message) {
|
||||||
foreground(getString(R.string.websocket_could_not_connect, message));
|
showForegroundNotification(getString(R.string.websocket_could_not_connect), message);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void onNetworkFailure(int minutes) {
|
||||||
|
String status = getString(R.string.websocket_not_connected);
|
||||||
|
String intervalUnit =
|
||||||
|
getResources()
|
||||||
|
.getQuantityString(R.plurals.websocket_retry_interval, minutes, minutes);
|
||||||
|
showForegroundNotification(
|
||||||
|
status, getString(R.string.websocket_reconnect) + ' ' + intervalUnit);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onOpen() {
|
private void onOpen() {
|
||||||
foreground(getString(R.string.websocket_listening, settings.url()));
|
showForegroundNotification(getString(R.string.websocket_listening));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void notifyMissedNotifications() {
|
private void notifyMissedNotifications() {
|
||||||
@@ -222,28 +233,34 @@ public class WebSocketService extends Service {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void foreground(String message) {
|
private void showForegroundNotification(String title) {
|
||||||
|
showForegroundNotification(title, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void showForegroundNotification(String title, String message) {
|
||||||
Intent notificationIntent = new Intent(this, MessagesActivity.class);
|
Intent notificationIntent = new Intent(this, MessagesActivity.class);
|
||||||
|
|
||||||
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
|
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
|
||||||
|
|
||||||
Notification notification =
|
NotificationCompat.Builder notificationBuilder =
|
||||||
new NotificationCompat.Builder(this, NotificationSupport.Channel.FOREGROUND)
|
new NotificationCompat.Builder(this, NotificationSupport.Channel.FOREGROUND);
|
||||||
.setSmallIcon(R.drawable.ic_gotify)
|
notificationBuilder.setSmallIcon(R.drawable.ic_gotify);
|
||||||
.setOngoing(true)
|
notificationBuilder.setOngoing(true);
|
||||||
.setPriority(NotificationCompat.PRIORITY_MIN)
|
notificationBuilder.setPriority(NotificationCompat.PRIORITY_MIN);
|
||||||
.setShowWhen(false)
|
notificationBuilder.setShowWhen(false);
|
||||||
.setWhen(0)
|
notificationBuilder.setWhen(0);
|
||||||
.setContentTitle(getString(R.string.app_name))
|
notificationBuilder.setContentTitle(title);
|
||||||
.setContentText(message)
|
|
||||||
.setStyle(new NotificationCompat.BigTextStyle().bigText(message))
|
|
||||||
.setContentIntent(pendingIntent)
|
|
||||||
.setColor(
|
|
||||||
ContextCompat.getColor(
|
|
||||||
getApplicationContext(), R.color.colorPrimary))
|
|
||||||
.build();
|
|
||||||
|
|
||||||
startForeground(NotificationSupport.ID.FOREGROUND, notification);
|
if (message != null) {
|
||||||
|
notificationBuilder.setContentText(message);
|
||||||
|
notificationBuilder.setStyle(new NotificationCompat.BigTextStyle().bigText(message));
|
||||||
|
}
|
||||||
|
|
||||||
|
notificationBuilder.setContentIntent(pendingIntent);
|
||||||
|
notificationBuilder.setColor(
|
||||||
|
ContextCompat.getColor(getApplicationContext(), R.color.colorPrimary));
|
||||||
|
|
||||||
|
startForeground(NotificationSupport.ID.FOREGROUND, notificationBuilder.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void showNotification(
|
private void showNotification(
|
||||||
|
|||||||
@@ -20,9 +20,9 @@
|
|||||||
<string name="not_available">Cannot connect to %s</string>
|
<string name="not_available">Cannot connect to %s</string>
|
||||||
<string name="auth_failed">Server returned 401 unauthorized while trying to get current user. This can be caused by deleting the client for this session.</string>
|
<string name="auth_failed">Server returned 401 unauthorized while trying to get current user. This can be caused by deleting the client for this session.</string>
|
||||||
<string name="other_error">Could not get current user. Server (%s) responded with code %d: body (first 200 chars): %s</string>
|
<string name="other_error">Could not get current user. Server (%s) responded with code %d: body (first 200 chars): %s</string>
|
||||||
<string name="websocket_failed">Connection failed, trying again in %d minutes</string>
|
<string name="user_action">User action required</string>
|
||||||
<string name="websocket_closed_logout">User action required: Please login, the authentication token isn\'t valid anymore.</string>
|
<string name="websocket_closed_logout">Please login, the authentication token isn\'t valid anymore.</string>
|
||||||
<string name="websocket_closed_try_reconnect">Connection closed, trying to establish a new one.</string>
|
<string name="websocket_closed">Connection closed</string>
|
||||||
<string name="grouped_message">Received %d messages while being disconnected</string>
|
<string name="grouped_message">Received %d messages while being disconnected</string>
|
||||||
<string name="delete_all">Delete all</string>
|
<string name="delete_all">Delete all</string>
|
||||||
<string name="delete_app">Delete this application</string>
|
<string name="delete_app">Delete this application</string>
|
||||||
@@ -54,8 +54,8 @@
|
|||||||
<string name="ack">Are you sure?</string>
|
<string name="ack">Are you sure?</string>
|
||||||
<string name="missed_messages">Missed messages</string>
|
<string name="missed_messages">Missed messages</string>
|
||||||
<string name="grouped_notification_text">New Messages</string>
|
<string name="grouped_notification_text">New Messages</string>
|
||||||
<string name="websocket_listening">Listening to %s</string>
|
<string name="websocket_listening">Connected</string>
|
||||||
<string name="websocket_could_not_connect">Could not connect %s</string>
|
<string name="websocket_could_not_connect">Could not connect</string>
|
||||||
<string name="websocket_init">Initializing</string>
|
<string name="websocket_init">Initializing</string>
|
||||||
<string name="versions">gotify/android v%s; gotify/server v%s</string>
|
<string name="versions">gotify/android v%s; gotify/server v%s</string>
|
||||||
<string name="advanced_settings">Advanced Settings</string>
|
<string name="advanced_settings">Advanced Settings</string>
|
||||||
@@ -65,7 +65,6 @@
|
|||||||
<string name="warning">Warning</string>
|
<string name="warning">Warning</string>
|
||||||
<string name="http_warning">Using http is insecure and it\'s recommend to use https instead. Use your favorite search engine to get more information about this topic.</string>
|
<string name="http_warning">Using http is insecure and it\'s recommend to use https instead. Use your favorite search engine to get more information about this topic.</string>
|
||||||
<string name="i_understand">I Understand</string>
|
<string name="i_understand">I Understand</string>
|
||||||
<string name="websocket_no_network">Waiting for network</string>
|
|
||||||
<string name="connection">%s@%s</string>
|
<string name="connection">%s@%s</string>
|
||||||
<string name="no_messages_yet">There are no messages, yet.\nSend a message to Gotify\nand it will appear here.</string>
|
<string name="no_messages_yet">There are no messages, yet.\nSend a message to Gotify\nand it will appear here.</string>
|
||||||
<string name="title_activity_settings">Settings</string>
|
<string name="title_activity_settings">Settings</string>
|
||||||
@@ -84,4 +83,11 @@
|
|||||||
<string name="push_missing_app_info">There are no applications available on the server to push a message to.</string>
|
<string name="push_missing_app_info">There are no applications available on the server to push a message to.</string>
|
||||||
<string name="message_copied_to_clipboard">Content copied to clipboard</string>
|
<string name="message_copied_to_clipboard">Content copied to clipboard</string>
|
||||||
<string name="not_loggedin_share">Cannot share to Gotify, because you aren\'t logged in.</string>
|
<string name="not_loggedin_share">Cannot share to Gotify, because you aren\'t logged in.</string>
|
||||||
|
|
||||||
|
<string name="websocket_not_connected">Not connected</string>
|
||||||
|
<string name="websocket_reconnect">Trying to reconnect</string>
|
||||||
|
<plurals name="websocket_retry_interval">
|
||||||
|
<item quantity="one">in %d minute</item>
|
||||||
|
<item quantity="other">in %d minutes</item>
|
||||||
|
</plurals>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
Reference in New Issue
Block a user