1c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville/* 2c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * Copyright (C) 2006 The Android Open Source Project 3c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * 4c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * Licensed under the Apache License, Version 2.0 (the "License"); 5c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * you may not use this file except in compliance with the License. 6c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * You may obtain a copy of the License at 7c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * 8c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * http://www.apache.org/licenses/LICENSE-2.0 9c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * 10c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * Unless required by applicable law or agreed to in writing, software 11c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * distributed under the License is distributed on an "AS IS" BASIS, 12c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * See the License for the specific language governing permissions and 14c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * limitations under the License. 15c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville */ 16c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 17c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savillepackage com.android.internal.telephony; 18c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 196f5e6b5b4374d834734894d687dea58724b6c0b0Naveen Kallaimport static com.android.internal.telephony.TelephonyProperties.PROPERTY_DEFAULT_SUBSCRIPTION; 206f5e6b5b4374d834734894d687dea58724b6c0b0Naveen Kalla 2133ab7bad1f2ccb5dea26d0def6e43a4f2d1b9cb9David Braunimport android.content.ComponentName; 22c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.content.Context; 23a8467dd0c524787104b1ccdddc5e8af10ba729edWink Savilleimport android.content.Intent; 24c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.net.LocalServerSocket; 256bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.os.HandlerThread; 266bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwaltimport android.os.Looper; 277a477263108748903cf5a4151a4e8b739f12264aRobert Greenwaltimport android.os.ServiceManager; 28a8467dd0c524787104b1ccdddc5e8af10ba729edWink Savilleimport android.os.SystemProperties; 29a8467dd0c524787104b1ccdddc5e8af10ba729edWink Savilleimport android.os.UserHandle; 30c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.provider.Settings; 31a8467dd0c524787104b1ccdddc5e8af10ba729edWink Savilleimport android.provider.Settings.SettingNotFoundException; 3299c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Savilleimport android.telephony.Rlog; 33a8467dd0c524787104b1ccdddc5e8af10ba729edWink Savilleimport android.telephony.SubscriptionManager; 34c67761d00a25bd095364e3ff4e4cb8e88b2e974cDavid Braunimport android.telephony.TelephonyManager; 35265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwaltimport android.util.LocalLog; 3633ab7bad1f2ccb5dea26d0def6e43a4f2d1b9cb9David Braun 37c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.cdma.CdmaSubscriptionSourceManager; 38e9bf1f44cc6a888fff8419c8f35612d503ba3216Robert Greenwaltimport com.android.internal.telephony.dataconnection.TelephonyNetworkFactory; 395470a3b34b58cd7a5ce0bde9820b2f5f64bc5820Brad Ebingerimport com.android.internal.telephony.ims.ImsResolver; 40888c60a7fe1c8f3612ab8e8ec5f2f7ca8f24e766Etan Cohenimport com.android.internal.telephony.imsphone.ImsPhone; 416f5e6b5b4374d834734894d687dea58724b6c0b0Naveen Kallaimport com.android.internal.telephony.imsphone.ImsPhoneFactory; 42c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.sip.SipPhone; 43c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.sip.SipPhoneFactory; 44e97be3971cb6b55e019433c32524cc60ce0d037bWink Savilleimport com.android.internal.telephony.uicc.IccCardProxy; 45e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenkaimport com.android.internal.telephony.uicc.UiccController; 467c29cabeb38ae8cb4f5764c2dc0a768de22d2f92fionaxuimport com.android.internal.telephony.util.NotificationChannelController; 47265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwaltimport com.android.internal.util.IndentingPrintWriter; 48c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 49e97be3971cb6b55e019433c32524cc60ce0d037bWink Savilleimport java.io.FileDescriptor; 50e97be3971cb6b55e019433c32524cc60ce0d037bWink Savilleimport java.io.PrintWriter; 51265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwaltimport java.util.HashMap; 52e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville 53c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville/** 54c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * {@hide} 55c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville */ 56c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savillepublic class PhoneFactory { 57cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville static final String LOG_TAG = "PhoneFactory"; 58c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville static final int SOCKET_OPEN_RETRY_MILLIS = 2 * 1000; 59c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville static final int SOCKET_OPEN_MAX_RETRY = 3; 609232dafa7ea833fc0b3a6024d6c7e23fc8e961eaRobert Greenwalt static final boolean DBG = false; 61c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 62c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville //***** Class Variables 63c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 641a87ab3d7170d618f048c4f5af8c7504a587aaa5Jack Yu // lock sLockProxyPhones protects both sPhones and sPhone 656f5e6b5b4374d834734894d687dea58724b6c0b0Naveen Kalla final static Object sLockProxyPhones = new Object(); 661a87ab3d7170d618f048c4f5af8c7504a587aaa5Jack Yu static private Phone[] sPhones = null; 671a87ab3d7170d618f048c4f5af8c7504a587aaa5Jack Yu static private Phone sPhone = null; 686f5e6b5b4374d834734894d687dea58724b6c0b0Naveen Kalla 69a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville static private CommandsInterface[] sCommandsInterfaces = null; 70a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 71e9bf1f44cc6a888fff8419c8f35612d503ba3216Robert Greenwalt static private ProxyController sProxyController; 72e9bf1f44cc6a888fff8419c8f35612d503ba3216Robert Greenwalt static private UiccController sUiccController; 73a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 74c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville static private CommandsInterface sCommandsInterface = null; 75299dad50409e907993fa96c7401d4f10c58018b1Wink Saville static private SubscriptionInfoUpdater sSubInfoRecordUpdater = null; 76c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 77c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville static private boolean sMadeDefaults = false; 78c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville static private PhoneNotifier sPhoneNotifier; 79c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville static private Context sContext; 80e9bf1f44cc6a888fff8419c8f35612d503ba3216Robert Greenwalt static private PhoneSwitcher sPhoneSwitcher; 819521f8c043c167e3a3fa97ea50bf1e2e0cd188a1Robert Greenwalt static private SubscriptionMonitor sSubscriptionMonitor; 82e9bf1f44cc6a888fff8419c8f35612d503ba3216Robert Greenwalt static private TelephonyNetworkFactory[] sTelephonyNetworkFactories; 835470a3b34b58cd7a5ce0bde9820b2f5f64bc5820Brad Ebinger static private ImsResolver sImsResolver; 847c29cabeb38ae8cb4f5764c2dc0a768de22d2f92fionaxu static private NotificationChannelController sNotificationChannelController; 85c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 86265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwalt static private final HashMap<String, LocalLog>sLocalLogs = new HashMap<String, LocalLog>(); 87265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwalt 886bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt // TODO - make this a dynamic property read from the modem 896bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt public static final int MAX_ACTIVE_PHONES = 1; 906bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 91c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville //***** Class Methods 92c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 93c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public static void makeDefaultPhones(Context context) { 94c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville makeDefaultPhone(context); 95c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 96c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 97c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville /** 98c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * FIXME replace this with some other way of making these 99c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * instances 100c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville */ 101c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public static void makeDefaultPhone(Context context) { 1026f5e6b5b4374d834734894d687dea58724b6c0b0Naveen Kalla synchronized (sLockProxyPhones) { 103c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville if (!sMadeDefaults) { 104c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville sContext = context; 105c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 106a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville // create the telephony device controller. 107a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville TelephonyDevController.create(); 108a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 109c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville int retryCount = 0; 110c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville for(;;) { 111c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville boolean hasException = false; 112c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville retryCount ++; 113c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 114c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville try { 115c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // use UNIX domain socket to 116c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville // prevent subsequent initialization 117c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville new LocalServerSocket("com.android.internal.telephony"); 118c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } catch (java.io.IOException ex) { 119c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville hasException = true; 120c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 121c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 122c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville if ( !hasException ) { 123c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville break; 124c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } else if (retryCount > SOCKET_OPEN_MAX_RETRY) { 125c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville throw new RuntimeException("PhoneFactory probably already running"); 126c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } else { 127c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville try { 128c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville Thread.sleep(SOCKET_OPEN_RETRY_MILLIS); 129c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } catch (InterruptedException er) { 130c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 131c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 132c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 133c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 134c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville sPhoneNotifier = new DefaultPhoneNotifier(); 135c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 1365ceae6074e0729fbbc422db2f263bf7cf453bf1aNaveen Kalla int cdmaSubscription = CdmaSubscriptionSourceManager.getDefault(context); 13799c2e1d6749cfad2a8ca94a47857d8c3bfc09454Wink Saville Rlog.i(LOG_TAG, "Cdma Subscription set to " + cdmaSubscription); 138c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 1391a87ab3d7170d618f048c4f5af8c7504a587aaa5Jack Yu /* In case of multi SIM mode two instances of Phone, RIL are created, 140a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville where as in single SIM mode only instance. isMultiSimEnabled() function checks 141a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville whether it is single SIM or multi SIM mode */ 142a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville int numPhones = TelephonyManager.getDefault().getPhoneCount(); 1437152d901c51e288759259ae3e482bb5fe1c23173Brad Ebinger // Start ImsResolver and bind to ImsServices. 1447152d901c51e288759259ae3e482bb5fe1c23173Brad Ebinger String defaultImsPackage = sContext.getResources().getString( 1457152d901c51e288759259ae3e482bb5fe1c23173Brad Ebinger com.android.internal.R.string.config_ims_package); 1467152d901c51e288759259ae3e482bb5fe1c23173Brad Ebinger Rlog.i(LOG_TAG, "ImsResolver: defaultImsPackage: " + defaultImsPackage); 1477152d901c51e288759259ae3e482bb5fe1c23173Brad Ebinger sImsResolver = new ImsResolver(sContext, defaultImsPackage, numPhones); 1487152d901c51e288759259ae3e482bb5fe1c23173Brad Ebinger sImsResolver.populateCacheAndStartBind(); 1497152d901c51e288759259ae3e482bb5fe1c23173Brad Ebinger 150a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville int[] networkModes = new int[numPhones]; 1511a87ab3d7170d618f048c4f5af8c7504a587aaa5Jack Yu sPhones = new Phone[numPhones]; 152a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville sCommandsInterfaces = new RIL[numPhones]; 153e9bf1f44cc6a888fff8419c8f35612d503ba3216Robert Greenwalt sTelephonyNetworkFactories = new TelephonyNetworkFactory[numPhones]; 154a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 155a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville for (int i = 0; i < numPhones; i++) { 1563bc32aa4a3f533421f82a6d7991bb1971bf78191Amit Mahajan // reads the system properties and makes commandsinterface 1573bc32aa4a3f533421f82a6d7991bb1971bf78191Amit Mahajan // Get preferred network type. 1583bc32aa4a3f533421f82a6d7991bb1971bf78191Amit Mahajan networkModes[i] = RILConstants.PREFERRED_NETWORK_MODE; 159a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 160a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville Rlog.i(LOG_TAG, "Network Mode set to " + Integer.toString(networkModes[i])); 161a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville sCommandsInterfaces[i] = new RIL(context, networkModes[i], 162a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville cdmaSubscription, i); 163a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 164a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville Rlog.i(LOG_TAG, "Creating SubscriptionController"); 165a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville SubscriptionController.init(context, sCommandsInterfaces); 166a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 167a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville // Instantiate UiccController so that all other classes can just 168a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville // call getInstance() 169e9bf1f44cc6a888fff8419c8f35612d503ba3216Robert Greenwalt sUiccController = UiccController.make(context, sCommandsInterfaces); 170a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 171a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville for (int i = 0; i < numPhones; i++) { 1721a87ab3d7170d618f048c4f5af8c7504a587aaa5Jack Yu Phone phone = null; 173a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville int phoneType = TelephonyManager.getPhoneType(networkModes[i]); 174a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville if (phoneType == PhoneConstants.PHONE_TYPE_GSM) { 1750f7d1220e8584c7f227e6c6c0be0e26d1c6b7de1Amit Mahajan phone = new GsmCdmaPhone(context, 1761a87ab3d7170d618f048c4f5af8c7504a587aaa5Jack Yu sCommandsInterfaces[i], sPhoneNotifier, i, 1770a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan PhoneConstants.PHONE_TYPE_GSM, 1780a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan TelephonyComponentFactory.getInstance()); 179a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } else if (phoneType == PhoneConstants.PHONE_TYPE_CDMA) { 1800f7d1220e8584c7f227e6c6c0be0e26d1c6b7de1Amit Mahajan phone = new GsmCdmaPhone(context, 1811a87ab3d7170d618f048c4f5af8c7504a587aaa5Jack Yu sCommandsInterfaces[i], sPhoneNotifier, i, 1820a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan PhoneConstants.PHONE_TYPE_CDMA_LTE, 1830a567c9ed954f295df83c753239646c6f6a04128Amit Mahajan TelephonyComponentFactory.getInstance()); 184c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 185a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville Rlog.i(LOG_TAG, "Creating Phone with type = " + phoneType + " sub = " + i); 186a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 1871a87ab3d7170d618f048c4f5af8c7504a587aaa5Jack Yu sPhones[i] = phone; 188c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 189a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 1906bc4098827f3070a44b5e51508b455d7c7be9c07Wink Saville // Set the default phone in base class. 1916bc4098827f3070a44b5e51508b455d7c7be9c07Wink Saville // FIXME: This is a first best guess at what the defaults will be. It 1926bc4098827f3070a44b5e51508b455d7c7be9c07Wink Saville // FIXME: needs to be done in a more controlled manner in the future. 1931a87ab3d7170d618f048c4f5af8c7504a587aaa5Jack Yu sPhone = sPhones[0]; 1946bc4098827f3070a44b5e51508b455d7c7be9c07Wink Saville sCommandsInterface = sCommandsInterfaces[0]; 195c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 19633ab7bad1f2ccb5dea26d0def6e43a4f2d1b9cb9David Braun // Ensure that we have a default SMS app. Requesting the app with 19733ab7bad1f2ccb5dea26d0def6e43a4f2d1b9cb9David Braun // updateIfNeeded set to true is enough to configure a default SMS app. 19833ab7bad1f2ccb5dea26d0def6e43a4f2d1b9cb9David Braun ComponentName componentName = 19933ab7bad1f2ccb5dea26d0def6e43a4f2d1b9cb9David Braun SmsApplication.getDefaultSmsApplication(context, true /* updateIfNeeded */); 20033ab7bad1f2ccb5dea26d0def6e43a4f2d1b9cb9David Braun String packageName = "NONE"; 20133ab7bad1f2ccb5dea26d0def6e43a4f2d1b9cb9David Braun if (componentName != null) { 20233ab7bad1f2ccb5dea26d0def6e43a4f2d1b9cb9David Braun packageName = componentName.getPackageName(); 20333ab7bad1f2ccb5dea26d0def6e43a4f2d1b9cb9David Braun } 20433ab7bad1f2ccb5dea26d0def6e43a4f2d1b9cb9David Braun Rlog.i(LOG_TAG, "defaultSmsApplication: " + packageName); 20533ab7bad1f2ccb5dea26d0def6e43a4f2d1b9cb9David Braun 2068a4c72815186db4187587d4fc62125540a0e42a8David Braun // Set up monitor to watch for changes to SMS packages 2078a4c72815186db4187587d4fc62125540a0e42a8David Braun SmsApplication.initSmsPackageMonitor(context); 2088a4c72815186db4187587d4fc62125540a0e42a8David Braun 209c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville sMadeDefaults = true; 210a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 211a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville Rlog.i(LOG_TAG, "Creating SubInfoRecordUpdater "); 212299dad50409e907993fa96c7401d4f10c58018b1Wink Saville sSubInfoRecordUpdater = new SubscriptionInfoUpdater(context, 2131a87ab3d7170d618f048c4f5af8c7504a587aaa5Jack Yu sPhones, sCommandsInterfaces); 2141a87ab3d7170d618f048c4f5af8c7504a587aaa5Jack Yu SubscriptionController.getInstance().updatePhonesAvailability(sPhones); 21580bd0262e4bb6dbbaf6d03dadb771ad105186e15Pavel Zhamaitsiak 21680bd0262e4bb6dbbaf6d03dadb771ad105186e15Pavel Zhamaitsiak // Start monitoring after defaults have been made. 2177152d901c51e288759259ae3e482bb5fe1c23173Brad Ebinger // Default phone must be ready before ImsPhone is created because ImsService might 2187152d901c51e288759259ae3e482bb5fe1c23173Brad Ebinger // need it when it is being opened. This should initialize multiple ImsPhones for 2197152d901c51e288759259ae3e482bb5fe1c23173Brad Ebinger // ImsResolver implementations of ImsService. 22080bd0262e4bb6dbbaf6d03dadb771ad105186e15Pavel Zhamaitsiak for (int i = 0; i < numPhones; i++) { 2211a87ab3d7170d618f048c4f5af8c7504a587aaa5Jack Yu sPhones[i].startMonitoringImsService(); 22280bd0262e4bb6dbbaf6d03dadb771ad105186e15Pavel Zhamaitsiak } 2237a477263108748903cf5a4151a4e8b739f12264aRobert Greenwalt 2246bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt ITelephonyRegistry tr = ITelephonyRegistry.Stub.asInterface( 2256bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt ServiceManager.getService("telephony.registry")); 2266bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt SubscriptionController sc = SubscriptionController.getInstance(); 2276bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 2289521f8c043c167e3a3fa97ea50bf1e2e0cd188a1Robert Greenwalt sSubscriptionMonitor = new SubscriptionMonitor(tr, sContext, sc, numPhones); 2296bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 23085953e2a7e5bc75cf1f5353feee97b3993dad5b3Robert Greenwalt sPhoneSwitcher = new PhoneSwitcher(MAX_ACTIVE_PHONES, numPhones, 23185953e2a7e5bc75cf1f5353feee97b3993dad5b3Robert Greenwalt sContext, sc, Looper.myLooper(), tr, sCommandsInterfaces, 23285953e2a7e5bc75cf1f5353feee97b3993dad5b3Robert Greenwalt sPhones); 233e9bf1f44cc6a888fff8419c8f35612d503ba3216Robert Greenwalt 234e9bf1f44cc6a888fff8419c8f35612d503ba3216Robert Greenwalt sProxyController = ProxyController.getInstance(context, sPhones, 235e9bf1f44cc6a888fff8419c8f35612d503ba3216Robert Greenwalt sUiccController, sCommandsInterfaces, sPhoneSwitcher); 236e9bf1f44cc6a888fff8419c8f35612d503ba3216Robert Greenwalt 2377c29cabeb38ae8cb4f5764c2dc0a768de22d2f92fionaxu sNotificationChannelController = new NotificationChannelController(context); 2387c29cabeb38ae8cb4f5764c2dc0a768de22d2f92fionaxu 23985953e2a7e5bc75cf1f5353feee97b3993dad5b3Robert Greenwalt sTelephonyNetworkFactories = new TelephonyNetworkFactory[numPhones]; 24085953e2a7e5bc75cf1f5353feee97b3993dad5b3Robert Greenwalt for (int i = 0; i < numPhones; i++) { 24185953e2a7e5bc75cf1f5353feee97b3993dad5b3Robert Greenwalt sTelephonyNetworkFactories[i] = new TelephonyNetworkFactory( 2429521f8c043c167e3a3fa97ea50bf1e2e0cd188a1Robert Greenwalt sPhoneSwitcher, sc, sSubscriptionMonitor, Looper.myLooper(), 24385953e2a7e5bc75cf1f5353feee97b3993dad5b3Robert Greenwalt sContext, i, sPhones[i].mDcTracker); 24485953e2a7e5bc75cf1f5353feee97b3993dad5b3Robert Greenwalt } 245c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 246c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 247c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 248c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 249c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public static Phone getDefaultPhone() { 2506f5e6b5b4374d834734894d687dea58724b6c0b0Naveen Kalla synchronized (sLockProxyPhones) { 2516f5e6b5b4374d834734894d687dea58724b6c0b0Naveen Kalla if (!sMadeDefaults) { 2526f5e6b5b4374d834734894d687dea58724b6c0b0Naveen Kalla throw new IllegalStateException("Default phones haven't been made yet!"); 2536f5e6b5b4374d834734894d687dea58724b6c0b0Naveen Kalla } 2541a87ab3d7170d618f048c4f5af8c7504a587aaa5Jack Yu return sPhone; 255c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 256c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 257c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville 258a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public static Phone getPhone(int phoneId) { 2596f5e6b5b4374d834734894d687dea58724b6c0b0Naveen Kalla Phone phone; 260652c1add01ea5f0c93aa60c262863147d3aeefc2Wink Saville String dbgInfo = ""; 261652c1add01ea5f0c93aa60c262863147d3aeefc2Wink Saville 2626f5e6b5b4374d834734894d687dea58724b6c0b0Naveen Kalla synchronized (sLockProxyPhones) { 2636f5e6b5b4374d834734894d687dea58724b6c0b0Naveen Kalla if (!sMadeDefaults) { 2646f5e6b5b4374d834734894d687dea58724b6c0b0Naveen Kalla throw new IllegalStateException("Default phones haven't been made yet!"); 2656f5e6b5b4374d834734894d687dea58724b6c0b0Naveen Kalla // CAF_MSIM FIXME need to introduce default phone id ? 2664b09dff383ae7dfca595aeeea886a594a1947340Wink Saville } else if (phoneId == SubscriptionManager.DEFAULT_PHONE_INDEX) { 2671a87ab3d7170d618f048c4f5af8c7504a587aaa5Jack Yu if (DBG) dbgInfo = "phoneId == DEFAULT_PHONE_ID return sPhone"; 2681a87ab3d7170d618f048c4f5af8c7504a587aaa5Jack Yu phone = sPhone; 2696f5e6b5b4374d834734894d687dea58724b6c0b0Naveen Kalla } else { 2701a87ab3d7170d618f048c4f5af8c7504a587aaa5Jack Yu if (DBG) dbgInfo = "phoneId != DEFAULT_PHONE_ID return sPhones[phoneId]"; 2716bc4098827f3070a44b5e51508b455d7c7be9c07Wink Saville phone = (((phoneId >= 0) 2726bc4098827f3070a44b5e51508b455d7c7be9c07Wink Saville && (phoneId < TelephonyManager.getDefault().getPhoneCount())) 2731a87ab3d7170d618f048c4f5af8c7504a587aaa5Jack Yu ? sPhones[phoneId] : null); 2746f5e6b5b4374d834734894d687dea58724b6c0b0Naveen Kalla } 2759232dafa7ea833fc0b3a6024d6c7e23fc8e961eaRobert Greenwalt if (DBG) { 2769232dafa7ea833fc0b3a6024d6c7e23fc8e961eaRobert Greenwalt Rlog.d(LOG_TAG, "getPhone:- " + dbgInfo + " phoneId=" + phoneId + 2779232dafa7ea833fc0b3a6024d6c7e23fc8e961eaRobert Greenwalt " phone=" + phone); 2789232dafa7ea833fc0b3a6024d6c7e23fc8e961eaRobert Greenwalt } 2796f5e6b5b4374d834734894d687dea58724b6c0b0Naveen Kalla return phone; 280a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 281a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 282a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 2836f5e6b5b4374d834734894d687dea58724b6c0b0Naveen Kalla public static Phone[] getPhones() { 2846f5e6b5b4374d834734894d687dea58724b6c0b0Naveen Kalla synchronized (sLockProxyPhones) { 2856f5e6b5b4374d834734894d687dea58724b6c0b0Naveen Kalla if (!sMadeDefaults) { 2866f5e6b5b4374d834734894d687dea58724b6c0b0Naveen Kalla throw new IllegalStateException("Default phones haven't been made yet!"); 2876f5e6b5b4374d834734894d687dea58724b6c0b0Naveen Kalla } 2881a87ab3d7170d618f048c4f5af8c7504a587aaa5Jack Yu return sPhones; 289a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 290a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 291a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 2925470a3b34b58cd7a5ce0bde9820b2f5f64bc5820Brad Ebinger public static ImsResolver getImsResolver() { 2935470a3b34b58cd7a5ce0bde9820b2f5f64bc5820Brad Ebinger return sImsResolver; 2945470a3b34b58cd7a5ce0bde9820b2f5f64bc5820Brad Ebinger } 2955470a3b34b58cd7a5ce0bde9820b2f5f64bc5820Brad Ebinger 296c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville /** 297c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * Makes a {@link SipPhone} object. 298c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * @param sipUri the local SIP URI the phone runs on 299c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * @return the {@code SipPhone} object or null if the SIP URI is not valid 300c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville */ 301c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville public static SipPhone makeSipPhone(String sipUri) { 302c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville return SipPhoneFactory.makePhone(sipUri, sContext, sPhoneNotifier); 303c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville } 304b25da36f791607b5fc9a68ae01dd8c5ea1d5652cShishir Agrawal 305b25da36f791607b5fc9a68ae01dd8c5ea1d5652cShishir Agrawal /** 306b25da36f791607b5fc9a68ae01dd8c5ea1d5652cShishir Agrawal * Returns the preferred network type that should be set in the modem. 307b25da36f791607b5fc9a68ae01dd8c5ea1d5652cShishir Agrawal * 308b25da36f791607b5fc9a68ae01dd8c5ea1d5652cShishir Agrawal * @param context The current {@link Context}. 309b25da36f791607b5fc9a68ae01dd8c5ea1d5652cShishir Agrawal * @return the preferred network mode that should be set. 310b25da36f791607b5fc9a68ae01dd8c5ea1d5652cShishir Agrawal */ 311a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville // TODO: Fix when we "properly" have TelephonyDevController/SubscriptionController .. 3123bc32aa4a3f533421f82a6d7991bb1971bf78191Amit Mahajan public static int calculatePreferredNetworkType(Context context, int phoneSubId) { 3133bc32aa4a3f533421f82a6d7991bb1971bf78191Amit Mahajan int networkType = android.provider.Settings.Global.getInt(context.getContentResolver(), 3143bc32aa4a3f533421f82a6d7991bb1971bf78191Amit Mahajan android.provider.Settings.Global.PREFERRED_NETWORK_MODE + phoneSubId, 3153bc32aa4a3f533421f82a6d7991bb1971bf78191Amit Mahajan RILConstants.PREFERRED_NETWORK_MODE); 3163bc32aa4a3f533421f82a6d7991bb1971bf78191Amit Mahajan Rlog.d(LOG_TAG, "calculatePreferredNetworkType: phoneSubId = " + phoneSubId + 3173bc32aa4a3f533421f82a6d7991bb1971bf78191Amit Mahajan " networkType = " + networkType); 318b25da36f791607b5fc9a68ae01dd8c5ea1d5652cShishir Agrawal return networkType; 319b25da36f791607b5fc9a68ae01dd8c5ea1d5652cShishir Agrawal } 320a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 321a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville /* Gets the default subscription */ 322b237a11044ed842d2865ff8c8716befb06b6ca25Wink Saville public static int getDefaultSubscription() { 323a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville return SubscriptionController.getInstance().getDefaultSubId(); 324a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 325a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 326a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville /* Returns User SMS Prompt property, enabled or not */ 327a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public static boolean isSMSPromptEnabled() { 328a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville boolean prompt = false; 329a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville int value = 0; 330a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville try { 331a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville value = Settings.Global.getInt(sContext.getContentResolver(), 332a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville Settings.Global.MULTI_SIM_SMS_PROMPT); 333a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } catch (SettingNotFoundException snfe) { 334a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville Rlog.e(LOG_TAG, "Settings Exception Reading Dual Sim SMS Prompt Values"); 335a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 336a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville prompt = (value == 0) ? false : true ; 337a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville Rlog.d(LOG_TAG, "SMS Prompt option:" + prompt); 338a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 339a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville return prompt; 340a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 341a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 342a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville /** 343a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * Makes a {@link ImsPhone} object. 344a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * @return the {@code ImsPhone} object or null if the exception occured 345a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville */ 346c2b66d57e16623dffc2fe6d02ded4f24c014b6c8Amit Mahajan public static Phone makeImsPhone(PhoneNotifier phoneNotifier, Phone defaultPhone) { 347a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville return ImsPhoneFactory.makePhone(sContext, phoneNotifier, defaultPhone); 348a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 349e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville 350265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwalt /** 351265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwalt * Adds a local log category. 352265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwalt * 353265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwalt * Only used within the telephony process. Use localLog to add log entries. 354265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwalt * 355265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwalt * TODO - is there a better way to do this? Think about design when we have a minute. 356265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwalt * 357265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwalt * @param key the name of the category - will be the header in the service dump. 358265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwalt * @param size the number of lines to maintain in this category 359265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwalt */ 360265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwalt public static void addLocalLog(String key, int size) { 361265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwalt synchronized(sLocalLogs) { 362265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwalt if (sLocalLogs.containsKey(key)) { 363265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwalt throw new IllegalArgumentException("key " + key + " already present"); 364265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwalt } 365265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwalt sLocalLogs.put(key, new LocalLog(size)); 366265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwalt } 367265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwalt } 368265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwalt 369265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwalt /** 370265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwalt * Add a line to the named Local Log. 371265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwalt * 372265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwalt * This will appear in the TelephonyDebugService dump. 373265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwalt * 374265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwalt * @param key the name of the log category to put this in. Must be created 375265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwalt * via addLocalLog. 376265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwalt * @param log the string to add to the log. 377265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwalt */ 378265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwalt public static void localLog(String key, String log) { 379265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwalt synchronized(sLocalLogs) { 380265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwalt if (sLocalLogs.containsKey(key) == false) { 381265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwalt throw new IllegalArgumentException("key " + key + " not found"); 382265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwalt } 383265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwalt sLocalLogs.get(key).log(log); 384265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwalt } 385265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwalt } 386265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwalt 3879521f8c043c167e3a3fa97ea50bf1e2e0cd188a1Robert Greenwalt public static void dump(FileDescriptor fd, PrintWriter printwriter, String[] args) { 3889521f8c043c167e3a3fa97ea50bf1e2e0cd188a1Robert Greenwalt IndentingPrintWriter pw = new IndentingPrintWriter(printwriter, " "); 389e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.println("PhoneFactory:"); 390dc3b93d59312b84dcfa776f7691f6a87462b45a2Jack Yu pw.println(" sMadeDefaults=" + sMadeDefaults); 3916bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 39285953e2a7e5bc75cf1f5353feee97b3993dad5b3Robert Greenwalt sPhoneSwitcher.dump(fd, pw, args); 39385953e2a7e5bc75cf1f5353feee97b3993dad5b3Robert Greenwalt pw.println(); 3946bfc71d2b5340f6274b3e63926a7068e364fc9ffRobert Greenwalt 3951a87ab3d7170d618f048c4f5af8c7504a587aaa5Jack Yu Phone[] phones = (Phone[])PhoneFactory.getPhones(); 396e9bf1f44cc6a888fff8419c8f35612d503ba3216Robert Greenwalt for (int i = 0; i < phones.length; i++) { 3979521f8c043c167e3a3fa97ea50bf1e2e0cd188a1Robert Greenwalt pw.increaseIndent(); 398e9bf1f44cc6a888fff8419c8f35612d503ba3216Robert Greenwalt Phone phone = phones[i]; 399e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville 400e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville try { 4011a87ab3d7170d618f048c4f5af8c7504a587aaa5Jack Yu phone.dump(fd, pw, args); 402e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville } catch (Exception e) { 403e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.println("Telephony DebugService: Could not get Phone[" + i + "] e=" + e); 404e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville continue; 405e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville } 406e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville 407e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.flush(); 408e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.println("++++++++++++++++++++++++++++++++"); 409e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville 410e9bf1f44cc6a888fff8419c8f35612d503ba3216Robert Greenwalt sTelephonyNetworkFactories[i].dump(fd, pw, args); 411e9bf1f44cc6a888fff8419c8f35612d503ba3216Robert Greenwalt 412e9bf1f44cc6a888fff8419c8f35612d503ba3216Robert Greenwalt pw.flush(); 413e9bf1f44cc6a888fff8419c8f35612d503ba3216Robert Greenwalt pw.println("++++++++++++++++++++++++++++++++"); 414e9bf1f44cc6a888fff8419c8f35612d503ba3216Robert Greenwalt 415e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville try { 4161a87ab3d7170d618f048c4f5af8c7504a587aaa5Jack Yu ((IccCardProxy)phone.getIccCard()).dump(fd, pw, args); 417e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville } catch (Exception e) { 418e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville e.printStackTrace(); 419e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville } 420e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.flush(); 4219521f8c043c167e3a3fa97ea50bf1e2e0cd188a1Robert Greenwalt pw.decreaseIndent(); 422e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.println("++++++++++++++++++++++++++++++++"); 423e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville } 424e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville 4259521f8c043c167e3a3fa97ea50bf1e2e0cd188a1Robert Greenwalt pw.println("SubscriptionMonitor:"); 4269521f8c043c167e3a3fa97ea50bf1e2e0cd188a1Robert Greenwalt pw.increaseIndent(); 4279521f8c043c167e3a3fa97ea50bf1e2e0cd188a1Robert Greenwalt try { 4289521f8c043c167e3a3fa97ea50bf1e2e0cd188a1Robert Greenwalt sSubscriptionMonitor.dump(fd, pw, args); 4299521f8c043c167e3a3fa97ea50bf1e2e0cd188a1Robert Greenwalt } catch (Exception e) { 4309521f8c043c167e3a3fa97ea50bf1e2e0cd188a1Robert Greenwalt e.printStackTrace(); 4319521f8c043c167e3a3fa97ea50bf1e2e0cd188a1Robert Greenwalt } 4329521f8c043c167e3a3fa97ea50bf1e2e0cd188a1Robert Greenwalt pw.decreaseIndent(); 4339521f8c043c167e3a3fa97ea50bf1e2e0cd188a1Robert Greenwalt pw.println("++++++++++++++++++++++++++++++++"); 4349521f8c043c167e3a3fa97ea50bf1e2e0cd188a1Robert Greenwalt 4359521f8c043c167e3a3fa97ea50bf1e2e0cd188a1Robert Greenwalt pw.println("UiccController:"); 4369521f8c043c167e3a3fa97ea50bf1e2e0cd188a1Robert Greenwalt pw.increaseIndent(); 437e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville try { 438e9bf1f44cc6a888fff8419c8f35612d503ba3216Robert Greenwalt sUiccController.dump(fd, pw, args); 439e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville } catch (Exception e) { 440e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville e.printStackTrace(); 441e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville } 442e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.flush(); 4439521f8c043c167e3a3fa97ea50bf1e2e0cd188a1Robert Greenwalt pw.decreaseIndent(); 444e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.println("++++++++++++++++++++++++++++++++"); 445e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville 4469521f8c043c167e3a3fa97ea50bf1e2e0cd188a1Robert Greenwalt pw.println("SubscriptionController:"); 4479521f8c043c167e3a3fa97ea50bf1e2e0cd188a1Robert Greenwalt pw.increaseIndent(); 448e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville try { 449e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville SubscriptionController.getInstance().dump(fd, pw, args); 450e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville } catch (Exception e) { 451e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville e.printStackTrace(); 452e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville } 453e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville pw.flush(); 4549521f8c043c167e3a3fa97ea50bf1e2e0cd188a1Robert Greenwalt pw.decreaseIndent(); 4554a3d736dbf0b8262290d3720085779538ceaad72Zach Johnson pw.println("++++++++++++++++++++++++++++++++"); 4564a3d736dbf0b8262290d3720085779538ceaad72Zach Johnson 4579521f8c043c167e3a3fa97ea50bf1e2e0cd188a1Robert Greenwalt pw.println("SubInfoRecordUpdater:"); 4589521f8c043c167e3a3fa97ea50bf1e2e0cd188a1Robert Greenwalt pw.increaseIndent(); 4594a3d736dbf0b8262290d3720085779538ceaad72Zach Johnson try { 4604a3d736dbf0b8262290d3720085779538ceaad72Zach Johnson sSubInfoRecordUpdater.dump(fd, pw, args); 4614a3d736dbf0b8262290d3720085779538ceaad72Zach Johnson } catch (Exception e) { 4624a3d736dbf0b8262290d3720085779538ceaad72Zach Johnson e.printStackTrace(); 4634a3d736dbf0b8262290d3720085779538ceaad72Zach Johnson } 4644a3d736dbf0b8262290d3720085779538ceaad72Zach Johnson pw.flush(); 4659521f8c043c167e3a3fa97ea50bf1e2e0cd188a1Robert Greenwalt pw.decreaseIndent(); 466265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwalt pw.println("++++++++++++++++++++++++++++++++"); 4679521f8c043c167e3a3fa97ea50bf1e2e0cd188a1Robert Greenwalt 4689521f8c043c167e3a3fa97ea50bf1e2e0cd188a1Robert Greenwalt pw.println("LocalLogs:"); 4699521f8c043c167e3a3fa97ea50bf1e2e0cd188a1Robert Greenwalt pw.increaseIndent(); 470265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwalt synchronized (sLocalLogs) { 471265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwalt for (String key : sLocalLogs.keySet()) { 4729521f8c043c167e3a3fa97ea50bf1e2e0cd188a1Robert Greenwalt pw.println(key); 4739521f8c043c167e3a3fa97ea50bf1e2e0cd188a1Robert Greenwalt pw.increaseIndent(); 4749521f8c043c167e3a3fa97ea50bf1e2e0cd188a1Robert Greenwalt sLocalLogs.get(key).dump(fd, pw, args); 4759521f8c043c167e3a3fa97ea50bf1e2e0cd188a1Robert Greenwalt pw.decreaseIndent(); 476265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwalt } 4779521f8c043c167e3a3fa97ea50bf1e2e0cd188a1Robert Greenwalt pw.flush(); 478265445ed9ade6b904a3b4bfaf03cf346230e86e3Robert Greenwalt } 4799521f8c043c167e3a3fa97ea50bf1e2e0cd188a1Robert Greenwalt pw.decreaseIndent(); 480e97be3971cb6b55e019433c32524cc60ce0d037bWink Saville } 481c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville} 482