blob: e9262725d232f36803cbfa197f28fb7d5de2bd74 [file] [log] [blame]
Nathan Haroldac37b632020-01-20 19:04:40 -08001/*
2 * Copyright (C) 2020 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.telephony;
18
19import android.annotation.IntRange;
20import android.annotation.NonNull;
21import android.annotation.Nullable;
22import android.os.Parcel;
23import android.os.Parcelable;
24
25import java.util.Objects;
26
27/**
28 * Information to represent a closed subscriber group.
29 */
30public final class ClosedSubscriberGroupInfo implements Parcelable {
31 private static final String TAG = "ClosedSubscriberGroupInfo";
32
33 private final boolean mCsgIndicator;
34
35 private final String mHomeNodebName;
36
37 private final int mCsgIdentity;
38
39 /** @hide */
40 public ClosedSubscriberGroupInfo(boolean csgIndicator, @Nullable String homeNodebName,
41 int csgIdentity) {
42 mCsgIndicator = csgIndicator;
43 mHomeNodebName = (homeNodebName == null) ? "" : homeNodebName;
44 mCsgIdentity = csgIdentity;
45 }
46
47 /** @hide */
48 public ClosedSubscriberGroupInfo(
49 @NonNull android.hardware.radio.V1_5.ClosedSubscriberGroupInfo csgInfo) {
50 this(csgInfo.csgIndication, csgInfo.homeNodebName, csgInfo.csgIdentity);
51 }
52
53 /**
54 * Indicates whether the cell is restricted to only CSG members.
55 *
56 * A cell not broadcasting the CSG Indication but reporting CSG information is considered a
57 * Hybrid Cell.
58 * Refer to the "csg-Indication" field in 3GPP TS 36.331 section 6.2.2
59 * SystemInformationBlockType1.
60 * Also refer to "CSG Indicator" in 3GPP TS 25.331 section 10.2.48.8.1 and TS 25.304.
61 *
62 * @return true if the cell is restricted to group members only.
63 */
64 public boolean getCsgIndicator() {
65 return mCsgIndicator;
66 }
67
68 /**
69 * Returns human-readable name of the closed subscriber group operating this cell (Node-B).
70 *
71 * Refer to "hnb-Name" in TS 36.331 section 6.2.2 SystemInformationBlockType9.
72 * Also refer to "HNB Name" in 3GPP TS25.331 section 10.2.48.8.23 and TS 23.003 section 4.8.
73 *
74 * @return the home Node-B name if available.
75 */
76 public @NonNull String getHomeNodebName() {
77 return mHomeNodebName;
78 }
79
80 /**
81 * The identity of the closed subscriber group that the cell belongs to.
82 *
83 * Refer to "CSG-Identity" in TS 36.336 section 6.3.4.
84 * Also refer to "CSG Identity" in 3GPP TS 25.331 section 10.3.2.8 and TS 23.003 section 4.7.
85 *
86 * @return the unique 27-bit CSG Identity.
87 */
88 @IntRange(from = 0, to = 0x7FFFFFF)
89 public int getCsgIdentity() {
90 return mCsgIdentity;
91 }
92
93 @Override
94 public int hashCode() {
95 return Objects.hash(mCsgIndicator, mHomeNodebName, mCsgIdentity);
96 }
97
98 @Override
99 public boolean equals(Object other) {
100 if (!(other instanceof ClosedSubscriberGroupInfo)) {
101 return false;
102 }
103
104 ClosedSubscriberGroupInfo o = (ClosedSubscriberGroupInfo) other;
Rambo Wange0c4e402020-03-20 06:40:04 -0700105 return mCsgIndicator == o.mCsgIndicator && o.mHomeNodebName.equals(mHomeNodebName)
Nathan Haroldac37b632020-01-20 19:04:40 -0800106 && mCsgIdentity == o.mCsgIdentity;
107 }
108
109 @Override
110 public String toString() {
111 return new StringBuilder(TAG + ":{")
112 .append(" mCsgIndicator = ").append(mCsgIndicator)
113 .append(" mHomeNodebName = ").append(mHomeNodebName)
114 .append(" mCsgIdentity = ").append(mCsgIdentity)
115 .toString();
116 }
117
118 @Override
119 public void writeToParcel(@NonNull Parcel dest, int type) {
120 dest.writeBoolean(mCsgIndicator);
121 dest.writeString(mHomeNodebName);
122 dest.writeInt(mCsgIdentity);
123 }
124
125 /** Construct from Parcel, type has already been processed */
126 private ClosedSubscriberGroupInfo(Parcel in) {
127 this(in.readBoolean(), in.readString(), in.readInt());
128 }
129
130 /**
131 * Implement the Parcelable interface
132 */
133 @Override
134 public int describeContents() {
135 return 0;
136 }
137
138 /** Implement the Parcelable interface */
139 public static final @android.annotation.NonNull Creator<ClosedSubscriberGroupInfo> CREATOR =
140 new Creator<ClosedSubscriberGroupInfo>() {
141 @Override
142 public ClosedSubscriberGroupInfo createFromParcel(Parcel in) {
143 return createFromParcelBody(in);
144 }
145
146 @Override
147 public ClosedSubscriberGroupInfo[] newArray(int size) {
148 return new ClosedSubscriberGroupInfo[size];
149 }
150 };
151
152 /** @hide */
153 protected static ClosedSubscriberGroupInfo createFromParcelBody(Parcel in) {
154 return new ClosedSubscriberGroupInfo(in);
155 }
156}