1 /* 2 * Copyright (C) 2007-2008 Esmertec AG. 3 * Copyright (C) 2007-2008 The Android Open Source Project 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18 package com.android.mms.transaction; 19 20 import android.content.BroadcastReceiver; 21 import android.content.Context; 22 import android.content.Intent; 23 import android.net.ConnectivityManager; 24 import android.net.NetworkInfo; 25 import android.net.Uri; 26 import android.provider.Telephony.Mms; 27 import android.util.Log; 28 29 import com.android.mms.LogTag; 30 import com.android.mms.MmsApp; 31 32 /** 33 * MmsSystemEventReceiver receives the 34 * {@link android.content.intent.ACTION_BOOT_COMPLETED}, 35 * {@link com.android.internal.telephony.TelephonyIntents.ACTION_ANY_DATA_CONNECTION_STATE_CHANGED} 36 * and performs a series of operations which may include: 37 * <ul> 38 * <li>Show/hide the icon in notification area which is used to indicate 39 * whether there is new incoming message.</li> 40 * <li>Resend the MM's in the outbox.</li> 41 * </ul> 42 */ 43 public class MmsSystemEventReceiver extends BroadcastReceiver { 44 private static final String TAG = LogTag.TAG; 45 private static ConnectivityManager mConnMgr = null; 46 47 public static void wakeUpService(Context context) { 48 if (Log.isLoggable(LogTag.TRANSACTION, Log.VERBOSE)) { 49 Log.v(TAG, "wakeUpService: start transaction service ..."); 50 } 51 52 context.startService(new Intent(context, TransactionService.class)); 53 } 54 55 @Override 56 public void onReceive(Context context, Intent intent) { 57 if (Log.isLoggable(LogTag.TRANSACTION, Log.VERBOSE)) { 58 Log.v(TAG, "Intent received: " + intent); 59 } 60 61 String action = intent.getAction(); 62 if (action.equals(Mms.Intents.CONTENT_CHANGED_ACTION)) { 63 Uri changed = (Uri) intent.getParcelableExtra(Mms.Intents.DELETED_CONTENTS); 64 MmsApp.getApplication().getPduLoaderManager().removePdu(changed); 65 } else if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) { 66 if (mConnMgr == null) { 67 mConnMgr = (ConnectivityManager) context 68 .getSystemService(Context.CONNECTIVITY_SERVICE); 69 } 70 if (!mConnMgr.getMobileDataEnabled()) { 71 if (Log.isLoggable(LogTag.TRANSACTION, Log.VERBOSE)) { 72 Log.v(TAG, "mobile data turned off, bailing"); 73 } 74 return; 75 } 76 NetworkInfo mmsNetworkInfo = mConnMgr 77 .getNetworkInfo(ConnectivityManager.TYPE_MOBILE_MMS); 78 if (mmsNetworkInfo == null) { 79 return; 80 } 81 boolean available = mmsNetworkInfo.isAvailable(); 82 boolean isConnected = mmsNetworkInfo.isConnected(); 83 84 if (Log.isLoggable(LogTag.TRANSACTION, Log.VERBOSE)) { 85 Log.v(TAG, "TYPE_MOBILE_MMS available = " + available + 86 ", isConnected = " + isConnected); 87 } 88 89 // Wake up transact service when MMS data is available and isn't connected. 90 if (available && !isConnected) { 91 wakeUpService(context); 92 } 93 } else if (action.equals(Intent.ACTION_BOOT_COMPLETED)) { 94 // We should check whether there are unread incoming 95 // messages in the Inbox and then update the notification icon. 96 // Called on the UI thread so don't block. 97 MessagingNotification.nonBlockingUpdateNewMessageIndicator( 98 context, MessagingNotification.THREAD_NONE, false); 99 100 // Scan and send pending Mms once after boot completed since 101 // ACTION_ANY_DATA_CONNECTION_STATE_CHANGED wasn't registered in a whole life cycle 102 wakeUpService(context); 103 } 104 } 105 } 106