1e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal/* 2e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal * Copyright (C) 2014 The Android Open Source Project 3e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal * 4e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal * Licensed under the Apache License, Version 2.0 (the "License"); 5e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal * you may not use this file except in compliance with the License. 6e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal * You may obtain a copy of the License at 7e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal * 8e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal * http://www.apache.org/licenses/LICENSE-2.0 9e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal * 10e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal * Unless required by applicable law or agreed to in writing, software 11e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal * distributed under the License is distributed on an "AS IS" BASIS, 12e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal * See the License for the specific language governing permissions and 14e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal * limitations under the License. 15e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal */ 16e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 17ef9f6f957d897ea0ed82114185b8fa3fefd4917bTyler Gunnpackage android.telecom; 18e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 190e094d926c306c3667bcdf6f23c52cc7181f25f3Evan Charltonimport android.annotation.SystemApi; 20e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepalimport android.content.ComponentName; 21e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepalimport android.content.Context; 22e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepalimport android.content.pm.PackageManager; 23e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepalimport android.graphics.drawable.Drawable; 24612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepalimport android.os.Bundle; 25e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepalimport android.os.Parcel; 26e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepalimport android.os.Parcelable; 27e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 28e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepalimport java.util.MissingResourceException; 29f20b9166ee247d0a26988f404dd1216cdacc977aSailesh Nepalimport java.util.Objects; 30e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 31e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal/** 32e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal * Contains status label and icon displayed in the in-call UI. 330e094d926c306c3667bcdf6f23c52cc7181f25f3Evan Charlton * @hide 34e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal */ 350e094d926c306c3667bcdf6f23c52cc7181f25f3Evan Charlton@SystemApi 36e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepalpublic final class StatusHints implements Parcelable { 37e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 38ea38cca14964a5ee658899b0bafbc48017d556cdNancy Chen private final ComponentName mPackageName; 39146a3e36652a1dde44696ad5b7ceb0f8e30d5696Santos Cordon private final CharSequence mLabel; 40b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad private final int mIconResId; 41612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal private final Bundle mExtras; 42e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 43ea38cca14964a5ee658899b0bafbc48017d556cdNancy Chen public StatusHints(ComponentName packageName, CharSequence label, int iconResId, 44ea38cca14964a5ee658899b0bafbc48017d556cdNancy Chen Bundle extras) { 45ea38cca14964a5ee658899b0bafbc48017d556cdNancy Chen mPackageName = packageName; 46e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal mLabel = label; 47b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad mIconResId = iconResId; 48612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal mExtras = extras; 49e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 50e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 51e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal /** 52ea38cca14964a5ee658899b0bafbc48017d556cdNancy Chen * @return A package used to load the icon. 53e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal */ 54ea38cca14964a5ee658899b0bafbc48017d556cdNancy Chen public ComponentName getPackageName() { 55ea38cca14964a5ee658899b0bafbc48017d556cdNancy Chen return mPackageName; 56e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 57e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 58e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal /** 59e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal * @return The label displayed in the in-call UI. 60e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal */ 61146a3e36652a1dde44696ad5b7ceb0f8e30d5696Santos Cordon public CharSequence getLabel() { 62e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal return mLabel; 63e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 64e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 65e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal /** 66b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad * The icon resource ID for the icon to show. 67b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad * 68b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad * @return A resource ID. 69e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal */ 70b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad public int getIconResId() { 71b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad return mIconResId; 72e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 73e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 74e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal /** 75e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal * @return An icon displayed in the in-call UI. 76e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal */ 77e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal public Drawable getIcon(Context context) { 78b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad return getIcon(context, mIconResId); 79e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 80e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 81612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal /** 82612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal * @return Extra data used to display status. 83612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal */ 84612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal public Bundle getExtras() { 85612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal return mExtras; 86612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal } 87612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal 88e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal @Override 89e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal public int describeContents() { 90e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal return 0; 91e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 92e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 93e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal @Override 94e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal public void writeToParcel(Parcel out, int flags) { 95ea38cca14964a5ee658899b0bafbc48017d556cdNancy Chen out.writeParcelable(mPackageName, flags); 96146a3e36652a1dde44696ad5b7ceb0f8e30d5696Santos Cordon out.writeCharSequence(mLabel); 97b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad out.writeInt(mIconResId); 98612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal out.writeParcelable(mExtras, 0); 99e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 100e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 101e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal public static final Creator<StatusHints> CREATOR 102e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal = new Creator<StatusHints>() { 103e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal public StatusHints createFromParcel(Parcel in) { 104e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal return new StatusHints(in); 105e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 106e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 107e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal public StatusHints[] newArray(int size) { 108e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal return new StatusHints[size]; 109e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 110e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal }; 111e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 112e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal private StatusHints(Parcel in) { 113ea38cca14964a5ee658899b0bafbc48017d556cdNancy Chen mPackageName = in.readParcelable(getClass().getClassLoader()); 114146a3e36652a1dde44696ad5b7ceb0f8e30d5696Santos Cordon mLabel = in.readCharSequence(); 115b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad mIconResId = in.readInt(); 116b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad mExtras = in.readParcelable(getClass().getClassLoader()); 117e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 118e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 119e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal private Drawable getIcon(Context context, int resId) { 120e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal Context packageContext; 121e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal try { 122ea38cca14964a5ee658899b0bafbc48017d556cdNancy Chen packageContext = context.createPackageContext(mPackageName.getPackageName(), 0); 123e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } catch (PackageManager.NameNotFoundException e) { 124ea38cca14964a5ee658899b0bafbc48017d556cdNancy Chen Log.e(this, e, "Cannot find package %s", mPackageName.getPackageName()); 125e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal return null; 126e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 127e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal try { 12803d30a573b8bc8e169e153a0fffa053ffedcd5eeAlan Viverette return packageContext.getDrawable(resId); 129e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } catch (MissingResourceException e) { 130e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal Log.e(this, e, "Cannot find icon %d in package %s", 131ea38cca14964a5ee658899b0bafbc48017d556cdNancy Chen resId, mPackageName.getPackageName()); 132e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal return null; 133e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 134e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 135f20b9166ee247d0a26988f404dd1216cdacc977aSailesh Nepal 136f20b9166ee247d0a26988f404dd1216cdacc977aSailesh Nepal @Override 137f20b9166ee247d0a26988f404dd1216cdacc977aSailesh Nepal public boolean equals(Object other) { 138f20b9166ee247d0a26988f404dd1216cdacc977aSailesh Nepal if (other != null && other instanceof StatusHints) { 139f20b9166ee247d0a26988f404dd1216cdacc977aSailesh Nepal StatusHints otherHints = (StatusHints) other; 140ea38cca14964a5ee658899b0bafbc48017d556cdNancy Chen return Objects.equals(otherHints.getPackageName(), getPackageName()) && 141f20b9166ee247d0a26988f404dd1216cdacc977aSailesh Nepal Objects.equals(otherHints.getLabel(), getLabel()) && 142b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad otherHints.getIconResId() == getIconResId() && 143f20b9166ee247d0a26988f404dd1216cdacc977aSailesh Nepal Objects.equals(otherHints.getExtras(), getExtras()); 144f20b9166ee247d0a26988f404dd1216cdacc977aSailesh Nepal } 145f20b9166ee247d0a26988f404dd1216cdacc977aSailesh Nepal return false; 146f20b9166ee247d0a26988f404dd1216cdacc977aSailesh Nepal } 147f20b9166ee247d0a26988f404dd1216cdacc977aSailesh Nepal 148f20b9166ee247d0a26988f404dd1216cdacc977aSailesh Nepal @Override 149f20b9166ee247d0a26988f404dd1216cdacc977aSailesh Nepal public int hashCode() { 150ea38cca14964a5ee658899b0bafbc48017d556cdNancy Chen return Objects.hashCode(mPackageName) + Objects.hashCode(mLabel) + mIconResId + 151f20b9166ee247d0a26988f404dd1216cdacc977aSailesh Nepal Objects.hashCode(mExtras); 152f20b9166ee247d0a26988f404dd1216cdacc977aSailesh Nepal } 153e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal} 154