| /* |
| * Copyright (C) 2006 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.internal.telephony.uicc; |
| |
| import android.telephony.Rlog; |
| |
| import com.android.internal.telephony.uicc.IccCardStatus.PinState; |
| |
| |
| /** |
| * See also RIL_AppStatus in include/telephony/ril.h |
| * |
| * {@hide} |
| */ |
| public class IccCardApplicationStatus { |
| // TODO: Replace with constants from PhoneConstants.APPTYPE_xxx |
| public enum AppType{ |
| APPTYPE_UNKNOWN, |
| APPTYPE_SIM, |
| APPTYPE_USIM, |
| APPTYPE_RUIM, |
| APPTYPE_CSIM, |
| APPTYPE_ISIM |
| } |
| |
| public enum AppState{ |
| APPSTATE_UNKNOWN, |
| APPSTATE_DETECTED, |
| APPSTATE_PIN, |
| APPSTATE_PUK, |
| APPSTATE_SUBSCRIPTION_PERSO, |
| APPSTATE_READY; |
| |
| boolean isPinRequired() { |
| return this == APPSTATE_PIN; |
| } |
| |
| boolean isPukRequired() { |
| return this == APPSTATE_PUK; |
| } |
| |
| boolean isSubscriptionPersoEnabled() { |
| return this == APPSTATE_SUBSCRIPTION_PERSO; |
| } |
| |
| boolean isAppReady() { |
| return this == APPSTATE_READY; |
| } |
| |
| boolean isAppNotReady() { |
| return this == APPSTATE_UNKNOWN || |
| this == APPSTATE_DETECTED; |
| } |
| } |
| |
| public enum PersoSubState{ |
| PERSOSUBSTATE_UNKNOWN, |
| PERSOSUBSTATE_IN_PROGRESS, |
| PERSOSUBSTATE_READY, |
| PERSOSUBSTATE_SIM_NETWORK, |
| PERSOSUBSTATE_SIM_NETWORK_SUBSET, |
| PERSOSUBSTATE_SIM_CORPORATE, |
| PERSOSUBSTATE_SIM_SERVICE_PROVIDER, |
| PERSOSUBSTATE_SIM_SIM, |
| PERSOSUBSTATE_SIM_NETWORK_PUK, |
| PERSOSUBSTATE_SIM_NETWORK_SUBSET_PUK, |
| PERSOSUBSTATE_SIM_CORPORATE_PUK, |
| PERSOSUBSTATE_SIM_SERVICE_PROVIDER_PUK, |
| PERSOSUBSTATE_SIM_SIM_PUK, |
| PERSOSUBSTATE_RUIM_NETWORK1, |
| PERSOSUBSTATE_RUIM_NETWORK2, |
| PERSOSUBSTATE_RUIM_HRPD, |
| PERSOSUBSTATE_RUIM_CORPORATE, |
| PERSOSUBSTATE_RUIM_SERVICE_PROVIDER, |
| PERSOSUBSTATE_RUIM_RUIM, |
| PERSOSUBSTATE_RUIM_NETWORK1_PUK, |
| PERSOSUBSTATE_RUIM_NETWORK2_PUK, |
| PERSOSUBSTATE_RUIM_HRPD_PUK, |
| PERSOSUBSTATE_RUIM_CORPORATE_PUK, |
| PERSOSUBSTATE_RUIM_SERVICE_PROVIDER_PUK, |
| PERSOSUBSTATE_RUIM_RUIM_PUK; |
| |
| boolean isPersoSubStateUnknown() { |
| return this == PERSOSUBSTATE_UNKNOWN; |
| } |
| } |
| |
| public AppType app_type; |
| public AppState app_state; |
| // applicable only if app_state == RIL_APPSTATE_SUBSCRIPTION_PERSO |
| public PersoSubState perso_substate; |
| // null terminated string, e.g., from 0xA0, 0x00 -> 0x41, 0x30, 0x30, 0x30 */ |
| public String aid; |
| // null terminated string |
| public String app_label; |
| // applicable to USIM and CSIM |
| public int pin1_replaced; |
| public PinState pin1; |
| public PinState pin2; |
| |
| public AppType AppTypeFromRILInt(int type) { |
| AppType newType; |
| /* RIL_AppType ril.h */ |
| switch(type) { |
| case 0: newType = AppType.APPTYPE_UNKNOWN; break; |
| case 1: newType = AppType.APPTYPE_SIM; break; |
| case 2: newType = AppType.APPTYPE_USIM; break; |
| case 3: newType = AppType.APPTYPE_RUIM; break; |
| case 4: newType = AppType.APPTYPE_CSIM; break; |
| case 5: newType = AppType.APPTYPE_ISIM; break; |
| default: |
| newType = AppType.APPTYPE_UNKNOWN; |
| loge("AppTypeFromRILInt: bad RIL_AppType: " + type + " use APPTYPE_UNKNOWN"); |
| } |
| return newType; |
| } |
| |
| public AppState AppStateFromRILInt(int state) { |
| AppState newState; |
| /* RIL_AppState ril.h */ |
| switch(state) { |
| case 0: newState = AppState.APPSTATE_UNKNOWN; break; |
| case 1: newState = AppState.APPSTATE_DETECTED; break; |
| case 2: newState = AppState.APPSTATE_PIN; break; |
| case 3: newState = AppState.APPSTATE_PUK; break; |
| case 4: newState = AppState.APPSTATE_SUBSCRIPTION_PERSO; break; |
| case 5: newState = AppState.APPSTATE_READY; break; |
| default: |
| newState = AppState.APPSTATE_UNKNOWN; |
| loge("AppStateFromRILInt: bad state: " + state + " use APPSTATE_UNKNOWN"); |
| } |
| return newState; |
| } |
| |
| public PersoSubState PersoSubstateFromRILInt(int substate) { |
| PersoSubState newSubState; |
| /* RIL_PeroSubstate ril.h */ |
| switch(substate) { |
| case 0: newSubState = PersoSubState.PERSOSUBSTATE_UNKNOWN; break; |
| case 1: newSubState = PersoSubState.PERSOSUBSTATE_IN_PROGRESS; break; |
| case 2: newSubState = PersoSubState.PERSOSUBSTATE_READY; break; |
| case 3: newSubState = PersoSubState.PERSOSUBSTATE_SIM_NETWORK; break; |
| case 4: newSubState = PersoSubState.PERSOSUBSTATE_SIM_NETWORK_SUBSET; break; |
| case 5: newSubState = PersoSubState.PERSOSUBSTATE_SIM_CORPORATE; break; |
| case 6: newSubState = PersoSubState.PERSOSUBSTATE_SIM_SERVICE_PROVIDER; break; |
| case 7: newSubState = PersoSubState.PERSOSUBSTATE_SIM_SIM; break; |
| case 8: newSubState = PersoSubState.PERSOSUBSTATE_SIM_NETWORK_PUK; break; |
| case 9: newSubState = PersoSubState.PERSOSUBSTATE_SIM_NETWORK_SUBSET_PUK; break; |
| case 10: newSubState = PersoSubState.PERSOSUBSTATE_SIM_CORPORATE_PUK; break; |
| case 11: newSubState = PersoSubState.PERSOSUBSTATE_SIM_SERVICE_PROVIDER_PUK; break; |
| case 12: newSubState = PersoSubState.PERSOSUBSTATE_SIM_SIM_PUK; break; |
| case 13: newSubState = PersoSubState.PERSOSUBSTATE_RUIM_NETWORK1; break; |
| case 14: newSubState = PersoSubState.PERSOSUBSTATE_RUIM_NETWORK2; break; |
| case 15: newSubState = PersoSubState.PERSOSUBSTATE_RUIM_HRPD; break; |
| case 16: newSubState = PersoSubState.PERSOSUBSTATE_RUIM_CORPORATE; break; |
| case 17: newSubState = PersoSubState.PERSOSUBSTATE_RUIM_SERVICE_PROVIDER; break; |
| case 18: newSubState = PersoSubState.PERSOSUBSTATE_RUIM_RUIM; break; |
| case 19: newSubState = PersoSubState.PERSOSUBSTATE_RUIM_NETWORK1_PUK; break; |
| case 20: newSubState = PersoSubState.PERSOSUBSTATE_RUIM_NETWORK2_PUK; break; |
| case 21: newSubState = PersoSubState.PERSOSUBSTATE_RUIM_HRPD_PUK ; break; |
| case 22: newSubState = PersoSubState.PERSOSUBSTATE_RUIM_CORPORATE_PUK; break; |
| case 23: newSubState = PersoSubState.PERSOSUBSTATE_RUIM_SERVICE_PROVIDER_PUK; break; |
| case 24: newSubState = PersoSubState.PERSOSUBSTATE_RUIM_RUIM_PUK; break; |
| default: |
| newSubState = PersoSubState.PERSOSUBSTATE_UNKNOWN; |
| loge("PersoSubstateFromRILInt: bad substate: " + substate |
| + " use PERSOSUBSTATE_UNKNOWN"); |
| } |
| return newSubState; |
| } |
| |
| public PinState PinStateFromRILInt(int state) { |
| PinState newPinState; |
| switch(state) { |
| case 0: |
| newPinState = PinState.PINSTATE_UNKNOWN; |
| break; |
| case 1: |
| newPinState = PinState.PINSTATE_ENABLED_NOT_VERIFIED; |
| break; |
| case 2: |
| newPinState = PinState.PINSTATE_ENABLED_VERIFIED; |
| break; |
| case 3: |
| newPinState = PinState.PINSTATE_DISABLED; |
| break; |
| case 4: |
| newPinState = PinState.PINSTATE_ENABLED_BLOCKED; |
| break; |
| case 5: |
| newPinState = PinState.PINSTATE_ENABLED_PERM_BLOCKED; |
| break; |
| default: |
| newPinState = PinState.PINSTATE_UNKNOWN; |
| loge("PinStateFromRILInt: bad pin state: " + state + " use PINSTATE_UNKNOWN"); |
| } |
| return newPinState; |
| } |
| |
| @Override |
| public String toString() { |
| StringBuilder sb = new StringBuilder(); |
| |
| sb.append("{").append(app_type).append(",").append(app_state); |
| if (app_state == AppState.APPSTATE_SUBSCRIPTION_PERSO) { |
| sb.append(",").append(perso_substate); |
| } |
| if (app_type == AppType.APPTYPE_CSIM || |
| app_type == AppType.APPTYPE_USIM || |
| app_type == AppType.APPTYPE_ISIM) { |
| sb.append(",pin1=").append(pin1); |
| sb.append(",pin2=").append(pin2); |
| } |
| sb.append("}"); |
| return sb.toString(); |
| } |
| |
| private void loge(String s) { |
| Rlog.e("IccCardApplicationStatus", s); |
| } |
| } |