1/* 2 * Copyright (C) 2006 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.android.internal.telephony.mocks; 18 19import static android.telephony.SubscriptionManager.INVALID_PHONE_INDEX; 20import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID; 21import static android.telephony.SubscriptionManager.DEFAULT_SUBSCRIPTION_ID; 22 23import android.content.Context; 24import android.content.Intent; 25import android.os.UserHandle; 26import android.os.RemoteException; 27import android.telephony.SubscriptionInfo; 28import android.telephony.SubscriptionManager; 29 30import com.android.internal.telephony.CommandsInterface; 31import com.android.internal.telephony.ISub; 32import com.android.internal.telephony.ITelephonyRegistry; 33import com.android.internal.telephony.Phone; 34import com.android.internal.telephony.PhoneConstants; 35import com.android.internal.telephony.SubscriptionController; 36import com.android.internal.telephony.TelephonyIntents; 37 38import java.io.FileDescriptor; 39import java.io.PrintWriter; 40import java.util.concurrent.atomic.AtomicInteger; 41import java.util.List; 42 43// must extend SubscriptionController as some people use it directly within-process 44public class SubscriptionControllerMock extends SubscriptionController { 45 final AtomicInteger mDefaultDataSubId = new AtomicInteger(INVALID_SUBSCRIPTION_ID); 46 final ITelephonyRegistry.Stub mTelephonyRegistry; 47 final int[][] mSlotIdxToSubId; 48 49 public static SubscriptionController init(Phone phone) { 50 throw new RuntimeException("not implemented"); 51 } 52 public static SubscriptionController init(Context c, CommandsInterface[] ci) { 53 throw new RuntimeException("not implemented"); 54 } 55 public static SubscriptionController getInstance() { 56 throw new RuntimeException("not implemented"); 57 } 58 59 public SubscriptionControllerMock(Context c, ITelephonyRegistry.Stub tr, int phoneCount) { 60 super(c); 61 mTelephonyRegistry = tr; 62 mSlotIdxToSubId = new int[phoneCount][]; 63 for (int i = 0; i < phoneCount; i++) { 64 mSlotIdxToSubId[i] = new int[1]; 65 mSlotIdxToSubId[i][0] = INVALID_SUBSCRIPTION_ID; 66 } 67 } 68 69 protected void init(Context c) { 70 mContext = c; 71 } 72 73 @Override 74 public int getDefaultDataSubId() { 75 return mDefaultDataSubId.get(); 76 } 77 78 @Override 79 public void setDefaultDataSubId(int subId) { 80 if (subId == DEFAULT_SUBSCRIPTION_ID) { 81 throw new RuntimeException("setDefaultDataSubId called with DEFAULT_SUB_ID"); 82 } 83 84 mDefaultDataSubId.set(subId); 85 broadcastDefaultDataSubIdChanged(subId); 86 } 87 88 private void broadcastDefaultDataSubIdChanged(int subId) { 89 // Broadcast an Intent for default data sub change 90 Intent intent = new Intent(TelephonyIntents.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED); 91 intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING); 92 intent.putExtra(PhoneConstants.SUBSCRIPTION_KEY, subId); 93 mContext.sendStickyBroadcastAsUser(intent, UserHandle.ALL); 94 } 95 96 @Override 97 public int getSubIdUsingPhoneId(int phoneId) { 98 int[] subIds = getSubId(phoneId); 99 if (subIds == null || subIds.length == 0) { 100 return INVALID_SUBSCRIPTION_ID; 101 } 102 return subIds[0]; 103 } 104 105 @Override 106 public void notifySubscriptionInfoChanged() { 107 try { 108 mTelephonyRegistry.notifySubscriptionInfoChanged(); 109 } catch (RemoteException ex) {} 110 } 111 @Override 112 public SubscriptionInfo getActiveSubscriptionInfo(int subId, String callingPackage) { 113 throw new RuntimeException("not implemented"); 114 } 115 @Override 116 public SubscriptionInfo getActiveSubscriptionInfoForIccId(String iccId, String callingPackage) { 117 throw new RuntimeException("not implemented"); 118 } 119 @Override 120 public SubscriptionInfo getActiveSubscriptionInfoForSimSlotIndex(int slotIdx, String cp){ 121 throw new RuntimeException("not implemented"); 122 } 123 @Override 124 public List<SubscriptionInfo> getAllSubInfoList(String callingPackage) { 125 throw new RuntimeException("not implemented"); 126 } 127 @Override 128 public List<SubscriptionInfo> getActiveSubscriptionInfoList(String callingPackage) { 129 throw new RuntimeException("not implemented"); 130 } 131 @Override 132 public int getActiveSubInfoCount(String callingPackage) { 133 throw new RuntimeException("not implemented"); 134 } 135 @Override 136 public int getAllSubInfoCount(String callingPackage) { 137 throw new RuntimeException("not implemented"); 138 } 139 @Override 140 public int getActiveSubInfoCountMax() { 141 throw new RuntimeException("not implemented"); 142 } 143 @Override 144 public int addSubInfoRecord(String iccId, int slotId) { 145 throw new RuntimeException("not implemented"); 146 } 147 @Override 148 public boolean setPlmnSpn(int slotId, boolean showPlmn, String plmn, boolean showSpn, 149 String spn) { 150 throw new RuntimeException("not implemented"); 151 } 152 @Override 153 public int setIconTint(int tint, int subId) { 154 throw new RuntimeException("not implemented"); 155 } 156 @Override 157 public int setDisplayName(String displayName, int subId) { 158 throw new RuntimeException("not implemented"); 159 } 160 @Override 161 public int setDisplayNameUsingSrc(String displayName, int subId, long nameSource) { 162 throw new RuntimeException("not implemented"); 163 } 164 @Override 165 public int setDisplayNumber(String number, int subId) { 166 throw new RuntimeException("not implemented"); 167 } 168 @Override 169 public int setDataRoaming(int roaming, int subId) { 170 throw new RuntimeException("not implemented"); 171 } 172 @Override 173 public int setMccMnc(String mccMnc, int subId) { 174 throw new RuntimeException("not implemented"); 175 } 176 @Override 177 public int getSlotId(int subId) { 178 throw new RuntimeException("not implemented"); 179 } 180 181 private boolean isInvalidSlotId(int slotIdx) { 182 if (slotIdx < 0 || slotIdx >= mSlotIdxToSubId.length) return true; 183 return false; 184 } 185 186 @Override 187 public int[] getSubId(int slotIdx) { 188 if (isInvalidSlotId(slotIdx)) { 189 return null; 190 } 191 return mSlotIdxToSubId[slotIdx]; 192 } 193 public void setSlotSubId(int slotIdx, int subId) { 194 if (isInvalidSlotId(slotIdx)) { 195 throw new RuntimeException("invalid slot specified" + slotIdx); 196 } 197 if (mSlotIdxToSubId[slotIdx][0] != subId) { 198 mSlotIdxToSubId[slotIdx][0] = subId; 199 try { 200 mTelephonyRegistry.notifySubscriptionInfoChanged(); 201 } catch (RemoteException ex) {} 202 } 203 } 204 @Override 205 public int getPhoneId(int subId) { 206 if (subId == DEFAULT_SUBSCRIPTION_ID) { 207 subId = getDefaultSubId(); 208 } 209 210 if (subId <= INVALID_SUBSCRIPTION_ID) return INVALID_PHONE_INDEX; 211 212 for (int i = 0; i < mSlotIdxToSubId.length; i++) { 213 if (mSlotIdxToSubId[i][0] == subId) return i; 214 } 215 return INVALID_PHONE_INDEX; 216 } 217 @Override 218 public int clearSubInfo() { 219 throw new RuntimeException("not implemented"); 220 } 221 @Override 222 public int getDefaultSubId() { 223 throw new RuntimeException("not implemented"); 224 } 225 @Override 226 public void setDefaultSmsSubId(int subId) { 227 throw new RuntimeException("not implemented"); 228 } 229 @Override 230 public int getDefaultSmsSubId() { 231 throw new RuntimeException("not implemented"); 232 } 233 @Override 234 public void setDefaultVoiceSubId(int subId) { 235 throw new RuntimeException("not implemented"); 236 } 237 @Override 238 public int getDefaultVoiceSubId() { 239 throw new RuntimeException("not implemented"); 240 } 241 @Override 242 public void clearDefaultsForInactiveSubIds() { 243 throw new RuntimeException("not implemented"); 244 } 245 @Override 246 public int[] getSubIdUsingSlotId(int slotId) { 247 return getSubId(slotId); 248 } 249 @Override 250 public List<SubscriptionInfo> getSubInfoUsingSlotIdWithCheck(int slotId, boolean needCheck, 251 String callingPackage) { 252 throw new RuntimeException("not implemented"); 253 } 254 @Override 255 public void updatePhonesAvailability(Phone[] phones) { 256 throw new RuntimeException("not implemented"); 257 } 258 @Override 259 public int[] getActiveSubIdList() { 260 throw new RuntimeException("not implemented"); 261 } 262 @Override 263 public boolean isActiveSubId(int subId) { 264 throw new RuntimeException("not implemented"); 265 } 266 @Override 267 public int getSimStateForSlotIdx(int slotIdx) { 268 throw new RuntimeException("not implemented"); 269 } 270 @Override 271 public void setSubscriptionProperty(int subId, String propKey, String propValue) { 272 throw new RuntimeException("not implemented"); 273 } 274 @Override 275 public String getSubscriptionProperty(int subId, String propKey, String callingPackage) { 276 throw new RuntimeException("not implemented"); 277 } 278 @Override 279 public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { 280 throw new RuntimeException("not implemented"); 281 } 282} 283