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

Commit 58278bed authored by fionaxu's avatar fionaxu
Browse files

add a current table in CarrierIdProvider

restructure CarrierIdProvider into two tables
1. All - a private table which stores a complete mapping of all carriers
2. Current - a public table only stores the carrier identification of the
current active subs. require no permission to query.
expose the content url to public so that apps could be
notified on carrier identity change either on background or foreground.

Bug: 72571475
Test: runtest --path CarrierIdProviderTest.java
Test: Manual
Change-Id: If2a20288e63d25343f5bb582b35564d769a4e13b
(cherry picked from commit 3d00d698)
Merged-in: If2a20288e63d25343f5bb582b35564d769a4e13b
parent 9fda81e2
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -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";
+39 −0
Original line number Diff line number Diff line
/*
 * 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);
    }
}
+86 −40
Original line number Diff line number Diff line
@@ -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,10 +3346,66 @@ 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 {
        /**
         * Not instantiable.
         * @hide
         */
        private CarrierIdentification() {}

        /**
         * The {@code content://} style URI for this provider.
         */
        public static final Uri CONTENT_URI = Uri.parse("content://carrier_identification");

        /**
         * The authority string for the CarrierIdentification Provider
         * @hide
         */
        public static final String AUTHORITY = "carrier_identification";


        /**
         * Generates a content {@link Uri} used to receive updates on carrier identity change
         * on the given subscriptionId
         * <p>
         * 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 Uri getUriForSubscriptionId(int subscriptionId) {
            return CONTENT_URI.buildUpon().appendEncodedPath(
                    String.valueOf(subscriptionId)).build();
        }

        /**
         * A user facing carrier name.
         * @see TelephonyManager#getAndroidCarrierNameForSubscription()
         * <P>Type: TEXT </P>
         */
        public static final String NAME = "carrier_name";

        /**
         * A unique carrier id
         * @see TelephonyManager#getAndroidCarrierIdForSubscription()
         * <P>Type: INTEGER </P>
         */
        public static final String CID = "carrier_id";

        /**
         * Contains mappings between matching rules with carrier id for all carriers.
         * @hide
         */
        public static final class All implements BaseColumns {
            /**
             * Numeric operator ID (as String). {@code MCC + MNC}
             * <P>Type: TEXT </P>
@@ -3397,21 +3454,10 @@ public final class Telephony {
             */
            public static final String ICCID_PREFIX = "iccid_prefix";

        /**
         * User facing carrier name.
         * <P>Type: TEXT </P>
         */
        public static final String NAME = "carrier_name";

        /**
         * A unique carrier id
         * <P>Type: INTEGER </P>
         */
        public static final String CID = "carrier_id";

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