1 /* 2 * Copyright (c) 2011-2013, The Linux Foundation. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions are 6 * met: 7 * * Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * * Redistributions in binary form must reproduce the above 10 * copyright notice, this list of conditions and the following 11 * disclaimer in the documentation and/or other materials provided 12 * with the distribution. 13 * * Neither the name of The Linux Foundation nor the names of its 14 * contributors may be used to endorse or promote products derived 15 * from this software without specific prior written permission. 16 * 17 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 18 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 20 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 21 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 24 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 25 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 26 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 27 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 */ 29 30 package com.android.internal.telephony; 31 32 import android.content.Context; 33 import android.os.Handler; 34 import android.os.Message; 35 36 import android.telephony.Rlog; 37 import android.telephony.ServiceState; 38 import android.telephony.SubscriptionManager; 39 import android.telephony.TelephonyManager; 40 41 import com.android.internal.telephony.CommandsInterface; 42 import com.android.internal.telephony.Phone; 43 import com.android.internal.telephony.PhoneBase; 44 import com.android.internal.telephony.PhoneProxy; 45 import com.android.internal.telephony.dataconnection.DctController; 46 import com.android.internal.telephony.uicc.UiccController; 47 48 public class ProxyController { 49 static final String LOG_TAG = "ProxyController"; 50 51 //***** Class Variables 52 private static ProxyController sProxyController; 53 54 private Phone[] mProxyPhones; 55 56 private UiccController mUiccController; 57 58 private CommandsInterface[] mCi; 59 60 private Context mContext; 61 62 private static DctController mDctController; 63 64 //UiccPhoneBookController to use proper IccPhoneBookInterfaceManagerProxy object 65 private UiccPhoneBookController mUiccPhoneBookController; 66 67 //PhoneSubInfoController to use proper PhoneSubInfoProxy object 68 private PhoneSubInfoController mPhoneSubInfoController; 69 70 //UiccSmsController to use proper IccSmsInterfaceManager object 71 private UiccSmsController mUiccSmsController; 72 73 // private SubscriptionManager mSubscriptionManager; 74 75 //***** Class Methods 76 public static ProxyController getInstance(Context context, Phone[] phoneProxy, 77 UiccController uiccController, CommandsInterface[] ci) { 78 if (sProxyController == null) { 79 sProxyController = new ProxyController(context, phoneProxy, uiccController, ci); 80 } 81 return sProxyController; 82 } 83 84 static public ProxyController getInstance() { 85 return sProxyController; 86 } 87 88 private ProxyController(Context context, Phone[] phoneProxy, UiccController uiccController, 89 CommandsInterface[] ci) { 90 logd("Constructor - Enter"); 91 92 mContext = context; 93 mProxyPhones = phoneProxy; 94 mUiccController = uiccController; 95 mCi = ci; 96 97 mDctController = DctController.makeDctController((PhoneProxy[])phoneProxy); 98 mUiccPhoneBookController = new UiccPhoneBookController(mProxyPhones); 99 mPhoneSubInfoController = new PhoneSubInfoController(mProxyPhones); 100 mUiccSmsController = new UiccSmsController(mProxyPhones); 101 // mSubscriptionManager = SubscriptionManager.getInstance(context, uiccController, ci); 102 103 logd("Constructor - Exit"); 104 } 105 106 public void updateDataConnectionTracker(int sub) { 107 ((PhoneProxy) mProxyPhones[sub]).updateDataConnectionTracker(); 108 } 109 110 public void enableDataConnectivity(int sub) { 111 ((PhoneProxy) mProxyPhones[sub]).setInternalDataEnabled(true); 112 } 113 114 public void disableDataConnectivity(int sub, 115 Message dataCleanedUpMsg) { 116 ((PhoneProxy) mProxyPhones[sub]).setInternalDataEnabled(false, dataCleanedUpMsg); 117 } 118 119 public void updateCurrentCarrierInProvider(int sub) { 120 ((PhoneProxy) mProxyPhones[sub]).updateCurrentCarrierInProvider(); 121 } 122 123 public void registerForAllDataDisconnected(long subId, Handler h, int what, Object obj) { 124 int phoneId = SubscriptionController.getInstance().getPhoneId(subId); 125 126 if (phoneId >= 0 && phoneId < TelephonyManager.getDefault().getPhoneCount()) { 127 ((PhoneProxy) mProxyPhones[phoneId]).registerForAllDataDisconnected(h, what, obj); 128 } 129 } 130 131 public void unregisterForAllDataDisconnected(long subId, Handler h) { 132 int phoneId = SubscriptionController.getInstance().getPhoneId(subId); 133 134 if (phoneId >= 0 && phoneId < TelephonyManager.getDefault().getPhoneCount()) { 135 ((PhoneProxy) mProxyPhones[phoneId]).unregisterForAllDataDisconnected(h); 136 } 137 } 138 139 public boolean isDataDisconnected(long subId) { 140 int phoneId = SubscriptionController.getInstance().getPhoneId(subId); 141 142 if (phoneId >= 0 && phoneId < TelephonyManager.getDefault().getPhoneCount()) { 143 Phone activePhone = ((PhoneProxy) mProxyPhones[phoneId]).getActivePhone(); 144 return ((PhoneBase) activePhone).mDcTracker.isDisconnected(); 145 } else { 146 return false; 147 } 148 } 149 150 private void logd(String string) { 151 Rlog.d(LOG_TAG, string); 152 } 153 } 154