Source code
package android.support.v7.app;
import android.app.Notification;
import android.app.PendingIntent;
import android.content.Context;
import android.os.Build.VERSION;
import android.support.v4.app.NotificationBuilderWithBuilderAccessor;
import android.support.v4.app.NotificationCompat.Style;
import android.support.v4.media.session.MediaSessionCompat.Token;
import android.support.v7.internal.app.NotificationCompatImpl21;
import android.support.v7.internal.app.NotificationCompatImplBase;
public class NotificationCompat extends android.support.v4.app.NotificationCompat {
public static class Builder extends android.support.v4.app.NotificationCompat.Builder {
public Builder(Context context) {
super(context);
}
protected BuilderExtender getExtender() {
if (VERSION.SDK_INT >= 21) {
return new LollipopExtender();
}
if (VERSION.SDK_INT >= 16) {
return new JellybeanExtender();
}
if (VERSION.SDK_INT >= 14) {
return new IceCreamSandwichExtender();
}
return super.getExtender();
}
}
private static class IceCreamSandwichExtender extends BuilderExtender {
private IceCreamSandwichExtender() {
}
public Notification build(android.support.v4.app.NotificationCompat.Builder b, NotificationBuilderWithBuilderAccessor builder) {
NotificationCompat.addMediaStyleToBuilderIcs(builder, b);
return builder.build();
}
}
private static class JellybeanExtender extends BuilderExtender {
private JellybeanExtender() {
}
public Notification build(android.support.v4.app.NotificationCompat.Builder b, NotificationBuilderWithBuilderAccessor builder) {
NotificationCompat.addMediaStyleToBuilderIcs(builder, b);
Notification n = builder.build();
NotificationCompat.addBigMediaStyleToBuilderJellybean(n, b);
return n;
}
}
private static class LollipopExtender extends BuilderExtender {
private LollipopExtender() {
}
public Notification build(android.support.v4.app.NotificationCompat.Builder b, NotificationBuilderWithBuilderAccessor builder) {
NotificationCompat.addMediaStyleToBuilderLollipop(builder, b.mStyle);
return builder.build();
}
}
public static class MediaStyle extends Style {
int[] mActionsToShowInCompact = null;
PendingIntent mCancelButtonIntent;
boolean mShowCancelButton;
Token mToken;
public MediaStyle(android.support.v4.app.NotificationCompat.Builder builder) {
setBuilder(builder);
}
public MediaStyle setShowActionsInCompactView(int... actions) {
this.mActionsToShowInCompact = actions;
return this;
}
public MediaStyle setMediaSession(Token token) {
this.mToken = token;
return this;
}
public MediaStyle setShowCancelButton(boolean show) {
this.mShowCancelButton = show;
return this;
}
public MediaStyle setCancelButtonIntent(PendingIntent pendingIntent) {
this.mCancelButtonIntent = pendingIntent;
return this;
}
}
private static void addMediaStyleToBuilderLollipop(NotificationBuilderWithBuilderAccessor builder, Style style) {
if (style instanceof MediaStyle) {
MediaStyle mediaStyle = (MediaStyle) style;
NotificationCompatImpl21.addMediaStyle(builder, mediaStyle.mActionsToShowInCompact, mediaStyle.mToken != null ? mediaStyle.mToken.getToken() : null);
}
}
private static void addMediaStyleToBuilderIcs(NotificationBuilderWithBuilderAccessor builder, android.support.v4.app.NotificationCompat.Builder b) {
if (b.mStyle instanceof MediaStyle) {
MediaStyle mediaStyle = b.mStyle;
NotificationCompatImplBase.overrideContentView(builder, b.mContext, b.mContentTitle, b.mContentText, b.mContentInfo, b.mNumber, b.mLargeIcon, b.mSubText, b.mUseChronometer, b.mNotification.when, b.mActions, mediaStyle.mActionsToShowInCompact, mediaStyle.mShowCancelButton, mediaStyle.mCancelButtonIntent);
}
}
private static void addBigMediaStyleToBuilderJellybean(Notification n, android.support.v4.app.NotificationCompat.Builder b) {
if (b.mStyle instanceof MediaStyle) {
MediaStyle mediaStyle = b.mStyle;
NotificationCompatImplBase.overrideBigContentView(n, b.mContext, b.mContentTitle, b.mContentText, b.mContentInfo, b.mNumber, b.mLargeIcon, b.mSubText, b.mUseChronometer, b.mNotification.when, b.mActions, mediaStyle.mShowCancelButton, mediaStyle.mCancelButtonIntent);
}
}
}