StatusHints.java revision 612038642fa9cf1545dbcc8274d313192ce928b5
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; 23e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepalimport android.net.Uri; 24612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepalimport android.os.Bundle; 25e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepalimport android.os.Parcel; 26e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepalimport android.os.Parcelable; 27e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepalimport android.util.DisplayMetrics; 28e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 29e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepalimport java.util.MissingResourceException; 30e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 31e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal/** 32e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal * Contains status label and icon displayed in the in-call UI. 33e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal */ 34e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepalpublic final class StatusHints implements Parcelable { 35e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 36e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal private final ComponentName mComponentName; 37e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal private final String mLabel; 38e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal private final int mIconId; 39612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal private final Bundle mExtras; 40e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 41612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal public StatusHints(ComponentName componentName, String label, int iconId, Bundle extras) { 42e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal mComponentName = componentName; 43e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal mLabel = label; 44e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal mIconId = iconId; 45612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal mExtras = extras; 46e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 47e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 48e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal /** 49e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal * @return A component used to load the icon. 50e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal */ 51e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal public ComponentName getComponentName() { 52e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal return mComponentName; 53e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 54e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 55e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal /** 56e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal * @return The label displayed in the in-call UI. 57e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal */ 58e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal public String getLabel() { 59e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal return mLabel; 60e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 61e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 62e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal /** 63e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal * @return The icon resource identifier. 64e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal */ 65e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal public int getIconId() { 66e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal return mIconId; 67e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 68e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 69e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal /** 70e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal * @return An icon displayed in the in-call UI. 71e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal */ 72e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal public Drawable getIcon(Context context) { 73e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal return getIcon(context, mIconId); 74e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 75e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 76612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal /** 77612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal * @return Extra data used to display status. 78612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal */ 79612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal public Bundle getExtras() { 80612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal return mExtras; 81612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal } 82612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal 83e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal @Override 84e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal public int describeContents() { 85e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal return 0; 86e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 87e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 88e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal @Override 89e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal public void writeToParcel(Parcel out, int flags) { 90e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal out.writeParcelable(mComponentName, flags); 91e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal out.writeString(mLabel); 92e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal out.writeInt(mIconId); 93612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal out.writeParcelable(mExtras, 0); 94e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 95e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 96e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal public static final Creator<StatusHints> CREATOR 97e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal = new Creator<StatusHints>() { 98e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal public StatusHints createFromParcel(Parcel in) { 99e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal return new StatusHints(in); 100e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 101e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 102e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal public StatusHints[] newArray(int size) { 103e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal return new StatusHints[size]; 104e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 105e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal }; 106e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 107e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal private StatusHints(Parcel in) { 108e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal mComponentName = in.readParcelable(getClass().getClassLoader()); 109e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal mLabel = in.readString(); 110e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal mIconId = in.readInt(); 111612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal mExtras = (Bundle) in.readParcelable(getClass().getClassLoader()); 112e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 113e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal 114e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal private Drawable getIcon(Context context, int resId) { 115e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal Context packageContext; 116e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal try { 117e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal packageContext = context.createPackageContext(mComponentName.getPackageName(), 0); 118e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } catch (PackageManager.NameNotFoundException e) { 119e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal Log.e(this, e, "Cannot find package %s", mComponentName.getPackageName()); 120e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal return null; 121e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 122e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal try { 123e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal return packageContext.getResources().getDrawable(resId); 124e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } catch (MissingResourceException e) { 125e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal Log.e(this, e, "Cannot find icon %d in package %s", 126e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal resId, mComponentName.getPackageName()); 127e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal return null; 128e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 129e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal } 130e7ef59a77d55c9802cc7d919f7dd794bd5fea30eSailesh Nepal} 131