Add support for opening urls when clicking on notifications (#91)

This commit is contained in:
mzoeller
2020-02-05 19:13:07 +01:00
committed by GitHub
parent a5b5041d51
commit a4cbd885d0
2 changed files with 51 additions and 4 deletions

View File

@@ -18,4 +18,30 @@ public final class Extras {
return "text/markdown".equals(((Map) display).get("contentType")); return "text/markdown".equals(((Map) display).get("contentType"));
} }
public static <T> T getNestedValue(Class<T> clazz, Message message, String... keys) {
return getNestedValue(clazz, message.getExtras(), keys);
}
public static <T> T getNestedValue(Class<T> clazz, Map<String, Object> extras, String... keys) {
Object value = extras;
for (String key : keys) {
if (value == null) {
return null;
}
if (!(value instanceof Map<?, ?>)) {
return null;
}
value = ((Map<?, ?>) value).get(key);
}
if (!clazz.isInstance(value)) {
return null;
}
return clazz.cast(value);
}
} }

View File

@@ -9,6 +9,7 @@ import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.graphics.Color; import android.graphics.Color;
import android.net.ConnectivityManager; import android.net.ConnectivityManager;
import android.net.Uri;
import android.os.Build; import android.os.Build;
import android.os.IBinder; import android.os.IBinder;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
@@ -25,8 +26,10 @@ import com.github.gotify.client.api.MessageApi;
import com.github.gotify.client.model.Message; import com.github.gotify.client.model.Message;
import com.github.gotify.log.Log; import com.github.gotify.log.Log;
import com.github.gotify.log.UncaughtExceptionHandler; import com.github.gotify.log.UncaughtExceptionHandler;
import com.github.gotify.messages.Extras;
import com.github.gotify.messages.MessagesActivity; import com.github.gotify.messages.MessagesActivity;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
@@ -160,7 +163,8 @@ public class WebSocketService extends Service {
NotificationSupport.ID.GROUPED, NotificationSupport.ID.GROUPED,
getString(R.string.missed_messages), getString(R.string.missed_messages),
getString(R.string.grouped_message, size), getString(R.string.grouped_message, size),
highestPriority); highestPriority,
null);
} }
private void onMessage(Message message) { private void onMessage(Message message) {
@@ -169,7 +173,11 @@ public class WebSocketService extends Service {
} }
broadcast(message); broadcast(message);
showNotification( showNotification(
message.getId(), message.getTitle(), message.getMessage(), message.getPriority()); message.getId(),
message.getTitle(),
message.getMessage(),
message.getPriority(),
message.getExtras());
} }
private void broadcast(Message message) { private void broadcast(Message message) {
@@ -209,8 +217,21 @@ public class WebSocketService extends Service {
startForeground(NotificationSupport.ID.FOREGROUND, notification); startForeground(NotificationSupport.ID.FOREGROUND, notification);
} }
private void showNotification(int id, String title, String message, long priority) { private void showNotification(
Intent intent = new Intent(this, MessagesActivity.class); int id, String title, String message, long priority, Map<String, Object> extras) {
Intent intent;
String url =
Extras.getNestedValue(String.class, extras, "client::notification", "click", "url");
if (url != null) {
intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
} else {
intent = new Intent(this, MessagesActivity.class);
}
PendingIntent contentIntent = PendingIntent contentIntent =
PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);