10825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/*
20825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville** Copyright 2007, The Android Open Source Project
30825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville**
40825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville** Licensed under the Apache License, Version 2.0 (the "License");
50825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville** you may not use this file except in compliance with the License.
60825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville** You may obtain a copy of the License at
70825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville**
80825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville**     http://www.apache.org/licenses/LICENSE-2.0
90825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville**
100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville** Unless required by applicable law or agreed to in writing, software
110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville** distributed under the License is distributed on an "AS IS" BASIS,
120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville** See the License for the specific language governing permissions and
140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville** limitations under the License.
150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville*/
160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
170825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepackage com.android.internal.telephony.cdma;
180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
190825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.util.concurrent.atomic.AtomicBoolean;
200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
210825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Message;
22ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Savilleimport android.telephony.Rlog;
230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
240825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.IccPhoneBookInterfaceManager;
25d720945f2be5ea5fe0faf67e67d9ea0e184eba67Alex Yakavenkaimport com.android.internal.telephony.uicc.IccFileHandler;
260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/**
280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * RuimPhoneBookInterfaceManager to provide an inter-process communication to
290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * access ADN-like SIM records.
300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */
310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
330825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepublic class RuimPhoneBookInterfaceManager extends IccPhoneBookInterfaceManager {
34cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    static final String LOG_TAG = "RuimPhoneBookIM";
350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public RuimPhoneBookInterfaceManager(CDMAPhone phone) {
370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        super(phone);
380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        //NOTE service "simphonebook" added by IccSmsInterfaceManagerProxy
390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
41cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public void dispose() {
430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        super.dispose();
440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
46cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected void finalize() {
480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        try {
490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            super.finalize();
500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        } catch (Throwable throwable) {
51ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville            Rlog.e(LOG_TAG, "Error while finalizing:", throwable);
520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
53ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville        if(DBG) Rlog.d(LOG_TAG, "RuimPhoneBookInterfaceManager finalized");
540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
56cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    public int[] getAdnRecordsSize(int efid) {
580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        if (DBG) logd("getAdnRecordsSize: efid=" + efid);
590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        synchronized(mLock) {
600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            checkThread();
6122d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            mRecordSize = new int[3];
620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            //Using mBaseHandler, no difference in EVENT_GET_SIZE_DONE handling
640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            AtomicBoolean status = new AtomicBoolean(false);
650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville            Message response = mBaseHandler.obtainMessage(EVENT_GET_SIZE_DONE, status);
660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
6722d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville            IccFileHandler fh = mPhone.getIccFileHandler();
68e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka            //IccFileHandler can be null if there is no icc card present.
69e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka            if (fh != null) {
70e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka                fh.getEFLinearRecordSize(efid, response);
71e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka                waitForResult(status);
72e0e2ebb5a50e580cbe6957dcafb3495a2d0a27f2Alex Yakavenka            }
730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville        }
740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
7522d85a8e3a575a6d01d2c788587971657dfe20c6Wink Saville        return mRecordSize;
760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
78cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected void logd(String msg) {
80ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville        Rlog.d(LOG_TAG, "[RuimPbInterfaceManager] " + msg);
810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
83cbaa45bbf2cab852b6c9c3a887e9f803d4e857eaWink Saville    @Override
840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    protected void loge(String msg) {
85ded9c0af7fa49504c047275ed34c2d3b22bf0c3aWink Saville        Rlog.e(LOG_TAG, "[RuimPbInterfaceManager] " + msg);
860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville    }
870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville}
880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville
89