• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
wakeUpService(Context context)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
onReceive(Context context, Intent intent)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