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