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

Commit db317635 authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker
Browse files

Snap for 13396955 from d89720db to 25Q3-release

Change-Id: I9d775ceaa2e4d4bac1c9ba0991978d32172018d5
parents 654ddb5c d89720db
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -330,9 +330,10 @@ public class NetworkIndication extends IRadioNetworkIndication.Stub {
            reportAnomaly(UUID.fromString("f16e5703-6105-4341-9eb3-e68189156eb5"),
                    "Invalid registrationFailed indication");

            mRil.riljLoge("Invalid registrationFailed indication (ci is null)=" + (ci == null)
            mRil.riljLoge("Invalid registrationFailed indication ci =" + ci
                    + " (chosenPlmn is empty)=" + TextUtils.isEmpty(chosenPlmn)
                    + " (is CS/PS)=" + ((domain & NetworkRegistrationInfo.DOMAIN_CS_PS) == 0)
                    + " (domain)=" + domain
                    + " (neither CS/PS)=" + ((domain & NetworkRegistrationInfo.DOMAIN_CS_PS) == 0)
                    + " (only CS/PS)=" + ((domain & ~NetworkRegistrationInfo.DOMAIN_CS_PS) != 0)
                    + " (causeCode)=" + causeCode
                    + " (additionalCauseCode)=" + additionalCauseCode);
+28 −25
Original line number Diff line number Diff line
@@ -83,8 +83,6 @@ public class DatagramController {
    private static final boolean DEBUG = !"user".equals(Build.TYPE);

    /** Variables used to update onSendDatagramStateChanged(). */
    private final Object mLock = new Object();

    private AtomicInteger mSendSubId = new AtomicInteger(0);
    private @SatelliteManager.DatagramType AtomicInteger mDatagramType =
            new AtomicInteger(DATAGRAM_TYPE_UNKNOWN);
@@ -101,9 +99,10 @@ public class DatagramController {
    private AtomicInteger mReceivePendingCount = new AtomicInteger(0);
    private AtomicInteger mReceiveErrorCode =
            new AtomicInteger(SatelliteManager.SATELLITE_RESULT_SUCCESS);
    private final Object mLock = new Object();
    @GuardedBy("mLock")
    private final List<SatelliteDatagram> mDemoModeDatagramList;
    private boolean mIsDemoMode = false;
    private AtomicBoolean mIsDemoMode = new AtomicBoolean(false);
    private AtomicLong mAlignTimeoutDuration = new AtomicLong(SATELLITE_ALIGN_TIMEOUT);
    private AtomicLong mDatagramWaitTimeForConnectedState = new AtomicLong(0);
    private AtomicLong mModemImageSwitchingDuration = new AtomicLong(0);
@@ -154,7 +153,7 @@ public class DatagramController {
     *                              about datagram transfer state changes.
     */
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE)
    public DatagramController(@NonNull Context context, @NonNull Looper  looper,
    protected DatagramController(@NonNull Context context, @NonNull Looper  looper,
            @NonNull FeatureFlags featureFlags,
            @NonNull PointingAppController pointingAppController) {
        mContext = context;
@@ -447,8 +446,8 @@ public class DatagramController {
     * @param isDemoMode {@code true} means demo mode is on, {@code false} otherwise.
     */
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
    public void setDemoMode(boolean isDemoMode) {
        mIsDemoMode = isDemoMode;
    protected void setDemoMode(boolean isDemoMode) {
        mIsDemoMode.set(isDemoMode);
        mDatagramDispatcher.setDemoMode(isDemoMode);
        mDatagramReceiver.setDemoMode(isDemoMode);

@@ -458,13 +457,13 @@ public class DatagramController {
            }
            setDeviceAlignedWithSatellite(false);
        }
        plogd("setDemoMode: mIsDemoMode=" + mIsDemoMode);
        plogd("setDemoMode: mIsDemoMode=" + isDemoMode);
    }

    /** Get the last sent datagram for demo mode */
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
    public SatelliteDatagram popDemoModeDatagram() {
        if (!mIsDemoMode) {
    protected SatelliteDatagram popDemoModeDatagram() {
        if (!mIsDemoMode.get()) {
            return null;
        }

@@ -482,9 +481,9 @@ public class DatagramController {
     * @param datagram datagram The last datagram saved when sendSatelliteDatagramForDemo is called
     */
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
    public void pushDemoModeDatagram(@SatelliteManager.DatagramType int datagramType,
    protected void pushDemoModeDatagram(@SatelliteManager.DatagramType int datagramType,
            SatelliteDatagram datagram) {
        if (mIsDemoMode && SatelliteServiceUtils.isSosMessage(datagramType)) {
        if (mIsDemoMode.get() && SatelliteServiceUtils.isSosMessage(datagramType)) {
            synchronized (mLock) {
                mDemoModeDatagramList.add(datagram);
                plogd("pushDemoModeDatagram size=" + mDemoModeDatagramList.size());
@@ -626,9 +625,8 @@ public class DatagramController {
    }

    private void retryPollPendingDatagramsInDemoMode() {
        synchronized (mLock) {
            if (mIsDemoMode && isSendingInIdleState() && isPollingInIdleState()
                    && !mDemoModeDatagramList.isEmpty()) {
        if (mIsDemoMode.get() && isSendingInIdleState() && isPollingInIdleState()
                && !isDemoModeDatagramListEmpty()) {
            Consumer<Integer> internalCallback = new Consumer<Integer>() {
                @Override
                public void accept(Integer result) {
@@ -642,6 +640,11 @@ public class DatagramController {
                    internalCallback);
        }
    }

    private boolean isDemoModeDatagramListEmpty() {
        synchronized (mLock) {
            return mDemoModeDatagramList.isEmpty();
        }
    }

    /**
+37 −42
Original line number Diff line number Diff line
@@ -83,31 +83,28 @@ public class DatagramDispatcher extends Handler {
    private static final int CMD_SEND_MT_SMS_POLLING_MESSAGE = 11;

    private static final Long TIMEOUT_DATAGRAM_DELAY_IN_DEMO_MODE = TimeUnit.SECONDS.toMillis(10);

    /** All the variables initialized inside the constructor are declared here. */
    @NonNull private static DatagramDispatcher sInstance;
    @NonNull private final Context mContext;
    @NonNull private final DatagramController mDatagramController;
    @NonNull private final ControllerMetricsStats mControllerMetricsStats;
    @NonNull private final SessionMetricsStats mSessionMetricsStats;
    @NonNull private final FeatureFlags mFeatureFlags;
    @Nullable private PersistentLogger mPersistentLogger = null;

    /** All the atomic variables are declared here. */
    private AtomicBoolean mIsDemoMode = new AtomicBoolean(false);
    private AtomicBoolean mIsAligned = new AtomicBoolean(false);
    private DatagramDispatcherHandlerRequest mSendSatelliteDatagramRequest = null;

    private static AtomicLong mNextDatagramId = new AtomicLong(0);

    private AtomicBoolean mShouldSendDatagramToModemInDemoMode = null;

    private final Object mLock = new Object();
    private long mDemoTimeoutDuration = TIMEOUT_DATAGRAM_DELAY_IN_DEMO_MODE;

    private AtomicLong mDemoTimeoutDuration = new AtomicLong(TIMEOUT_DATAGRAM_DELAY_IN_DEMO_MODE);
    /** {@code true} if already sent an emergency datagram during a session */
    @GuardedBy("mLock")
    private boolean mIsEmergencyCommunicationEstablished = false;

    @GuardedBy("mLock")
    private boolean mSendingInProgress;
    private AtomicBoolean mIsEmergencyCommunicationEstablished = new AtomicBoolean(false);
    private AtomicBoolean mSendingInProgress = new AtomicBoolean(false);

    private DatagramDispatcherHandlerRequest mSendSatelliteDatagramRequest = null;
    private final Object mLock = new Object();
    /**
     * Map key: datagramId, value: SendSatelliteDatagramArgument to retry sending emergency
     * datagrams.
@@ -135,7 +132,7 @@ public class DatagramDispatcher extends Handler {
    private long mWaitTimeForDatagramSendingForLastMessageResponse;
    @SatelliteManager.DatagramType
    private int mLastSendRequestDatagramType = DATAGRAM_TYPE_UNKNOWN;
    @Nullable private PersistentLogger mPersistentLogger = null;


    @GuardedBy("mLock")
    private int mModemState = SATELLITE_MODEM_STATE_UNKNOWN;
@@ -196,9 +193,7 @@ public class DatagramDispatcher extends Handler {
        mSessionMetricsStats = SessionMetricsStats.getInstance();
        mPersistentLogger = SatelliteServiceUtils.getPersistentLogger(context);

        synchronized (mLock) {
            mSendingInProgress = false;
        }
        mSendingInProgress.set(false);
        mWaitTimeForDatagramSendingResponse = getWaitForDatagramSendingResponseTimeoutMillis();
        mWaitTimeForDatagramSendingForLastMessageResponse =
                getWaitForDatagramSendingResponseForLastMessageTimeoutMillis();
@@ -324,7 +319,7 @@ public class DatagramDispatcher extends Handler {
                    }

                    stopWaitForDatagramSendingResponseTimer();
                    mSendingInProgress = false;
                    mSendingInProgress.set(false);

                    // Log metrics about the outgoing datagram
                    reportSendDatagramCompleted(argument, error);
@@ -332,7 +327,7 @@ public class DatagramDispatcher extends Handler {
                    if (SatelliteServiceUtils.isSosMessage(argument.datagramType)) {
                        mPendingEmergencyDatagramsMap.remove(argument.datagramId);
                        if (error == SATELLITE_RESULT_SUCCESS) {
                            mIsEmergencyCommunicationEstablished = true;
                            mIsEmergencyCommunicationEstablished.set(true);
                        }
                    } else {
                        mPendingNonEmergencyDatagramsMap.remove(argument.datagramId);
@@ -485,16 +480,16 @@ public class DatagramDispatcher extends Handler {
                        SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_WAITING_TO_CONNECT,
                        getPendingMessagesCount(), SatelliteManager.SATELLITE_RESULT_SUCCESS);
                startDatagramWaitForConnectedStateTimer(datagramArgs.datagramType);
            } else if (!mSendingInProgress && mDatagramController.isPollingInIdleState()) {
            } else if (!mSendingInProgress.get() && mDatagramController.isPollingInIdleState()) {
                // Modem can be busy receiving datagrams, so send datagram only when modem is
                // not busy.
                mSendingInProgress = true;
                mSendingInProgress.set(true);
                mDatagramController.updateSendStatus(subId, datagramType,
                        SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_SENDING,
                        getPendingMessagesCount(), SatelliteManager.SATELLITE_RESULT_SUCCESS);
                sendRequestAsync(CMD_SEND_SATELLITE_DATAGRAM, datagramArgs, phone);
            } else {
                plogd("sendDatagram: mSendingInProgress=" + mSendingInProgress
                plogd("sendDatagram: mSendingInProgress=" + mSendingInProgress.get()
                        + ", isPollingInIdleState=" + mDatagramController.isPollingInIdleState());
            }
        }
@@ -623,9 +618,9 @@ public class DatagramDispatcher extends Handler {

        Phone phone = SatelliteServiceUtils.getPhone();
        Set<Entry<Long, SendSatelliteDatagramArgument>> pendingDatagram = null;
        if (!mSendingInProgress && !mPendingEmergencyDatagramsMap.isEmpty()) {
        if (!mSendingInProgress.get() && !mPendingEmergencyDatagramsMap.isEmpty()) {
            pendingDatagram = mPendingEmergencyDatagramsMap.entrySet();
        } else if (!mSendingInProgress && !mPendingNonEmergencyDatagramsMap.isEmpty()) {
        } else if (!mSendingInProgress.get() && !mPendingNonEmergencyDatagramsMap.isEmpty()) {
            pendingDatagram = mPendingNonEmergencyDatagramsMap.entrySet();
        }

@@ -644,7 +639,7 @@ public class DatagramDispatcher extends Handler {
                return;
            }

            mSendingInProgress = true;
            mSendingInProgress.set(true);
            // Sets the trigger time for getting pending datagrams
            mDatagramController.updateSendStatus(datagramArg.subId, datagramArg.datagramType,
                    SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_SENDING,
@@ -865,8 +860,8 @@ public class DatagramDispatcher extends Handler {
    @GuardedBy("mLock")
    private void cleanUpResources() {
        plogd("cleanUpResources");
        mSendingInProgress = false;
        mIsEmergencyCommunicationEstablished = false;
        mSendingInProgress.set(false);
        mIsEmergencyCommunicationEstablished.set(false);

        int subId = SatelliteController.getInstance().getSelectedSatelliteSubId();
        if (getPendingMessagesCount() > 0) {
@@ -898,10 +893,9 @@ public class DatagramDispatcher extends Handler {
    }

    /** @return {@code true} if already sent an emergency datagram during a session. */
    public boolean isEmergencyCommunicationEstablished() {
        synchronized (mLock) {
            return mIsEmergencyCommunicationEstablished;
        }
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
    protected boolean isEmergencyCommunicationEstablished() {
        return mIsEmergencyCommunicationEstablished.get();
    }

    private void startDatagramWaitForConnectedStateTimer(
@@ -1023,7 +1017,7 @@ public class DatagramDispatcher extends Handler {
            // Ask vendor service to abort all datagram-sending requests
            SatelliteModemInterface.getInstance().abortSendingSatelliteDatagrams(
                    obtainMessage(EVENT_ABORT_SENDING_SATELLITE_DATAGRAMS_DONE, argument));
            mSendingInProgress = false;
            mSendingInProgress.set(false);

            // Update send status
            mDatagramController.updateSendStatus(argument.subId, argument.datagramType,
@@ -1112,7 +1106,7 @@ public class DatagramDispatcher extends Handler {
    }

    long getDemoTimeoutDuration() {
        return mDemoTimeoutDuration;
        return mDemoTimeoutDuration.get();
    }

    /**
@@ -1123,11 +1117,12 @@ public class DatagramDispatcher extends Handler {
            return;
        }
        if (reset) {
            mDemoTimeoutDuration = TIMEOUT_DATAGRAM_DELAY_IN_DEMO_MODE;
            mDemoTimeoutDuration.set(TIMEOUT_DATAGRAM_DELAY_IN_DEMO_MODE);
        } else {
            mDemoTimeoutDuration = timeoutMillis;
            mDemoTimeoutDuration.set(timeoutMillis);
        }
        plogd("setTimeoutDatagramDelayInDemoMode " + mDemoTimeoutDuration + " reset=" + reset);
        plogd("setTimeoutDatagramDelayInDemoMode " + mDemoTimeoutDuration.get()
                + " reset=" + reset);
    }

    /**
@@ -1162,15 +1157,15 @@ public class DatagramDispatcher extends Handler {
                        SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_WAITING_TO_CONNECT,
                        getPendingMessagesCount(), SatelliteManager.SATELLITE_RESULT_SUCCESS);
                startDatagramWaitForConnectedStateTimer(datagramType);
            } else if (!mSendingInProgress && mDatagramController.isPollingInIdleState()) {
                mSendingInProgress = true;
            } else if (!mSendingInProgress.get() && mDatagramController.isPollingInIdleState()) {
                mSendingInProgress.set(true);
                mDatagramController.updateSendStatus(subId, datagramType,
                        SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_SENDING,
                        getPendingMessagesCount(), SatelliteManager.SATELLITE_RESULT_SUCCESS);

                sendMessage(obtainMessage(CMD_SEND_SMS, pendingSms));
            } else {
                plogd("sendSms: mSendingInProgress=" + mSendingInProgress
                plogd("sendSms: mSendingInProgress=" + mSendingInProgress.get()
                        + ", isPollingInIdleState=" + mDatagramController.isPollingInIdleState());
            }
        }
@@ -1187,7 +1182,7 @@ public class DatagramDispatcher extends Handler {

        int subId = SatelliteController.getInstance().getSelectedSatelliteSubId();
        Set<Entry<Long, PendingRequest>> pendingSms = null;
        if (!mSendingInProgress) {
        if (!mSendingInProgress.get()) {
            pendingSms = mPendingSmsMap.entrySet();
        }

@@ -1206,14 +1201,14 @@ public class DatagramDispatcher extends Handler {
                return;
            }

            mSendingInProgress = true;
            mSendingInProgress.set(true);
            mDatagramController.updateSendStatus(subId,
                    datagramType,
                    SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_SENDING,
                    getPendingMessagesCount(), SATELLITE_RESULT_SUCCESS);
            sendMessage(obtainMessage(CMD_SEND_SMS, pendingRequest));
        } else {
            plogd("sendPendingSms: mSendingInProgress=" + mSendingInProgress
            plogd("sendPendingSms: mSendingInProgress=" + mSendingInProgress.get()
                    + " pendingSmsCount=" + getPendingSmsCount());
        }
    }
@@ -1279,7 +1274,7 @@ public class DatagramDispatcher extends Handler {
                return;
            }

            mSendingInProgress = false;
            mSendingInProgress.set(false);
            int datagramType = pendingSms.isMtSmsPolling
                    ? DATAGRAM_TYPE_CHECK_PENDING_INCOMING_SMS  : DATAGRAM_TYPE_SMS;

+66 −5
Original line number Diff line number Diff line
@@ -332,6 +332,8 @@ public class SatelliteController extends Handler {
    private static final int REQUEST_SATELLITE_CAPABILITIES = 71;
    private static final int REQUEST_START_SATELLITE_TRANSMISSION_UPDATES = 72;
    private static final int REQUEST_STOP_SATELLITE_TRANSMISSION_UPDATES = 73;
    private static final int REQUEST_IS_SATELLITE_PROVISIONED = 74;
    private static final int REQUEST_POLL_PENDING_DATAGRAMS = 75;

    @NonNull private static SatelliteController sInstance;
    @NonNull private final Context mContext;
@@ -701,6 +703,7 @@ public class SatelliteController extends Handler {
    private AtomicBoolean mOverrideNtnEligibility;
    private String mDefaultSmsPackageName = "";
    private String mSatelliteGatewayServicePackageName = "";
    private String mOverriddenSatelliteGatewayServicePackageName = "";
    private Boolean mOverriddenDisableSatelliteWhileEnableInProgressSupported = null;

    private final Object mNtnSmsSupportedByMessagesAppLock = new Object();
@@ -2432,6 +2435,30 @@ public class SatelliteController extends Handler {
                break;
            }

            case REQUEST_IS_SATELLITE_PROVISIONED: {
                plogd("REQUEST_IS_SATELLITE_PROVISIONED");
                SomeArgs args = (SomeArgs) msg.obj;
                ResultReceiver result = (ResultReceiver) args.arg1;
                try {
                    handleRequestIsSatelliteProvisioned(result);
                } finally {
                    args.recycle();
                }
                break;
            }

            case REQUEST_POLL_PENDING_DATAGRAMS: {
                plogd("REQUEST_POLL_PENDING_DATAGRAMS");
                SomeArgs args = (SomeArgs) msg.obj;
                IIntegerConsumer callback = (IIntegerConsumer) args.arg1;
                try {
                    handleRequestPollPendingDatagrams(callback);
                } finally {
                    args.recycle();
                }
                break;
            }

            default:
                Log.w(TAG, "SatelliteControllerHandler: unexpected message code: " +
                        msg.what);
@@ -3275,6 +3302,18 @@ public class SatelliteController extends Handler {
     *               request failed.
     */
    public void requestIsSatelliteProvisioned(@NonNull ResultReceiver result) {
        if (mFeatureFlags.satelliteImproveMultiThreadDesign()) {
            SomeArgs args = SomeArgs.obtain();
            args.arg1 = result;
            sendMessage(obtainMessage(REQUEST_IS_SATELLITE_PROVISIONED, args));
            return;
        }

        handleRequestIsSatelliteProvisioned(result);
    }

    private void handleRequestIsSatelliteProvisioned(@NonNull ResultReceiver result) {
        plogd("handleRequestIsSatelliteProvisioned");
        int error = evaluateOemSatelliteRequestAllowed(false);
        if (error != SATELLITE_RESULT_SUCCESS) {
            result.send(error, null);
@@ -3386,6 +3425,18 @@ public class SatelliteController extends Handler {
     * @param callback The callback to get {@link SatelliteManager.SatelliteResult} of the request.
     */
    public void pollPendingDatagrams(@NonNull IIntegerConsumer callback) {
        if (mFeatureFlags.satelliteImproveMultiThreadDesign()) {
            SomeArgs args = SomeArgs.obtain();
            args.arg1 = callback;
            sendMessage(obtainMessage(REQUEST_POLL_PENDING_DATAGRAMS, args));
            return;
        }

        handleRequestPollPendingDatagrams(callback);
    }

    private void handleRequestPollPendingDatagrams(@NonNull IIntegerConsumer callback) {
        plogd("handleRequestPollPendingDatagrams");
        Consumer<Integer> result = FunctionalUtils.ignoreRemoteException(callback::accept);
        int error = evaluateOemSatelliteRequestAllowed(true);
        if (error != SATELLITE_RESULT_SUCCESS) {
@@ -3950,12 +4001,13 @@ public class SatelliteController extends Handler {
        }

        if (servicePackageName == null || servicePackageName.equals("null")) {
            mSatelliteGatewayServicePackageName = getConfigSatelliteGatewayServicePackage();
            mOverriddenSatelliteGatewayServicePackageName = null;
        } else {
            mSatelliteGatewayServicePackageName = servicePackageName;
            mOverriddenSatelliteGatewayServicePackageName = servicePackageName;
        }
        plogd("setSatelliteGatewayServicePackageName: mSatelliteGatewayServicePackageName="
                + mSatelliteGatewayServicePackageName);
        plogd("setSatelliteGatewayServicePackageName: "
                + "mOverriddenSatelliteGatewayServicePackageName="
                + mOverriddenSatelliteGatewayServicePackageName);

        return mSatelliteSessionController.setSatelliteGatewayServicePackageName(
                servicePackageName);
@@ -9116,7 +9168,7 @@ public class SatelliteController extends Handler {
            // Manual Connected
            plogd("isP2PSmsDisallowedOnCarrierRoamingNtn: manual connect");
            if (!isNtnSmsSupportedByMessagesApp()
                    || !isApplicationSupportsP2P(mSatelliteGatewayServicePackageName)) {
                    || !isApplicationSupportsP2P(getSatelliteGatewayServicePackageName())) {
                plogd("isP2PSmsDisallowedOnCarrierRoamingNtn: APKs do not supports P2P");
                return true;
            }
@@ -9125,6 +9177,15 @@ public class SatelliteController extends Handler {
        return false;
    }

    private String getSatelliteGatewayServicePackageName() {
        if (mOverriddenSatelliteGatewayServicePackageName != null) {
            logd("getSatelliteGatewayServicePackageName: return overridden package name"
                    + " for CTS test " + mOverriddenSatelliteGatewayServicePackageName);
            return mOverriddenSatelliteGatewayServicePackageName;
        }
        return mSatelliteGatewayServicePackageName;
    }

    @NonNull
    private int[] getSupportedSatelliteServicesForCarrier(int subId) {
        PersistableBundle config = getPersistableBundle(subId);
+79 −93

File changed.

Preview size limit exceeded, changes collapsed.

Loading