From 3c5e57cd075d9a1d55c55a9e1fffcc1ed8e1aef2 Mon Sep 17 00:00:00 2001 From: Nathan Harold Date: Fri, 10 Jan 2020 16:16:55 -0800 Subject: [PATCH] Add a BARRING_TYPE_UNKNOWN for Unreported Barring For vendors that do not support barring info reports, add an additional BARRING_TYPE to express the difference between unbarred and unknown barring status. Bug: 143226991 Test: make update-api && make && atest BarringInfoTest Merged-In: Ie9314c5612536bf181a3c0e52876b1804ed7cce2 Change-Id: Ie9314c5612536bf181a3c0e52876b1804ed7cce2 (cherry picked from commit d5b9cc737b8b89de303a1ce90f2a1e398658773f) --- api/current.txt | 1 + .../java/android/telephony/BarringInfo.java | 18 ++++++++++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/api/current.txt b/api/current.txt index e0c5d37eeb013..2d7cde73ed3d4 100644 --- a/api/current.txt +++ b/api/current.txt @@ -44709,6 +44709,7 @@ package android.telephony { 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 public static final int BARRING_TYPE_UNKNOWN = -1; // 0xffffffff field @NonNull public static final android.os.Parcelable.Creator CREATOR; } diff --git a/telephony/java/android/telephony/BarringInfo.java b/telephony/java/android/telephony/BarringInfo.java index b757543cf7742..5419c3c3d5c49 100644 --- a/telephony/java/android/telephony/BarringInfo.java +++ b/telephony/java/android/telephony/BarringInfo.java @@ -107,7 +107,8 @@ public final class BarringInfo implements Parcelable { @IntDef(prefix = "BARRING_TYPE_", value = {BARRING_TYPE_NONE, BARRING_TYPE_UNCONDITIONAL, - BARRING_TYPE_CONDITIONAL}) + BARRING_TYPE_CONDITIONAL, + BARRING_TYPE_UNKNOWN}) public @interface BarringType {} /** Barring is inactive */ @@ -119,6 +120,9 @@ public final class BarringInfo implements Parcelable { public static final int BARRING_TYPE_CONDITIONAL = android.hardware.radio.V1_5.BarringType.CONDITIONAL; + /** If a modem does not report barring info, then the barring type will be UNKNOWN */ + public static final int BARRING_TYPE_UNKNOWN = -1; + private final @BarringType int mBarringType; private final boolean mIsConditionallyBarred; @@ -126,8 +130,8 @@ public final class BarringInfo implements Parcelable { private final int mConditionalBarringTimeSeconds; /** @hide */ - public BarringServiceInfo() { - this(BARRING_TYPE_NONE, false, 0, 0); + public BarringServiceInfo(@BarringType int type) { + this(type, false, 0, 0); } /** @hide */ @@ -311,7 +315,13 @@ public final class BarringInfo implements Parcelable { */ public @NonNull BarringServiceInfo getBarringServiceInfo(@BarringServiceType int service) { BarringServiceInfo bsi = mBarringServiceInfos.get(service); - return (bsi != null) ? bsi : new BarringServiceInfo(); + // If barring is reported but not for a particular service, then we report the barring + // type as UNKNOWN; if the modem reports barring info but doesn't report for a particular + // service then we can safely assume that the service isn't barred (for instance because + // that particular service isn't applicable to the current RAN). + return (bsi != null) ? bsi : new BarringServiceInfo( + mBarringServiceInfos.size() > 0 ? BarringServiceInfo.BARRING_TYPE_NONE : + BarringServiceInfo.BARRING_TYPE_UNKNOWN); } /** @hide */