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