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