• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2008 Esmertec AG.
3  * Copyright (C) 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;
19 
20 import android.app.Application;
21 import android.content.Context;
22 import android.content.Intent;
23 import android.content.res.Configuration;
24 import android.drm.DrmManagerClient;
25 import android.location.Country;
26 import android.location.CountryDetector;
27 import android.location.CountryListener;
28 import android.os.StrictMode;
29 import android.preference.PreferenceManager;
30 import android.provider.SearchRecentSuggestions;
31 import android.telephony.TelephonyManager;
32 import android.util.Log;
33 
34 import com.android.mms.data.Contact;
35 import com.android.mms.data.Conversation;
36 import com.android.mms.layout.LayoutManager;
37 import com.android.mms.transaction.MessagingNotification;
38 import com.android.mms.transaction.MmsSystemEventReceiver;
39 import com.android.mms.transaction.SmsReceiver;
40 import com.android.mms.transaction.SmsReceiverService;
41 import com.android.mms.util.DownloadManager;
42 import com.android.mms.util.DraftCache;
43 import com.android.mms.util.PduLoaderManager;
44 import com.android.mms.util.RateController;
45 import com.android.mms.util.SmileyParser;
46 import com.android.mms.util.ThumbnailManager;
47 
48 public class MmsApp extends Application {
49     public static final String LOG_TAG = "Mms";
50 
51     private SearchRecentSuggestions mRecentSuggestions;
52     private TelephonyManager mTelephonyManager;
53     private CountryDetector mCountryDetector;
54     private CountryListener mCountryListener;
55     private String mCountryIso;
56     private static MmsApp sMmsApp = null;
57     private PduLoaderManager mPduLoaderManager;
58     private ThumbnailManager mThumbnailManager;
59     private DrmManagerClient mDrmManagerClient;
60 
61     @Override
onCreate()62     public void onCreate() {
63         super.onCreate();
64 
65         if (Log.isLoggable(LogTag.STRICT_MODE_TAG, Log.DEBUG)) {
66             // Log tag for enabling/disabling StrictMode violation log. This will dump a stack
67             // in the log that shows the StrictMode violator.
68             // To enable: adb shell setprop log.tag.Mms:strictmode DEBUG
69             StrictMode.setThreadPolicy(
70                     new StrictMode.ThreadPolicy.Builder().detectAll().penaltyLog().build());
71         }
72 
73         sMmsApp = this;
74 
75         // Load the default preference values
76         PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
77 
78         // Figure out the country *before* loading contacts and formatting numbers
79         mCountryDetector = (CountryDetector) getSystemService(Context.COUNTRY_DETECTOR);
80         mCountryListener = new CountryListener() {
81             @Override
82             public synchronized void onCountryDetected(Country country) {
83                 mCountryIso = country.getCountryIso();
84             }
85         };
86         mCountryDetector.addCountryListener(mCountryListener, getMainLooper());
87 
88         Context context = getApplicationContext();
89         mPduLoaderManager = new PduLoaderManager(context);
90         mThumbnailManager = new ThumbnailManager(context);
91 
92         MmsConfig.init(this);
93         Contact.init(this);
94         DraftCache.init(this);
95         Conversation.init(this);
96         DownloadManager.init(this);
97         RateController.init(this);
98         LayoutManager.init(this);
99         SmileyParser.init(this);
100         MessagingNotification.init(this);
101 
102         activePendingMessages();
103     }
104 
105     /**
106      * Try to process all pending messages(which were interrupted by user, OOM, Mms crashing,
107      * etc...) when Mms app is (re)launched.
108      */
activePendingMessages()109     private void activePendingMessages() {
110         // For Mms: try to process all pending transactions if possible
111         MmsSystemEventReceiver.wakeUpService(this);
112 
113         // For Sms: retry to send smses in outbox and queued box
114         sendBroadcast(new Intent(SmsReceiverService.ACTION_SEND_INACTIVE_MESSAGE,
115                 null,
116                 this,
117                 SmsReceiver.class));
118     }
119 
getApplication()120     synchronized public static MmsApp getApplication() {
121         return sMmsApp;
122     }
123 
124     @Override
onTerminate()125     public void onTerminate() {
126         mCountryDetector.removeCountryListener(mCountryListener);
127     }
128 
129     @Override
onLowMemory()130     public void onLowMemory() {
131         super.onLowMemory();
132 
133         mPduLoaderManager.onLowMemory();
134         mThumbnailManager.onLowMemory();
135     }
136 
getPduLoaderManager()137     public PduLoaderManager getPduLoaderManager() {
138         return mPduLoaderManager;
139     }
140 
getThumbnailManager()141     public ThumbnailManager getThumbnailManager() {
142         return mThumbnailManager;
143     }
144 
145     @Override
onConfigurationChanged(Configuration newConfig)146     public void onConfigurationChanged(Configuration newConfig) {
147         LayoutManager.getInstance().onConfigurationChanged(newConfig);
148     }
149 
150     /**
151      * @return Returns the TelephonyManager.
152      */
getTelephonyManager()153     public TelephonyManager getTelephonyManager() {
154         if (mTelephonyManager == null) {
155             mTelephonyManager = (TelephonyManager)getApplicationContext()
156                     .getSystemService(Context.TELEPHONY_SERVICE);
157         }
158         return mTelephonyManager;
159     }
160 
161     /**
162      * Returns the content provider wrapper that allows access to recent searches.
163      * @return Returns the content provider wrapper that allows access to recent searches.
164      */
getRecentSuggestions()165     public SearchRecentSuggestions getRecentSuggestions() {
166         /*
167         if (mRecentSuggestions == null) {
168             mRecentSuggestions = new SearchRecentSuggestions(this,
169                     SuggestionsProvider.AUTHORITY, SuggestionsProvider.MODE);
170         }
171         */
172         return mRecentSuggestions;
173     }
174 
175     // This function CAN return null.
getCurrentCountryIso()176     public String getCurrentCountryIso() {
177         if (mCountryIso == null) {
178             Country country = mCountryDetector.detectCountry();
179             if (country != null) {
180                 mCountryIso = country.getCountryIso();
181             }
182         }
183         return mCountryIso;
184     }
185 
getDrmManagerClient()186     public DrmManagerClient getDrmManagerClient() {
187         if (mDrmManagerClient == null) {
188             mDrmManagerClient = new DrmManagerClient(getApplicationContext());
189         }
190         return mDrmManagerClient;
191     }
192 
193 }
194