Home | History | Annotate | Download | only in transaction
      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 android.app.Notification;
     20 import android.app.NotificationManager;
     21 import android.app.PendingIntent;
     22 import android.content.BroadcastReceiver;
     23 import android.content.Context;
     24 import android.content.Intent;
     25 import android.provider.Settings;
     26 import android.provider.Telephony;
     27 
     28 import com.android.mms.R;
     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
     41     public void onReceive(Context context, Intent intent) {
     42         if (Settings.Global.getInt(context.getContentResolver(),
     43                 Settings.Global.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