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

Commit 6966f43b authored by Hyosun Kim's avatar Hyosun Kim Committed by Hyosun
Browse files

Add onRegistrationFailure api

Bug: 365634513
Test: atest SatelliteControllerTest
Flag: com.android.internal.telephony.flags.carrier_roaming_nb_iot_ntn

Change-Id: Ie8621a5a31e33f3d052e3ef817f0d270c49e2220
parent bbaac5a7
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -152,6 +152,11 @@ public class RadioOnStateListener {
        public void onEmergencyModeChanged(boolean isEmergency) {
            Rlog.d(TAG, "onEmergencyModeChanged: ignored " + isEmergency);
        }

        @Override
        public void onRegistrationFailure(int causeCode) {
            Rlog.d(TAG, "onRegistrationFailure: causeCode " + causeCode);
        }
    };

    private Callback mCallback; // The callback to notify upon completion.
+54 −0
Original line number Diff line number Diff line
@@ -261,6 +261,7 @@ public class SatelliteController extends Handler {
    protected static final int
            EVENT_WAIT_FOR_UPDATE_SATELLITE_ENABLE_ATTRIBUTES_RESPONSE_TIMED_OUT = 52;
    private static final int EVENT_WAIT_FOR_REPORT_ENTITLED_TO_MERTICS_HYSTERESIS_TIMED_OUT = 53;
    protected static final int EVENT_SATELLITE_REGISTRATION_FAILURE = 54;

    @NonNull private static SatelliteController sInstance;
    @NonNull private final Context mContext;
@@ -341,6 +342,8 @@ public class SatelliteController extends Handler {
            new AtomicBoolean(false);
    private final AtomicBoolean mRegisteredForSatelliteSupportedStateChanged =
            new AtomicBoolean(false);
    private final AtomicBoolean mRegisteredForSatelliteRegistrationFailure =
            new AtomicBoolean(false);
    /**
     * Map key: subId, value: callback to get error code of the provision request.
     */
@@ -369,6 +372,12 @@ public class SatelliteController extends Handler {
     */
    private final ConcurrentHashMap<IBinder, ISatelliteSupportedStateCallback>
            mSatelliteSupportedStateChangedListeners = new ConcurrentHashMap<>();

    /**
     * Map key: binder of the callback, value: callback to satellite registration failure
     */
    private final ConcurrentHashMap<IBinder, ISatelliteModemStateCallback>
            mSatelliteRegistrationFailureListeners = new ConcurrentHashMap<>();
    private final Object mIsSatelliteSupportedLock = new Object();
    @GuardedBy("mIsSatelliteSupportedLock")
    private Boolean mIsSatelliteSupported = null;
@@ -1790,6 +1799,15 @@ public class SatelliteController extends Handler {
                break;
            }

            case EVENT_SATELLITE_REGISTRATION_FAILURE:
                ar = (AsyncResult) msg.obj;
                if (ar.result == null) {
                    loge("EVENT_SATELLITE_REGISTRATION_FAILURE: result is null");
                } else {
                    handleEventSatelliteRegistrationFailure((int) ar.result);
                }
                break;

            default:
                Log.w(TAG, "SatelliteControllerHandler: unexpected message code: " +
                        msg.what);
@@ -2426,6 +2444,10 @@ public class SatelliteController extends Handler {
            plogd("registerForSatelliteModemStateChanged: oemEnabledSatelliteFlag is disabled");
            return SatelliteManager.SATELLITE_RESULT_NOT_SUPPORTED;
        }
        if (mFeatureFlags.carrierRoamingNbIotNtn()) {
            plogd("registerForSatelliteModemStateChanged: add RegistrationFailure Listeners");
            mSatelliteRegistrationFailureListeners.put(callback.asBinder(), callback);
        }
        if (mSatelliteSessionController != null) {
            mSatelliteSessionController.registerForSatelliteModemStateChanged(callback);
        } else {
@@ -2455,6 +2477,10 @@ public class SatelliteController extends Handler {
            ploge("unregisterForModemStateChanged: mSatelliteSessionController"
                    + " is not initialized yet");
        }
        if (mFeatureFlags.carrierRoamingNbIotNtn()) {
            plogd("unregisterForModemStateChanged: remove RegistrationFailure Listeners");
            mSatelliteRegistrationFailureListeners.remove(callback.asBinder());
        }
    }

    /**
@@ -3892,6 +3918,7 @@ public class SatelliteController extends Handler {
            registerForSatelliteModemStateChanged();
            registerForNtnSignalStrengthChanged();
            registerForCapabilitiesChanged();
            registerForSatelliteRegistrationFailure();

            requestIsSatelliteProvisioned(
                    new ResultReceiver(this) {
@@ -3996,6 +4023,16 @@ public class SatelliteController extends Handler {
        }
    }

    private void registerForSatelliteRegistrationFailure() {
        if (mFeatureFlags.carrierRoamingNbIotNtn()) {
            if (!mRegisteredForSatelliteRegistrationFailure.get()) {
                mSatelliteModemInterface.registerForSatelliteRegistrationFailure(this,
                        EVENT_SATELLITE_REGISTRATION_FAILURE, null);
                mRegisteredForSatelliteRegistrationFailure.set(true);
            }
        }
    }

    private void handleEventSatelliteProvisionStateChanged(boolean provisioned) {
        plogd("handleSatelliteProvisionStateChangedEvent: provisioned=" + provisioned);

@@ -6494,6 +6531,23 @@ public class SatelliteController extends Handler {
        }
    }

    private void handleEventSatelliteRegistrationFailure(int causeCode) {
        plogd("handleEventSatelliteRegistrationFailure: " + causeCode);

        List<ISatelliteModemStateCallback> deadCallersList = new ArrayList<>();
        mSatelliteRegistrationFailureListeners.values().forEach(listener -> {
            try {
                listener.onRegistrationFailure(causeCode);
            } catch (RemoteException e) {
                logd("handleEventSatelliteRegistrationFailure RemoteException: " + e);
                deadCallersList.add(listener);
            }
        });
        deadCallersList.forEach(listener -> {
            mSatelliteRegistrationFailureListeners.remove(listener.asBinder());
        });
    }

    /**
     * This API can be used by only CTS to override the cached value for the device overlay config
     * value :
+24 −1
Original line number Diff line number Diff line
@@ -102,6 +102,8 @@ public class SatelliteModemInterface {
            new RegistrantList();
    @NonNull private final RegistrantList mSatelliteSupportedStateChangedRegistrants =
            new RegistrantList();
    @NonNull private final RegistrantList mSatelliteRegistrationFailureRegistrants =
            new RegistrantList();

    private class SatelliteListener extends ISatelliteListener.Stub {

@@ -187,7 +189,7 @@ public class SatelliteModemInterface {

        @Override
        public void onRegistrationFailure(int causeCode) {
            // TO-DO notify registrants
            mSatelliteRegistrationFailureRegistrants.notifyResult(causeCode);
        }

        private boolean notifyResultIfExpectedListener() {
@@ -563,6 +565,27 @@ public class SatelliteModemInterface {
        mSatelliteSupportedStateChangedRegistrants.remove(h);
    }

    /**
     * Registers for the satellite registration failed.
     *
     * @param h Handler for notification message.
     * @param what User-defined message code.
     * @param obj User object.
     */
    public void registerForSatelliteRegistrationFailure(
            @NonNull Handler h, int what, @Nullable Object obj) {
        mSatelliteRegistrationFailureRegistrants.add(h, what, obj);
    }

    /**
     * Unregisters for the satellite registration failed.
     *
     * @param h Handler to be removed from the registrant list.
     */
    public void unregisterForSatelliteRegistrationFailure(@NonNull Handler h) {
        mSatelliteRegistrationFailureRegistrants.remove(h);
    }

    /**
     * Request to enable or disable the satellite service listening mode.
     * Listening mode allows the satellite service to listen for incoming pages.
+57 −0
Original line number Diff line number Diff line
@@ -1636,6 +1636,11 @@ public class SatelliteControllerTest extends TelephonyTest {
            public void onEmergencyModeChanged(boolean isEmergency) {
                logd("onEmergencyModeChanged: emergency=" + isEmergency);
            }

            @Override
            public void onRegistrationFailure(int causeCode) {
                logd("onRegistrationFailure: causeCode=" + causeCode);
            }
        };
        int errorCode = mSatelliteControllerUT.registerForSatelliteModemStateChanged(callback);
        assertEquals(SATELLITE_RESULT_INVALID_TELEPHONY_STATE, errorCode);
@@ -1662,6 +1667,11 @@ public class SatelliteControllerTest extends TelephonyTest {
            public void onEmergencyModeChanged(boolean isEmergency) {
                logd("onEmergencyModeChanged: emergency=" + isEmergency);
            }

            @Override
            public void onRegistrationFailure(int causeCode) {
                logd("onRegistrationFailure: causeCode=" + causeCode);
            }
        };
        mSatelliteControllerUT.unregisterForModemStateChanged(callback);
        verify(mMockSatelliteSessionController, never())
@@ -4189,6 +4199,46 @@ public class SatelliteControllerTest extends TelephonyTest {
        assertFalse(mSatelliteControllerUT.getWwanIsInService(mServiceState));
    }

    @Test
    public void testRegistrationFailureCallback() {
        when(mFeatureFlags.carrierRoamingNbIotNtn()).thenReturn(true);
        Semaphore semaphore = new Semaphore(0);
        final int[] resultErrorCode = new int[1];
        ISatelliteModemStateCallback callback = new ISatelliteModemStateCallback.Stub() {
            @Override
            public void onSatelliteModemStateChanged(int state) {
                logd("onSatelliteModemStateChanged: state=" + state);
            }

            @Override
            public void onEmergencyModeChanged(boolean isEmergency) {
                logd("onEmergencyModeChanged: emergency=" + isEmergency);
            }

            @Override
            public void onRegistrationFailure(int causeCode) {
                logd("onRegistrationFailure: causeCode=" + causeCode);
                resultErrorCode[0] = causeCode;
                semaphore.release();
            }
        };
        resetSatelliteControllerUTToSupportedAndProvisionedState();
        mSatelliteControllerUT.setSatelliteSessionController(mMockSatelliteSessionController);

        int RegisterErrorCode = mSatelliteControllerUT.registerForSatelliteModemStateChanged(
                callback);
        assertEquals(SATELLITE_RESULT_SUCCESS, RegisterErrorCode);
        verify(mMockSatelliteSessionController).registerForSatelliteModemStateChanged(callback);

        int expectedErrorCode = 100;
        mIIntegerConsumerResults.clear();
        sendSatelliteRegistrationFailureEvent(100, null);
        processAllMessages();
        assertTrue(waitForForEvents(
                semaphore, 1, "testRegistrationFailureCallback"));
        assertEquals(expectedErrorCode, resultErrorCode[0]);
    }

    private boolean mProvisionState = false;
    private int mProvisionSateResultCode = -1;
    private Semaphore mProvisionSateSemaphore = new Semaphore(0);
@@ -5109,6 +5159,13 @@ public class SatelliteControllerTest extends TelephonyTest {
        msg.sendToTarget();
    }

    private void sendSatelliteRegistrationFailureEvent(int errorCode, Throwable exception) {
        Message msg = mSatelliteControllerUT.obtainMessage(
                54 /* EVENT_SATELLITE_REGISTRATION_FAILURE */);
        msg.obj = new AsyncResult(null, errorCode, exception);
        msg.sendToTarget();
    }

    private void setRadioPower(boolean on) {
        mSimulatedCommands.setRadioPower(on, false, false, null);
    }
+5 −0
Original line number Diff line number Diff line
@@ -1488,6 +1488,11 @@ public class SatelliteSessionControllerTest extends TelephonyTest {
            }
        }

        @Override
        public void onRegistrationFailure(int causeCode) {
            logd("onRegistrationFailure: causeCode=" + causeCode);
        }

        public boolean waitUntilResultForModemStateChanged() {
            try {
                if (!mSemaphoreForModemStateChanged.tryAcquire(EVENT_PROCESSING_TIME_MILLIS,