diff --git a/app/build.gradle b/app/build.gradle index b8d88084..20de60ff 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -27,6 +27,7 @@ android { dependencies { implementation 'androidx.legacy:legacy-support-core-ui:1.0.0' + implementation 'androidx.media:media:1.2.1' implementation 'com.google.android.material:material:1.0.0' implementation 'junit:junit:4.12' compileOnly 'androidx.annotation:annotation:1.0.0' diff --git a/app/src/main/java/ch/blinkenlights/android/vanilla/NotificationHelper.java b/app/src/main/java/ch/blinkenlights/android/vanilla/NotificationHelper.java index 5bdbaebf..2229f653 100644 --- a/app/src/main/java/ch/blinkenlights/android/vanilla/NotificationHelper.java +++ b/app/src/main/java/ch/blinkenlights/android/vanilla/NotificationHelper.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017 Adrian Ulrich <adrian@blinkenlights.ch> + * Copyright (C) 2017-2021 Adrian Ulrich <adrian@blinkenlights.ch> * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,7 +21,10 @@ import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationManager; import android.content.Context; +import android.graphics.Bitmap; import android.os.Build; +import androidx.core.app.NotificationCompat; + public class NotificationHelper { /** @@ -51,27 +54,12 @@ public class NotificationHelper { } /** - * Returns a new Notification.Builder. + * Returns a new NotificationCompat.Builder. * * @param context the context to use */ - public Notification.Builder getNewBuilder(Context context) { - Notification.Builder builder; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - builder = new Notification.Builder(context, mChannelId); - } else { - builder = new Notification.Builder(context); - } - return builder; - } - - /** - * Retruns a new Notification. - * - * @param context the context to use. - */ - public Notification getNewNotification(Context context) { - return getNewBuilder(context).getNotification(); // build() is API16. + public NotificationCompat.Builder getNewBuilder(Context context) { + return new NotificationCompat.Builder(context, mChannelId); } /** diff --git a/app/src/main/java/ch/blinkenlights/android/vanilla/PlaybackService.java b/app/src/main/java/ch/blinkenlights/android/vanilla/PlaybackService.java index 92095fe2..584ff3e7 100644 --- a/app/src/main/java/ch/blinkenlights/android/vanilla/PlaybackService.java +++ b/app/src/main/java/ch/blinkenlights/android/vanilla/PlaybackService.java @@ -57,8 +57,8 @@ import android.os.Process; import android.os.SystemClock; import android.util.Log; import android.view.View; -import android.widget.RemoteViews; import android.widget.Toast; +import androidx.core.app.NotificationCompat; import java.lang.Math; import java.io.DataInputStream; import java.io.DataOutputStream; @@ -178,10 +178,6 @@ public final class PlaybackService extends Service * Change the repeat mode. */ public static final String ACTION_CYCLE_REPEAT = "ch.blinkenlights.android.vanilla.CYCLE_REPEAT"; - /** - * Pause music and hide the notification. - */ - public static final String ACTION_CLOSE_NOTIFICATION = "ch.blinkenlights.android.vanilla.CLOSE_NOTIFICATION"; /** * Whether we should create a foreground notification as early as possible. */ @@ -309,10 +305,6 @@ public final class PlaybackService extends Service * Behaviour of the notification */ private int mNotificationVisibility; - /** - * If true, create a notification with ticker text or heads up display - */ - private boolean mNotificationNag; /** * If true, audio will not be played through the speaker. */ @@ -463,7 +455,6 @@ public final class PlaybackService extends Service SharedPreferences settings = SharedPrefHelper.getSettings(this); settings.registerOnSharedPreferenceChangeListener(this); mNotificationVisibility = Integer.parseInt(settings.getString(PrefKeys.NOTIFICATION_VISIBILITY, PrefDefaults.NOTIFICATION_VISIBILITY)); - mNotificationNag = settings.getBoolean(PrefKeys.NOTIFICATION_NAG, PrefDefaults.NOTIFICATION_NAG); mScrobble = settings.getBoolean(PrefKeys.SCROBBLE, PrefDefaults.SCROBBLE); mIdleTimeout = settings.getBoolean(PrefKeys.USE_IDLE_TIMEOUT, PrefDefaults.USE_IDLE_TIMEOUT) ? settings.getInt(PrefKeys.IDLE_TIMEOUT, PrefDefaults.IDLE_TIMEOUT) : 0; @@ -607,11 +598,6 @@ public final class PlaybackService extends Service // Flush the queue and start playing: query.mode = SongTimeline.MODE_PLAY; addSongs(query); - } else if (ACTION_CLOSE_NOTIFICATION.equals(action)) { - mForceNotificationVisible = false; - pause(); - stopForeground(true); // sometimes required to clear notification - updateNotification(); } } @@ -890,9 +876,6 @@ public final class PlaybackService extends Service // mode. stopForeground(true); updateNotification(); - } else if (PrefKeys.NOTIFICATION_NAG.equals(key)) { - mNotificationNag = settings.getBoolean(PrefKeys.NOTIFICATION_NAG, PrefDefaults.NOTIFICATION_NAG); - // no need to update notification: happens on next event } else if (PrefKeys.SCROBBLE.equals(key)) { mScrobble = settings.getBoolean(PrefKeys.SCROBBLE, PrefDefaults.SCROBBLE); } else if (PrefKeys.MEDIA_BUTTON.equals(key) || PrefKeys.MEDIA_BUTTON_BEEP.equals(key)) { @@ -2143,81 +2126,38 @@ public final class PlaybackService extends Service */ public Notification createNotification(Song song, int state, int mode) { - boolean playing = (state & FLAG_PLAYING) != 0; - - RemoteViews views = new RemoteViews(getPackageName(), R.layout.notification); - RemoteViews expanded = new RemoteViews(getPackageName(), R.layout.notification_expanded); - - Bitmap cover = song.getCover(this); - if (cover == null) { - views.setImageViewResource(R.id.cover, R.drawable.fallback_cover); - expanded.setImageViewResource(R.id.cover, R.drawable.fallback_cover_large); - } else { - views.setImageViewBitmap(R.id.cover, cover); - expanded.setImageViewBitmap(R.id.cover, cover); - } - - int playButton = ThemeHelper.getPlayButtonResource(playing); - - views.setImageViewResource(R.id.play_pause, playButton); - expanded.setImageViewResource(R.id.play_pause, playButton); + final boolean playing = (state & FLAG_PLAYING) != 0; + final Bitmap cover = song.getCover(this); ComponentName service = new ComponentName(this, PlaybackService.class); - Intent previous = new Intent(PlaybackService.ACTION_PREVIOUS_SONG); - previous.setComponent(service); - views.setOnClickPendingIntent(R.id.previous, PendingIntent.getService(this, 0, previous, 0)); - expanded.setOnClickPendingIntent(R.id.previous, PendingIntent.getService(this, 0, previous, 0)); - + int playButton = ThemeHelper.getPlayButtonResource(playing); Intent playPause = new Intent(PlaybackService.ACTION_TOGGLE_PLAYBACK_NOTIFICATION); playPause.setComponent(service); - views.setOnClickPendingIntent(R.id.play_pause, PendingIntent.getService(this, 0, playPause, 0)); - expanded.setOnClickPendingIntent(R.id.play_pause, PendingIntent.getService(this, 0, playPause, 0)); Intent next = new Intent(PlaybackService.ACTION_NEXT_SONG); next.setComponent(service); - views.setOnClickPendingIntent(R.id.next, PendingIntent.getService(this, 0, next, 0)); - expanded.setOnClickPendingIntent(R.id.next, PendingIntent.getService(this, 0, next, 0)); - int closeButtonVisibility = (mode == VISIBILITY_WHEN_PLAYING) ? View.VISIBLE : View.INVISIBLE; - Intent close = new Intent(PlaybackService.ACTION_CLOSE_NOTIFICATION); - close.setComponent(service); - views.setOnClickPendingIntent(R.id.close, PendingIntent.getService(this, 0, close, 0)); - views.setViewVisibility(R.id.close, closeButtonVisibility); - expanded.setOnClickPendingIntent(R.id.close, PendingIntent.getService(this, 0, close, 0)); - expanded.setViewVisibility(R.id.close, closeButtonVisibility); + Intent previous = new Intent(PlaybackService.ACTION_PREVIOUS_SONG); + previous.setComponent(service); - views.setTextViewText(R.id.title, song.title); - views.setTextViewText(R.id.artist, song.artist); - expanded.setTextViewText(R.id.title, song.title); - expanded.setTextViewText(R.id.album, song.album); - expanded.setTextViewText(R.id.artist, song.artist); - - Notification notification = mNotificationHelper.getNewNotification(getApplicationContext()); - notification.contentView = views; - notification.icon = R.drawable.status_icon; - notification.flags |= Notification.FLAG_ONGOING_EVENT; - notification.contentIntent = mNotificationAction; - if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { - // expanded view is available since 4.1 - notification.bigContentView = expanded; - // 4.1 also knows about notification priorities - // HIGH is one higher than the default. - notification.priority = Notification.PRIORITY_HIGH; - } - if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - notification.visibility = Notification.VISIBILITY_PUBLIC; - } - if(mNotificationNag) { - if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - notification.priority = Notification.PRIORITY_MAX; - notification.vibrate = new long[0]; // needed to get headsup - } else { - notification.tickerText = song.title + " - " + song.artist; - } - } - - return notification; + Notification n = mNotificationHelper.getNewBuilder(getApplicationContext()) + .setVisibility(NotificationCompat.VISIBILITY_PUBLIC) + .setSmallIcon(R.drawable.status_icon) + .setLargeIcon(cover) + .setContentTitle(song.title) + .setContentText(song.album) + .setSubText(song.artist) + .setContentIntent(mNotificationAction) + .addAction(new NotificationCompat.Action(R.drawable.previous, + getString(R.string.previous_song), PendingIntent.getService(this, 0, previous, 0))) + .addAction(new NotificationCompat.Action(playButton, + getString(R.string.play_pause), PendingIntent.getService(this, 0, playPause, 0))) + .addAction(new NotificationCompat.Action(R.drawable.next, + getString(R.string.next_song), PendingIntent.getService(this, 0, next, 0))) + .setStyle(new androidx.media.app.NotificationCompat.MediaStyle()) + .build(); + return n; } public void onAudioFocusChange(int type) diff --git a/app/src/main/java/ch/blinkenlights/android/vanilla/PrefKeys.java b/app/src/main/java/ch/blinkenlights/android/vanilla/PrefKeys.java index cc170abc..7f0ac95a 100644 --- a/app/src/main/java/ch/blinkenlights/android/vanilla/PrefKeys.java +++ b/app/src/main/java/ch/blinkenlights/android/vanilla/PrefKeys.java @@ -52,7 +52,6 @@ public class PrefKeys { public static final String MEDIA_BUTTON_BEEP = "media_button_beep"; public static final String NOTIFICATION_ACTION = "notification_action"; public static final String NOTIFICATION_VISIBILITY = "notification_visibility"; - public static final String NOTIFICATION_NAG = "notification_nag"; public static final String PLAYBACK_ON_STARTUP = "playback_on_startup"; public static final String SCROBBLE = "scrobble"; public static final String SHAKE_ACTION = "shake_action"; diff --git a/app/src/main/res/drawable-hdpi/notification_close.png b/app/src/main/res/drawable-hdpi/notification_close.png deleted file mode 100644 index 48507c74..00000000 Binary files a/app/src/main/res/drawable-hdpi/notification_close.png and /dev/null differ diff --git a/app/src/main/res/drawable-hdpi/notification_close_dark.png b/app/src/main/res/drawable-hdpi/notification_close_dark.png deleted file mode 100644 index 664348ec..00000000 Binary files a/app/src/main/res/drawable-hdpi/notification_close_dark.png and /dev/null differ diff --git a/app/src/main/res/drawable-mdpi/notification_close.png b/app/src/main/res/drawable-mdpi/notification_close.png deleted file mode 100644 index faf83457..00000000 Binary files a/app/src/main/res/drawable-mdpi/notification_close.png and /dev/null differ diff --git a/app/src/main/res/drawable-mdpi/notification_close_dark.png b/app/src/main/res/drawable-mdpi/notification_close_dark.png deleted file mode 100644 index fb8c8515..00000000 Binary files a/app/src/main/res/drawable-mdpi/notification_close_dark.png and /dev/null differ diff --git a/app/src/main/res/drawable-xhdpi/notification_close.png b/app/src/main/res/drawable-xhdpi/notification_close.png deleted file mode 100644 index 9ca4ed12..00000000 Binary files a/app/src/main/res/drawable-xhdpi/notification_close.png and /dev/null differ diff --git a/app/src/main/res/drawable-xhdpi/notification_close_dark.png b/app/src/main/res/drawable-xhdpi/notification_close_dark.png deleted file mode 100644 index e911a9ac..00000000 Binary files a/app/src/main/res/drawable-xhdpi/notification_close_dark.png and /dev/null differ diff --git a/app/src/main/res/drawable-xxhdpi/notification_close.png b/app/src/main/res/drawable-xxhdpi/notification_close.png deleted file mode 100644 index bb9d4814..00000000 Binary files a/app/src/main/res/drawable-xxhdpi/notification_close.png and /dev/null differ diff --git a/app/src/main/res/drawable-xxhdpi/notification_close_dark.png b/app/src/main/res/drawable-xxhdpi/notification_close_dark.png deleted file mode 100644 index d4105edc..00000000 Binary files a/app/src/main/res/drawable-xxhdpi/notification_close_dark.png and /dev/null differ diff --git a/app/src/main/res/layout-v21/notification.xml b/app/src/main/res/layout-v21/notification.xml deleted file mode 100644 index c6176e8a..00000000 --- a/app/src/main/res/layout-v21/notification.xml +++ /dev/null @@ -1,99 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -Copyright (C) 2012 Christopher Eby <kreed@kreed.org> - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. ---> -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="fill_parent" - android:layout_height="64dp" - android:orientation="horizontal" - > - <ImageView - android:id="@+id/cover" - android:scaleType="centerCrop" - android:layout_width="64dp" - android:layout_height="64dp" - android:layout_marginRight="8dp" - android:contentDescription="@string/cover_art" /> - <LinearLayout - android:layout_width="0px" - android:layout_height="wrap_content" - android:layout_weight="1" - android:layout_gravity="center" - android:orientation="vertical"> - <TextView - android:id="@+id/title" - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:textAppearance="@android:style/TextAppearance.Material.Notification.Title" - android:singleLine="true" - android:ellipsize="marquee" /> - <TextView - android:id="@+id/artist" - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:textAppearance="@android:style/TextAppearance.Material.Notification.Line2" - android:singleLine="true" - android:ellipsize="marquee" /> - </LinearLayout> - <ImageButton - android:id="@+id/previous" - android:paddingTop="5dp" - android:paddingBottom="5dp" - android:layout_height="42dp" - android:layout_width="wrap_content" - android:layout_gravity="center" - android:background="?android:attr/selectableItemBackground" - android:scaleType="fitCenter" - android:src="@drawable/widget_previous" - android:contentDescription="@string/previous_song" /> - <ImageButton - android:id="@+id/play_pause" - android:paddingTop="5dp" - android:paddingBottom="5dp" - android:layout_height="42dp" - android:layout_width="wrap_content" - android:layout_gravity="center" - android:background="?android:attr/selectableItemBackground" - android:scaleType="fitCenter" - android:src="@drawable/widget_play" - android:contentDescription="@string/play_pause" /> - <ImageButton - android:id="@+id/next" - android:paddingTop="5dp" - android:paddingBottom="5dp" - android:layout_height="42dp" - android:layout_width="wrap_content" - android:layout_gravity="center" - android:background="?android:attr/selectableItemBackground" - android:scaleType="fitCenter" - android:src="@drawable/widget_next" - android:contentDescription="@string/next_song" /> - <ImageButton - android:id="@+id/close" - android:padding="5dp" - android:layout_height="42dp" - android:layout_width="wrap_content" - android:layout_gravity="center" - android:background="?android:attr/selectableItemBackground" - android:scaleType="fitCenter" - android:src="@drawable/notification_close_dark" - android:contentDescription="@string/close_notification" /> -</LinearLayout> diff --git a/app/src/main/res/layout-v21/notification_expanded.xml b/app/src/main/res/layout-v21/notification_expanded.xml deleted file mode 100644 index de1e9ef5..00000000 --- a/app/src/main/res/layout-v21/notification_expanded.xml +++ /dev/null @@ -1,130 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -Copyright (C) 2014 Adrian Ulrich <adrian@blinkenlights.ch> - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see <http://www.gnu.org/licenses/>. ---> -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:layout_gravity="center_vertical" - android:orientation="horizontal"> - - <ImageView - android:id="@+id/cover" - android:scaleType="centerCrop" - android:layout_width="128dp" - android:layout_height="128dp" - android:layout_marginRight="8dp" - android:contentDescription="@string/cover_art" /> - - <LinearLayout - android:layout_width="match_parent" - android:layout_height="match_parent" - android:orientation="vertical"> - - <LinearLayout - android:layout_width="match_parent" - android:layout_height="0dp" - android:layout_weight="1" - android:orientation="horizontal"> - <LinearLayout - android:layout_marginTop="4dp" - android:layout_width="0px" - android:layout_height="match_parent" - android:layout_weight="1" - android:layout_gravity="center" - android:orientation="vertical"> - <TextView - android:id="@+id/title" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:textAppearance="@android:style/TextAppearance.Material.Notification.Title" - android:singleLine="true" - android:ellipsize="marquee" /> - <TextView - android:id="@+id/artist" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:textAppearance="@android:style/TextAppearance.Material.Notification.Line2" - android:singleLine="true" - android:ellipsize="marquee" /> - <TextView - android:id="@+id/album" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:textAppearance="@android:style/TextAppearance.Material.Notification.Line2" - android:singleLine="true" - android:ellipsize="marquee" /> - </LinearLayout> - - <ImageButton - android:id="@+id/close" - android:padding="5dp" - android:layout_width="32dp" - android:layout_height="32dp" - android:scaleType="fitCenter" - android:background="?android:attr/selectableItemBackground" - android:src="@drawable/notification_close_dark" - android:contentDescription="@string/close_notification" /> - </LinearLayout> - - <!-- start controll buttons --> - <LinearLayout - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="horizontal"> - <ImageButton - android:id="@+id/previous" - android:paddingTop="5dp" - android:paddingBottom="5dp" - android:layout_height="42dp" - android:layout_width="match_parent" - android:layout_gravity="center" - android:layout_weight="1" - android:background="?android:attr/selectableItemBackground" - android:scaleType="fitCenter" - android:src="@drawable/widget_previous" - android:contentDescription="@string/next_song" /> - <ImageButton - android:id="@+id/play_pause" - android:paddingTop="5dp" - android:paddingBottom="5dp" - android:layout_height="42dp" - android:layout_width="match_parent" - android:layout_gravity="center" - android:layout_weight="1" - android:background="?android:attr/selectableItemBackground" - android:scaleType="fitCenter" - android:src="@drawable/widget_play" - android:contentDescription="@string/play_pause" /> - <ImageButton - android:id="@+id/next" - android:paddingTop="5dp" - android:paddingBottom="5dp" - android:layout_height="42dp" - android:layout_width="match_parent" - android:layout_gravity="center" - android:layout_weight="1" - android:background="?android:attr/selectableItemBackground" - android:scaleType="fitCenter" - android:src="@drawable/widget_next" - android:contentDescription="@string/next_song" /> - </LinearLayout> - <!-- end controll buttons --> - - </LinearLayout> - - -</LinearLayout> diff --git a/app/src/main/res/layout/notification.xml b/app/src/main/res/layout/notification.xml deleted file mode 100644 index 5672c876..00000000 --- a/app/src/main/res/layout/notification.xml +++ /dev/null @@ -1,99 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -Copyright (C) 2012 Christopher Eby <kreed@kreed.org> - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. ---> -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="fill_parent" - android:layout_height="fill_parent" - android:layout_gravity="center_vertical" - android:orientation="horizontal"> - <ImageView - android:id="@+id/cover" - android:scaleType="centerCrop" - android:layout_width="64dip" - android:layout_height="64dip" - android:layout_marginRight="8dip" - android:contentDescription="@string/cover_art" /> - <LinearLayout - android:layout_width="0px" - android:layout_height="wrap_content" - android:layout_weight="1" - android:layout_gravity="center" - android:orientation="vertical"> - <TextView - android:id="@+id/title" - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:textAppearance="@android:style/TextAppearance.StatusBar.EventContent.Title" - android:singleLine="true" - android:ellipsize="marquee" /> - <TextView - android:id="@+id/artist" - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:textAppearance="@android:style/TextAppearance.StatusBar.EventContent" - android:singleLine="true" - android:ellipsize="marquee" /> - </LinearLayout> - <ImageButton - android:id="@+id/previous" - android:paddingTop="5dip" - android:paddingBottom="5dip" - android:layout_height="42dip" - android:layout_width="wrap_content" - android:layout_gravity="center" - android:background="?android:attr/selectableItemBackground" - android:scaleType="fitCenter" - android:src="@drawable/widget_previous" - android:contentDescription="@string/previous_song" /> - <ImageButton - android:id="@+id/play_pause" - android:paddingTop="5dip" - android:paddingBottom="5dip" - android:layout_height="42dip" - android:layout_width="wrap_content" - android:layout_gravity="center" - android:background="?android:attr/selectableItemBackground" - android:scaleType="fitCenter" - android:src="@drawable/widget_play" - android:contentDescription="@string/play_pause" /> - <ImageButton - android:id="@+id/next" - android:paddingTop="5dip" - android:paddingBottom="5dip" - android:layout_height="42dip" - android:layout_width="wrap_content" - android:layout_gravity="center" - android:background="?android:attr/selectableItemBackground" - android:scaleType="fitCenter" - android:src="@drawable/widget_next" - android:contentDescription="@string/next_song" /> - <ImageButton - android:id="@+id/close" - android:padding="5dip" - android:layout_height="42dip" - android:layout_width="wrap_content" - android:layout_gravity="center" - android:background="?android:attr/selectableItemBackground" - android:scaleType="fitCenter" - android:src="@drawable/notification_close" - android:contentDescription="@string/close_notification" /> -</LinearLayout> diff --git a/app/src/main/res/layout/notification_expanded.xml b/app/src/main/res/layout/notification_expanded.xml deleted file mode 100644 index b5ea3d26..00000000 --- a/app/src/main/res/layout/notification_expanded.xml +++ /dev/null @@ -1,130 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -Copyright (C) 2014 Adrian Ulrich <adrian@blinkenlights.ch> - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see <http://www.gnu.org/licenses/>. ---> -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:layout_gravity="center_vertical" - android:orientation="horizontal"> - - <ImageView - android:id="@+id/cover" - android:scaleType="centerCrop" - android:layout_width="128dip" - android:layout_height="128dip" - android:layout_marginRight="8dip" - android:contentDescription="@string/cover_art" /> - - <LinearLayout - android:layout_width="match_parent" - android:layout_height="match_parent" - android:orientation="vertical"> - - <LinearLayout - android:layout_width="match_parent" - android:layout_height="0dp" - android:layout_weight="1" - android:orientation="horizontal"> - <LinearLayout - android:layout_marginTop="4dip" - android:layout_width="0px" - android:layout_height="match_parent" - android:layout_weight="1" - android:layout_gravity="center" - android:orientation="vertical"> - <TextView - android:id="@+id/title" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:textAppearance="@android:style/TextAppearance.StatusBar.EventContent.Title" - android:singleLine="true" - android:ellipsize="marquee" /> - <TextView - android:id="@+id/artist" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:textAppearance="@android:style/TextAppearance.StatusBar.EventContent" - android:singleLine="true" - android:ellipsize="marquee" /> - <TextView - android:id="@+id/album" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:textAppearance="@android:style/TextAppearance.StatusBar.EventContent" - android:singleLine="true" - android:ellipsize="marquee" /> - </LinearLayout> - - <ImageButton - android:id="@+id/close" - android:padding="5dip" - android:layout_width="32dp" - android:layout_height="32dp" - android:scaleType="fitCenter" - android:background="?android:attr/selectableItemBackground" - android:src="@drawable/notification_close" - android:contentDescription="@string/close_notification" /> - </LinearLayout> - - <!-- start controll buttons --> - <LinearLayout - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="horizontal"> - <ImageButton - android:id="@+id/previous" - android:paddingTop="5dip" - android:paddingBottom="5dip" - android:layout_height="42dip" - android:layout_width="match_parent" - android:layout_gravity="center" - android:layout_weight="1" - android:background="?android:attr/selectableItemBackground" - android:scaleType="fitCenter" - android:src="@drawable/previous" - android:contentDescription="@string/next_song" /> - <ImageButton - android:id="@+id/play_pause" - android:paddingTop="5dip" - android:paddingBottom="5dip" - android:layout_height="42dip" - android:layout_width="match_parent" - android:layout_gravity="center" - android:layout_weight="1" - android:background="?android:attr/selectableItemBackground" - android:scaleType="fitCenter" - android:src="@drawable/play" - android:contentDescription="@string/play_pause" /> - <ImageButton - android:id="@+id/next" - android:paddingTop="5dip" - android:paddingBottom="5dip" - android:layout_height="42dip" - android:layout_width="match_parent" - android:layout_gravity="center" - android:layout_weight="1" - android:background="?android:attr/selectableItemBackground" - android:scaleType="fitCenter" - android:src="@drawable/next" - android:contentDescription="@string/next_song" /> - </LinearLayout> - <!-- end controll buttons --> - - </LinearLayout> - - -</LinearLayout> diff --git a/app/src/main/res/values/translatable.xml b/app/src/main/res/values/translatable.xml index 065f9a98..2bb3aed5 100644 --- a/app/src/main/res/values/translatable.xml +++ b/app/src/main/res/values/translatable.xml @@ -219,9 +219,6 @@ THE SOFTWARE. <string name="notification_visibility_title">Notification visibility</string> <string name="notification_action_title">Notification action</string> - <string name="notification_nag">Very verbose notification</string> - <string name="notification_nag_summary">Announce track changes using a \'Heads-Up-Notification\'</string> - <string name="playback_screen">Playback screen</string> <string name="playback_on_startup_title">Open on startup</string> <string name="playback_on_startup_summary">Open playback view on startup</string> diff --git a/app/src/main/res/xml/preference_notifications.xml b/app/src/main/res/xml/preference_notifications.xml index ad82fcea..a5e71d52 100644 --- a/app/src/main/res/xml/preference_notifications.xml +++ b/app/src/main/res/xml/preference_notifications.xml @@ -35,9 +35,4 @@ THE SOFTWARE. android:entries="@array/notification_action_entries" android:entryValues="@array/entry_values" android:defaultValue="0" /> - <CheckBoxPreference - android:key="notification_nag" - android:title="@string/notification_nag" - android:defaultValue="false" - android:summary="@string/notification_nag_summary" /> </PreferenceScreen> diff --git a/orig/drawable/notification_close.svgz b/orig/drawable/notification_close.svgz deleted file mode 100644 index 01943904..00000000 Binary files a/orig/drawable/notification_close.svgz and /dev/null differ diff --git a/orig/drawable/notification_close_dark.svgz b/orig/drawable/notification_close_dark.svgz deleted file mode 100644 index beb77500..00000000 Binary files a/orig/drawable/notification_close_dark.svgz and /dev/null differ