1/*
2 * Copyright (c) 2016, The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *     http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package com.android.car.stream;
17
18import android.app.PendingIntent;
19import android.graphics.Bitmap;
20import android.os.Bundle;
21
22/**
23 * An extension to {@link StreamCard} that holds data specific to current call events.
24 */
25public class CurrentCallExtension extends StreamCardExtension {
26    private static final int INVALID_CALL_STATE = -1;
27
28    private static final String MUTE_ACTION_KEY = "mute_action";
29    private static final String UNMUTE_ACTION_KEY = "unmute_action";
30    private static final String ACCEPT_CALL_ACTION_KEY = "accept_call_action";
31    private static final String HANGUP_CALL_ACTION_KEY = "hangup_call_action";
32    private static final String CALL_START_TIME_KEY_KEY = "call_start_time";
33    private static final String CALL_STATE_KEY = "call_state";
34    private static final String IS_MUTED_KEY = "is_muted";
35    private static final String DISPLAY_NAME_KEY = "display_name";
36    private static final String CONTACT_PHOTO_KEY = "contact_photo";
37
38    private long mCallStartTime;
39    private String mDisplayName;
40    private int mCallState = INVALID_CALL_STATE;
41    private boolean mIsMuted;
42
43    private Bitmap mContactPhoto;
44
45    private PendingIntent mMuteAction;
46    private PendingIntent mUnMuteAction;
47    private PendingIntent mAcceptCallAction;
48    private PendingIntent mHangupCallAction;
49
50    public static final Creator<CurrentCallExtension> CREATOR
51            = new BundleableCreator<>(CurrentCallExtension.class);
52
53    public CurrentCallExtension() {}
54
55    public CurrentCallExtension(
56            long callStartTime,
57            String displayName,
58            int callState,
59            boolean isMuted,
60            Bitmap contactPhoto,
61            PendingIntent muteAction,
62            PendingIntent unMuteAction,
63            PendingIntent acceptCallAction,
64            PendingIntent hangupCallAction) {
65        mCallStartTime = callStartTime;
66        mDisplayName = displayName;
67        mCallState = callState;
68        mIsMuted = isMuted;
69        mContactPhoto = contactPhoto;
70        mMuteAction = muteAction;
71        mUnMuteAction = unMuteAction;
72        mAcceptCallAction = acceptCallAction;
73        mHangupCallAction = hangupCallAction;
74    }
75
76    @Override
77    protected void writeToBundle(Bundle bundle) {
78        bundle.putString(DISPLAY_NAME_KEY, mDisplayName);
79        bundle.putInt(CALL_STATE_KEY, mCallState);
80        bundle.putBoolean(IS_MUTED_KEY, mIsMuted);
81        bundle.putParcelable(CONTACT_PHOTO_KEY, mContactPhoto);
82        bundle.putLong(CALL_START_TIME_KEY_KEY, mCallStartTime);
83
84        bundle.putParcelable(MUTE_ACTION_KEY, mMuteAction);
85        bundle.putParcelable(UNMUTE_ACTION_KEY, mUnMuteAction);
86        bundle.putParcelable(ACCEPT_CALL_ACTION_KEY, mAcceptCallAction);
87        bundle.putParcelable(HANGUP_CALL_ACTION_KEY, mHangupCallAction);
88    }
89
90    @Override
91    protected void readFromBundle(Bundle bundle) {
92        mDisplayName = bundle.getString(DISPLAY_NAME_KEY);
93        mCallState = bundle.getInt(CALL_STATE_KEY, INVALID_CALL_STATE);
94
95        mIsMuted = bundle.getBoolean(IS_MUTED_KEY);
96        mContactPhoto = bundle.getParcelable(CONTACT_PHOTO_KEY);
97        mCallStartTime = bundle.getLong(CALL_START_TIME_KEY_KEY);
98
99        mMuteAction = bundle.getParcelable(MUTE_ACTION_KEY);
100        mUnMuteAction = bundle.getParcelable(UNMUTE_ACTION_KEY);
101        mAcceptCallAction = bundle.getParcelable(ACCEPT_CALL_ACTION_KEY);
102        mHangupCallAction = bundle.getParcelable(HANGUP_CALL_ACTION_KEY);
103    }
104
105    public String getDisplayName() {
106        return mDisplayName;
107    }
108
109    public PendingIntent getHangupCallAction() {
110        return mHangupCallAction;
111    }
112
113    public PendingIntent getAcceptCallAction() {
114        return mAcceptCallAction;
115    }
116
117    public PendingIntent getUnMuteAction() {
118        return mUnMuteAction;
119    }
120
121    public PendingIntent getMuteAction() {
122        return mMuteAction;
123    }
124
125    public int getCallState() {
126        return mCallState;
127    }
128
129    public long getCallStartTime() {
130        return mCallStartTime;
131    }
132
133    public boolean isMuted() {
134        return mIsMuted;
135    }
136
137    public Bitmap getContactPhoto() {
138        return mContactPhoto;
139    }
140}
141