script-astra/Android/Sdk/sources/android-35/com/android/internal/telephony/MessagingIndication.java
localadmin 4380f00a78 init
2025-01-20 18:15:20 +03:00

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;
}
}