1*90c8c64dSAndroid Build Coastguard Worker /*
2*90c8c64dSAndroid Build Coastguard Worker  * Copyright (C) 2014 The Android Open Source Project
3*90c8c64dSAndroid Build Coastguard Worker  *
4*90c8c64dSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*90c8c64dSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*90c8c64dSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*90c8c64dSAndroid Build Coastguard Worker  *
8*90c8c64dSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*90c8c64dSAndroid Build Coastguard Worker  *
10*90c8c64dSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*90c8c64dSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*90c8c64dSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*90c8c64dSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*90c8c64dSAndroid Build Coastguard Worker  * limitations under the License.
15*90c8c64dSAndroid Build Coastguard Worker  */
16*90c8c64dSAndroid Build Coastguard Worker 
17*90c8c64dSAndroid Build Coastguard Worker package com.example.android.messagingservice;
18*90c8c64dSAndroid Build Coastguard Worker 
19*90c8c64dSAndroid Build Coastguard Worker import android.app.Notification;
20*90c8c64dSAndroid Build Coastguard Worker import android.content.BroadcastReceiver;
21*90c8c64dSAndroid Build Coastguard Worker import android.content.Context;
22*90c8c64dSAndroid Build Coastguard Worker import android.content.Intent;
23*90c8c64dSAndroid Build Coastguard Worker import android.graphics.BitmapFactory;
24*90c8c64dSAndroid Build Coastguard Worker import android.os.Bundle;
25*90c8c64dSAndroid Build Coastguard Worker import android.support.v4.app.NotificationManagerCompat;
26*90c8c64dSAndroid Build Coastguard Worker import android.support.v4.app.RemoteInput;
27*90c8c64dSAndroid Build Coastguard Worker import android.support.v4.text.TextUtilsCompat;
28*90c8c64dSAndroid Build Coastguard Worker import android.support.v4.app.NotificationCompat;
29*90c8c64dSAndroid Build Coastguard Worker import android.text.TextUtils;
30*90c8c64dSAndroid Build Coastguard Worker import android.util.Log;
31*90c8c64dSAndroid Build Coastguard Worker 
32*90c8c64dSAndroid Build Coastguard Worker /**
33*90c8c64dSAndroid Build Coastguard Worker  * A receiver that gets called when a reply is sent to a given conversationId.
34*90c8c64dSAndroid Build Coastguard Worker  */
35*90c8c64dSAndroid Build Coastguard Worker public class MessageReplyReceiver extends BroadcastReceiver {
36*90c8c64dSAndroid Build Coastguard Worker 
37*90c8c64dSAndroid Build Coastguard Worker     private static final String TAG = MessageReplyReceiver.class.getSimpleName();
38*90c8c64dSAndroid Build Coastguard Worker 
39*90c8c64dSAndroid Build Coastguard Worker     @Override
onReceive(Context context, Intent intent)40*90c8c64dSAndroid Build Coastguard Worker     public void onReceive(Context context, Intent intent) {
41*90c8c64dSAndroid Build Coastguard Worker         if (MessagingService.REPLY_ACTION.equals(intent.getAction())) {
42*90c8c64dSAndroid Build Coastguard Worker             int conversationId = intent.getIntExtra(MessagingService.CONVERSATION_ID, -1);
43*90c8c64dSAndroid Build Coastguard Worker             CharSequence reply = getMessageText(intent);
44*90c8c64dSAndroid Build Coastguard Worker             if (conversationId != -1) {
45*90c8c64dSAndroid Build Coastguard Worker                 Log.d(TAG, "Got reply (" + reply + ") for ConversationId " + conversationId);
46*90c8c64dSAndroid Build Coastguard Worker                 MessageLogger.logMessage(context, "ConversationId: " + conversationId +
47*90c8c64dSAndroid Build Coastguard Worker                         " received a reply: [" + reply + "]");
48*90c8c64dSAndroid Build Coastguard Worker 
49*90c8c64dSAndroid Build Coastguard Worker                 // Update the notification to stop the progress spinner.
50*90c8c64dSAndroid Build Coastguard Worker                 NotificationManagerCompat notificationManager =
51*90c8c64dSAndroid Build Coastguard Worker                         NotificationManagerCompat.from(context);
52*90c8c64dSAndroid Build Coastguard Worker                 Notification repliedNotification = new NotificationCompat.Builder(context)
53*90c8c64dSAndroid Build Coastguard Worker                         .setSmallIcon(R.drawable.notification_icon)
54*90c8c64dSAndroid Build Coastguard Worker                         .setLargeIcon(BitmapFactory.decodeResource(
55*90c8c64dSAndroid Build Coastguard Worker                                 context.getResources(), R.drawable.android_contact))
56*90c8c64dSAndroid Build Coastguard Worker                         .setContentText(context.getString(R.string.replied))
57*90c8c64dSAndroid Build Coastguard Worker                         .build();
58*90c8c64dSAndroid Build Coastguard Worker                 notificationManager.notify(conversationId, repliedNotification);
59*90c8c64dSAndroid Build Coastguard Worker             }
60*90c8c64dSAndroid Build Coastguard Worker         }
61*90c8c64dSAndroid Build Coastguard Worker     }
62*90c8c64dSAndroid Build Coastguard Worker 
63*90c8c64dSAndroid Build Coastguard Worker     /**
64*90c8c64dSAndroid Build Coastguard Worker      * Get the message text from the intent.
65*90c8c64dSAndroid Build Coastguard Worker      * Note that you should call {@code RemoteInput#getResultsFromIntent(intent)} to process
66*90c8c64dSAndroid Build Coastguard Worker      * the RemoteInput.
67*90c8c64dSAndroid Build Coastguard Worker      */
getMessageText(Intent intent)68*90c8c64dSAndroid Build Coastguard Worker     private CharSequence getMessageText(Intent intent) {
69*90c8c64dSAndroid Build Coastguard Worker         Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
70*90c8c64dSAndroid Build Coastguard Worker         if (remoteInput != null) {
71*90c8c64dSAndroid Build Coastguard Worker             return remoteInput.getCharSequence(
72*90c8c64dSAndroid Build Coastguard Worker                     MessagingService.EXTRA_REMOTE_REPLY);
73*90c8c64dSAndroid Build Coastguard Worker         }
74*90c8c64dSAndroid Build Coastguard Worker         return null;
75*90c8c64dSAndroid Build Coastguard Worker     }
76*90c8c64dSAndroid Build Coastguard Worker }
77