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 us.zoom.component.features.webwhiteboard.MeetingWebWbMgr;
34import us.zoom.component.features.webwhiteboard.uinotify.WebWbUiNotify;
35
36import javax.microedition.khronos.opengles.GL10;
37
38import kotlin.Unit;
39import kotlin.jvm.functions.Function1;
40import us.zoom.business.common.ZmBusinessModuleMgr;
41import us.zoom.common.crossplatform.cmmlib.BuildConfig;
42import us.zoom.core.helper.ZMLog;
43import us.zoom.internal.impl.InMeetingShareControllerImpl;
44import us.zoom.docs.bridge.tocpp.IConfZoomDocs;
45import us.zoom.docs.conf.cplusenum.WebViewInstanceTag;
46import us.zoom.docs.service.StaticInnerService;
47import us.zoom.docs.ui.share.ZoomDocsShareFragment;
48import us.zoom.hybrid.safeweb.core.WebHelper;
49import us.zoom.internal.impl.InMeetingWhiteboardControllerImpl;
50import us.zoom.internal.jni.bean.CmmDocsCollaborationSource;
51import us.zoom.internal.jni.helper.ZoomMeetingSDKBridgeHelper;
52import us.zoom.internal.jni.helper.ZoomMeetingSDKDocsHelper;
53import us.zoom.internal.view.SDKWBViewerFragment;
54import us.zoom.libtools.fragmentmanager.ISafeTransaction;
55import us.zoom.libtools.fragmentmanager.SafeTransactionKt;
56import us.zoom.libtools.storage.PreferenceUtil;
57import us.zoom.libtools.utils.ZmDeviceUtils;
58import us.zoom.internal.SDKCustomizedMeetingUIHelper;
59import us.zoom.internal.SDKDisclaimerDialogManager;
60import us.zoom.internal.impl.MobileRTCVideoViewManagerImpl;
61import us.zoom.libtools.utils.ZmStringUtils;
62import us.zoom.unite.cplusenum.UnifyWebViewAppType;
63import us.zoom.unite.logic.UniteBaseLogic;
64import us.zoom.videomeetings.R;
65
69public class MobileRTCVideoView extends RelativeLayout implements SDKVideoView.Listener, GestureDetector.OnGestureListener, GestureDetector.OnDoubleTapListener {
70
71 private final static String TAG = MobileRTCVideoView.class.getSimpleName();
72
73 @Nullable
74 private Activity activity;
75
76 @Nullable
77 private MobileRTCVideoViewManagerImpl mVideoViewMgr;
79
80 private ViewGroup mView;
81 private SDKVideoView mVideoView;
82 private SDKShareInView mShareView;
83 private GestureDetector mGestureDetector;
84
85 @Nullable
86 private FrameLayout mFragmentContainer;
87
88 private InMeetingWhiteboardControllerImpl inMeetingWhiteboardController;
89
90 public MobileRTCVideoView(Context context) {
91 this(context, null);
92 }
93
94 public MobileRTCVideoView(Context context, AttributeSet attrs) {
95 super(context, attrs);
96 init(context);
97 }
98
99 public MobileRTCVideoView(Context context, AttributeSet attrs, int defStyle) {
100 super(context, attrs, defStyle);
101 init(context);
102 }
103
104 private void init(Context context) {
105 mView = (ViewGroup)LayoutInflater.from(context).inflate(R.layout.zm_videoview_sdk, null, false);
106 mVideoView = (SDKVideoView) mView.findViewById(R.id.videoContainer);
107 mShareView = (SDKShareInView)mView.findViewById(R.id.zm_sdk_viewingShare);
108 mFragmentContainer = (FrameLayout) mView.findViewById(R.id.wbFragmentContainer);
109 mGestureDetector = new GestureDetector(context, this);
110 mGestureDetector.setOnDoubleTapListener(this);
111 mGestureDetector.setIsLongpressEnabled(false);
112 initVideoView(context);
113 mVideoViewMgr = new MobileRTCVideoViewManagerImpl(this, mVideoRender, mShareView);
115 if (inMeetingService != null) {
116 InMeetingWhiteboardController wbController = inMeetingService.getInMeetingWhiteboardController();
117 if (wbController instanceof InMeetingWhiteboardControllerImpl) {
118 inMeetingWhiteboardController = (InMeetingWhiteboardControllerImpl) wbController;
119 }
120 }
121 this.addView(mView);
122 initActivity(context);
123 }
124
125 private void initVideoView(Context context) {
126 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
127 mVideoView.setPreserveEGLContextOnPause(true);
129 mVideoView.setRenderer(mVideoRender);
130 mVideoView.setListener(this);
131 }
132
138 public void setGestureDetectorEnabled(boolean isEnabled) {
139 if(!isInEditMode() && isEnabled) {
140 mVideoView.setGestureDetector(mGestureDetector);
141 } else {
142 mVideoView.setGestureDetector(null);
143 }
144 }
145
153 public void setZOrderMediaOverlay(boolean isMediaOverlay) {
154 ZoomMeetingSDKBridgeHelper.getInstance().trackingMSDKInteractEvent(TAG, "setZOrderMediaOverlay", MobileRTCSDKError.SDKERR_SUCCESS.ordinal());
155 mVideoView.setZOrderMediaOverlay(isMediaOverlay);
156 }
157
165 public void setZOrderOnTop(boolean onTop) {
166 ZoomMeetingSDKBridgeHelper.getInstance().trackingMSDKInteractEvent(TAG, "setZOrderOnTop", MobileRTCSDKError.SDKERR_SUCCESS.ordinal());
167 mVideoView.setZOrderOnTop(onTop);
168 }
169
176 if(!SDKCustomizedMeetingUIHelper.isSdkEnableCustomizedUI()|| !SDKCustomizedMeetingUIHelper.isSdkUsingCustomizedMeetingUI()) {
177 return null;
178 }
179
180 Mainboard mainboard = ZmMainBoardMgr.getMainboard();
181 if(mainboard != null && !((ZmSdkMainBoard)mainboard.getSdkMainBoard()).isSDKConfAppCreated()) {
182 return null;
183 }
184
185 return mVideoViewMgr;
186 }
187
189 if(SDKCustomizedMeetingUIHelper.isSdkEnableCustomizedUI() && SDKCustomizedMeetingUIHelper.isSdkUsingCustomizedMeetingUI()) {
190 return null;
191 }
192 Mainboard mainboard = ZmMainBoardMgr.getMainboard();
193 if(mainboard != null && !((ZmSdkMainBoard)mainboard.getSdkMainBoard()).isSDKConfAppCreated()) {
194 return null;
195 }
196
197 return mVideoViewMgr;
198 }
199
203 public void onPause() {
204 mVideoView.onPause();
205 mVideoRender.stopRequestRender();
206 }
207
211 public void onResume() {
212 mVideoView.onResume();
213 mVideoRender.requestRenderContinuously();
214 }
215
216 //=============================================================================
217 // implements GestureDetector.OnGestureListener begin
218 @Override
219 public boolean onDown(MotionEvent e) {
220 return true;
221 }
222
223 @Override
224 public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
225 float velocityY) {
226 if(mVideoViewMgr != null) {
227 mVideoViewMgr.onFling(e1, e2, velocityX, velocityY);
228 }
229 return true;
230 }
231
232 @Override
233 public void onLongPress(MotionEvent e) {
234 }
235
236 @Override
237 public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
238 float distanceY) {
239 if(mVideoViewMgr != null) {
240 mVideoViewMgr.onScroll(e1, e2, distanceX, distanceY);
241 }
242 return true;
243 }
244
245 @Override
246 public void onShowPress(MotionEvent e) {
247
248 }
249
250 @Override
251 public boolean onSingleTapUp(MotionEvent e) {
252 return true;
253 }
254 //=============================================================================
255
256 //=============================================================================
257 // implements GestureDetector.OnDoubleTapListener begin
258 @Override
259 public boolean onDoubleTap(MotionEvent e) {
260 if(mVideoViewMgr != null) {
261 mVideoViewMgr.onDoubleTap(e);
262 }
263 return true;
264 }
265
266 @Override
267 public boolean onDoubleTapEvent(MotionEvent e) {
268 return true;
269 }
270
271 @Override
272 public boolean onSingleTapConfirmed(MotionEvent e) {
273 return true;
274 }
275
276 protected boolean isVisibleToUser() {
277 if(!isShown()) {
278 return false;
279 }
280
281 Rect rect = new Rect();
282 if (getGlobalVisibleRect(rect)) {
283 if (rect.width() * rect.height() >= getMeasuredWidth() * getMeasuredHeight()/2) {
284 return true;
285 }
286 }
287 return false;
288 }
289
290 @Override
292 mVideoRender.beforeGLContextDestroyed();
293 }
294
295 @Override
296 public void surfaceCreated() {
297 Log.i(TAG, "surfaceCreated group index =" + mVideoRender.getGroupIndex());
298 }
299
300 @Override
301 public void surfaceDestroyed() {
302 Log.i(TAG, "surfaceDestroyed group index =" + mVideoRender.getGroupIndex());
303 mVideoViewMgr.onDestroy();
304 mVideoViewMgr.onSurfaceDestroyed();
305 }
306
307 public class MobileRTCVideoRender extends SDKVideoRenderer{
308
309 private static final int RENDERER_FPS = 25;
310 private static final int RENDERER_FPS_LOW_PERFORMANCE = 15;
311
312 private int mGroupIndex;
313
315
316 public MobileRTCVideoRender(SDKVideoView glView, int groupIndex) {
317 super(glView, groupIndex);
318 mGroupIndex = groupIndex;
319 }
320
321 @Override
322 protected void onDrawFrameInternal(GL10 gl) {
323 long curTime = System.currentTimeMillis();
324 if(curTime < lastIdleTaskTime || curTime - lastIdleTaskTime > 500) {
325 lastIdleTaskTime = curTime;
326 SDKMainHandler.getInstance().post(new Runnable() {
327 @Override
328 public void run() {
330 }
331 });
332 }
333 }
334
335 @Override
336 protected float getRenderFps() {
337 float fps = RENDERER_FPS;
338 if(ZmDeviceUtils.getCPUKernalNumbers() < 2 && ZmDeviceUtils.getCPUKernelFrequency(0, ZmDeviceUtils.FLAG_MAX_FREQUENCY) < 1400000) {
340 }
341 return fps;
342 }
343
344 @Override
345 protected void onGLSurfaceCreated() {
346 }
347
348 @Override
349 protected void onGLSurfaceChanged(final int width, final int height) {
350 Log.i(TAG, "onGLSurfaceChanged group index =" + mGroupIndex + ", width=" + width + ", height=" + height);
351
352 if(!isInitialized()) {
353 initialize();
354 }
355
356 SDKMainHandler.getInstance().post(new Runnable() {
357 @Override
358 public void run() {
359 mVideoViewMgr.onGLSurfaceChanged(width, height);
360 }
361 });
362 }
363
364 @Override
365 protected void onGLSurfaceDestroyed() {
366 //callback from glthread
367 release(false);
368
369 SDKMainHandler.getInstance().post(new Runnable() {
370 @Override
371 public void run() {
372 mVideoViewMgr.onSurfaceDestroyed();
373 }
374 });
375 }
376
377 public int getGroupIndex() {
378 return mGroupIndex;
379 }
380 }
381 private void initActivity(Context context){
383 if(null!=inMeetingService){
384 InMeetingShareController shareController= inMeetingService.getInMeetingShareController();
385 if(null!=shareController&&shareController instanceof InMeetingShareControllerImpl){
386 InMeetingShareControllerImpl shareControllerImpl=(InMeetingShareControllerImpl)shareController;
387 shareControllerImpl.setFragmentActivity(context);
388 }
389 }
390 }
391
392 @Override
393 protected void onAttachedToWindow() {
394 super.onAttachedToWindow();
395 Context context = getContext();
396 SDKDisclaimerDialogManager.getInstance().setDisclaimerDialogContext(context);
397 initActivity(context);
398 if (context instanceof Activity) {
399 activity = (Activity) context;
400 ZmUtils.detectGPUInfo((Activity) context);
401 } else {
402 if(context instanceof ContextWrapper){
403 context=((ContextWrapper)context).getBaseContext();
404 if (context instanceof Activity) {
405 activity = (Activity) context;
406 ZmUtils.detectGPUInfo((Activity) context);
407 }
408 }
409 }
410 }
411
412 @Override
413 protected void onDetachedFromWindow() {
414 super.onDetachedFromWindow();
415 activity = null;
416 }
417
418 private static final String WB_TAG = TAG + "Whiteboard";
419
421 boolean enableWBInView = PreferenceUtil.readBooleanValue(SDKConstants.SDK_ENABLE_SWITCH_WB_WITH_NORMAL_SHARE, false);
422 if (!enableWBInView) {
423 if (BuildConfig.LOG_ENABLE) {
424 ZMLog.e(TAG, "addWBFragment fail for not enable the feature");
425 }
426 ZoomMeetingSDKBridgeHelper.getInstance().trackingMSDKInteractEvent(TAG, "addWhiteBoardFragment", MobileRTCSDKError.SDKERR_WRONG_USAGE.ordinal());
428 }
429
430 if (mFragmentContainer == null) {
431 if (BuildConfig.LOG_ENABLE) {
432 ZMLog.e(TAG, "add WB Fragment fail for mFragmentContainer is null");
433 }
434 ZoomMeetingSDKBridgeHelper.getInstance().trackingMSDKInteractEvent(TAG, "addWhiteBoardFragment", MobileRTCSDKError.SDKERR_OTHER_ERROR.ordinal());
436 }
437
438 if (!(activity instanceof FragmentActivity)) {
439 if (BuildConfig.LOG_ENABLE) {
440 ZMLog.e(TAG, "addWBFragment fail for basic Activity");
441 }
442 ZoomMeetingSDKBridgeHelper.getInstance().trackingMSDKInteractEvent(TAG, "addWhiteBoardFragment", MobileRTCSDKError.SDKERR_WRONG_USAGE.ordinal());
444 }
445
446 Fragment fragment = ((FragmentActivity) activity).getSupportFragmentManager().findFragmentByTag(WB_TAG);
447 if (fragment != null) {
448 if (BuildConfig.LOG_ENABLE) {
449 ZMLog.e(TAG, "addWBFragment fail for already add the fragment");
450 }
451 ZoomMeetingSDKBridgeHelper.getInstance().trackingMSDKInteractEvent(TAG, "addWhiteBoardFragment", MobileRTCSDKError.SDKERR_WRONG_USAGE.ordinal());
453 }
454
455 if (inMeetingWhiteboardController == null) {
456 if (BuildConfig.LOG_ENABLE) {
457 ZMLog.e(TAG, "addWBFragment fail for null inMeetingWhiteboardController");
458 }
459 ZoomMeetingSDKBridgeHelper.getInstance().trackingMSDKInteractEvent(TAG, "addWhiteBoardFragment", MobileRTCSDKError.SDKERR_WRONG_USAGE.ordinal());
461 }
462
463 inMeetingWhiteboardController.observer((FragmentActivity) activity);
464
465 fragment = new SDKWBViewerFragment((FragmentActivity) activity);
466 Fragment finalFragment = fragment;
467 SafeTransactionKt.startSafeTransaction((FragmentActivity) activity, new Function1<ISafeTransaction, Unit>() {
468 @Override
469 public Unit invoke(ISafeTransaction iSafeTransaction) {
470 iSafeTransaction.add(R.id.wbFragmentContainer, finalFragment, WB_TAG);
471 return Unit.INSTANCE;
472 }
473 });
474 // When sample's MyMeetingActivity.onStop -> removeAllVideoUnits removes the WB fragment
475 // and onResume re-adds it, the freshly created ZMWbCanvasLogic starts collecting
476 // canvasReallyLoadUrlFlow but the previous signal sequence is already consumed by the
477 // previous fragment instance (lastConsumedCanvasReallyLoadUrlSequence is monotonic),
478 // so the replayed signal is dropped and webview stays blank/loading.
479 // Client's MeetingWebWbUIProxy.tryOpenActiveWbByHookEvent only re-hooks when
480 // !isPresenting, so the self-presenting path needs an explicit re-emit here.
481 if (MeetingWebWbMgr.INSTANCE.getWbUseCase().isPresentingWhiteboard()) {
482 WebWbUiNotify wbUiNotify = MeetingWebWbMgr.INSTANCE.getWbUiNotify();
483 if (wbUiNotify != null) {
484 wbUiNotify.canvasReallyLoadUrl(true);
485 }
486 }
487 ZoomMeetingSDKBridgeHelper.getInstance().trackingMSDKInteractEvent(TAG, "addWhiteBoardFragment", MobileRTCSDKError.SDKERR_SUCCESS.ordinal());
488 mFragmentContainer.setVisibility(View.VISIBLE);
490 }
491
493 boolean enableWBInView = PreferenceUtil.readBooleanValue(SDKConstants.SDK_ENABLE_SWITCH_WB_WITH_NORMAL_SHARE, false);
494 if (!enableWBInView) {
495 if (BuildConfig.LOG_ENABLE) {
496 ZMLog.e(TAG, "removeWBFragment fail for not enable the feature");
497 }
499 }
500
501 if (inMeetingWhiteboardController == null) {
502 if (BuildConfig.LOG_ENABLE) {
503 ZMLog.e(TAG, "remove WB Fragment fail for inMeetingWhiteboardController is null");
504 }
506 }
507
508 if (mFragmentContainer == null) {
509 if (BuildConfig.LOG_ENABLE) {
510 ZMLog.e(TAG, "remove WB Fragment fail for mFragmentContainer is null");
511 }
513 }
514
515 if (!(activity instanceof FragmentActivity)) {
516 if (BuildConfig.LOG_ENABLE) {
517 ZMLog.e(TAG, "removeWBFragment fail for basic Activity");
518 }
519 ZoomMeetingSDKBridgeHelper.getInstance().trackingMSDKInteractEvent(TAG, "removeWhiteboardFragment", MobileRTCSDKError.SDKERR_WRONG_USAGE.ordinal());
521 }
522
523 Fragment fragment = ((FragmentActivity) activity).getSupportFragmentManager().findFragmentByTag(WB_TAG);
524 if (fragment == null) {
525 if (BuildConfig.LOG_ENABLE) {
526 ZMLog.e(TAG, "removeWBFragment fail for can not find the fragment");
527 }
529 }
530
531 inMeetingWhiteboardController.removeObserver((FragmentActivity) activity, false);
532
533 SafeTransactionKt.startSafeTransaction((FragmentActivity) activity, new Function1<ISafeTransaction, Unit>() {
534 @Override
535 public Unit invoke(ISafeTransaction iSafeTransaction) {
536 iSafeTransaction.remove(fragment);
537 return Unit.INSTANCE;
538 }
539 });
540
541 ZoomMeetingSDKBridgeHelper.getInstance().trackingMSDKInteractEvent(TAG, "removeWhiteboardFragment", MobileRTCSDKError.SDKERR_SUCCESS.ordinal());
542 mFragmentContainer.setVisibility(View.GONE);
544 }
545
546 private static final String DOC_TAG = TAG + "doc";
547
548 public MobileRTCSDKError addDocFragment(long shareSourceID) {
549 if (mFragmentContainer == null) {
550 if (BuildConfig.LOG_ENABLE) {
551 ZMLog.e(TAG, "add doc Fragment fail for mFragmentContainer is null");
552 }
554 }
555
556 if (!(activity instanceof FragmentActivity)) {
557 if (BuildConfig.LOG_ENABLE) {
558 ZMLog.e(TAG, "addDocFragment fail for basic Activity");
559 }
561 }
562
563 Fragment fragment = ((FragmentActivity) activity).getSupportFragmentManager().findFragmentByTag(DOC_TAG);
564 if (fragment != null) {
565 if (BuildConfig.LOG_ENABLE) {
566 ZMLog.e(TAG, "addDocFragment fail for already add the fragment");
567 }
569 }
570
571 Bundle bundle = getBundle(shareSourceID);
572 if (bundle == null) {
573 if (BuildConfig.LOG_ENABLE) {
574 ZMLog.e(TAG, "addDocFragment fail for null bundle");
575 }
577 }
578
579 IConfZoomDocs docs = StaticInnerService.getConfDocs();
580 if (docs == null) {
581 if (BuildConfig.LOG_ENABLE) {
582 ZMLog.e(TAG, "addDocFragment fail for null docs");
583 }
585 }
586 docs.setShareSourceId(shareSourceID);
587
588 fragment = ZoomDocsShareFragment.get(bundle);
589 Fragment finalFragment = fragment;
590 SafeTransactionKt.startSafeTransaction((FragmentActivity) activity, new Function1<ISafeTransaction, Unit>() {
591 @Override
592 public Unit invoke(ISafeTransaction iSafeTransaction) {
593 iSafeTransaction.add(R.id.wbFragmentContainer, finalFragment, DOC_TAG);
594 return Unit.INSTANCE;
595 }
596 });
597
598 mFragmentContainer.setVisibility(View.VISIBLE);
600 }
601
602 private @Nullable Bundle getBundle(long shareSourceID) {
603 CmmDocsCollaborationSource docsCollaborationSource = ZoomMeetingSDKDocsHelper.getInstance().getDocsCollaborationSource(shareSourceID);
604 if (docsCollaborationSource == null) {
605 return null;
606 }
607 Bundle bundle = new Bundle();
608 String url = ZmStringUtils.isEmptyOrNull(docsCollaborationSource.url) ? WebHelper.WEB_BLANK : docsCollaborationSource.url;
609 bundle.putString(StaticInnerService.Consts.KEY_ARGS_URL, url);
610 bundle.putInt(UniteBaseLogic.UniteBundleWrapper.MODULE_TYPE, UnifyWebViewAppType.UnifyWebViewAppType_ZoomDocs);
611 bundle.putInt(StaticInnerService.Consts.KEY_WEBVIEW_INSTANCE_TAG, WebViewInstanceTag.kInstEditor);
612 bundle.putInt(StaticInnerService.Consts.KEY_ARGS_PROCESS, ZmBusinessModuleMgr.PROCESS_TYPE_CONF);
613 return bundle;
614 }
615
617 if (mFragmentContainer == null) {
618 if (BuildConfig.LOG_ENABLE) {
619 ZMLog.e(TAG, "removeDocFragment fail for mFragmentContainer is null");
620 }
622 }
623
624 if (!(activity instanceof FragmentActivity)) {
625 if (BuildConfig.LOG_ENABLE) {
626 ZMLog.e(TAG, "removeDocFragment fail for basic Activity");
627 }
629 }
630
631 Fragment fragment = ((FragmentActivity) activity).getSupportFragmentManager().findFragmentByTag(DOC_TAG);
632 if (fragment == null) {
633 if (BuildConfig.LOG_ENABLE) {
634 ZMLog.e(TAG, "removeDocFragment fail for can not find the fragment");
635 }
637 }
638
639 SafeTransactionKt.startSafeTransaction((FragmentActivity) activity, new Function1<ISafeTransaction, Unit>() {
640 @Override
641 public Unit invoke(ISafeTransaction iSafeTransaction) {
642 iSafeTransaction.remove(fragment);
643 return Unit.INSTANCE;
644 }
645 });
646
647 mFragmentContainer.setVisibility(View.GONE);
649 }
650}
MobileRTCVideoRender(SDKVideoView glView, int groupIndex)
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...