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

Commit 9bf36a42 authored by Arun Voddu's avatar Arun Voddu Committed by Android (Google) Code Review
Browse files

Merge "[Satellite] Satellite entitlement results are saved to persistent memory." into main

parents a080ea5b dc00e1c9
Loading
Loading
Loading
Loading
+97 −19
Original line number Diff line number Diff line
@@ -4269,22 +4269,24 @@ public class SatelliteController extends Handler {
     * satellite configuration from the entitlement server. If satellite entitlement is enabled,
     * enable satellite for the carrier. Otherwise, disable satellite.
     *
     * @param subId              subId
     * @param entitlementEnabled {@code true} Satellite service enabled
     * @param allowedPlmnList    plmn allowed list to use the satellite service
     * @param barredPlmnList    plmn barred list to pass the modem
     * @param plmnDataPlanMap   data plan map for the plmn with key as plmn and data plan as value
     *        with possible values {@link SatelliteDataPlan}
     * @param plmnServiceTypeMap available services map for the plmn with key as plmn and service
     *        type as list of integer values with possible values
     *        {@link NetworkRegistrationInfo#ServiceType}
     * @param plmnDataServicePolicyMap data service policy map for the plmn with key as plmn and
     *        data service policy as integer value with possible values
     *        {@link CarrierConfigManager#SATELLITE_DATA_SUPPORT_MODE}
     * @param plmnVoiceServicePolicyMap voice service policy map for the plmn with key as plmn and
     *        voice service policy as integer value with possible values
     *        @link CarrierConfigManager#SATELLITE_DATA_SUPPORT_MODE}
     * @param callback callback for accept
     * @param subId                     Subscription ID
     * @param entitlementEnabled        {@code true} enables Satellite entitlement service.
     * @param allowedPlmnList           Plmn [MCC+MNC] list of codes to determine if satellite
     *                                  communication is allowed. Ex : "123123,12310".
     * @param barredPlmnList            Plmn [MCC+MNC] list of codes to determine if satellite
     *                                  communication is not allowed.  Ex : "123123,12310".
     * @param plmnDataPlanMap           data plan per plmn of type {@link SatelliteDataPlan}.
     *                                  Ex : {"302820":0, "31026":1}.
     * @param plmnServiceTypeMap        list of supported services per plmn of type
     *                                  {@link NetworkRegistrationInfo.ServiceType}).
     *                                  Ex : {"302820":[1,3],"31026":[2,3]}.
     * @param plmnDataServicePolicyMap  data support mode per plmn map of types
     *                                  {@link CarrierConfigManager.SATELLITE_DATA_SUPPORT_MODE}.
     *                                  Ex : {"302820":2, "31026":1}.
     * @param plmnVoiceServicePolicyMap voice support mode per plmn map of types
     *                                  {@link CarrierConfigManager.SATELLITE_DATA_SUPPORT_MODE}.
     *                                  Ex : {"302820":2, "31026":1}.
     * @param callback                  callback for accept.
     */
    public void onSatelliteEntitlementStatusUpdated(int subId, boolean entitlementEnabled,
            @Nullable List<String> allowedPlmnList, @Nullable List<String> barredPlmnList,
@@ -4358,7 +4360,9 @@ public class SatelliteController extends Handler {
                        plmnServiceTypeMap);
                updatePlmnListPerCarrier(subId);
                configureSatellitePlmnForCarrier(subId);
                mSubscriptionManagerService.setSatelliteEntitlementPlmnList(subId, allowedPlmnList);
                mSubscriptionManagerService.setSatelliteEntitlementInfo(subId, allowedPlmnList,
                        barredPlmnList, plmnDataPlanMap, plmnServiceTypeMap,
                        plmnDataServicePolicyMap, plmnVoiceServicePolicyMap);
            } else {
                loge("onSatelliteEntitlementStatusUpdated: either invalid allowedPlmnList "
                        + "or invalid barredPlmnList");
@@ -5529,10 +5533,84 @@ public class SatelliteController extends Handler {
                    plogd("updateEntitlementPlmnListPerCarrier: read empty list");
                    return;
                }
                plogd("updateEntitlementPlmnListPerCarrier: entitlementPlmnList="
                        + String.join(",", entitlementPlmnList));
                plogd("updateEntitlementPlmnListPerCarrier: entitlementPlmnList=" + String.join(",",
                        entitlementPlmnList));
                mEntitlementPlmnListPerCarrier.put(subId, entitlementPlmnList);
            }

            if (mEntitlementBarredPlmnListPerCarrier.indexOfKey(subId) < 0) {
                plogd("updateEntitlementBarredPlmnList: no correspondent cache, load from "
                        + "persist storage");
                List<String> entitlementBarredPlmnList =
                        mSubscriptionManagerService.getSatelliteEntitlementBarredPlmnList(subId);
                if (entitlementBarredPlmnList.isEmpty()) {
                    plogd("updateEntitlementBarredPlmnList: read empty list");
                    return;
                }
                plogd("updateEntitlementBarredPlmnList: entitlementBarredPlmnList=" + String.join(
                        ",", entitlementBarredPlmnList));
                mEntitlementBarredPlmnListPerCarrier.put(subId, entitlementBarredPlmnList);
            }

            if (mEntitlementDataPlanMapPerCarrier.indexOfKey(subId) < 0) {
                plogd("updateEntitlementDataPlanForPlmns: no correspondent cache, load from "
                        + "persist storage");
                Map<String, Integer> entitlementDataPlanForPlmns =
                        mSubscriptionManagerService.getSatelliteEntitlementDataPlanForPlmns(subId);
                if (entitlementDataPlanForPlmns.isEmpty()) {
                    plogd("updateEntitlementBarredPlmnList: read empty list");
                    return;
                }
                plogd("updateEntitlementDataPlanForPlmns: entitlementDataPlanForPlmns="
                        + entitlementDataPlanForPlmns);
                mEntitlementDataPlanMapPerCarrier.put(subId, entitlementDataPlanForPlmns);
            }

            if (mEntitlementServiceTypeMapPerCarrier.indexOfKey(subId) < 0) {
                plogd("updateEntitlementTypeMapPerCarrier: no correspondent cache, load from "
                        + "persist storage");
                Map<String, List<Integer>> entitlementTypeMapPerCarrier =
                        mSubscriptionManagerService.getSatelliteEntitlementPlmnServiceTypeMap(
                                subId);
                if (entitlementTypeMapPerCarrier.isEmpty()) {
                    plogd("updateEntitlementTypeMapPerCarrier: read empty list");
                    return;
                }
                plogd("updateEntitlementTypeMapPerCarrier: entitlementTypeMapPerCarrier="
                        + entitlementTypeMapPerCarrier);
                mEntitlementServiceTypeMapPerCarrier.put(subId, entitlementTypeMapPerCarrier);
            }

            if (mEntitlementDataServicePolicyMapPerCarrier.indexOfKey(subId) < 0) {
                plogd("updateEntitlementDataServicePolicy: no correspondent cache, load from "
                        + "persist storage");
                Map<String, Integer> entitlementDataServicePolicy =
                        mSubscriptionManagerService.getSatelliteEntitlementPlmnDataServicePolicy(
                                subId);
                if (entitlementDataServicePolicy.isEmpty()) {
                    plogd("updateEntitlementDataServicePolicy: read empty list");
                    return;
                }
                plogd("updateEntitlementDataServicePolicy: entitlementDataServicePolicy="
                        + entitlementDataServicePolicy);
                mEntitlementDataServicePolicyMapPerCarrier.put(subId, entitlementDataServicePolicy);
            }

            if (mEntitlementVoiceServicePolicyMapPerCarrier.indexOfKey(subId) < 0) {
                plogd("updateEntitlementVoiceServicePolicy: no correspondent cache, load from "
                        + "persist storage");
                Map<String, Integer> entitlementVoiceServicePolicy =
                        mSubscriptionManagerService.getSatelliteEntitlementPlmnVoiceServicePolicy(
                                subId);
                if (entitlementVoiceServicePolicy.isEmpty()) {
                    plogd("updateEntitlementVoiceServicePolicy: read empty list");
                    return;
                }
                plogd("updateEntitlementVoiceServicePolicy: entitlementVoiceServicePolicy="
                        + entitlementVoiceServicePolicy);
                mEntitlementVoiceServicePolicyMapPerCarrier.put(subId,
                        entitlementVoiceServicePolicy);
            }
        }
    }

+223 −12
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import android.os.Looper;
import android.os.ParcelUuid;
import android.provider.Telephony;
import android.provider.Telephony.SimInfo;
import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.SubscriptionManager.DataRoamingMode;
@@ -49,10 +50,15 @@ import android.util.LocalLog;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.flags.FeatureFlags;
import com.android.internal.telephony.satellite.SatelliteController;
import com.android.internal.telephony.uicc.UiccController;
import com.android.internal.util.function.TriConsumer;
import com.android.telephony.Rlog;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.AbstractMap;
@@ -299,7 +305,22 @@ public class SubscriptionDatabaseManager extends Handler {
                    SubscriptionInfoInternal::getSatelliteESOSSupported),
            new AbstractMap.SimpleImmutableEntry<>(
                    SimInfo.COLUMN_IS_SATELLITE_PROVISIONED_FOR_NON_IP_DATAGRAM,
                    SubscriptionInfoInternal::getIsSatelliteProvisionedForNonIpDatagram)
                    SubscriptionInfoInternal::getIsSatelliteProvisionedForNonIpDatagram),
            new AbstractMap.SimpleImmutableEntry<>(
                    SimInfo.COLUMN_SATELLITE_ENTITLEMENT_BARRED_PLMNS,
                    SubscriptionInfoInternal::getSatelliteEntitlementBarredPlmnsList),
            new AbstractMap.SimpleImmutableEntry<>(
                    SimInfo.COLUMN_SATELLITE_ENTITLEMENT_DATA_PLAN_PLMNS,
                    SubscriptionInfoInternal::getSatelliteEntitlementDataPlanForPlmns),
            new AbstractMap.SimpleImmutableEntry<>(
                    SimInfo.COLUMN_SATELLITE_ENTITLEMENT_SERVICE_TYPE_MAP,
                    SubscriptionInfoInternal::getSatelliteEntitlementPlmnsServiceTypes),
            new AbstractMap.SimpleImmutableEntry<>(
                    SimInfo.COLUMN_SATELLITE_ENTITLEMENT_DATA_SERVICE_POLICY,
                    SubscriptionInfoInternal::getSatellitePlmnsDataServicePolicy),
            new AbstractMap.SimpleImmutableEntry<>(
                    SimInfo.COLUMN_SATELLITE_ENTITLEMENT_VOICE_SERVICE_POLICY,
                    SubscriptionInfoInternal::getSatellitePlmnsVoiceServicePolicy)
    );

    /**
@@ -510,7 +531,22 @@ public class SubscriptionDatabaseManager extends Handler {
                    SubscriptionDatabaseManager::setNumberFromIms),
            new AbstractMap.SimpleImmutableEntry<>(
                    SimInfo.COLUMN_SATELLITE_ENTITLEMENT_PLMNS,
                    SubscriptionDatabaseManager::setSatelliteEntitlementPlmns)
                    SubscriptionDatabaseManager::setSatelliteEntitlementPlmns),
            new AbstractMap.SimpleImmutableEntry<>(
                    SimInfo.COLUMN_SATELLITE_ENTITLEMENT_BARRED_PLMNS,
                    SubscriptionDatabaseManager::setSatelliteEntitlementBarredPlmns),
            new AbstractMap.SimpleImmutableEntry<>(
                    SimInfo.COLUMN_SATELLITE_ENTITLEMENT_DATA_PLAN_PLMNS,
                    SubscriptionDatabaseManager::setSatelliteEntitlementDataPlanForPlmns),
            new AbstractMap.SimpleImmutableEntry<>(
                    SimInfo.COLUMN_SATELLITE_ENTITLEMENT_SERVICE_TYPE_MAP,
                    SubscriptionDatabaseManager::setSatelliteEntitlementPlmnServiceTypeMap),
            new AbstractMap.SimpleImmutableEntry<>(
                    SimInfo.COLUMN_SATELLITE_ENTITLEMENT_DATA_SERVICE_POLICY,
                    SubscriptionDatabaseManager::setSatelliteEntitlementPlmnDataServicePolicy),
            new AbstractMap.SimpleImmutableEntry<>(
                    SimInfo.COLUMN_SATELLITE_ENTITLEMENT_VOICE_SERVICE_POLICY,
                    SubscriptionDatabaseManager::setSatelliteEntitlementPlmnVoiceServicePolicy)
    );

    /**
@@ -2154,17 +2190,56 @@ public class SubscriptionDatabaseManager extends Handler {
    }

    /**
     * Set satellite entitlement plmn list by entitlement query result.
     *
     * @param subId Subscription id.
     * @param satelliteEntitlementPlmnList Satellite entitlement plmn list
     * @throws IllegalArgumentException if the subscription does not exist.
     */
    public void setSatelliteEntitlementPlmnList(int subId,
            @NonNull List<String> satelliteEntitlementPlmnList) {
        String satelliteEntitlementPlmns = satelliteEntitlementPlmnList.stream().collect(
     * Save the satellite entitlement Info in the subscription database.
     *
     * @param subId                     subId.
     * @param allowedPlmnList           Plmn [MCC+MNC] list of codes to determine if satellite
     *                                  communication is allowed. Ex : "123123,12310".
     * @param barredPlmnList            Plmn [MCC+MNC] list of codes to determine if satellite
     *                                  communication is not allowed.  Ex : "123123,12310".
     * @param plmnDataPlanMap           data plan per plmn of type
     *                                  {@link SatelliteController#SATELLITE_DATA_PLAN_METERED} OR
     *                                  {@link SatelliteController#SATELLITE_DATA_PLAN_UNMETERED}.
     *                                  Ex : {"302820":0, "31026":1}
     * @param plmnServiceTypeMap        list of supported services per plmn of type
     *                                  {@link
     *                                  android.telephony.NetworkRegistrationInfo.ServiceType}).
     *                                  Ex : {"302820":[1,3],"31026":[2,3]}
     * @param plmnDataServicePolicyMap  data support mode per plmn map of types
     *                                  {@link CarrierConfigManager.SATELLITE_DATA_SUPPORT_MODE}.
     *                                  Ex : {"302820":2, "31026":1}
     * @param plmnVoiceServicePolicyMap voice support mode per plmn map of types
     *                                  {@link CarrierConfigManager.SATELLITE_DATA_SUPPORT_MODE}
     *                                  . Ex : {"302820":2, "31026":1}.
     * @throws IllegalArgumentException if the subscription does not exist.
     */
    public void setSatelliteEntitlementInfo(int subId,
            @NonNull List<String> allowedPlmnList,
            @Nullable List<String> barredPlmnList,
            @Nullable Map<String, Integer> plmnDataPlanMap,
            @Nullable Map<String, List<Integer>> plmnServiceTypeMap,
            @Nullable Map<String, Integer> plmnDataServicePolicyMap,
            @Nullable Map<String, Integer> plmnVoiceServicePolicyMap) {
        String satelliteEntitlementPlmns = allowedPlmnList.stream().collect(
                Collectors.joining(","));
        setSatelliteEntitlementPlmns(subId, satelliteEntitlementPlmns);

        String satelliteEntitlementBarredPlmns = barredPlmnList.stream().collect(
                Collectors.joining(","));
        setSatelliteEntitlementBarredPlmns(subId, satelliteEntitlementBarredPlmns);


        String plmnDataPlanJson = serializeMapToJsonString(plmnDataPlanMap);
        setSatelliteEntitlementDataPlanForPlmns(subId, plmnDataPlanJson);

        String plmnServiceTypeJson = serializeMapListToJsonString(plmnServiceTypeMap);
        setSatelliteEntitlementPlmnServiceTypeMap(subId, plmnServiceTypeJson);

        String plmnDataServicePolicyJson = serializeMapToJsonString(plmnDataServicePolicyMap);
        setSatelliteEntitlementPlmnDataServicePolicy(subId, plmnDataServicePolicyJson);

        String plmnVoiceServicePolicyJson = serializeMapToJsonString(plmnVoiceServicePolicyMap);
        setSatelliteEntitlementPlmnVoiceServicePolicy(subId, plmnVoiceServicePolicyJson);
    }

    /**
@@ -2202,6 +2277,81 @@ public class SubscriptionDatabaseManager extends Handler {
                SubscriptionInfoInternal.Builder::setIsSatelliteProvisionedForNonIpDatagram);
    }

    /**
     * Set satellite entitlement barred plmns list by entitlement query result.
     *
     * @param subId Subscription id.
     * @param satelliteEntitlementBarredPlmns Satellite entitlement barred plmns
     * @throws IllegalArgumentException if the subscription does not exist.
     */
    public void setSatelliteEntitlementBarredPlmns(int subId,
            @NonNull String satelliteEntitlementBarredPlmns) {
        writeDatabaseAndCacheHelper(subId,
                SimInfo.COLUMN_SATELLITE_ENTITLEMENT_BARRED_PLMNS,
                satelliteEntitlementBarredPlmns,
                SubscriptionInfoInternal.Builder::setSatelliteEntitlementBarredPlmnsList);
    }

    /**
     * Set satellite entitlement data plan for the plmns by entitlement query result.
     *
     * @param subId Subscription id.
     * @param plmnDataPlanJson Satellite entitlement data plan for plmns.
     * @throws IllegalArgumentException if the subscription does not exist.
     */
    public void setSatelliteEntitlementDataPlanForPlmns(int subId,
            @NonNull String plmnDataPlanJson) {
        writeDatabaseAndCacheHelper(subId,
                SimInfo.COLUMN_SATELLITE_ENTITLEMENT_DATA_PLAN_PLMNS,
                plmnDataPlanJson,
                SubscriptionInfoInternal.Builder::setSatelliteEntitlementDataPlanForPlmns);
    }

    /**
     * Set satellite entitlement services for the plmns by entitlement query result.
     *
     * @param subId                     Subscription id.
     * @param plmnServiceTypeJson Satellite entitlement services for plmns.
     * @throws IllegalArgumentException if the subscription does not exist.
     */
    public void setSatelliteEntitlementPlmnServiceTypeMap(int subId,
            @NonNull String plmnServiceTypeJson) {
        writeDatabaseAndCacheHelper(subId,
                SimInfo.COLUMN_SATELLITE_ENTITLEMENT_SERVICE_TYPE_MAP,
                plmnServiceTypeJson,
                SubscriptionInfoInternal.Builder::setSatelliteEntitlementPlmnServiceTypes);
    }

    /**
     * Set satellite entitlement data service policy for plmns by entitlement query result.
     *
     * @param subId Subscription id.
     * @param satellitePlmnsDataServicePolicy Satellite entitlement data service policy for plmns.
     * @throws IllegalArgumentException if the subscription does not exist.
     */
    public void setSatelliteEntitlementPlmnDataServicePolicy(int subId,
            @NonNull String satellitePlmnsDataServicePolicy) {
        writeDatabaseAndCacheHelper(subId,
                SimInfo.COLUMN_SATELLITE_ENTITLEMENT_DATA_SERVICE_POLICY,
                satellitePlmnsDataServicePolicy,
                SubscriptionInfoInternal.Builder::setSatellitePlmnsDataServicePolicy);
    }

    /**
     * Set satellite entitlement voice service policy for plmns by entitlement query result.
     *
     * @param subId Subscription id.
     * @param satellitePlmnsVoiceServicePolicy Satellite entitlement voice service policy for plmns.
     * @throws IllegalArgumentException if the subscription does not exist.
     */
    public void setSatelliteEntitlementPlmnVoiceServicePolicy(int subId,
            @NonNull String satellitePlmnsVoiceServicePolicy) {
        writeDatabaseAndCacheHelper(subId,
                SimInfo.COLUMN_SATELLITE_ENTITLEMENT_VOICE_SERVICE_POLICY,
                satellitePlmnsVoiceServicePolicy,
                SubscriptionInfoInternal.Builder::setSatellitePlmnsVoiceServicePolicy);
    }

    /**
     * Reload the database from content provider to the cache. This must be a synchronous operation
     * to prevent cache/database out-of-sync. Callers should be cautious to call this method because
@@ -2443,7 +2593,22 @@ public class SubscriptionDatabaseManager extends Handler {
                                SimInfo.COLUMN_SATELLITE_ENTITLEMENT_PLMNS)))
                .setIsSatelliteProvisionedForNonIpDatagram(cursor.getInt(
                        cursor.getColumnIndexOrThrow(
                                SimInfo.COLUMN_IS_SATELLITE_PROVISIONED_FOR_NON_IP_DATAGRAM)));
                                SimInfo.COLUMN_IS_SATELLITE_PROVISIONED_FOR_NON_IP_DATAGRAM)))
                .setSatelliteEntitlementBarredPlmnsList(cursor.getString(
                        cursor.getColumnIndexOrThrow(
                                SimInfo.COLUMN_SATELLITE_ENTITLEMENT_BARRED_PLMNS)))
                .setSatelliteEntitlementDataPlanForPlmns(cursor.getString(
                        cursor.getColumnIndexOrThrow(
                                SimInfo.COLUMN_SATELLITE_ENTITLEMENT_DATA_PLAN_PLMNS)))
                .setSatelliteEntitlementPlmnServiceTypes(cursor.getString(
                        cursor.getColumnIndexOrThrow(
                                SimInfo.COLUMN_SATELLITE_ENTITLEMENT_SERVICE_TYPE_MAP)))
                .setSatellitePlmnsDataServicePolicy(cursor.getString(
                        cursor.getColumnIndexOrThrow(
                                SimInfo.COLUMN_SATELLITE_ENTITLEMENT_DATA_SERVICE_POLICY)))
                .setSatellitePlmnsVoiceServicePolicy(cursor.getString(
                        cursor.getColumnIndexOrThrow(
                                SimInfo.COLUMN_SATELLITE_ENTITLEMENT_VOICE_SERVICE_POLICY)));
        builder.setOnlyNonTerrestrialNetwork(cursor.getInt(cursor.getColumnIndexOrThrow(
                SimInfo.COLUMN_IS_ONLY_NTN)));
        if (mFeatureFlags.supportPsimToEsimConversion()) {
@@ -2546,6 +2711,52 @@ public class SubscriptionDatabaseManager extends Handler {
                SubscriptionInfoInternal.Builder::setTransferStatus);
    }

    /**
     * Serialize the given Map<String, Integer> to Json model string.
     *
     * @param mapInfo of type Map
     * @return Json in string format.
     */
    public String serializeMapToJsonString(Map<String, Integer> mapInfo) {
        JSONObject json = new JSONObject();
        if (mapInfo == null || mapInfo.isEmpty()) {
            return json.toString();
        }
        try {
            for (Map.Entry<String, Integer> entry : mapInfo.entrySet()) {
                json.put(entry.getKey(), entry.getValue());
            }
        } catch (JSONException e) {
            loge("serializeMapToCV JSON error: " + e.getMessage());
        }
        return json.toString();
    }

    /**
     * Serialize the given Map<String, List<Integer>> to Json model string.
     *
     * @param mapList of type Map
     * @return Json in string format.
     */
    public String serializeMapListToJsonString(Map<String, List<Integer>> mapList) {
        JSONObject json = new JSONObject();
        if (mapList == null || mapList.isEmpty()) {
            return json.toString();
        }
        try {
            for (Map.Entry<String, List<Integer>> entry : mapList.entrySet()) {
                JSONArray jsonArray = new JSONArray();
                for (int value : entry.getValue()) {
                    jsonArray.put(value);
                }
                json.put(entry.getKey(), jsonArray);
            }
        } catch (JSONException e) {
            loge("serializeMapListToCV JSON error: " + e.getMessage());
        }
        return json.toString();
    }

    /**
     * Log debug messages.
     *
+209 −2

File changed.

Preview size limit exceeded, changes collapsed.

+183 −10

File changed.

Preview size limit exceeded, changes collapsed.

+6 −1
Original line number Diff line number Diff line
@@ -138,7 +138,12 @@ public class FakeTelephonyProvider extends MockContentProvider {
                    + Telephony.SimInfo.COLUMN_SATELLITE_ENTITLEMENT_PLMNS + " TEXT,"
                    + Telephony.SimInfo.COLUMN_SATELLITE_ESOS_SUPPORTED + " INTEGER DEFAULT 0,"
                    + Telephony.SimInfo.COLUMN_IS_SATELLITE_PROVISIONED_FOR_NON_IP_DATAGRAM
                    + " INTEGER DEFAULT 0"
                    + " INTEGER DEFAULT 0,"
                    + Telephony.SimInfo.COLUMN_SATELLITE_ENTITLEMENT_BARRED_PLMNS + " TEXT,"
                    + Telephony.SimInfo.COLUMN_SATELLITE_ENTITLEMENT_DATA_PLAN_PLMNS + " TEXT,"
                    + Telephony.SimInfo.COLUMN_SATELLITE_ENTITLEMENT_SERVICE_TYPE_MAP + " TEXT,"
                    + Telephony.SimInfo.COLUMN_SATELLITE_ENTITLEMENT_DATA_SERVICE_POLICY + " TEXT,"
                    + Telephony.SimInfo.COLUMN_SATELLITE_ENTITLEMENT_VOICE_SERVICE_POLICY + " TEXT"
                    + ");";
        }

Loading