Commit 86c77660 by 刘鹏

feat : 合并mdt组件

parent 896f5731
......@@ -229,7 +229,7 @@ dependencies {
implementation project(':m-fm')
implementation modularPublication('com.ydl:m-fm-api')
implementation project(':ydl-tuicalling')
implementation project(':ydl-tuicore')
} else {
//发布模式
......@@ -241,6 +241,9 @@ dependencies {
api(rootProject.ext.dependencies["ydl-platform"]) {
transitive = true
}
api(rootProject.ext.dependencies["ydl-tuicalling"]) {
transitive = true
}
}
......
......@@ -15,9 +15,9 @@ import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.blankj.utilcode.util.ToastUtils
import com.tencent.imsdk.v2.*
import com.tencent.liteav.basic.UserModel
import com.tencent.liteav.basic.UserModelManager
import com.tencent.qcloud.tuicore.TUILogin
import com.tencent.qcloud.tuicore.calling.basic.UserModel
import com.tencent.qcloud.tuicore.calling.basic.UserModelManager
import com.ydl.component.R
import com.ydl.component.rtc.bean.UserSigResponse
import com.ydl.component.rtc.http.MDTHttpImpl.Companion.getInstance
......
......@@ -26,10 +26,10 @@ import com.tencent.imsdk.BaseConstants;
import com.tencent.imsdk.v2.V2TIMCallback;
import com.tencent.imsdk.v2.V2TIMSDKConfig;
import com.tencent.imsdk.v2.V2TIMSDKListener;
import com.tencent.liteav.basic.UserModel;
import com.tencent.liteav.basic.UserModelManager;
import com.tencent.liteav.trtccalling.TUICallingImpl;
import com.tencent.qcloud.tuicore.TUILogin;
import com.tencent.qcloud.tuicore.calling.basic.UserModel;
import com.tencent.qcloud.tuicore.calling.basic.UserModelManager;
import com.tencent.qcloud.tuicore.calling.trtccalling.TUICallingImpl;
import com.ydl.component.R;
import com.ydl.component.rtc.debug.GenerateTestUserSig;
......
......@@ -22,10 +22,10 @@ import com.blankj.utilcode.util.ToastUtils;
import com.tencent.imsdk.v2.V2TIMCallback;
import com.tencent.imsdk.v2.V2TIMManager;
import com.tencent.imsdk.v2.V2TIMUserFullInfo;
import com.tencent.liteav.basic.AvatarConstant;
import com.tencent.liteav.basic.ImageLoader;
import com.tencent.liteav.basic.UserModel;
import com.tencent.liteav.basic.UserModelManager;
import com.tencent.qcloud.tuicore.calling.basic.AvatarConstant;
import com.tencent.qcloud.tuicore.calling.basic.ImageLoader;
import com.tencent.qcloud.tuicore.calling.basic.UserModel;
import com.tencent.qcloud.tuicore.calling.basic.UserModelManager;
import com.ydl.component.R;
import java.util.Random;
......
......@@ -31,16 +31,16 @@ import androidx.appcompat.widget.Toolbar;
import androidx.constraintlayout.widget.ConstraintLayout;
import com.blankj.utilcode.util.ToastUtils;
import com.tencent.liteav.basic.ImageLoader;
import com.tencent.liteav.basic.IntentUtils;
import com.tencent.liteav.basic.UserModel;
import com.tencent.liteav.basic.UserModelManager;
import com.tencent.liteav.trtccalling.TUICalling;
import com.tencent.liteav.trtccalling.TUICallingImpl;
import com.tencent.liteav.trtccalling.model.impl.base.CallingInfoManager;
import com.tencent.liteav.trtccalling.model.util.BrandUtil;
import com.tencent.liteav.trtccalling.model.util.PermissionUtil;
import com.tencent.liteav.trtccalling.ui.common.RoundCornerImageView;
import com.tencent.qcloud.tuicore.calling.basic.ImageLoader;
import com.tencent.qcloud.tuicore.calling.basic.IntentUtils;
import com.tencent.qcloud.tuicore.calling.basic.UserModel;
import com.tencent.qcloud.tuicore.calling.basic.UserModelManager;
import com.tencent.qcloud.tuicore.calling.trtccalling.TUICalling;
import com.tencent.qcloud.tuicore.calling.trtccalling.TUICallingImpl;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.impl.base.CallingInfoManager;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.util.BrandUtil;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.util.PermissionUtil;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.common.RoundCornerImageView;
import com.ydl.component.R;
import java.util.ArrayList;
......@@ -330,7 +330,7 @@ public class TUICallingEntranceActivity extends Activity {
}
CallingInfoManager.getInstance().getUserInfoByUserId(userId, new CallingInfoManager.UserCallback() {
@Override
public void onSuccess(com.tencent.liteav.trtccalling.model.impl.UserModel model) {
public void onSuccess(UserModel model) {
mSearchModel = new UserModel();
mSearchModel.userId = model.userId;
mSearchModel.userName = TextUtils.isEmpty(model.userName) ? model.userId : model.userName;
......
......@@ -10,8 +10,8 @@ import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import com.tencent.liteav.videocall.Constant;
import com.tencent.liteav.videocall.VideoCallingActivity;
import com.tencent.qcloud.tuicore.calling.videocall.Constant;
import com.tencent.qcloud.tuicore.calling.videocall.VideoCallingActivity;
import com.ydl.component.R;
......
......@@ -178,7 +178,7 @@
app:layout_constraintTop_toBottomOf="@+id/tv_self_userid"
tools:visibility="visible">
<com.tencent.liteav.trtccalling.ui.common.RoundCornerImageView
<com.tencent.qcloud.tuicore.calling.trtccalling.ui.common.RoundCornerImageView
android:id="@+id/img_avatar"
android:layout_width="44dp"
android:layout_height="44dp"
......
......@@ -19,7 +19,7 @@
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.tencent.liteav.trtccalling.ui.common.RoundCornerImageView
<com.tencent.qcloud.tuicore.calling.trtccalling.ui.common.RoundCornerImageView
android:id="@+id/iv_user_avatar"
android:layout_width="100dp"
android:layout_height="100dp"
......
......@@ -6,7 +6,7 @@
android:gravity="center_vertical"
android:padding="5dp">
<com.tencent.liteav.trtccalling.ui.common.RoundCornerImageView
<com.tencent.qcloud.tuicore.calling.trtccalling.ui.common.RoundCornerImageView
android:id="@+id/img_avatar"
android:layout_width="30dp"
android:layout_height="30dp"
......
......@@ -33,8 +33,7 @@ ext {
//-------------- 功能组件 --------------
//mdt 组件
"ydl-tuicore" : "0.0.1",
"ydl-tuicalling": "0.0.6",
"ydl-tuicore" : "0.0.3",
//第一步
"ydl-platform" : "0.0.40.89",
......@@ -118,8 +117,7 @@ ext {
"m-dynamic-api" : "0.0.3.71",
//-------------- 功能组件 --------------
//mdt组件
"ydl-tuicore" : "0.0.1",
"ydl-tuicalling": "0.0.6",
"ydl-tuicore" : "0.0.3",
//第一步
"ydl-platform" : "0.0.40.89",
......@@ -288,7 +286,6 @@ ext {
//基础组件 <<--- 先发这个,发完改这里的版本号
"ydl-platform" : "com.ydl:ydl-platform:${ydlCompileVersion["ydl-platform"]}@aar",
"ydl-tuicore" : "com.ydl:ydl-tuicore:${ydlCompileVersion["ydl-tuicore"]}@aar",
"ydl-tuicalling" : "com.ydl:ydl-tuicalling:${ydlCompileVersion["ydl-tuicalling"]}@aar",
//功能组件 <<--- 再发这些,发完改这里的版本号
"ydl-webview" : "com.ydl:ydl-webview:${ydlCompileVersion["ydl-webview"]}@aar",
"ydl-media" : "com.ydl:ydl-media:${ydlCompileVersion["ydl-media"]}@aar",
......
......@@ -4,5 +4,4 @@ include ':app',
':m-home',
':m-consultant', ':m-muse', ':m-fm', ':m-tests', ":m-course",
":m-im",":m-dynamic","m-article","m-audioim","m-user","m-confide"
include ':ydl-tuicalling'
include ':ydl-tuicore'
apply plugin: 'com.android.library'
apply from: "../maven_push.gradle"
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
android {
compileSdkVersion rootProject.ext.android["compileSdkVersion"]
buildToolsVersion rootProject.ext.android["buildToolsVersion"]
defaultConfig {
minSdkVersion rootProject.ext.android["minSdkVersion"]
targetSdkVersion rootProject.ext.android["targetSdkVersion"]
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
api fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation(rootProject.ext.dependencies["support-multidex"])
implementation(rootProject.ext.dependencies["recyclerview-v7"])
implementation(rootProject.ext.dependencies["appcompat-v7"])
implementation(rootProject.ext.dependencies["design"])
implementation(rootProject.ext.dependencies["constraint-layout"])
implementation(rootProject.ext.dependencies["appcompat-v7"])
implementation(rootProject.ext.dependencies["constraint-layout"])
implementation(rootProject.ext.dependencies["okhttp3-logging"])
implementation(rootProject.ext.dependencies["retrofit-converter-gson"])
implementation(rootProject.ext.dependencies["retrofit"])
implementation(rootProject.ext.dependencies["okhttp3"])
implementation(rootProject.ext.dependencies["glide"])
implementation(rootProject.ext.dependencies["gson"])
if (rootProject.ext.dev_mode){
//开发时使用
api project(':ydl-platform')
}else {
//发布时使用
api(rootProject.ext.dependencies["ydl-platform"]) {
transitive = true
}
}
implementation "com.blankj:utilcode:1.25.9"
api "com.tencent.liteav:LiteAVSDK_TRTC:latest.release"
api project(':ydl-tuicore')
}
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.tencent.liteav.trtccalling">
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<application>
<activity
android:name=".ui.base.BaseCallActivity"
android:launchMode="singleTask"
android:screenOrientation="portrait"
android:theme="@style/Theme.AppCompat.NoActionBar" />
<provider
android:name=".model.impl.ServiceInitializer"
android:authorities="${applicationId}.ServiceInitializer"
android:enabled="true"
android:exported="false" />
<!-- 保活Service-->
<service
android:name=".ui.service.TUICallService"
android:enabled="true"
android:exported="false" />
<activity
android:name="com.tencent.liteav.videocall.VideoCallingActivity"
android:launchMode="singleTask"
android:screenOrientation="portrait"
android:theme="@style/Theme.AppCompat.NoActionBar" />
</application>
</manifest>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="TRTCCallingRoundCornerImageView">
<attr name="trtc_radius" format="dimension" />
<attr name="left_top_radius" format="dimension" />
<attr name="right_top_radius" format="dimension" />
<attr name="right_bottom_radius" format="dimension" />
<attr name="left_bottom_radius" format="dimension" />
</declare-styleable>
</resources>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="trtccalling_color_btn_enable">#FF0062E3</color>
<color name="trtccalling_color_btn_disable">#FF08326B</color>
<color name="trtccalling_color_text_tips">#FF6B82A8</color>
<color name="trtccalling_color_primary">#FF016EFF</color>
<color name="trtccalling_text_second">#FF737373</color>
<color name="trtccalling_color_white">#FFFFFFFF</color>
<color name="trtccalling_color_black">#000000</color>
<color name="trtccalling_color_blue">#006EFF</color>
<color name="trtccalling_color_shade">#33000000</color>
<color name="trtccalling_color_background">#FF444444</color>
<color name="trtccalling_color_bg_cl_search">#FF092650</color>
<color name="trtccalling_color_edit_hint">#FF6B82A8</color>
<color name="trtccalling_color_head_background">#FF555555</color>
<color name="trtccalling_color_main">#333333</color>
<color name="trtccalling_color_second">#666666</color>
<color name="trtccalling_color_gray">#FF999999</color>
<color name="trtccalling_color_audiocall_background">#FFF1F2F8</color>
<color name="trtccalling_color_videocall_background">#FF55534F</color>
<color name="trtccalling_color_text_search_hit">#FFBBBBBB</color>
<color name="trtccalling_color_countrycode_bg_dialog">#66000000</color>
<color name="trtccalling_color_line">#DDDDDD</color>
<color name="trtccalling_color_disable">#DBDBDB</color>
<color name="trtccalling_color_transparent">#00000000</color>
<color name="trtccalling_color_green">#FF29CC85</color>
<color name="color_8595a9">#859aa9</color>
<color name="color_F0504A">#F0504A</color>
<color name="color_2D2F33">#2D2F33</color>
<color name="color_0C1138">#0C1138</color>
<color name="color_66FFFFFF">#66FFFFFF</color>
</resources>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="trtccalling_text_size_large">16sp</dimen>
<dimen name="trtccalling_text_size_middle">14sp</dimen>
<dimen name="trtccalling_small_image_size">30dp</dimen>
<dimen name="trtccalling_small_image_left_margin">5dp</dimen>
<dimen name="trtccalling_text_size_hint">12sp</dimen>
</resources>
\ No newline at end of file
<resources>
<string name="trtccalling_inviting_tag">They also</string>
<string name="trtccalling_call_time_default">"00:01"</string>
<string name="trtccalling_contact_default_name">test 123</string>
<string name="trtccalling_invite_video_call">Invites you to a video call…</string>
<string name="trtccalling_start_call">Call</string>
<string name="trtccalling_search">Search</string>
<string name="trtccalling_toast_search_fail">Search failed:%1$s.</string>
<string name="trtccalling_toast_call_error_msg">Error [%1$d]:%2$s.</string>
<string name="trtccalling_toast_user_reject_call">%1$s declined the call.</string>
<string name="trtccalling_toast_user_not_response">%1$s didn’t answer.</string>
<string name="trtccalling_toast_user_busy">%1$s is busy.</string>
<string name="trtccalling_toast_user_cancel_call">%1$s cancelled the call.</string>
<string name="trtccalling_toast_user_timeout">%1$s timed out.</string>
<string name="trtccalling_toast_enable_mute">Muted</string>
<string name="trtccalling_toast_disable_mute">Unmuted</string>
<string name="trtccalling_toast_use_speaker">Speaker</string>
<string name="trtccalling_toast_use_handset">Earpiece</string>
<string name="trtccalling_called_time_format">%02d:%02d</string>
<string name="trtccalling_self_phone">Your mobile number:</string>
<string name="trtccalling_toast_user_end">%s end the call.</string>
<string name="trtccalling_title_have_a_call_invitation">You have a call invitation.</string>
<string name="trtccalling_other_party_network_low_quality">The other party\'s network connection is poor</string>
<string name="trtccalling_self_network_low_quality">Your network connection is poor</string>
<string name="trtccalling_toast_switch_camera">Switch Camera</string>
<string name="trtccalling_toast_enable_camera">Camera On</string>
<string name="trtccalling_toast_disable_camera">Camera Off</string>
<string name="trtccalling_waiting_be_accepted">Waiting for the user to accept…</string>
<string name="trtccalling_invite_audio_call">Invited you to an voice call…</string>
<string name="trtccalling_text_microphone">Mic</string>
<string name="trtccalling_text_hangup">Hang Up</string>
<string name="trtccalling_text_reject">Decline</string>
<string name="trtccalling_text_speaker">Speaker</string>
<string name="trtccalling_text_dialing">Answer</string>
<string name="trtccalling_text_camera">Camera</string>
<string name="trtccalling_switch_camera_hint">Turn on your camera first</string>
<string name="trtccalling_switch_audio_call">Switch to Voice Call</string>
<string name="trtccalling_btn_cancel">Cancel</string>
<string name="trtccalling_tips_start_camera_audio">Please turn on the camera and microphone permissions first</string>
<string name="trtccalling_tips_start_audio">Please turn on the microphone permissions first</string>
<string name="trtccalling_video_call">Video Call</string>
<string name="trtccalling_audio_call">Voice Call</string>
<string name="trtccalling_user_kicked_offline">You have been kicked off the line. Please log in again!</string>
<string name="trtccalling_user_sig_expired">Your user signature information has expired</string>
<string name="trtccalling_user_exceed_limit">TUICalling currently supports call with up to 9 people.For
larger conference calls,try using TUIRoom</string>
<string name="trtccalling_wait_resonse">Waiting</string>
<string name="trtccalling_float_permission">please open "Display over other apps" permission</string>
<string name="trtccalling_is_calling">Unable to restart the call</string>
</resources>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="TRTCCallingCountryCodeDialog" parent="@android:style/Theme.Holo.Dialog">
<item name="android:windowIsFloating">false</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowCloseOnTouchOutside">true</item>
<item name="android:windowBackground">@color/trtccalling_color_countrycode_bg_dialog</item>
<item name="android:windowSoftInputMode">adjustResize</item>
</style>
</resources>
\ No newline at end of file
plugins {
id 'com.android.library'
}
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
apply from: "../maven_push.gradle"
android {
......@@ -35,9 +41,33 @@ android {
dependencies {
api fileTree(include: ['*.jar','*.aar'], dir: 'libs')
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation(rootProject.ext.dependencies["support-multidex"])
implementation(rootProject.ext.dependencies["recyclerview-v7"])
implementation(rootProject.ext.dependencies["appcompat-v7"])
implementation(rootProject.ext.dependencies["design"])
implementation(rootProject.ext.dependencies["constraint-layout"])
implementation(rootProject.ext.dependencies["appcompat-v7"])
implementation(rootProject.ext.dependencies["constraint-layout"])
implementation(rootProject.ext.dependencies["okhttp3-logging"])
implementation(rootProject.ext.dependencies["retrofit-converter-gson"])
implementation(rootProject.ext.dependencies["retrofit"])
implementation(rootProject.ext.dependencies["okhttp3"])
implementation(rootProject.ext.dependencies["glide"])
implementation(rootProject.ext.dependencies["recyclerview-v7"])
implementation(rootProject.ext.dependencies["gson"])
if (rootProject.ext.dev_mode){
//开发时使用
api project(':ydl-platform')
}else {
//发布时使用
api(rootProject.ext.dependencies["ydl-platform"]) {
transitive = true
}
}
implementation "com.blankj:utilcode:1.25.9"
api "com.tencent.liteav:LiteAVSDK_TRTC:latest.release"
api "com.tencent.imsdk:imsdk-plus:latest.release"
}
\ No newline at end of file
......@@ -22,5 +22,18 @@
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths_public"/>
</provider>
<!--通话界面-->
<activity
android:name=".calling.videocall.VideoCallingActivity"
android:launchMode="singleTask"
android:screenOrientation="portrait"
android:theme="@style/Theme.AppCompat.NoActionBar" />
<!--接听界面-->
<activity
android:name=".calling.videocall.YDLInvitionActivity"
android:launchMode="singleTask"
android:screenOrientation="portrait"
android:theme="@style/Theme.AppCompat.NoActionBar" />
</application>
</manifest>
\ No newline at end of file
package com.tencent.liteav.basic;
package com.tencent.qcloud.tuicore.calling.basic;
public interface AvatarConstant {
String USER_AVATAR_ARRAY [] = {
......
package com.tencent.liteav.basic;
package com.tencent.qcloud.tuicore.calling.basic;
import android.content.Context;
import android.content.res.Resources;
......
package com.tencent.liteav.basic;
package com.tencent.qcloud.tuicore.calling.basic;
import android.app.Application;
import android.content.ActivityNotFoundException;
......
package com.tencent.liteav.basic;
package com.tencent.qcloud.tuicore.calling.basic;
import java.io.Serializable;
......
......@@ -4,10 +4,10 @@ import android.content.Context
import android.util.Log
import com.blankj.utilcode.util.ToastUtils
import com.tencent.imsdk.v2.*
import com.tencent.liteav.basic.UserModel
import com.tencent.liteav.basic.UserModelManager
import com.tencent.liteav.trtccalling.TUICallingImpl
import com.tencent.qcloud.tuicore.TUILogin
import com.tencent.qcloud.tuicore.calling.basic.UserModel
import com.tencent.qcloud.tuicore.calling.basic.UserModelManager
import com.tencent.qcloud.tuicore.calling.trtccalling.TUICallingImpl
import java.util.*
......
package com.tencent.liteav.trtccalling;
package com.tencent.qcloud.tuicore.calling.trtccalling;
import android.view.View;
......
package com.tencent.liteav.trtccalling;
package com.tencent.qcloud.tuicore.calling.trtccalling;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
......@@ -9,23 +8,21 @@ import android.text.TextUtils;
import android.util.Log;
import com.blankj.utilcode.util.ToastUtils;
import com.tencent.liteav.basic.UserModel;
import com.tencent.liteav.basic.UserModelManager;
import com.tencent.liteav.trtccalling.model.TRTCCalling;
import com.tencent.liteav.trtccalling.model.TRTCCallingDelegate;
import com.tencent.liteav.trtccalling.model.impl.TRTCCallingCallback;
import com.tencent.liteav.trtccalling.model.impl.base.TRTCLogger;
import com.tencent.liteav.trtccalling.model.util.TUICallingConstants;
import com.tencent.liteav.trtccalling.ui.audiocall.TUICallAudioView;
import com.tencent.liteav.trtccalling.ui.audiocall.TUIGroupCallAudioView;
import com.tencent.liteav.trtccalling.ui.base.BaseCallActivity;
import com.tencent.liteav.trtccalling.ui.base.BaseTUICallView;
import com.tencent.liteav.trtccalling.ui.base.Status;
import com.tencent.liteav.trtccalling.ui.service.TUICallService;
import com.tencent.liteav.trtccalling.ui.videocall.TUICallVideoView;
import com.tencent.liteav.trtccalling.ui.videocall.TUIGroupCallVideoView;
import com.tencent.liteav.videocall.Constant;
import com.tencent.liteav.videocall.VideoCallingActivity;
import com.tencent.qcloud.tuicore.R;
import com.tencent.qcloud.tuicore.calling.basic.UserModel;
import com.tencent.qcloud.tuicore.calling.basic.UserModelManager;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.TRTCCalling;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.TRTCCallingDelegate;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.impl.TRTCCallingCallback;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.impl.base.TRTCLogger;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.util.TUICallingConstants;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.audiocall.TUICallAudioView;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.audiocall.TUIGroupCallAudioView;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.base.BaseTUICallView;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.base.Status;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.service.TUICallService;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.videocall.TUICallVideoView;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.videocall.TUIGroupCallVideoView;
import com.tencent.trtc.TRTCCloudDef;
import java.util.ArrayList;
......
package com.tencent.liteav.trtccalling.model;
package com.tencent.qcloud.tuicore.calling.trtccalling.model;
import android.app.ActivityManager;
import android.content.Context;
......@@ -31,24 +31,24 @@ import com.tencent.imsdk.v2.V2TIMSimpleMsgListener;
import com.tencent.imsdk.v2.V2TIMUserFullInfo;
import com.tencent.imsdk.v2.V2TIMUserInfo;
import com.tencent.imsdk.v2.V2TIMValueCallback;
import com.tencent.liteav.basic.UserModel;
import com.tencent.liteav.basic.UserModelManager;
import com.tencent.liteav.beauty.TXBeautyManager;
import com.tencent.liteav.trtccalling.R;
import com.tencent.liteav.trtccalling.model.impl.TRTCCallingCallback;
import com.tencent.liteav.trtccalling.model.impl.base.CallModel;
import com.tencent.liteav.trtccalling.model.impl.base.MessageCustom;
import com.tencent.liteav.trtccalling.model.impl.base.OfflineMessageBean;
import com.tencent.liteav.trtccalling.model.impl.base.OfflineMessageContainerBean;
import com.tencent.liteav.trtccalling.model.impl.base.SignallingData;
import com.tencent.liteav.trtccalling.model.impl.base.TRTCInternalListenerManager;
import com.tencent.liteav.trtccalling.model.impl.base.TRTCLogger;
import com.tencent.liteav.trtccalling.model.util.MediaPlayHelper;
import com.tencent.liteav.trtccalling.model.util.PermissionUtil;
import com.tencent.liteav.trtccalling.model.util.TUICallingConstants;
import com.tencent.liteav.videocall.Constant;
import com.tencent.liteav.videocall.VideoCallingActivity;
import com.tencent.qcloud.tuicore.R;
import com.tencent.qcloud.tuicore.TUILogin;
import com.tencent.qcloud.tuicore.calling.basic.UserModel;
import com.tencent.qcloud.tuicore.calling.basic.UserModelManager;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.impl.TRTCCallingCallback;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.impl.base.CallModel;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.impl.base.MessageCustom;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.impl.base.OfflineMessageBean;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.impl.base.OfflineMessageContainerBean;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.impl.base.SignallingData;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.impl.base.TRTCInternalListenerManager;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.impl.base.TRTCLogger;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.util.MediaPlayHelper;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.util.PermissionUtil;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.util.TUICallingConstants;
import com.tencent.qcloud.tuicore.calling.videocall.Constant;
import com.tencent.qcloud.tuicore.calling.videocall.YDLInvitionActivity;
import com.tencent.rtmp.TXLiveBase;
import com.tencent.rtmp.ui.TXCloudVideoView;
import com.tencent.trtc.TRTCCloud;
......@@ -325,9 +325,10 @@ public class TRTCCalling {
final UserModel userModel = UserModelManager.getInstance().getUserModel();
Intent intent = new Intent(mContext, VideoCallingActivity.class);
Intent intent = new Intent(mContext, YDLInvitionActivity.class);
intent.putExtra(Constant.ROOM_ID, groupID);
intent.putExtra(Constant.USER_ID, userModel.userId);
intent.putExtra(Constant.INVITE_ID, inviter);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(intent);
......@@ -1169,10 +1170,11 @@ public class TRTCCalling {
}
final UserModel userModel = UserModelManager.getInstance().getUserModel();
Intent intent = new Intent(mContext, VideoCallingActivity.class);
Intent intent = new Intent(mContext, YDLInvitionActivity.class);
intent.putExtra(Constant.ROOM_ID, groupId);
intent.putExtra(Constant.USER_ID, userModel.userId);
mContext.startActivity(intent);
intent.putExtra(Constant.INVITE_ID, userIdList.get(0));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// internalCall(userIdList, type, groupId);
}
......
package com.tencent.liteav.trtccalling.model;
package com.tencent.qcloud.tuicore.calling.trtccalling.model;
import com.tencent.trtc.TRTCCloudDef;
......
package com.tencent.liteav.trtccalling.model.impl;
package com.tencent.qcloud.tuicore.calling.trtccalling.model.impl;
import android.app.Activity;
import android.app.Application;
......@@ -13,10 +13,10 @@ import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.tencent.liteav.trtccalling.TUICallingImpl;
import com.tencent.qcloud.tuicore.TUIConstants;
import com.tencent.qcloud.tuicore.TUICore;
import com.tencent.qcloud.tuicore.TUILogin;
import com.tencent.qcloud.tuicore.calling.trtccalling.TUICallingImpl;
/**
......
package com.tencent.liteav.trtccalling.model.impl;
package com.tencent.qcloud.tuicore.calling.trtccalling.model.impl;
import android.content.Context;
import android.os.Bundle;
......@@ -10,12 +10,12 @@ import android.widget.ImageView;
import android.widget.TextView;
import com.tencent.imsdk.v2.V2TIMConversation;
import com.tencent.liteav.trtccalling.R;
import com.tencent.liteav.trtccalling.TUICalling;
import com.tencent.liteav.trtccalling.TUICallingImpl;
import com.tencent.liteav.trtccalling.model.util.TUICallingConstants;
import com.tencent.qcloud.tuicore.R;
import com.tencent.qcloud.tuicore.TUIConstants;
import com.tencent.qcloud.tuicore.TUICore;
import com.tencent.qcloud.tuicore.calling.trtccalling.TUICalling;
import com.tencent.qcloud.tuicore.calling.trtccalling.TUICallingImpl;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.util.TUICallingConstants;
import com.tencent.qcloud.tuicore.interfaces.ITUIExtension;
import com.tencent.qcloud.tuicore.interfaces.ITUINotification;
import com.tencent.qcloud.tuicore.interfaces.ITUIService;
......
package com.tencent.liteav.trtccalling.model.impl;
package com.tencent.qcloud.tuicore.calling.trtccalling.model.impl;
public class UserModel {
public String userId;
......
package com.tencent.liteav.trtccalling.model.impl.base;
package com.tencent.qcloud.tuicore.calling.trtccalling.model.impl.base;
import com.google.gson.annotations.SerializedName;
......
package com.tencent.liteav.trtccalling.model.impl.base;
package com.tencent.qcloud.tuicore.calling.trtccalling.model.impl.base;
import android.text.TextUtils;
import com.tencent.imsdk.v2.V2TIMManager;
import com.tencent.imsdk.v2.V2TIMUserFullInfo;
import com.tencent.imsdk.v2.V2TIMValueCallback;
import com.tencent.liteav.trtccalling.model.impl.UserModel;
import com.tencent.qcloud.tuicore.calling.basic.UserModel;
import java.util.ArrayList;
import java.util.List;
......
package com.tencent.liteav.trtccalling.model.impl.base;
package com.tencent.qcloud.tuicore.calling.trtccalling.model.impl.base;
public class MessageCustom {
public static final String BUSINESS_ID_GROUP_CREATE = "group_create";
......
package com.tencent.liteav.trtccalling.model.impl.base;
package com.tencent.qcloud.tuicore.calling.trtccalling.model.impl.base;
import com.tencent.imsdk.v2.V2TIMConversation;
......
package com.tencent.liteav.trtccalling.model.impl.base;
package com.tencent.qcloud.tuicore.calling.trtccalling.model.impl.base;
/**
* 为什么离线消息要做两层嵌套,主要是因为后台在携带离线数据时的包装不一样
......
package com.tencent.liteav.trtccalling.model.impl.base;
package com.tencent.qcloud.tuicore.calling.trtccalling.model.impl.base;
import java.util.List;
......
package com.tencent.liteav.trtccalling.model.impl.base;
package com.tencent.qcloud.tuicore.calling.trtccalling.model.impl.base;
import com.tencent.liteav.trtccalling.model.TRTCCallingDelegate;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.TRTCCallingDelegate;
import com.tencent.trtc.TRTCCloudDef;
import java.lang.ref.WeakReference;
......
package com.tencent.liteav.trtccalling.model.impl.base;
package com.tencent.qcloud.tuicore.calling.trtccalling.model.impl.base;
import com.tencent.liteav.basic.log.TXCLog;
......
package com.tencent.liteav.trtccalling.model.util;
package com.tencent.qcloud.tuicore.calling.trtccalling.model.util;
public interface AvatarConstant {
String USER_AVATAR_ARRAY [] = {
......
package com.tencent.liteav.trtccalling.model.util;
package com.tencent.qcloud.tuicore.calling.trtccalling.model.util;
import android.text.TextUtils;
......
package com.tencent.liteav.trtccalling.model.util;
package com.tencent.qcloud.tuicore.calling.trtccalling.model.util;
import android.content.Context;
import android.content.res.Resources;
......
package com.tencent.liteav.trtccalling.model.util;
package com.tencent.qcloud.tuicore.calling.trtccalling.model.util;
import android.content.Context;
import android.content.res.AssetFileDescriptor;
......@@ -10,7 +10,8 @@ import android.os.HandlerThread;
import android.text.TextUtils;
import android.util.Log;
import com.tencent.liteav.trtccalling.model.impl.base.TRTCLogger;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.impl.base.TRTCLogger;
import java.io.File;
import java.io.IOException;
......
package com.tencent.liteav.trtccalling.model.util;
package com.tencent.qcloud.tuicore.calling.trtccalling.model.util;
import android.app.AppOpsManager;
import android.content.Context;
......
package com.tencent.liteav.trtccalling.model.util;
package com.tencent.qcloud.tuicore.calling.trtccalling.model.util;
public class TUICallingConstants {
......
package com.tencent.liteav.trtccalling.ui.audiocall;
package com.tencent.qcloud.tuicore.calling.trtccalling.ui.audiocall;
import android.content.Context;
import android.util.Log;
......@@ -14,16 +14,16 @@ import com.blankj.utilcode.constant.PermissionConstants;
import com.blankj.utilcode.util.CollectionUtils;
import com.blankj.utilcode.util.PermissionUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.tencent.liteav.trtccalling.R;
import com.tencent.liteav.trtccalling.TUICalling;
import com.tencent.liteav.trtccalling.model.TRTCCalling;
import com.tencent.liteav.trtccalling.model.impl.UserModel;
import com.tencent.liteav.trtccalling.model.impl.base.CallingInfoManager;
import com.tencent.liteav.trtccalling.model.impl.base.TRTCLogger;
import com.tencent.liteav.trtccalling.model.util.ImageLoader;
import com.tencent.liteav.trtccalling.ui.audiocall.audiolayout.TRTCAudioLayout;
import com.tencent.liteav.trtccalling.ui.audiocall.audiolayout.TRTCAudioLayoutManager;
import com.tencent.liteav.trtccalling.ui.base.BaseTUICallView;
import com.tencent.qcloud.tuicore.R;
import com.tencent.qcloud.tuicore.calling.basic.ImageLoader;
import com.tencent.qcloud.tuicore.calling.basic.UserModel;
import com.tencent.qcloud.tuicore.calling.trtccalling.TUICalling;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.TRTCCalling;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.impl.base.CallingInfoManager;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.impl.base.TRTCLogger;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.audiocall.audiolayout.TRTCAudioLayout;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.audiocall.audiolayout.TRTCAudioLayoutManager;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.base.BaseTUICallView;
import java.util.List;
import java.util.Map;
......@@ -220,6 +220,7 @@ public class TUICallAudioView extends BaseTUICallView {
/**
* 等待接听界面
*/
@Override
public void showWaitingResponseView() {
super.showWaitingResponseView();
//1. 展示对方的画面
......@@ -258,6 +259,7 @@ public class TUICallAudioView extends BaseTUICallView {
/**
* 展示邀请列表
*/
@Override
public void showInvitingView() {
super.showInvitingView();
//1. 展示自己的界面
......@@ -291,6 +293,7 @@ public class TUICallAudioView extends BaseTUICallView {
/**
* 展示通话中的界面
*/
@Override
public void showCallingView() {
super.showCallingView();
mLayoutHangup.setVisibility(View.VISIBLE);
......
package com.tencent.liteav.trtccalling.ui.audiocall;
package com.tencent.qcloud.tuicore.calling.trtccalling.ui.audiocall;
import android.content.Context;
import android.text.TextUtils;
......@@ -14,16 +14,16 @@ import com.blankj.utilcode.constant.PermissionConstants;
import com.blankj.utilcode.util.CollectionUtils;
import com.blankj.utilcode.util.PermissionUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.tencent.liteav.trtccalling.R;
import com.tencent.liteav.trtccalling.TUICalling;
import com.tencent.liteav.trtccalling.model.TRTCCalling;
import com.tencent.liteav.trtccalling.model.impl.UserModel;
import com.tencent.liteav.trtccalling.model.impl.base.CallingInfoManager;
import com.tencent.liteav.trtccalling.model.impl.base.TRTCLogger;
import com.tencent.liteav.trtccalling.model.util.ImageLoader;
import com.tencent.liteav.trtccalling.ui.audiocall.audiolayout.TRTCGroupAudioLayout;
import com.tencent.liteav.trtccalling.ui.audiocall.audiolayout.TRTCGroupAudioLayoutManager;
import com.tencent.liteav.trtccalling.ui.base.BaseTUICallView;
import com.tencent.qcloud.tuicore.R;
import com.tencent.qcloud.tuicore.calling.basic.ImageLoader;
import com.tencent.qcloud.tuicore.calling.basic.UserModel;
import com.tencent.qcloud.tuicore.calling.trtccalling.TUICalling;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.TRTCCalling;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.impl.base.CallingInfoManager;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.impl.base.TRTCLogger;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.audiocall.audiolayout.TRTCGroupAudioLayout;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.audiocall.audiolayout.TRTCGroupAudioLayoutManager;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.base.BaseTUICallView;
import java.util.List;
import java.util.Map;
......@@ -266,6 +266,7 @@ public class TUIGroupCallAudioView extends BaseTUICallView {
/**
* 等待接听界面
*/
@Override
public void showWaitingResponseView() {
super.showWaitingResponseView();
//1. 展示对方的画面
......@@ -310,6 +311,7 @@ public class TUIGroupCallAudioView extends BaseTUICallView {
/**
* 展示邀请列表
*/
@Override
public void showInvitingView() {
super.showInvitingView();
//1. 展示自己的界面
......@@ -343,6 +345,7 @@ public class TUIGroupCallAudioView extends BaseTUICallView {
/**
* 展示通话中的界面
*/
@Override
public void showCallingView() {
super.showCallingView();
//1. 增加自己的画面
......
package com.tencent.liteav.trtccalling.ui.audiocall.audiolayout;
package com.tencent.qcloud.tuicore.calling.trtccalling.ui.audiocall.audiolayout;
import android.content.Context;
import android.util.AttributeSet;
......@@ -6,8 +6,9 @@ import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.tencent.liteav.trtccalling.R;
import com.tencent.liteav.trtccalling.ui.common.RoundCornerImageView;
import com.tencent.qcloud.tuicore.R;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.common.RoundCornerImageView;
/**
* 通话界面中,显示单个用户头像的自定义布局
......
package com.tencent.liteav.trtccalling.ui.audiocall.audiolayout;
package com.tencent.qcloud.tuicore.calling.trtccalling.ui.audiocall.audiolayout;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.RelativeLayout;
import com.tencent.liteav.trtccalling.model.impl.base.TRTCLogger;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.impl.base.TRTCLogger;
import java.util.ArrayList;
import java.util.Iterator;
......
package com.tencent.liteav.trtccalling.ui.audiocall.audiolayout;
package com.tencent.qcloud.tuicore.calling.trtccalling.ui.audiocall.audiolayout;
import android.content.Context;
import android.graphics.Bitmap;
......@@ -7,9 +7,10 @@ import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.tencent.liteav.trtccalling.R;
import com.tencent.liteav.trtccalling.model.util.ImageLoader;
import com.tencent.liteav.trtccalling.ui.common.RoundCornerImageView;
import com.tencent.qcloud.tuicore.R;
import com.tencent.qcloud.tuicore.calling.basic.ImageLoader;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.common.RoundCornerImageView;
/**
* Module: TRTCGroupAudioLayout
......
package com.tencent.liteav.trtccalling.ui.audiocall.audiolayout;
package com.tencent.qcloud.tuicore.calling.trtccalling.ui.audiocall.audiolayout;
import android.content.Context;
import android.text.TextUtils;
......
package com.tencent.liteav.trtccalling.ui.audiocall.audiolayout;
package com.tencent.qcloud.tuicore.calling.trtccalling.ui.audiocall.audiolayout;
import android.content.Context;
import android.widget.RelativeLayout;
......
package com.tencent.liteav.trtccalling.ui.base;
package com.tencent.qcloud.tuicore.calling.trtccalling.ui.base;
import android.app.Activity;
import android.content.Intent;
......@@ -9,22 +9,20 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import com.blankj.utilcode.util.ToastUtils;
import com.tencent.liteav.trtccalling.R;
import com.tencent.liteav.trtccalling.TUICalling;
import com.tencent.liteav.trtccalling.model.impl.base.TRTCLogger;
import com.tencent.liteav.trtccalling.model.util.PermissionUtil;
import com.tencent.liteav.trtccalling.model.util.TUICallingConstants;
import com.tencent.liteav.trtccalling.ui.audiocall.TUICallAudioView;
import com.tencent.liteav.trtccalling.ui.audiocall.TUIGroupCallAudioView;
import com.tencent.liteav.trtccalling.ui.common.Utils;
import com.tencent.liteav.trtccalling.ui.floatwindow.FloatCallView;
import com.tencent.liteav.trtccalling.ui.floatwindow.FloatWindowService;
import com.tencent.liteav.trtccalling.ui.floatwindow.HomeWatcher;
import com.tencent.liteav.trtccalling.ui.videocall.TUICallVideoView;
import com.tencent.liteav.trtccalling.ui.videocall.TUIGroupCallVideoView;
import com.tencent.liteav.trtccalling.ui.videocall.videolayout.TRTCVideoLayout;
import com.tencent.qcloud.tuicore.TUILogin;
import com.tencent.qcloud.tuicore.calling.trtccalling.TUICalling;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.impl.base.TRTCLogger;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.util.PermissionUtil;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.util.TUICallingConstants;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.audiocall.TUICallAudioView;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.audiocall.TUIGroupCallAudioView;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.common.Utils;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.floatwindow.FloatCallView;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.floatwindow.FloatWindowService;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.floatwindow.HomeWatcher;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.videocall.TUICallVideoView;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.videocall.TUIGroupCallVideoView;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.videocall.videolayout.TRTCVideoLayout;
import com.tencent.rtmp.ui.TXCloudVideoView;
public class BaseCallActivity extends Activity {
......@@ -32,14 +30,14 @@ public class BaseCallActivity extends Activity {
private Activity mActivity;
private BaseTUICallView mCallView;
private FloatCallView mFloatView;
private FloatCallView mFloatView;
private TUICalling.Type mType;
private TUICalling.Role mRole;
private String[] mUserIds;
private String mSponsorID;
private String mGroupID;
private boolean mIsFromGroup;
private HomeWatcher mHomeWatcher;
private HomeWatcher mHomeWatcher;
private boolean mEnableFloatWindow; //用户是否支持显示悬浮窗
private VideoLayoutFactory mVideoFactory;
......
package com.tencent.liteav.trtccalling.ui.base;
package com.tencent.qcloud.tuicore.calling.trtccalling.ui.base;
import android.app.Activity;
import android.app.NotificationManager;
......@@ -13,17 +13,17 @@ import android.widget.TextView;
import android.widget.Toast;
import com.blankj.utilcode.util.ToastUtils;
import com.tencent.liteav.trtccalling.R;
import com.tencent.liteav.trtccalling.TUICalling;
import com.tencent.liteav.trtccalling.model.TRTCCalling;
import com.tencent.liteav.trtccalling.model.TRTCCallingDelegate;
import com.tencent.liteav.trtccalling.model.impl.UserModel;
import com.tencent.liteav.trtccalling.model.impl.base.CallingInfoManager;
import com.tencent.liteav.trtccalling.model.impl.base.TRTCLogger;
import com.tencent.liteav.trtccalling.ui.floatwindow.FloatWindowService;
import com.tencent.qcloud.tuicore.R;
import com.tencent.qcloud.tuicore.TUIConstants;
import com.tencent.qcloud.tuicore.TUICore;
import com.tencent.qcloud.tuicore.TUILogin;
import com.tencent.qcloud.tuicore.calling.basic.UserModel;
import com.tencent.qcloud.tuicore.calling.trtccalling.TUICalling;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.TRTCCalling;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.TRTCCallingDelegate;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.impl.base.CallingInfoManager;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.impl.base.TRTCLogger;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.floatwindow.FloatWindowService;
import com.tencent.qcloud.tuicore.interfaces.ITUINotification;
import com.tencent.trtc.TRTCCloudDef;
......@@ -39,8 +39,8 @@ public abstract class BaseTUICallView extends FrameLayout implements TRTCCalling
//音视频通话基础信息
protected Context mContext;
protected TRTCCalling mTRTCCalling;
protected UserModel mSelfModel;
protected TRTCCalling mTRTCCalling;
protected UserModel mSelfModel;
protected TUICalling.Role mRole;
protected TUICalling.Type mCallType;
protected String[] mUserIDs;
......
package com.tencent.liteav.trtccalling.ui.base;
package com.tencent.qcloud.tuicore.calling.trtccalling.ui.base;
public class Status {
......
package com.tencent.liteav.trtccalling.ui.base;
package com.tencent.qcloud.tuicore.calling.trtccalling.ui.base;
import com.tencent.liteav.trtccalling.ui.videocall.videolayout.TRTCVideoLayout;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.videocall.videolayout.TRTCVideoLayout;
public class TRTCLayoutEntity {
public TRTCVideoLayout layout;
......
package com.tencent.liteav.trtccalling.ui.base;
package com.tencent.qcloud.tuicore.calling.trtccalling.ui.base;
import android.content.Context;
import android.view.View;
import com.tencent.liteav.trtccalling.ui.videocall.videolayout.TRTCVideoLayout;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.videocall.videolayout.TRTCVideoLayout;
import java.util.Iterator;
import java.util.LinkedList;
......
package com.tencent.liteav.trtccalling.ui.common;
package com.tencent.qcloud.tuicore.calling.trtccalling.ui.common;
import android.content.Context;
import android.content.res.TypedArray;
......@@ -9,7 +9,8 @@ import android.view.View;
import androidx.appcompat.widget.AppCompatImageView;
import com.tencent.liteav.trtccalling.R;
import com.tencent.qcloud.tuicore.R;
public class RoundCornerImageView extends AppCompatImageView {
......
package com.tencent.liteav.trtccalling.ui.common;
package com.tencent.qcloud.tuicore.calling.trtccalling.ui.common;
import android.content.Context;
import android.os.PowerManager;
......
package com.tencent.liteav.trtccalling.ui.floatwindow;
package com.tencent.qcloud.tuicore.calling.trtccalling.ui.floatwindow;
import android.content.Context;
import android.content.Intent;
......@@ -14,16 +14,16 @@ import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.tencent.liteav.trtccalling.R;
import com.tencent.liteav.trtccalling.TUICalling;
import com.tencent.liteav.trtccalling.model.impl.base.TRTCLogger;
import com.tencent.liteav.trtccalling.model.util.TUICallingConstants;
import com.tencent.liteav.trtccalling.ui.base.BaseCallActivity;
import com.tencent.liteav.trtccalling.ui.base.BaseTUICallView;
import com.tencent.liteav.trtccalling.ui.base.Status;
import com.tencent.liteav.trtccalling.ui.base.VideoLayoutFactory;
import com.tencent.liteav.trtccalling.ui.videocall.videolayout.TRTCVideoLayout;
import com.tencent.qcloud.tuicore.R;
import com.tencent.qcloud.tuicore.TUILogin;
import com.tencent.qcloud.tuicore.calling.trtccalling.TUICalling;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.impl.base.TRTCLogger;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.util.TUICallingConstants;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.base.BaseCallActivity;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.base.BaseTUICallView;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.base.Status;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.base.VideoLayoutFactory;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.videocall.videolayout.TRTCVideoLayout;
import com.tencent.rtmp.ui.TXCloudVideoView;
public class FloatCallView extends BaseTUICallView {
......
package com.tencent.liteav.trtccalling.ui.floatwindow;
package com.tencent.qcloud.tuicore.calling.trtccalling.ui.floatwindow;
import android.animation.ValueAnimator;
import android.app.Service;
......@@ -13,10 +13,11 @@ import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import com.tencent.liteav.trtccalling.R;
import com.tencent.liteav.trtccalling.model.impl.base.TRTCLogger;
import com.tencent.liteav.trtccalling.ui.base.BaseTUICallView;
import com.tencent.liteav.trtccalling.ui.base.Status;
import com.tencent.qcloud.tuicore.R;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.impl.base.TRTCLogger;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.base.BaseTUICallView;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.base.Status;
/**
* TUICalling组件悬浮窗服务
......
package com.tencent.liteav.trtccalling.ui.floatwindow;
package com.tencent.qcloud.tuicore.calling.trtccalling.ui.floatwindow;
import android.content.BroadcastReceiver;
import android.content.Context;
......
package com.tencent.liteav.trtccalling.ui.service;
package com.tencent.qcloud.tuicore.calling.trtccalling.ui.service;
import android.app.Notification;
import android.app.NotificationChannel;
......
package com.tencent.liteav.trtccalling.ui.videocall;
package com.tencent.qcloud.tuicore.calling.trtccalling.ui.videocall;
import android.content.Context;
import android.view.LayoutInflater;
......@@ -16,19 +16,19 @@ import androidx.constraintlayout.widget.Group;
import com.blankj.utilcode.constant.PermissionConstants;
import com.blankj.utilcode.util.PermissionUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.tencent.liteav.trtccalling.R;
import com.tencent.liteav.trtccalling.TUICalling;
import com.tencent.liteav.trtccalling.model.TRTCCalling;
import com.tencent.liteav.trtccalling.model.impl.UserModel;
import com.tencent.liteav.trtccalling.model.impl.base.CallingInfoManager;
import com.tencent.liteav.trtccalling.model.impl.base.TRTCLogger;
import com.tencent.liteav.trtccalling.model.util.ImageLoader;
import com.tencent.liteav.trtccalling.ui.base.BaseTUICallView;
import com.tencent.liteav.trtccalling.ui.base.VideoLayoutFactory;
import com.tencent.liteav.trtccalling.ui.common.RoundCornerImageView;
import com.tencent.liteav.trtccalling.ui.common.Utils;
import com.tencent.liteav.trtccalling.ui.videocall.videolayout.TRTCVideoLayout;
import com.tencent.liteav.trtccalling.ui.videocall.videolayout.TRTCVideoLayoutManager;
import com.tencent.qcloud.tuicore.R;
import com.tencent.qcloud.tuicore.calling.basic.ImageLoader;
import com.tencent.qcloud.tuicore.calling.basic.UserModel;
import com.tencent.qcloud.tuicore.calling.trtccalling.TUICalling;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.TRTCCalling;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.impl.base.CallingInfoManager;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.impl.base.TRTCLogger;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.base.BaseTUICallView;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.base.VideoLayoutFactory;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.common.RoundCornerImageView;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.common.Utils;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.videocall.videolayout.TRTCVideoLayout;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.videocall.videolayout.TRTCVideoLayoutManager;
import java.util.List;
import java.util.Map;
......@@ -52,7 +52,7 @@ public class TUICallVideoView extends BaseTUICallView {
private Group mInvitingGroup;
private LinearLayout mImgContainerLl;
private TextView mTimeTv;
private RoundCornerImageView mSponsorAvatarImg;
private RoundCornerImageView mSponsorAvatarImg;
private TextView mSponsorUserNameTv;
private TextView mSponsorUserVideoTag;
private View mViewSwitchAudioCall;
......@@ -325,6 +325,7 @@ public class TUICallVideoView extends BaseTUICallView {
/**
* 等待接听界面
*/
@Override
public void showWaitingResponseView() {
super.showWaitingResponseView();
//1. 展示自己的画面
......@@ -405,6 +406,7 @@ public class TUICallVideoView extends BaseTUICallView {
/**
* 展示邀请列表
*/
@Override
public void showInvitingView() {
super.showInvitingView();
//1. 展示自己的界面
......@@ -464,6 +466,7 @@ public class TUICallVideoView extends BaseTUICallView {
/**
* 展示通话中的界面
*/
@Override
public void showCallingView() {
super.showCallingView();
mIsCalling = true;
......
package com.tencent.liteav.trtccalling.ui.videocall;
package com.tencent.qcloud.tuicore.calling.trtccalling.ui.videocall;
import android.content.Context;
import android.text.TextUtils;
......@@ -15,18 +15,18 @@ import com.blankj.utilcode.constant.PermissionConstants;
import com.blankj.utilcode.util.CollectionUtils;
import com.blankj.utilcode.util.PermissionUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.tencent.liteav.trtccalling.R;
import com.tencent.liteav.trtccalling.TUICalling;
import com.tencent.liteav.trtccalling.model.TRTCCalling;
import com.tencent.liteav.trtccalling.model.impl.UserModel;
import com.tencent.liteav.trtccalling.model.impl.base.CallingInfoManager;
import com.tencent.liteav.trtccalling.model.impl.base.TRTCLogger;
import com.tencent.liteav.trtccalling.model.util.ImageLoader;
import com.tencent.liteav.trtccalling.ui.base.BaseTUICallView;
import com.tencent.liteav.trtccalling.ui.common.RoundCornerImageView;
import com.tencent.liteav.trtccalling.ui.common.Utils;
import com.tencent.liteav.trtccalling.ui.videocall.videolayout.TRTCGroupVideoLayout;
import com.tencent.liteav.trtccalling.ui.videocall.videolayout.TRTCGroupVideoLayoutManager;
import com.tencent.qcloud.tuicore.R;
import com.tencent.qcloud.tuicore.calling.basic.ImageLoader;
import com.tencent.qcloud.tuicore.calling.basic.UserModel;
import com.tencent.qcloud.tuicore.calling.trtccalling.TUICalling;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.TRTCCalling;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.impl.base.CallingInfoManager;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.impl.base.TRTCLogger;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.base.BaseTUICallView;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.common.RoundCornerImageView;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.common.Utils;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.videocall.videolayout.TRTCGroupVideoLayout;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.videocall.videolayout.TRTCGroupVideoLayoutManager;
import java.util.List;
import java.util.Map;
......@@ -51,7 +51,7 @@ public class TUIGroupCallVideoView extends BaseTUICallView {
private TextView mInvitedTag;
private LinearLayout mImgContainerLl;
private TextView mTimeTv;
private RoundCornerImageView mSponsorAvatarImg;
private RoundCornerImageView mSponsorAvatarImg;
private TextView mSponsorUserNameTv;
private TextView mSponsorUserVideoTag;
private View mViewSwitchAudioCall;
......@@ -367,6 +367,7 @@ public class TUIGroupCallVideoView extends BaseTUICallView {
/**
* 等待接听界面
*/
@Override
public void showWaitingResponseView() {
super.showWaitingResponseView();
//1. 展示自己的画面
......@@ -429,6 +430,7 @@ public class TUIGroupCallVideoView extends BaseTUICallView {
/**
* 展示邀请列表
*/
@Override
public void showInvitingView() {
super.showInvitingView();
//1. 展示自己的界面
......@@ -473,6 +475,7 @@ public class TUIGroupCallVideoView extends BaseTUICallView {
/**
* 展示通话中的界面
*/
@Override
public void showCallingView() {
super.showCallingView();
//1. 增加自己的画面
......
package com.tencent.liteav.trtccalling.ui.videocall.videolayout;
package com.tencent.qcloud.tuicore.calling.trtccalling.ui.videocall.videolayout;
import android.content.Context;
import android.util.AttributeSet;
......
package com.tencent.liteav.trtccalling.ui.videocall.videolayout;
package com.tencent.qcloud.tuicore.calling.trtccalling.ui.videocall.videolayout;
import android.content.Context;
import android.util.AttributeSet;
......@@ -8,9 +8,9 @@ import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.tencent.liteav.trtccalling.R;
import com.tencent.liteav.trtccalling.model.util.ImageLoader;
import com.tencent.liteav.trtccalling.ui.common.RoundCornerImageView;
import com.tencent.qcloud.tuicore.R;
import com.tencent.qcloud.tuicore.calling.basic.ImageLoader;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.common.RoundCornerImageView;
import com.tencent.rtmp.ui.TXCloudVideoView;
/**
......
package com.tencent.liteav.trtccalling.ui.videocall.videolayout;
package com.tencent.qcloud.tuicore.calling.trtccalling.ui.videocall.videolayout;
import android.content.Context;
import android.text.TextUtils;
......
package com.tencent.liteav.trtccalling.ui.videocall.videolayout;
package com.tencent.qcloud.tuicore.calling.trtccalling.ui.videocall.videolayout;
import android.content.Context;
import android.util.AttributeSet;
......@@ -7,8 +7,8 @@ import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.tencent.liteav.trtccalling.R;
import com.tencent.liteav.trtccalling.ui.common.RoundCornerImageView;
import com.tencent.qcloud.tuicore.R;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.common.RoundCornerImageView;
import com.tencent.rtmp.ui.TXCloudVideoView;
/**
......
package com.tencent.liteav.trtccalling.ui.videocall.videolayout;
package com.tencent.qcloud.tuicore.calling.trtccalling.ui.videocall.videolayout;
import android.content.Context;
import android.text.TextUtils;
......@@ -10,8 +10,8 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;
import com.tencent.liteav.trtccalling.ui.base.TRTCLayoutEntity;
import com.tencent.liteav.trtccalling.ui.base.VideoLayoutFactory;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.base.TRTCLayoutEntity;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.base.VideoLayoutFactory;
import com.tencent.rtmp.ui.TXCloudVideoView;
import java.util.ArrayList;
......@@ -53,7 +53,7 @@ public class TRTCVideoLayoutManager extends RelativeLayout {
private int mMode;
private String mSelfUserId;
private Context mContext;
private VideoLayoutFactory mVideoFactory;
private VideoLayoutFactory mVideoFactory;
/**
* ===============================View相关===============================
......
package com.tencent.liteav.trtccalling.ui.videocall.videolayout;
package com.tencent.qcloud.tuicore.calling.trtccalling.ui.videocall.videolayout;
import android.content.Context;
import android.view.ViewGroup;
......
package com.tencent.liteav.trtccalling.ui.videocall.videolayout;
package com.tencent.qcloud.tuicore.calling.trtccalling.ui.videocall.videolayout;
import android.content.Context;
import android.widget.RelativeLayout;
......
package com.tencent.liteav.videocall;
package com.tencent.qcloud.tuicore.calling.videocall;
public class Constant {
public static final String ROOM_ID = "room_id";
public static final String USER_ID = "user_id";
public static final String INVITE_ID = "invite_id";
public static final String ROLE_TYPE = "role_type";
public static final String CUSTOM_VIDEO = "custom_video";
......
package com.tencent.liteav.videocall;
package com.tencent.qcloud.tuicore.calling.videocall;
import android.Manifest;
import android.content.pm.PackageManager;
......
package com.tencent.liteav.videocall;
package com.tencent.qcloud.tuicore.calling.videocall;
import android.content.Intent;
import android.os.Bundle;
......@@ -11,10 +11,10 @@ import android.widget.TextView;
import android.widget.Toast;
import com.tencent.liteav.TXLiteAVCode;
import com.tencent.liteav.basic.UserModel;
import com.tencent.liteav.basic.UserModelManager;
import com.tencent.liteav.device.TXDeviceManager;
import com.tencent.liteav.trtccalling.R;
import com.tencent.qcloud.tuicore.R;
import com.tencent.qcloud.tuicore.calling.basic.UserModel;
import com.tencent.qcloud.tuicore.calling.basic.UserModelManager;
import com.tencent.rtmp.ui.TXCloudVideoView;
import com.tencent.trtc.TRTCCloud;
import com.tencent.trtc.TRTCCloudDef;
......@@ -63,6 +63,7 @@ public class VideoCallingActivity extends TRTCBaseActivity implements View.OnCli
private int mUserCount = 0;
private String mRoomId;
private String mUserId;
private String mInviteId;
private boolean mAudioRouteFlag = true;
......@@ -96,6 +97,9 @@ public class VideoCallingActivity extends TRTCBaseActivity implements View.OnCli
if (intent.getStringExtra(Constant.ROOM_ID) != null) {
mRoomId = intent.getStringExtra(Constant.ROOM_ID);
}
if (intent.getStringExtra(Constant.INVITE_ID) != null) {
mInviteId = intent.getStringExtra(Constant.INVITE_ID);
}
}
}
......@@ -208,6 +212,7 @@ public class VideoCallingActivity extends TRTCBaseActivity implements View.OnCli
public void onClick(View v) {
int id = v.getId();
if (id == R.id.iv_back|| id == R.id.tv_leave) {
exitRoom();
finish();
} else if (id == R.id.btn_audio){
muteAudio();
......@@ -275,6 +280,10 @@ public class VideoCallingActivity extends TRTCBaseActivity implements View.OnCli
}
}
@Override
public void onBackPressed() {
}
private class TRTCCloudImplListener extends TRTCCloudListener {
......
package com.tencent.qcloud.tuicore.calling.videocall;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.blankj.utilcode.util.ToastUtils;
import com.tencent.qcloud.tuicore.R;
import com.tencent.qcloud.tuicore.calling.basic.ImageLoader;
import com.tencent.qcloud.tuicore.calling.basic.UserModel;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.TRTCCalling;
import com.tencent.qcloud.tuicore.calling.trtccalling.model.impl.base.CallingInfoManager;
import com.tencent.qcloud.tuicore.calling.trtccalling.ui.common.RoundCornerImageView;
/**
* @Author: 刘鹏
* @Description: 音视频接听界面
* @CreateDate: 2022/4/19 19:35
* -------------------------------
* @UpdateUser:
* @UpdateDate: 2022/4/19 19:35
* @UpdateRemark:
* @Version:
*/
public class YDLInvitionActivity extends TRTCBaseActivity {
private static final int ERROR_CODE_USER_NOT_EXIST = 206;
private String mRoomId;
private String mUserId;
/**头像*/
private RoundCornerImageView mIvAvatar;
/**名字*/
private TextView mTvName;
/**拒绝*/
private ImageView mIvVideoInviteRefuse;
/**接听*/
private ImageView mIvVideoInviteAccept;
private String mInviteId;
/**邀请人信息*/
private UserModel mInviteModel;
@Override
protected void onPermissionGranted() {
}
@Override
protected void initDataAndEvent() {
handleIntent();
}
@Override
protected int layoutResId() {
return R.layout.video_invition_activity;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (checkPermission()) {
initView();
}
}
private void handleIntent() {
Intent intent = getIntent();
if (null != intent) {
if (intent.getStringExtra(Constant.USER_ID) != null) {
mUserId = intent.getStringExtra(Constant.USER_ID);
}
if (intent.getStringExtra(Constant.ROOM_ID) != null) {
mRoomId = intent.getStringExtra(Constant.ROOM_ID);
}
if (intent.getStringExtra(Constant.INVITE_ID) != null) {
mInviteId = intent.getStringExtra(Constant.INVITE_ID);
}
}
CallingInfoManager.getInstance().getUserInfoByUserId(mInviteId, new CallingInfoManager.UserCallback() {
@Override
public void onSuccess(UserModel model) {
mInviteModel = new UserModel();
mInviteModel.userId = model.userId;
mInviteModel.userName = TextUtils.isEmpty(model.userName) ? model.userId : model.userName;
showSearchUserModel(mInviteModel);
}
@Override
public void onFailed(int code, String msg) {
showSearchUserModel(null);
if (code == ERROR_CODE_USER_NOT_EXIST) {
ToastUtils.showLong("用户不存在");
} else {
ToastUtils.showLong(getString(R.string.trtccalling_toast_search_fail, msg));
}
}
});
}
private void initView() {
mIvAvatar = findViewById(R.id.iv_avatar);
mTvName = findViewById(R.id.tv_name);
mIvVideoInviteAccept = findViewById(R.id.iv_video_invite_accept);
mIvVideoInviteRefuse = findViewById(R.id.iv_video_invite_refuse);
//接听
mIvVideoInviteAccept.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(YDLInvitionActivity.this, VideoCallingActivity.class);
intent.putExtra(Constant.ROOM_ID, mRoomId);
intent.putExtra(Constant.USER_ID, mUserId);
intent.putExtra(Constant.INVITE_ID, mInviteId);
startActivity(intent);
finish();
}
});
//拒绝
mIvVideoInviteRefuse.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TRTCCalling.sharedInstance(YDLInvitionActivity.this).reject();
finish();
}
});
}
private void showSearchUserModel(UserModel model) {
if (null == model) {
return;
}
ImageLoader.loadImage(this, mIvAvatar, model.userAvatar, R.drawable.ic_avatar);
mTvName.setText(model.userName);
}
@Override
public void onBackPressed() {
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment