1 /* 2 * Copyright (C) 2014 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5 * in compliance with the License. You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software distributed under the License 10 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11 * or implied. See the License for the specific language governing permissions and limitations under 12 * the License. 13 */ 14 15 package com.example.android.leanback; 16 17 import android.app.Notification; 18 import android.app.NotificationManager; 19 import android.app.PendingIntent; 20 import android.content.Context; 21 import android.graphics.Bitmap; 22 import android.os.Bundle; 23 import android.support.v4.app.NotificationCompat; 24 import android.util.Log; 25 26 import com.squareup.picasso.Picasso; 27 28 import java.io.IOException; 29 30 /* 31 * This class builds recommendations as notifications with videos as inputs. 32 */ 33 public class RecommendationBuilder { 34 private static final String TAG = "RecommendationBuilder"; 35 36 private static int CARD_WIDTH = 313; 37 private static int CARD_HEIGHT = 176; 38 39 public static final String EXTRA_BACKGROUND_IMAGE_URL = "background_image_url"; 40 private Context mContext; 41 private NotificationManager mNotificationManager; 42 43 private int mId; 44 private int mPriority; 45 private int mSmallIcon; 46 private String mTitle; 47 private String mDescription; 48 private String mImageUri; 49 private String mBackgroundUri; 50 private PendingIntent mIntent; 51 52 public RecommendationBuilder() { 53 } 54 55 public RecommendationBuilder setContext(Context context) { 56 mContext = context; 57 return this; 58 } 59 60 public RecommendationBuilder setId(int id) { 61 mId = id; 62 return this; 63 } 64 65 public RecommendationBuilder setPriority(int priority) { 66 mPriority = priority; 67 return this; 68 } 69 70 public RecommendationBuilder setTitle(String title) { 71 mTitle = title; 72 return this; 73 } 74 75 public RecommendationBuilder setDescription(String description) { 76 mDescription = description; 77 return this; 78 } 79 80 public RecommendationBuilder setImage(String uri) { 81 mImageUri = uri; 82 return this; 83 } 84 85 public RecommendationBuilder setBackground(String uri) { 86 mBackgroundUri = uri; 87 return this; 88 } 89 90 public RecommendationBuilder setIntent(PendingIntent intent) { 91 mIntent = intent; 92 return this; 93 } 94 95 public RecommendationBuilder setSmallIcon(int resourceId) { 96 mSmallIcon = resourceId; 97 return this; 98 } 99 100 public Notification build() throws IOException { 101 102 Log.d(TAG, "Building notification - " + this.toString()); 103 104 if (mNotificationManager == null) { 105 mNotificationManager = (NotificationManager) mContext 106 .getSystemService(Context.NOTIFICATION_SERVICE); 107 } 108 109 Bundle extras = new Bundle(); 110 if (mBackgroundUri != null) { 111 extras.putString(EXTRA_BACKGROUND_IMAGE_URL, mBackgroundUri); 112 } 113 114 Bitmap image = Picasso.with(mContext) 115 .load(mImageUri) 116 .resize(Utils.dpToPx(CARD_WIDTH, mContext), Utils.dpToPx(CARD_HEIGHT, mContext)) 117 .get(); 118 119 Notification notification = new NotificationCompat.BigPictureStyle( 120 new NotificationCompat.Builder(mContext) 121 .setContentTitle(mTitle) 122 .setContentText(mDescription) 123 .setPriority(mPriority) 124 .setLocalOnly(true) 125 .setOngoing(true) 126 .setColor(mContext.getResources().getColor(R.color.fastlane_background)) 127 // .setCategory(Notification.CATEGORY_RECOMMENDATION) 128 .setCategory("recommendation") 129 .setLargeIcon(image) 130 .setSmallIcon(mSmallIcon) 131 .setContentIntent(mIntent) 132 .setExtras(extras)) 133 .build(); 134 135 mNotificationManager.notify(mId, notification); 136 mNotificationManager = null; 137 return notification; 138 } 139 140 @Override 141 public String toString() { 142 return "RecommendationBuilder{" + 143 ", mId=" + mId + 144 ", mPriority=" + mPriority + 145 ", mSmallIcon=" + mSmallIcon + 146 ", mTitle='" + mTitle + '\'' + 147 ", mDescription='" + mDescription + '\'' + 148 ", mImageUri='" + mImageUri + '\'' + 149 ", mBackgroundUri='" + mBackgroundUri + '\'' + 150 ", mIntent=" + mIntent + 151 '}'; 152 } 153 } 154