12c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer/*
22c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer * Copyright (c) 2016, The Android Open Source Project
32c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer *
42c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer * Licensed under the Apache License, Version 2.0 (the "License");
52c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer * you may not use this file except in compliance with the License.
62c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer * You may obtain a copy of the License at
72c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer *
82c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer *     http://www.apache.org/licenses/LICENSE-2.0
92c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer *
102c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer * Unless required by applicable law or agreed to in writing, software
112c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer * distributed under the License is distributed on an "AS IS" BASIS,
122c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer * See the License for the specific language governing permissions and
142c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer * limitations under the License.
152c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer */
162c9394097967d01f79f76148bbaebed5324a529fRakesh Iyerpackage com.android.car.stream;
172c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
182c9394097967d01f79f76148bbaebed5324a529fRakesh Iyerimport android.app.PendingIntent;
192c9394097967d01f79f76148bbaebed5324a529fRakesh Iyerimport android.graphics.Bitmap;
202c9394097967d01f79f76148bbaebed5324a529fRakesh Iyerimport android.os.Bundle;
212c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
222c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer/**
232c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer * An extension to {@link StreamCard} that holds data specific to current call events.
242c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer */
252c9394097967d01f79f76148bbaebed5324a529fRakesh Iyerpublic class CurrentCallExtension extends StreamCardExtension {
262c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private static final int INVALID_CALL_STATE = -1;
272c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
282c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private static final String MUTE_ACTION_KEY = "mute_action";
292c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private static final String UNMUTE_ACTION_KEY = "unmute_action";
302c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private static final String ACCEPT_CALL_ACTION_KEY = "accept_call_action";
312c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private static final String HANGUP_CALL_ACTION_KEY = "hangup_call_action";
322c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private static final String CALL_START_TIME_KEY_KEY = "call_start_time";
332c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private static final String CALL_STATE_KEY = "call_state";
342c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private static final String IS_MUTED_KEY = "is_muted";
352c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private static final String DISPLAY_NAME_KEY = "display_name";
362c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private static final String CONTACT_PHOTO_KEY = "contact_photo";
372c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
382c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private long mCallStartTime;
392c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private String mDisplayName;
402c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private int mCallState = INVALID_CALL_STATE;
412c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private boolean mIsMuted;
422c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
432c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private Bitmap mContactPhoto;
442c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
452c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private PendingIntent mMuteAction;
462c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private PendingIntent mUnMuteAction;
472c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private PendingIntent mAcceptCallAction;
482c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    private PendingIntent mHangupCallAction;
492c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
502c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    public static final Creator<CurrentCallExtension> CREATOR
512c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer            = new BundleableCreator<>(CurrentCallExtension.class);
522c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
532c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    public CurrentCallExtension() {}
542c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
552c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    public CurrentCallExtension(
562c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer            long callStartTime,
572c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer            String displayName,
582c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer            int callState,
592c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer            boolean isMuted,
602c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer            Bitmap contactPhoto,
612c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer            PendingIntent muteAction,
622c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer            PendingIntent unMuteAction,
632c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer            PendingIntent acceptCallAction,
642c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer            PendingIntent hangupCallAction) {
652c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mCallStartTime = callStartTime;
662c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mDisplayName = displayName;
672c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mCallState = callState;
682c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mIsMuted = isMuted;
692c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mContactPhoto = contactPhoto;
702c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mMuteAction = muteAction;
712c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mUnMuteAction = unMuteAction;
722c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mAcceptCallAction = acceptCallAction;
732c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mHangupCallAction = hangupCallAction;
742c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    }
752c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
762c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    @Override
772c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    protected void writeToBundle(Bundle bundle) {
782c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        bundle.putString(DISPLAY_NAME_KEY, mDisplayName);
792c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        bundle.putInt(CALL_STATE_KEY, mCallState);
802c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        bundle.putBoolean(IS_MUTED_KEY, mIsMuted);
812c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        bundle.putParcelable(CONTACT_PHOTO_KEY, mContactPhoto);
822c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        bundle.putLong(CALL_START_TIME_KEY_KEY, mCallStartTime);
832c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
842c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        bundle.putParcelable(MUTE_ACTION_KEY, mMuteAction);
852c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        bundle.putParcelable(UNMUTE_ACTION_KEY, mUnMuteAction);
862c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        bundle.putParcelable(ACCEPT_CALL_ACTION_KEY, mAcceptCallAction);
872c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        bundle.putParcelable(HANGUP_CALL_ACTION_KEY, mHangupCallAction);
882c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    }
892c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
902c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    @Override
912c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    protected void readFromBundle(Bundle bundle) {
922c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mDisplayName = bundle.getString(DISPLAY_NAME_KEY);
932c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mCallState = bundle.getInt(CALL_STATE_KEY, INVALID_CALL_STATE);
942c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
952c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mIsMuted = bundle.getBoolean(IS_MUTED_KEY);
962c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mContactPhoto = bundle.getParcelable(CONTACT_PHOTO_KEY);
972c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mCallStartTime = bundle.getLong(CALL_START_TIME_KEY_KEY);
982c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
992c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mMuteAction = bundle.getParcelable(MUTE_ACTION_KEY);
1002c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mUnMuteAction = bundle.getParcelable(UNMUTE_ACTION_KEY);
1012c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mAcceptCallAction = bundle.getParcelable(ACCEPT_CALL_ACTION_KEY);
1022c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        mHangupCallAction = bundle.getParcelable(HANGUP_CALL_ACTION_KEY);
1032c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    }
1042c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
1052c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    public String getDisplayName() {
1062c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        return mDisplayName;
1072c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    }
1082c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
1092c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    public PendingIntent getHangupCallAction() {
1102c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        return mHangupCallAction;
1112c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    }
1122c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
1132c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    public PendingIntent getAcceptCallAction() {
1142c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        return mAcceptCallAction;
1152c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    }
1162c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
1172c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    public PendingIntent getUnMuteAction() {
1182c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        return mUnMuteAction;
1192c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    }
1202c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
1212c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    public PendingIntent getMuteAction() {
1222c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        return mMuteAction;
1232c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    }
1242c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
1252c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    public int getCallState() {
1262c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        return mCallState;
1272c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    }
1282c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
1292c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    public long getCallStartTime() {
1302c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        return mCallStartTime;
1312c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    }
1322c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
1332c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    public boolean isMuted() {
1342c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        return mIsMuted;
1352c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    }
1362c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer
1372c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    public Bitmap getContactPhoto() {
1382c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer        return mContactPhoto;
1392c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer    }
1402c9394097967d01f79f76148bbaebed5324a529fRakesh Iyer}
141