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
68public class MobileRTCVideoView extends RelativeLayout implements SDKVideoView.Listener, GestureDetector.OnGestureListener, GestureDetector.OnDoubleTapListener {
69
70 private final static String TAG = MobileRTCVideoView.class.getSimpleName();
71
72 @Nullable
73 private Activity activity;
74
75 @Nullable
76 private MobileRTCVideoViewManagerImpl mVideoViewMgr;
78
79 private ViewGroup mView;
80 private SDKVideoView mVideoView;
81 private SDKShareInView mShareView;
82 private GestureDetector mGestureDetector;
83
84 @Nullable
85 private FrameLayout mFragmentContainer;
86
87 private InMeetingWhiteboardControllerImpl inMeetingWhiteboardController;
88
89 public MobileRTCVideoView(Context context) {
90 this(context, null);
91 }
92
93 public MobileRTCVideoView(Context context, AttributeSet attrs) {
94 super(context, attrs);
95 init(context);
96 }
97
98 public MobileRTCVideoView(Context context, AttributeSet attrs, int defStyle) {
99 super(context, attrs, defStyle);
100 init(context);
101 }
102
103 private void init(Context context) {
104 mView = (ViewGroup)LayoutInflater.from(context).inflate(R.layout.zm_videoview_sdk, null, false);
105 mVideoView = (SDKVideoView) mView.findViewById(R.id.videoContainer);
106 mShareView = (SDKShareInView)mView.findViewById(R.id.zm_sdk_viewingShare);
107 mFragmentContainer = (FrameLayout) mView.findViewById(R.id.wbFragmentContainer);
108 mGestureDetector = new GestureDetector(context, this);
109 mGestureDetector.setOnDoubleTapListener(this);
110 mGestureDetector.setIsLongpressEnabled(false);
111 initVideoView(context);
112 mVideoViewMgr = new MobileRTCVideoViewManagerImpl(this, mVideoRender, mShareView);
114 if (inMeetingService != null) {
115 InMeetingWhiteboardController wbController = inMeetingService.getInMeetingWhiteboardController();
116 if (wbController instanceof InMeetingWhiteboardControllerImpl) {
117 inMeetingWhiteboardController = (InMeetingWhiteboardControllerImpl) wbController;
118 }
119 }
120 this.addView(mView);
121 initActivity(context);
122 }
123
124 private void initVideoView(Context context) {
125 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
126 mVideoView.setPreserveEGLContextOnPause(true);
128 mVideoView.setRenderer(mVideoRender);
129 mVideoView.setListener(this);
130 }
131
137 public void setGestureDetectorEnabled(boolean isEnabled) {
138 if(!isInEditMode() && isEnabled) {
139 mVideoView.setGestureDetector(mGestureDetector);
140 } else {
141 mVideoView.setGestureDetector(null);
142 }
143 }
144
152 public void setZOrderMediaOverlay(boolean isMediaOverlay) {
153 ZoomMeetingSDKBridgeHelper.getInstance().trackingMSDKInteractEvent(TAG, "setZOrderMediaOverlay", MobileRTCSDKError.SDKERR_SUCCESS.ordinal());
154 mVideoView.setZOrderMediaOverlay(isMediaOverlay);
155 }
156
164 public void setZOrderOnTop(boolean onTop) {
165 ZoomMeetingSDKBridgeHelper.getInstance().trackingMSDKInteractEvent(TAG, "setZOrderOnTop", MobileRTCSDKError.SDKERR_SUCCESS.ordinal());
166 mVideoView.setZOrderOnTop(onTop);
167 }
168
175 if(!SDKCustomizedMeetingUIHelper.isSdkEnableCustomizedUI()|| !SDKCustomizedMeetingUIHelper.isSdkUsingCustomizedMeetingUI()) {
176 return null;
177 }
178
179 Mainboard mainboard = ZmMainBoardMgr.getMainboard();
180 if(mainboard != null && !((ZmSdkMainBoard)mainboard.getSdkMainBoard()).isSDKConfAppCreated()) {
181 return null;
182 }
183
184 return mVideoViewMgr;
185 }
186
188 if(SDKCustomizedMeetingUIHelper.isSdkEnableCustomizedUI() && SDKCustomizedMeetingUIHelper.isSdkUsingCustomizedMeetingUI()) {
189 return null;
190 }
191 Mainboard mainboard = ZmMainBoardMgr.getMainboard();
192 if(mainboard != null && !((ZmSdkMainBoard)mainboard.getSdkMainBoard()).isSDKConfAppCreated()) {
193 return null;
194 }
195
196 return mVideoViewMgr;
197 }
198
202 public void onPause() {
203 mVideoView.onPause();
204 mVideoRender.stopRequestRender();
205 }
206
210 public void onResume() {
211 mVideoView.onResume();
212 mVideoRender.requestRenderContinuously();
213 }
214
215 //=============================================================================
216 // implements GestureDetector.OnGestureListener begin
217 @Override
218 public boolean onDown(MotionEvent e) {
219 return true;
220 }
221
222 @Override
223 public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
224 float velocityY) {
225 if(mVideoViewMgr != null) {
226 mVideoViewMgr.onFling(e1, e2, velocityX, velocityY);
227 }
228 return true;
229 }
230
231 @Override
232 public void onLongPress(MotionEvent e) {
233 }
234
235 @Override
236 public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
237 float distanceY) {
238 if(mVideoViewMgr != null) {
239 mVideoViewMgr.onScroll(e1, e2, distanceX, distanceY);
240 }
241 return true;
242 }
243
244 @Override
245 public void onShowPress(MotionEvent e) {
246
247 }
248
249 @Override
250 public boolean onSingleTapUp(MotionEvent e) {
251 return true;
252 }
253 //=============================================================================
254
255 //=============================================================================
256 // implements GestureDetector.OnDoubleTapListener begin
257 @Override
258 public boolean onDoubleTap(MotionEvent e) {
259 if(mVideoViewMgr != null) {
260 mVideoViewMgr.onDoubleTap(e);
261 }
262 return true;
263 }
264
265 @Override
266 public boolean onDoubleTapEvent(MotionEvent e) {
267 return true;
268 }
269
270 @Override
271 public boolean onSingleTapConfirmed(MotionEvent e) {
272 return true;
273 }
274
275 protected boolean isVisibleToUser() {
276 if(!isShown()) {
277 return false;
278 }
279
280 Rect rect = new Rect();
281 if (getGlobalVisibleRect(rect)) {
282 if (rect.width() * rect.height() >= getMeasuredWidth() * getMeasuredHeight()/2) {
283 return true;
284 }
285 }
286 return false;
287 }
288
289 @Override
291 mVideoRender.beforeGLContextDestroyed();
292 }
293
294 @Override
295 public void surfaceCreated() {
296 Log.i(TAG, "surfaceCreated group index =" + mVideoRender.getGroupIndex());
297 }
298
299 @Override
300 public void surfaceDestroyed() {
301 Log.i(TAG, "surfaceDestroyed group index =" + mVideoRender.getGroupIndex());
302 mVideoViewMgr.onDestroy();
303 mVideoViewMgr.onSurfaceDestroyed();
304 }
305
306 public class MobileRTCVideoRender extends SDKVideoRenderer{
307
308 private static final int RENDERER_FPS = 25;
309 private static final int RENDERER_FPS_LOW_PERFORMANCE = 15;
310
311 private int mGroupIndex;
312
314
315 public MobileRTCVideoRender(SDKVideoView glView, int groupIndex) {
316 super(glView, groupIndex);
317 mGroupIndex = groupIndex;
318 }
319
320 @Override
321 public void onDrawFrame(GL10 gl, VideoRenderer renderer) {
322 long curTime = System.currentTimeMillis();
323 if(curTime < lastIdleTaskTime || curTime - lastIdleTaskTime > 500) {
324 lastIdleTaskTime = curTime;
325 SDKMainHandler.getInstance().post(new Runnable() {
326 @Override
327 public void run() {
329 }
330 });
331 }
332 }
333
334 public float getProperFPS() {
335 float fps = RENDERER_FPS;
336 if(ZmDeviceUtils.getCPUKernalNumbers() < 2 && ZmDeviceUtils.getCPUKernelFrequency(0, ZmDeviceUtils.FLAG_MAX_FREQUENCY) < 1400000) {
338 }
339 return fps;
340 }
341
342 @Override
343 protected void onGLSurfaceCreated() {
344 }
345
346 @Override
347 protected void onGLSurfaceChanged(final int width, final int height) {
348 Log.i(TAG, "onGLSurfaceChanged group index =" + mGroupIndex + ", width=" + width + ", height=" + height);
349
350 if(!isInitialized()) {
351 initialize();
352 }
353
354 SDKMainHandler.getInstance().post(new Runnable() {
355 @Override
356 public void run() {
357 mVideoViewMgr.onGLSurfaceChanged(width, height);
358 }
359 });
360 }
361
362 @Override
363 protected void onGLSurfaceDestroyed() {
364 //callback from glthread
365 release(false);
366
367 SDKMainHandler.getInstance().post(new Runnable() {
368 @Override
369 public void run() {
370 mVideoViewMgr.onSurfaceDestroyed();
371 }
372 });
373 }
374
375 public int getGroupIndex() {
376 return mGroupIndex;
377 }
378 }
379 private void initActivity(Context context){
381 if(null!=inMeetingService){
382 InMeetingShareController shareController= inMeetingService.getInMeetingShareController();
383 if(null!=shareController&&shareController instanceof InMeetingShareControllerImpl){
384 InMeetingShareControllerImpl shareControllerImpl=(InMeetingShareControllerImpl)shareController;
385 shareControllerImpl.setFragmentActivity(context);
386 }
387 }
388 }
389
390 @Override
391 protected void onAttachedToWindow() {
392 super.onAttachedToWindow();
393 Context context = getContext();
394 SDKDisclaimerDialogManager.getInstance().setDisclaimerDialogContext(context);
395 initActivity(context);
396 if (context instanceof Activity) {
397 activity = (Activity) context;
398 ZmUtils.detectGPUInfo((Activity) context);
399 } else {
400 if(context instanceof ContextWrapper){
401 context=((ContextWrapper)context).getBaseContext();
402 if (context instanceof Activity) {
403 activity = (Activity) context;
404 ZmUtils.detectGPUInfo((Activity) context);
405 }
406 }
407 }
408 }
409
410 @Override
411 protected void onDetachedFromWindow() {
412 super.onDetachedFromWindow();
413 activity = null;
414 }
415
416 private static final String WB_TAG = TAG + "Whiteboard";
417
419 boolean enableWBInView = PreferenceUtil.readBooleanValue(SDKConstants.SDK_ENABLE_SWITCH_WB_WITH_NORMAL_SHARE, false);
420 if (!enableWBInView) {
421 if (BuildConfig.LOG_ENABLE) {
422 ZMLog.e(TAG, "addWBFragment fail for not enable the feature");
423 }
424 ZoomMeetingSDKBridgeHelper.getInstance().trackingMSDKInteractEvent(TAG, "addWhiteBoardFragment", MobileRTCSDKError.SDKERR_WRONG_USAGE.ordinal());
426 }
427
428 if (mFragmentContainer == null) {
429 if (BuildConfig.LOG_ENABLE) {
430 ZMLog.e(TAG, "add WB Fragment fail for mFragmentContainer is null");
431 }
432 ZoomMeetingSDKBridgeHelper.getInstance().trackingMSDKInteractEvent(TAG, "addWhiteBoardFragment", MobileRTCSDKError.SDKERR_OTHER_ERROR.ordinal());
434 }
435
436 if (!(activity instanceof FragmentActivity)) {
437 if (BuildConfig.LOG_ENABLE) {
438 ZMLog.e(TAG, "addWBFragment fail for basic Activity");
439 }
440 ZoomMeetingSDKBridgeHelper.getInstance().trackingMSDKInteractEvent(TAG, "addWhiteBoardFragment", MobileRTCSDKError.SDKERR_WRONG_USAGE.ordinal());
442 }
443
444 Fragment fragment = ((FragmentActivity) activity).getSupportFragmentManager().findFragmentByTag(WB_TAG);
445 if (fragment != null) {
446 if (BuildConfig.LOG_ENABLE) {
447 ZMLog.e(TAG, "addWBFragment fail for already add the fragment");
448 }
449 ZoomMeetingSDKBridgeHelper.getInstance().trackingMSDKInteractEvent(TAG, "addWhiteBoardFragment", MobileRTCSDKError.SDKERR_WRONG_USAGE.ordinal());
451 }
452
453 if (inMeetingWhiteboardController == null) {
454 if (BuildConfig.LOG_ENABLE) {
455 ZMLog.e(TAG, "addWBFragment fail for null inMeetingWhiteboardController");
456 }
457 ZoomMeetingSDKBridgeHelper.getInstance().trackingMSDKInteractEvent(TAG, "addWhiteBoardFragment", MobileRTCSDKError.SDKERR_WRONG_USAGE.ordinal());
459 }
460
461 inMeetingWhiteboardController.observer((FragmentActivity) activity);
462
463 fragment = new SDKWBViewerFragment((FragmentActivity) activity);
464 Fragment finalFragment = fragment;
465 SafeTransactionKt.startSafeTransaction((FragmentActivity) activity, new Function1<ISafeTransaction, Unit>() {
466 @Override
467 public Unit invoke(ISafeTransaction iSafeTransaction) {
468 iSafeTransaction.add(R.id.wbFragmentContainer, finalFragment, WB_TAG);
469 return Unit.INSTANCE;
470 }
471 });
472 ZoomMeetingSDKBridgeHelper.getInstance().trackingMSDKInteractEvent(TAG, "addWhiteBoardFragment", MobileRTCSDKError.SDKERR_SUCCESS.ordinal());
473 mFragmentContainer.setVisibility(View.VISIBLE);
475 }
476
478 boolean enableWBInView = PreferenceUtil.readBooleanValue(SDKConstants.SDK_ENABLE_SWITCH_WB_WITH_NORMAL_SHARE, false);
479 if (!enableWBInView) {
480 if (BuildConfig.LOG_ENABLE) {
481 ZMLog.e(TAG, "removeWBFragment fail for not enable the feature");
482 }
484 }
485
486 if (inMeetingWhiteboardController == null) {
487 if (BuildConfig.LOG_ENABLE) {
488 ZMLog.e(TAG, "remove WB Fragment fail for inMeetingWhiteboardController is null");
489 }
491 }
492
493 if (mFragmentContainer == null) {
494 if (BuildConfig.LOG_ENABLE) {
495 ZMLog.e(TAG, "remove WB Fragment fail for mFragmentContainer is null");
496 }
498 }
499
500 if (!(activity instanceof FragmentActivity)) {
501 if (BuildConfig.LOG_ENABLE) {
502 ZMLog.e(TAG, "removeWBFragment fail for basic Activity");
503 }
504 ZoomMeetingSDKBridgeHelper.getInstance().trackingMSDKInteractEvent(TAG, "removeWhiteboardFragment", MobileRTCSDKError.SDKERR_WRONG_USAGE.ordinal());
506 }
507
508 Fragment fragment = ((FragmentActivity) activity).getSupportFragmentManager().findFragmentByTag(WB_TAG);
509 if (fragment == null) {
510 if (BuildConfig.LOG_ENABLE) {
511 ZMLog.e(TAG, "removeWBFragment fail for can not find the fragment");
512 }
514 }
515
516 inMeetingWhiteboardController.removeObserver((FragmentActivity) activity, false);
517
518 SafeTransactionKt.startSafeTransaction((FragmentActivity) activity, new Function1<ISafeTransaction, Unit>() {
519 @Override
520 public Unit invoke(ISafeTransaction iSafeTransaction) {
521 iSafeTransaction.remove(fragment);
522 return Unit.INSTANCE;
523 }
524 });
525
526 ZoomMeetingSDKBridgeHelper.getInstance().trackingMSDKInteractEvent(TAG, "removeWhiteboardFragment", MobileRTCSDKError.SDKERR_SUCCESS.ordinal());
527 mFragmentContainer.setVisibility(View.GONE);
529 }
530
531 private static final String DOC_TAG = TAG + "doc";
532
533 public MobileRTCSDKError addDocFragment(long shareSourceID) {
534 if (mFragmentContainer == null) {
535 if (BuildConfig.LOG_ENABLE) {
536 ZMLog.e(TAG, "add doc Fragment fail for mFragmentContainer is null");
537 }
539 }
540
541 if (!(activity instanceof FragmentActivity)) {
542 if (BuildConfig.LOG_ENABLE) {
543 ZMLog.e(TAG, "addDocFragment fail for basic Activity");
544 }
546 }
547
548 Fragment fragment = ((FragmentActivity) activity).getSupportFragmentManager().findFragmentByTag(DOC_TAG);
549 if (fragment != null) {
550 if (BuildConfig.LOG_ENABLE) {
551 ZMLog.e(TAG, "addDocFragment fail for already add the fragment");
552 }
554 }
555
556 Bundle bundle = getBundle(shareSourceID);
557 if (bundle == null) {
558 if (BuildConfig.LOG_ENABLE) {
559 ZMLog.e(TAG, "addDocFragment fail for null bundle");
560 }
562 }
563
564 IConfZoomDocs docs = StaticInnerService.getConfDocs();
565 if (docs == null) {
566 if (BuildConfig.LOG_ENABLE) {
567 ZMLog.e(TAG, "addDocFragment fail for null docs");
568 }
570 }
571 docs.setShareSourceId(shareSourceID);
572
573 fragment = ZoomDocsShareFragment.get(bundle);
574 Fragment finalFragment = fragment;
575 SafeTransactionKt.startSafeTransaction((FragmentActivity) activity, new Function1<ISafeTransaction, Unit>() {
576 @Override
577 public Unit invoke(ISafeTransaction iSafeTransaction) {
578 iSafeTransaction.add(R.id.wbFragmentContainer, finalFragment, DOC_TAG);
579 return Unit.INSTANCE;
580 }
581 });
582
583 mFragmentContainer.setVisibility(View.VISIBLE);
585 }
586
587 private @Nullable Bundle getBundle(long shareSourceID) {
588 CmmDocsCollaborationSource docsCollaborationSource = ZoomMeetingSDKDocsHelper.getInstance().getDocsCollaborationSource(shareSourceID);
589 if (docsCollaborationSource == null) {
590 return null;
591 }
592 Bundle bundle = new Bundle();
593 String url = ZmStringUtils.isEmptyOrNull(docsCollaborationSource.url) ? WebHelper.WEB_BLANK : docsCollaborationSource.url;
594 bundle.putString(StaticInnerService.Consts.KEY_ARGS_URL, url);
595 bundle.putInt(UniteBaseLogic.UniteBundleWrapper.MODULE_TYPE, UnifyWebViewAppType.UnifyWebViewAppType_ZoomDocs);
596 bundle.putInt(StaticInnerService.Consts.KEY_WEBVIEW_INSTANCE_TAG, WebViewInstanceTag.kInstEditor);
597 bundle.putInt(StaticInnerService.Consts.KEY_ARGS_PROCESS, ZmBusinessModuleMgr.PROCESS_TYPE_CONF);
598 return bundle;
599 }
600
602 if (mFragmentContainer == null) {
603 if (BuildConfig.LOG_ENABLE) {
604 ZMLog.e(TAG, "removeDocFragment fail for mFragmentContainer is null");
605 }
607 }
608
609 if (!(activity instanceof FragmentActivity)) {
610 if (BuildConfig.LOG_ENABLE) {
611 ZMLog.e(TAG, "removeDocFragment fail for basic Activity");
612 }
614 }
615
616 Fragment fragment = ((FragmentActivity) activity).getSupportFragmentManager().findFragmentByTag(DOC_TAG);
617 if (fragment == null) {
618 if (BuildConfig.LOG_ENABLE) {
619 ZMLog.e(TAG, "removeDocFragment fail for can not find the fragment");
620 }
622 }
623
624 SafeTransactionKt.startSafeTransaction((FragmentActivity) activity, new Function1<ISafeTransaction, Unit>() {
625 @Override
626 public Unit invoke(ISafeTransaction iSafeTransaction) {
627 iSafeTransaction.remove(fragment);
628 return Unit.INSTANCE;
629 }
630 });
631
632 mFragmentContainer.setVisibility(View.GONE);
634 }
635}
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
void setZOrderOnTop(boolean onTop)
Controls whether the surface of the view is in its top window. Usually it is placed behind the window...
boolean onDoubleTapEvent(MotionEvent e)
InMeetingWhiteboardControllerImpl inMeetingWhiteboardController
boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
void setZOrderMediaOverlay(boolean isMediaOverlay)
Sets whether the surface view is placed at the top of another regular surface view in the window....
MobileRTCVideoView(Context context, AttributeSet attrs)
synchronized MobileRTCVideoViewManager getVideoViewManager()
Gets a manager object of the video view.
MobileRTCSDKError addDocFragment(long shareSourceID)
boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)
Bundle getBundle(long shareSourceID)
void onPause()
Pauses video view rendering.
void setGestureDetectorEnabled(boolean isEnabled)
Sets whether to enable gesture detector of shared unit. Default value: disabled.
MobileRTCSDKError removeWhiteboardFragment()
void onResume()
Resumes video view rendering.
Zoom SDK global manager.
Definition ZoomSDK.java:12
InMeetingService getInMeetingService()
Gets the in-meeting service instance.
Definition ZoomSDK.java:305
static ZoomSDK getInstance()
Gets a shared instance of Zoom SDK. Must call from the main thread.
Definition ZoomSDK.java:25
Enumeration of common SDK errors.
Interfaces of Zoom services in meeting.
InMeetingShareController getInMeetingShareController()
Gets the share controller instance in meeting.
InMeetingWhiteboardController getInMeetingWhiteboardController()
Gets the new whiteboard controller instance.
Meeting MobileRTCVideoView manager class. Get the manager object by the interface in MobileRTCVideoVi...