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

Commit 1a27acc4 authored by Calvin Pan's avatar Calvin Pan Committed by Gerrit Code Review
Browse files

Merge changes I7ba3c3ee,I3d2d03d4

* changes:
  Support DSDS on overriding carrier id
  Improve carrier id testability
parents 2f8b5916 a28cc533
Loading
Loading
Loading
Loading
+65 −0
Original line number Diff line number Diff line
@@ -20,9 +20,11 @@ import static android.provider.Telephony.Carriers.CONTENT_URI;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.BroadcastReceiver;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
@@ -41,6 +43,7 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.metrics.TelephonyMetrics;
import com.android.internal.telephony.uicc.IccRecords;
import com.android.internal.telephony.uicc.UiccController;
import com.android.internal.telephony.util.TelephonyUtils;
import com.android.internal.util.IndentingPrintWriter;
import com.android.telephony.Rlog;

@@ -70,6 +73,10 @@ public class CarrierResolver extends Handler {
    private static final Uri CONTENT_URL_PREFER_APN = Uri.withAppendedPath(
            Telephony.Carriers.CONTENT_URI, "preferapn");

    // Test purpose only.
    private static final String TEST_ACTION = "com.android.internal.telephony"
            + ".ACTION_TEST_OVERRIDE_CARRIER_ID";

    // cached matching rules based mccmnc to speed up resolution
    private List<CarrierMatchingRule> mCarrierMatchingRulesOnMccMnc = new ArrayList<>();
    // cached carrier Id
@@ -112,6 +119,53 @@ public class CarrierResolver extends Handler {
        }
    };

    /**
     * A broadcast receiver used for overriding carrier id for testing. There are six parameters,
     * only override_carrier_id is required, the others are options.
     *
     * To override carrier id by adb command, e.g.:
     * adb shell am broadcast -a com.android.internal.telephony.ACTION_TEST_OVERRIDE_CARRIER_ID \
     * --ei override_carrier_id 1
     * --ei override_specific_carrier_id 1
     * --ei override_mno_carrier_id 1
     * --es override_carrier_name test
     * --es override_specific_carrier_name test
     * --ei sub_id 1
     */
    private final BroadcastReceiver mCarrierIdTestReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            int phoneId = mPhone.getPhoneId();
            int carrierId = intent.getIntExtra("override_carrier_id",
                    TelephonyManager.UNKNOWN_CARRIER_ID);
            int specificCarrierId = intent.getIntExtra("override_specific_carrier_id", carrierId);
            int mnoCarrierId = intent.getIntExtra("override_mno_carrier_id", carrierId);
            String carrierName = intent.getStringExtra("override_carrier_name");
            String specificCarrierName = intent.getStringExtra("override_specific_carrier_name");
            int subId = intent.getIntExtra("sub_id",
                    SubscriptionManager.getDefaultSubscriptionId());

            if (carrierId == TelephonyManager.UNKNOWN_CARRIER_ID) {
                logd("Override carrier id can't be -1.", phoneId);
                return;
            } else if (subId != mPhone.getSubId()) {
                logd("Override carrier id failed. The sub id doesn't same as phone's sub id.",
                        phoneId);
                return;
            } else {
                logd("Override carrier id to: " + carrierId, phoneId);
                logd("Override specific carrier id to: " + specificCarrierId, phoneId);
                logd("Override mno carrier id to: " + mnoCarrierId, phoneId);
                logd("Override carrier name to: " + carrierName, phoneId);
                logd("Override specific carrier name to: " + specificCarrierName, phoneId);
                updateCarrierIdAndName(
                    carrierId, carrierName != null ? carrierName : "",
                    specificCarrierId, specificCarrierName != null ? carrierName : "",
                    mnoCarrierId);
            }
        }
    };

    public CarrierResolver(Phone phone) {
        logd("Creating CarrierResolver[" + phone.getPhoneId() + "]");
        mContext = phone.getContext();
@@ -124,6 +178,12 @@ public class CarrierResolver extends Handler {
        mContext.getContentResolver().registerContentObserver(
                CarrierId.All.CONTENT_URI, false, mContentObserver);
        UiccController.getInstance().registerForIccChanged(this, ICC_CHANGED_EVENT, null);

        if (TelephonyUtils.IS_DEBUGGABLE) {
            IntentFilter filter = new IntentFilter();
            filter.addAction(TEST_ACTION);
            mContext.registerReceiver(mCarrierIdTestReceiver, filter);
        }
    }

    /**
@@ -1068,6 +1128,11 @@ public class CarrierResolver extends Handler {
    private static void loge(String str) {
        Rlog.e(LOG_TAG, str);
    }

    private static void logd(String str, int phoneId) {
        Rlog.d(LOG_TAG + "[" + phoneId + "]", str);
    }

    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
        final IndentingPrintWriter ipw = new IndentingPrintWriter(pw, "  ");
        ipw.println("mCarrierResolverLocalLogs:");