List of usage examples for android.graphics.drawable Drawable draw
public abstract void draw(@NonNull Canvas canvas);
From source file:net.yanzm.mth.MaterialTabHost.java
@Override protected void dispatchDraw(Canvas canvas) { super.dispatchDraw(canvas); if (getChildCount() == 0) { return;/*from ww w. ja v a2 s . c om*/ } final Drawable d = indicator; View tabView = tabWidget.getChildTabViewAt(position); if (tabView == null) { return; } View nextTabView = position + 1 < tabWidget.getTabCount() ? tabWidget.getChildTabViewAt(position + 1) : null; int tabWidth = tabView.getWidth(); int nextTabWidth = nextTabView == null ? tabWidth : nextTabView.getWidth(); int indicatorWidth = (int) (nextTabWidth * positionOffset + tabWidth * (1 - positionOffset)); int indicatorLeft = (int) (getPaddingLeft() + tabView.getLeft() + positionOffset * tabWidth); int height = getHeight(); d.setBounds(indicatorLeft, height - indicatorHeight, indicatorLeft + indicatorWidth, height); d.draw(canvas); }
From source file:com.hirebuddy.util.CircleImageView.java
private Bitmap getBitmapFromDrawable(Drawable drawable) { if (drawable == null) { return null; }// www.j a v a2 s. c o m if (drawable instanceof BitmapDrawable) { return ((BitmapDrawable) drawable).getBitmap(); } try { Bitmap bitmap; if (drawable instanceof ColorDrawable) { bitmap = Bitmap.createBitmap(COLORDRAWABLE_DIMENSION, COLORDRAWABLE_DIMENSION, BITMAP_CONFIG); } else { bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), BITMAP_CONFIG); } Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); drawable.draw(canvas); return bitmap; } catch (Exception e) { e.printStackTrace(); return null; } }
From source file:com.justwayward.reader.view.RVPIndicator.java
public RVPIndicator(Context context, AttributeSet attrs) { super(context, attrs); // /*from ww w . j a v a2s. co m*/ TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.RVPIndicator); mTabVisibleCount = a.getInt(R.styleable.RVPIndicator_item_count, D_TAB_COUNT); mTextColorNormal = a.getColor(R.styleable.RVPIndicator_text_color_normal, D_TEXT_COLOR_NORMAL); mTextColorHighlight = a.getColor(R.styleable.RVPIndicator_text_color_hightlight, D_TEXT_COLOR_HIGHLIGHT); mTextSize = a.getDimensionPixelSize(R.styleable.RVPIndicator_text_size, 16); mIndicatorColor = a.getColor(R.styleable.RVPIndicator_indicator_color, D_INDICATOR_COLOR); mIndicatorStyle = a.getInt(R.styleable.RVPIndicator_indicator_style, STYLE_LINE); Drawable drawable = a.getDrawable(R.styleable.RVPIndicator_indicator_src); if (drawable != null) { if (drawable instanceof BitmapDrawable) { mBitmap = ((BitmapDrawable) drawable).getBitmap(); } else if (drawable instanceof NinePatchDrawable) { // .9? Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); drawable.draw(canvas); mBitmap = bitmap; } } else { mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.heart_love); } a.recycle(); /** * */ mPaint = new Paint(); mPaint.setAntiAlias(true); mPaint.setColor(mIndicatorColor); mPaint.setStyle(Style.FILL); }
From source file:com.waz.zclient.controllers.notifications.NotificationsController.java
private Bitmap getAppIcon() { try {/*from w w w . j a v a 2s . com*/ Drawable icon = context.getPackageManager().getApplicationIcon(context.getPackageName()); if (icon instanceof BitmapDrawable) { return ((BitmapDrawable) icon).getBitmap(); } Bitmap bitmap = Bitmap.createBitmap(icon.getIntrinsicWidth(), icon.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); icon.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); icon.draw(canvas); return bitmap; } catch (PackageManager.NameNotFoundException e) { return BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_launcher_wire); } }
From source file:com.yk.notification.util.BitmapUtil.java
/** * DrawableBitmap/*from www . j a va 2s . co m*/ * * @param drawable * Drawable * @return Bitmap */ public static Bitmap getBitmapFromDrawable(Drawable drawable) { int width = drawable.getIntrinsicWidth(); int height = drawable.getIntrinsicHeight(); Bitmap bitmap = Bitmap.createBitmap(width, height, drawable.getOpacity() != PixelFormat.OPAQUE ? Config.ARGB_8888 : Config.RGB_565); Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, width, height); drawable.draw(canvas); return bitmap; }
From source file:com.kmagic.solitaire.DrawMaster.java
/** * Draw regular cards with suits representing values on card * @param r application resources reference *///from www . j ava2 s .c o m private void drawCards(final Resources r) { Paint cardFrontPaint = new Paint(); Paint cardBorderPaint = new Paint(); Bitmap[] suit = new Bitmap[4]; Bitmap[] revSuit = new Bitmap[4]; Bitmap[] smallSuit = new Bitmap[4]; Bitmap redJack; Bitmap redQueen; Bitmap redKing; Bitmap blackJack; Bitmap blackQueen; Bitmap blackKing; Canvas canvas; final int width = Card.WIDTH; final int height = Card.HEIGHT; final String[] card_values = mResources.getStringArray(R.array.card_values); final Paint textPaintLeft = getTextPaint(mSuitsSize, Paint.Align.LEFT); Drawable drawable = ResourcesCompat.getDrawable(r, R.drawable.cardback, null); mCardHidden = Bitmap.createBitmap(Card.WIDTH, Card.HEIGHT, Bitmap.Config.ARGB_8888); canvas = new Canvas(mCardHidden); drawable.setBounds(0, 0, Card.WIDTH, Card.HEIGHT); drawable.draw(canvas); for (int i = 0; i < 4; i++) { suit[i] = Bitmap.createBitmap((int) mSuitsSize, (int) mSuitsSize, Bitmap.Config.ARGB_8888); revSuit[i] = Bitmap.createBitmap((int) mSuitsSize, (int) mSuitsSize, Bitmap.Config.ARGB_8888); canvas = new Canvas(suit[i]); drawSuit(i, canvas, mSuitsSize); canvas = new Canvas(revSuit[i]); canvas.rotate(180, mSuitsSize / 2, mSuitsSize / 2); drawSuit(i, canvas, mSuitsSize); } for (int i = 0; i < 4; i++) { smallSuit[i] = Bitmap.createBitmap((int) mSuitsSizeHalf, (int) mSuitsSizeHalf, Bitmap.Config.ARGB_8888); canvas = new Canvas(smallSuit[i]); drawSuit(i, canvas, mSuitsSizeHalf); } final int faceWidth = width - 20; final int faceHeight = height / 2 - (int) mSuitsSize; blackJack = createFaceBitmap(r, R.drawable.blackjack, faceWidth, faceHeight); blackQueen = createFaceBitmap(r, R.drawable.blackqueen, faceWidth, faceHeight); blackKing = createFaceBitmap(r, R.drawable.blackking, faceWidth, faceHeight); redJack = createFaceBitmap(r, R.drawable.redjack, faceWidth, faceHeight); redQueen = createFaceBitmap(r, R.drawable.redqueen, faceWidth, faceHeight); redKing = createFaceBitmap(r, R.drawable.redking, faceWidth, faceHeight); cardBorderPaint.setARGB(255, 0, 0, 0); cardFrontPaint.setARGB(255, 255, 255, 255); RectF rectf = new RectF(); for (int suitIdx = 0; suitIdx < 4; suitIdx++) { for (int valueIdx = 0; valueIdx < 13; valueIdx++) { mCardBitmap[suitIdx * 13 + valueIdx] = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); canvas = new Canvas(mCardBitmap[suitIdx * 13 + valueIdx]); drawCardBackground(rectf, canvas, cardBorderPaint, cardFrontPaint); drawCardValue(textPaintLeft, canvas, card_values[valueIdx], smallSuit[suitIdx], suitIdx); if (valueIdx >= 10) { canvas.drawBitmap(suit[suitIdx], mSuitsSize, mSuitsSize, mSuitPaint); canvas.drawBitmap(revSuit[suitIdx], width - mSuitsSize * 2, height - mSuitsSize * 2, mSuitPaint); } final float height_7th = height / 7; final float height_9th = height / 9; // Columns final float width_5th = width / 5; final float[] suitX = { width_5th, width / 2 - mSuitsSizeHalf, width - width_5th - mSuitsSize }; // Rows final float[] suitY = { height_7th, // row 1 height_9th * 3, // row 2 height - (height_9th * 4) - mSuitsSizeHalf / 2, // row 4 height - (height_7th * 2) }; // row 5 // Center final float suitMidY = height / 2 - mSuitsSizeHalf; switch (valueIdx + 1) { case 1: canvas.drawBitmap(suit[suitIdx], suitX[1], suitMidY, mSuitPaint); break; case 2: canvas.drawBitmap(suit[suitIdx], suitX[1], suitY[0], mSuitPaint); canvas.drawBitmap(revSuit[suitIdx], suitX[1], suitY[3], mSuitPaint); break; case 3: canvas.drawBitmap(suit[suitIdx], suitX[1], suitY[0], mSuitPaint); canvas.drawBitmap(suit[suitIdx], suitX[1], suitMidY, mSuitPaint); canvas.drawBitmap(revSuit[suitIdx], suitX[1], suitY[3], mSuitPaint); break; case 4: canvas.drawBitmap(suit[suitIdx], suitX[0], suitY[0], mSuitPaint); canvas.drawBitmap(suit[suitIdx], suitX[2], suitY[0], mSuitPaint); canvas.drawBitmap(revSuit[suitIdx], suitX[0], suitY[3], mSuitPaint); canvas.drawBitmap(revSuit[suitIdx], suitX[2], suitY[3], mSuitPaint); break; case 5: canvas.drawBitmap(suit[suitIdx], suitX[0], suitY[0], mSuitPaint); canvas.drawBitmap(suit[suitIdx], suitX[2], suitY[0], mSuitPaint); canvas.drawBitmap(suit[suitIdx], suitX[1], suitMidY, mSuitPaint); canvas.drawBitmap(revSuit[suitIdx], suitX[0], suitY[3], mSuitPaint); canvas.drawBitmap(revSuit[suitIdx], suitX[2], suitY[3], mSuitPaint); break; case 6: canvas.drawBitmap(suit[suitIdx], suitX[0], suitY[0], mSuitPaint); canvas.drawBitmap(suit[suitIdx], suitX[2], suitY[0], mSuitPaint); canvas.drawBitmap(suit[suitIdx], suitX[0], suitMidY, mSuitPaint); canvas.drawBitmap(suit[suitIdx], suitX[2], suitMidY, mSuitPaint); canvas.drawBitmap(revSuit[suitIdx], suitX[0], suitY[3], mSuitPaint); canvas.drawBitmap(revSuit[suitIdx], suitX[2], suitY[3], mSuitPaint); break; case 7: canvas.drawBitmap(suit[suitIdx], suitX[0], suitY[0], mSuitPaint); canvas.drawBitmap(suit[suitIdx], suitX[2], suitY[0], mSuitPaint); canvas.drawBitmap(suit[suitIdx], suitX[0], suitMidY, mSuitPaint); canvas.drawBitmap(suit[suitIdx], suitX[2], suitMidY, mSuitPaint); canvas.drawBitmap(suit[suitIdx], suitX[1], (suitMidY + suitY[0]) / 2, mSuitPaint); canvas.drawBitmap(revSuit[suitIdx], suitX[0], suitY[3], mSuitPaint); canvas.drawBitmap(revSuit[suitIdx], suitX[2], suitY[3], mSuitPaint); break; case 8: canvas.drawBitmap(suit[suitIdx], suitX[0], suitY[0], mSuitPaint); canvas.drawBitmap(suit[suitIdx], suitX[2], suitY[0], mSuitPaint); canvas.drawBitmap(suit[suitIdx], suitX[0], suitMidY, mSuitPaint); canvas.drawBitmap(suit[suitIdx], suitX[2], suitMidY, mSuitPaint); canvas.drawBitmap(suit[suitIdx], suitX[1], (suitMidY + suitY[0]) / 2, mSuitPaint); canvas.drawBitmap(revSuit[suitIdx], suitX[0], suitY[3], mSuitPaint); canvas.drawBitmap(revSuit[suitIdx], suitX[2], suitY[3], mSuitPaint); canvas.drawBitmap(revSuit[suitIdx], suitX[1], (suitY[3] + suitMidY) / 2, mSuitPaint); break; case 9: for (int i = 0; i < 4; i++) { canvas.drawBitmap(suit[suitIdx], suitX[(i % 2) * 2], suitY[i / 2], mSuitPaint); canvas.drawBitmap(revSuit[suitIdx], suitX[(i % 2) * 2], suitY[i / 2 + 2], mSuitPaint); } canvas.drawBitmap(suit[suitIdx], suitX[1], suitMidY, mSuitPaint); break; case 10: for (int i = 0; i < 4; i++) { canvas.drawBitmap(suit[suitIdx], suitX[(i % 2) * 2], suitY[i / 2], mSuitPaint); canvas.drawBitmap(revSuit[suitIdx], suitX[(i % 2) * 2], suitY[i / 2 + 2], mSuitPaint); } canvas.drawBitmap(suit[suitIdx], suitX[1], (suitMidY + suitY[0]) / 2 - mSuitsSizeHalf, mSuitPaint); canvas.drawBitmap(revSuit[suitIdx], suitX[1], (suitY[3] + suitMidY) / 2 + mSuitsSizeHalf / 2, mSuitPaint); break; case Card.JACK: if ((suitIdx & 1) == 1) { drawFaceBitmap(canvas, redJack, mSuitsSizeHalf, mSuitsSize, mSuitPaint); } else { drawFaceBitmap(canvas, blackJack, mSuitsSizeHalf, mSuitsSize, mSuitPaint); } break; case Card.QUEEN: if ((suitIdx & 1) == 1) { drawFaceBitmap(canvas, redQueen, mSuitsSizeHalf, mSuitsSize, mSuitPaint); } else { drawFaceBitmap(canvas, blackQueen, mSuitsSizeHalf, mSuitsSize, mSuitPaint); } break; case Card.KING: if ((suitIdx & 1) == 1) { drawFaceBitmap(canvas, redKing, mSuitsSizeHalf, mSuitsSize, mSuitPaint); } else { drawFaceBitmap(canvas, blackKing, mSuitsSizeHalf, mSuitsSize, mSuitPaint); } break; } } } }
From source file:com.android.launcher3.BubbleTextView.java
@Override public void draw(Canvas canvas) { if (!mCustomShadowsEnabled) { super.draw(canvas); return;//from ww w.j a v a 2 s .c o m } final Drawable background = mBackground; if (background != null) { final int scrollX = getScrollX(); final int scrollY = getScrollY(); if (mBackgroundSizeChanged) { background.setBounds(0, 0, getRight() - getLeft(), getBottom() - getTop()); mBackgroundSizeChanged = false; } if ((scrollX | scrollY) == 0) { background.draw(canvas); } else { canvas.translate(scrollX, scrollY); background.draw(canvas); canvas.translate(-scrollX, -scrollY); } } // If text is transparent, don't draw any shadow if (getCurrentTextColor() == ContextCompat.getColor(getContext(), android.R.color.transparent)) { getPaint().clearShadowLayer(); super.draw(canvas); return; } // We enhance the shadow by drawing the shadow twice float density = getResources().getDisplayMetrics().density; getPaint().setShadowLayer(density * AMBIENT_SHADOW_RADIUS, 0, 0, AMBIENT_SHADOW_COLOR); super.draw(canvas); canvas.save(Canvas.CLIP_SAVE_FLAG); canvas.clipRect(getScrollX(), getScrollY() + getExtendedPaddingTop(), getScrollX() + getWidth(), getScrollY() + getHeight(), Region.Op.INTERSECT); getPaint().setShadowLayer(density * KEY_SHADOW_RADIUS, 0.0f, density * KEY_SHADOW_OFFSET, KEY_SHADOW_COLOR); super.draw(canvas); canvas.restore(); }
From source file:com.tealeaf.TeaLeaf.java
public Bitmap getBitmapFromView(EditText view) { //Define a bitmap with the same size as the view Bitmap returnedBitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888); //Bind a canvas to it Canvas canvas = new Canvas(returnedBitmap); //Get the view's background Drawable bgDrawable = view.getBackground(); if (bgDrawable != null) { //has background drawable, then draw it on the canvas bgDrawable.draw(canvas); }/*from w w w . j av a2s . c om*/ // draw the view on the canvas view.draw(canvas); Paint p = new Paint(); p.setColor(Color.BLACK); p.setTextSize(24); canvas.drawText("'ello mate", 0, 0, p); //return the bitmap return returnedBitmap; }
From source file:com.ferdi2005.secondgram.AndroidUtilities.java
private static Intent createShortcutIntent(long did, boolean forDelete) { Intent shortcutIntent = new Intent(ApplicationLoader.applicationContext, OpenChatReceiver.class); int lower_id = (int) did; int high_id = (int) (did >> 32); TLRPC.User user = null;// w ww. java 2 s. c o m TLRPC.Chat chat = null; if (lower_id == 0) { shortcutIntent.putExtra("encId", high_id); TLRPC.EncryptedChat encryptedChat = MessagesController.getInstance().getEncryptedChat(high_id); if (encryptedChat == null) { return null; } user = MessagesController.getInstance().getUser(encryptedChat.user_id); } else if (lower_id > 0) { shortcutIntent.putExtra("userId", lower_id); user = MessagesController.getInstance().getUser(lower_id); } else if (lower_id < 0) { chat = MessagesController.getInstance().getChat(-lower_id); shortcutIntent.putExtra("chatId", -lower_id); } else { return null; } if (user == null && chat == null) { return null; } String name; TLRPC.FileLocation photo = null; if (user != null) { name = ContactsController.formatName(user.first_name, user.last_name); if (user.photo != null) { photo = user.photo.photo_small; } } else { name = chat.title; if (chat.photo != null) { photo = chat.photo.photo_small; } } shortcutIntent.setAction("com.tmessages.openchat" + did); shortcutIntent.addFlags(0x4000000); Intent addIntent = new Intent(); addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, name); addIntent.putExtra("duplicate", false); if (!forDelete) { Bitmap bitmap = null; if (photo != null) { try { File path = FileLoader.getPathToAttach(photo, true); bitmap = BitmapFactory.decodeFile(path.toString()); if (bitmap != null) { int size = AndroidUtilities.dp(58); Bitmap result = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888); result.eraseColor(Color.TRANSPARENT); Canvas canvas = new Canvas(result); BitmapShader shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); if (roundPaint == null) { roundPaint = new Paint(Paint.ANTI_ALIAS_FLAG); bitmapRect = new RectF(); } float scale = size / (float) bitmap.getWidth(); canvas.save(); canvas.scale(scale, scale); roundPaint.setShader(shader); bitmapRect.set(0, 0, bitmap.getWidth(), bitmap.getHeight()); canvas.drawRoundRect(bitmapRect, bitmap.getWidth(), bitmap.getHeight(), roundPaint); canvas.restore(); Drawable drawable = ApplicationLoader.applicationContext.getResources() .getDrawable(R.drawable.book_logo); int w = AndroidUtilities.dp(15); int left = size - w - AndroidUtilities.dp(2); int top = size - w - AndroidUtilities.dp(2); drawable.setBounds(left, top, left + w, top + w); drawable.draw(canvas); try { canvas.setBitmap(null); } catch (Exception e) { //don't promt, this will crash on 2.x } bitmap = result; } } catch (Throwable e) { FileLog.e(e); } } if (bitmap != null) { addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON, bitmap); } else { if (user != null) { if (user.bot) { addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource .fromContext(ApplicationLoader.applicationContext, R.drawable.book_bot)); } else { addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource .fromContext(ApplicationLoader.applicationContext, R.drawable.book_user)); } } else if (chat != null) { if (ChatObject.isChannel(chat) && !chat.megagroup) { addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource .fromContext(ApplicationLoader.applicationContext, R.drawable.book_channel)); } else { addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource .fromContext(ApplicationLoader.applicationContext, R.drawable.book_group)); } } } } return addIntent; }
From source file:org.gateshipone.malp.application.background.NotificationManager.java
public synchronized void updateNotification(MPDTrack track, MPDCurrentStatus.MPD_PLAYBACK_STATE state) { if (track != null) { mNotificationBuilder = new NotificationCompat.Builder(mService); // Open application intent Intent contentIntent = new Intent(mService, MainActivity.class); contentIntent.putExtra(MainActivity.MAINACTIVITY_INTENT_EXTRA_REQUESTEDVIEW, MainActivity.MAINACTIVITY_INTENT_EXTRA_REQUESTEDVIEW_NOWPLAYINGVIEW); contentIntent.addFlags(/* w w w. j a v a 2 s . c o m*/ Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_ANIMATION | Intent.FLAG_ACTIVITY_NO_HISTORY); PendingIntent contentPendingIntent = PendingIntent.getActivity(mService, INTENT_OPENGUI, contentIntent, PendingIntent.FLAG_UPDATE_CURRENT); mNotificationBuilder.setContentIntent(contentPendingIntent); // Set pendingintents // Previous song action Intent prevIntent = new Intent(BackgroundService.ACTION_PREVIOUS); PendingIntent prevPendingIntent = PendingIntent.getBroadcast(mService, INTENT_PREVIOUS, prevIntent, PendingIntent.FLAG_UPDATE_CURRENT); NotificationCompat.Action prevAction = new NotificationCompat.Action.Builder( R.drawable.ic_skip_previous_48dp, "Previous", prevPendingIntent).build(); // Pause/Play action PendingIntent playPauseIntent; int playPauseIcon; if (state == MPDCurrentStatus.MPD_PLAYBACK_STATE.MPD_PLAYING) { Intent pauseIntent = new Intent(BackgroundService.ACTION_PAUSE); playPauseIntent = PendingIntent.getBroadcast(mService, INTENT_PLAYPAUSE, pauseIntent, PendingIntent.FLAG_UPDATE_CURRENT); playPauseIcon = R.drawable.ic_pause_48dp; } else { Intent playIntent = new Intent(BackgroundService.ACTION_PLAY); playPauseIntent = PendingIntent.getBroadcast(mService, INTENT_PLAYPAUSE, playIntent, PendingIntent.FLAG_UPDATE_CURRENT); playPauseIcon = R.drawable.ic_play_arrow_48dp; } NotificationCompat.Action playPauseAction = new NotificationCompat.Action.Builder(playPauseIcon, "PlayPause", playPauseIntent).build(); // Stop action Intent stopIntent = new Intent(BackgroundService.ACTION_STOP); PendingIntent stopPendingIntent = PendingIntent.getBroadcast(mService, INTENT_STOP, stopIntent, PendingIntent.FLAG_UPDATE_CURRENT); NotificationCompat.Action stopActon = new NotificationCompat.Action.Builder( R.drawable.ic_stop_black_48dp, "Stop", stopPendingIntent).build(); // Next song action Intent nextIntent = new Intent(BackgroundService.ACTION_NEXT); PendingIntent nextPendingIntent = PendingIntent.getBroadcast(mService, INTENT_NEXT, nextIntent, PendingIntent.FLAG_UPDATE_CURRENT); NotificationCompat.Action nextAction = new NotificationCompat.Action.Builder( R.drawable.ic_skip_next_48dp, "Next", nextPendingIntent).build(); // Quit action Intent quitIntent = new Intent(BackgroundService.ACTION_QUIT_BACKGROUND_SERVICE); PendingIntent quitPendingIntent = PendingIntent.getBroadcast(mService, INTENT_QUIT, quitIntent, PendingIntent.FLAG_UPDATE_CURRENT); mNotificationBuilder.setDeleteIntent(quitPendingIntent); mNotificationBuilder.setVisibility(NotificationCompat.VISIBILITY_PUBLIC); mNotificationBuilder.setSmallIcon(R.drawable.ic_notification_24dp); mNotificationBuilder.addAction(prevAction); mNotificationBuilder.addAction(playPauseAction); mNotificationBuilder.addAction(stopActon); mNotificationBuilder.addAction(nextAction); NotificationCompat.MediaStyle notificationStyle = new NotificationCompat.MediaStyle(); notificationStyle.setShowActionsInCompactView(1, 2); mNotificationBuilder.setStyle(notificationStyle); String title; if (track.getTrackTitle().isEmpty()) { title = FormatHelper.getFilenameFromPath(track.getPath()); } else { title = track.getTrackTitle(); } mNotificationBuilder.setContentTitle(title); String secondRow; if (!track.getTrackArtist().isEmpty() && !track.getTrackAlbum().isEmpty()) { secondRow = track.getTrackArtist() + mService.getString(R.string.track_item_separator) + track.getTrackAlbum(); } else if (track.getTrackArtist().isEmpty() && !track.getTrackAlbum().isEmpty()) { secondRow = track.getTrackAlbum(); } else if (track.getTrackAlbum().isEmpty() && !track.getTrackArtist().isEmpty()) { secondRow = track.getTrackArtist(); } else { secondRow = track.getPath(); } // Set the media session metadata updateMetadata(track, state); mNotificationBuilder.setContentText(secondRow); // Remove unnecessary time info mNotificationBuilder.setWhen(0); // Cover but only if changed if (mNotification == null || !track.getTrackAlbum().equals(mLastTrack.getTrackAlbum())) { mLastTrack = track; mLastBitmap = null; mCoverLoader.getImage(mLastTrack, true); } // Only set image if an saved one is available if (mLastBitmap != null) { mNotificationBuilder.setLargeIcon(mLastBitmap); } else { /** * Create a dummy placeholder image for versions greater android 7 because it * does not automatically show the application icon anymore in mediastyle notifications. */ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { Drawable icon = mService.getDrawable(R.drawable.notification_placeholder_256dp); Bitmap iconBitmap = Bitmap.createBitmap(icon.getIntrinsicWidth(), icon.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(iconBitmap); DrawFilter filter = new PaintFlagsDrawFilter(Paint.ANTI_ALIAS_FLAG, 1); canvas.setDrawFilter(filter); icon.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); icon.setFilterBitmap(true); icon.draw(canvas); mNotificationBuilder.setLargeIcon(iconBitmap); } else { /** * For older android versions set the null icon which will result in a dummy icon * generated from the application icon. */ mNotificationBuilder.setLargeIcon(null); } } // Build the notification mNotification = mNotificationBuilder.build(); // Send the notification away mNotificationManager.notify(NOTIFICATION_ID, mNotification); } }