StatusHints.java revision b19a0bcdd8a5020c61a0d697f600fdc943c86f59
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 17e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepalpackage android.telecomm; 18e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 19e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepalimport android.content.ComponentName; 20e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepalimport android.content.Context; 21e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepalimport android.content.pm.PackageManager; 22e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepalimport android.graphics.drawable.Drawable; 23612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepalimport android.os.Bundle; 24e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepalimport android.os.Parcel; 25e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepalimport android.os.Parcelable; 26e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 27e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepalimport java.util.MissingResourceException; 28f20b9166ee247d0a26988f404dd1216cdacc977aSailesh Nepalimport java.util.Objects; 29e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 30e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal/** 31e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal * Contains status label and icon displayed in the in-call UI. 32e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal */ 33e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepalpublic final class StatusHints implements Parcelable { 34e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 35e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal private final ComponentName mComponentName; 36146a3e36652a1dde44696ad5b7ceb0f8e30d5696Santos Cordon private final CharSequence mLabel; 37b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad private final int mIconResId; 38612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal private final Bundle mExtras; 39e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 40b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad public StatusHints(ComponentName componentName, CharSequence label, int iconResId, Bundle extras) { 41e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal mComponentName = componentName; 42e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal mLabel = label; 43b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad mIconResId = iconResId; 44612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal mExtras = extras; 45e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 46e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 47e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal /** 48e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal * @return A component used to load the icon. 49e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal */ 50e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal public ComponentName getComponentName() { 51e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal return mComponentName; 52e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 53e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 54e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal /** 55e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal * @return The label displayed in the in-call UI. 56e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal */ 57146a3e36652a1dde44696ad5b7ceb0f8e30d5696Santos Cordon public CharSequence getLabel() { 58e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal return mLabel; 59e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 60e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 61e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal /** 62b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad * The icon resource ID for the icon to show. 63b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad * 64b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad * @return A resource ID. 65e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal */ 66b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad public int getIconResId() { 67b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad return mIconResId; 68e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 69e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 70e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal /** 71e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal * @return An icon displayed in the in-call UI. 72e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal */ 73e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal public Drawable getIcon(Context context) { 74b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad return getIcon(context, mIconResId); 75e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 76e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 77612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal /** 78612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal * @return Extra data used to display status. 79612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal */ 80612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal public Bundle getExtras() { 81612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal return mExtras; 82612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal } 83612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal 84e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal @Override 85e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal public int describeContents() { 86e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal return 0; 87e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 88e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 89e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal @Override 90e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal public void writeToParcel(Parcel out, int flags) { 91e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal out.writeParcelable(mComponentName, flags); 92146a3e36652a1dde44696ad5b7ceb0f8e30d5696Santos Cordon out.writeCharSequence(mLabel); 93b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad out.writeInt(mIconResId); 94612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal out.writeParcelable(mExtras, 0); 95e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 96e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 97e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal public static final Creator<StatusHints> CREATOR 98e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal = new Creator<StatusHints>() { 99e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal public StatusHints createFromParcel(Parcel in) { 100e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal return new StatusHints(in); 101e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 102e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 103e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal public StatusHints[] newArray(int size) { 104e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal return new StatusHints[size]; 105e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 106e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal }; 107e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 108e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal private StatusHints(Parcel in) { 109e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal mComponentName = in.readParcelable(getClass().getClassLoader()); 110146a3e36652a1dde44696ad5b7ceb0f8e30d5696Santos Cordon mLabel = in.readCharSequence(); 111b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad mIconResId = in.readInt(); 112b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad mExtras = in.readParcelable(getClass().getClassLoader()); 113e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 114e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 115e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal private Drawable getIcon(Context context, int resId) { 116e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal Context packageContext; 117e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal try { 118e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal packageContext = context.createPackageContext(mComponentName.getPackageName(), 0); 119e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } catch (PackageManager.NameNotFoundException e) { 120e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal Log.e(this, e, "Cannot find package %s", mComponentName.getPackageName()); 121e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal return null; 122e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 123e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal try { 124e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal return packageContext.getResources().getDrawable(resId); 125e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } catch (MissingResourceException e) { 126e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal Log.e(this, e, "Cannot find icon %d in package %s", 127e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal resId, mComponentName.getPackageName()); 128e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal return null; 129e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 130e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 131f20b9166ee247d0a26988f404dd1216cdacc977aSailesh Nepal 132f20b9166ee247d0a26988f404dd1216cdacc977aSailesh Nepal @Override 133f20b9166ee247d0a26988f404dd1216cdacc977aSailesh Nepal public boolean equals(Object other) { 134f20b9166ee247d0a26988f404dd1216cdacc977aSailesh Nepal if (other != null && other instanceof StatusHints) { 135f20b9166ee247d0a26988f404dd1216cdacc977aSailesh Nepal StatusHints otherHints = (StatusHints) other; 136f20b9166ee247d0a26988f404dd1216cdacc977aSailesh Nepal return Objects.equals(otherHints.getComponentName(), getComponentName()) && 137f20b9166ee247d0a26988f404dd1216cdacc977aSailesh Nepal Objects.equals(otherHints.getLabel(), getLabel()) && 138b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad otherHints.getIconResId() == getIconResId() && 139f20b9166ee247d0a26988f404dd1216cdacc977aSailesh Nepal Objects.equals(otherHints.getExtras(), getExtras()); 140f20b9166ee247d0a26988f404dd1216cdacc977aSailesh Nepal } 141f20b9166ee247d0a26988f404dd1216cdacc977aSailesh Nepal return false; 142f20b9166ee247d0a26988f404dd1216cdacc977aSailesh Nepal } 143f20b9166ee247d0a26988f404dd1216cdacc977aSailesh Nepal 144f20b9166ee247d0a26988f404dd1216cdacc977aSailesh Nepal @Override 145f20b9166ee247d0a26988f404dd1216cdacc977aSailesh Nepal public int hashCode() { 146b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad return Objects.hashCode(mComponentName) + Objects.hashCode(mLabel) + mIconResId + 147f20b9166ee247d0a26988f404dd1216cdacc977aSailesh Nepal Objects.hashCode(mExtras); 148f20b9166ee247d0a26988f404dd1216cdacc977aSailesh Nepal } 149e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal} 150