Skip to content

Commit 649049a

Browse files
authored
Merge pull request #25 from xanderzhao-zb/main
【TUILiveKit】【Android】200 template ui adapter
2 parents 9607d0f + a12e58b commit 649049a

3 files changed

Lines changed: 64 additions & 48 deletions

File tree

live/tuilivekit/src/main/java/com/trtc/uikit/livekit/features/audiencecontainer/view/AudienceView.kt

Lines changed: 43 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,13 @@ import android.view.ViewConfiguration
1515
import android.view.WindowManager
1616
import android.widget.FrameLayout
1717
import android.widget.ImageView
18+
import com.tencent.cloud.tuikit.engine.common.ContextProvider
1819
import com.tencent.qcloud.tuicore.TUICore
1920
import com.tencent.qcloud.tuicore.TUIThemeManager
20-
import com.tencent.qcloud.tuicore.util.ScreenUtil.dip2px
2121
import com.trtc.tuikit.common.imageloader.ImageLoader
2222
import com.trtc.tuikit.common.imageloader.ImageOptions
23-
import com.trtc.tuikit.common.system.ContextProvider
23+
import com.trtc.tuikit.common.util.ScreenUtil
24+
import com.trtc.tuikit.common.util.ScreenUtil.dip2px
2425
import com.trtc.uikit.livekit.R
2526
import com.trtc.uikit.livekit.common.COMPONENT_LIVE_STREAM
2627
import com.trtc.uikit.livekit.common.EVENT_KEY_LIVE_KIT
@@ -162,7 +163,7 @@ class AudienceView @JvmOverloads constructor(
162163
layoutLiveCoreViewMask.addView(liveCoreViewMaskBackgroundView)
163164
createVideoMuteBitmap()
164165
setComponent(COMPONENT_LIVE_STREAM)
165-
setLayoutBackground(liveInfo.coverURL)
166+
setLayoutBackground(liveInfo.coverURL, liveInfo.seatLayoutTemplateID)
166167
}
167168

168169
fun getRoomId(): String {
@@ -269,6 +270,8 @@ class AudienceView @JvmOverloads constructor(
269270
setVideoViewAdapter()
270271
liveListStore.joinLive(liveInfo.liveID, object : LiveInfoCompletionHandler {
271272
override fun onSuccess(liveInfo: LiveInfo) {
273+
this@AudienceView.liveInfo = liveInfo
274+
setCoreViewLayoutParamsWhenLandscape(liveInfo.seatLayoutTemplateID, true)
272275
val activity = context as Activity
273276
if (activity.isFinishing || activity.isDestroyed) {
274277
LOGGER.warn("activity is exit, leaveLiveStream")
@@ -337,6 +340,8 @@ class AudienceView @JvmOverloads constructor(
337340
(context as Activity).requestedOrientation =
338341
if (isPortrait) ActivityInfo.SCREEN_ORIENTATION_PORTRAIT else ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
339342
updateViewByOrientation(isPortrait)
343+
liveCoreViewMaskBackgroundView.setPortrait(isPortrait)
344+
setCoreViewLayoutParamsWhenLandscape(liveInfo.seatLayoutTemplateID, isPortrait)
340345
}
341346

342347
private fun updateViewByOrientation(isPortrait: Boolean) {
@@ -392,33 +397,43 @@ class AudienceView @JvmOverloads constructor(
392397
val params = LayoutParams(
393398
LayoutParams.WRAP_CONTENT,
394399
LayoutParams.WRAP_CONTENT,
395-
Gravity.BOTTOM or Gravity.END
400+
Gravity.TOP or Gravity.END
396401
)
397402

398403
if (isPortrait) {
399404
videoWidth = screenWidth
400405
videoHeight = videoWidth * 9 / 16
401-
val videoTop = (screenHeight - videoHeight) / 2
406+
val videoTop = videoHeight + dip2px(100f)
402407
params.rightMargin = dip2px(12f)
403-
params.bottomMargin = videoTop + dip2px(24f)
408+
params.topMargin = videoTop
404409
} else {
405410
videoHeight = screenWidth
406411
videoWidth = videoHeight * 16 / 9
407412
val videoRightMargin = (screenHeight - videoWidth) / 2
408413
val videoBottomMargin = videoHeight / 2
409414
params.rightMargin = videoRightMargin + dip2px(24f)
410-
params.bottomMargin = videoBottomMargin
415+
params.topMargin = videoBottomMargin
411416
}
412417
return params
413418
}
414419

415-
private fun setLayoutBackground(imageUrl: String?) {
416-
val builder = ImageOptions.Builder()
417-
builder.setBlurEffect(80f)
418-
if (TextUtils.isEmpty(imageUrl)) {
419-
ImageLoader.load(context, ivVideoViewBackground, DEFAULT_COVER_URL, builder.build())
420+
private fun setLayoutBackground(imageUrl: String?, seatLayoutTemplateId: Int) {
421+
LOGGER.info("setLayoutBackground->imageUrl: $imageUrl, seatLayoutTemplateId:$seatLayoutTemplateId")
422+
if (seatLayoutTemplateId != 200) {
423+
val builder = ImageOptions.Builder()
424+
builder.setBlurEffect(80f)
425+
if (TextUtils.isEmpty(imageUrl)) {
426+
ImageLoader.load(context, ivVideoViewBackground, DEFAULT_COVER_URL, builder.build())
427+
} else {
428+
ImageLoader.load(context, ivVideoViewBackground, imageUrl, builder.build())
429+
}
420430
} else {
421-
ImageLoader.load(context, ivVideoViewBackground, imageUrl, builder.build())
431+
ImageLoader.clear(context, ivVideoViewBackground)
432+
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S) {
433+
ivVideoViewBackground.setRenderEffect(null)
434+
}
435+
ivVideoViewBackground.setImageDrawable(null)
436+
ivVideoViewBackground.setBackgroundColor(android.graphics.Color.BLACK)
422437
}
423438
}
424439

@@ -662,6 +677,21 @@ class AudienceView @JvmOverloads constructor(
662677
linkMicDialog.show()
663678
}
664679

680+
private fun setCoreViewLayoutParamsWhenLandscape(templateId: Int, isPortrait: Boolean) {
681+
LOGGER.info("setCoreViewLayoutParamsWhenLandscape:templateId:$templateId,isPortrait:$isPortrait")
682+
val layoutParams: FrameLayout.LayoutParams = layoutLiveCoreView.layoutParams as FrameLayout.LayoutParams
683+
if (templateId == 200 && isPortrait) {
684+
layoutParams.topMargin = dip2px(150f)
685+
layoutParams.height = ScreenUtil.getScreenWidth(context) * 720 / 1280
686+
687+
} else {
688+
layoutParams.topMargin = 0
689+
layoutParams.height = FrameLayout.LayoutParams.MATCH_PARENT
690+
}
691+
layoutLiveCoreView.layoutParams = layoutParams
692+
setLayoutBackground(liveInfo.backgroundURL, templateId)
693+
}
694+
665695
fun subscribeObserver() {
666696
audienceStore.addAudienceViewListener(this)
667697
subscribeStateJob = CoroutineScope(Dispatchers.Main).launch {
@@ -864,41 +894,6 @@ class AudienceView @JvmOverloads constructor(
864894
endLiveDialog?.show()
865895
}
866896

867-
// 假设 endLiveDialog 变量的类型从 StandardDialog 变更为 Dialog?
868-
// private var endLiveDialog: Dialog? = null
869-
//
870-
// private fun showLiveStreamEndDialog1() {
871-
// endLiveDialog = StandardDialog(context)
872-
// endLiveDialog?.setContent(resources.getString(R.string.common_audience_end_link_tips))
873-
// val options: MutableList<StandardDialog.Option> = ArrayList()
874-
// options.add(
875-
// StandardDialog.Option(
876-
// resources.getString(R.string.common_end_link),
877-
// resources.getColor(R.color.common_not_standard_red)
878-
// ) { _ ->
879-
// coGuestStore.disconnect(null)
880-
// audienceStore.getViewStore().updateTakeSeatState(false)
881-
// endLiveDialog?.dismiss()
882-
// }
883-
// )
884-
// options.add(
885-
// StandardDialog.Option(
886-
// resources.getString(R.string.common_exit_live),
887-
// resources.getColor(R.color.common_color_white_e5)
888-
// ) { _ ->
889-
// TUICore.notifyEvent(EVENT_KEY_LIVE_KIT, EVENT_SUB_KEY_DESTROY_LIVE_VIEW, null)
890-
// endLiveDialog?.dismiss()
891-
// }
892-
// )
893-
// options.add(
894-
// StandardDialog.Option(
895-
// resources.getString(R.string.common_cancel),
896-
// resources.getColor(R.color.common_color_white_e5)
897-
// ) { _ -> endLiveDialog?.dismiss() })
898-
// endLiveDialog?.setOptions(options)
899-
// endLiveDialog?.show()
900-
// }
901-
902897
inner class VideoViewAdapterImpl(context: Context) : VideoViewAdapter {
903898

904899
private val weakContext = WeakReference(context)

live/tuilivekit/src/main/java/com/trtc/uikit/livekit/features/audiencecontainer/view/LiveCoreViewMaskBackgroundView.kt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ class LiveCoreViewMaskBackgroundView @JvmOverloads constructor(
5050
private var middleRect = Rect()
5151
private var bottomRect = Rect()
5252
private var enableBlur = true
53+
private var isPortrait = true
5354

5455
private var subscribeStateJob: Job? = null
5556

@@ -269,7 +270,16 @@ class LiveCoreViewMaskBackgroundView @JvmOverloads constructor(
269270
setBackgroundColor(color)
270271
}
271272

273+
fun setPortrait(isPortrait: Boolean) {
274+
this.isPortrait = isPortrait
275+
invalidate()
276+
}
277+
272278
fun isFullScreenLayoutBySeatLayout(): Boolean {
279+
val videoLandscape4SeatsTemplateID = 200
280+
if (audienceStore.getLiveSeatState().canvas.value.templateID == videoLandscape4SeatsTemplateID && isPortrait) {
281+
return false
282+
}
273283
if (audienceStore.getLiveSeatState().seatList.value.isEmpty()) {
274284
return true
275285
}
@@ -293,6 +303,16 @@ class LiveCoreViewMaskBackgroundView @JvmOverloads constructor(
293303
invalidate()
294304
return
295305
}
306+
if (audienceStore.getLiveSeatState().canvas.value.templateID == 200 && isPortrait) {
307+
val screenWidth = ScreenUtil.getScreenWidth(context)
308+
val videoTop = ScreenUtil.dip2px(150f)
309+
val videoBottom = screenWidth * 9 / 16 + ScreenUtil.dip2px(150f)
310+
topRect = Rect(0, 0, parentWidth, videoTop)
311+
middleRect = Rect(0, videoTop, parentWidth, videoBottom)
312+
bottomRect = Rect(0, videoBottom, parentWidth, parentHeight)
313+
invalidate()
314+
return
315+
}
296316
val rect = Rect()
297317
rect.left = Int.MAX_VALUE
298318
rect.top = Int.MAX_VALUE

room/tuiroomkit/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/build

0 commit comments

Comments
 (0)