• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2009 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.mms.transaction;
18 
19 import com.android.mms.R;
20 
21 import android.app.Notification;
22 import android.app.NotificationManager;
23 import android.app.PendingIntent;
24 import android.content.BroadcastReceiver;
25 import android.content.Context;
26 import android.content.Intent;
27 import android.provider.Settings;
28 import android.provider.Telephony;
29 import com.android.mms.ui.ConversationList;
30 
31 
32 /**
33  * Receive Intent.SMS_REJECTED.  Handle notification that received SMS messages are being
34  * rejected. This can happen when the device is out of storage.
35  */
36 public class SmsRejectedReceiver extends BroadcastReceiver {
37 
38     public static final int SMS_REJECTED_NOTIFICATION_ID = 239;
39 
40     @Override
onReceive(Context context, Intent intent)41     public void onReceive(Context context, Intent intent) {
42         if (Settings.Secure.getInt(context.getContentResolver(),
43                 Settings.Secure.DEVICE_PROVISIONED, 0) == 1 &&
44                 Telephony.Sms.Intents.SMS_REJECTED_ACTION.equals(intent.getAction())) {
45 
46             int reason = intent.getIntExtra("result", -1);
47             boolean outOfMemory = reason == Telephony.Sms.Intents.RESULT_SMS_OUT_OF_MEMORY;
48             if (!outOfMemory) {
49                 // Right now, the only user-level rejection we show to the user is out-of-memory.
50                 return;
51             }
52 
53             NotificationManager nm = (NotificationManager)
54             context.getSystemService(Context.NOTIFICATION_SERVICE);
55 
56             Intent viewConvIntent = new Intent(context, ConversationList.class);
57             viewConvIntent.setAction(Intent.ACTION_VIEW);
58             viewConvIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
59                     | Intent.FLAG_ACTIVITY_SINGLE_TOP
60                     | Intent.FLAG_ACTIVITY_CLEAR_TOP);
61             PendingIntent pendingIntent = PendingIntent.getActivity(
62                     context, 0, viewConvIntent, 0);
63 
64             Notification notification = new Notification();
65 
66             // TODO: need appropriate icons
67             notification.icon = R.drawable.stat_sys_no_sim;
68             int titleId;
69             int bodyId;
70             if (outOfMemory) {
71                 titleId = R.string.sms_full_title;
72                 bodyId = R.string.sms_full_body;
73             } else {
74                 titleId = R.string.sms_rejected_title;
75                 bodyId = R.string.sms_rejected_body;
76             }
77             notification.tickerText = context.getString(titleId);
78             notification.defaults = Notification.DEFAULT_ALL;
79 
80             notification.setLatestEventInfo(
81                     context, context.getString(titleId),
82                     context.getString(bodyId),
83                     pendingIntent);
84             nm.notify(SMS_REJECTED_NOTIFICATION_ID, notification);
85         }
86     }
87 
88 }
89