com.andrada.sitracker.tasks.receivers.UpdateStatusNotificationReceiver.java Source code

Java tutorial

Introduction

Here is the source code for com.andrada.sitracker.tasks.receivers.UpdateStatusNotificationReceiver.java

Source

/*
 * Copyright 2014 Gleb Godonoga.
 *
 * 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.andrada.sitracker.tasks.receivers;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.NotificationCompat;
import android.support.v4.app.TaskStackBuilder;

import com.andrada.sitracker.Constants;
import com.andrada.sitracker.R;
import com.andrada.sitracker.tasks.messages.UpdateFailedIntentMessage;
import com.andrada.sitracker.tasks.messages.UpdateSuccessfulIntentMessage;
import com.andrada.sitracker.ui.HomeActivity_;
import com.andrada.sitracker.util.AnalyticsHelper;

import org.jetbrains.annotations.NotNull;

import java.util.List;

public class UpdateStatusNotificationReceiver extends BroadcastReceiver {

    private final static int UPDATE_SUCCESS_NOTIFICATION_ID = 11987;
    private final static int UPDATE_FAIL_NOTIFICATION_ID = 2;

    @Override
    public void onReceive(@NotNull Context context, @NotNull Intent intent) {
        //See if there is something we can notify
        if (intent.getAction().equals(UpdateSuccessfulIntentMessage.SUCCESS_MESSAGE)) {
            int updatedAuthorsCount = intent.getIntExtra(Constants.NUMBER_OF_UPDATED_AUTHORS, 0);
            List<String> updatedAuthorNames = intent
                    .getStringArrayListExtra(Constants.AUTHOR_NAMES_UPDATED_IN_SESSION);
            if (updatedAuthorsCount > 0) {
                //Notify that update successful
                sendNotification(updatedAuthorsCount, updatedAuthorNames, context);
            }

        } else if (intent.getAction().equals(UpdateFailedIntentMessage.FAILED_MESSAGE)) {
            //Notify that update failed
            AnalyticsHelper.getInstance().sendException(UpdateFailedIntentMessage.FAILED_MESSAGE);
        }

    }

    private void sendNotification(int number, List<String> updatedAuthorNames, @NotNull Context context) {

        NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
        int maxLines = 4;
        if (updatedAuthorNames.size() < maxLines) {
            maxLines = updatedAuthorNames.size();
        }
        for (int i = 0; i < maxLines; i++) {
            inboxStyle.addLine(updatedAuthorNames.get(i));
        }
        if (updatedAuthorNames.size() > 4) {
            inboxStyle.setSummaryText(
                    context.getString(R.string.notification_more_summary, updatedAuthorNames.size() - 4));
        }
        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context)
                .setSmallIcon(R.drawable.notification)
                .setContentTitle(context.getResources().getString(R.string.notification_title))
                .setContentText(context.getResources().getQuantityString(R.plurals.authors_updated, number, number))
                .setAutoCancel(true).setOnlyAlertOnce(true)
                .setDefaults(Notification.DEFAULT_LIGHTS | Notification.DEFAULT_SOUND).setNumber(number)
                .setStyle(inboxStyle);

        // Creates an explicit intent for an Activity in your app
        Intent resultIntent = new Intent(context, HomeActivity_.class);
        // The stack builder object will contain an artificial back stack for the
        // started Activity.
        // This ensures that navigating backward from the Activity leads out of
        // your application to the Home screen.
        TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
        // Adds the back stack for the Intent (but not the Intent itself)
        stackBuilder.addParentStack(HomeActivity_.class);
        // Adds the Intent that starts the Activity to the top of the stack
        stackBuilder.addNextIntent(resultIntent);
        PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
        mBuilder.setContentIntent(resultPendingIntent);
        NotificationManager mNotificationManager = (NotificationManager) context
                .getSystemService(Context.NOTIFICATION_SERVICE);
        mNotificationManager.notify(UPDATE_SUCCESS_NOTIFICATION_ID, mBuilder.build());
    }
}