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

Commit 5aba7013 authored by Michael Groover's avatar Michael Groover
Browse files

Add method to clear out SubscriptionInfo#getCardString

In Androird 10 access to device identifiers was limited to apps with
the READ_PRIVILEGED_PHONE_STATE permission, carrier privileges, the
READ_DEVICE_IDENTIFIERS appop set to allow, or those that pass a
device / profile owner check. TelephonyManager#getSimSerialNumber
was guarded behind these new access requirements, but the same value
is still accessible as the cardString from the SubscriptionInfo.
While getCardString is a hidden API SubscriptionInfo#toString can
be used to obtain this value.

Bug: 152057778
Bug: 173421434
Test: atest SubscriptionControllerTest
Change-Id: I9b8786a321b1ba79d81b74c3041589f30df8e9c8
Merged-In: I9b8786a321b1ba79d81b74c3041589f30df8e9c8
parent 1c1bc30c
Loading
Loading
Loading
Loading
+17 −4
Original line number Diff line number Diff line
@@ -38,8 +38,6 @@ import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.util.Log;

import com.android.telephony.Rlog;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@@ -629,8 +627,16 @@ public class SubscriptionInfo implements Parcelable {
    }

    /**
     * @return the card string of the SIM card which contains the subscription. The card string is
     * the ICCID for UICCs or the EID for eUICCs.
     * Returns the card string if the calling app has been granted the READ_PRIVILEGED_PHONE_STATE
     * permission, has carrier privileges (see {@link TelephonyManager#hasCarrierPrivileges}), or
     * is a device owner or profile owner on an organization owned device that has been granted the
     * READ_PHONE_STATE permission. The profile owner is an app that owns a managed profile on the
     * device; for more details see <a href="https://developer.android.com/work/managed-profiles">
     * Work profiles</a>.
     *
     * @return the card string of the SIM card which contains the subscription or an empty string
     * if these requirements are not met. The card string is the ICCID for UICCs or the EID for
     * eUICCs.
     * @hide
     * //TODO rename usages in LPA: UiccSlotUtil.java, UiccSlotsManager.java, UiccSlotInfoTest.java
     */
@@ -638,6 +644,13 @@ public class SubscriptionInfo implements Parcelable {
        return this.mCardString;
    }

    /**
     * @hide
     */
    public void clearCardString() {
        this.mCardString = "";
    }

    /**
     * Returns the card ID of the SIM card which contains the subscription (see
     * {@link UiccCardInfo#getCardId()}.