summaryrefslogtreecommitdiff
path: root/android/src
diff options
context:
space:
mode:
authorMax Kellermann <max@musicpd.org>2020-04-02 18:02:10 +0200
committerMax Kellermann <max@musicpd.org>2020-04-02 18:02:10 +0200
commit12b97bbe3896df558b3b8f52e8d9d495058aa996 (patch)
tree4430cf6fcd89a7c9d389f1f903c927b6d5297d1a /android/src
parent7d7bd51bc0a4748593e774decc91a1dbc939fd90 (diff)
parent5ccfcffcc124e406233359fe8fe65b704b98b8c8 (diff)
Merge tag 'v0.21.22'
release v0.21.22
Diffstat (limited to 'android/src')
-rw-r--r--android/src/Main.java49
-rw-r--r--android/src/Settings.java3
2 files changed, 47 insertions, 5 deletions
diff --git a/android/src/Main.java b/android/src/Main.java
index 57abee56c..b0c63136a 100644
--- a/android/src/Main.java
+++ b/android/src/Main.java
@@ -21,6 +21,7 @@ package org.musicpd;
import android.annotation.TargetApi;
import android.app.Notification;
+import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.ComponentName;
@@ -35,6 +36,9 @@ import android.os.RemoteException;
import android.util.Log;
import android.widget.RemoteViews;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+
public class Main extends Service implements Runnable {
private static final String TAG = "Main";
private static final String REMOTE_ERROR = "MPD process was killed";
@@ -156,11 +160,36 @@ public class Main extends Service implements Runnable {
sendMessage(MSG_SEND_STATUS, mStatus, 0, mError);
}
+ private Notification.Builder createNotificationBuilderWithChannel() {
+ final NotificationManager notificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
+ if (notificationManager == null)
+ return null;
+
+ final String id = "org.musicpd";
+ final String name = "MPD service";
+ final int importance = 3; /* NotificationManager.IMPORTANCE_DEFAULT */
+
+ try {
+ Class<?> ncClass = Class.forName("android.app.NotificationChannel");
+ Constructor<?> ncCtor = ncClass.getConstructor(String.class, CharSequence.class, int.class);
+ Object nc = ncCtor.newInstance(id, name, importance);
+
+ Method nmCreateNotificationChannelMethod =
+ NotificationManager.class.getMethod("createNotificationChannel", ncClass);
+ nmCreateNotificationChannelMethod.invoke(notificationManager, nc);
+
+ Constructor nbCtor = Notification.Builder.class.getConstructor(Context.class, String.class);
+ return (Notification.Builder) nbCtor.newInstance(this, id);
+ } catch (Exception e)
+ {
+ Log.e(TAG, "error creating the NotificationChannel", e);
+ return null;
+ }
+ }
+
private void start() {
if (mThread != null)
return;
- mThread = new Thread(this);
- mThread.start();
final Intent mainIntent = new Intent(this, Settings.class);
mainIntent.setAction("android.intent.action.MAIN");
@@ -168,13 +197,25 @@ public class Main extends Service implements Runnable {
final PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
mainIntent, PendingIntent.FLAG_CANCEL_CURRENT);
- Notification notification = new Notification.Builder(this)
- .setContentTitle(getText(R.string.notification_title_mpd_running))
+ Notification.Builder nBuilder;
+ if (Build.VERSION.SDK_INT >= 26 /* Build.VERSION_CODES.O */)
+ {
+ nBuilder = createNotificationBuilderWithChannel();
+ if (nBuilder == null)
+ return;
+ }
+ else
+ nBuilder = new Notification.Builder(this);
+
+ Notification notification = nBuilder.setContentTitle(getText(R.string.notification_title_mpd_running))
.setContentText(getText(R.string.notification_text_mpd_running))
.setSmallIcon(R.drawable.notification_icon)
.setContentIntent(contentIntent)
.build();
+ mThread = new Thread(this);
+ mThread.start();
+
startForeground(R.string.notification_title_mpd_running, notification);
startService(new Intent(this, Main.class));
}
diff --git a/android/src/Settings.java b/android/src/Settings.java
index af3008be5..4650bbce6 100644
--- a/android/src/Settings.java
+++ b/android/src/Settings.java
@@ -105,12 +105,13 @@ public class Settings extends Activity {
else
mRunButton.setChecked(false);
mFirstRun = true;
+ mTextStatus.setText("");
break;
case MSG_STARTED:
Log.d(TAG, "onStarted");
mRunButton.setChecked(true);
mFirstRun = true;
- mTextStatus.setText("CAUTION: this version is EXPERIMENTAL!"); // XXX
+ mTextStatus.setText("MPD service started");
break;
case MSG_LOG:
if (mLogListArray.size() > MAX_LOGS)