1d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd/*
2d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Copyright (C) 2015 The Android Open Source Project
3d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd *
4d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Licensed under the Apache License, Version 2.0 (the "License");
5d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * you may not use this file except in compliance with the License.
6d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * You may obtain a copy of the License at
7d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd *
8d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd *      http://www.apache.org/licenses/LICENSE-2.0
9d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd *
10d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Unless required by applicable law or agreed to in writing, software
11d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * distributed under the License is distributed on an "AS IS" BASIS,
12d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * See the License for the specific language governing permissions and
14d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * limitations under the License.
15d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */
16d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddpackage com.android.messaging.datamodel.data;
17d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
18d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.content.Intent;
19d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.net.Uri;
20d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
21d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.binding.BindableData;
22d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
23d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd/**
24d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Bridges between any particpant/contact related data and data displayed in the PersonItemView.
25d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */
26d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddpublic abstract class PersonItemData extends BindableData {
27d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    /**
28d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     * The UI component that listens for data change and update accordingly.
29d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd     */
30d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public interface PersonItemDataListener {
31d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        void onPersonDataUpdated(PersonItemData data);
32d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        void onPersonDataFailed(PersonItemData data, Exception exception);
33d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    }
34d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
35d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    private PersonItemDataListener mListener;
36d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
37d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public abstract Uri getAvatarUri();
38d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public abstract String getDisplayName();
39d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public abstract String getDetails();
40d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public abstract Intent getClickIntent();
41d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public abstract long getContactId();
42d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public abstract String getLookupKey();
43d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public abstract String getNormalizedDestination();
44d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
45d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    public void setListener(final PersonItemDataListener listener) {
46d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        if (isBound()) {
47d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd            mListener = listener;
48d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        }
49d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    }
50d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
51d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    protected void notifyDataUpdated() {
52d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        if (isBound() && mListener != null) {
53d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd            mListener.onPersonDataUpdated(this);
54d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        }
55d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    }
56d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
57d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    protected void notifyDataFailed(final Exception exception) {
58d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        if (isBound() && mListener != null) {
59d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd            mListener.onPersonDataFailed(this, exception);
60d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        }
61d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    }
62d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd
63d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    @Override
64d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    protected void unregisterListeners() {
65d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd        mListener = null;
66d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd    }
67d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd}
68