Meeting SDK for Android API Reference
Loading...
Searching...
No Matches
MobileRTCVideoView.java
Go to the documentation of this file.
1package us.zoom.sdk;
2
3import android.app.Activity;
4import android.content.Context;
5import android.content.ContextWrapper;
6import android.graphics.Rect;
7import android.os.Build;
8import android.os.Bundle;
9import android.util.AttributeSet;
10import android.util.Log;
11import android.view.GestureDetector;
12import android.view.LayoutInflater;
13import android.view.MotionEvent;
14import android.view.View;
15import android.view.ViewGroup;
16import android.widget.FrameLayout;
17import android.widget.RelativeLayout;
18
19import androidx.annotation.NonNull;
20import androidx.annotation.Nullable;
21import androidx.fragment.app.Fragment;
22import androidx.fragment.app.FragmentActivity;
23
24import com.zipow.videobox.mainboard.Mainboard;
25import com.zipow.videobox.mainboard.ZmMainBoardMgr;
26import com.zipow.videobox.mainboard.module.ZmSdkMainBoard;
27import com.zipow.videobox.sdk.SDKConstants;
28import com.zipow.videobox.sdk.SDKMainHandler;
29import com.zipow.videobox.sdk.SDKShareInView;
30import com.zipow.videobox.sdk.SDKVideoRenderer;
31import com.zipow.videobox.sdk.SDKVideoView;
32import com.zipow.videobox.utils.ZmUtils;
33import com.zipow.videobox.view.video.VideoRenderer;
34
35import javax.microedition.khronos.opengles.GL10;
36
37import kotlin.Unit;
38import kotlin.jvm.functions.Function1;
39import us.zoom.business.common.ZmBusinessModuleMgr;
40import us.zoom.common.crossplatform.cmmlib.BuildConfig;
41import us.zoom.core.helper.ZMLog;
42import us.zoom.internal.impl.InMeetingShareControllerImpl;
43import us.zoom.docs.bridge.tocpp.IConfZoomDocs;
44import us.zoom.docs.conf.cplusenum.WebViewInstanceTag;
45import us.zoom.docs.service.StaticInnerService;
46import us.zoom.docs.ui.share.ZoomDocsShareFragment;
47import us.zoom.hybrid.safeweb.core.WebHelper;
48import us.zoom.internal.impl.InMeetingWhiteboardControllerImpl;
49import us.zoom.internal.jni.bean.CmmDocsCollaborationSource;
50import us.zoom.internal.jni.helper.ZoomMeetingSDKBridgeHelper;
51import us.zoom.internal.jni.helper.ZoomMeetingSDKDocsHelper;
52import us.zoom.internal.view.SDKWBViewerFragment;
53import us.zoom.libtools.fragmentmanager.ISafeTransaction;
54import us.zoom.libtools.fragmentmanager.SafeTransactionKt;
55import us.zoom.libtools.storage.PreferenceUtil;
56import us.zoom.libtools.utils.ZmDeviceUtils;
57import us.zoom.internal.SDKCustomizedMeetingUIHelper;
58import us.zoom.internal.SDKDisclaimerDialogManager;
59import us.zoom.internal.impl.MobileRTCVideoViewManagerImpl;
60import us.zoom.libtools.utils.ZmStringUtils;
61import us.zoom.unite.cplusenum.UnifyWebViewAppType;
62import us.zoom.unite.logic.UniteBaseLogic;
63import us.zoom.videomeetings.R;
64
71public class MobileRTCVideoView extends RelativeLayout implements SDKVideoView.Listener, GestureDetector.OnGestureListener, GestureDetector.OnDoubleTapListener {
72
73 private final static String TAG = MobileRTCVideoView.class.getSimpleName();
74
75 @Nullable
76 private Activity activity;
77
78 @Nullable
79 private MobileRTCVideoViewManagerImpl mVideoViewMgr;
81
82 private ViewGroup mView;
83 private SDKVideoView mVideoView;
84 private SDKShareInView mShareView;
85 private GestureDetector mGestureDetector;
86
87 @Nullable
88 private FrameLayout mFragmentContainer;
89
90 private InMeetingWhiteboardControllerImpl inMeetingWhiteboardController;
91
92 public MobileRTCVideoView(Context context) {
93 this(context, null);
94 }
95
96 public MobileRTCVideoView(Context context, AttributeSet attrs) {
97 super(context, attrs);
98 init(context);
99 }
100
101 public MobileRTCVideoView(Context context, AttributeSet attrs, int defStyle) {
102 super(context, attrs, defStyle);
103 init(context);
104 }
105
106 private void init(Context context) {
107 mView = (ViewGroup)LayoutInflater.from(context).inflate(R.layout.zm_videoview_sdk, null, false);
108 mVideoView = (SDKVideoView) mView.findViewById(R.id.videoContainer);
109 mShareView = (SDKShareInView)mView.findViewById(R.id.zm_sdk_viewingShare);
110 mFragmentContainer = (FrameLayout) mView.findViewById(R.id.wbFragmentContainer);
111 mGestureDetector = new GestureDetector(context, this);
112 mGestureDetector.setOnDoubleTapListener(this);
113 mGestureDetector.setIsLongpressEnabled(false);
114 initVideoView(context);
115 mVideoViewMgr = new MobileRTCVideoViewManagerImpl(this, mVideoRender, mShareView);
117 if (inMeetingService != null) {
118 InMeetingWhiteboardController wbController = inMeetingService.getInMeetingWhiteboardController();
119 if (wbController instanceof InMeetingWhiteboardControllerImpl) {
120 inMeetingWhiteboardController = (InMeetingWhiteboardControllerImpl) wbController;
121 }
122 }
123 this.addView(mView);
124 initActivity(context);
125 }
126
127 private void initVideoView(Context context) {
128 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
129 mVideoView.setPreserveEGLContextOnPause(true);
131 mVideoView.setRenderer(mVideoRender);
132 mVideoView.setListener(this);
133 }
134
139 public void setGestureDetectorEnabled(boolean isEnabled) {
140 if(!isInEditMode() && isEnabled) {
141 mVideoView.setGestureDetector(mGestureDetector);
142 } else {
143 mVideoView.setGestureDetector(null);
144 }
145 }
146
157 public void setZOrderMediaOverlay(boolean isMediaOverlay) {
158 ZoomMeetingSDKBridgeHelper.getInstance().trackingMSDKInteractEvent(TAG, "setZOrderMediaOverlay", MobileRTCSDKError.SDKERR_SUCCESS.ordinal());
159 mVideoView.setZOrderMediaOverlay(isMediaOverlay);
160 }
161
173 public void setZOrderOnTop(boolean onTop) {
174 ZoomMeetingSDKBridgeHelper.getInstance().trackingMSDKInteractEvent(TAG, "setZOrderOnTop", MobileRTCSDKError.SDKERR_SUCCESS.ordinal());
175 mVideoView.setZOrderOnTop(onTop);
176 }
177
183 if(!SDKCustomizedMeetingUIHelper.isSdkEnableCustomizedUI()|| !SDKCustomizedMeetingUIHelper.isSdkUsingCustomizedMeetingUI()) {
184 return null;
185 }
186
187 Mainboard mainboard = ZmMainBoardMgr.getMainboard();
188 if(mainboard != null && !((ZmSdkMainBoard)mainboard.getSdkMainBoard()).isSDKConfAppCreated()) {
189 return null;
190 }
191
192 return mVideoViewMgr;
193 }
194
196 if(SDKCustomizedMeetingUIHelper.isSdkEnableCustomizedUI() && SDKCustomizedMeetingUIHelper.isSdkUsingCustomizedMeetingUI()) {
197 return null;
198 }
199 Mainboard mainboard = ZmMainBoardMgr.getMainboard();
200 if(mainboard != null && !((ZmSdkMainBoard)mainboard.getSdkMainBoard()).isSDKConfAppCreated()) {
201 return null;
202 }
203
204 return mVideoViewMgr;
205 }
206
210 public void onPause() {
211 mVideoView.onPause();
212 mVideoRender.stopRequestRender();
213 }
214
218 public void onResume() {
219 mVideoView.onResume();
220 mVideoRender.requestRenderContinuously();
221 }
222
223 //=============================================================================
224 // implements GestureDetector.OnGestureListener begin
225 @Override
226 public boolean onDown(MotionEvent e) {
227 return true;
228 }
229
230 @Override
231 public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
232 float velocityY) {
233 if(mVideoViewMgr != null) {
234 mVideoViewMgr.onFling(e1, e2, velocityX, velocityY);
235 }
236 return true;
237 }
238
239 @Override
240 public void onLongPress(MotionEvent e) {
241 }
242
243 @Override
244 public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
245 float distanceY) {
246 if(mVideoViewMgr != null) {
247 mVideoViewMgr.onScroll(e1, e2, distanceX, distanceY);
248 }
249 return true;
250 }
251
252 @Override
253 public void onShowPress(MotionEvent e) {
254
255 }
256
257 @Override
258 public boolean onSingleTapUp(MotionEvent e) {
259 return true;
260 }
261 //=============================================================================
262
263 //=============================================================================
264 // implements GestureDetector.OnDoubleTapListener begin
265 @Override
266 public boolean onDoubleTap(MotionEvent e) {
267 if(mVideoViewMgr != null) {
268 mVideoViewMgr.onDoubleTap(e);
269 }
270 return true;
271 }
272
273 @Override
274 public boolean onDoubleTapEvent(MotionEvent e) {
275 return true;
276 }
277
278 @Override
279 public boolean onSingleTapConfirmed(MotionEvent e) {
280 return true;
281 }
282
283 protected boolean isVisibleToUser() {
284 if(!isShown()) {
285 return false;
286 }
287
288 Rect rect = new Rect();
289 if (getGlobalVisibleRect(rect)) {
290 if (rect.width() * rect.height() >= getMeasuredWidth() * getMeasuredHeight()/2) {
291 return true;
292 }
293 }
294 return false;
295 }
296
297 @Override
299 mVideoRender.beforeGLContextDestroyed();
300 }
301
302 @Override
303 public void surfaceCreated() {
304 Log.i(TAG, "surfaceCreated group index =" + mVideoRender.getGroupIndex());
305 }
306
307 @Override
308 public void surfaceDestroyed() {
309 Log.i(TAG, "surfaceDestroyed group index =" + mVideoRender.getGroupIndex());
310 mVideoViewMgr.onDestroy();
311 mVideoViewMgr.onSurfaceDestroyed();
312 }
313
314 public class MobileRTCVideoRender extends SDKVideoRenderer{
315
316 private static final int RENDERER_FPS = 25;
317 private static final int RENDERER_FPS_LOW_PERFORMANCE = 15;
318
319 private int mGroupIndex;
320
322
323 public MobileRTCVideoRender(SDKVideoView glView, int groupIndex) {
324 super(glView, groupIndex);
325 mGroupIndex = groupIndex;
326 }
327
328 @Override
329 public void onDrawFrame(GL10 gl, VideoRenderer renderer) {
330 long curTime = System.currentTimeMillis();
331 if(curTime < lastIdleTaskTime || curTime - lastIdleTaskTime > 500) {
332 lastIdleTaskTime = curTime;
333 SDKMainHandler.getInstance().post(new Runnable() {
334 @Override
335 public void run() {
337 }
338 });
339 }
340 }
341
342 public float getProperFPS() {
343 float fps = RENDERER_FPS;
344 if(ZmDeviceUtils.getCPUKernalNumbers() < 2 && ZmDeviceUtils.getCPUKernelFrequency(0, ZmDeviceUtils.FLAG_MAX_FREQUENCY) < 1400000) {
346 }
347 return fps;
348 }
349
350 @Override
351 protected void onGLSurfaceCreated() {
352 }
353
354 @Override
355 protected void onGLSurfaceChanged(final int width, final int height) {
356 Log.i(TAG, "onGLSurfaceChanged group index =" + mGroupIndex + ", width=" + width + ", height=" + height);
357
358 if(!isInitialized()) {
359 initialize();
360 }
361
362 SDKMainHandler.getInstance().post(new Runnable() {
363 @Override
364 public void run() {
365 mVideoViewMgr.onGLSurfaceChanged(width, height);
366 }
367 });
368 }
369
370 @Override
371 protected void onGLSurfaceDestroyed() {
372 //callback from glthread
373 release(false);
374
375 SDKMainHandler.getInstance().post(new Runnable() {
376 @Override
377 public void run() {
378 mVideoViewMgr.onSurfaceDestroyed();
379 }
380 });
381 }
382
383 public int getGroupIndex() {
384 return mGroupIndex;
385 }
386 }
387 private void initActivity(Context context){
389 if(null!=inMeetingService){
390 InMeetingShareController shareController= inMeetingService.getInMeetingShareController();
391 if(null!=shareController&&shareController instanceof InMeetingShareControllerImpl){
392 InMeetingShareControllerImpl shareControllerImpl=(InMeetingShareControllerImpl)shareController;
393 shareControllerImpl.setFragmentActivity(context);
394 }
395 }
396 }
397
398 @Override
399 protected void onAttachedToWindow() {
400 super.onAttachedToWindow();
401 Context context = getContext();
402 SDKDisclaimerDialogManager.getInstance().setDisclaimerDialogContext(context);
403 initActivity(context);
404 if (context instanceof Activity) {
405 activity = (Activity) context;
406 ZmUtils.detectGPUInfo((Activity) context);
407 } else {
408 if(context instanceof ContextWrapper){
409 context=((ContextWrapper)context).getBaseContext();
410 if (context instanceof Activity) {
411 activity = (Activity) context;
412 ZmUtils.detectGPUInfo((Activity) context);
413 }
414 }
415 }
416 }
417
418 @Override
419 protected void onDetachedFromWindow() {
420 super.onDetachedFromWindow();
421 activity = null;
422 }
423
424 private static final String WB_TAG = TAG + "Whiteboard";
425
427 boolean enableWBInView = PreferenceUtil.readBooleanValue(SDKConstants.SDK_ENABLE_SWITCH_WB_WITH_NORMAL_SHARE, false);
428 if (!enableWBInView) {
429 if (BuildConfig.LOG_ENABLE) {
430 ZMLog.e(TAG, "addWBFragment fail for not enable the feature");
431 }
432 ZoomMeetingSDKBridgeHelper.getInstance().trackingMSDKInteractEvent(TAG, "addWhiteBoardFragment", MobileRTCSDKError.SDKERR_WRONG_USAGE.ordinal());
434 }
435
436 if (mFragmentContainer == null) {
437 if (BuildConfig.LOG_ENABLE) {
438 ZMLog.e(TAG, "add WB Fragment fail for mFragmentContainer is null");
439 }
440 ZoomMeetingSDKBridgeHelper.getInstance().trackingMSDKInteractEvent(TAG, "addWhiteBoardFragment", MobileRTCSDKError.SDKERR_OTHER_ERROR.ordinal());
442 }
443
444 if (!(activity instanceof FragmentActivity)) {
445 if (BuildConfig.LOG_ENABLE) {
446 ZMLog.e(TAG, "addWBFragment fail for basic Activity");
447 }
448 ZoomMeetingSDKBridgeHelper.getInstance().trackingMSDKInteractEvent(TAG, "addWhiteBoardFragment", MobileRTCSDKError.SDKERR_WRONG_USAGE.ordinal());
450 }
451
452 Fragment fragment = ((FragmentActivity) activity).getSupportFragmentManager().findFragmentByTag(WB_TAG);
453 if (fragment != null) {
454 if (BuildConfig.LOG_ENABLE) {
455 ZMLog.e(TAG, "addWBFragment fail for already add the fragment");
456 }
457 ZoomMeetingSDKBridgeHelper.getInstance().trackingMSDKInteractEvent(TAG, "addWhiteBoardFragment", MobileRTCSDKError.SDKERR_WRONG_USAGE.ordinal());
459 }
460
461 if (inMeetingWhiteboardController == null) {
462 if (BuildConfig.LOG_ENABLE) {
463 ZMLog.e(TAG, "addWBFragment fail for null inMeetingWhiteboardController");
464 }
465 ZoomMeetingSDKBridgeHelper.getInstance().trackingMSDKInteractEvent(TAG, "addWhiteBoardFragment", MobileRTCSDKError.SDKERR_WRONG_USAGE.ordinal());
467 }
468
469 inMeetingWhiteboardController.observer((FragmentActivity) activity);
470
471 fragment = new SDKWBViewerFragment((FragmentActivity) activity);
472 Fragment finalFragment = fragment;
473 SafeTransactionKt.startSafeTransaction((FragmentActivity) activity, new Function1<ISafeTransaction, Unit>() {
474 @Override
475 public Unit invoke(ISafeTransaction iSafeTransaction) {
476 iSafeTransaction.add(R.id.wbFragmentContainer, finalFragment, WB_TAG);
477 return Unit.INSTANCE;
478 }
479 });
480 ZoomMeetingSDKBridgeHelper.getInstance().trackingMSDKInteractEvent(TAG, "addWhiteBoardFragment", MobileRTCSDKError.SDKERR_SUCCESS.ordinal());
481 mFragmentContainer.setVisibility(View.VISIBLE);
483 }
484
486 boolean enableWBInView = PreferenceUtil.readBooleanValue(SDKConstants.SDK_ENABLE_SWITCH_WB_WITH_NORMAL_SHARE, false);
487 if (!enableWBInView) {
488 if (BuildConfig.LOG_ENABLE) {
489 ZMLog.e(TAG, "removeWBFragment fail for not enable the feature");
490 }
492 }
493
494 if (inMeetingWhiteboardController == null) {
495 if (BuildConfig.LOG_ENABLE) {
496 ZMLog.e(TAG, "remove WB Fragment fail for inMeetingWhiteboardController is null");
497 }
499 }
500
501 if (mFragmentContainer == null) {
502 if (BuildConfig.LOG_ENABLE) {
503 ZMLog.e(TAG, "remove WB Fragment fail for mFragmentContainer is null");
504 }
506 }
507
508 if (!(activity instanceof FragmentActivity)) {
509 if (BuildConfig.LOG_ENABLE) {
510 ZMLog.e(TAG, "removeWBFragment fail for basic Activity");
511 }
512 ZoomMeetingSDKBridgeHelper.getInstance().trackingMSDKInteractEvent(TAG, "removeWhiteboardFragment", MobileRTCSDKError.SDKERR_WRONG_USAGE.ordinal());
514 }
515
516 Fragment fragment = ((FragmentActivity) activity).getSupportFragmentManager().findFragmentByTag(WB_TAG);
517 if (fragment == null) {
518 if (BuildConfig.LOG_ENABLE) {
519 ZMLog.e(TAG, "removeWBFragment fail for can not find the fragment");
520 }
522 }
523
524 inMeetingWhiteboardController.removeObserver((FragmentActivity) activity, false);
525
526 SafeTransactionKt.startSafeTransaction((FragmentActivity) activity, new Function1<ISafeTransaction, Unit>() {
527 @Override
528 public Unit invoke(ISafeTransaction iSafeTransaction) {
529 iSafeTransaction.remove(fragment);
530 return Unit.INSTANCE;
531 }
532 });
533
534 ZoomMeetingSDKBridgeHelper.getInstance().trackingMSDKInteractEvent(TAG, "removeWhiteboardFragment", MobileRTCSDKError.SDKERR_SUCCESS.ordinal());
535 mFragmentContainer.setVisibility(View.GONE);
537 }
538
539 private static final String DOC_TAG = TAG + "doc";
540
541 public MobileRTCSDKError addDocFragment(long shareSourceID) {
542 if (mFragmentContainer == null) {
543 if (BuildConfig.LOG_ENABLE) {
544 ZMLog.e(TAG, "add doc Fragment fail for mFragmentContainer is null");
545 }
547 }
548
549 if (!(activity instanceof FragmentActivity)) {
550 if (BuildConfig.LOG_ENABLE) {
551 ZMLog.e(TAG, "addDocFragment fail for basic Activity");
552 }
554 }
555
556 Fragment fragment = ((FragmentActivity) activity).getSupportFragmentManager().findFragmentByTag(DOC_TAG);
557 if (fragment != null) {
558 if (BuildConfig.LOG_ENABLE) {
559 ZMLog.e(TAG, "addDocFragment fail for already add the fragment");
560 }
562 }
563
564 Bundle bundle = getBundle(shareSourceID);
565 if (bundle == null) {
566 if (BuildConfig.LOG_ENABLE) {
567 ZMLog.e(TAG, "addDocFragment fail for null bundle");
568 }
570 }
571
572 IConfZoomDocs docs = StaticInnerService.getConfDocs();
573 if (docs == null) {
574 if (BuildConfig.LOG_ENABLE) {
575 ZMLog.e(TAG, "addDocFragment fail for null docs");
576 }
578 }
579 docs.setShareSourceId(shareSourceID);
580
581 fragment = ZoomDocsShareFragment.get(bundle);
582 Fragment finalFragment = fragment;
583 SafeTransactionKt.startSafeTransaction((FragmentActivity) activity, new Function1<ISafeTransaction, Unit>() {
584 @Override
585 public Unit invoke(ISafeTransaction iSafeTransaction) {
586 iSafeTransaction.add(R.id.wbFragmentContainer, finalFragment, DOC_TAG);
587 return Unit.INSTANCE;
588 }
589 });
590
591 mFragmentContainer.setVisibility(View.VISIBLE);
593 }
594
595 private @Nullable Bundle getBundle(long shareSourceID) {
596 CmmDocsCollaborationSource docsCollaborationSource = ZoomMeetingSDKDocsHelper.getInstance().getDocsCollaborationSource(shareSourceID);
597 if (docsCollaborationSource == null) {
598 return null;
599 }
600 Bundle bundle = new Bundle();
601 String url = ZmStringUtils.isEmptyOrNull(docsCollaborationSource.url) ? WebHelper.WEB_BLANK : docsCollaborationSource.url;
602 bundle.putString(StaticInnerService.Consts.KEY_ARGS_URL, url);
603 bundle.putInt(UniteBaseLogic.UniteBundleWrapper.MODULE_TYPE, UnifyWebViewAppType.UnifyWebViewAppType_ZoomDocs);
604 bundle.putInt(StaticInnerService.Consts.KEY_WEBVIEW_INSTANCE_TAG, WebViewInstanceTag.kInstEditor);
605 bundle.putInt(StaticInnerService.Consts.KEY_ARGS_PROCESS, ZmBusinessModuleMgr.PROCESS_TYPE_CONF);
606 return bundle;
607 }
608
610 if (mFragmentContainer == null) {
611 if (BuildConfig.LOG_ENABLE) {
612 ZMLog.e(TAG, "removeDocFragment fail for mFragmentContainer is null");
613 }
615 }
616
617 if (!(activity instanceof FragmentActivity)) {
618 if (BuildConfig.LOG_ENABLE) {
619 ZMLog.e(TAG, "removeDocFragment fail for basic Activity");
620 }
622 }
623
624 Fragment fragment = ((FragmentActivity) activity).getSupportFragmentManager().findFragmentByTag(DOC_TAG);
625 if (fragment == null) {
626 if (BuildConfig.LOG_ENABLE) {
627 ZMLog.e(TAG, "removeDocFragment fail for can not find the fragment");
628 }
630 }
631
632 SafeTransactionKt.startSafeTransaction((FragmentActivity) activity, new Function1<ISafeTransaction, Unit>() {
633 @Override
634 public Unit invoke(ISafeTransaction iSafeTransaction) {
635 iSafeTransaction.remove(fragment);
636 return Unit.INSTANCE;
637 }
638 });
639
640 mFragmentContainer.setVisibility(View.GONE);
642 }
643}
MobileRTCVideoRender(SDKVideoView glView, int groupIndex)
void onDrawFrame(GL10 gl, VideoRenderer renderer)
void onGLSurfaceChanged(final int width, final int height)
synchronized MobileRTCVideoViewManager getVideoViewMgr()
MobileRTCVideoView(Context context, AttributeSet attrs, int defStyle)
boolean onSingleTapConfirmed(MotionEvent e)
MobileRTCVideoViewManagerImpl mVideoViewMgr
boolean onDoubleTapEvent(MotionEvent e)
InMeetingWhiteboardControllerImpl inMeetingWhiteboardController
boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
void setZOrderMediaOverlay(boolean isMediaOverlay)
MobileRTCVideoView(Context context, AttributeSet attrs)
synchronized MobileRTCVideoViewManager getVideoViewManager()
MobileRTCSDKError addDocFragment(long shareSourceID)
boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)
Bundle getBundle(long shareSourceID)
void setGestureDetectorEnabled(boolean isEnabled)
MobileRTCSDKError removeWhiteboardFragment()
ZOOM SDK global manager.
Definition ZoomSDK.java:12
InMeetingService getInMeetingService()
Get InMeetingService instance.
Definition ZoomSDK.java:296
static ZoomSDK getInstance()
Get a shared instance of ZOOM SDK, must call from the main thread.
Definition ZoomSDK.java:25
Enumeration of common errors of SDK.
InMeetingShareController getInMeetingShareController()
InMeetingWhiteboardController getInMeetingWhiteboardController()
Meeting MobileRTCVideoView manager class. Get the manager object by the interface in MobileRTCVideoVi...