173 lines
6.8 KiB
Java
173 lines
6.8 KiB
Java
/*
|
|
* Copyright (C) 2021 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package com.android.internal.telephony;
|
|
|
|
import static android.telephony.TelephonyManager.HAL_SERVICE_MESSAGING;
|
|
|
|
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_CDMA_RUIM_SMS_STORAGE_FULL;
|
|
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_RESPONSE_CDMA_NEW_SMS;
|
|
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS;
|
|
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_RESPONSE_NEW_SMS;
|
|
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_RESPONSE_NEW_SMS_ON_SIM;
|
|
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT;
|
|
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_SIM_SMS_STORAGE_FULL;
|
|
|
|
import android.hardware.radio.messaging.IRadioMessagingIndication;
|
|
import android.os.AsyncResult;
|
|
import android.telephony.SmsMessage;
|
|
|
|
import com.android.internal.telephony.uicc.IccUtils;
|
|
|
|
/**
|
|
* Interface declaring unsolicited radio indications for messaging APIs.
|
|
*/
|
|
public class MessagingIndication extends IRadioMessagingIndication.Stub {
|
|
private final RIL mRil;
|
|
|
|
public MessagingIndication(RIL ril) {
|
|
mRil = ril;
|
|
}
|
|
|
|
/**
|
|
* Indicates when new CDMA SMS is received.
|
|
* @param indicationType Type of radio indication
|
|
* @param msg CdmaSmsMessage
|
|
*/
|
|
public void cdmaNewSms(int indicationType,
|
|
android.hardware.radio.messaging.CdmaSmsMessage msg) {
|
|
mRil.processIndication(HAL_SERVICE_MESSAGING, indicationType);
|
|
|
|
if (mRil.isLogOrTrace()) mRil.unsljLog(RIL_UNSOL_RESPONSE_CDMA_NEW_SMS);
|
|
|
|
SmsMessage sms = new SmsMessage(RILUtils.convertHalCdmaSmsMessage(msg));
|
|
if (mRil.mCdmaSmsRegistrant != null) {
|
|
mRil.mCdmaSmsRegistrant.notifyRegistrant(new AsyncResult(null, sms, null));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Indicates that SMS storage on the RUIM is full. Messages cannot be saved on the RUIM until
|
|
* space is freed.
|
|
* @param indicationType Type of radio indication
|
|
*/
|
|
public void cdmaRuimSmsStorageFull(int indicationType) {
|
|
mRil.processIndication(HAL_SERVICE_MESSAGING, indicationType);
|
|
|
|
if (mRil.isLogOrTrace()) mRil.unsljLog(RIL_UNSOL_CDMA_RUIM_SMS_STORAGE_FULL);
|
|
|
|
if (mRil.mIccSmsFullRegistrant != null) {
|
|
mRil.mIccSmsFullRegistrant.notifyRegistrant();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Indicates when new Broadcast SMS is received
|
|
* @param indicationType Type of radio indication
|
|
* @param data If received from GSM network, "data" is byte array of 88 bytes which indicates
|
|
* each page of a CBS Message sent to the MS by the BTS as coded in 3GPP 23.041 Section
|
|
* 9.4.1.2. If received from UMTS network, "data" is byte array of 90 up to 1252 bytes
|
|
* which contain between 1 and 15 CBS Message pages sent as one packet to the MS by the
|
|
* BTS as coded in 3GPP 23.041 Section 9.4.2.2
|
|
*/
|
|
public void newBroadcastSms(int indicationType, byte[] data) {
|
|
mRil.processIndication(HAL_SERVICE_MESSAGING, indicationType);
|
|
|
|
if (mRil.isLogOrTrace()) {
|
|
mRil.unsljLogvRet(
|
|
RIL_UNSOL_RESPONSE_NEW_BROADCAST_SMS, IccUtils.bytesToHexString(data));
|
|
}
|
|
|
|
if (mRil.mGsmBroadcastSmsRegistrant != null) {
|
|
mRil.mGsmBroadcastSmsRegistrant.notifyRegistrant(new AsyncResult(null, data, null));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Indicates when new SMS is received.
|
|
* @param indicationType Type of radio indication
|
|
* @param pdu PDU of SMS-DELIVER represented as byte array.
|
|
* The PDU starts with the SMSC address per TS 27.005 (+CMT:)
|
|
*/
|
|
public void newSms(int indicationType, byte[] pdu) {
|
|
mRil.processIndication(HAL_SERVICE_MESSAGING, indicationType);
|
|
if (mRil.isLogOrTrace()) mRil.unsljLog(RIL_UNSOL_RESPONSE_NEW_SMS);
|
|
|
|
SmsMessageBase smsb = com.android.internal.telephony.gsm.SmsMessage.createFromPdu(pdu);
|
|
if (mRil.mGsmSmsRegistrant != null) {
|
|
mRil.mGsmSmsRegistrant.notifyRegistrant(
|
|
new AsyncResult(null, smsb == null ? null : new SmsMessage(smsb), null));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Indicates when new SMS has been stored on SIM card.
|
|
* @param indicationType Type of radio indication
|
|
* @param recordNumber Record number on the SIM
|
|
*/
|
|
public void newSmsOnSim(int indicationType, int recordNumber) {
|
|
mRil.processIndication(HAL_SERVICE_MESSAGING, indicationType);
|
|
|
|
if (mRil.isLogOrTrace()) mRil.unsljLog(RIL_UNSOL_RESPONSE_NEW_SMS_ON_SIM);
|
|
|
|
if (mRil.mSmsOnSimRegistrant != null) {
|
|
mRil.mSmsOnSimRegistrant.notifyRegistrant(new AsyncResult(null, recordNumber, null));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Indicates when new SMS Status Report is received.
|
|
* @param indicationType Type of radio indication
|
|
* @param pdu PDU of SMS-STATUS-REPORT represented as byte array.
|
|
* The PDU starts with the SMSC address per TS 27.005 (+CMT:)
|
|
*/
|
|
public void newSmsStatusReport(int indicationType, byte[] pdu) {
|
|
mRil.processIndication(HAL_SERVICE_MESSAGING, indicationType);
|
|
|
|
if (mRil.isLogOrTrace()) mRil.unsljLog(RIL_UNSOL_RESPONSE_NEW_SMS_STATUS_REPORT);
|
|
|
|
if (mRil.mSmsStatusRegistrant != null) {
|
|
mRil.mSmsStatusRegistrant.notifyRegistrant(new AsyncResult(null, pdu, null));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Indicates that SMS storage on the SIM is full. Sent when the network attempts to deliver a
|
|
* new SMS message. Messages cannot be saved on the SIM until space is freed. In particular,
|
|
* incoming Class 2 messages must not be stored.
|
|
* @param indicationType Type of radio indication
|
|
*/
|
|
public void simSmsStorageFull(int indicationType) {
|
|
mRil.processIndication(HAL_SERVICE_MESSAGING, indicationType);
|
|
|
|
if (mRil.isLogOrTrace()) mRil.unsljLog(RIL_UNSOL_SIM_SMS_STORAGE_FULL);
|
|
|
|
if (mRil.mIccSmsFullRegistrant != null) {
|
|
mRil.mIccSmsFullRegistrant.notifyRegistrant();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public String getInterfaceHash() {
|
|
return IRadioMessagingIndication.HASH;
|
|
}
|
|
|
|
@Override
|
|
public int getInterfaceVersion() {
|
|
return IRadioMessagingIndication.VERSION;
|
|
}
|
|
}
|