Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f5a02123 authored by Hakjun Choi's avatar Hakjun Choi Committed by Automerger Merge Worker
Browse files

Add keepAlive message type in send request API for satellite service am: 33294684

parents 2d7437d5 33294684
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.internal.telephony.satellite;

import static android.telephony.SubscriptionManager.DEFAULT_SUBSCRIPTION_ID;
import static android.telephony.satellite.SatelliteManager.DATAGRAM_TYPE_UNKNOWN;
import static android.telephony.satellite.SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE;
import static android.telephony.satellite.SatelliteManager.SATELLITE_MODEM_STATE_CONNECTED;
import static android.telephony.satellite.SatelliteManager.SATELLITE_MODEM_STATE_DATAGRAM_TRANSFERRING;
@@ -74,6 +75,8 @@ public class DatagramController {
    @GuardedBy("mLock")
    private int mSendSubId;
    @GuardedBy("mLock")
    private @SatelliteManager.DatagramType int mDatagramType = DATAGRAM_TYPE_UNKNOWN;
    @GuardedBy("mLock")
    private @SatelliteManager.SatelliteDatagramTransferState int mSendDatagramTransferState =
            SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE;
    @GuardedBy("mLock")
@@ -229,21 +232,23 @@ public class DatagramController {
     * @param sendPendingCount number of datagrams that are currently being sent
     * @param errorCode If datagram transfer failed, the reason for failure.
     */
    public void updateSendStatus(int subId,
    public void updateSendStatus(int subId, @SatelliteManager.DatagramType int datagramType,
            @SatelliteManager.SatelliteDatagramTransferState int datagramTransferState,
            int sendPendingCount, int errorCode) {
        synchronized (mLock) {
            logd("updateSendStatus"
                    + " subId: " + subId
                    + " datagramType: " + datagramType
                    + " datagramTransferState: " + datagramTransferState
                    + " sendPendingCount: " + sendPendingCount + " errorCode: " + errorCode);

            mSendSubId = subId;
            mDatagramType = datagramType;
            mSendDatagramTransferState = datagramTransferState;
            mSendPendingCount = sendPendingCount;
            mSendErrorCode = errorCode;
            notifyDatagramTransferStateChangedToSessionController();
            mPointingAppController.updateSendDatagramTransferState(mSendSubId,
            mPointingAppController.updateSendDatagramTransferState(mSendSubId, mDatagramType,
                    mSendDatagramTransferState, mSendPendingCount, mSendErrorCode);
            retryPollPendingDatagramsInDemoMode();
        }
+29 −18
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.internal.telephony.satellite;

import static android.telephony.satellite.SatelliteManager.DATAGRAM_TYPE_UNKNOWN;
import static android.telephony.satellite.SatelliteManager.SATELLITE_MODEM_STATE_CONNECTED;
import static android.telephony.satellite.SatelliteManager.SATELLITE_RESULT_MODEM_TIMEOUT;
import static android.telephony.satellite.SatelliteManager.SATELLITE_RESULT_NOT_REACHABLE;
@@ -101,6 +102,8 @@ public class DatagramDispatcher extends Handler {
            mPendingNonEmergencyDatagramsMap = new LinkedHashMap<>();

    private long mWaitTimeForDatagramSendingResponse;
    @SatelliteManager.DatagramType
    private int mLastSendRequestDatagramType = DATAGRAM_TYPE_UNKNOWN;

    /**
     * Create the DatagramDispatcher singleton instance.
@@ -268,7 +271,7 @@ public class DatagramDispatcher extends Handler {

                    if (error == SatelliteManager.SATELLITE_RESULT_SUCCESS) {
                        // Update send status for current datagram
                        mDatagramController.updateSendStatus(argument.subId,
                        mDatagramController.updateSendStatus(argument.subId, argument.datagramType,
                                SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_SEND_SUCCESS,
                                getPendingDatagramCount(), error);
                        mControllerMetricsStats.reportOutgoingDatagramSuccessCount(
@@ -281,17 +284,18 @@ public class DatagramDispatcher extends Handler {
                            sendPendingDatagrams();
                        } else {
                            mDatagramController.updateSendStatus(argument.subId,
                                    SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE,
                                    0, SatelliteManager.SATELLITE_RESULT_SUCCESS);
                                    argument.datagramType,
                                    SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE, 0,
                                    SatelliteManager.SATELLITE_RESULT_SUCCESS);
                            // Send response for current datagram
                            argument.callback.accept(error);
                        }
                    } else {
                        // Update send status
                        mDatagramController.updateSendStatus(argument.subId,
                        mDatagramController.updateSendStatus(argument.subId, argument.datagramType,
                                SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_SEND_FAILED,
                                getPendingDatagramCount(), error);
                        mDatagramController.updateSendStatus(argument.subId,
                        mDatagramController.updateSendStatus(argument.subId, argument.datagramType,
                                SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE,
                                0, SatelliteManager.SATELLITE_RESULT_SUCCESS);
                        // Send response for current datagram
@@ -318,7 +322,8 @@ public class DatagramDispatcher extends Handler {
            }

            case EVENT_DATAGRAM_WAIT_FOR_CONNECTED_STATE_TIMED_OUT:
                handleEventDatagramWaitForConnectedStateTimedOut();
                handleEventDatagramWaitForConnectedStateTimedOut(
                        (SendSatelliteDatagramArgument) msg.obj);
                break;

            case EVENT_WAIT_FOR_SIMULATED_POLL_DATAGRAMS_DELAY_TIMED_OUT:
@@ -356,10 +361,10 @@ public class DatagramDispatcher extends Handler {

        long datagramId = mNextDatagramId.getAndUpdate(
                n -> ((n + 1) % DatagramController.MAX_DATAGRAM_ID));

        SendSatelliteDatagramArgument datagramArgs =
                new SendSatelliteDatagramArgument(subId, datagramId, datagramType, datagram,
                        needFullScreenPointingUI, callback);
        mLastSendRequestDatagramType = datagramType;

        synchronized (mLock) {
            // Add datagram to pending datagram map
@@ -371,16 +376,16 @@ public class DatagramDispatcher extends Handler {

            if (mDatagramController.needsWaitingForSatelliteConnected()) {
                logd("sendDatagram: wait for satellite connected");
                mDatagramController.updateSendStatus(subId,
                mDatagramController.updateSendStatus(subId, datagramType,
                        SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_WAITING_TO_CONNECT,
                        getPendingDatagramCount(), SatelliteManager.SATELLITE_RESULT_SUCCESS);
                startDatagramWaitForConnectedStateTimer();
                startDatagramWaitForConnectedStateTimer(datagramArgs);
            } else if (!mSendingDatagramInProgress && mDatagramController.isPollingInIdleState()) {
                // Modem can be busy receiving datagrams, so send datagram only when modem is
                // not busy.
                mSendingDatagramInProgress = true;
                datagramArgs.setDatagramStartTime();
                mDatagramController.updateSendStatus(subId,
                mDatagramController.updateSendStatus(subId, datagramType,
                        SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_SENDING,
                        getPendingDatagramCount(), SatelliteManager.SATELLITE_RESULT_SUCCESS);
                sendRequestAsync(CMD_SEND_SATELLITE_DATAGRAM, datagramArgs, phone);
@@ -508,7 +513,7 @@ public class DatagramDispatcher extends Handler {
                    pendingDatagram.iterator().next().getValue();
            // Sets the trigger time for getting pending datagrams
            datagramArg.setDatagramStartTime();
            mDatagramController.updateSendStatus(datagramArg.subId,
            mDatagramController.updateSendStatus(datagramArg.subId, datagramArg.datagramType,
                    SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_SENDING,
                    getPendingDatagramCount(), SatelliteManager.SATELLITE_RESULT_SUCCESS);
            sendRequestAsync(CMD_SEND_SATELLITE_DATAGRAM, datagramArg, phone);
@@ -630,12 +635,13 @@ public class DatagramDispatcher extends Handler {
        logd("cleanUpResources");
        mSendingDatagramInProgress = false;
        if (getPendingDatagramCount() > 0) {
            mDatagramController.updateSendStatus(
                    SubscriptionManager.DEFAULT_SUBSCRIPTION_ID,
            mDatagramController.updateSendStatus(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID,
                    mLastSendRequestDatagramType,
                    SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_SEND_FAILED,
                    getPendingDatagramCount(), SatelliteManager.SATELLITE_RESULT_REQUEST_ABORTED);
        }
        mDatagramController.updateSendStatus(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID,
                mLastSendRequestDatagramType,
                SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE,
                0, SatelliteManager.SATELLITE_RESULT_SUCCESS);
        abortSendingPendingDatagrams(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID,
@@ -648,15 +654,17 @@ public class DatagramDispatcher extends Handler {
        mIsDemoMode = false;
        mSendSatelliteDatagramRequest = null;
        mIsAligned = false;
        mLastSendRequestDatagramType = DATAGRAM_TYPE_UNKNOWN;
    }

    private void startDatagramWaitForConnectedStateTimer() {
    private void startDatagramWaitForConnectedStateTimer(
            @NonNull SendSatelliteDatagramArgument datagramArgs) {
        if (isDatagramWaitForConnectedStateTimerStarted()) {
            logd("DatagramWaitForConnectedStateTimer is already started");
            return;
        }
        sendMessageDelayed(obtainMessage(
                        EVENT_DATAGRAM_WAIT_FOR_CONNECTED_STATE_TIMED_OUT),
                        EVENT_DATAGRAM_WAIT_FOR_CONNECTED_STATE_TIMED_OUT, datagramArgs),
                mDatagramController.getDatagramWaitTimeForConnectedState());
    }

@@ -695,15 +703,18 @@ public class DatagramDispatcher extends Handler {
        removeMessages(EVENT_WAIT_FOR_DATAGRAM_SENDING_RESPONSE_TIMED_OUT);
    }

    private void handleEventDatagramWaitForConnectedStateTimedOut() {
    private void handleEventDatagramWaitForConnectedStateTimedOut(
            @NonNull SendSatelliteDatagramArgument argument) {
        logw("Timed out to wait for satellite connected before sending datagrams");
        synchronized (mLock) {
            // Update send status
            mDatagramController.updateSendStatus(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID,
                    argument.datagramType,
                    SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_SEND_FAILED,
                    getPendingDatagramCount(),
                    SATELLITE_RESULT_NOT_REACHABLE);
            mDatagramController.updateSendStatus(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID,
                    argument.datagramType,
                    SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE,
                    0, SatelliteManager.SATELLITE_RESULT_SUCCESS);
            abortSendingPendingDatagrams(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID,
@@ -757,10 +768,10 @@ public class DatagramDispatcher extends Handler {
            mSendingDatagramInProgress = false;

            // Update send status
            mDatagramController.updateSendStatus(argument.subId,
            mDatagramController.updateSendStatus(argument.subId, argument.datagramType,
                    SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_SEND_FAILED,
                    getPendingDatagramCount(), SATELLITE_RESULT_MODEM_TIMEOUT);
            mDatagramController.updateSendStatus(argument.subId,
            mDatagramController.updateSendStatus(argument.subId, argument.datagramType,
                    SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE,
                    0, SatelliteManager.SATELLITE_RESULT_SUCCESS);

+11 −6
Original line number Diff line number Diff line
@@ -160,12 +160,14 @@ public class PointingAppController {
    }

    private static final class DatagramTransferStateHandlerRequest {
        public int datagramType;
        public int datagramTransferState;
        public int pendingCount;
        public int errorCode;

        DatagramTransferStateHandlerRequest(int datagramTransferState, int pendingCount,
                int errorCode) {
        DatagramTransferStateHandlerRequest(int datagramType, int datagramTransferState,
                int pendingCount, int errorCode) {
            this.datagramType = datagramType;
            this.datagramTransferState = datagramTransferState;
            this.pendingCount = pendingCount;
            this.errorCode = errorCode;
@@ -232,8 +234,9 @@ public class PointingAppController {
                    List<IBinder> toBeRemoved = new ArrayList<>();
                    mListeners.values().forEach(listener -> {
                        try {
                            listener.onSendDatagramStateChanged(request.datagramTransferState,
                                    request.pendingCount, request.errorCode);
                            listener.onSendDatagramStateChanged(request.datagramType,
                                    request.datagramTransferState, request.pendingCount,
                                    request.errorCode);
                        } catch (RemoteException e) {
                            logd("EVENT_SEND_DATAGRAM_STATE_CHANGED RemoteException: " + e);
                            toBeRemoved.add(listener.asBinder());
@@ -403,10 +406,11 @@ public class PointingAppController {
    }

    public void updateSendDatagramTransferState(int subId,
            @SatelliteManager.DatagramType int datagramType,
            @SatelliteManager.SatelliteDatagramTransferState int datagramTransferState,
            int sendPendingCount, int errorCode) {
        DatagramTransferStateHandlerRequest request = new DatagramTransferStateHandlerRequest(
                datagramTransferState, sendPendingCount, errorCode);
                datagramType, datagramTransferState, sendPendingCount, errorCode);
        SatelliteTransmissionUpdateHandler handler =
                mSatelliteTransmissionUpdateHandlers.get(subId);

@@ -424,7 +428,8 @@ public class PointingAppController {
            @SatelliteManager.SatelliteDatagramTransferState int datagramTransferState,
            int receivePendingCount, int errorCode) {
        DatagramTransferStateHandlerRequest request = new DatagramTransferStateHandlerRequest(
                datagramTransferState, receivePendingCount, errorCode);
                SatelliteManager.DATAGRAM_TYPE_UNKNOWN, datagramTransferState, receivePendingCount,
                errorCode);
        SatelliteTransmissionUpdateHandler handler =
                mSatelliteTransmissionUpdateHandlers.get(subId);

+17 −10
Original line number Diff line number Diff line
@@ -16,7 +16,10 @@

package com.android.internal.telephony.satellite;

import static android.telephony.satellite.SatelliteManager.DATAGRAM_TYPE_KEEP_ALIVE;
import static android.telephony.satellite.SatelliteManager.DATAGRAM_TYPE_LOCATION_SHARING;
import static android.telephony.satellite.SatelliteManager.DATAGRAM_TYPE_SOS_MESSAGE;
import static android.telephony.satellite.SatelliteManager.DATAGRAM_TYPE_UNKNOWN;
import static android.telephony.satellite.SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE;
import static android.telephony.satellite.SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_RECEIVING;
import static android.telephony.satellite.SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_SENDING;
@@ -77,10 +80,10 @@ public class DatagramControllerTest extends TelephonyTest {
                mContext, Looper.myLooper(), mMockPointingAppController);

        // Move both send and receive to IDLE state
        mDatagramControllerUT.updateSendStatus(SUB_ID, SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE,
                0, SATELLITE_RESULT_SUCCESS);
        mDatagramControllerUT.updateReceiveStatus(SUB_ID, SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE,
                0, SATELLITE_RESULT_SUCCESS);
        mDatagramControllerUT.updateSendStatus(SUB_ID, DATAGRAM_TYPE_UNKNOWN,
                SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE, 0, SATELLITE_RESULT_SUCCESS);
        mDatagramControllerUT.updateReceiveStatus(SUB_ID, SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE, 0,
                SATELLITE_RESULT_SUCCESS);
        pushDemoModeSosDatagram();
    }

@@ -92,9 +95,12 @@ public class DatagramControllerTest extends TelephonyTest {

    @Test
    public void testUpdateSendStatus() throws Exception {
        testUpdateSendStatus(true, SATELLITE_DATAGRAM_TRANSFER_STATE_SENDING);
        testUpdateSendStatus(true, SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE);
        testUpdateSendStatus(false, SATELLITE_DATAGRAM_TRANSFER_STATE_SENDING);
        testUpdateSendStatus(true, DATAGRAM_TYPE_SOS_MESSAGE,
                SATELLITE_DATAGRAM_TRANSFER_STATE_SENDING);
        testUpdateSendStatus(true, DATAGRAM_TYPE_LOCATION_SHARING,
                SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE);
        testUpdateSendStatus(false, DATAGRAM_TYPE_KEEP_ALIVE,
                SATELLITE_DATAGRAM_TRANSFER_STATE_SENDING);
    }

    @Test
@@ -110,18 +116,19 @@ public class DatagramControllerTest extends TelephonyTest {
        testSetDeviceAlignedWithSatellite(false);
    }

    private void testUpdateSendStatus(boolean isDemoMode, int sendState) {
    private void testUpdateSendStatus(boolean isDemoMode, int datagramType, int sendState) {
        mDatagramControllerUT.setDemoMode(isDemoMode);
        clearAllInvocations();

        int sendPendingCount = 1;
        int errorCode = SATELLITE_RESULT_SUCCESS;
        mDatagramControllerUT.updateSendStatus(SUB_ID, sendState, sendPendingCount, errorCode);
        mDatagramControllerUT.updateSendStatus(SUB_ID, datagramType, sendState, sendPendingCount,
                errorCode);

        verify(mMockSatelliteSessionController)
                .onDatagramTransferStateChanged(eq(sendState), anyInt());
        verify(mMockPointingAppController).updateSendDatagramTransferState(
                eq(SUB_ID), eq(sendState), eq(sendPendingCount), eq(errorCode));
                eq(SUB_ID), eq(datagramType), eq(sendState), eq(sendPendingCount), eq(errorCode));

        if (isDemoMode) {
            if (sendState == SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE) {
+28 −25

File changed.

Preview size limit exceeded, changes collapsed.

Loading