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