Home | History | Annotate | Download | only in telephony
      1 /*
      2  * Copyright (C) 2006 The Android Open Source Project
      3  * Copyright (c) 2011-2013, The Linux Foundation. All rights reserved.
      4  * Not a Contribution.
      5  *
      6  * Licensed under the Apache License, Version 2.0 (the "License");
      7  * you may not use this file except in compliance with the License.
      8  * You may obtain a copy of the License at
      9  *
     10  *      http://www.apache.org/licenses/LICENSE-2.0
     11  *
     12  * Unless required by applicable law or agreed to in writing, software
     13  * distributed under the License is distributed on an "AS IS" BASIS,
     14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     15  * See the License for the specific language governing permissions and
     16  * limitations under the License.
     17  */
     18 
     19 package com.android.internal.telephony;
     20 
     21 import android.os.RemoteException;
     22 import android.os.ServiceManager;
     23 import android.telephony.SubscriptionManager;
     24 import android.telephony.Rlog;
     25 import android.telephony.TelephonyManager;
     26 
     27 import java.lang.NullPointerException;
     28 import java.lang.ArrayIndexOutOfBoundsException;
     29 
     30 import com.android.internal.telephony.IPhoneSubInfo;
     31 import com.android.internal.telephony.Phone;
     32 import com.android.internal.telephony.PhoneSubInfoProxy;
     33 
     34 public class PhoneSubInfoController extends IPhoneSubInfo.Stub {
     35     private static final String TAG = "PhoneSubInfoController";
     36     private Phone[] mPhone;
     37 
     38     public PhoneSubInfoController(Phone[] phone) {
     39         mPhone = phone;
     40         if (ServiceManager.getService("iphonesubinfo") == null) {
     41             ServiceManager.addService("iphonesubinfo", this);
     42         }
     43     }
     44 
     45 
     46     public String getDeviceId() {
     47         return getDeviceIdForPhone(SubscriptionManager.getPhoneId(getDefaultSubscription()));
     48     }
     49 
     50     public String getDeviceIdForPhone(int phoneId) {
     51         Phone phone = getPhone(phoneId);
     52         if (phone != null) {
     53             return phone.getDeviceId();
     54         } else {
     55             Rlog.e(TAG,"getDeviceIdForPhone phone " + phoneId + " is null");
     56             return null;
     57         }
     58     }
     59 
     60     public String getNaiForSubscriber(int subId) {
     61         PhoneSubInfoProxy phoneSubInfoProxy = getPhoneSubInfoProxy(subId);
     62         if (phoneSubInfoProxy != null) {
     63             return phoneSubInfoProxy.getNai();
     64         } else {
     65             Rlog.e(TAG,"getNai phoneSubInfoProxy is null" +
     66                       " for Subscription:" + subId);
     67             return null;
     68         }
     69     }
     70 
     71     public String getImeiForSubscriber(int subId) {
     72         PhoneSubInfoProxy phoneSubInfoProxy = getPhoneSubInfoProxy(subId);
     73         if (phoneSubInfoProxy != null) {
     74             return phoneSubInfoProxy.getImei();
     75         } else {
     76             Rlog.e(TAG,"getDeviceId phoneSubInfoProxy is null" +
     77                     " for Subscription:" + subId);
     78             return null;
     79         }
     80     }
     81 
     82     public String getDeviceSvn() {
     83         return getDeviceSvnUsingSubId(getDefaultSubscription());
     84     }
     85 
     86     public String getDeviceSvnUsingSubId(int subId) {
     87         PhoneSubInfoProxy phoneSubInfoProxy = getPhoneSubInfoProxy(subId);
     88         if (phoneSubInfoProxy != null) {
     89             return phoneSubInfoProxy.getDeviceSvn();
     90         } else {
     91             Rlog.e(TAG,"getDeviceSvn phoneSubInfoProxy is null");
     92             return null;
     93         }
     94     }
     95 
     96     public String getSubscriberId() {
     97         return getSubscriberIdForSubscriber(getDefaultSubscription());
     98     }
     99 
    100     public String getSubscriberIdForSubscriber(int subId) {
    101         PhoneSubInfoProxy phoneSubInfoProxy = getPhoneSubInfoProxy(subId);
    102         if (phoneSubInfoProxy != null) {
    103             return phoneSubInfoProxy.getSubscriberId();
    104         } else {
    105             Rlog.e(TAG,"getSubscriberId phoneSubInfoProxy is" +
    106                       " null for Subscription:" + subId);
    107             return null;
    108         }
    109     }
    110 
    111     /**
    112      * Retrieves the serial number of the ICC, if applicable.
    113      */
    114     public String getIccSerialNumber() {
    115         return getIccSerialNumberForSubscriber(getDefaultSubscription());
    116     }
    117 
    118     public String getIccSerialNumberForSubscriber(int subId) {
    119         PhoneSubInfoProxy phoneSubInfoProxy = getPhoneSubInfoProxy(subId);
    120         if (phoneSubInfoProxy != null) {
    121             return phoneSubInfoProxy.getIccSerialNumber();
    122         } else {
    123             Rlog.e(TAG,"getIccSerialNumber phoneSubInfoProxy is" +
    124                       " null for Subscription:" + subId);
    125             return null;
    126         }
    127     }
    128 
    129     public String getLine1Number() {
    130         return getLine1NumberForSubscriber(getDefaultSubscription());
    131     }
    132 
    133     public String getLine1NumberForSubscriber(int subId) {
    134         PhoneSubInfoProxy phoneSubInfoProxy = getPhoneSubInfoProxy(subId);
    135         if (phoneSubInfoProxy != null) {
    136             return phoneSubInfoProxy.getLine1Number();
    137         } else {
    138             Rlog.e(TAG,"getLine1Number phoneSubInfoProxy is" +
    139                       " null for Subscription:" + subId);
    140             return null;
    141         }
    142     }
    143 
    144     public String getLine1AlphaTag() {
    145         return getLine1AlphaTagForSubscriber(getDefaultSubscription());
    146     }
    147 
    148     public String getLine1AlphaTagForSubscriber(int subId) {
    149         PhoneSubInfoProxy phoneSubInfoProxy = getPhoneSubInfoProxy(subId);
    150         if (phoneSubInfoProxy != null) {
    151             return phoneSubInfoProxy.getLine1AlphaTag();
    152         } else {
    153             Rlog.e(TAG,"getLine1AlphaTag phoneSubInfoProxy is" +
    154                       " null for Subscription:" + subId);
    155             return null;
    156         }
    157     }
    158 
    159     public String getMsisdn() {
    160         return getMsisdnForSubscriber(getDefaultSubscription());
    161     }
    162 
    163     public String getMsisdnForSubscriber(int subId) {
    164         PhoneSubInfoProxy phoneSubInfoProxy = getPhoneSubInfoProxy(subId);
    165         if (phoneSubInfoProxy != null) {
    166             return phoneSubInfoProxy.getMsisdn();
    167         } else {
    168             Rlog.e(TAG,"getMsisdn phoneSubInfoProxy is" +
    169                       " null for Subscription:" + subId);
    170             return null;
    171         }
    172     }
    173 
    174     public String getVoiceMailNumber() {
    175         return getVoiceMailNumberForSubscriber(getDefaultSubscription());
    176     }
    177 
    178     public String getVoiceMailNumberForSubscriber(int subId) {
    179         PhoneSubInfoProxy phoneSubInfoProxy = getPhoneSubInfoProxy(subId);
    180         if (phoneSubInfoProxy != null) {
    181             return phoneSubInfoProxy.getVoiceMailNumber();
    182         } else {
    183             Rlog.e(TAG,"getVoiceMailNumber phoneSubInfoProxy is" +
    184                       " null for Subscription:" + subId);
    185             return null;
    186         }
    187     }
    188 
    189     public String getCompleteVoiceMailNumber() {
    190         return getCompleteVoiceMailNumberForSubscriber(getDefaultSubscription());
    191     }
    192 
    193     public String getCompleteVoiceMailNumberForSubscriber(int subId) {
    194         PhoneSubInfoProxy phoneSubInfoProxy = getPhoneSubInfoProxy(subId);
    195         if (phoneSubInfoProxy != null) {
    196             return phoneSubInfoProxy.getCompleteVoiceMailNumber();
    197         } else {
    198             Rlog.e(TAG,"getCompleteVoiceMailNumber phoneSubInfoProxy" +
    199                       " is null for Subscription:" + subId);
    200             return null;
    201         }
    202     }
    203 
    204     public String getVoiceMailAlphaTag() {
    205         return getVoiceMailAlphaTagForSubscriber(getDefaultSubscription());
    206     }
    207 
    208     public String getVoiceMailAlphaTagForSubscriber(int subId) {
    209         PhoneSubInfoProxy phoneSubInfoProxy = getPhoneSubInfoProxy(subId);
    210         if (phoneSubInfoProxy != null) {
    211             return phoneSubInfoProxy.getVoiceMailAlphaTag();
    212         } else {
    213             Rlog.e(TAG,"getVoiceMailAlphaTag phoneSubInfoProxy is" +
    214                       " null for Subscription:" + subId);
    215             return null;
    216         }
    217     }
    218 
    219     /**
    220      * get Phone sub info proxy object based on subId.
    221      **/
    222     private PhoneSubInfoProxy getPhoneSubInfoProxy(int subId) {
    223 
    224         int phoneId = SubscriptionManager.getPhoneId(subId);
    225 
    226         try {
    227             return getPhone(phoneId).getPhoneSubInfoProxy();
    228         } catch (NullPointerException e) {
    229             Rlog.e(TAG, "Exception is :" + e.toString() + " For subId :" + subId);
    230             e.printStackTrace();
    231             return null;
    232         }
    233     }
    234 
    235     private PhoneProxy getPhone(int phoneId) {
    236         if (phoneId < 0 || phoneId >= TelephonyManager.getDefault().getPhoneCount()) {
    237             phoneId = 0;
    238         }
    239         return (PhoneProxy) mPhone[phoneId];
    240     }
    241 
    242     private int getDefaultSubscription() {
    243         return  PhoneFactory.getDefaultSubscription();
    244     }
    245 
    246 
    247     public String getIsimImpi() {
    248         PhoneSubInfoProxy phoneSubInfoProxy = getPhoneSubInfoProxy(getDefaultSubscription());
    249         return phoneSubInfoProxy.getIsimImpi();
    250     }
    251 
    252     public String getIsimDomain() {
    253         PhoneSubInfoProxy phoneSubInfoProxy = getPhoneSubInfoProxy(getDefaultSubscription());
    254         return phoneSubInfoProxy.getIsimDomain();
    255     }
    256 
    257     public String[] getIsimImpu() {
    258         PhoneSubInfoProxy phoneSubInfoProxy = getPhoneSubInfoProxy(getDefaultSubscription());
    259         return phoneSubInfoProxy.getIsimImpu();
    260     }
    261 
    262     public String getIsimIst() throws RemoteException {
    263         PhoneSubInfoProxy phoneSubInfoProxy = getPhoneSubInfoProxy(getDefaultSubscription());
    264         return phoneSubInfoProxy.getIsimIst();
    265     }
    266 
    267     public String[] getIsimPcscf() throws RemoteException {
    268         PhoneSubInfoProxy phoneSubInfoProxy = getPhoneSubInfoProxy(getDefaultSubscription());
    269         return phoneSubInfoProxy.getIsimPcscf();
    270     }
    271 
    272     public String getIsimChallengeResponse(String nonce) throws RemoteException {
    273         PhoneSubInfoProxy phoneSubInfoProxy = getPhoneSubInfoProxy(getDefaultSubscription());
    274         return phoneSubInfoProxy.getIsimChallengeResponse(nonce);
    275     }
    276 
    277     public String getIccSimChallengeResponse(int subId, int appType, String data)
    278             throws RemoteException {
    279         PhoneSubInfoProxy phoneSubInfoProxy = getPhoneSubInfoProxy(subId);
    280         return phoneSubInfoProxy.getIccSimChallengeResponse(subId, appType, data);
    281     }
    282 
    283      public String getGroupIdLevel1() {
    284          return getGroupIdLevel1ForSubscriber(getDefaultSubscription());
    285      }
    286 
    287      public String getGroupIdLevel1ForSubscriber(int subId) {
    288          PhoneSubInfoProxy phoneSubInfoProxy = getPhoneSubInfoProxy(subId);
    289          if (phoneSubInfoProxy != null) {
    290              return phoneSubInfoProxy.getGroupIdLevel1();
    291          } else {
    292              Rlog.e(TAG,"getGroupIdLevel1 phoneSubInfoProxy is" +
    293                        " null for Subscription:" + subId);
    294              return null;
    295          }
    296      }
    297 }
    298