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;
18
19import java.util.ArrayList;
20
21/**
22 * See also RIL_CardStatus in include/telephony/ril.h
23 *
24 * {@hide}
25 */
26public class IccCardStatus {
27    public static final int CARD_MAX_APPS = 8;
28
29    public enum CardState {
30        CARDSTATE_ABSENT,
31        CARDSTATE_PRESENT,
32        CARDSTATE_ERROR;
33
34        boolean isCardPresent() {
35            return this == CARDSTATE_PRESENT;
36        }
37    }
38
39    public enum PinState {
40        PINSTATE_UNKNOWN,
41        PINSTATE_ENABLED_NOT_VERIFIED,
42        PINSTATE_ENABLED_VERIFIED,
43        PINSTATE_DISABLED,
44        PINSTATE_ENABLED_BLOCKED,
45        PINSTATE_ENABLED_PERM_BLOCKED;
46
47        boolean isPermBlocked() {
48            return this == PINSTATE_ENABLED_PERM_BLOCKED;
49        }
50
51        boolean isPinRequired() {
52            return this == PINSTATE_ENABLED_NOT_VERIFIED;
53        }
54
55        boolean isPukRequired() {
56            return this == PINSTATE_ENABLED_BLOCKED;
57        }
58    }
59
60    private CardState  mCardState;
61    private PinState   mUniversalPinState;
62    private int        mGsmUmtsSubscriptionAppIndex;
63    private int        mCdmaSubscriptionAppIndex;
64    private int        mImsSubscriptionAppIndex;
65    private int        mNumApplications;
66
67    private ArrayList<IccCardApplication> mApplications =
68            new ArrayList<IccCardApplication>(CARD_MAX_APPS);
69
70    public CardState getCardState() {
71        return mCardState;
72    }
73
74    public void setCardState(int state) {
75        switch(state) {
76        case 0:
77            mCardState = CardState.CARDSTATE_ABSENT;
78            break;
79        case 1:
80            mCardState = CardState.CARDSTATE_PRESENT;
81            break;
82        case 2:
83            mCardState = CardState.CARDSTATE_ERROR;
84            break;
85        default:
86            throw new RuntimeException("Unrecognized RIL_CardState: " + state);
87        }
88    }
89
90    public PinState getUniversalPinState() {
91        return mUniversalPinState;
92    }
93
94    public void setUniversalPinState(int state) {
95        switch(state) {
96        case 0:
97            mUniversalPinState = PinState.PINSTATE_UNKNOWN;
98            break;
99        case 1:
100            mUniversalPinState = PinState.PINSTATE_ENABLED_NOT_VERIFIED;
101            break;
102        case 2:
103            mUniversalPinState = PinState.PINSTATE_ENABLED_VERIFIED;
104            break;
105        case 3:
106            mUniversalPinState = PinState.PINSTATE_DISABLED;
107            break;
108        case 4:
109            mUniversalPinState = PinState.PINSTATE_ENABLED_BLOCKED;
110            break;
111        case 5:
112            mUniversalPinState = PinState.PINSTATE_ENABLED_PERM_BLOCKED;
113            break;
114        default:
115            throw new RuntimeException("Unrecognized RIL_PinState: " + state);
116        }
117    }
118
119    public int getGsmUmtsSubscriptionAppIndex() {
120        return mGsmUmtsSubscriptionAppIndex;
121    }
122
123    public void setGsmUmtsSubscriptionAppIndex(int gsmUmtsSubscriptionAppIndex) {
124        mGsmUmtsSubscriptionAppIndex = gsmUmtsSubscriptionAppIndex;
125    }
126
127    public int getCdmaSubscriptionAppIndex() {
128        return mCdmaSubscriptionAppIndex;
129    }
130
131    public void setCdmaSubscriptionAppIndex(int cdmaSubscriptionAppIndex) {
132        mCdmaSubscriptionAppIndex = cdmaSubscriptionAppIndex;
133    }
134
135    public int getImsSubscriptionAppIndex() {
136        return mImsSubscriptionAppIndex;
137    }
138
139    public void setImsSubscriptionAppIndex(int imsSubscriptionAppIndex) {
140        mImsSubscriptionAppIndex = imsSubscriptionAppIndex;
141    }
142
143    public int getNumApplications() {
144        return mNumApplications;
145    }
146
147    public void setNumApplications(int numApplications) {
148        mNumApplications = numApplications;
149    }
150
151    public void addApplication(IccCardApplication application) {
152        mApplications.add(application);
153    }
154
155    public IccCardApplication getApplication(int index) {
156        return mApplications.get(index);
157    }
158
159    @Override
160    public String toString() {
161        IccCardApplication app;
162
163        StringBuilder sb = new StringBuilder();
164        sb.append("IccCardState {").append(mCardState).append(",")
165        .append(mUniversalPinState)
166        .append(",num_apps=").append(mNumApplications)
167        .append(",gsm_id=").append(mGsmUmtsSubscriptionAppIndex);
168        if (mGsmUmtsSubscriptionAppIndex >=0
169                && mGsmUmtsSubscriptionAppIndex <CARD_MAX_APPS) {
170            app = getApplication(mGsmUmtsSubscriptionAppIndex);
171            sb.append(app == null ? "null" : app);
172        }
173
174        sb.append(",cmda_id=").append(mCdmaSubscriptionAppIndex);
175        if (mCdmaSubscriptionAppIndex >=0
176                && mCdmaSubscriptionAppIndex <CARD_MAX_APPS) {
177            app = getApplication(mCdmaSubscriptionAppIndex);
178            sb.append(app == null ? "null" : app);
179        }
180
181        sb.append(",ism_id=").append(mImsSubscriptionAppIndex);
182
183        sb.append("}");
184
185        return sb.toString();
186    }
187
188}
189