/telephony/java/android/telephony/SubscriptionInfo.java
Java | 376 lines | 185 code | 48 blank | 143 comment | 5 complexity | 508dc06451d08fc7f3cc59956febd653 MD5 | raw file
Possible License(s): LGPL-2.1, MPL-2.0-no-copyleft-exception, CC0-1.0, BitTorrent-1.0, BSD-3-Clause
- /*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- package android.telephony;
- import android.content.Context;
- import android.graphics.Bitmap;
- import android.graphics.Canvas;
- import android.graphics.Color;
- import android.graphics.Paint;
- import android.graphics.PorterDuff;
- import android.graphics.PorterDuffColorFilter;
- import android.graphics.Rect;
- import android.graphics.Typeface;
- import android.os.Build;
- import android.os.Parcel;
- import android.os.Parcelable;
- import android.util.DisplayMetrics;
- /**
- * A Parcelable class for Subscription Information.
- */
- public class SubscriptionInfo implements Parcelable {
- /**
- * Size of text to render on the icon.
- */
- private static final int TEXT_SIZE = 16;
- /**
- * Subscription Identifier, this is a device unique number
- * and not an index into an array
- */
- private int mId;
- /**
- * The GID for a SIM that maybe associated with this subscription, empty if unknown
- */
- private String mIccId;
- /**
- * The index of the slot that currently contains the subscription
- * and not necessarily unique and maybe INVALID_SLOT_ID if unknown
- */
- private int mSimSlotIndex;
- /**
- * The name displayed to the user that identifies this subscription
- */
- private CharSequence mDisplayName;
- /**
- * String that identifies SPN/PLMN
- * TODO : Add a new field that identifies only SPN for a sim
- */
- private CharSequence mCarrierName;
- /**
- * The source of the name, NAME_SOURCE_UNDEFINED, NAME_SOURCE_DEFAULT_SOURCE,
- * NAME_SOURCE_SIM_SOURCE or NAME_SOURCE_USER_INPUT.
- */
- private int mNameSource;
- /**
- * The color to be used for tinting the icon when displaying to the user
- */
- private int mIconTint;
- /**
- * A number presented to the user identify this subscription
- */
- private String mNumber;
- /**
- * Data roaming state, DATA_RAOMING_ENABLE, DATA_RAOMING_DISABLE
- */
- private int mDataRoaming;
- /**
- * SIM Icon bitmap
- */
- private Bitmap mIconBitmap;
- /**
- * Mobile Country Code
- */
- private int mMcc;
- /**
- * Mobile Network Code
- */
- private int mMnc;
- /**
- * ISO Country code for the subscription's provider
- */
- private String mCountryIso;
- /**
- * @hide
- */
- public int mUserNwMode;
- /**
- * @hide
- */
- public SubscriptionInfo(int id, String iccId, int simSlotIndex, CharSequence displayName,
- CharSequence carrierName, int nameSource, int iconTint, String number, int roaming,
- Bitmap icon, int mcc, int mnc, String countryIso, int userNwMode) {
- this.mId = id;
- this.mIccId = iccId;
- this.mSimSlotIndex = simSlotIndex;
- this.mDisplayName = displayName;
- this.mCarrierName = carrierName;
- this.mNameSource = nameSource;
- this.mIconTint = iconTint;
- this.mNumber = number;
- this.mDataRoaming = roaming;
- this.mIconBitmap = icon;
- this.mMcc = mcc;
- this.mMnc = mnc;
- this.mCountryIso = countryIso;
- this.mUserNwMode = userNwMode;
- }
- /**
- * @return the subscription ID.
- */
- public int getSubscriptionId() {
- return this.mId;
- }
- /**
- * @return the ICC ID.
- */
- public String getIccId() {
- return this.mIccId;
- }
- /**
- * @return the slot index of this Subscription's SIM card.
- */
- public int getSimSlotIndex() {
- return this.mSimSlotIndex;
- }
- /**
- * @return the name displayed to the user that identifies this subscription
- */
- public CharSequence getDisplayName() {
- return this.mDisplayName;
- }
- /**
- * Sets the name displayed to the user that identifies this subscription
- * @hide
- */
- public void setDisplayName(CharSequence name) {
- this.mDisplayName = name;
- }
- /**
- * @return the name displayed to the user that identifies Subscription provider name
- */
- public CharSequence getCarrierName() {
- return this.mCarrierName;
- }
- /**
- * Sets the name displayed to the user that identifies Subscription provider name
- * @hide
- */
- public void setCarrierName(CharSequence name) {
- this.mCarrierName = name;
- }
- /**
- * @return the source of the name, eg NAME_SOURCE_UNDEFINED, NAME_SOURCE_DEFAULT_SOURCE,
- * NAME_SOURCE_SIM_SOURCE or NAME_SOURCE_USER_INPUT.
- * @hide
- */
- public int getNameSource() {
- return this.mNameSource;
- }
- /**
- * Creates and returns an icon {@code Bitmap} to represent this {@code SubscriptionInfo} in a user
- * interface.
- *
- * @param context A {@code Context} to get the {@code DisplayMetrics}s from.
- *
- * @return A bitmap icon for this {@code SubscriptionInfo}.
- */
- public Bitmap createIconBitmap(Context context) {
- int width = mIconBitmap.getWidth();
- int height = mIconBitmap.getHeight();
- DisplayMetrics metrics = context.getResources().getDisplayMetrics();
- // Create a new bitmap of the same size because it will be modified.
- Bitmap workingBitmap = Bitmap.createBitmap(metrics, width, height, mIconBitmap.getConfig());
- Canvas canvas = new Canvas(workingBitmap);
- Paint paint = new Paint();
- // Tint the icon with the color.
- paint.setColorFilter(new PorterDuffColorFilter(mIconTint, PorterDuff.Mode.SRC_ATOP));
- canvas.drawBitmap(mIconBitmap, 0, 0, paint);
- paint.setColorFilter(null);
- // Write the sim slot index.
- paint.setAntiAlias(true);
- paint.setTypeface(Typeface.create("sans-serif", Typeface.NORMAL));
- paint.setColor(Color.WHITE);
- // Set text size scaled by density
- paint.setTextSize(TEXT_SIZE * metrics.density);
- // Convert sim slot index to localized string
- final String index = String.format("%d", mSimSlotIndex + 1);
- final Rect textBound = new Rect();
- paint.getTextBounds(index, 0, 1, textBound);
- final float xOffset = (width / 2.f) - textBound.centerX();
- final float yOffset = (height / 2.f) - textBound.centerY();
- canvas.drawText(index, xOffset, yOffset, paint);
- return workingBitmap;
- }
- /**
- * A highlight color to use in displaying information about this {@code PhoneAccount}.
- *
- * @return A hexadecimal color value.
- */
- public int getIconTint() {
- return mIconTint;
- }
- /**
- * Sets the color displayed to the user that identifies this subscription
- * @hide
- */
- public void setIconTint(int iconTint) {
- this.mIconTint = iconTint;
- }
- /**
- * @return the number of this subscription.
- */
- public String getNumber() {
- return mNumber;
- }
- /**
- * @return the data roaming state for this subscription, either
- * {@link SubscriptionManager#DATA_ROAMING_ENABLE} or {@link SubscriptionManager#DATA_ROAMING_DISABLE}.
- */
- public int getDataRoaming() {
- return this.mDataRoaming;
- }
- /**
- * @return the MCC.
- */
- public int getMcc() {
- return this.mMcc;
- }
- /**
- * @return the MNC.
- */
- public int getMnc() {
- return this.mMnc;
- }
- /**
- * @return the ISO country code
- */
- public String getCountryIso() {
- return this.mCountryIso;
- }
- /**
- * Returns the user set network mode.
- * @hide
- */
- public int getUserNwMode() {
- return this.mUserNwMode;
- }
- public static final Parcelable.Creator<SubscriptionInfo> CREATOR = new Parcelable.Creator<SubscriptionInfo>() {
- @Override
- public SubscriptionInfo createFromParcel(Parcel source) {
- int id = source.readInt();
- String iccId = source.readString();
- int simSlotIndex = source.readInt();
- CharSequence displayName = source.readCharSequence();
- CharSequence carrierName = source.readCharSequence();
- int nameSource = source.readInt();
- int iconTint = source.readInt();
- String number = source.readString();
- int dataRoaming = source.readInt();
- int mcc = source.readInt();
- int mnc = source.readInt();
- int userNwMode = source.readInt();
- String countryIso = source.readString();
- Bitmap iconBitmap = Bitmap.CREATOR.createFromParcel(source);
- return new SubscriptionInfo(id, iccId, simSlotIndex, displayName, carrierName,
- nameSource, iconTint, number, dataRoaming, iconBitmap, mcc, mnc, countryIso, userNwMode);
- }
- @Override
- public SubscriptionInfo[] newArray(int size) {
- return new SubscriptionInfo[size];
- }
- };
- @Override
- public void writeToParcel(Parcel dest, int flags) {
- dest.writeInt(mId);
- dest.writeString(mIccId);
- dest.writeInt(mSimSlotIndex);
- dest.writeCharSequence(mDisplayName);
- dest.writeCharSequence(mCarrierName);
- dest.writeInt(mNameSource);
- dest.writeInt(mIconTint);
- dest.writeString(mNumber);
- dest.writeInt(mDataRoaming);
- dest.writeInt(mMcc);
- dest.writeInt(mMnc);
- dest.writeInt(mUserNwMode);
- dest.writeString(mCountryIso);
- mIconBitmap.writeToParcel(dest, flags);
- }
- @Override
- public int describeContents() {
- return 0;
- }
- /**
- * @hide
- */
- public static String givePrintableIccid(String iccId) {
- String iccIdToPrint = null;
- if (iccId != null) {
- if (iccId.length() > 9 && !Build.IS_DEBUGGABLE) {
- iccIdToPrint = iccId.substring(0, 9) + Rlog.pii(false, iccId.substring(9));
- } else {
- iccIdToPrint = iccId;
- }
- }
- return iccIdToPrint;
- }
- @Override
- public String toString() {
- String iccIdToPrint = givePrintableIccid(mIccId);
- return "{id=" + mId + ", iccId=" + iccIdToPrint + " simSlotIndex=" + mSimSlotIndex
- + " displayName=" + mDisplayName + " carrierName=" + mCarrierName
- + " nameSource=" + mNameSource + " iconTint=" + mIconTint
- + " dataRoaming=" + mDataRoaming + " iconBitmap=" + mIconBitmap + " mcc " + mMcc
- + " mnc " + mMnc + " userNwMode=" + mUserNwMode + "}";
- }
- }