RuimRecords.java revision bb36adde615d3d85fa0fc23935197c6bc6a799ed
1c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville/*
2c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * Copyright (C) 2008 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
17c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savillepackage com.android.internal.telephony.cdma;
18c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
19c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport static com.android.internal.telephony.TelephonyProperties.PROPERTY_ICC_OPERATOR_ISO_COUNTRY;
20c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport static com.android.internal.telephony.TelephonyProperties.PROPERTY_ICC_OPERATOR_NUMERIC;
21c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.content.Context;
22c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.os.AsyncResult;
23c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.os.Handler;
24c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.os.Message;
25c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.os.Registrant;
26c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.os.SystemProperties;
27c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport android.util.Log;
28c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
29c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.AdnRecord;
30c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.AdnRecordCache;
31c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.AdnRecordLoader;
32c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.CommandsInterface;
33c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.IccCardConstants;
34c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.IccRefreshResponse;
35c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.IccCard;
36c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.PhoneBase;
37c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.TelephonyProperties;
38c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.MccTable;
39c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
40c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville// can't be used since VoiceMailConstants is not public
41c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville//import com.android.internal.telephony.gsm.VoiceMailConstants;
42c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.IccException;
43c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.IccRecords;
44c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.IccUtils;
45c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savilleimport com.android.internal.telephony.PhoneProxy;
46c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
47c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
48c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville/**
49c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville * {@hide}
50c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville */
51c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Savillepublic final class RuimRecords extends IccRecords {
52c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    static final String LOG_TAG = "CDMA";
53c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
54c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private static final boolean DBG = true;
55c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private boolean  m_ota_commited=false;
56c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
57c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    // ***** Instance Variables
58c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
59c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private String mImsi;
60c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private String mMyMobileNumber;
61c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private String mMin2Min1;
62c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
63c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private String mPrlVersion;
64c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
65c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    // ***** Event Constants
66c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
67c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private static final int EVENT_RADIO_OFF_OR_NOT_AVAILABLE = 2;
68c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private static final int EVENT_GET_IMSI_DONE = 3;
69c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private static final int EVENT_GET_DEVICE_IDENTITY_DONE = 4;
70c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private static final int EVENT_GET_ICCID_DONE = 5;
71c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private static final int EVENT_GET_CDMA_SUBSCRIPTION_DONE = 10;
72c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private static final int EVENT_UPDATE_DONE = 14;
73c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private static final int EVENT_GET_SST_DONE = 17;
74c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private static final int EVENT_GET_ALL_SMS_DONE = 18;
75c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private static final int EVENT_MARK_SMS_READ_DONE = 19;
76c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
77c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private static final int EVENT_SMS_ON_RUIM = 21;
78c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private static final int EVENT_GET_SMS_DONE = 22;
79c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
80c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private static final int EVENT_RUIM_REFRESH = 31;
81c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
82c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
83c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public RuimRecords(IccCard card, Context c, CommandsInterface ci) {
84c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        super(card, c, ci);
85c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
86c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        adnCache = new AdnRecordCache(mFh);
87c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
88c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        recordsRequested = false;  // No load request is made till SIM ready
89c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
90c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        // recordsToLoad is set to 0 because no requests are made yet
91c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        recordsToLoad = 0;
92c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
93c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        mCi.registerForOffOrNotAvailable(this, EVENT_RADIO_OFF_OR_NOT_AVAILABLE, null);
94c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        // NOTE the EVENT_SMS_ON_RUIM is not registered
95c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        mCi.registerForIccRefresh(this, EVENT_RUIM_REFRESH, null);
96c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
97c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        // Start off by setting empty state
98c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        onRadioOffOrNotAvailable();
99c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
100c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
101c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
102c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override
103c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void dispose() {
104c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (DBG) log("Disposing RuimRecords " + this);
105c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        //Unregister for all events
106c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        mCi.unregisterForOffOrNotAvailable( this);
107c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        mCi.unregisterForIccRefresh(this);
108c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        super.dispose();
109c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
110c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
111c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override
112c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    protected void finalize() {
113c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if(DBG) log("RuimRecords finalized");
114c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
115c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
116c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override
117c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    protected void onRadioOffOrNotAvailable() {
118c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        countVoiceMessages = 0;
119c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        mncLength = UNINITIALIZED;
120c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        iccid = null;
121c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
122c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        adnCache.reset();
123c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
124c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        // Don't clean up PROPERTY_ICC_OPERATOR_ISO_COUNTRY and
125c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        // PROPERTY_ICC_OPERATOR_NUMERIC here. Since not all CDMA
126c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        // devices have RUIM, these properties should keep the original
127c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        // values, e.g. build time settings, when there is no RUIM but
128c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        // set new values when RUIM is available and loaded.
129c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
130c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        // recordsRequested is set to false indicating that the SIM
131c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        // read requests made so far are not valid. This is set to
132c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        // true only when fresh set of read requests are made.
133c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        recordsRequested = false;
134c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
135c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
136c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public String getMdnNumber() {
137c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        return mMyMobileNumber;
138c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
139c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
140c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public String getCdmaMin() {
141c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville         return mMin2Min1;
142c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
143c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
144c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    /** Returns null if RUIM is not yet ready */
145c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public String getPrlVersion() {
146c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        return mPrlVersion;
147c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
148c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
149c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override
150c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void setVoiceMailNumber(String alphaTag, String voiceNumber, Message onComplete){
151c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        // In CDMA this is Operator/OEM dependent
152c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        AsyncResult.forMessage((onComplete)).exception =
153c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                new IccException("setVoiceMailNumber not implemented");
154c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        onComplete.sendToTarget();
155c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        loge("method setVoiceMailNumber is not implemented");
156c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
157c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
158c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    /**
159c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * Called by CCAT Service when REFRESH is received.
160c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * @param fileChanged indicates whether any files changed
161c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * @param fileList if non-null, a list of EF files that changed
162c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     */
163c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override
164c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void onRefresh(boolean fileChanged, int[] fileList) {
165c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (fileChanged) {
166c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            // A future optimization would be to inspect fileList and
167c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            // only reload those files that we care about.  For now,
168c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            // just re-fetch all RUIM records that we cache.
169c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            fetchRuimRecords();
170c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
171c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
172c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
173c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    /**
174c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * Returns the 5 or 6 digit MCC/MNC of the operator that
175c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     *  provided the RUIM card. Returns null of RUIM is not yet ready
176c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     */
177c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public String getRUIMOperatorNumeric() {
178c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (mImsi == null) {
179c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            return null;
180c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
181c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
182c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (mncLength != UNINITIALIZED && mncLength != UNKNOWN) {
183c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            // Length = length of MCC + length of MNC
184c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            // length of mcc = 3 (3GPP2 C.S0005 - Section 2.3)
185c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            return mImsi.substring(0, 3 + mncLength);
186c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
187c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
188c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        // Guess the MNC length based on the MCC if we don't
189c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        // have a valid value in ef[ad]
190c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
191c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        int mcc = Integer.parseInt(mImsi.substring(0,3));
192c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        return mImsi.substring(0, 3 + MccTable.smallestDigitsMccForMnc(mcc));
193c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
194c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
195c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override
196c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void handleMessage(Message msg) {
197c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        AsyncResult ar;
198c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
199c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        byte data[];
200c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
201c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        boolean isRecordLoadResponse = false;
202c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
203bb36adde615d3d85fa0fc23935197c6bc6a799edAlex Yakavenka        if (mDestroyed.get()) {
204c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            loge("Received message " + msg +
205c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    "[" + msg.what + "] while being destroyed. Ignoring.");
206c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            return;
207c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
208c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
209c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        try { switch (msg.what) {
210c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case EVENT_RADIO_OFF_OR_NOT_AVAILABLE:
211c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                onRadioOffOrNotAvailable();
212c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            break;
213c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
214c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case EVENT_GET_DEVICE_IDENTITY_DONE:
215c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                log("Event EVENT_GET_DEVICE_IDENTITY_DONE Received");
216c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            break;
217c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
218c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            /* IO events */
219c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case EVENT_GET_IMSI_DONE:
220c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                isRecordLoadResponse = true;
221c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
222c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                ar = (AsyncResult)msg.obj;
223c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (ar.exception != null) {
224c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    loge("Exception querying IMSI, Exception:" + ar.exception);
225c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    break;
226c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
227c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
228c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                mImsi = (String) ar.result;
229c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
230c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                // IMSI (MCC+MNC+MSIN) is at least 6 digits, but not more
231c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                // than 15 (and usually 15).
232c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (mImsi != null && (mImsi.length() < 6 || mImsi.length() > 15)) {
233c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    loge("invalid IMSI " + mImsi);
234c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    mImsi = null;
235c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
236c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
237c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                log("IMSI: " + mImsi.substring(0, 6) + "xxxxxxxxx");
238c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
239c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                String operatorNumeric = getRUIMOperatorNumeric();
240c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (operatorNumeric != null) {
241c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    if(operatorNumeric.length() <= 6){
242c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                        MccTable.updateMccMncConfiguration(mContext, operatorNumeric);
243c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    }
244c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
245c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            break;
246c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
247c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case EVENT_GET_CDMA_SUBSCRIPTION_DONE:
248c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                ar = (AsyncResult)msg.obj;
249c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                String localTemp[] = (String[])ar.result;
250c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (ar.exception != null) {
251c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    break;
252c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
253c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
254c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                mMyMobileNumber = localTemp[0];
255c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                mMin2Min1 = localTemp[3];
256c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                mPrlVersion = localTemp[4];
257c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
258c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                log("MDN: " + mMyMobileNumber + " MIN: " + mMin2Min1);
259c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
260c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            break;
261c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
262c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case EVENT_GET_ICCID_DONE:
263c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                isRecordLoadResponse = true;
264c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
265c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                ar = (AsyncResult)msg.obj;
266c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                data = (byte[])ar.result;
267c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
268c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (ar.exception != null) {
269c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    break;
270c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
271c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
272c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                iccid = IccUtils.bcdToString(data, 0, data.length);
273c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
274c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                log("iccid: " + iccid);
275c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
276c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            break;
277c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
278c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case EVENT_UPDATE_DONE:
279c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                ar = (AsyncResult)msg.obj;
280c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (ar.exception != null) {
281c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    Log.i(LOG_TAG, "RuimRecords update failed", ar.exception);
282c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
283c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            break;
284c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
285c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case EVENT_GET_ALL_SMS_DONE:
286c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case EVENT_MARK_SMS_READ_DONE:
287c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case EVENT_SMS_ON_RUIM:
288c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case EVENT_GET_SMS_DONE:
289c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                Log.w(LOG_TAG, "Event not supported: " + msg.what);
290c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                break;
291c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
292c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            // TODO: probably EF_CST should be read instead
293c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case EVENT_GET_SST_DONE:
294c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                log("Event EVENT_GET_SST_DONE Received");
295c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            break;
296c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
297c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case EVENT_RUIM_REFRESH:
298c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                isRecordLoadResponse = false;
299c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                ar = (AsyncResult)msg.obj;
300c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (ar.exception == null) {
301c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    handleRuimRefresh((IccRefreshResponse)ar.result);
302c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                }
303c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                break;
304c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
305c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }}catch (RuntimeException exc) {
306c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            // I don't want these exceptions to be fatal
307c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            Log.w(LOG_TAG, "Exception parsing RUIM record", exc);
308c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        } finally {
309c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            // Count up record load responses even if they are fails
310c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            if (isRecordLoadResponse) {
311c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                onRecordLoaded();
312c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            }
313c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
314c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
315c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
316c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override
317c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    protected void onRecordLoaded() {
318c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        // One record loaded successfully or failed, In either case
319c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        // we need to update the recordsToLoad count
320c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        recordsToLoad -= 1;
321bb36adde615d3d85fa0fc23935197c6bc6a799edAlex Yakavenka        if (DBG) log("onRecordLoaded " + recordsToLoad + " requested: " + recordsRequested);
322c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
323c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (recordsToLoad == 0 && recordsRequested == true) {
324c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            onAllRecordsLoaded();
325c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        } else if (recordsToLoad < 0) {
326bb36adde615d3d85fa0fc23935197c6bc6a799edAlex Yakavenka            loge("recordsToLoad <0, programmer error suspected");
327c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            recordsToLoad = 0;
328c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
329c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
330c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
331c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override
332c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    protected void onAllRecordsLoaded() {
333bb36adde615d3d85fa0fc23935197c6bc6a799edAlex Yakavenka        if (DBG) log("record load complete");
334bb36adde615d3d85fa0fc23935197c6bc6a799edAlex Yakavenka
335c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        // Further records that can be inserted are Operator/OEM dependent
336c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
337c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        String operator = getRUIMOperatorNumeric();
338c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        log("RuimRecords: onAllRecordsLoaded set 'gsm.sim.operator.numeric' to operator='" +
339c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                operator + "'");
340c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        SystemProperties.set(PROPERTY_ICC_OPERATOR_NUMERIC, operator);
341c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
342c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (mImsi != null) {
343c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            SystemProperties.set(PROPERTY_ICC_OPERATOR_ISO_COUNTRY,
344c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                    MccTable.countryCodeForMcc(Integer.parseInt(mImsi.substring(0,3))));
345c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
346c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        recordsLoadedRegistrants.notifyRegistrants(
347c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            new AsyncResult(null, null, null));
348c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        mParentCard.broadcastIccStateChangedIntent(
349c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                IccCardConstants.INTENT_VALUE_ICC_LOADED, null);
350c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
351c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
352c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override
353c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void onReady() {
354c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        fetchRuimRecords();
355c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
356c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        mCi.getCDMASubscription(obtainMessage(EVENT_GET_CDMA_SUBSCRIPTION_DONE));
357c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
358c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
359c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
360c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private void fetchRuimRecords() {
361c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        recordsRequested = true;
362c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
363bb36adde615d3d85fa0fc23935197c6bc6a799edAlex Yakavenka        if (DBG) log("fetchRuimRecords " + recordsToLoad);
364c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
365c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        mCi.getIMSI(obtainMessage(EVENT_GET_IMSI_DONE));
366c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        recordsToLoad++;
367c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
368c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        mFh.loadEFTransparent(EF_ICCID,
369c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                obtainMessage(EVENT_GET_ICCID_DONE));
370c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        recordsToLoad++;
371c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
372bb36adde615d3d85fa0fc23935197c6bc6a799edAlex Yakavenka        if (DBG) log("fetchRuimRecords " + recordsToLoad + " requested: " + recordsRequested);
373c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        // Further records that can be inserted are Operator/OEM dependent
374c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
375c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
376c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    /**
377c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * {@inheritDoc}
378c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     *
379c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     * No Display rule for RUIMs yet.
380c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville     */
381c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override
382c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public int getDisplayRule(String plmn) {
383c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        // TODO together with spn
384c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        return 0;
385c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
386c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
387c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override
388c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    public void setVoiceMessageWaiting(int line, int countWaiting) {
389c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (line != 1) {
390c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            // only profile 1 is supported
391c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            return;
392c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
393c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
394c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        // range check
395c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (countWaiting < 0) {
396c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            countWaiting = -1;
397c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        } else if (countWaiting > 0xff) {
398c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            // C.S0015-B v2, 4.5.12
399c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            // range: 0-99
400c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            countWaiting = 0xff;
401c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
402c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        countVoiceMessages = countWaiting;
403c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
404c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        mRecordsEventsRegistrants.notifyResult(EVENT_MWI);
405c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
406c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
407c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    private void handleRuimRefresh(IccRefreshResponse refreshResponse) {
408c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (refreshResponse == null) {
409c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            if (DBG) log("handleRuimRefresh received without input");
410c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            return;
411c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
412c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
413c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        if (refreshResponse.aid != null &&
414c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                !refreshResponse.aid.equals(mParentCard.getAid())) {
415c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            // This is for different app. Ignore.
416c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            return;
417c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
418c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
419c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        switch (refreshResponse.refreshResult) {
420c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case IccRefreshResponse.REFRESH_RESULT_FILE_UPDATE:
421c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (DBG) log("handleRuimRefresh with SIM_REFRESH_FILE_UPDATED");
422c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                adnCache.reset();
423c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                fetchRuimRecords();
424c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                break;
425c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case IccRefreshResponse.REFRESH_RESULT_INIT:
426c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (DBG) log("handleRuimRefresh with SIM_REFRESH_INIT");
427c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                // need to reload all files (that we care about)
428c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                fetchRuimRecords();
429c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                break;
430c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            case IccRefreshResponse.REFRESH_RESULT_RESET:
431c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (DBG) log("handleRuimRefresh with SIM_REFRESH_RESET");
432c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                mCi.setRadioPower(false, null);
433c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                /* Note: no need to call setRadioPower(true).  Assuming the desired
434c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                * radio power state is still ON (as tracked by ServiceStateTracker),
435c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                * ServiceStateTracker will call setRadioPower when it receives the
436c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                * RADIO_STATE_CHANGED notification for the power off.  And if the
437c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                * desired power state has changed in the interim, we don't want to
438c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                * override it with an unconditional power on.
439c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                */
440c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                break;
441c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville            default:
442c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                // unknown refresh operation
443c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                if (DBG) log("handleRuimRefresh with unknown operation");
444c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville                break;
445c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        }
446c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
447c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
448c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override
449c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    protected void log(String s) {
450c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        Log.d(LOG_TAG, "[RuimRecords] " + s);
451c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
452c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville
453c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    @Override
454c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    protected void loge(String s) {
455c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville        Log.e(LOG_TAG, "[RuimRecords] " + s);
456c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville    }
457c38bb60d867c5d61d90b7179a9ed2b2d1848124fWink Saville}
458