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