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