11869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn/*
21869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn * Copyright (C) 2014 The Android Open Source Project
31869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn *
41869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn * Licensed under the Apache License, Version 2.0 (the "License");
51869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn * you may not use this file except in compliance with the License.
61869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn * You may obtain a copy of the License at
71869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn *
81869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn *      http://www.apache.org/licenses/LICENSE-2.0
91869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn *
101869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn * Unless required by applicable law or agreed to in writing, software
111869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn * distributed under the License is distributed on an "AS IS" BASIS,
121869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn * See the License for the specific language governing permissions and
141869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn * limitations under the License
151869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn */
161869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn
171869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunnpackage com.android.incallui;
181869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn
191869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunnimport com.google.common.base.Preconditions;
201869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn
21cbbbfcba0c68498cde93da2e9b10e748cc5e91efJay Shraunerimport java.util.Collections;
221869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunnimport java.util.Set;
23cbbbfcba0c68498cde93da2e9b10e748cc5e91efJay Shraunerimport java.util.concurrent.ConcurrentHashMap;
241869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn
251869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn/**
26b73b8ba04f32faeeb8c11e28ab4fc19b81daf653Andrew Lee * Class used by {@link InCallService.VideoCallCallback} to notify interested parties of incoming
279c4226952c74f024c09e0bd381048493993c974eAndrew Lee * events.
281869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn */
29b73b8ba04f32faeeb8c11e28ab4fc19b81daf653Andrew Leepublic class InCallVideoCallCallbackNotifier {
301869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn    /**
311869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     * Singleton instance of this class.
321869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     */
33b73b8ba04f32faeeb8c11e28ab4fc19b81daf653Andrew Lee    private static InCallVideoCallCallbackNotifier sInstance =
34b73b8ba04f32faeeb8c11e28ab4fc19b81daf653Andrew Lee            new InCallVideoCallCallbackNotifier();
351869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn
36cbbbfcba0c68498cde93da2e9b10e748cc5e91efJay Shrauner    /**
37cbbbfcba0c68498cde93da2e9b10e748cc5e91efJay Shrauner     * ConcurrentHashMap constructor params: 8 is initial table size, 0.9f is
38cbbbfcba0c68498cde93da2e9b10e748cc5e91efJay Shrauner     * load factor before resizing, 1 means we only expect a single thread to
39cbbbfcba0c68498cde93da2e9b10e748cc5e91efJay Shrauner     * access the map so make only a single shard
40cbbbfcba0c68498cde93da2e9b10e748cc5e91efJay Shrauner     */
411869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn    private final Set<SessionModificationListener> mSessionModificationListeners =
42cbbbfcba0c68498cde93da2e9b10e748cc5e91efJay Shrauner            Collections.newSetFromMap(new ConcurrentHashMap<SessionModificationListener, Boolean>
43cbbbfcba0c68498cde93da2e9b10e748cc5e91efJay Shrauner                    (8, 0.9f, 1));
44cbbbfcba0c68498cde93da2e9b10e748cc5e91efJay Shrauner    private final Set<VideoEventListener> mVideoEventListeners = Collections.newSetFromMap(
45cbbbfcba0c68498cde93da2e9b10e748cc5e91efJay Shrauner            new ConcurrentHashMap<VideoEventListener, Boolean>(8, 0.9f, 1));
46cbbbfcba0c68498cde93da2e9b10e748cc5e91efJay Shrauner    private final Set<SurfaceChangeListener> mSurfaceChangeListeners = Collections.newSetFromMap(
47cbbbfcba0c68498cde93da2e9b10e748cc5e91efJay Shrauner            new ConcurrentHashMap<SurfaceChangeListener, Boolean>(8, 0.9f, 1));
481869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn
491869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn    /**
501869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     * Static singleton accessor method.
511869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     */
52b73b8ba04f32faeeb8c11e28ab4fc19b81daf653Andrew Lee    public static InCallVideoCallCallbackNotifier getInstance() {
531869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn        return sInstance;
541869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn    }
551869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn
561869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn    /**
571869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     * Private constructor.  Instance should only be acquired through getInstance().
581869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     */
59b73b8ba04f32faeeb8c11e28ab4fc19b81daf653Andrew Lee    private InCallVideoCallCallbackNotifier() {
601869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn    }
611869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn
621869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn    /**
631869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     * Adds a new {@link SessionModificationListener}.
641869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     *
651869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     * @param listener The listener.
661869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     */
671869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn    public void addSessionModificationListener(SessionModificationListener listener) {
681869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn        Preconditions.checkNotNull(listener);
691869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn        mSessionModificationListeners.add(listener);
701869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn    }
711869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn
721869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn    /**
731869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     * Remove a {@link SessionModificationListener}.
741869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     *
751869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     * @param listener The listener.
761869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     */
771869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn    public void removeSessionModificationListener(SessionModificationListener listener) {
78cbbbfcba0c68498cde93da2e9b10e748cc5e91efJay Shrauner        if (listener != null) {
79cbbbfcba0c68498cde93da2e9b10e748cc5e91efJay Shrauner            mSessionModificationListeners.remove(listener);
80cbbbfcba0c68498cde93da2e9b10e748cc5e91efJay Shrauner        }
811869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn    }
821869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn
831869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn    /**
841869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     * Adds a new {@link VideoEventListener}.
851869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     *
861869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     * @param listener The listener.
871869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     */
881869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn    public void addVideoEventListener(VideoEventListener listener) {
891869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn        Preconditions.checkNotNull(listener);
901869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn        mVideoEventListeners.add(listener);
911869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn    }
921869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn
931869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn    /**
941869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     * Remove a {@link VideoEventListener}.
951869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     *
961869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     * @param listener The listener.
971869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     */
981869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn    public void removeVideoEventListener(VideoEventListener listener) {
99cbbbfcba0c68498cde93da2e9b10e748cc5e91efJay Shrauner        if (listener != null) {
100cbbbfcba0c68498cde93da2e9b10e748cc5e91efJay Shrauner            mVideoEventListeners.remove(listener);
101cbbbfcba0c68498cde93da2e9b10e748cc5e91efJay Shrauner        }
1021869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn    }
1031869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn
1041869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn    /**
1051869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     * Adds a new {@link SurfaceChangeListener}.
1061869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     *
1071869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     * @param listener The listener.
1081869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     */
1091869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn    public void addSurfaceChangeListener(SurfaceChangeListener listener) {
1101869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn        Preconditions.checkNotNull(listener);
1111869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn        mSurfaceChangeListeners.add(listener);
1121869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn    }
1131869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn
1141869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn    /**
1151869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     * Remove a {@link SurfaceChangeListener}.
1161869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     *
1171869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     * @param listener The listener.
1181869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     */
1191869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn    public void removeSurfaceChangeListener(SurfaceChangeListener listener) {
120cbbbfcba0c68498cde93da2e9b10e748cc5e91efJay Shrauner        if (listener != null) {
121cbbbfcba0c68498cde93da2e9b10e748cc5e91efJay Shrauner            mSurfaceChangeListeners.remove(listener);
122cbbbfcba0c68498cde93da2e9b10e748cc5e91efJay Shrauner        }
1231869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn    }
1241869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn
1251869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn    /**
1261869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     * Inform listeners of an upgrade to video request for a call.
1271869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     * @param call The call.
12818c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar     * @param videoState The video state we want to upgrade to.
1291869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     */
13018c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar    public void upgradeToVideoRequest(Call call, int videoState) {
13118c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar        Log.d(this, "upgradeToVideoRequest call = " + call + " new video state = " + videoState);
1321869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn        for (SessionModificationListener listener : mSessionModificationListeners) {
13318c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar            listener.onUpgradeToVideoRequest(call, videoState);
1341869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn        }
1351869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn    }
1361869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn
1371869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn    /**
13818c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar     * Inform listeners of a call session event.
13918c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar     *
14018c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar     * @param event The call session event.
14118c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar     */
14218c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar    public void callSessionEvent(int event) {
14318c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar        for (VideoEventListener listener : mVideoEventListeners) {
14418c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar            listener.onCallSessionEvent(event);
14518c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar        }
14618c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar    }
14718c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar
14818c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar    /**
1491869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     * Inform listeners of a downgrade to audio.
1501869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     *
1511869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     * @param call The call.
1521869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     * @param paused The paused state.
1531869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     */
1541869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn    public void peerPausedStateChanged(Call call, boolean paused) {
1551869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn        for (VideoEventListener listener : mVideoEventListeners) {
1561869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn            listener.onPeerPauseStateChanged(call, paused);
1571869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn        }
1581869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn    }
1591869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn
1601869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn    /**
16118c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar     * Inform listeners of any change in the video quality of the call
16218c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar     *
16318c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar     * @param call The call.
16418c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar     * @param videoQuality The updated video quality of the call.
16518c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar     */
16618c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar    public void videoQualityChanged(Call call, int videoQuality) {
16718c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar        for (VideoEventListener listener : mVideoEventListeners) {
16818c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar            listener.onVideoQualityChanged(call, videoQuality);
16918c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar        }
17018c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar    }
17118c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar
17218c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar    /**
1731869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     * Inform listeners of a change to peer dimensions.
1741869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     *
1751869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     * @param call The call.
1761869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     * @param width New peer width.
1771869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     * @param height New peer height.
1781869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     */
1791869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn    public void peerDimensionsChanged(Call call, int width, int height) {
1801869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn        for (SurfaceChangeListener listener : mSurfaceChangeListeners) {
1811869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn            listener.onUpdatePeerDimensions(call, width, height);
1821869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn        }
1831869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn    }
1841869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn
1851869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn    /**
186350fff554bf7ed5b9e91985935488771156953abTyler Gunn     * Inform listeners of a change to camera dimensions.
187350fff554bf7ed5b9e91985935488771156953abTyler Gunn     *
188350fff554bf7ed5b9e91985935488771156953abTyler Gunn     * @param call The call.
189350fff554bf7ed5b9e91985935488771156953abTyler Gunn     * @param width The new camera video width.
190350fff554bf7ed5b9e91985935488771156953abTyler Gunn     * @param height The new camera video height.
191350fff554bf7ed5b9e91985935488771156953abTyler Gunn     */
192350fff554bf7ed5b9e91985935488771156953abTyler Gunn    public void cameraDimensionsChanged(Call call, int width, int height) {
193350fff554bf7ed5b9e91985935488771156953abTyler Gunn        for (SurfaceChangeListener listener : mSurfaceChangeListeners) {
194350fff554bf7ed5b9e91985935488771156953abTyler Gunn            listener.onCameraDimensionsChange(call, width, height);
195350fff554bf7ed5b9e91985935488771156953abTyler Gunn        }
196350fff554bf7ed5b9e91985935488771156953abTyler Gunn    }
197350fff554bf7ed5b9e91985935488771156953abTyler Gunn
198350fff554bf7ed5b9e91985935488771156953abTyler Gunn    /**
19918c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar     * Inform listeners of a change to call data usage.
20018c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar     *
20118c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar     * @param dataUsage data usage value
20218c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar     */
20318c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar    public void callDataUsageChanged(long dataUsage) {
20418c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar        for (VideoEventListener listener : mVideoEventListeners) {
20518c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar            listener.onCallDataUsageChange(dataUsage);
20618c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar        }
20718c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar    }
20818c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar
20918c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar    /**
210207029be4c95b6d66ef4bd3c2277a9ba9e0c62a1Tyler Gunn     * Listener interface for any class that wants to be notified of upgrade to video request.
2111869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     */
2121869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn    public interface SessionModificationListener {
2131869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn        /**
2141869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn         * Called when a peer request is received to upgrade an audio-only call to a video call.
2151869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn         *
2161869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn         * @param call The call the request was received for.
217207029be4c95b6d66ef4bd3c2277a9ba9e0c62a1Tyler Gunn         * @param videoState The requested video state.
2181869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn         */
21918c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar        public void onUpgradeToVideoRequest(Call call, int videoState);
2201869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn    }
2211869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn
2221869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn    /**
2231869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     * Listener interface for any class that wants to be notified of video events, including pause
22418c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar     * and un-pause of peer video, video quality changes.
2251869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     */
2261869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn    public interface VideoEventListener {
2271869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn        /**
2281869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn         * Called when the peer pauses or un-pauses video transmission.
2291869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn         *
2301869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn         * @param call   The call which paused or un-paused video transmission.
2311869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn         * @param paused {@code True} when the video transmission is paused, {@code false}
2321869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn         *               otherwise.
2331869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn         */
2341869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn        public void onPeerPauseStateChanged(Call call, boolean paused);
23518c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar
23618c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar        /**
23718c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar         * Called when the video quality changes.
23818c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar         *
23918c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar         * @param call   The call whose video quality changes.
24018c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar         * @param videoCallQuality - values are QUALITY_HIGH, MEDIUM, LOW and UNKNOWN.
24118c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar         */
24218c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar        public void onVideoQualityChanged(Call call, int videoCallQuality);
24318c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar
24418c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar        /*
24518c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar         * Called when call data usage value is requested or when call data usage value is updated
24618c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar         * because of a call state change
24718c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar         *
24818c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar         * @param dataUsage call data usage value
24918c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar         */
25018c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar        public void onCallDataUsageChange(long dataUsage);
25118c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar
25218c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar        /**
25318c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar         * Called when call session event is raised.
25418c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar         *
25518c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar         * @param event The call session event.
25618c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar         */
25718c0feda76fe333f3db1bf7bd307458a9e6b6005Rekha Kumar        public void onCallSessionEvent(int event);
2581869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn    }
2591869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn
2601869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn    /**
2611869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     * Listener interface for any class that wants to be notified of changes to the video surfaces.
2621869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn     */
2631869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn    public interface SurfaceChangeListener {
2641869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn        /**
2651869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn         * Called when the peer video feed changes dimensions. This can occur when the peer rotates
2661869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn         * their device, changing the aspect ratio of the video signal.
2671869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn         *
2681869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn         * @param call The call which experienced a peer video
2691869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn         * @param width
2701869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn         * @param height
2711869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn         */
2721869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn        public void onUpdatePeerDimensions(Call call, int width, int height);
273350fff554bf7ed5b9e91985935488771156953abTyler Gunn
274350fff554bf7ed5b9e91985935488771156953abTyler Gunn        /**
275350fff554bf7ed5b9e91985935488771156953abTyler Gunn         * Called when the local camera changes dimensions.  This occurs when a change in camera
276350fff554bf7ed5b9e91985935488771156953abTyler Gunn         * occurs.
277350fff554bf7ed5b9e91985935488771156953abTyler Gunn         *
278350fff554bf7ed5b9e91985935488771156953abTyler Gunn         * @param call The call which experienced the camera dimension change.
279350fff554bf7ed5b9e91985935488771156953abTyler Gunn         * @param width The new camera video width.
280350fff554bf7ed5b9e91985935488771156953abTyler Gunn         * @param height The new camera video height.
281350fff554bf7ed5b9e91985935488771156953abTyler Gunn         */
282350fff554bf7ed5b9e91985935488771156953abTyler Gunn        public void onCameraDimensionsChange(Call call, int width, int height);
2831869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn    }
2841869dcf386a96f060a16ac74f1722d816b69aa7dTyler Gunn}
285