1c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville/*
2c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * Copyright (C) 2006 The Android Open Source Project
3c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville *
4c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * Licensed under the Apache License, Version 2.0 (the "License");
5c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * you may not use this file except in compliance with the License.
6c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * You may obtain a copy of the License at
7c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville *
8c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville *      http://www.apache.org/licenses/LICENSE-2.0
9c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville *
10c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * Unless required by applicable law or agreed to in writing, software
11c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * distributed under the License is distributed on an "AS IS" BASIS,
12c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * See the License for the specific language governing permissions and
14c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * limitations under the License.
15c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville */
16c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
17d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkapackage com.android.internal.telephony.uicc;
18d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenka
19c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville/**
20c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * See also RIL_CardStatus in include/telephony/ril.h
21c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville *
22c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * {@hide}
23c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville */
24c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savillepublic class IccCardStatus {
25c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public static final int CARD_MAX_APPS = 8;
26c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
27c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public enum CardState {
28c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        CARDSTATE_ABSENT,
29c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        CARDSTATE_PRESENT,
30c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        CARDSTATE_ERROR;
31c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
32c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        boolean isCardPresent() {
33c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            return this == CARDSTATE_PRESENT;
34c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
35c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
36c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
37c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public enum PinState {
38c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        PINSTATE_UNKNOWN,
39c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        PINSTATE_ENABLED_NOT_VERIFIED,
40c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        PINSTATE_ENABLED_VERIFIED,
41c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        PINSTATE_DISABLED,
42c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        PINSTATE_ENABLED_BLOCKED,
43c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        PINSTATE_ENABLED_PERM_BLOCKED;
44c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
45c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        boolean isPermBlocked() {
46c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            return this == PINSTATE_ENABLED_PERM_BLOCKED;
47c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
48c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
49c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        boolean isPinRequired() {
50c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            return this == PINSTATE_ENABLED_NOT_VERIFIED;
51c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
52c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
53c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        boolean isPukRequired() {
54c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            return this == PINSTATE_ENABLED_BLOCKED;
55c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
56c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
57c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
58e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka    public CardState  mCardState;
59e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka    public PinState   mUniversalPinState;
60e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka    public int        mGsmUmtsSubscriptionAppIndex;
61e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka    public int        mCdmaSubscriptionAppIndex;
62e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka    public int        mImsSubscriptionAppIndex;
63e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka
64e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka    public IccCardApplicationStatus[] mApplications;
65c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
66c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void setCardState(int state) {
67c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        switch(state) {
68c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        case 0:
69c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            mCardState = CardState.CARDSTATE_ABSENT;
70c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            break;
71c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        case 1:
72c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            mCardState = CardState.CARDSTATE_PRESENT;
73c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            break;
74c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        case 2:
75c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            mCardState = CardState.CARDSTATE_ERROR;
76c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            break;
77c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        default:
78c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            throw new RuntimeException("Unrecognized RIL_CardState: " + state);
79c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
80c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
81c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
82c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void setUniversalPinState(int state) {
83c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        switch(state) {
84c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        case 0:
85c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            mUniversalPinState = PinState.PINSTATE_UNKNOWN;
86c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            break;
87c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        case 1:
88c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            mUniversalPinState = PinState.PINSTATE_ENABLED_NOT_VERIFIED;
89c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            break;
90c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        case 2:
91c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            mUniversalPinState = PinState.PINSTATE_ENABLED_VERIFIED;
92c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            break;
93c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        case 3:
94c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            mUniversalPinState = PinState.PINSTATE_DISABLED;
95c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            break;
96c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        case 4:
97c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            mUniversalPinState = PinState.PINSTATE_ENABLED_BLOCKED;
98c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            break;
99c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        case 5:
100c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            mUniversalPinState = PinState.PINSTATE_ENABLED_PERM_BLOCKED;
101c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            break;
102c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        default:
103c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            throw new RuntimeException("Unrecognized RIL_PinState: " + state);
104c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
105c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
106c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
107c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override
108c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public String toString() {
109e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        IccCardApplicationStatus app;
110c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
111c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        StringBuilder sb = new StringBuilder();
112c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        sb.append("IccCardState {").append(mCardState).append(",")
113c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        .append(mUniversalPinState)
114e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        .append(",num_apps=").append(mApplications.length)
115c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        .append(",gsm_id=").append(mGsmUmtsSubscriptionAppIndex);
116c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (mGsmUmtsSubscriptionAppIndex >=0
117c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                && mGsmUmtsSubscriptionAppIndex <CARD_MAX_APPS) {
118e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            app = mApplications[mGsmUmtsSubscriptionAppIndex];
119c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            sb.append(app == null ? "null" : app);
120c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
121c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
12264ec418c6bbf031a69f4948a115261bd1c5663ecGao Rong        sb.append(",cdma_id=").append(mCdmaSubscriptionAppIndex);
123c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (mCdmaSubscriptionAppIndex >=0
124c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                && mCdmaSubscriptionAppIndex <CARD_MAX_APPS) {
125e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            app = mApplications[mCdmaSubscriptionAppIndex];
126c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            sb.append(app == null ? "null" : app);
127c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
128c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
129e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        sb.append(",ims_id=").append(mImsSubscriptionAppIndex);
130e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        if (mImsSubscriptionAppIndex >=0
131e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka                && mImsSubscriptionAppIndex <CARD_MAX_APPS) {
132e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            app = mApplications[mImsSubscriptionAppIndex];
133e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka            sb.append(app == null ? "null" : app);
134e287feac673ff68565b766e0e463d105fa9cef9dAlex Yakavenka        }
135c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
136c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        sb.append("}");
137c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
138c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        return sb.toString();
139c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
140c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
141c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville}
142