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

Commit c3b90ecd authored by Hunter Knepshield's avatar Hunter Knepshield Committed by android-build-merger
Browse files

Merge "Check Carrier Privilege on Hidden Subs" into qt-r1-dev

am: 4c452a65

Change-Id: Ic5baff7a7530d473e6f78899442f6834df33cb3b
parents dbb897ee 4c452a65
Loading
Loading
Loading
Loading
+15 −8
Original line number Original line Diff line number Diff line
@@ -2116,29 +2116,36 @@ public class SubscriptionManager {
    }
    }


    /**
    /**
     * TODO(b/137102918) Make this static, tests use this as an instance method currently.
     *
     * @return the list of subId's that are active,
     * @return the list of subId's that are active,
     *         is never null but the length maybe 0.
     *         is never null but the length maybe 0.
     * @hide
     * @hide
     */
     */
    @UnsupportedAppUsage
    @UnsupportedAppUsage
    public @NonNull int[] getActiveSubscriptionIdList() {
    public @NonNull int[] getActiveSubscriptionIdList() {
        int[] subId = null;
        return getActiveSubscriptionIdList(/* visibleOnly */ true);
    }


    /**
     * TODO(b/137102918) Make this static, tests use this as an instance method currently.
     *
     * @return a non-null list of subId's that are active.
     *
     * @hide
     */
    public @NonNull int[] getActiveSubscriptionIdList(boolean visibleOnly) {
        try {
        try {
            ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub"));
            ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub"));
            if (iSub != null) {
            if (iSub != null) {
                subId = iSub.getActiveSubIdList(/*visibleOnly*/true);
                int[] subId = iSub.getActiveSubIdList(visibleOnly);
                if (subId != null) return subId;
            }
            }
        } catch (RemoteException ex) {
        } catch (RemoteException ex) {
            // ignore it
            // ignore it
        }
        }


        if (subId == null) {
        return new int[0];
            subId = new int[0];
        }

        return subId;

    }
    }


    /**
    /**
+8 −13
Original line number Original line Diff line number Diff line
@@ -600,26 +600,21 @@ public final class TelephonyPermissions {
        }
        }
    }
    }


    /**
    /** Returns whether the provided uid has carrier privileges for any active subscription ID. */
     * Returns whether the provided uid has carrier privileges for any active subscription ID.
    private static boolean checkCarrierPrivilegeForAnySubId(
     */
            Context context, Supplier<ITelephony> telephonySupplier, int uid) {
    private static boolean checkCarrierPrivilegeForAnySubId(Context context,
            Supplier<ITelephony> telephonySupplier, int uid) {
        SubscriptionManager sm = (SubscriptionManager) context.getSystemService(
        SubscriptionManager sm = (SubscriptionManager) context.getSystemService(
                Context.TELEPHONY_SUBSCRIPTION_SERVICE);
                Context.TELEPHONY_SUBSCRIPTION_SERVICE);
        int[] activeSubIds = sm.getActiveSubscriptionIdList();
        int[] activeSubIds = sm.getActiveSubscriptionIdList(/* visibleOnly */ false);
        if (activeSubIds != null) {
        for (int activeSubId : activeSubIds) {
        for (int activeSubId : activeSubIds) {
            if (getCarrierPrivilegeStatus(telephonySupplier, activeSubId, uid)
            if (getCarrierPrivilegeStatus(telephonySupplier, activeSubId, uid)
                    == TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS) {
                    == TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS) {
                return true;
                return true;
            }
            }
        }
        }
        }
        return false;
        return false;
    }
    }



    private static int getCarrierPrivilegeStatus(
    private static int getCarrierPrivilegeStatus(
            Supplier<ITelephony> telephonySupplier, int subId, int uid) {
            Supplier<ITelephony> telephonySupplier, int subId, int uid) {
        ITelephony telephony = telephonySupplier.get();
        ITelephony telephony = telephonySupplier.get();