made new notification layout available for older platforms

This commit is contained in:
Christian Schabesberger 2016-02-19 13:22:49 +01:00
parent a94f9fd3e5
commit 1c17be9760
3 changed files with 112 additions and 124 deletions

View File

@ -205,9 +205,9 @@ public class BackgroundPlayer extends Service /*implements MediaPlayer.OnPrepare
if(action.equals(ACTION_PLAYPAUSE)) { if(action.equals(ACTION_PLAYPAUSE)) {
if(mediaPlayer.isPlaying()) { if(mediaPlayer.isPlaying()) {
mediaPlayer.pause(); mediaPlayer.pause();
note.contentView.setImageViewResource(R.id.backgroundPlayPause, R.drawable.ic_play_circle_filled_white_24dp); note.contentView.setImageViewResource(R.id.notificationPlayPause, R.drawable.ic_play_circle_filled_white_24dp);
if(android.os.Build.VERSION.SDK_INT >=16){ if(android.os.Build.VERSION.SDK_INT >=16){
note.bigContentView.setImageViewResource(R.id.backgroundPlayPause, R.drawable.ic_play_circle_filled_white_24dp); note.bigContentView.setImageViewResource(R.id.notificationPlayPause, R.drawable.ic_play_circle_filled_white_24dp);
} }
noteMgr.notify(noteID, note); noteMgr.notify(noteID, note);
} }
@ -215,9 +215,9 @@ public class BackgroundPlayer extends Service /*implements MediaPlayer.OnPrepare
//reacquire CPU lock after auto-releasing it on pause //reacquire CPU lock after auto-releasing it on pause
mediaPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK); mediaPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);
mediaPlayer.start(); mediaPlayer.start();
note.contentView.setImageViewResource(R.id.backgroundPlayPause, R.drawable.ic_pause_white_24dp); note.contentView.setImageViewResource(R.id.notificationPlayPause, R.drawable.ic_pause_white_24dp);
if(android.os.Build.VERSION.SDK_INT >=16){ if(android.os.Build.VERSION.SDK_INT >=16){
note.bigContentView.setImageViewResource(R.id.backgroundPlayPause, R.drawable.ic_pause_white_24dp); note.bigContentView.setImageViewResource(R.id.notificationPlayPause, R.drawable.ic_pause_white_24dp);
} }
noteMgr.notify(noteID, note); noteMgr.notify(noteID, note);
} }
@ -275,11 +275,13 @@ public class BackgroundPlayer extends Service /*implements MediaPlayer.OnPrepare
*/ */
//build intent to return to video, on tapping notification //build intent to return to video, on tapping notification
Intent openDetailView = new Intent(getApplicationContext(), Intent openDetailViewIntent = new Intent(getApplicationContext(),
VideoItemDetailActivity.class); VideoItemDetailActivity.class);
openDetailView.putExtra(VideoItemDetailFragment.STREAMING_SERVICE, serviceId); openDetailViewIntent.putExtra(VideoItemDetailFragment.STREAMING_SERVICE, serviceId);
openDetailView.putExtra(VideoItemDetailFragment.VIDEO_URL, webUrl); openDetailViewIntent.putExtra(VideoItemDetailFragment.VIDEO_URL, webUrl);
openDetailView.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); openDetailViewIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent openDetailView = PendingIntent.getActivity(owner, noteID,
openDetailViewIntent, PendingIntent.FLAG_UPDATE_CURRENT);
noteBuilder noteBuilder
.setOngoing(true) .setOngoing(true)
@ -291,64 +293,29 @@ public class BackgroundPlayer extends Service /*implements MediaPlayer.OnPrepare
String.format(res.getString( String.format(res.getString(
R.string.background_player_time_text), title)) R.string.background_player_time_text), title))
.setContentIntent(PendingIntent.getActivity(getApplicationContext(), .setContentIntent(PendingIntent.getActivity(getApplicationContext(),
noteID, openDetailView, noteID, openDetailViewIntent,
PendingIntent.FLAG_UPDATE_CURRENT)); PendingIntent.FLAG_UPDATE_CURRENT));
if (android.os.Build.VERSION.SDK_INT < 21) {
NotificationCompat.Action playButton = new NotificationCompat.Action.Builder
(R.drawable.ic_play_arrow_white_48dp,
res.getString(R.string.play_btn_text), playPI).build();
noteBuilder
.setContentTitle(title)
//really? Id like to put something more helpful here.
//was more of a placeholder than anything else. -medavox
//.setContentText("NewPipe is playing in the background")
.setContentText(channelName)
//.setAutoCancel(!mediaPlayer.isPlaying())
.setDeleteIntent(stopPI)
//doesn't fit with Notification.MediaStyle
//.setProgress(vidLength, 0, false)
.setLargeIcon(videoThumbnail)
.addAction(playButton);
//.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
//.setLargeIcon(cover)
//is wrapping this in an SDK version check really necessary,
// if we're using NotificationCompat?
// the compat libraries should handle this, right? -medavox
if (android.os.Build.VERSION.SDK_INT >= 16)
noteBuilder.setPriority(Notification.PRIORITY_LOW);
noteBuilder.setStyle(new NotificationCompat.MediaStyle()
//.setMediaSession(mMediaSession.getSessionToken())
.setShowActionsInCompactView(new int[]{0})
.setShowCancelButton(true)
.setCancelButtonIntent(stopPI));
if (videoThumbnail != null) {
noteBuilder.setLargeIcon(videoThumbnail);
}
note = noteBuilder.build();
} else {
RemoteViews view = RemoteViews view =
new RemoteViews(BuildConfig.APPLICATION_ID, R.layout.player_notification); new RemoteViews(BuildConfig.APPLICATION_ID, R.layout.player_notification);
view.setImageViewBitmap(R.id.backgroundCover, videoThumbnail); view.setImageViewBitmap(R.id.notificationCover, videoThumbnail);
view.setTextViewText(R.id.backgroundSongName, title); view.setTextViewText(R.id.notificationSongName, title);
view.setTextViewText(R.id.backgroundArtist, channelName); view.setTextViewText(R.id.notificationArtist, channelName);
view.setOnClickPendingIntent(R.id.backgroundStop, stopPI); view.setOnClickPendingIntent(R.id.notificationStop, stopPI);
view.setOnClickPendingIntent(R.id.backgroundPlayPause, playPI); view.setOnClickPendingIntent(R.id.notificationPlayPause, playPI);
view.setOnClickPendingIntent(R.id.notificationBackgroundButton, openDetailView);
//possibly found the expandedView problem, //possibly found the expandedView problem,
//but can't test it as I don't have a 5.0 device. -medavox //but can't test it as I don't have a 5.0 device. -medavox
RemoteViews expandedView = RemoteViews expandedView =
new RemoteViews(BuildConfig.APPLICATION_ID, R.layout.player_notification_expanded); new RemoteViews(BuildConfig.APPLICATION_ID, R.layout.player_notification_expanded);
expandedView.setImageViewBitmap(R.id.backgroundCover, videoThumbnail); expandedView.setImageViewBitmap(R.id.notificationCover, videoThumbnail);
expandedView.setTextViewText(R.id.backgroundSongName, title); expandedView.setTextViewText(R.id.notificationSongName, title);
expandedView.setTextViewText(R.id.backgroundArtist, channelName); expandedView.setTextViewText(R.id.notificationArtist, channelName);
expandedView.setOnClickPendingIntent(R.id.backgroundStop, stopPI); expandedView.setOnClickPendingIntent(R.id.notificationStop, stopPI);
expandedView.setOnClickPendingIntent(R.id.backgroundPlayPause, playPI); expandedView.setOnClickPendingIntent(R.id.notificationPlayPause, playPI);
expandedView.setOnClickPendingIntent(R.id.notificationBackgroundButton, openDetailView);
noteBuilder.setCategory(Notification.CATEGORY_TRANSPORT); noteBuilder.setCategory(Notification.CATEGORY_TRANSPORT);
@ -358,7 +325,7 @@ public class BackgroundPlayer extends Service /*implements MediaPlayer.OnPrepare
note = noteBuilder.build(); note = noteBuilder.build();
note.contentView = view; note.contentView = view;
//todo: This never shows up. I was not able to figure out why: if (android.os.Build.VERSION.SDK_INT > 16) {
note.bigContentView = expandedView; note.bigContentView = expandedView;
} }

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/content" android:id="@+id/content"
android:layout_width="fill_parent" android:layout_width="fill_parent"
@ -10,8 +10,20 @@
android:background="@color/background_notification_color" android:background="@color/background_notification_color"
tools:targetApi="jelly_bean"> tools:targetApi="jelly_bean">
<Button
android:id="@+id/notificationBackgroundButton"
android:layout_width="match_parent"
android:layout_height="64dp"
android:background="@android:color/transparent"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="64dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView <ImageView
android:id="@+id/backgroundCover" android:id="@+id/notificationCover"
android:layout_width="64dp" android:layout_width="64dp"
android:layout_height="64dp" android:layout_height="64dp"
android:src="@drawable/dummy_thumbnail" android:src="@drawable/dummy_thumbnail"
@ -25,7 +37,7 @@
android:orientation="vertical" > android:orientation="vertical" >
<TextView <TextView
android:id="@+id/backgroundSongName" android:id="@+id/notificationSongName"
style="@android:style/TextAppearance.StatusBar.EventContent.Title" style="@android:style/TextAppearance.StatusBar.EventContent.Title"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@ -34,7 +46,7 @@
android:text="title" /> android:text="title" />
<TextView <TextView
android:id="@+id/backgroundArtist" android:id="@+id/notificationArtist"
style="@android:style/TextAppearance.StatusBar.EventContent" style="@android:style/TextAppearance.StatusBar.EventContent"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@ -44,7 +56,7 @@
</LinearLayout> </LinearLayout>
<ImageButton <ImageButton
android:id="@+id/backgroundPlayPause" android:id="@+id/notificationPlayPause"
android:layout_width="40dp" android:layout_width="40dp"
android:layout_height="40dp" android:layout_height="40dp"
android:layout_margin="5dp" android:layout_margin="5dp"
@ -54,7 +66,7 @@
android:src="@drawable/ic_pause_white_24dp" /> android:src="@drawable/ic_pause_white_24dp" />
<ImageButton <ImageButton
android:id="@+id/backgroundStop" android:id="@+id/notificationStop"
android:layout_width="40dp" android:layout_width="40dp"
android:layout_height="40dp" android:layout_height="40dp"
android:layout_margin="5dp" android:layout_margin="5dp"
@ -64,3 +76,6 @@
android:src="@drawable/ic_close_white_24dp" /> android:src="@drawable/ic_close_white_24dp" />
</LinearLayout> </LinearLayout>
</RelativeLayout>

View File

@ -8,8 +8,14 @@
android:background="@color/background_notification_color" android:background="@color/background_notification_color"
tools:targetApi="jelly_bean" > tools:targetApi="jelly_bean" >
<Button
android:id="@+id/notificationBackgroundButton"
android:layout_width="match_parent"
android:layout_height="128dp"
android:background="@android:color/transparent"/>
<ImageView <ImageView
android:id="@+id/backgroundCover" android:id="@+id/notificationCover"
android:layout_width="128dp" android:layout_width="128dp"
android:layout_height="128dp" android:layout_height="128dp"
android:layout_marginRight="8dp" android:layout_marginRight="8dp"
@ -19,13 +25,13 @@
<LinearLayout <LinearLayout
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_height="fill_parent"
android:layout_above="@+id/backgroundButtons" android:layout_above="@+id/notificationButtons"
android:layout_toRightOf="@+id/backgroundCover" android:layout_toRightOf="@+id/notificationCover"
android:gravity="center_vertical" android:gravity="center_vertical"
android:orientation="vertical" > android:orientation="vertical" >
<TextView <TextView
android:id="@+id/backgroundSongName" android:id="@+id/notificationSongName"
style="@android:style/TextAppearance.StatusBar.EventContent.Title" style="@android:style/TextAppearance.StatusBar.EventContent.Title"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@ -35,7 +41,7 @@
android:text="title" /> android:text="title" />
<TextView <TextView
android:id="@+id/backgroundArtist" android:id="@+id/notificationArtist"
style="@android:style/TextAppearance.StatusBar.EventContent" style="@android:style/TextAppearance.StatusBar.EventContent"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@ -45,7 +51,7 @@
</LinearLayout> </LinearLayout>
<ImageButton <ImageButton
android:id="@+id/backgroundStop" android:id="@+id/notificationStop"
android:layout_width="30dp" android:layout_width="30dp"
android:layout_height="30dp" android:layout_height="30dp"
android:layout_alignParentRight="true" android:layout_alignParentRight="true"
@ -56,16 +62,16 @@
android:src="@drawable/ic_close_white_24dp" /> android:src="@drawable/ic_close_white_24dp" />
<RelativeLayout <RelativeLayout
android:id="@+id/backgroundButtons" android:id="@+id/notificationButtons"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="50dp" android:layout_height="50dp"
android:layout_alignBottom="@id/backgroundCover" android:layout_alignBottom="@id/notificationCover"
android:layout_alignParentRight="true" android:layout_alignParentRight="true"
android:layout_toRightOf="@+id/backgroundCover" android:layout_toRightOf="@+id/notificationCover"
android:orientation="horizontal" > android:orientation="horizontal" >
<ImageButton <ImageButton
android:id="@+id/backgroundPlayPause" android:id="@+id/notificationPlayPause"
android:layout_width="40dp" android:layout_width="40dp"
android:layout_height="40dp" android:layout_height="40dp"
android:background="#00ffffff" android:background="#00ffffff"