com.github.pedrovgs.tuentitv.recommendation.builder.RecommendationBuilder.java Source code

Java tutorial

Introduction

Here is the source code for com.github.pedrovgs.tuentitv.recommendation.builder.RecommendationBuilder.java

Source

/*
 * Copyright (C) 2014 Pedro Vicente Gmez Snchez.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.github.pedrovgs.tuentitv.recommendation.builder;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.v4.app.NotificationCompat;
import com.github.pedrovgs.tuentitv.R;
import com.squareup.picasso.Picasso;
import java.io.IOException;
import javax.inject.Inject;

/**
 * Builder created to show Android TV notifications. Main collaborator of this class is
 * NotificationManager and NotificationCompat notifications configured in recommendation mode to
 * show notifications in the Android TV dashboard.
 */
public class RecommendationBuilder {

    private Context context;
    private NotificationManager notificationManager;

    private int id;
    private int priority;
    private int smallIcon;
    private String title;
    private String description;
    private String imageUri;
    private String backgroundUri;
    private PendingIntent pendingIntent;

    @Inject
    public RecommendationBuilder() {
        //Empty
    }

    public RecommendationBuilder setContext(Context context) {
        this.context = context;
        return this;
    }

    public RecommendationBuilder setId(int id) {
        this.id = id;
        return this;
    }

    public RecommendationBuilder setPriority(int priority) {
        this.priority = priority;
        return this;
    }

    public RecommendationBuilder setTitle(String title) {
        this.title = title;
        return this;
    }

    public RecommendationBuilder setDescription(String description) {
        this.description = description;
        return this;
    }

    public RecommendationBuilder setImage(String uri) {
        imageUri = uri;
        return this;
    }

    public RecommendationBuilder setBackground(String uri) {
        backgroundUri = uri;
        return this;
    }

    public RecommendationBuilder setIntent(PendingIntent intent) {
        pendingIntent = intent;
        return this;
    }

    public RecommendationBuilder setSmallIcon(int resourceId) {
        smallIcon = resourceId;
        return this;
    }

    public Notification build() throws IOException {
        if (notificationManager == null) {
            notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        }

        Bundle extras = new Bundle();
        if (backgroundUri != null) {
            extras.putString(Notification.EXTRA_BACKGROUND_IMAGE_URI, backgroundUri);
        }

        Bitmap image = Picasso.with(context).load(imageUri).get();

        Notification notification = new NotificationCompat.BigPictureStyle(new NotificationCompat.Builder(context)
                .setContentTitle(title).setContentText(description).setPriority(priority).setLocalOnly(true)
                .setOngoing(true).setColor(context.getResources().getColor(R.color.primary_color))
                .setCategory(Notification.CATEGORY_RECOMMENDATION).setLargeIcon(image).setSmallIcon(smallIcon)
                .setContentIntent(pendingIntent).setExtras(extras)).build();

        notificationManager.notify(id, notification);
        notificationManager = null;
        return notification;
    }
}