diff --git a/api/current.txt b/api/current.txt index be5a543edb941..4762095a66178 100644 --- a/api/current.txt +++ b/api/current.txt @@ -35551,6 +35551,13 @@ package android.provider { field public static final java.lang.String ADDRESS = "address"; } + public static final class Telephony.CarrierIdentification implements android.provider.BaseColumns { + method public static android.net.Uri getUriForSubscriptionId(int); + field public static final java.lang.String CID = "carrier_id"; + field public static final android.net.Uri CONTENT_URI; + field public static final java.lang.String NAME = "carrier_name"; + } + public static final class Telephony.Carriers implements android.provider.BaseColumns { field public static final java.lang.String APN = "apn"; field public static final java.lang.String AUTH_TYPE = "authtype"; diff --git a/services/core/java/com/android/server/updates/CarrierIdInstallReceiver.java b/services/core/java/com/android/server/updates/CarrierIdInstallReceiver.java new file mode 100644 index 0000000000000..045081679d819 --- /dev/null +++ b/services/core/java/com/android/server/updates/CarrierIdInstallReceiver.java @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.server.updates; + +import android.content.ContentResolver; +import android.content.ContentValues; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.provider.Telephony; +import android.util.Log; + +public class CarrierIdInstallReceiver extends ConfigUpdateInstallReceiver { + + public CarrierIdInstallReceiver() { + super("/data/misc/carrierid", "carrier_list.pb", "metadata/", "version"); + } + + @Override + protected void postInstall(Context context, Intent intent) { + ContentResolver resolver = context.getContentResolver(); + resolver.update(Uri.withAppendedPath(Telephony.CarrierIdentification.All.CONTENT_URI, + "update_db"), new ContentValues(), null, null); + } +} diff --git a/telephony/java/android/telephony/Telephony.java b/telephony/java/android/telephony/Telephony.java index 8c4572474e6b0..63263bd372061 100644 --- a/telephony/java/android/telephony/Telephony.java +++ b/telephony/java/android/telephony/Telephony.java @@ -33,6 +33,7 @@ import android.telephony.Rlog; import android.telephony.ServiceState; import android.telephony.SmsMessage; import android.telephony.SubscriptionManager; +import android.telephony.TelephonyManager; import android.text.TextUtils; import android.util.Patterns; @@ -3345,73 +3346,118 @@ public final class Telephony { } /** - * Contains carrier identification information. - * @hide + * Contains carrier identification information for the current subscriptions. + * @see SubscriptionManager#getActiveSubscriptionIdList() */ public static final class CarrierIdentification implements BaseColumns { /** - * Numeric operator ID (as String). {@code MCC + MNC} - *

Type: TEXT

+ * Not instantiable. + * @hide */ - public static final String MCCMNC = "mccmnc"; + private CarrierIdentification() {} /** - * Group id level 1 (as String). - *

Type: TEXT

+ * The {@code content://} style URI for this provider. */ - public static final String GID1 = "gid1"; + public static final Uri CONTENT_URI = Uri.parse("content://carrier_identification"); /** - * Group id level 2 (as String). - *

Type: TEXT

+ * The authority string for the CarrierIdentification Provider + * @hide */ - public static final String GID2 = "gid2"; + public static final String AUTHORITY = "carrier_identification"; + /** - * Public Land Mobile Network name. - *

Type: TEXT

+ * Generates a content {@link Uri} used to receive updates on carrier identity change + * on the given subscriptionId + *

+ * Use this {@link Uri} with a {@link ContentObserver} to be notified of changes to the + * carrier identity {@link TelephonyManager#getAndroidCarrierIdForSubscription()} + * while your app is running. You can also use a {@link JobService} to ensure your app + * is notified of changes to the {@link Uri} even when it is not running. + * Note, however, that using a {@link JobService} does not guarantee timely delivery of + * updates to the {@link Uri}. + * + * @param subscriptionId the subscriptionId to receive updates on + * @return the Uri used to observe carrier identity changes */ - public static final String PLMN = "plmn"; + public static Uri getUriForSubscriptionId(int subscriptionId) { + return CONTENT_URI.buildUpon().appendEncodedPath( + String.valueOf(subscriptionId)).build(); + } /** - * Prefix xpattern of IMSI (International Mobile Subscriber Identity). - *

Type: TEXT

- */ - public static final String IMSI_PREFIX_XPATTERN = "imsi_prefix_xpattern"; - - /** - * Service Provider Name. - *

Type: TEXT

- */ - public static final String SPN = "spn"; - - /** - * Prefer APN name. - *

Type: TEXT

- */ - public static final String APN = "apn"; - - /** - * Prefix of Integrated Circuit Card Identifier. - *

Type: TEXT

- */ - public static final String ICCID_PREFIX = "iccid_prefix"; - - /** - * User facing carrier name. + * A user facing carrier name. + * @see TelephonyManager#getAndroidCarrierNameForSubscription() *

Type: TEXT

*/ public static final String NAME = "carrier_name"; /** * A unique carrier id + * @see TelephonyManager#getAndroidCarrierIdForSubscription() *

Type: INTEGER

*/ public static final String CID = "carrier_id"; /** - * The {@code content://} URI for this table. + * Contains mappings between matching rules with carrier id for all carriers. + * @hide */ - public static final Uri CONTENT_URI = Uri.parse("content://carrier_identification"); + public static final class All implements BaseColumns { + /** + * Numeric operator ID (as String). {@code MCC + MNC} + *

Type: TEXT

+ */ + public static final String MCCMNC = "mccmnc"; + + /** + * Group id level 1 (as String). + *

Type: TEXT

+ */ + public static final String GID1 = "gid1"; + + /** + * Group id level 2 (as String). + *

Type: TEXT

+ */ + public static final String GID2 = "gid2"; + + /** + * Public Land Mobile Network name. + *

Type: TEXT

+ */ + public static final String PLMN = "plmn"; + + /** + * Prefix xpattern of IMSI (International Mobile Subscriber Identity). + *

Type: TEXT

+ */ + public static final String IMSI_PREFIX_XPATTERN = "imsi_prefix_xpattern"; + + /** + * Service Provider Name. + *

Type: TEXT

+ */ + public static final String SPN = "spn"; + + /** + * Prefer APN name. + *

Type: TEXT

+ */ + public static final String APN = "apn"; + + /** + * Prefix of Integrated Circuit Card Identifier. + *

Type: TEXT

+ */ + public static final String ICCID_PREFIX = "iccid_prefix"; + + /** + * The {@code content://} URI for this table. + */ + public static final Uri CONTENT_URI = Uri.parse("content://carrier_identification/all"); + } } }