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

Commit c564b1dc authored by Nathan Harold's avatar Nathan Harold
Browse files

Add Callback to notify changes of barring status

-Create a BarringInfo class to pass Barring information
 from HAL to PhoneStateListener.
-Add a multi-callback registrant so that ServiceStateTracker
 and potentially DcTracker can also listen to barring info in
 the future.

Bug: 143226991
Test: make update-api && make && atest BarringInfoTest
Change-Id: I08240259f3142beeca991238bf705236f0303954
parent ac8a052c
Loading
Loading
Loading
Loading
+34 −0
Original line number Diff line number Diff line
@@ -45142,6 +45142,38 @@ package android.telephony {
    field public static final int PRIORITY_MED = 2; // 0x2
  }
  public final class BarringInfo implements android.os.Parcelable {
    method public int describeContents();
    method @NonNull public android.telephony.BarringInfo.BarringServiceInfo getBarringServiceInfo(int);
    method public boolean isServiceBarred(int);
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field public static final int BARRING_SERVICE_TYPE_CS_FALLBACK = 5; // 0x5
    field public static final int BARRING_SERVICE_TYPE_CS_SERVICE = 0; // 0x0
    field public static final int BARRING_SERVICE_TYPE_CS_VOICE = 2; // 0x2
    field public static final int BARRING_SERVICE_TYPE_EMERGENCY = 8; // 0x8
    field public static final int BARRING_SERVICE_TYPE_MMTEL_VIDEO = 7; // 0x7
    field public static final int BARRING_SERVICE_TYPE_MMTEL_VOICE = 6; // 0x6
    field public static final int BARRING_SERVICE_TYPE_MO_DATA = 4; // 0x4
    field public static final int BARRING_SERVICE_TYPE_MO_SIGNALLING = 3; // 0x3
    field public static final int BARRING_SERVICE_TYPE_PS_SERVICE = 1; // 0x1
    field public static final int BARRING_SERVICE_TYPE_SMS = 9; // 0x9
    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.BarringInfo> CREATOR;
  }
  public static final class BarringInfo.BarringServiceInfo implements android.os.Parcelable {
    method public int describeContents();
    method public int getBarringType();
    method public int getConditionalBarringFactor();
    method public int getConditionalBarringTimeSeconds();
    method public boolean isBarred();
    method public boolean isConditionallyBarred();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field public static final int BARRING_TYPE_CONDITIONAL = 1; // 0x1
    field public static final int BARRING_TYPE_NONE = 0; // 0x0
    field public static final int BARRING_TYPE_UNCONDITIONAL = 2; // 0x2
    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.BarringInfo.BarringServiceInfo> CREATOR;
  }
  public class CarrierConfigManager {
    method @Nullable public android.os.PersistableBundle getConfig();
    method @Nullable public android.os.PersistableBundle getConfigByComponentForSubId(@NonNull String, int);
@@ -45787,6 +45819,7 @@ package android.telephony {
    ctor public PhoneStateListener();
    ctor public PhoneStateListener(@NonNull java.util.concurrent.Executor);
    method public void onActiveDataSubscriptionIdChanged(int);
    method public void onBarringInfoChanged(@NonNull android.telephony.BarringInfo);
    method @RequiresPermission("android.permission.READ_PRECISE_PHONE_STATE") public void onCallDisconnectCauseChanged(int, int);
    method public void onCallForwardingIndicatorChanged(boolean);
    method public void onCallStateChanged(int, String);
@@ -45804,6 +45837,7 @@ package android.telephony {
    method public void onSignalStrengthsChanged(android.telephony.SignalStrength);
    method public void onUserMobileDataStateChanged(boolean);
    field public static final int LISTEN_ACTIVE_DATA_SUBSCRIPTION_ID_CHANGE = 4194304; // 0x400000
    field @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public static final int LISTEN_BARRING_INFO = -2147483648; // 0x80000000
    field @RequiresPermission("android.permission.READ_PRECISE_PHONE_STATE") public static final int LISTEN_CALL_DISCONNECT_CAUSES = 33554432; // 0x2000000
    field public static final int LISTEN_CALL_FORWARDING_INDICATOR = 8; // 0x8
    field public static final int LISTEN_CALL_STATE = 32; // 0x20
+6 −0
Original line number Diff line number Diff line
@@ -9430,6 +9430,11 @@ package android.telephony {
    field public static final int TRANSPORT_TYPE_WWAN = 1; // 0x1
  }
  public final class BarringInfo implements android.os.Parcelable {
    ctor public BarringInfo();
    method @NonNull public android.telephony.BarringInfo createLocationInfoSanitizedCopy();
  }
  public final class CallAttributes implements android.os.Parcelable {
    ctor public CallAttributes(@NonNull android.telephony.PreciseCallState, int, @NonNull android.telephony.CallQuality);
    method public int describeContents();
@@ -10745,6 +10750,7 @@ package android.telephony {
  public class TelephonyRegistryManager {
    method public void addOnOpportunisticSubscriptionsChangedListener(@NonNull android.telephony.SubscriptionManager.OnOpportunisticSubscriptionsChangedListener, @NonNull java.util.concurrent.Executor);
    method public void addOnSubscriptionsChangedListener(@NonNull android.telephony.SubscriptionManager.OnSubscriptionsChangedListener, @NonNull java.util.concurrent.Executor);
    method public void notifyBarringInfoChanged(int, int, @NonNull android.telephony.BarringInfo);
    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void notifyCallStateChangedForAllSubscriptions(int, @Nullable String);
    method public void notifyCarrierNetworkChange(boolean);
    method public void notifyRegistrationFailed(int, int, @NonNull android.telephony.CellIdentity, @NonNull String, int, int, int);
+9 −0
Original line number Diff line number Diff line
@@ -3134,6 +3134,15 @@ package android.telephony {
    field public static final int TRANSPORT_TYPE_WWAN = 1; // 0x1
  }

  public final class BarringInfo implements android.os.Parcelable {
    ctor public BarringInfo();
    ctor public BarringInfo(@Nullable android.telephony.CellIdentity, @NonNull android.util.SparseArray<android.telephony.BarringInfo.BarringServiceInfo>);
  }

  public static final class BarringInfo.BarringServiceInfo implements android.os.Parcelable {
    ctor public BarringInfo.BarringServiceInfo(int, boolean, int, int);
  }

  public final class CallQuality implements android.os.Parcelable {
    ctor public CallQuality(int, int, int, int, int, int, int, int, int, int, int);
    ctor public CallQuality(int, int, int, int, int, int, int, int, int, int, int, boolean, boolean, boolean);
+33 −0
Original line number Diff line number Diff line
@@ -384,6 +384,17 @@ public class PhoneStateListener {
    @RequiresPermission(Manifest.permission.READ_PHONE_STATE)
    public static final int LISTEN_REGISTRATION_FAILURE = 0x40000000;

    /**
     * Listen for Barring Information for the current registered / camped cell.
     *
     * <p>Requires permission {@link android.Manifest.permission#READ_PHONE_STATE} or the calling
     * app has carrier privileges (see {@link TelephonyManager#hasCarrierPrivileges}).
     *
     * @see #onBarringInfoChanged()
     */
    @RequiresPermission(Manifest.permission.READ_PHONE_STATE)
    public static final int LISTEN_BARRING_INFO = 0x80000000;

    /*
     * Subscription used to listen to the phone state changes
     * @hide
@@ -978,6 +989,20 @@ public class PhoneStateListener {
        // default implementation empty
    }

    /**
     * Report updated barring information for the current camped/registered cell.
     *
     * <p>Barring info is provided for all services applicable to the current camped/registered
     * cell, for the registered PLMN and current access class/access category.
     *
     * @param barringInfo for all services on the current cell.
     *
     * @see android.telephony.BarringInfo
     */
    public void onBarringInfoChanged(@NonNull BarringInfo barringInfo) {
        // default implementation empty
    }

    /**
     * The callback methods need to be called on the handler thread where
     * this object was created.  If the binder did that for us it'd be nice.
@@ -1262,6 +1287,14 @@ public class PhoneStateListener {
                            cellIdentity, chosenPlmn, domain, causeCode, additionalCauseCode)));
            // default implementation empty
        }

        public void onBarringInfoChanged(BarringInfo barringInfo) {
            PhoneStateListener psl = mPhoneStateListenerWeakRef.get();
            if (psl == null) return;

            Binder.withCleanCallingIdentity(
                    () -> mExecutor.execute(() -> psl.onBarringInfoChanged(barringInfo)));
        }
    }


+17 −0
Original line number Diff line number Diff line
@@ -708,4 +708,21 @@ public class TelephonyRegistryManager {
        } catch (RemoteException ex) {
        }
    }

    /**
     * Notify {@link BarringInfo} has changed for a specific subscription.
     *
     * @param slotIndex for the phone object that got updated barring info.
     * @param subId for which the BarringInfo changed.
     * @param barringInfo updated BarringInfo.
     */
    public void notifyBarringInfoChanged(
            int slotIndex, int subId, @NonNull BarringInfo barringInfo) {
        try {
            sRegistry.notifyBarringInfoChanged(slotIndex, subId, barringInfo);
        } catch (RemoteException ex) {
            // system server crash
        }
    }

}
Loading