Home | History | Annotate | Download | only in uicc
      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 
     17 package com.android.internal.telephony.uicc;
     18 
     19 import android.telephony.Rlog;
     20 
     21 import com.android.internal.telephony.uicc.IccCardStatus.PinState;
     22 
     23 
     24 /**
     25  * See also RIL_AppStatus in include/telephony/ril.h
     26  *
     27  * {@hide}
     28  */
     29 public class IccCardApplicationStatus {
     30     // TODO: Replace with constants from PhoneConstants.APPTYPE_xxx
     31     public enum AppType{
     32         APPTYPE_UNKNOWN,
     33         APPTYPE_SIM,
     34         APPTYPE_USIM,
     35         APPTYPE_RUIM,
     36         APPTYPE_CSIM,
     37         APPTYPE_ISIM
     38     }
     39 
     40     public enum AppState{
     41         APPSTATE_UNKNOWN,
     42         APPSTATE_DETECTED,
     43         APPSTATE_PIN,
     44         APPSTATE_PUK,
     45         APPSTATE_SUBSCRIPTION_PERSO,
     46         APPSTATE_READY;
     47 
     48         boolean isPinRequired() {
     49             return this == APPSTATE_PIN;
     50         }
     51 
     52         boolean isPukRequired() {
     53             return this == APPSTATE_PUK;
     54         }
     55 
     56         boolean isSubscriptionPersoEnabled() {
     57             return this == APPSTATE_SUBSCRIPTION_PERSO;
     58         }
     59 
     60         boolean isAppReady() {
     61             return this == APPSTATE_READY;
     62         }
     63 
     64         boolean isAppNotReady() {
     65             return this == APPSTATE_UNKNOWN  ||
     66                    this == APPSTATE_DETECTED;
     67         }
     68     }
     69 
     70     public enum PersoSubState{
     71         PERSOSUBSTATE_UNKNOWN,
     72         PERSOSUBSTATE_IN_PROGRESS,
     73         PERSOSUBSTATE_READY,
     74         PERSOSUBSTATE_SIM_NETWORK,
     75         PERSOSUBSTATE_SIM_NETWORK_SUBSET,
     76         PERSOSUBSTATE_SIM_CORPORATE,
     77         PERSOSUBSTATE_SIM_SERVICE_PROVIDER,
     78         PERSOSUBSTATE_SIM_SIM,
     79         PERSOSUBSTATE_SIM_NETWORK_PUK,
     80         PERSOSUBSTATE_SIM_NETWORK_SUBSET_PUK,
     81         PERSOSUBSTATE_SIM_CORPORATE_PUK,
     82         PERSOSUBSTATE_SIM_SERVICE_PROVIDER_PUK,
     83         PERSOSUBSTATE_SIM_SIM_PUK,
     84         PERSOSUBSTATE_RUIM_NETWORK1,
     85         PERSOSUBSTATE_RUIM_NETWORK2,
     86         PERSOSUBSTATE_RUIM_HRPD,
     87         PERSOSUBSTATE_RUIM_CORPORATE,
     88         PERSOSUBSTATE_RUIM_SERVICE_PROVIDER,
     89         PERSOSUBSTATE_RUIM_RUIM,
     90         PERSOSUBSTATE_RUIM_NETWORK1_PUK,
     91         PERSOSUBSTATE_RUIM_NETWORK2_PUK,
     92         PERSOSUBSTATE_RUIM_HRPD_PUK,
     93         PERSOSUBSTATE_RUIM_CORPORATE_PUK,
     94         PERSOSUBSTATE_RUIM_SERVICE_PROVIDER_PUK,
     95         PERSOSUBSTATE_RUIM_RUIM_PUK;
     96 
     97         boolean isPersoSubStateUnknown() {
     98             return this == PERSOSUBSTATE_UNKNOWN;
     99         }
    100     }
    101 
    102     public AppType        app_type;
    103     public AppState       app_state;
    104     // applicable only if app_state == RIL_APPSTATE_SUBSCRIPTION_PERSO
    105     public PersoSubState  perso_substate;
    106     // null terminated string, e.g., from 0xA0, 0x00 -> 0x41, 0x30, 0x30, 0x30 */
    107     public String         aid;
    108     // null terminated string
    109     public String         app_label;
    110     // applicable to USIM and CSIM
    111     public int            pin1_replaced;
    112     public PinState       pin1;
    113     public PinState       pin2;
    114 
    115     public AppType AppTypeFromRILInt(int type) {
    116         AppType newType;
    117         /* RIL_AppType ril.h */
    118         switch(type) {
    119             case 0: newType = AppType.APPTYPE_UNKNOWN; break;
    120             case 1: newType = AppType.APPTYPE_SIM;     break;
    121             case 2: newType = AppType.APPTYPE_USIM;    break;
    122             case 3: newType = AppType.APPTYPE_RUIM;    break;
    123             case 4: newType = AppType.APPTYPE_CSIM;    break;
    124             case 5: newType = AppType.APPTYPE_ISIM;    break;
    125             default:
    126                 newType = AppType.APPTYPE_UNKNOWN;
    127                 loge("AppTypeFromRILInt: bad RIL_AppType: " + type + " use APPTYPE_UNKNOWN");
    128         }
    129         return newType;
    130     }
    131 
    132     public AppState AppStateFromRILInt(int state) {
    133         AppState newState;
    134         /* RIL_AppState ril.h */
    135         switch(state) {
    136             case 0: newState = AppState.APPSTATE_UNKNOWN;  break;
    137             case 1: newState = AppState.APPSTATE_DETECTED; break;
    138             case 2: newState = AppState.APPSTATE_PIN; break;
    139             case 3: newState = AppState.APPSTATE_PUK; break;
    140             case 4: newState = AppState.APPSTATE_SUBSCRIPTION_PERSO; break;
    141             case 5: newState = AppState.APPSTATE_READY; break;
    142             default:
    143                 newState = AppState.APPSTATE_UNKNOWN;
    144                 loge("AppStateFromRILInt: bad state: " + state + " use APPSTATE_UNKNOWN");
    145         }
    146         return newState;
    147     }
    148 
    149     public PersoSubState PersoSubstateFromRILInt(int substate) {
    150         PersoSubState newSubState;
    151         /* RIL_PeroSubstate ril.h */
    152         switch(substate) {
    153             case 0:  newSubState = PersoSubState.PERSOSUBSTATE_UNKNOWN;  break;
    154             case 1:  newSubState = PersoSubState.PERSOSUBSTATE_IN_PROGRESS; break;
    155             case 2:  newSubState = PersoSubState.PERSOSUBSTATE_READY; break;
    156             case 3:  newSubState = PersoSubState.PERSOSUBSTATE_SIM_NETWORK; break;
    157             case 4:  newSubState = PersoSubState.PERSOSUBSTATE_SIM_NETWORK_SUBSET; break;
    158             case 5:  newSubState = PersoSubState.PERSOSUBSTATE_SIM_CORPORATE; break;
    159             case 6:  newSubState = PersoSubState.PERSOSUBSTATE_SIM_SERVICE_PROVIDER; break;
    160             case 7:  newSubState = PersoSubState.PERSOSUBSTATE_SIM_SIM;  break;
    161             case 8:  newSubState = PersoSubState.PERSOSUBSTATE_SIM_NETWORK_PUK; break;
    162             case 9:  newSubState = PersoSubState.PERSOSUBSTATE_SIM_NETWORK_SUBSET_PUK; break;
    163             case 10: newSubState = PersoSubState.PERSOSUBSTATE_SIM_CORPORATE_PUK; break;
    164             case 11: newSubState = PersoSubState.PERSOSUBSTATE_SIM_SERVICE_PROVIDER_PUK; break;
    165             case 12: newSubState = PersoSubState.PERSOSUBSTATE_SIM_SIM_PUK; break;
    166             case 13: newSubState = PersoSubState.PERSOSUBSTATE_RUIM_NETWORK1; break;
    167             case 14: newSubState = PersoSubState.PERSOSUBSTATE_RUIM_NETWORK2; break;
    168             case 15: newSubState = PersoSubState.PERSOSUBSTATE_RUIM_HRPD; break;
    169             case 16: newSubState = PersoSubState.PERSOSUBSTATE_RUIM_CORPORATE; break;
    170             case 17: newSubState = PersoSubState.PERSOSUBSTATE_RUIM_SERVICE_PROVIDER; break;
    171             case 18: newSubState = PersoSubState.PERSOSUBSTATE_RUIM_RUIM; break;
    172             case 19: newSubState = PersoSubState.PERSOSUBSTATE_RUIM_NETWORK1_PUK; break;
    173             case 20: newSubState = PersoSubState.PERSOSUBSTATE_RUIM_NETWORK2_PUK; break;
    174             case 21: newSubState = PersoSubState.PERSOSUBSTATE_RUIM_HRPD_PUK ; break;
    175             case 22: newSubState = PersoSubState.PERSOSUBSTATE_RUIM_CORPORATE_PUK; break;
    176             case 23: newSubState = PersoSubState.PERSOSUBSTATE_RUIM_SERVICE_PROVIDER_PUK; break;
    177             case 24: newSubState = PersoSubState.PERSOSUBSTATE_RUIM_RUIM_PUK; break;
    178             default:
    179                 newSubState = PersoSubState.PERSOSUBSTATE_UNKNOWN;
    180                 loge("PersoSubstateFromRILInt: bad substate: " + substate
    181                         + " use PERSOSUBSTATE_UNKNOWN");
    182         }
    183         return newSubState;
    184     }
    185 
    186     public PinState PinStateFromRILInt(int state) {
    187         PinState newPinState;
    188         switch(state) {
    189             case 0:
    190                 newPinState = PinState.PINSTATE_UNKNOWN;
    191                 break;
    192             case 1:
    193                 newPinState = PinState.PINSTATE_ENABLED_NOT_VERIFIED;
    194                 break;
    195             case 2:
    196                 newPinState = PinState.PINSTATE_ENABLED_VERIFIED;
    197                 break;
    198             case 3:
    199                 newPinState = PinState.PINSTATE_DISABLED;
    200                 break;
    201             case 4:
    202                 newPinState = PinState.PINSTATE_ENABLED_BLOCKED;
    203                 break;
    204             case 5:
    205                 newPinState = PinState.PINSTATE_ENABLED_PERM_BLOCKED;
    206                 break;
    207             default:
    208                 newPinState = PinState.PINSTATE_UNKNOWN;
    209                 loge("PinStateFromRILInt: bad pin state: " + state + " use PINSTATE_UNKNOWN");
    210         }
    211         return newPinState;
    212     }
    213 
    214     @Override
    215     public String toString() {
    216         StringBuilder sb = new StringBuilder();
    217 
    218         sb.append("{").append(app_type).append(",").append(app_state);
    219         if (app_state == AppState.APPSTATE_SUBSCRIPTION_PERSO) {
    220             sb.append(",").append(perso_substate);
    221         }
    222         if (app_type == AppType.APPTYPE_CSIM ||
    223                 app_type == AppType.APPTYPE_USIM ||
    224                 app_type == AppType.APPTYPE_ISIM) {
    225             sb.append(",pin1=").append(pin1);
    226             sb.append(",pin2=").append(pin2);
    227         }
    228         sb.append("}");
    229         return sb.toString();
    230     }
    231 
    232     private void loge(String s) {
    233         Rlog.e("IccCardApplicationStatus", s);
    234     }
    235 }
    236