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

Commit c940d1ae authored by Meng Wang's avatar Meng Wang Committed by Automerger Merge Worker
Browse files

Merge "5G opportunistic data config per-band." am: 93a4ac70 am: 110cf088...

Merge "5G opportunistic data config per-band." am: 93a4ac70 am: 110cf088 am: 38673302 am: d6ffc3b8

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1957308

Change-Id: Ic753a57505b151438a60cec0a873b881d4769d42
parents bf110e32 d6ffc3b8
Loading
Loading
Loading
Loading
+229 −105
Original line number Diff line number Diff line
@@ -3957,101 +3957,242 @@ public class CarrierConfigManager {
    public static final String KEY_OPPORTUNISTIC_NETWORK_MAX_BACKOFF_TIME_LONG =
            "opportunistic_network_max_backoff_time_long";

    /** @hide */
    public static class OpportunisticNetwork {
        /**
         * Prefix of all {@code OpportunisticNetwork.KEY_*} constants.
         *
         * @hide
         */
        public static final String PREFIX = "opportunistic.";

        /**
         * Controls SS-RSRP threshold in dBm at which 5G opportunistic network will be considered
         * good enough for internet data. Note other factors may be considered for the final
         * decision.
         *
         * <p>The value of {@link CellSignalStrengthNr#getSsRsrp} will be compared with this
         * threshold.
         *
         * @hide
         */
        public static final String KEY_ENTRY_THRESHOLD_SS_RSRP_INT =
                PREFIX + "entry_threshold_ss_rsrp_int";

        /**
         * Similar to {@link #KEY_ENTRY_THRESHOLD_SS_RSRP_INT} but supports different
         * thresholds for different 5G bands. For bands not specified here, the threshold
         * will be {@link #KEY_ENTRY_THRESHOLD_SS_RSRP_INT}.
         *
         * <p>For each key-value in the bundle: the key is the band number in string, which
         * shall be a decimal integer as defined in {@code NgranBands.BAND_*} constants;
         * the value is the threshold in int.
         *
         * @hide
         */
        public static final String KEY_ENTRY_THRESHOLD_SS_RSRP_INT_BUNDLE =
                PREFIX + "entry_threshold_ss_rsrp_int_bundle";

        /**
    * Controls SS-RSRP threshold in dBm at which 5G opportunistic network will be considered good
    * enough for internet data.
         * Controls SS-RSRQ threshold in dB at which 5G opportunistic network will be considered
         * good enough for internet data. Note other factors may be considered for the final
         * decision.
         *
         * <p>The value of {@link CellSignalStrengthNr#getSsRsrq} will be compared with this
         * threshold.
         *
         * @hide
         */
    public static final String KEY_OPPORTUNISTIC_NETWORK_ENTRY_THRESHOLD_SS_RSRP_INT =
            "opportunistic_network_entry_threshold_ss_rsrp_int";
        public static final String KEY_ENTRY_THRESHOLD_SS_RSRQ_DOUBLE =
                PREFIX + "entry_threshold_ss_rsrq_double";

        /**
    * Controls SS-RSRQ threshold in dB at which 5G opportunistic network will be considered good
    * enough for internet data.
         * Similar to {@link #KEY_ENTRY_THRESHOLD_SS_RSRQ_DOUBLE} but supports different
         * thresholds for different 5G bands. For bands not specified here, the threshold
         * will be {@link #KEY_ENTRY_THRESHOLD_SS_RSRQ_DOUBLE}.
         *
         * <p>For each key-value in the bundle: the key is the band number in string, which
         * shall be a decimal integer as defined in {@code NgranBands.BAND_*} constants;
         * the value is the threshold in double.
         *
         * @hide
         */
    public static final String KEY_OPPORTUNISTIC_NETWORK_ENTRY_THRESHOLD_SS_RSRQ_DOUBLE =
            "opportunistic_network_entry_threshold_ss_rsrq_double";
        public static final String KEY_ENTRY_THRESHOLD_SS_RSRQ_DOUBLE_BUNDLE =
                PREFIX + "entry_threshold_ss_rsrq_double_bundle";

        /**
         * Controls SS-RSRP threshold in dBm below which 5G opportunistic network available will not
    * be considered good enough for internet data.
         * be considered good enough for internet data. Note other factors may be considered
         * for the final decision.
         *
         * @hide
         */
    public static final String KEY_OPPORTUNISTIC_NETWORK_EXIT_THRESHOLD_SS_RSRP_INT =
            "opportunistic_network_exit_threshold_ss_rsrp_int";
        public static final String KEY_EXIT_THRESHOLD_SS_RSRP_INT =
                PREFIX + "exit_threshold_ss_rsrp_int";

        /**
         * Similar to {@link #KEY_EXIT_THRESHOLD_SS_RSRP_INT} but supports different
         * thresholds for different 5G bands. For bands not specified here, the threshold
         * will be {@link #KEY_EXIT_THRESHOLD_SS_RSRP_INT}.
         *
         * <p>The syntax of its value is similar to
         * {@link #KEY_ENTRY_THRESHOLD_SS_RSRP_INT_BUNDLE}.
         *
         * @hide
         */
        public static final String KEY_EXIT_THRESHOLD_SS_RSRP_INT_BUNDLE =
                PREFIX + "exit_threshold_ss_rsrp_int_bundle";

        /**
         * Controls SS-RSRQ threshold in dB below which 5G opportunistic network available will not
    * be considered good enough for internet data.
         * be considered good enough for internet data. Note other factors may be considered
         * for the final decision.
         *
         * @hide
         */
        public static final String KEY_EXIT_THRESHOLD_SS_RSRQ_DOUBLE =
                PREFIX + "exit_threshold_ss_rsrq_double";

        /**
         * Similar to {@link #KEY_EXIT_THRESHOLD_SS_RSRQ_DOUBLE} but supports different
         * thresholds for different 5G bands. For bands not specified here, the threshold
         * will be {@link #KEY_EXIT_THRESHOLD_SS_RSRQ_DOUBLE}.
         *
         * <p>The syntax of its value is similar to
         * {@link #KEY_ENTRY_THRESHOLD_SS_RSRQ_DOUBLE_BUNDLE}.
         *
         * @hide
         */
        public static final String KEY_EXIT_THRESHOLD_SS_RSRQ_DOUBLE_BUNDLE =
                PREFIX + "exit_threshold_ss_rsrq_double_bundle";

        /**
         * Controls hysteresis time in milliseconds for which will be waited before switching
         * data to a 5G opportunistic network.
         *
         * @hide
         */
        public static final String KEY_5G_DATA_SWITCH_HYSTERESIS_TIME_LONG =
                PREFIX + "5g_data_switch_hysteresis_time_long";

        /**
         * Similar to {@link #KEY_5G_DATA_SWITCH_HYSTERESIS_TIME_LONG} but supports
         * different values for different 5G bands. For bands not specified here, the threshold
         * will be {@link #KEY_5G_DATA_SWITCH_HYSTERESIS_TIME_LONG}.
         *
         * <p>For each key-value in the bundle: the key is the band number in string, which
         * shall be a decimal integer as defined in {@code NgranBands.BAND_*} constants;
         * the value is the time in long.
         *
         * @hide
         */
        public static final String KEY_5G_DATA_SWITCH_HYSTERESIS_TIME_LONG_BUNDLE =
                PREFIX + "5g_data_switch_hysteresis_time_long_bundle";

        /**
         * Controls hysteresis time in milliseconds for which will be waited before switching from
         * 5G opportunistic network to primary network.
         *
         * @hide
         */
        public static final String KEY_5G_DATA_SWITCH_EXIT_HYSTERESIS_TIME_LONG =
                PREFIX + "5g_data_switch_exit_hysteresis_time_long";

        /**
         * Similar to {@link #KEY_5G_DATA_SWITCH_EXIT_HYSTERESIS_TIME_LONG} but supports
         * different values for different 5G bands. For bands not specified here, the threshold
         * will be {@link #KEY_5G_DATA_SWITCH_EXIT_HYSTERESIS_TIME_LONG}.
         *
         * <p>The syntax is similar to
         * {@link KEY_5G_DATA_SWITCH_HYSTERESIS_TIME_LONG_BUNDLE}.
         *
         * @hide
         */
    public static final String KEY_OPPORTUNISTIC_NETWORK_EXIT_THRESHOLD_SS_RSRQ_DOUBLE =
            "opportunistic_network_exit_threshold_ss_rsrq_double";
        public static final String KEY_5G_DATA_SWITCH_EXIT_HYSTERESIS_TIME_LONG_BUNDLE =
                PREFIX + "5g_data_switch_exit_hysteresis_time_long_bundle";

        /**
         * Controls back off time in milliseconds for switching back to
         * 5G opportunistic subscription. This time will be added to
     * {@link CarrierConfigManager#KEY_OPPORTUNISTIC_NETWORK_5G_DATA_SWITCH_HYSTERESIS_TIME_LONG} to
         * {@link #KEY_5G_DATA_SWITCH_HYSTERESIS_TIME_LONG} to
         * determine hysteresis time if there is ping pong situation
         * (determined by system app or 1st party app) between primary and 5G opportunistic
         * subscription. Ping ping situation is defined in
     * #KEY_OPPORTUNISTIC_NETWORK_5G_PING_PONG_TIME_LONG.
     * If ping pong situation continuous #KEY_OPPORTUNISTIC_5G_NETWORK_BACKOFF_TIME_LONG
         * {@link #KEY_5G_PING_PONG_TIME_LONG}.
         * If ping pong situation continuous {@link #KEY_5G_NETWORK_BACKOFF_TIME_LONG}
         * will be added to previously determined hysteresis time.
         *
         * @hide
         */
    public static final String KEY_OPPORTUNISTIC_NETWORK_5G_BACKOFF_TIME_LONG =
            "opportunistic_network_5g_backoff_time_long";
        public static final String KEY_5G_BACKOFF_TIME_LONG =
                PREFIX + "5g_backoff_time_long";

        /**
         * Controls the max back off time in milliseconds for switching back to
         * 5G opportunistic subscription.
         * This time will be the max hysteresis that can be determined irrespective of there is
         * continuous ping pong situation or not as described in
     * #KEY_OPPORTUNISTIC_NETWORK_5G_PING_PONG_TIME_LONG and
     * #KEY_OPPORTUNISTIC_NETWORK_5G_BACKOFF_TIME_LONG.
         * {@link #KEY_5G_PING_PONG_TIME_LONG} and
         * {@link #KEY_5G_BACKOFF_TIME_LONG}.
         *
         * @hide
         */
    public static final String KEY_OPPORTUNISTIC_NETWORK_5G_MAX_BACKOFF_TIME_LONG =
            "opportunistic_network_5g_max_backoff_time_long";
        public static final String KEY_5G_MAX_BACKOFF_TIME_LONG =
                PREFIX + "5g_max_backoff_time_long";

        /**
         * Controls the ping pong determination of 5G opportunistic network.
         * If opportunistic network is determined as out of service or below
    * #KEY_OPPORTUNISTIC_NETWORK_EXIT_THRESHOLD_SS_RSRP_INT or
    * #KEY_OPPORTUNISTIC_NETWORK_EXIT_THRESHOLD_SS_RSRQ_INT within
    * #KEY_OPPORTUNISTIC_NETWORK_5G_PING_PONG_TIME_LONG of switching to opportunistic network,
         * {@link #KEY_EXIT_THRESHOLD_SS_RSRP_INT} or
         * {@link #KEY_EXIT_THRESHOLD_SS_RSRQ_DOUBLE} within
         * {@link #KEY_5G_PING_PONG_TIME_LONG} of switching to opportunistic network,
         * it will be determined as ping pong situation by system app or 1st party app.
         *
         * @hide
         */
    public static final String KEY_OPPORTUNISTIC_NETWORK_5G_PING_PONG_TIME_LONG =
            "opportunistic_network_5g_ping_pong_time_long";
        public static final String KEY_5G_PING_PONG_TIME_LONG =
                PREFIX + "5g_ping_pong_time_long";

    /**
     * Controls hysteresis time in milliseconds for which will be waited before switching
     * data to a 5G opportunistic network.
     *
     * @hide
     */
    public static final String KEY_OPPORTUNISTIC_NETWORK_5G_DATA_SWITCH_HYSTERESIS_TIME_LONG =
            "opportunistic_network_5g_data_switch_hysteresis_time_long";
        private static PersistableBundle getDefaults() {
            PersistableBundle defaults = new PersistableBundle();
            // Default value is -111 dBm for all bands.
            sDefaults.putInt(KEY_ENTRY_THRESHOLD_SS_RSRP_INT, -111);
            sDefaults.putPersistableBundle(KEY_ENTRY_THRESHOLD_SS_RSRP_INT_BUNDLE,
                                           PersistableBundle.EMPTY);
            // Default value is -18.5 dB for all bands.
            sDefaults.putDouble(KEY_ENTRY_THRESHOLD_SS_RSRQ_DOUBLE, -18.5);
            sDefaults.putPersistableBundle(
                    KEY_ENTRY_THRESHOLD_SS_RSRQ_DOUBLE_BUNDLE,
                    PersistableBundle.EMPTY);
            // Default value is -120 dBm for all bands.
            sDefaults.putInt(KEY_EXIT_THRESHOLD_SS_RSRP_INT, -120);
            sDefaults.putPersistableBundle(KEY_EXIT_THRESHOLD_SS_RSRP_INT_BUNDLE,
                                           PersistableBundle.EMPTY);
            // Default value is -18.5 dB for all bands.
            sDefaults.putDouble(KEY_EXIT_THRESHOLD_SS_RSRQ_DOUBLE, -18.5);
            sDefaults.putPersistableBundle(
                    KEY_EXIT_THRESHOLD_SS_RSRQ_DOUBLE_BUNDLE,
                    PersistableBundle.EMPTY);
            // Default value is 2 seconds for all bands.
            defaults.putLong(KEY_5G_DATA_SWITCH_HYSTERESIS_TIME_LONG, 2000);
            defaults.putPersistableBundle(
                    KEY_5G_DATA_SWITCH_HYSTERESIS_TIME_LONG_BUNDLE,
                    PersistableBundle.EMPTY);
            // Default value is 2 seconds for all bands.
            defaults.putLong(KEY_5G_DATA_SWITCH_EXIT_HYSTERESIS_TIME_LONG, 2000);
            defaults.putPersistableBundle(
                    KEY_5G_DATA_SWITCH_EXIT_HYSTERESIS_TIME_LONG_BUNDLE,
                    PersistableBundle.EMPTY);
            // Default value is 10 seconds.
            sDefaults.putLong(KEY_5G_BACKOFF_TIME_LONG, 10000);
            // Default value is 60 seconds.
            sDefaults.putLong(KEY_5G_MAX_BACKOFF_TIME_LONG, 60000);
            // Default value is 60 seconds.
            sDefaults.putLong(KEY_5G_PING_PONG_TIME_LONG, 60000);
            return defaults;
        }
    }

    /**
     * Controls hysteresis time in milliseconds for which will be waited before switching from
     * 5G opportunistic network to primary network.
     *
     * @hide
     */
    public static final String KEY_OPPORTUNISTIC_NETWORK_5G_DATA_SWITCH_EXIT_HYSTERESIS_TIME_LONG =
            "opportunistic_network_5g_data_switch_exit_hysteresis_time_long";
    /**
     * Controls whether 4G opportunistic networks should be scanned for possible data switch.
     *
@@ -8865,6 +9006,7 @@ public class CarrierConfigManager {
        sDefaults.putLong(KEY_OPPORTUNISTIC_NETWORK_DATA_SWITCH_HYSTERESIS_TIME_LONG, 10000);
        /* Default value is 3 seconds. */
        sDefaults.putLong(KEY_OPPORTUNISTIC_NETWORK_DATA_SWITCH_EXIT_HYSTERESIS_TIME_LONG, 3000);
        sDefaults.putAll(OpportunisticNetwork.getDefaults());
        sDefaults.putBoolean(KEY_PING_TEST_BEFORE_DATA_SWITCH_BOOL, true);
        sDefaults.putBoolean(KEY_SWITCH_DATA_TO_PRIMARY_IF_PRIMARY_IS_OOS_BOOL, true);
        /* Default value is 60 seconds. */
@@ -8873,24 +9015,6 @@ public class CarrierConfigManager {
        sDefaults.putLong(KEY_OPPORTUNISTIC_NETWORK_BACKOFF_TIME_LONG, 10000);
        /* Default value is 60 seconds. */
        sDefaults.putLong(KEY_OPPORTUNISTIC_NETWORK_MAX_BACKOFF_TIME_LONG, 60000);
        /* Default value is -111 dBm. */
        sDefaults.putInt(KEY_OPPORTUNISTIC_NETWORK_ENTRY_THRESHOLD_SS_RSRP_INT, -111);
        /* Default value is -18.5 dB. */
        sDefaults.putDouble(KEY_OPPORTUNISTIC_NETWORK_ENTRY_THRESHOLD_SS_RSRQ_DOUBLE, -18.5);
        /* Default value is -120 dBm. */
        sDefaults.putInt(KEY_OPPORTUNISTIC_NETWORK_EXIT_THRESHOLD_SS_RSRP_INT, -120);
        /* Default value is -18.5 dB. */
        sDefaults.putDouble(KEY_OPPORTUNISTIC_NETWORK_EXIT_THRESHOLD_SS_RSRQ_DOUBLE, -18.5);
        /* Default value is 10 seconds. */
        sDefaults.putLong(KEY_OPPORTUNISTIC_NETWORK_5G_BACKOFF_TIME_LONG, 10000);
        /* Default value is 60 seconds. */
        sDefaults.putLong(KEY_OPPORTUNISTIC_NETWORK_5G_MAX_BACKOFF_TIME_LONG, 60000);
        /* Default value is 60 seconds. */
        sDefaults.putLong(KEY_OPPORTUNISTIC_NETWORK_5G_PING_PONG_TIME_LONG, 60000);
        /* Default value is 2 seconds. */
        sDefaults.putLong(KEY_OPPORTUNISTIC_NETWORK_5G_DATA_SWITCH_HYSTERESIS_TIME_LONG, 2000);
        /* Default value is 2 seconds. */
        sDefaults.putLong(KEY_OPPORTUNISTIC_NETWORK_5G_DATA_SWITCH_EXIT_HYSTERESIS_TIME_LONG, 2000);
        sDefaults.putBoolean(KEY_ENABLE_4G_OPPORTUNISTIC_NETWORK_SCAN_BOOL, true);
        sDefaults.putLong(KEY_TIME_TO_SWITCH_BACK_TO_PRIMARY_IF_OPPORTUNISTIC_OOS_LONG, 60000L);
        sDefaults.putLong(