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

Commit 5b374f37 authored by Aishwarya Mallampati's avatar Aishwarya Mallampati Committed by Android (Google) Code Review
Browse files

Merge "Add onCarrierRoamingNtnSignalStrengthChanged callback." into main

parents a12e4302 f20ae367
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ import android.telephony.emergency.EmergencyNumber;
import android.telephony.ims.ImsCallSession;
import android.telephony.ims.ImsReasonInfo;
import android.telephony.ims.MediaQualityStatus;
import android.telephony.satellite.NtnSignalStrength;

import com.android.internal.telephony.flags.FeatureFlags;
import com.android.telephony.Rlog;
@@ -348,6 +349,13 @@ public class DefaultPhoneNotifier implements PhoneNotifier {
                sender.getSubId(), availableServices);
    }

    @Override
    public void notifyCarrierRoamingNtnSignalStrengthChanged(Phone sender,
            @NonNull NtnSignalStrength ntnSignalStrength) {
        mTelephonyRegistryMgr.notifyCarrierRoamingNtnSignalStrengthChanged(
                sender.getSubId(), ntnSignalStrength);
    }

    /**
     * Convert the {@link Call.State} enum into the PreciseCallState.PRECISE_CALL_STATE_* constants
     * for the public API.
+13 −0
Original line number Diff line number Diff line
@@ -74,6 +74,7 @@ import android.telephony.emergency.EmergencyNumber;
import android.telephony.ims.RegistrationManager;
import android.telephony.ims.feature.MmTelFeature;
import android.telephony.ims.stub.ImsRegistrationImplBase;
import android.telephony.satellite.NtnSignalStrength;
import android.text.TextUtils;
import android.util.LocalLog;
import android.util.Log;
@@ -5380,6 +5381,18 @@ public abstract class Phone extends Handler implements PhoneInternalInterface {
        mNotifier.notifyCarrierRoamingNtnAvailableServicesChanged(this, availableServices);
    }

    /**
     * Notify external listeners that carrier roaming non-terrestrial network
     * signal strength changed.
     * @param ntnSignalStrength non-terrestrial network signal strength.
     */
    public void notifyCarrierRoamingNtnSignalStrengthChanged(
            @NonNull NtnSignalStrength ntnSignalStrength) {
        logd("notifyCarrierRoamingNtnSignalStrengthChanged: ntnSignalStrength="
                + ntnSignalStrength.getLevel());
        mNotifier.notifyCarrierRoamingNtnSignalStrengthChanged(this, ntnSignalStrength);
    }

    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
        pw.println("Phone: subId=" + getSubId());
        pw.println(" mPhoneId=" + mPhoneId);
+5 −0
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ import android.telephony.TelephonyManager.EmergencyCallbackModeType;
import android.telephony.emergency.EmergencyNumber;
import android.telephony.ims.ImsReasonInfo;
import android.telephony.ims.MediaQualityStatus;
import android.telephony.satellite.NtnSignalStrength;

import java.util.List;
import java.util.Set;
@@ -169,4 +170,8 @@ public interface PhoneNotifier {
    /** Notify carrier roaming non-terrestrial available services changed. */
    void notifyCarrierRoamingNtnAvailableServicesChanged(
            Phone sender, @NetworkRegistrationInfo.ServiceType int[] availableServices);

    /** Notify carrier roaming non-terrestrial network signal strength changed. */
    void notifyCarrierRoamingNtnSignalStrengthChanged(Phone sender,
            @NonNull NtnSignalStrength ntnSignalStrength);
}
+69 −18
Original line number Diff line number Diff line
@@ -291,6 +291,7 @@ public class SatelliteController extends Handler {
    protected static final int EVENT_SATELLITE_REGISTRATION_FAILURE = 54;
    private static final int EVENT_TERRESTRIAL_NETWORK_AVAILABLE_CHANGED = 55;
    private static final int EVENT_SET_NETWORK_SELECTION_AUTO_DONE = 56;
    private static final int EVENT_SIGNAL_STRENGTH_CHANGED = 57;

    @NonNull private static SatelliteController sInstance;
    @NonNull private final Context mContext;
@@ -516,6 +517,10 @@ public class SatelliteController extends Handler {
    @NonNull private final Map<Integer, List<Integer>>
            mSatModeCapabilitiesForCarrierRoaming = new HashMap<>();

    @GuardedBy("mSatelliteConnectedLock")
    private SparseArray<NtnSignalStrength> mLastNotifiedCarrierRoamingNtnSignalStrength =
            new SparseArray<>();

    /**
     * This is used for testing only. When mEnforcedEmergencyCallToSatelliteHandoverType is valid,
     * Telephony will ignore the IMS registration status and cellular availability, and always send
@@ -815,6 +820,7 @@ public class SatelliteController extends Handler {
        registerForPendingDatagramCount();
        registerForSatelliteModemStateChanged();
        registerForServiceStateChanged();
        registerForSignalStrengthChanged();
        mContentResolver = mContext.getContentResolver();
        mCarrierConfigManager = mContext.getSystemService(CarrierConfigManager.class);

@@ -1701,6 +1707,7 @@ public class SatelliteController extends Handler {
                    ploge("EVENT_SATELLITE_MODEM_STATE_CHANGED: result is null");
                } else {
                    handleEventSatelliteModemStateChanged((int) ar.result);
                    updateLastNotifiedCarrierRoamingNtnSignalStrengthAndNotify(getSatellitePhone());
                }
                break;

@@ -1790,6 +1797,7 @@ public class SatelliteController extends Handler {
                    ploge("EVENT_NTN_SIGNAL_STRENGTH_CHANGED: result is null");
                } else {
                    handleEventNtnSignalStrengthChanged((NtnSignalStrength) ar.result);
                    updateLastNotifiedCarrierRoamingNtnSignalStrengthAndNotify(getSatellitePhone());
                }
                break;
            }
@@ -2003,6 +2011,13 @@ public class SatelliteController extends Handler {
                break;
            }

            case EVENT_SIGNAL_STRENGTH_CHANGED: {
                ar = (AsyncResult) msg.obj;
                int phoneId = (int) ar.userObj;
                updateLastNotifiedCarrierRoamingNtnSignalStrengthAndNotify(
                        PhoneFactory.getPhone(phoneId));
            }

            default:
                Log.w(TAG, "SatelliteControllerHandler: unexpected message code: " +
                        msg.what);
@@ -3896,24 +3911,7 @@ public class SatelliteController extends Handler {
     * else {@return false}
     */
    public boolean isInCarrierRoamingNbIotNtn() {
        if (!mFeatureFlags.carrierRoamingNbIotNtn()) {
            plogd("isInCarrierRoamingNbIotNtn: carrier roaming nb iot ntn "
                    + "feature flag is disabled");
            return false;
        }

        if (!isSatelliteEnabled()) {
            plogd("iisInCarrierRoamingNbIotNtn: satellite is disabled");
            return false;
        }

        Phone satellitePhone = getSatellitePhone();
        if (!isCarrierRoamingNtnEligible(satellitePhone)) {
            plogd("isInCarrierRoamingNbIotNtn: not carrier roaming ntn eligible.");
            return false;
        }
        plogd("isInCarrierRoamingNbIotNtn: carrier roaming ntn eligible.");
        return true;
        return isInCarrierRoamingNbIotNtn(getSatellitePhone());
    }

    /**
@@ -5693,6 +5691,13 @@ public class SatelliteController extends Handler {
        }
    }

    private void registerForSignalStrengthChanged() {
        for (Phone phone : PhoneFactory.getPhones()) {
            phone.getSignalStrengthController().registerForSignalStrengthChanged(this,
                    EVENT_SIGNAL_STRENGTH_CHANGED, phone.getPhoneId());
        }
    }

    private void handleEventServiceStateChanged() {
        handleStateChangedForCarrierRoamingNtnEligibility();
        handleServiceStateForSatelliteConnectionViaCarrier();
@@ -5758,6 +5763,7 @@ public class SatelliteController extends Handler {
                    mWasSatelliteConnectedViaCarrier.put(subId, false);
                }
                updateLastNotifiedNtnModeAndNotify(phone);
                updateLastNotifiedCarrierRoamingNtnSignalStrengthAndNotify(phone);
            }
        }
        determineAutoConnectSystemNotification();
@@ -5778,6 +5784,7 @@ public class SatelliteController extends Handler {
                if (!initialized) mInitialized.put(subId, true);
                mLastNotifiedNtnMode.put(subId, currNtnMode);
                phone.notifyCarrierRoamingNtnModeChanged(currNtnMode);
                updateLastNotifiedCarrierRoamingNtnSignalStrengthAndNotify(phone);
                logCarrierRoamingSatelliteSessionStats(phone, lastNotifiedNtnMode, currNtnMode);
                if(mIsNotificationShowing && !currNtnMode) {
                    dismissSatelliteNotification();
@@ -7694,6 +7701,50 @@ public class SatelliteController extends Handler {
        logd("notifyEnabledStateChanged to " + isEnabled);
    }

    private NtnSignalStrength getCarrierRoamingNtnSignalStrength(@NonNull Phone phone) {
        NtnSignalStrength carrierRoamingNtnSignalStrength = new NtnSignalStrength(
                NTN_SIGNAL_STRENGTH_NONE);

        if (isInCarrierRoamingNbIotNtn(phone)) {
            if (mSatelliteSessionController.isInConnectedState()) {
                synchronized (mNtnSignalsStrengthLock) {
                    carrierRoamingNtnSignalStrength = mNtnSignalStrength;
                }
                plogd("getCarrierRoamingNtnSignalStrength[phoneId=" + phone.getPhoneId()
                        + "]: in carrier roaming nb iot ntn mode.");
            }
        } else if (isInSatelliteModeForCarrierRoaming(phone)) {
            ServiceState serviceState = phone.getServiceState();
            if (serviceState.getState() != ServiceState.STATE_OUT_OF_SERVICE) {
                carrierRoamingNtnSignalStrength = new NtnSignalStrength(
                        phone.getSignalStrength().getLevel());
                plogd("getCarrierRoamingNtnSignalStrength[phoneId=" + phone.getPhoneId()
                        + "]: is in satellite mode for carrier roaming.");
            }
        }

        return carrierRoamingNtnSignalStrength;
    }

    private void updateLastNotifiedCarrierRoamingNtnSignalStrengthAndNotify(@Nullable Phone phone) {
        if (!mFeatureFlags.carrierRoamingNbIotNtn()) return;
        if (phone == null) {
            return;
        }

        NtnSignalStrength currSignalStrength = getCarrierRoamingNtnSignalStrength(phone);
        int subId = phone.getSubId();
        synchronized (mSatelliteConnectedLock) {
            NtnSignalStrength lastNotifiedSignalStrength =
                    mLastNotifiedCarrierRoamingNtnSignalStrength.get(subId);
            if (lastNotifiedSignalStrength == null
                    || lastNotifiedSignalStrength.getLevel() != currSignalStrength.getLevel()) {
                mLastNotifiedCarrierRoamingNtnSignalStrength.put(subId, currSignalStrength);
                phone.notifyCarrierRoamingNtnSignalStrengthChanged(currSignalStrength);
            }
        }
    }

    /** Returns whether to send SMS to DatagramDispatcher or not. */
    public boolean shouldSendSmsToDatagramDispatcher(@NonNull Phone phone) {
        if (!isInCarrierRoamingNbIotNtn(phone)) {
+11 −0
Original line number Diff line number Diff line
@@ -592,6 +592,17 @@ public class SatelliteSessionController extends StateMachine {
        return getCurrentState() == mDisablingState;
    }

    /**
     * Get whether state machine is in connected state.
     *
     * @return {@code true} if state machine is in connected state and {@code false} otherwise.
     */
    public boolean isInConnectedState() {
        if (DBG) plogd("isInConnectedState: getCurrentState=" + getCurrentState());
        return getCurrentState() == mConnectedState;
    }


    /**
     * Release all resource.
     */
Loading