diff --git a/Android/app/build.gradle b/Android/app/build.gradle index 3dc8f2ec8..bd1a38916 100644 --- a/Android/app/build.gradle +++ b/Android/app/build.gradle @@ -1,8 +1,11 @@ +import org.gradle.util.VersionNumber + apply plugin: 'com.android.application' android { + namespace "com.tencent.liteav.demo" compileSdkVersion 30 - buildToolsVersion "30.0.2" + buildToolsVersion "30.0.3" defaultConfig { applicationId 'com.tencent.liteav.tuiroom' @@ -12,10 +15,8 @@ android { targetSdkVersion 30 multiDexEnabled true } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 + buildFeatures { + buildConfig = false } buildTypes { @@ -24,12 +25,23 @@ android { proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } + + def roomSourceJavaVersion = JavaVersion.VERSION_1_8 + VersionNumber currentGradleVersion = VersionNumber.parse(gradle.gradleVersion) + if (currentGradleVersion.major >= 8) { + roomSourceJavaVersion = JavaVersion.VERSION_17 + } + compileOptions { + sourceCompatibility roomSourceJavaVersion + targetCompatibility roomSourceJavaVersion + } } dependencies { implementation project(':tuiroomkit') implementation project(':debug') + implementation 'androidx.multidex:multidex:2.0.1' implementation "androidx.navigation:navigation-fragment:2.1.0" implementation "androidx.navigation:navigation-ui:2.1.0" implementation "de.hdodenhof:circleimageview:3.1.0" diff --git a/Android/app/src/main/AndroidManifest.xml b/Android/app/src/main/AndroidManifest.xml index 584bd328c..31119dcc5 100644 --- a/Android/app/src/main/AndroidManifest.xml +++ b/Android/app/src/main/AndroidManifest.xml @@ -1,10 +1,9 @@ + xmlns:tools="http://schemas.android.com/tools"> - diff --git a/Android/app/src/main/java/com/tencent/liteav/demo/MainActivity.java b/Android/app/src/main/java/com/tencent/liteav/demo/MainActivity.java deleted file mode 100644 index 378bd1b26..000000000 --- a/Android/app/src/main/java/com/tencent/liteav/demo/MainActivity.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.tencent.liteav.demo; - -import android.content.Context; -import android.content.Intent; -import android.graphics.Color; -import android.os.Build; -import android.os.Bundle; -import android.text.TextUtils; -import android.util.Log; -import android.view.View; -import android.view.Window; -import android.view.WindowManager; -import android.widget.ImageView; - -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; -import androidx.constraintlayout.widget.ConstraintLayout; - -import com.tencent.cloud.tuikit.roomkit.model.manager.RoomEngineManager; -import com.tencent.liteav.demo.view.activity.PrepareActivity; -import com.tencent.qcloud.tuicore.TUIConstants; -import com.tencent.qcloud.tuicore.TUICore; -import com.tencent.qcloud.tuicore.TUIThemeManager; -import com.tencent.qcloud.tuicore.util.TUIBuild; -import com.tencent.qcloud.tuicore.util.ToastUtil; - -import java.util.HashMap; -import java.util.Locale; - -public class MainActivity extends AppCompatActivity { - private String TAG = "MainActivity"; - - private Context mContext; - private ConstraintLayout mMeetingLayout; - private ConstraintLayout mH5MeetingLayout; - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.app_activity_main_layout); - initStatusBar(); - - mContext = this.getApplicationContext(); - ImageView mainIconView = findViewById(R.id.img_main_icon); - mainIconView.setBackgroundResource(R.drawable.app_title_zh); - if (TextUtils.equals(getCurrentLanguage(), "en")) { - mainIconView.setBackgroundResource(R.drawable.app_title_en); - } - mMeetingLayout= findViewById(R.id.app_cl_item_meeting); - mMeetingLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - enterPrepareView(true); - } - }); - } - - private void initStatusBar() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - Window window = getWindow(); - window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); - window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); - window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); - window.setStatusBarColor(Color.TRANSPARENT); - } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); - } - } - - public void enterPrepareView(boolean enablePreview) { - Log.i(TAG, "enter prepare view enablePreview=" + enablePreview); - if (RoomEngineManager.sharedInstance(mContext).getRoomStore().isInFloatWindow()) { - ToastUtil.toastLongMessage(mContext.getString(R.string.tuiroomkit_room_msg_joined)); - return; - } - Intent intent = new Intent(mContext, PrepareActivity.class); - intent.putExtra(PrepareActivity.INTENT_ENABLE_PREVIEW, enablePreview); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - mContext.startActivity(intent); - } - - private String getCurrentLanguage() { - String language = TUIThemeManager.getInstance().getCurrentLanguage(); - if (TextUtils.isEmpty(language)) { - Locale locale; - if (TUIBuild.getVersionInt() < Build.VERSION_CODES.N) { - locale = getResources().getConfiguration().locale; - } else { - locale = getResources().getConfiguration().getLocales().get(0); - } - language = locale.getLanguage(); - } - return language; - } -} diff --git a/Android/app/src/main/java/com/tencent/liteav/demo/ProfileActivity.java b/Android/app/src/main/java/com/tencent/liteav/demo/ProfileActivity.java index 80c457a13..e48912440 100644 --- a/Android/app/src/main/java/com/tencent/liteav/demo/ProfileActivity.java +++ b/Android/app/src/main/java/com/tencent/liteav/demo/ProfileActivity.java @@ -150,7 +150,7 @@ public void onSuccess() { Log.d(TAG, "TUILogin.login onSuccess"); String userName = TextUtils.isEmpty(userModel.userName) ? userModel.userId : userModel.userName; TUIRoomKit.createInstance().setSelfInfo(userName, userModel.userAvatar, null); - TUICore.startActivity("MainActivity", null); + TUICore.startActivity("PrepareActivity", null); finish(); } diff --git a/Android/app/src/main/java/com/tencent/liteav/demo/SplashActivity.java b/Android/app/src/main/java/com/tencent/liteav/demo/SplashActivity.java index 3dafad3f8..486213975 100644 --- a/Android/app/src/main/java/com/tencent/liteav/demo/SplashActivity.java +++ b/Android/app/src/main/java/com/tencent/liteav/demo/SplashActivity.java @@ -57,7 +57,7 @@ public void onSuccess() { Log.d(TAG, "TUILogin.login onSuccess"); String userName = TextUtils.isEmpty(userModel.userName) ? userModel.userId : userModel.userName; TUIRoomKit.createInstance().setSelfInfo(userName, userModel.userAvatar, null); - TUICore.startActivity("MainActivity", null); + TUICore.startActivity("PrepareActivity", null); finish(); } diff --git a/Android/app/src/main/java/com/tencent/liteav/demo/view/activity/CreateRoomActivity.java b/Android/app/src/main/java/com/tencent/liteav/demo/view/activity/CreateRoomActivity.java index 6d226dd19..28f39c3a2 100644 --- a/Android/app/src/main/java/com/tencent/liteav/demo/view/activity/CreateRoomActivity.java +++ b/Android/app/src/main/java/com/tencent/liteav/demo/view/activity/CreateRoomActivity.java @@ -19,7 +19,7 @@ public class CreateRoomActivity extends AppCompatActivity implements RoomEventCe @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.tuiroomkit_activity_create_room); + setContentView(R.layout.app_activity_create_room); CreateRoomView createRoomView = new CreateRoomView(this); ViewGroup root = findViewById(R.id.ll_root_create_room); root.addView(createRoomView); diff --git a/Android/app/src/main/java/com/tencent/liteav/demo/view/activity/EnterRoomActivity.java b/Android/app/src/main/java/com/tencent/liteav/demo/view/activity/EnterRoomActivity.java index 3996f7755..4b6b378c0 100644 --- a/Android/app/src/main/java/com/tencent/liteav/demo/view/activity/EnterRoomActivity.java +++ b/Android/app/src/main/java/com/tencent/liteav/demo/view/activity/EnterRoomActivity.java @@ -19,7 +19,7 @@ public class EnterRoomActivity extends AppCompatActivity implements RoomEventCen @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.tuiroomkit_activity_enter_room); + setContentView(R.layout.app_activity_enter_room); EnterRoomView enterRoomView = new EnterRoomView(this); ViewGroup root = findViewById(R.id.ll_root_enter_room); root.addView(enterRoomView); diff --git a/Android/app/src/main/java/com/tencent/liteav/demo/view/activity/PrepareActivity.java b/Android/app/src/main/java/com/tencent/liteav/demo/view/activity/PrepareActivity.java index 48d5d6b68..b0a8002a5 100644 --- a/Android/app/src/main/java/com/tencent/liteav/demo/view/activity/PrepareActivity.java +++ b/Android/app/src/main/java/com/tencent/liteav/demo/view/activity/PrepareActivity.java @@ -5,7 +5,6 @@ import androidx.appcompat.app.AppCompatActivity; -import com.tencent.cloud.tuikit.roomkit.TUIRoomKit; import com.tencent.liteav.demo.R; import com.tencent.liteav.demo.view.component.PrepareView; import com.tencent.qcloud.tuicore.interfaces.TUICallback; @@ -16,7 +15,7 @@ public class PrepareActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.tuiroomkit_activity_prepare); + setContentView(R.layout.app_activity_prepare); ViewGroup root = findViewById(R.id.ll_root); boolean enablePreview = getIntent().getBooleanExtra(INTENT_ENABLE_PREVIEW, true); PrepareView prepareView = new PrepareView(this, enablePreview); @@ -32,6 +31,5 @@ public void onError(int errorCode, String errorMessage) { } }); - TUIRoomKit.createInstance(); } } \ No newline at end of file diff --git a/Android/app/src/main/java/com/tencent/liteav/demo/view/component/CreateRoomView.java b/Android/app/src/main/java/com/tencent/liteav/demo/view/component/CreateRoomView.java index da0617fba..bcbfaf86d 100644 --- a/Android/app/src/main/java/com/tencent/liteav/demo/view/component/CreateRoomView.java +++ b/Android/app/src/main/java/com/tencent/liteav/demo/view/component/CreateRoomView.java @@ -1,6 +1,7 @@ package com.tencent.liteav.demo.view.component; import android.content.Context; +import android.text.TextUtils; import android.view.View; import android.widget.LinearLayout; import android.widget.RelativeLayout; @@ -13,6 +14,7 @@ import com.tencent.liteav.demo.viewmodel.CreateRoomViewModel; import com.tencent.qcloud.tuicore.TUILogin; import com.tencent.qcloud.tuicore.interfaces.TUICallback; +import com.tencent.qcloud.tuicore.util.ToastUtil; import java.util.ArrayList; @@ -20,7 +22,6 @@ public class CreateRoomView extends RelativeLayout implements View.OnClickListener { private Context mContext; private Toolbar mToolbar; - private TextView mTextRoomId; private TextView mTextCreateRoom; private TextView mTextUserName; @@ -31,9 +32,11 @@ public class CreateRoomView extends RelativeLayout private TUICallback mFinishCallback; + private String mRoomId; + public CreateRoomView(Context context) { super(context); - View.inflate(context, R.layout.tuiroomkit_view_create_room, this); + View.inflate(context, R.layout.app_view_create_room, this); mContext = context; mViewModel = new CreateRoomViewModel(mContext); initView(); @@ -45,19 +48,20 @@ public void setFinishCallback(TUICallback finishCallback) { } private void initData() { - String userId = TUILogin.getUserId(); String userName = TUILogin.getNickName(); - String roomId = mViewModel.getRoomId(userId); - mTextRoomId.setText(roomId); mTextUserName.setText(userName); + mViewModel.getRoomId(new CreateRoomViewModel.GetRoomIdCallback() { + @Override + public void onGetRoomId(String roomId) { + mRoomId = roomId; + } + }); } - private void initView() { mToolbar = findViewById(R.id.toolbar); mTextCreateRoom = findViewById(R.id.tv_create); mTextUserName = findViewById(R.id.tv_user_name); - mTextRoomId = findViewById(R.id.tv_room_id); mTextRoomType = findViewById(R.id.tv_room_type); mLayoutSettingContainer = findViewById(R.id.ll_setting_container); mRoomTypeDialog = new RoomTypeSelectView(mContext); @@ -66,8 +70,8 @@ private void initView() { public void onSpeechModeChanged(TUIRoomDefine.SpeechMode speechMode) { mViewModel.setSpeechMode(speechMode); int resId = TUIRoomDefine.SpeechMode.FREE_TO_SPEAK.equals(speechMode) - ? R.string.tuiroomkit_room_free_speech - : R.string.tuiroomkit_room_raise_hand; + ? R.string.app_room_free_speech + : R.string.app_room_raise_hand; mTextRoomType.setText(resId); } }); @@ -107,7 +111,11 @@ public void onClick(View view) { } mRoomTypeDialog.show(); } else if (view.getId() == R.id.tv_create) { - mViewModel.createRoom(mTextRoomId.getText().toString()); + if (TextUtils.isEmpty(mRoomId)) { + ToastUtil.toastShortMessage(mContext.getString(R.string.app_tip_creating_room_id)); + return; + } + mViewModel.createRoom(mRoomId); mTextCreateRoom.setClickable(false); } } diff --git a/Android/app/src/main/java/com/tencent/liteav/demo/view/component/EnterRoomView.java b/Android/app/src/main/java/com/tencent/liteav/demo/view/component/EnterRoomView.java index 411654d14..a02e19f52 100644 --- a/Android/app/src/main/java/com/tencent/liteav/demo/view/component/EnterRoomView.java +++ b/Android/app/src/main/java/com/tencent/liteav/demo/view/component/EnterRoomView.java @@ -33,7 +33,7 @@ public class EnterRoomView extends RelativeLayout { public EnterRoomView(Context context) { super(context); - View.inflate(context, R.layout.tuiroomkit_view_enter_room, this); + View.inflate(context, R.layout.app_view_enter_room, this); mContext = context; mViewModel = new EnterRoomViewModel(mContext); initView(); diff --git a/Android/app/src/main/java/com/tencent/liteav/demo/view/component/PrepareView.java b/Android/app/src/main/java/com/tencent/liteav/demo/view/component/PrepareView.java index 489c0760f..ee4c3fe06 100644 --- a/Android/app/src/main/java/com/tencent/liteav/demo/view/component/PrepareView.java +++ b/Android/app/src/main/java/com/tencent/liteav/demo/view/component/PrepareView.java @@ -16,6 +16,7 @@ import androidx.constraintlayout.widget.ConstraintLayout; import androidx.constraintlayout.widget.ConstraintSet; +import com.tencent.cloud.tuikit.roomkit.model.manager.RoomEngineManager; import com.tencent.cloud.tuikit.roomkit.utils.ImageLoader; import com.tencent.cloud.tuikit.roomkit.utils.IntentUtils; import com.tencent.liteav.demo.R; @@ -24,6 +25,7 @@ import com.tencent.qcloud.tuicore.TUILogin; import com.tencent.qcloud.tuicore.TUIThemeManager; import com.tencent.qcloud.tuicore.interfaces.TUICallback; +import com.tencent.qcloud.tuicore.util.ToastUtil; import java.util.Locale; @@ -60,7 +62,7 @@ public void setFinishCallback(TUICallback finishCallback) { } private void initView() { - View.inflate(mContext, R.layout.tuiroomkit_view_prepare, this); + View.inflate(mContext, R.layout.app_view_prepare, this); mLayoutRoot = findViewById(R.id.cl_root_prepare); mImageHead = findViewById(R.id.img_head_prepare); @@ -81,7 +83,7 @@ private void initView() { mLayoutEnterRoom.setOnClickListener(this); mLayoutCreateRoom.setOnClickListener(this); - mTextVersion.setText(mContext.getString(R.string.tuiroomkit_app_version, getVersionName(mContext))); + mTextVersion.setText(mContext.getString(R.string.app_version, getVersionName(mContext))); Shader shader = new LinearGradient( 0, 0, mTextMultiVideo.getPaint().measureText("多人视频会议"), mTextMultiVideo.getTextSize(), @@ -92,7 +94,7 @@ private void initView() { mTextMultiVideo.getPaint().setShader(shader); ImageLoader.loadImage(mContext, mImageHead, TUILogin.getFaceUrl(), - R.drawable.tuiroomkit_head); + R.drawable.app_ic_avatar); mTextUserName.setText(TUILogin.getNickName()); mPreSet = new ConstraintSet(); @@ -115,12 +117,12 @@ private void updatePreviewLayout(boolean enableVideoPreview) { set.constrainPercentWidth(mLayoutCreateRoom.getId(), 0.5f); set.connect(mLayoutCreateRoom.getId(), ConstraintSet.BOTTOM, mLayoutRoot.getId(), ConstraintSet.BOTTOM, - getResources().getDimensionPixelSize(R.dimen.tuiroomkit_create_room_margin_bottom)); + getResources().getDimensionPixelSize(R.dimen.app_create_room_margin_bottom)); set.connect(mLayoutCreateRoom.getId(), ConstraintSet.START, ConstraintSet.PARENT_ID, ConstraintSet.START); set.connect(mLayoutCreateRoom.getId(), ConstraintSet.END, ConstraintSet.PARENT_ID, ConstraintSet.END); set.connect(mLayoutEnterRoom.getId(), ConstraintSet.BOTTOM, mLayoutCreateRoom.getId(), ConstraintSet.TOP, - getResources().getDimensionPixelSize(R.dimen.tuiroomkit_enter_room_margin_bottom)); + getResources().getDimensionPixelSize(R.dimen.app_enter_room_margin_bottom)); set.connect(mLayoutEnterRoom.getId(), ConstraintSet.LEFT, mLayoutCreateRoom.getId(), ConstraintSet.LEFT); set.connect(mLayoutEnterRoom.getId(), ConstraintSet.RIGHT, mLayoutCreateRoom.getId(), ConstraintSet.RIGHT); set.constrainWidth(mLayoutEnterRoom.getId(), ConstraintSet.MATCH_CONSTRAINT); @@ -135,8 +137,8 @@ private void updatePreviewLayout(boolean enableVideoPreview) { private void setTextGradient(TextView view) { LinearGradient gradient = new LinearGradient(0, 0, view.getPaint().getTextSize() * view.getText().length(), - 0, getResources().getColor(R.color.tuiroomkit_color_gradient_start), - getResources().getColor(R.color.tuiroomkit_color_gradient_end), + 0, getResources().getColor(R.color.app_color_gradient_start), + getResources().getColor(R.color.app_color_gradient_end), Shader.TileMode.CLAMP); view.getPaint().setShader(gradient); view.invalidate(); @@ -185,13 +187,18 @@ private void finishActivity() { } private void createRoom() { + if (RoomEngineManager.sharedInstance().getRoomStore().isInFloatWindow()) { + ToastUtil.toastLongMessage(mContext.getString(R.string.app_room_msg_joined)); + return; + } TUICore.startActivity("CreateRoomActivity", null); - finishActivity(); } private void enterRoom() { + if (RoomEngineManager.sharedInstance().getRoomStore().isInFloatWindow()) { + ToastUtil.toastLongMessage(mContext.getString(R.string.app_room_msg_joined)); + return; + } TUICore.startActivity("EnterRoomActivity", null); - finishActivity(); } - } diff --git a/Android/app/src/main/java/com/tencent/liteav/demo/viewmodel/CreateRoomViewModel.java b/Android/app/src/main/java/com/tencent/liteav/demo/viewmodel/CreateRoomViewModel.java index 48d762dac..a155571e0 100644 --- a/Android/app/src/main/java/com/tencent/liteav/demo/viewmodel/CreateRoomViewModel.java +++ b/Android/app/src/main/java/com/tencent/liteav/demo/viewmodel/CreateRoomViewModel.java @@ -1,21 +1,32 @@ package com.tencent.liteav.demo.viewmodel; +import static com.tencent.imsdk.BaseConstants.ERR_SUCC; + import android.content.Context; +import android.util.Log; import com.tencent.cloud.tuikit.engine.common.TUICommonDefine; import com.tencent.cloud.tuikit.engine.room.TUIRoomDefine; import com.tencent.cloud.tuikit.roomkit.TUIRoomKit; +import com.tencent.imsdk.v2.V2TIMGroupInfoResult; +import com.tencent.imsdk.v2.V2TIMManager; +import com.tencent.imsdk.v2.V2TIMValueCallback; +import com.tencent.liteav.demo.R; import com.tencent.liteav.demo.view.component.BaseSettingItem; import com.tencent.liteav.demo.view.component.SwitchSettingItem; -import com.tencent.liteav.demo.R; import com.tencent.qcloud.tuicore.TUILogin; +import com.tencent.qcloud.tuicore.interfaces.TUICallback; import com.tencent.qcloud.tuicore.util.ToastUtil; import java.nio.charset.StandardCharsets; import java.util.ArrayList; +import java.util.List; +import java.util.Random; public class CreateRoomViewModel { - private Context mContext; + private static final String TAG = "CreateRoomViewModel"; + + private Context mContext; private boolean mIsOpenVideo = true; private boolean mIsOpenAudio = true; @@ -23,6 +34,10 @@ public class CreateRoomViewModel { private TUIRoomDefine.SpeechMode mSpeechMode = TUIRoomDefine.SpeechMode.FREE_TO_SPEAK; + public interface GetRoomIdCallback { + void onGetRoomId(String roomId); + } + public CreateRoomViewModel(Context context) { mContext = context; } @@ -31,8 +46,21 @@ public void setSpeechMode(TUIRoomDefine.SpeechMode speechMode) { mSpeechMode = speechMode; } - public String getRoomId(String userId) { - return String.valueOf((userId + "_room_kit").hashCode() & 0x3B9AC9FF); + public void getRoomId(GetRoomIdCallback callback) { + String roomId = generateRandomRoomId(6); + isRoomIdExisted(roomId, new TUICallback() { + @Override + public void onSuccess() { + getRoomId(callback); + } + + @Override + public void onError(int errorCode, String errorMessage) { + if (callback != null) { + callback.onGetRoomId(roomId); + } + } + }); } public void createRoom(String roomId) { @@ -83,22 +111,21 @@ private String truncateString(String string) { } public ArrayList createSwitchSettingItemList() { - BaseSettingItem.ItemText audioItemText = new BaseSettingItem - .ItemText(mContext.getString(R.string.app_turn_on_audio), ""); - SwitchSettingItem audioItem = new SwitchSettingItem(mContext, audioItemText, - new SwitchSettingItem.Listener() { - @Override - public void onSwitchChecked(boolean isChecked) { - mIsOpenAudio = isChecked; - } - }).setCheck(mIsOpenAudio); + BaseSettingItem.ItemText audioItemText = + new BaseSettingItem.ItemText(mContext.getString(R.string.app_turn_on_audio), ""); + SwitchSettingItem audioItem = new SwitchSettingItem(mContext, audioItemText, new SwitchSettingItem.Listener() { + @Override + public void onSwitchChecked(boolean isChecked) { + mIsOpenAudio = isChecked; + } + }).setCheck(mIsOpenAudio); ArrayList settingItemList = new ArrayList<>(); settingItemList.add(audioItem); - BaseSettingItem.ItemText speakerItemText = new BaseSettingItem - .ItemText(mContext.getString(R.string.app_turn_on_speaker), ""); - SwitchSettingItem speakerItem = new SwitchSettingItem(mContext, speakerItemText, - new SwitchSettingItem.Listener() { + BaseSettingItem.ItemText speakerItemText = + new BaseSettingItem.ItemText(mContext.getString(R.string.app_turn_on_speaker), ""); + SwitchSettingItem speakerItem = + new SwitchSettingItem(mContext, speakerItemText, new SwitchSettingItem.Listener() { @Override public void onSwitchChecked(boolean isChecked) { mIsUseSpeaker = isChecked; @@ -108,14 +135,51 @@ public void onSwitchChecked(boolean isChecked) { BaseSettingItem.ItemText videoItemText = new BaseSettingItem.ItemText(mContext.getString(R.string.app_turn_on_video), ""); - SwitchSettingItem videoItem = new SwitchSettingItem(mContext, videoItemText, - new SwitchSettingItem.Listener() { - @Override - public void onSwitchChecked(boolean isChecked) { - mIsOpenVideo = isChecked; - } - }).setCheck(mIsOpenVideo); + SwitchSettingItem videoItem = new SwitchSettingItem(mContext, videoItemText, new SwitchSettingItem.Listener() { + @Override + public void onSwitchChecked(boolean isChecked) { + mIsOpenVideo = isChecked; + } + }).setCheck(mIsOpenVideo); settingItemList.add(videoItem); return settingItemList; } + + private String generateRandomRoomId(int numberOfDigits) { + Random random = new Random(); + int minNumber = (int) Math.pow(10, numberOfDigits - 1); + int maxNumber = (int) Math.pow(10, numberOfDigits) - 1; + int randomNumber = random.nextInt(maxNumber - minNumber) + minNumber; + String roomId = randomNumber + ""; + Log.d(TAG, "generateRandomRoomId : " + roomId); + return roomId; + } + + private void isRoomIdExisted(String roomId, TUICallback callback) { + List idList = new ArrayList<>(1); + idList.add(roomId); + Log.d(TAG, "getGroupsInfo roomId=" + roomId); + V2TIMManager.getGroupManager().getGroupsInfo(idList, new V2TIMValueCallback>() { + @Override + public void onSuccess(List v2TIMGroupInfoResults) { + Log.d(TAG, "getGroupsInfo onSuccess"); + if (v2TIMGroupInfoResults == null || v2TIMGroupInfoResults.isEmpty()) { + callback.onError(0, "result is empty"); + return; + } + if (v2TIMGroupInfoResults.get(0).getResultCode() == ERR_SUCC) { + callback.onSuccess(); + return; + } + callback.onError(v2TIMGroupInfoResults.get(0).getResultCode(), + v2TIMGroupInfoResults.get(0).getResultMessage()); + } + + @Override + public void onError(int code, String desc) { + Log.d(TAG, "getGroupsInfo onError code=" + code + " desc=" + desc); + callback.onError(code, desc); + } + }); + } } diff --git a/Android/app/src/main/res/layout/tuiroomkit_activity_create_room.xml b/Android/app/src/main/res/layout/app_activity_create_room.xml similarity index 100% rename from Android/app/src/main/res/layout/tuiroomkit_activity_create_room.xml rename to Android/app/src/main/res/layout/app_activity_create_room.xml diff --git a/Android/app/src/main/res/layout/tuiroomkit_activity_enter_room.xml b/Android/app/src/main/res/layout/app_activity_enter_room.xml similarity index 100% rename from Android/app/src/main/res/layout/tuiroomkit_activity_enter_room.xml rename to Android/app/src/main/res/layout/app_activity_enter_room.xml diff --git a/Android/app/src/main/res/layout/app_activity_login.xml b/Android/app/src/main/res/layout/app_activity_login.xml index a462645b3..bf8ed08d5 100644 --- a/Android/app/src/main/res/layout/app_activity_login.xml +++ b/Android/app/src/main/res/layout/app_activity_login.xml @@ -22,7 +22,7 @@ android:id="@+id/tv_phone_number" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="@string/user_id" + android:text="@string/app_user_id" android:textColor="@color/color_black" android:textSize="16sp" app:layout_constraintLeft_toLeftOf="@id/cl_edit" @@ -35,7 +35,7 @@ android:layout_marginLeft="30dp" android:layout_marginRight="30dp" android:background="@null" - android:hint="@string/hint_user_id" + android:hint="@string/app_hint_user_id" android:inputType="number" android:maxLength="11" android:maxLines="1" @@ -57,7 +57,7 @@ android:layout_marginLeft="20dp" android:layout_marginRight="20dp" android:background="@drawable/app_bg_login_button" - android:text="@string/btn_login" + android:text="@string/app_btn_login" android:textColor="@color/color_white" android:textSize="16sp" app:layout_constraintBottom_toBottomOf="parent" diff --git a/Android/app/src/main/res/layout/tuiroomkit_activity_prepare.xml b/Android/app/src/main/res/layout/app_activity_prepare.xml similarity index 100% rename from Android/app/src/main/res/layout/tuiroomkit_activity_prepare.xml rename to Android/app/src/main/res/layout/app_activity_prepare.xml diff --git a/Android/app/src/main/res/layout/tuiroomkit_view_create_room.xml b/Android/app/src/main/res/layout/app_view_create_room.xml similarity index 72% rename from Android/app/src/main/res/layout/tuiroomkit_view_create_room.xml rename to Android/app/src/main/res/layout/app_view_create_room.xml index 4518b7736..7a99cf635 100644 --- a/Android/app/src/main/res/layout/tuiroomkit_view_create_room.xml +++ b/Android/app/src/main/res/layout/app_view_create_room.xml @@ -17,7 +17,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleLine="true" - android:text="@string/tuiroomkit_create_room" + android:text="@string/app_create_room" android:textColor="@color/tuiroomkit_color_text_light_grey" android:textSize="16sp" android:textStyle="bold" /> @@ -71,7 +71,7 @@ android:layout_width="match_parent" android:layout_height="0.5dp" android:layout_marginTop="15dp" - android:background="@color/tuiroomkit_bg_guide_line_grey" + android:background="@color/tuiroomkit_color_divide_line" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/tv_room_type_title" /> @@ -82,12 +82,14 @@ android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginTop="15dp" - android:text="@string/tuiroomkit_your_name" + android:layout_marginBottom="18dp" + android:text="@string/app_your_name" android:textColor="@color/tuiroomkit_color_text_light_grey" android:textSize="16sp" app:layout_constraintEnd_toEndOf="@+id/tv_room_type_title" app:layout_constraintStart_toStartOf="@+id/tv_room_type_title" - app:layout_constraintTop_toBottomOf="@id/divider1" /> + app:layout_constraintTop_toBottomOf="@id/divider1" + app:layout_constraintBottom_toBottomOf="parent"/> - - - - - - diff --git a/Android/app/src/main/res/layout/tuiroomkit_view_enter_room.xml b/Android/app/src/main/res/layout/app_view_enter_room.xml similarity index 95% rename from Android/app/src/main/res/layout/tuiroomkit_view_enter_room.xml rename to Android/app/src/main/res/layout/app_view_enter_room.xml index e0c39852e..6d4a84887 100644 --- a/Android/app/src/main/res/layout/tuiroomkit_view_enter_room.xml +++ b/Android/app/src/main/res/layout/app_view_enter_room.xml @@ -18,7 +18,7 @@ android:layout_height="wrap_content" android:layout_marginStart="17dp" android:singleLine="true" - android:text="@string/tuiroomkit_enter_room" + android:text="@string/app_enter_room" android:textColor="@color/tuiroomkit_color_text_light_grey" android:textSize="16sp" android:textStyle="bold" /> @@ -62,7 +62,7 @@ android:layout_gravity="center_vertical" android:layout_weight="1" android:background="@null" - android:hint="@string/tuiroomkit_please_input_room_number" + android:hint="@string/app_please_input_room_number" android:imeOptions="actionNext" android:inputType="number" android:maxEms="10" @@ -82,7 +82,7 @@ android:layout_width="match_parent" android:layout_height="0.5dp" android:layout_marginTop="15dp" - android:background="@color/tuiroomkit_bg_guide_line_grey" + android:background="@color/tuiroomkit_color_divide_line" app:layout_constraintTop_toBottomOf="@+id/room_id_title" tools:layout_editor_absoluteX="16dp" /> @@ -92,7 +92,7 @@ android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginTop="15dp" - android:text="@string/tuiroomkit_your_name" + android:text="@string/app_your_name" android:textColor="@color/tuiroomkit_color_text_light_grey" android:textSize="16sp" app:layout_constraintStart_toStartOf="parent" @@ -133,7 +133,7 @@ android:background="@drawable/tuiroomkit_btn_join" android:enabled="true" android:gravity="center" - android:text="@string/tuiroomkit_enter_room" + android:text="@string/app_enter_room" android:textColor="@color/tuiroomkit_color_text_light_grey" android:textSize="14sp" app:layout_constraintBottom_toBottomOf="parent" diff --git a/Android/app/src/main/res/layout/tuiroomkit_view_prepare.xml b/Android/app/src/main/res/layout/app_view_prepare.xml similarity index 96% rename from Android/app/src/main/res/layout/tuiroomkit_view_prepare.xml rename to Android/app/src/main/res/layout/app_view_prepare.xml index 9695af756..2dd2959a6 100644 --- a/Android/app/src/main/res/layout/tuiroomkit_view_prepare.xml +++ b/Android/app/src/main/res/layout/app_view_prepare.xml @@ -75,7 +75,7 @@ android:layout_below="@id/img_tencent_cloud" android:layout_marginTop="10dp" android:gravity="center" - android:text="@string/tuiroomkit_product_name" + android:text="@string/app_product_name" android:textSize="24sp" android:textStyle="italic|bold" /> @@ -103,7 +103,7 @@ android:drawableLeft="@drawable/tuiroomkit_ic_enter_room" android:drawablePadding="5dp" android:gravity="center" - android:text="@string/tuiroomkit_enter_room" + android:text="@string/app_enter_room" android:textColor="@color/white" android:textSize="16sp" /> @@ -130,7 +130,7 @@ android:drawableLeft="@drawable/tuiroomkit_ic_create_room" android:drawablePadding="5dp" android:gravity="center" - android:text="@string/tuiroomkit_create_room" + android:text="@string/app_create_room" android:textColor="@color/white" android:textSize="16sp" /> @@ -152,7 +152,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="8dp" - android:text="@string/tuiroomkit_multi_video_conferencing" + android:text="@string/app_multi_video_conferencing" android:textSize="24sp" android:textStyle="bold" app:layout_constraintEnd_toEndOf="parent" diff --git a/Android/app/src/main/res/values-zh/strings.xml b/Android/app/src/main/res/values-zh/strings.xml index 015ecaa2f..c5d6ae5ae 100644 --- a/Android/app/src/main/res/values-zh/strings.xml +++ b/Android/app/src/main/res/values-zh/strings.xml @@ -1,18 +1,17 @@ 多人音视频房间 - 登录成功 - 登录IM失败,所有功能不可用[%d]%s - 正在运行中 - 用户名 - 请输入登录的userId - 登录 + 登录成功 + 正在运行中 + 用户名 + 请输入登录的userId + 登录 登录IM失败,所有功能不可用[%d]%s - 欢迎使用\n腾讯云实时音视频 - 确定要退出登录吗? - 您的用户签名信息已过期,请重新登录 - userId 不能为空 + 欢迎使用\n腾讯云实时音视频 + 确定要退出登录吗? + 您的用户签名信息已过期,请重新登录 + userId 不能为空 注册 用户名 请输入用户名 @@ -40,16 +39,21 @@ 多人音视频房间(H5) 全球端到端平均延时<300ms - 您的姓名 - 多人视频会议 - Tencent Cloud TUIRoomKit v%s - 多人音视频房间 - 请输入房间号 - 加入房间 - 新建房间 - 加入直播房间 + 您的姓名 + 多人视频会议 + Tencent Cloud TUIRoomKit v%s + 多人音视频房间 + 请输入房间号 + 加入房间 + 新建房间 + 加入直播房间 打开音频 打开扬声器 打开视频 + 正在生成房间号,请稍后重试 + + 已入会 + 自由发言房间 + 举手发言房间 diff --git a/Android/app/src/main/res/values/colors.xml b/Android/app/src/main/res/values/colors.xml index 04b4e4979..8d6086b74 100644 --- a/Android/app/src/main/res/values/colors.xml +++ b/Android/app/src/main/res/values/colors.xml @@ -17,4 +17,6 @@ #F1F3F8 #EEEEEE #DBDBDB + #00CED9 + #0C59F2 diff --git a/Android/app/src/main/res/values/dimens.xml b/Android/app/src/main/res/values/dimens.xml index 32dc03558..76f588880 100644 --- a/Android/app/src/main/res/values/dimens.xml +++ b/Android/app/src/main/res/values/dimens.xml @@ -1,4 +1,6 @@ 16dp 14sp + 100dp + 20dp diff --git a/Android/app/src/main/res/values/strings.xml b/Android/app/src/main/res/values/strings.xml index a9db3d706..68b249160 100644 --- a/Android/app/src/main/res/values/strings.xml +++ b/Android/app/src/main/res/values/strings.xml @@ -1,17 +1,16 @@ Room - Logged in - Login failed [%d]%s - Running - Username - Enter a userId - Log In + Logged in + Running + Username + Enter a userId + Log In Login failed [%d]%s - Welcome to Tencent\nReal-Time Communication - Are you sure you want to log out? - Your user signature information has expired. Please log in again! - UserId is empty + Welcome to Tencent\nReal-Time Communication + Are you sure you want to log out? + Your user signature information has expired. Please log in again! + UserId is empty Register Username Enter a username @@ -37,16 +36,20 @@ Video Conferencing(H5) Average end-to-end latency < 300 ms worldwide - Your Name - Multi-person video conferencing - Tencent Cloud TUIRoomKit v%s - Multi-person Audio/Video Interactions - Enter a conference ID - Join - Create Room - Join LiveRoom + Your Name + Multi-person video conferencing + Tencent Cloud TUIRoomKit v%s + Multi-person Audio/Video Interactions + Enter a conference ID + Join + Create Room + Join LiveRoom Turn on audio Turn on speaker Turn on video + Generating room number, please try again later + Joined + Free Speech Room + Raise Hand Room diff --git a/Android/build.gradle b/Android/build.gradle index 25bc79f47..db0069e91 100644 --- a/Android/build.gradle +++ b/Android/build.gradle @@ -1,3 +1,4 @@ +import org.gradle.util.VersionNumber // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { @@ -7,8 +8,14 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:4.2.1' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + VersionNumber currentGradleVersion = VersionNumber.parse(gradle.gradleVersion) + if (currentGradleVersion.major >= 8) { + classpath 'com.android.tools.build:gradle:8.0.2' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0" + } else { + classpath 'com.android.tools.build:gradle:4.2.1' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } } } @@ -27,7 +34,7 @@ task clean(type: Delete) { } ext { - liteavSdk = "com.tencent.liteav:LiteAVSDK_TRTC:11.4.0.13217" - roomEngineSdk = "com.tencent.liteav.tuikit:tuiroomengine:1.6.1.102" + liteavSdk = "com.tencent.liteav:LiteAVSDK_TRTC:11.4.0.13270" + roomEngineSdk = "com.tencent.liteav.tuikit:tuiroomengine:1.7.0.137" imSdk = "com.tencent.imsdk:imsdk-plus:7.6.5011" } \ No newline at end of file diff --git a/Android/debug/build.gradle b/Android/debug/build.gradle index 443141591..c9c883b3a 100644 --- a/Android/debug/build.gradle +++ b/Android/debug/build.gradle @@ -1,12 +1,15 @@ +import org.gradle.util.VersionNumber + apply plugin: 'com.android.library' android { - compileSdkVersion 28 - buildToolsVersion "28.0.3" + namespace "com.tencent.liteav.debug" + compileSdkVersion 30 + buildToolsVersion "30.0.3" defaultConfig { minSdkVersion 19 - targetSdkVersion 26 + targetSdkVersion 30 } buildTypes { @@ -15,6 +18,19 @@ android { proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } + buildFeatures { + buildConfig = false + } + + def roomSourceJavaVersion = JavaVersion.VERSION_1_8 + VersionNumber currentGradleVersion = VersionNumber.parse(gradle.gradleVersion) + if (currentGradleVersion.major >= 8) { + roomSourceJavaVersion = JavaVersion.VERSION_17 + } + compileOptions { + sourceCompatibility roomSourceJavaVersion + targetCompatibility roomSourceJavaVersion + } } dependencies { diff --git a/Android/debug/src/main/AndroidManifest.xml b/Android/debug/src/main/AndroidManifest.xml index bb3fe659e..f232dc150 100644 --- a/Android/debug/src/main/AndroidManifest.xml +++ b/Android/debug/src/main/AndroidManifest.xml @@ -1,4 +1,4 @@ - + diff --git a/Android/gradle/wrapper/gradle-wrapper.properties b/Android/gradle/wrapper/gradle-wrapper.properties index d0f33ffba..48cbc2aca 100644 --- a/Android/gradle/wrapper/gradle-wrapper.properties +++ b/Android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Wed Feb 12 20:24:45 CST 2020 +#Mon Nov 27 14:30:20 CST 2023 distributionBase=GRADLE_USER_HOME +distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip +zipStoreBase=GRADLE_USER_HOME diff --git a/Android/tuiroomkit/build.gradle b/Android/tuiroomkit/build.gradle index 1513fcb51..af2506110 100644 --- a/Android/tuiroomkit/build.gradle +++ b/Android/tuiroomkit/build.gradle @@ -1,21 +1,39 @@ +import org.gradle.util.VersionNumber + apply plugin: 'com.android.library' def projects = this.rootProject.getAllprojects().stream().map { project -> project.name }.collect() android { + namespace "com.tencent.cloud.tuikit.roomkit" compileSdkVersion 30 - buildToolsVersion "28.0.3" + buildToolsVersion "30.0.3" defaultConfig { minSdkVersion 19 targetSdkVersion 30 } + buildFeatures { + buildConfig = true + } + buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } + + def roomSourceJavaVersion = JavaVersion.VERSION_1_8 + VersionNumber currentGradleVersion = VersionNumber.parse(gradle.gradleVersion) + if (currentGradleVersion.major >= 8) { + roomSourceJavaVersion = JavaVersion.VERSION_17 + } + + compileOptions { + sourceCompatibility roomSourceJavaVersion + targetCompatibility roomSourceJavaVersion + } } dependencies { @@ -33,8 +51,8 @@ dependencies { implementation project(':timcommon') implementation project(':tuichat') - api rootProject.getProperties().containsKey("roomEngineSdk") ? rootProject.ext.roomEngineSdk : "com.tencent.liteav.tuikit:tuiroomengine:1.6.1.102" - implementation rootProject.getProperties().containsKey("liteavSdk") ? rootProject.ext.liteavSdk : "com.tencent.liteav:LiteAVSDK_TRTC:11.4.0.13217" + api rootProject.getProperties().containsKey("roomEngineSdk") ? rootProject.ext.roomEngineSdk : "com.tencent.liteav.tuikit:tuiroomengine:1.7.0.137" + implementation rootProject.getProperties().containsKey("liteavSdk") ? rootProject.ext.liteavSdk : "com.tencent.liteav:LiteAVSDK_TRTC:11.4.0.13270" if (projects.contains("tuicore")) { api project(':tuicore') } else { diff --git a/Android/tuiroomkit/src/main/AndroidManifest.xml b/Android/tuiroomkit/src/main/AndroidManifest.xml index d61e9394c..6afcdeaa9 100644 --- a/Android/tuiroomkit/src/main/AndroidManifest.xml +++ b/Android/tuiroomkit/src/main/AndroidManifest.xml @@ -1,6 +1,5 @@ - + @@ -15,35 +14,35 @@ @@ -52,7 +51,7 @@ android:enabled="true" android:exported="false" /> diff --git a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/imaccess/presenter/RoomPresenterImpl.java b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/imaccess/presenter/RoomPresenterImpl.java index 932f535bc..168b82cfc 100644 --- a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/imaccess/presenter/RoomPresenterImpl.java +++ b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/imaccess/presenter/RoomPresenterImpl.java @@ -76,6 +76,7 @@ public static final RoomPresenterImpl getInstance() { @Override public void createRoom() { Log.d(TAG, "createRoom mSelfRoomStatus=" + mSelfRoomStatus); + BusinessSceneUtil.setChatAccessRoom(true); mRoomTaskStoreHouse.postTask(new Runnable() { @Override public void run() { @@ -219,6 +220,7 @@ private void removeObserver() { @Override public void enterRoom(RoomMsgData roomMsgData) { Log.d(TAG, "enterRoom roomId=" + roomMsgData.getRoomId() + " messageId=" + roomMsgData.getMessageId()); + BusinessSceneUtil.setChatAccessRoom(true); mRoomTaskStoreHouse.postTask(new Runnable() { @Override public void run() { @@ -305,7 +307,6 @@ public void onCreateRoom(String roomId, AccessRoomConstants.RoomResult result) { @Override public void onEnterRoom(String roomId, AccessRoomConstants.RoomResult result) { Log.d(TAG, "onEnterRoom"); - BusinessSceneUtil.setChatAccessRoom(true); BusinessSceneUtil.setCurRoomId(roomId); if (result == AccessRoomConstants.RoomResult.FAILED) { mJoinRoomLatch.countDown(); diff --git a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/model/RoomEventCenter.java b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/model/RoomEventCenter.java index 90ec00c3c..6079a01d1 100644 --- a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/model/RoomEventCenter.java +++ b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/model/RoomEventCenter.java @@ -70,21 +70,33 @@ public enum RoomEngineEvent { } public static class RoomKitUIEvent { - public static final String ROOM_KIT_EVENT = "RoomKitEvent"; - public static final String CONFIGURATION_CHANGE = "appConfigurationChange"; - public static final String KICKED_OFF_LINE = "kickedOffLine"; - public static final String AGREE_TAKE_SEAT = "agreeTakeSeat"; - public static final String DISAGREE_TAKE_SEAT = "disagreeTakeSeat"; - public static final String INVITE_TAKE_SEAT = "inviteTakeSeat"; - public static final String SHOW_USER_MANAGEMENT = "showUserManagement"; - public static final String SHOW_EXIT_ROOM_VIEW = "showLeaveRoomView"; - public static final String SHOW_MEETING_INFO = "showMeetingInfo"; - public static final String SHOW_USER_LIST = "showUserList"; - public static final String SHOW_APPLY_LIST = "showApplyList"; - public static final String SHOW_QRCODE_VIEW = "showQRCodeView"; - public static final String SHOW_INVITE_VIEW = "showInviteView"; - - public static final String OWNER_EXIT_ROOM_ACTION = "OWNER_EXIT_ROOM_ACTION"; + public static final String ROOM_KIT_EVENT = "ROOM_KIT_EVENT"; + public static final String CONFIGURATION_CHANGE = "CONFIGURATION_CHANGE"; + public static final String KICKED_OFF_LINE = "KICKED_OFF_LINE"; + public static final String AGREE_TAKE_SEAT = "AGREE_TAKE_SEAT"; + public static final String DISAGREE_TAKE_SEAT = "DISAGREE_TAKE_SEAT"; + public static final String INVITE_TAKE_SEAT = "INVITE_TAKE_SEAT"; + + public static final String SHOW_USER_MANAGEMENT = "SHOW_USER_MANAGEMENT"; + public static final String DISMISS_USER_MANAGEMENT = "DISMISS_USER_MANAGEMENT"; + public static final String SHOW_EXIT_ROOM_VIEW = "SHOW_EXIT_ROOM_VIEW"; + public static final String DISMISS_EXIT_ROOM_VIEW = "DISMISS_EXIT_ROOM_VIEW"; + public static final String SHOW_MEETING_INFO = "SHOW_MEETING_INFO"; + public static final String DISMISS_MEETING_INFO = "DISMISS_MEETING_INFO"; + public static final String SHOW_USER_LIST = "SHOW_USER_LIST"; + public static final String DISMISS_USER_LIST = "DISMISS_USER_LIST"; + public static final String SHOW_APPLY_LIST = "SHOW_APPLY_LIST"; + public static final String DISMISS_APPLY_LIST = "DISMISS_APPLY_LIST"; + public static final String SHOW_QRCODE_VIEW = "SHOW_QRCODE_VIEW"; + public static final String DISMISS_QRCODE_VIEW = "DISMISS_QRCODE_VIEW"; + public static final String SHOW_MEDIA_SETTING_PANEL = "SHOW_MEDIA_SETTING_PANEL"; + public static final String DISMISS_MEDIA_SETTING_PANEL = "DISMISS_MEDIA_SETTING_PANEL"; + public static final String SHOW_INVITE_PANEL = "SHOW_INVITE_PANEL"; + public static final String DISMISS_INVITE_PANEL = "DISMISS_INVITE_PANEL"; + public static final String SHOW_INVITE_PANEL_SECOND = "SHOW_INVITE_PANEL_SECOND"; + public static final String DISMISS_INVITE_PANEL_SECOND = "DISMISS_INVITE_PANEL_SECOND"; + public static final String SHOW_OWNER_EXIT_ROOM_PANEL = "SHOW_OWNER_EXIT_ROOM_PANEL"; + public static final String DISMISS_OWNER_EXIT_ROOM_PANEL = "DISMISS_OWNER_EXIT_ROOM_PANEL"; public static final String ENTER_FLOAT_WINDOW = "ENTER_FLOAT_WINDOW"; public static final String EXIT_FLOAT_WINDOW = "EXIT_FLOAT_WINDOW"; diff --git a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/model/RoomStore.java b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/model/RoomStore.java index 09ff58897..3cd41aa99 100644 --- a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/model/RoomStore.java +++ b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/model/RoomStore.java @@ -171,50 +171,119 @@ public void remoteUserLeaveRoom(String userId) { public void remoteUserTakeSeat(TUIRoomDefine.UserInfo userInfo) { Log.d(TAG, "remoteUserTakeSeat userId=" + userInfo.userId); if (TextUtils.equals(userInfo.userId, TUILogin.getUserId())) { - userModel.seatStatus = UserModel.SeatStatus.ON_SEAT; + userModel.setSeatStatus(UserModel.SeatStatus.ON_SEAT); } if (userInfo.hasScreenStream) { - boolean isUserExist = false; - for (UserEntity item : seatUserList) { - if (TextUtils.equals(item.getUserId(), userInfo.userId) && item.getVideoStreamType() == SCREEN_STREAM) { - isUserExist = true; - break; - } + remoteScreenUserTakeSeat(userInfo); + } + remoteCameraUserTakeSeat(userInfo); + } + + private void remoteScreenUserTakeSeat(TUIRoomDefine.UserInfo userInfo) { + for (UserEntity item : seatUserList) { + if (TextUtils.equals(item.getUserId(), userInfo.userId) && item.getVideoStreamType() == SCREEN_STREAM) { + return; } - if (!isUserExist) { - seatUserList.add(0, UserEntity.toUserEntityForScreenStream(userInfo)); - Map map = new HashMap<>(); - map.put(RoomEventConstant.KEY_USER_POSITION, 0); - RoomEventCenter.getInstance() - .notifyEngineEvent(RoomEventCenter.RoomEngineEvent.REMOTE_USER_TAKE_SEAT, map); + } + seatUserList.add(0, UserEntity.toUserEntityForScreenStream(userInfo)); + int userPosition = USER_NOT_FOUND; + for (int i = 0; i < allUserList.size(); i++) { + if (TextUtils.equals(allUserList.get(i).getUserId(), userInfo.userId) + && allUserList.get(i).getVideoStreamType() == SCREEN_STREAM) { + allUserList.get(i).setOnSeat(true); + userPosition = i; } } + Map map = new HashMap<>(); + map.put(RoomEventConstant.KEY_SEAT_USER_POSITION, 0); + map.put(RoomEventConstant.KEY_USER_POSITION, userPosition); + RoomEventCenter.getInstance().notifyEngineEvent(RoomEventCenter.RoomEngineEvent.REMOTE_USER_TAKE_SEAT, map); + } + private void remoteCameraUserTakeSeat(TUIRoomDefine.UserInfo userInfo) { for (UserEntity item : seatUserList) { if (TextUtils.equals(item.getUserId(), userInfo.userId) && item.getVideoStreamType() != SCREEN_STREAM) { return; } } seatUserList.add(UserEntity.toUserEntityForCameraStream(userInfo)); + int userPosition = USER_NOT_FOUND; + for (int i = 0; i < allUserList.size(); i++) { + if (TextUtils.equals(allUserList.get(i).getUserId(), userInfo.userId) + && allUserList.get(i).getVideoStreamType() != SCREEN_STREAM) { + allUserList.get(i).setOnSeat(true); + userPosition = i; + } + } Map map = new HashMap<>(); - map.put(RoomEventConstant.KEY_USER_POSITION, seatUserList.size() - 1); + map.put(RoomEventConstant.KEY_SEAT_USER_POSITION, seatUserList.size() - 1); + map.put(RoomEventConstant.KEY_USER_POSITION, userPosition); RoomEventCenter.getInstance().notifyEngineEvent(RoomEventCenter.RoomEngineEvent.REMOTE_USER_TAKE_SEAT, map); } public void remoteUserLeaveSeat(String userId) { Log.d(TAG, "remoteUserLeaveSeat userId=" + userId); if (TextUtils.equals(userId, TUILogin.getUserId())) { - userModel.seatStatus = UserModel.SeatStatus.OFF_SEAT; + userModel.setSeatStatus(UserModel.SeatStatus.OFF_SEAT); } + remoteScreenUserLeaveSeat(userId); + remoteCameraUserLeaveSeat(userId); + } + + private void remoteScreenUserLeaveSeat(String userId) { + int seatPosition = USER_NOT_FOUND; for (int i = 0; i < seatUserList.size(); i++) { - if (TextUtils.equals(userId, seatUserList.get(i).getUserId())) { - Map map = new HashMap<>(); - map.put(RoomEventConstant.KEY_USER_POSITION, i); - RoomEventCenter.getInstance() - .notifyEngineEvent(RoomEventCenter.RoomEngineEvent.REMOTE_USER_LEAVE_SEAT, map); - seatUserList.remove(i); + if (seatUserList.get(i).getVideoStreamType() == SCREEN_STREAM && TextUtils.equals(userId, seatUserList.get(i).getUserId())) { + seatPosition = i; + break; + } + } + if (seatPosition == USER_NOT_FOUND) { + return; + } + int userPosition = USER_NOT_FOUND; + for (int i = 0; i < allUserList.size(); i++) { + if (allUserList.get(i).getVideoStreamType() == SCREEN_STREAM && TextUtils.equals(userId, allUserList.get(i).getUserId())) { + userPosition = i; + allUserList.get(i).setOnSeat(false); + break; + } + } + + Map map = new HashMap<>(); + map.put(RoomEventConstant.KEY_SEAT_USER_POSITION, seatPosition); + map.put(RoomEventConstant.KEY_USER_POSITION, userPosition); + RoomEventCenter.getInstance() + .notifyEngineEvent(RoomEventCenter.RoomEngineEvent.REMOTE_USER_LEAVE_SEAT, map); + seatUserList.remove(seatPosition); + } + + private void remoteCameraUserLeaveSeat(String userId) { + int seatPosition = USER_NOT_FOUND; + for (int i = 0; i < seatUserList.size(); i++) { + if (seatUserList.get(i).getVideoStreamType() != SCREEN_STREAM && TextUtils.equals(userId, seatUserList.get(i).getUserId())) { + seatPosition = i; + break; + } + } + if (seatPosition == USER_NOT_FOUND) { + return; + } + int userPosition = USER_NOT_FOUND; + for (int i = 0; i < allUserList.size(); i++) { + if (allUserList.get(i).getVideoStreamType() != SCREEN_STREAM && TextUtils.equals(userId, allUserList.get(i).getUserId())) { + userPosition = i; + allUserList.get(i).setOnSeat(false); + break; } } + + Map map = new HashMap<>(); + map.put(RoomEventConstant.KEY_SEAT_USER_POSITION, seatPosition); + map.put(RoomEventConstant.KEY_USER_POSITION, userPosition); + RoomEventCenter.getInstance() + .notifyEngineEvent(RoomEventCenter.RoomEngineEvent.REMOTE_USER_LEAVE_SEAT, map); + seatUserList.remove(seatPosition); } public void disableUserSendingMsg(String userId, boolean disable) { diff --git a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/model/entity/UserModel.java b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/model/entity/UserModel.java index 29d4b89fe..521282bdb 100644 --- a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/model/entity/UserModel.java +++ b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/model/entity/UserModel.java @@ -8,8 +8,10 @@ public class UserModel { public String userName; public String userAvatar; public TUIRoomDefine.Role role; - public SeatStatus seatStatus = SeatStatus.OFF_SEAT; public String takeSeatRequestId; + public long enterRoomTime = 0L; + + private SeatStatus seatStatus = SeatStatus.OFF_SEAT; public UserModel() { userId = TUILogin.getUserId(); @@ -17,6 +19,14 @@ public UserModel() { userAvatar = TUILogin.getFaceUrl(); } + public SeatStatus getSeatStatus() { + return seatStatus; + } + + public void setSeatStatus(SeatStatus seatStatus) { + this.seatStatus = seatStatus; + } + public enum SeatStatus { OFF_SEAT, APPLYING_TAKE_SEAT, diff --git a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/model/manager/RoomEngineManager.java b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/model/manager/RoomEngineManager.java index 8c7638e9c..1bacf99d3 100644 --- a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/model/manager/RoomEngineManager.java +++ b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/model/manager/RoomEngineManager.java @@ -27,6 +27,7 @@ import com.tencent.cloud.tuikit.engine.room.TUIRoomEngine; import com.tencent.cloud.tuikit.engine.room.TUIRoomObserver; import com.tencent.cloud.tuikit.roomkit.R; +import com.tencent.cloud.tuikit.roomkit.imaccess.utils.BusinessSceneUtil; import com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter; import com.tencent.cloud.tuikit.roomkit.model.RoomStore; import com.tencent.cloud.tuikit.roomkit.model.entity.UserModel; @@ -477,7 +478,7 @@ public TUIRoomDefine.Request takeSeat(int seatIndex, int timeOut, TUIRoomDefine. @Override public void onAccepted(String requestId, String userId) { Log.d(TAG, "takeSeat onAccepted requestId=" + requestId + " userId=" + userId); - mRoomStore.userModel.seatStatus = UserModel.SeatStatus.ON_SEAT; + mRoomStore.userModel.setSeatStatus(UserModel.SeatStatus.ON_SEAT); mRoomStore.userModel.takeSeatRequestId = null; if (callback != null) { callback.onAccepted(requestId, userId); @@ -487,7 +488,7 @@ public void onAccepted(String requestId, String userId) { @Override public void onRejected(String requestId, String userId, String message) { Log.i(TAG, "takeSeat onRejected userId=" + userId + " message=" + message); - mRoomStore.userModel.seatStatus = UserModel.SeatStatus.OFF_SEAT; + mRoomStore.userModel.setSeatStatus(UserModel.SeatStatus.OFF_SEAT); mRoomStore.userModel.takeSeatRequestId = null; if (callback != null) { callback.onRejected(requestId, userId, message); @@ -497,7 +498,7 @@ public void onRejected(String requestId, String userId, String message) { @Override public void onCancelled(String requestId, String userId) { Log.i(TAG, "takeSeat onRejected requestId=" + requestId + " userId=" + userId); - mRoomStore.userModel.seatStatus = UserModel.SeatStatus.OFF_SEAT; + mRoomStore.userModel.setSeatStatus(UserModel.SeatStatus.OFF_SEAT); mRoomStore.userModel.takeSeatRequestId = null; if (callback != null) { callback.onCancelled(requestId, userId); @@ -507,7 +508,7 @@ public void onCancelled(String requestId, String userId) { @Override public void onTimeout(String requestId, String userId) { Log.i(TAG, "takeSeat onTimeout requestId=" + requestId + " userId=" + userId); - mRoomStore.userModel.seatStatus = UserModel.SeatStatus.OFF_SEAT; + mRoomStore.userModel.setSeatStatus(UserModel.SeatStatus.OFF_SEAT); mRoomStore.userModel.takeSeatRequestId = null; if (callback != null) { callback.onTimeout(requestId, userId); @@ -517,41 +518,57 @@ public void onTimeout(String requestId, String userId) { @Override public void onError(String requestId, String userId, TUICommonDefine.Error code, String message) { Log.e(TAG, "takeSeat onError userId=" + userId + " code=" + code + " message=" + message); - mRoomStore.userModel.seatStatus = UserModel.SeatStatus.OFF_SEAT; + mRoomStore.userModel.setSeatStatus(UserModel.SeatStatus.OFF_SEAT); mRoomStore.userModel.takeSeatRequestId = null; if (callback != null) { callback.onError(requestId, userId, code, message); } } }); - mRoomStore.userModel.seatStatus = UserModel.SeatStatus.APPLYING_TAKE_SEAT; + mRoomStore.userModel.setSeatStatus(UserModel.SeatStatus.APPLYING_TAKE_SEAT); mRoomStore.userModel.takeSeatRequestId = request.requestId; return request; } public void leaveSeat(TUIRoomDefine.ActionCallback callback) { mRoomEngine.leaveSeat(callback); + mRoomStore.audioModel.setMicOpen(false); } - private void autoTakeSeatForOwner(TUIRoomDefine.RequestCallback callback) { + public void autoTakeSeatForOwner(TUIRoomDefine.RequestCallback callback) { if (mRoomStore.userModel.role == TUIRoomDefine.Role.ROOM_OWNER - && mRoomStore.roomInfo.speechMode == SPEAK_AFTER_TAKING_SEAT) { + && mRoomStore.roomInfo.speechMode == SPEAK_AFTER_TAKING_SEAT && mRoomStore.userModel.isOffSeat()) { takeSeat(0, 0, callback); return; } - callback.onAccepted(null, null); + if (callback != null) { + callback.onAccepted(null, null); + } } private void setFramework() { - String jsonStr = "{\n" - + " \"api\":\"setFramework\",\n" - + " \"params\":\n" - + " {\n" - + " \"framework\": 1, \n" - + " \"component\": 18, \n" - + " \"language\": 1\n" - + " }\n" - + "}"; + String jsonStr; + if (BusinessSceneUtil.isChatAccessRoom()) { + jsonStr = "{\n" + + " \"api\":\"setFramework\",\n" + + " \"params\":\n" + + " {\n" + + " \"framework\": 1, \n" + + " \"component\": 19, \n" + + " \"language\": 1\n" + + " }\n" + + "}"; + } else { + jsonStr = "{\n" + + " \"api\":\"setFramework\",\n" + + " \"params\":\n" + + " {\n" + + " \"framework\": 1, \n" + + " \"component\": 18, \n" + + " \"language\": 1\n" + + " }\n" + + "}"; + } mRoomEngine.callExperimentalAPI(jsonStr); } @@ -614,6 +631,7 @@ public void onError(TUICommonDefine.Error error, String s) { private void updateRoomStore(TUIRoomDefine.RoomInfo engineRoomInfo) { mRoomStore.roomInfo = engineRoomInfo; + mRoomStore.userModel.enterRoomTime = System.currentTimeMillis(); mRoomStore.userModel.role = TextUtils.equals(engineRoomInfo.ownerId, TUILogin.getUserId()) ? TUIRoomDefine.Role.ROOM_OWNER : TUIRoomDefine.Role.GENERAL_USER; diff --git a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/model/manager/RoomEventDispatcher.java b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/model/manager/RoomEventDispatcher.java index 4f31bbb37..acad2aec1 100644 --- a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/model/manager/RoomEventDispatcher.java +++ b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/model/manager/RoomEventDispatcher.java @@ -120,6 +120,7 @@ public void onRemoteUserLeaveRoom(String roomId, TUIRoomDefine.UserInfo userInfo public void onUserRoleChanged(String userId, TUIRoomDefine.Role role) { if (TextUtils.equals(userId, mRoomStore.userModel.userId)) { mRoomStore.userModel.role = role; + RoomEngineManager.sharedInstance().autoTakeSeatForOwner(null); } if (role == TUIRoomDefine.Role.ROOM_OWNER) { mRoomStore.roomInfo.ownerId = userId; @@ -271,5 +272,6 @@ public void onKickedOffSeat(String userId) { Map map = new HashMap<>(); map.put(RoomEventConstant.KEY_USER_ID, userId); RoomEventCenter.getInstance().notifyEngineEvent(RoomEventCenter.RoomEngineEvent.KICKED_OFF_SEAT, map); + mRoomStore.audioModel.setMicOpen(false); } } \ No newline at end of file diff --git a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/videoseat/ui/TUIVideoSeatView.java b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/videoseat/ui/TUIVideoSeatView.java index a6f35e673..28a5657c2 100644 --- a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/videoseat/ui/TUIVideoSeatView.java +++ b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/videoseat/ui/TUIVideoSeatView.java @@ -57,7 +57,7 @@ public class TUIVideoSeatView extends RelativeLayout { private int mCurrentPageIndex = 0; - private long mSmallVideoLastUpdateTime = 0L; + private long mSmallUserLastUpdateTime = 0L; private OnClickListener mClickListener; private boolean mIsClickAction; @@ -123,6 +123,7 @@ public void onPageSizeChanged(int pageSize) { @Override public void onPageSelect(int pageIndex) { Log.d(TAG, "onPageSelect pageIndex=" + pageIndex); + refreshSmallScreenForPageBack(mCurrentPageIndex, pageIndex); if (mIsSpeakerModeOn && mCurrentPageIndex == 0 && pageIndex == 1) { post(new Runnable() { @Override @@ -131,6 +132,7 @@ public void run() { } }); } + mCurrentPageIndex = pageIndex; updateUserTalkingViewVisible(pageIndex); updateCircleIndicator(); @@ -145,6 +147,23 @@ public void onItemVisible(int fromItem, int toItem) { mRecyclerView.setLayoutManager(mPageLayoutManager); } + private void refreshSmallScreenForPageBack(int oldPageIndex, int newPageIndex) { + if (!mIsSpeakerModeOn || !(oldPageIndex == 1) || !(newPageIndex == 0)) { + return; + } + UserEntity smallUser = mUserDisplayView.getUserEntity(); + if (smallUser == null) { + return; + } + mUserDisplayView.setUserEntity(smallUser); + if (smallUser.isVideoAvailable()) { + startVideoPlay(smallUser); + } else { + stopVideoPlay(smallUser); + } + ensureUserTalkingViewFullyDisplayed(); + } + private void initListView() { mRecyclerView = findViewById(R.id.rv_list); mMemberListAdapter = new UserListAdapter(mContext, mMemberEntityList); @@ -220,60 +239,61 @@ private void setUserTalkingViewSize(UserEntity talkingEntity, LayoutParams layou } } - private void updateUserTalkingView(int position) { - if (position < 0 || position >= mMemberEntityList.size()) { - return; - } - UserEntity newEntity = mMemberEntityList.get(position); - UserEntity curEntity = mUserDisplayView.getUserEntity(); - if (isSmallVideoTwinkleInSpeaker(newEntity, curEntity)) { - return; + private void updateAudioForSmallScreen(int position) { + updateUserInSpeakerMode(position); + UserEntity newUser = mMemberEntityList.get(position); + UserEntity curUser = mUserDisplayView.getUserEntity(); + if (curUser != null && TextUtils.equals(newUser.getUserId(), curUser.getUserId())) { + mUserDisplayView.enableVolumeEffect(newUser.isAudioAvailable()); + mUserDisplayView.updateVolumeEffect(newUser.getAudioVolume()); + mUserDisplayView.setVolume(newUser.isTalk()); + // sdk 最后不会回调音量0,所以 app 需要每次将音量清 0 + newUser.setAudioVolume(VOLUME_NO_SOUND); } - updateSmallVideoFlushTimeInSpeaker(newEntity, curEntity); - - mUserDisplayView.setUserEntity(newEntity); - if (newEntity.isVideoAvailable()) { - startVideoPlay(newEntity); - } else { - stopVideoPlay(newEntity); - } - - ensureUserTalkingViewFullyDisplayed(); - mUserDisplayView.enableVolumeEffect(newEntity.isAudioAvailable()); - mUserDisplayView.updateVolumeEffect(newEntity.getAudioVolume()); - mUserDisplayView.setVolume(newEntity.isTalk()); - // sdk 最后不会回调音量0,所以 app 需要每次将音量清 0 - newEntity.setAudioVolume(VOLUME_NO_SOUND); } - private boolean isSmallVideoTwinkleInSpeaker(UserEntity newUser, UserEntity curUser) { - if (newUser == null || curUser == null) { - return false; - } + private void updateUserInSpeakerMode(int position) { if (!mIsSpeakerModeOn) { - return false; + return; } - if (TextUtils.equals(newUser.getUserId(), curUser.getUserId())) { - return false; + if (System.currentTimeMillis() - mSmallUserLastUpdateTime < SMALL_VIDEO_UPDATE_INTERVAL) { + return; } - return System.currentTimeMillis() - mSmallVideoLastUpdateTime < SMALL_VIDEO_UPDATE_INTERVAL; - } - - private void updateSmallVideoFlushTimeInSpeaker(UserEntity newUser, UserEntity curUser) { - if (curUser == null) { - mSmallVideoLastUpdateTime = System.currentTimeMillis(); + UserEntity newUser = mMemberEntityList.get(position); + if (!newUser.isAudioAvailable()) { return; } - if (newUser == null) { + UserEntity curUser = mUserDisplayView.getUserEntity(); + if (curUser != null && TextUtils.equals(newUser.getUserId(), curUser.getUserId())) { return; } - if (!mIsSpeakerModeOn) { + mUserDisplayView.setUserEntity(newUser); + mSmallUserLastUpdateTime = System.currentTimeMillis(); + updateVideoForSmallScreen(position); + } + + private void updateUserInTwoPersonMode(int position) { + if (!mIsTwoPersonVideoOn) { return; } - if (TextUtils.equals(newUser.getUserId(), curUser.getUserId())) { + UserEntity newUser = mMemberEntityList.get(position); + mUserDisplayView.setUserEntity(newUser); + updateVideoForSmallScreen(position); + } + + private void updateVideoForSmallScreen(int position) { + UserEntity newUser = mMemberEntityList.get(position); + UserEntity curUser = mUserDisplayView.getUserEntity(); + if (curUser == null || !TextUtils.equals(newUser.getUserId(), curUser.getUserId())) { return; } - mSmallVideoLastUpdateTime = System.currentTimeMillis(); + if (newUser.isVideoAvailable()) { + startVideoPlay(newUser); + } else { + stopVideoPlay(newUser); + } + ensureUserTalkingViewFullyDisplayed(); + mUserDisplayView.updateVideoEnableEffect(); } private void ensureUserTalkingViewFullyDisplayed() { @@ -394,11 +414,8 @@ public void notifyItemVideoSwitchStageChanged(int position) { if (mMemberListAdapter == null) { return; } - if (mIsTwoPersonVideoOn) { - updateUserTalkingView(mIsTwoPersonSwitched ? 0 : 1); - } - if (needUpdateUserTalkingViewForSpeaker(position)) { - updateUserTalkingView(position); + if (mIsTwoPersonVideoOn || needUpdateUserTalkingViewForSpeaker(position)) { + updateVideoForSmallScreen(position); } if (position < mVisibleRange.getMinVisibleRange() || position > mVisibleRange.getMaxVisibleRange()) { @@ -415,11 +432,8 @@ public void notifyItemVideoSwitchStageChanged(int position) { } public void notifyItemAudioStateChanged(int position) { - if (needUpdateUserTalkingViewForSpeaker(position)) { - updateUserTalkingView(position); - } - if (mIsTwoPersonVideoOn) { - updateUserTalkingView(mIsTwoPersonSwitched ? 0 : 1); + if (mIsTwoPersonVideoOn || needUpdateUserTalkingViewForSpeaker(position)) { + updateAudioForSmallScreen(position); } if (mMemberListAdapter != null) { mMemberListAdapter.notifyItemChanged(position, UserListAdapter.PAYLOAD_AUDIO); @@ -485,7 +499,7 @@ public void enableTwoPersonVideoMeeting(boolean enable) { updateUserTalkingViewVisible(); if (enable) { initUserTalkingViewLayout(); - updateUserTalkingView(mIsTwoPersonSwitched ? 0 : 1); + updateUserInTwoPersonMode(mIsTwoPersonSwitched ? 0 : 1); setUserDisplayViewClickListener(); } else { UserEntity displayUserEntity = mUserDisplayView.getUserEntity(); @@ -509,7 +523,7 @@ public void enableTwoPersonVideoMeeting(boolean enable) { } public void notifyTalkingViewDataChanged() { - updateUserTalkingView(mIsTwoPersonSwitched ? 0 : 1); + updateUserInTwoPersonMode(mIsTwoPersonSwitched ? 0 : 1); } private UserEntity findUserEntityFromLMember(UserEntity userEntity) { @@ -538,7 +552,7 @@ public void onClick(View v) { private void switchTwoPersonVideoMeeting() { mIsTwoPersonSwitched = !mIsTwoPersonSwitched; Log.d(TAG, "switchTwoPersonVideoMeeting mIsTwoPersonSwitched=" + mIsTwoPersonSwitched); - updateUserTalkingView(mIsTwoPersonSwitched ? 0 : 1); + updateUserInTwoPersonMode(mIsTwoPersonSwitched ? 0 : 1); mPageLayoutManager.enableTwoPersonMeeting(mIsTwoPersonVideoOn, mIsTwoPersonSwitched); mMemberListAdapter.notifyItemChanged(mIsTwoPersonSwitched ? 1 : 0); } diff --git a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/videoseat/ui/utils/UserListSorter.java b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/videoseat/ui/utils/UserListSorter.java index c85086911..b9f7dc978 100644 --- a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/videoseat/ui/utils/UserListSorter.java +++ b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/videoseat/ui/utils/UserListSorter.java @@ -62,7 +62,7 @@ public int removeUser(List userList, UserEntity userEntity) { } public boolean isSpeakerOfScreenSharing(List userList) { - if (userList.size() < Constants.SPEAKER_MODE_MEMBER_MIN_LIMIT) { + if (userList.isEmpty()) { return false; } return userList.get(0).isScreenShareAvailable(); diff --git a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/videoseat/ui/view/UserDisplayView.java b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/videoseat/ui/view/UserDisplayView.java index b2fc087c5..2efae3fc2 100644 --- a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/videoseat/ui/view/UserDisplayView.java +++ b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/videoseat/ui/view/UserDisplayView.java @@ -2,6 +2,7 @@ import android.content.Context; import android.graphics.Rect; +import android.text.TextUtils; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; @@ -77,13 +78,6 @@ public void setUserEntity(final UserEntity model) { return; } addRoomVideoView(model); - if (model.isSelf()) { - mViewBackground.setVisibility(model.isVideoAvailable() ? GONE : VISIBLE); - mUserHeadImg.setVisibility(model.isVideoAvailable() ? GONE : VISIBLE); - } else { - mViewBackground.setVisibility(model.isVideoPlaying() ? GONE : VISIBLE); - mUserHeadImg.setVisibility(model.isVideoPlaying() ? GONE : VISIBLE); - } updateUserAvatarIfNeeded(mMemberEntity, model); mUserNameTv.setText(model.getUserName()); @@ -97,6 +91,7 @@ public void setUserEntity(final UserEntity model) { mTopLayout.setVisibility(VISIBLE); mMemberEntity = model; + updateVideoEnableEffect(); } private void updateUserAvatarIfNeeded(UserEntity oldUser, UserEntity newUser) { @@ -119,15 +114,21 @@ private void addRoomVideoView(UserEntity userEntity) { if (videoView == null) { return; } - ViewParent viewParent = videoView.getParent(); - if (viewParent != null && (viewParent instanceof ViewGroup)) { - if (viewParent == mVideoContainer) { - return; + // addView 需要在 ViewGroup 测量、布局之后才能执行; + post(new Runnable() { + @Override + public void run() { + ViewParent viewParent = videoView.getParent(); + if (viewParent != null && (viewParent instanceof ViewGroup)) { + if (viewParent == mVideoContainer) { + return; + } + ((ViewGroup) viewParent).removeView(videoView); + } + mVideoContainer.removeAllViews(); + mVideoContainer.addView(videoView); } - ((ViewGroup) viewParent).removeView(videoView); - } - mVideoContainer.removeAllViews(); - mVideoContainer.addView(videoView); + }); } public void clearUserEntity() { @@ -141,6 +142,19 @@ public void setOnClickListener(@Nullable OnClickListener l) { mOnClickListener = l; } + public void updateVideoEnableEffect() { + if (mMemberEntity == null) { + return; + } + if (mMemberEntity.isSelf()) { + mViewBackground.setVisibility(mMemberEntity.isVideoAvailable() ? GONE : VISIBLE); + mUserHeadImg.setVisibility(mMemberEntity.isVideoAvailable() ? GONE : VISIBLE); + } else { + mViewBackground.setVisibility(mMemberEntity.isVideoPlaying() ? GONE : VISIBLE); + mUserHeadImg.setVisibility(mMemberEntity.isVideoPlaying() ? GONE : VISIBLE); + } + } + public void enableVolumeEffect(boolean enable) { mUserMic.enableVolumeEffect(enable); } diff --git a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/videoseat/viewmodel/VideoSeatViewModel.java b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/videoseat/viewmodel/VideoSeatViewModel.java index 627d5fe77..375b1249e 100644 --- a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/videoseat/viewmodel/VideoSeatViewModel.java +++ b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/videoseat/viewmodel/VideoSeatViewModel.java @@ -545,12 +545,12 @@ private void notifySpeakerModeChangedIfNeeded() { } private @Constants.SpeakerMode int getSpeakerModeFromData() { - if (mUserEntityList.size() < Constants.SPEAKER_MODE_MEMBER_MIN_LIMIT) { - return Constants.SPEAKER_MODE_NONE; - } if (mUserListSorter.isSpeakerOfScreenSharing(mUserEntityList)) { return Constants.SPEAKER_MODE_SCREEN_SHARING; } + if (mUserEntityList.size() < Constants.SPEAKER_MODE_MEMBER_MIN_LIMIT) { + return Constants.SPEAKER_MODE_NONE; + } if (mUserListSorter.isSpeakerOfPersonalVideoShow(mUserEntityList)) { return Constants.SPEAKER_MODE_PERSONAL_VIDEO_SHOW; } @@ -577,7 +577,13 @@ private boolean isTwoPersonVideoMeetingFromData() { if (mUserEntityList.size() != Constants.TWO_PERSON_VIDEO_CONFERENCE_MEMBER_COUNT) { return false; } - return mUserEntityList.get(0).isVideoAvailable() || mUserEntityList.get(1).isVideoAvailable(); + if (!mUserEntityList.get(0).isVideoAvailable() && !mUserEntityList.get(1).isVideoAvailable()) { + return false; + } + if (mUserEntityList.get(0).isScreenShareAvailable() || mUserEntityList.get(1).isScreenShareAvailable()) { + return false; + } + return true; } @Override diff --git a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/component/BaseBottomDialog.java b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/component/BaseBottomDialog.java index 0332f342d..a8a85e497 100644 --- a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/component/BaseBottomDialog.java +++ b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/component/BaseBottomDialog.java @@ -1,10 +1,12 @@ package com.tencent.cloud.tuikit.roomkit.view.component; +import android.app.Activity; import android.content.Context; import android.content.res.Configuration; import android.os.Bundle; +import android.util.Log; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; @@ -21,11 +23,16 @@ import com.tencent.cloud.tuikit.roomkit.R; public abstract class BaseBottomDialog extends BottomSheetDialog { + private static final String TAG = "BaseBottomDialog"; + private View bottomSheetView; private BottomSheetBehavior mBehavior; + private Context mContext; + public BaseBottomDialog(@NonNull Context context) { super(context); + mContext = context; } @Override @@ -67,6 +74,13 @@ public void changeConfiguration(Configuration configuration) { } private void handleScreenOrientationChanged(Configuration configuration) { + if (mContext != null && mContext instanceof Activity) { + Activity activity = (Activity) mContext; + if (activity.isFinishing()) { + Log.e(TAG, "handleScreenOrientationChanged activity is finishing"); + return; + } + } Window window = getWindow(); if (window == null) { return; diff --git a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/component/BaseDialogFragment.java b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/component/BaseDialogFragment.java new file mode 100644 index 000000000..6799797f5 --- /dev/null +++ b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/component/BaseDialogFragment.java @@ -0,0 +1,140 @@ +package com.tencent.cloud.tuikit.roomkit.view.component; + +import android.os.Bundle; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.widget.Button; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.DialogFragment; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; + +import com.tencent.cloud.tuikit.roomkit.R; + +public class BaseDialogFragment extends DialogFragment { + + private View mRootView; + + private String mTitle; + private String mContent; + private String mNegativeName; + private String mPositiveName; + + private ClickListener mNegativeListener; + private ClickListener mPositiveListener; + + public interface ClickListener { + void onClick(); + } + + public static BaseDialogFragment build() { + BaseDialogFragment dialog = new BaseDialogFragment(); + return dialog; + } + + public BaseDialogFragment setTitle(String title) { + mTitle = title; + return this; + } + + public BaseDialogFragment setContent(String content) { + mContent = content; + return this; + } + + public BaseDialogFragment setNegativeName(String negativeName) { + mNegativeName = negativeName; + return this; + } + + public BaseDialogFragment setPositiveName(String positiveName) { + mPositiveName = positiveName; + return this; + } + + public BaseDialogFragment setNegativeListener(ClickListener negativeListener) { + mNegativeListener = negativeListener; + return this; + } + + public BaseDialogFragment setPositiveListener(ClickListener positiveListener) { + mPositiveListener = positiveListener; + return this; + } + + public void showDialog(@NonNull FragmentManager manager, @Nullable String tag) { + Fragment fragment = manager.findFragmentByTag(tag); + if (fragment != null && fragment instanceof DialogFragment) { + DialogFragment dialogFragment = (DialogFragment) fragment; + dialogFragment.dismissAllowingStateLoss(); + } + setCancelable(false); + this.show(manager, tag); + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + mRootView = inflater.inflate(R.layout.tuiroomkit_dialog_base, container, false); + return mRootView; + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + TextView tvTitle = mRootView.findViewById(R.id.tuiroomkit_dialog_title); + if (TextUtils.isEmpty(mTitle)) { + tvTitle.setVisibility(View.GONE); + } else { + tvTitle.setText(mTitle); + } + TextView tvContent = mRootView.findViewById(R.id.tuiroomkit_dialog_content); + if (TextUtils.isEmpty(mContent)) { + tvContent.setVisibility(View.GONE); + } else { + tvContent.setText(mContent); + } + + Button btnNegative = mRootView.findViewById(R.id.tuiroomkit_btn_dialog_negative); + if (!TextUtils.isEmpty(mNegativeName)) { + btnNegative.setText(mNegativeName); + } + btnNegative.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + btnNegative.setClickable(false); + if (mNegativeListener != null) { + mNegativeListener.onClick(); + } + dismissAllowingStateLoss(); + } + }); + + Button btnPositive = mRootView.findViewById(R.id.tuiroomkit_btn_dialog_positive); + if (!TextUtils.isEmpty(mPositiveName)) { + btnPositive.setText(mPositiveName); + } + btnPositive.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + btnPositive.setClickable(false); + if (mPositiveListener != null) { + mPositiveListener.onClick(); + } + dismissAllowingStateLoss(); + } + }); + } + + @Override + public void onStart() { + super.onStart(); + Window window = getDialog().getWindow(); + window.setBackgroundDrawableResource(android.R.color.transparent); + } +} diff --git a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/RoomMainActivity.java b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/RoomMainActivity.java index 41d2e55ce..726b0f129 100644 --- a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/RoomMainActivity.java +++ b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/RoomMainActivity.java @@ -2,6 +2,7 @@ import static com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter.RoomEngineEvent.LOCAL_USER_DESTROY_ROOM; import static com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter.RoomEngineEvent.LOCAL_USER_EXIT_ROOM; +import static com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter.RoomEngineEvent.REQUEST_RECEIVED; import static com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter.RoomKitUIEvent.ENTER_FLOAT_WINDOW; import android.content.res.Configuration; @@ -16,8 +17,12 @@ import androidx.appcompat.app.AppCompatActivity; +import com.tencent.cloud.tuikit.engine.room.TUIRoomDefine; import com.tencent.cloud.tuikit.roomkit.R; import com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter; +import com.tencent.cloud.tuikit.roomkit.model.RoomEventConstant; +import com.tencent.cloud.tuikit.roomkit.model.manager.RoomEngineManager; +import com.tencent.cloud.tuikit.roomkit.view.component.BaseDialogFragment; import java.util.Map; @@ -28,6 +33,7 @@ public class RoomMainActivity extends AppCompatActivity @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + Log.d(TAG, "onCreate"); setContentView(R.layout.tuiroomkit_activity_meeting); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); initStatusBar(); @@ -53,14 +59,46 @@ public void onBackPressed() { RoomEventCenter.getInstance().notifyUIEvent(RoomEventCenter.RoomKitUIEvent.SHOW_EXIT_ROOM_VIEW, null); } + @Override + protected void onStart() { + super.onStart(); + Log.d(TAG, "onStart"); + } + + @Override + protected void onResume() { + super.onResume(); + Log.d(TAG, "onResume"); + } + + @Override + protected void onPause() { + super.onPause(); + Log.d(TAG, "onPause"); + } + + @Override + protected void onStop() { + super.onStop(); + Log.d(TAG, "onStop"); + } + + @Override + public void finish() { + super.finish(); + Log.d(TAG, "finish"); + } + @Override protected void onDestroy() { super.onDestroy(); + Log.d(TAG, "onDestroy"); unSubscribeEvent(); } @Override public void onNotifyUIEvent(String key, Map params) { + Log.d(TAG, "onNotifyUIEvent key=" + key); switch (key) { case ENTER_FLOAT_WINDOW: finish(); @@ -74,13 +112,16 @@ public void onNotifyUIEvent(String key, Map params) { private void subscribeEvent() { RoomEventCenter.getInstance().subscribeEngine(LOCAL_USER_DESTROY_ROOM, this); RoomEventCenter.getInstance().subscribeEngine(LOCAL_USER_EXIT_ROOM, this); - RoomEventCenter.getInstance().subscribeUIEvent(ENTER_FLOAT_WINDOW, this); + RoomEventCenter.getInstance().subscribeEngine(REQUEST_RECEIVED, this); + RoomEventCenter.getInstance().subscribeUIEvent(ENTER_FLOAT_WINDOW, this); } private void unSubscribeEvent() { RoomEventCenter.getInstance().subscribeEngine(LOCAL_USER_DESTROY_ROOM, this); RoomEventCenter.getInstance().subscribeEngine(LOCAL_USER_EXIT_ROOM, this); + RoomEventCenter.getInstance().unsubscribeEngine(REQUEST_RECEIVED, this); + RoomEventCenter.getInstance().unsubscribeUIEvent(ENTER_FLOAT_WINDOW, this); } @@ -99,15 +140,106 @@ private void initStatusBar() { @Override public void onEngineEvent(RoomEventCenter.RoomEngineEvent event, Map params) { + Log.d(TAG, "onEngineEvent event=" + event); switch (event) { case LOCAL_USER_DESTROY_ROOM: case LOCAL_USER_EXIT_ROOM: finish(); break; + case REQUEST_RECEIVED: + showRequestDialog(params); + break; + default: Log.w(TAG, "onEngineEvent not handle event : " + event); break; } } + + + private void showRequestDialog(Map params) { + if (params == null) { + return; + } + TUIRoomDefine.Request request = (TUIRoomDefine.Request) params.get(RoomEventConstant.KEY_REQUEST); + switch (request.requestAction) { + case REQUEST_TO_OPEN_REMOTE_CAMERA: + showInvitedOpenCamera(request); + break; + + case REQUEST_TO_OPEN_REMOTE_MICROPHONE: + showInvitedOpenMic(request); + break; + + case REQUEST_REMOTE_USER_ON_SEAT: + showInvitedTakeSeatDialog(request); + break; + + default: + Log.e(TAG, "showRequestDialog un handle action : " + request.requestAction); + break; + } + } + + private void showInvitedOpenCamera(TUIRoomDefine.Request request) { + BaseDialogFragment.build() + .setTitle(getString(R.string.tuiroomkit_request_open_camera)) + .setNegativeName(getString(R.string.tuiroomkit_refuse)) + .setPositiveName(getString(R.string.tuiroomkit_agree)) + .setNegativeListener(new BaseDialogFragment.ClickListener() { + @Override + public void onClick() { + RoomEngineManager.sharedInstance().responseRemoteRequest(request.requestAction, request.requestId, false, null); + } + }) + .setPositiveListener(new BaseDialogFragment.ClickListener() { + @Override + public void onClick() { + RoomEngineManager.sharedInstance().responseRemoteRequest(request.requestAction, request.requestId, true, null); + } + }) + .showDialog(getSupportFragmentManager(), "REQUEST_TO_OPEN_REMOTE_CAMERA"); + } + + private void showInvitedOpenMic(TUIRoomDefine.Request request) { + BaseDialogFragment.build() + .setTitle(getString(R.string.tuiroomkit_request_open_microphone)) + .setNegativeName(getString(R.string.tuiroomkit_refuse)) + .setPositiveName(getString(R.string.tuiroomkit_agree)) + .setNegativeListener(new BaseDialogFragment.ClickListener() { + @Override + public void onClick() { + RoomEngineManager.sharedInstance().responseRemoteRequest(request.requestAction, request.requestId, false, null); + } + }) + .setPositiveListener(new BaseDialogFragment.ClickListener() { + @Override + public void onClick() { + RoomEngineManager.sharedInstance().responseRemoteRequest(request.requestAction, request.requestId, true, null); + } + }) + .showDialog(getSupportFragmentManager(), "REQUEST_TO_OPEN_REMOTE_MICROPHONE"); + } + + private void showInvitedTakeSeatDialog(TUIRoomDefine.Request request) { + BaseDialogFragment.build() + .setTitle(getString(R.string.tuiroomkit_receive_invitation_title)) + .setContent(getString(R.string.tuiroomkit_receive_invitation_content)) + .setNegativeName(getString(R.string.tuiroomkit_refuse)) + .setPositiveName(getString(R.string.tuiroomkit_agree_on_stage)) + .setNegativeListener(new BaseDialogFragment.ClickListener() { + @Override + public void onClick() { + RoomEngineManager.sharedInstance().responseRemoteRequest(request.requestAction, request.requestId, false, null); + } + }) + .setPositiveListener(new BaseDialogFragment.ClickListener() { + @Override + public void onClick() { + RoomEngineManager.sharedInstance().responseRemoteRequest(request.requestAction, request.requestId, true, null); + } + }) + .showDialog(getSupportFragmentManager(), "REQUEST_REMOTE_USER_ON_SEAT"); + } } diff --git a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/RoomMainView.java b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/RoomMainView.java index d4112cc6f..297ba6123 100644 --- a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/RoomMainView.java +++ b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/RoomMainView.java @@ -23,8 +23,10 @@ import com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter; import com.tencent.cloud.tuikit.roomkit.model.manager.RoomEngineManager; import com.tencent.cloud.tuikit.roomkit.videoseat.ui.TUIVideoSeatView; +import com.tencent.cloud.tuikit.roomkit.view.component.BaseDialogFragment; import com.tencent.cloud.tuikit.roomkit.view.page.widget.BottomNavigationBar.BottomLayout; import com.tencent.cloud.tuikit.roomkit.view.page.widget.LocalAudioIndicator.LocalAudioToggleView; +import com.tencent.cloud.tuikit.roomkit.view.page.widget.MediaSettings.MediaSettingPanel; import com.tencent.cloud.tuikit.roomkit.view.page.widget.RaiseHandControlPanel.RaiseHandApplicationListPanel; import com.tencent.cloud.tuikit.roomkit.view.page.widget.TopNavigationBar.TopView; import com.tencent.cloud.tuikit.roomkit.view.page.widget.TransferOwnerControlPanel.TransferMasterPanel; @@ -143,6 +145,11 @@ protected void onConfigurationChanged(Configuration newConfig) { mViewModel.setCameraResolutionMode(newConfig); } + public void showMediaSettingsPanel() { + MediaSettingPanel mediaSettingPanel = new MediaSettingPanel(mContext); + mediaSettingPanel.show(); + } + public void showRoomInfo() { RoomInfoDialog roomInfoView = new RoomInfoDialog(mContext); roomInfoView.show(); @@ -153,7 +160,7 @@ public void showUserList() { userListView.show(); } - public void showMemberInviteList() { + public void showMemberInvitePanel() { InviteUserDialog memberInviteView = new InviteUserDialog(mContext); memberInviteView.show(); } @@ -182,55 +189,6 @@ public void recountBarShowTime() { showRoomBars(); } - public void showInvitationDialog(final String inviteId, final TUIRoomDefine.RequestAction requestAction) { - String message = ""; - String positiveText = ""; - String negativeText = ""; - switch (requestAction) { - case REQUEST_TO_OPEN_REMOTE_CAMERA: - message = mContext.getString(R.string.tuiroomkit_request_open_camera); - positiveText = mContext.getString(R.string.tuiroomkit_agree); - negativeText = mContext.getString(R.string.tuiroomkit_refuse); - break; - case REQUEST_TO_OPEN_REMOTE_MICROPHONE: - message = mContext.getString(R.string.tuiroomkit_request_open_microphone); - positiveText = mContext.getString(R.string.tuiroomkit_agree); - negativeText = mContext.getString(R.string.tuiroomkit_refuse); - break; - case REQUEST_REMOTE_USER_ON_SEAT: - message = mContext.getString(R.string.tuiroomkit_receive_invitation); - positiveText = mContext.getString(R.string.tuiroomkit_agree_on_stage); - negativeText = mContext.getString(R.string.tuiroomkit_refuse); - break; - default: - break; - } - final ConfirmDialog confirmDialog = new ConfirmDialog(mContext); - confirmDialog.setCancelable(true); - confirmDialog.setMessage(message); - if (confirmDialog.isShowing()) { - confirmDialog.dismiss(); - return; - } - confirmDialog.setPositiveText(positiveText); - confirmDialog.setNegativeText(negativeText); - confirmDialog.setPositiveClickListener(new ConfirmDialog.PositiveClickListener() { - @Override - public void onClick() { - mViewModel.responseRequest(requestAction, inviteId, true); - confirmDialog.dismiss(); - } - }); - confirmDialog.setNegativeClickListener(new ConfirmDialog.NegativeClickListener() { - @Override - public void onClick() { - mViewModel.responseRequest(requestAction, inviteId, false); - confirmDialog.dismiss(); - } - }); - confirmDialog.show(); - } - public void showExitRoomConfirmDialog(String message) { final ConfirmDialog confirmDialog = new ConfirmDialog(mContext); confirmDialog.setCancelable(true); diff --git a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/widget/Dialog/ExitRoomDialog.java b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/widget/Dialog/ExitRoomDialog.java index 80e9b4110..4ba71848e 100644 --- a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/widget/Dialog/ExitRoomDialog.java +++ b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/widget/Dialog/ExitRoomDialog.java @@ -1,6 +1,7 @@ package com.tencent.cloud.tuikit.roomkit.view.page.widget.Dialog; -import static com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter.RoomKitUIEvent.OWNER_EXIT_ROOM_ACTION; +import static com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter.RoomKitUIEvent.DISMISS_EXIT_ROOM_VIEW; +import static com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter.RoomKitUIEvent.SHOW_OWNER_EXIT_ROOM_PANEL; import android.content.Context; import android.os.Bundle; @@ -40,6 +41,12 @@ protected void onCreate(Bundle savedInstanceState) { initView(); } + @Override + public void dismiss() { + super.dismiss(); + RoomEventCenter.getInstance().notifyUIEvent(DISMISS_EXIT_ROOM_VIEW, null); + } + private void initWindow() { Window window = getWindow(); if (window == null) { @@ -87,7 +94,7 @@ protected void initView() { @Override public void onClick(View v) { if (isOwner) { - RoomEventCenter.getInstance().notifyUIEvent(OWNER_EXIT_ROOM_ACTION, null); + RoomEventCenter.getInstance().notifyUIEvent(SHOW_OWNER_EXIT_ROOM_PANEL, null); } else { RoomEngineManager.sharedInstance().exitRoom(null); } diff --git a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/widget/Dialog/InviteUserDialog.java b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/widget/Dialog/InviteUserDialog.java index e750a64de..92711ea79 100644 --- a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/widget/Dialog/InviteUserDialog.java +++ b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/widget/Dialog/InviteUserDialog.java @@ -1,6 +1,8 @@ package com.tencent.cloud.tuikit.roomkit.view.page.widget.Dialog; import static com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter.RoomKitUIEvent.CONFIGURATION_CHANGE; +import static com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter.RoomKitUIEvent.DISMISS_INVITE_PANEL; +import static com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter.RoomKitUIEvent.DISMISS_INVITE_PANEL_SECOND; import android.content.ClipData; import android.content.ClipboardManager; @@ -42,9 +44,11 @@ public InviteUserDialog(@NonNull Context context) { } @Override - public void cancel() { - super.cancel(); + public void dismiss() { + super.dismiss(); RoomEventCenter.getInstance().unsubscribeUIEvent(CONFIGURATION_CHANGE, this); + RoomEventCenter.getInstance().notifyUIEvent(DISMISS_INVITE_PANEL, null); + RoomEventCenter.getInstance().notifyUIEvent(DISMISS_INVITE_PANEL_SECOND, null); } @Override diff --git a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/widget/Dialog/RoomInfoDialog.java b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/widget/Dialog/RoomInfoDialog.java index 3817c5fc8..f2d5c9321 100644 --- a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/widget/Dialog/RoomInfoDialog.java +++ b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/widget/Dialog/RoomInfoDialog.java @@ -1,5 +1,7 @@ package com.tencent.cloud.tuikit.roomkit.view.page.widget.Dialog; +import static com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter.RoomKitUIEvent.DISMISS_MEETING_INFO; + import android.content.Context; import android.text.TextUtils; import android.view.View; @@ -12,6 +14,7 @@ import com.tencent.cloud.tuikit.engine.room.TUIRoomDefine; import com.tencent.cloud.tuikit.roomkit.R; +import com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter; import com.tencent.cloud.tuikit.roomkit.model.manager.RoomEngineManager; import com.tencent.cloud.tuikit.roomkit.view.component.BaseBottomDialog; import com.tencent.cloud.tuikit.roomkit.viewmodel.RoomInfoViewModel; @@ -34,8 +37,9 @@ public RoomInfoDialog(@NonNull Context context) { } @Override - public void cancel() { - super.cancel(); + public void dismiss() { + super.dismiss(); + RoomEventCenter.getInstance().notifyUIEvent(DISMISS_MEETING_INFO, null); mViewModel.destroy(); } diff --git a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/widget/MediaSettings/MediaSettingPanel.java b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/widget/MediaSettings/MediaSettingPanel.java index 0e3d1b1b4..205f88c04 100644 --- a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/widget/MediaSettings/MediaSettingPanel.java +++ b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/widget/MediaSettings/MediaSettingPanel.java @@ -1,5 +1,7 @@ package com.tencent.cloud.tuikit.roomkit.view.page.widget.MediaSettings; +import static com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter.RoomKitUIEvent.DISMISS_MEDIA_SETTING_PANEL; + import android.content.Context; import android.view.View; import android.widget.CompoundButton; @@ -8,9 +10,11 @@ import android.widget.TextView; import androidx.annotation.NonNull; +import androidx.appcompat.widget.SwitchCompat; import androidx.constraintlayout.widget.ConstraintLayout; import com.tencent.cloud.tuikit.roomkit.R; +import com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter; import com.tencent.cloud.tuikit.roomkit.model.manager.RoomEngineManager; import com.tencent.cloud.tuikit.roomkit.view.component.BaseBottomDialog; import com.tencent.cloud.tuikit.roomkit.viewmodel.SettingViewModel; @@ -26,9 +30,9 @@ public class MediaSettingPanel extends BaseBottomDialog { private SeekBar mPbAudioCaptureVolume; private TextView mTvAudioCaptureVolume; - private SeekBar mPbAudioPlayVolume; - private TextView mTvAudioPlayVolume; - private Switch mSwitchAudioVolumeEvaluation; + private SeekBar mPbAudioPlayVolume; + private TextView mTvAudioPlayVolume; + private SwitchCompat mSwitchAudioVolumeEvaluation; private Context mContext; @@ -41,8 +45,9 @@ public MediaSettingPanel(@NonNull Context context) { } @Override - public void cancel() { - super.cancel(); + public void dismiss() { + super.dismiss(); + RoomEventCenter.getInstance().notifyUIEvent(DISMISS_MEDIA_SETTING_PANEL, null); mViewModel.destroy(); } diff --git a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/widget/MediaSettings/VideoFrameRateChoicePanel.java b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/widget/MediaSettings/VideoFrameRateChoicePanel.java index 57352f73d..efef80596 100644 --- a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/widget/MediaSettings/VideoFrameRateChoicePanel.java +++ b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/widget/MediaSettings/VideoFrameRateChoicePanel.java @@ -1,5 +1,7 @@ package com.tencent.cloud.tuikit.roomkit.view.page.widget.MediaSettings; +import static com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter.RoomKitUIEvent.DISMISS_USER_LIST; + import android.content.Context; import android.content.res.Configuration; import android.view.View; @@ -28,8 +30,8 @@ public VideoFrameRateChoicePanel(@NonNull Context context) { } @Override - public void cancel() { - super.cancel(); + public void dismiss() { + super.dismiss(); RoomEventCenter.getInstance().unsubscribeUIEvent(RoomEventCenter.RoomKitUIEvent.CONFIGURATION_CHANGE, this); } diff --git a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/widget/MediaSettings/VideoResolutionChoicePanel.java b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/widget/MediaSettings/VideoResolutionChoicePanel.java index 2b173942d..89cf3702e 100644 --- a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/widget/MediaSettings/VideoResolutionChoicePanel.java +++ b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/widget/MediaSettings/VideoResolutionChoicePanel.java @@ -1,5 +1,7 @@ package com.tencent.cloud.tuikit.roomkit.view.page.widget.MediaSettings; +import static com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter.RoomKitUIEvent.DISMISS_MEDIA_SETTING_PANEL; + import android.content.Context; import android.content.res.Configuration; import android.view.View; @@ -34,8 +36,8 @@ public VideoResolutionChoicePanel(@NonNull Context context) { } @Override - public void cancel() { - super.cancel(); + public void dismiss() { + super.dismiss(); RoomEventCenter.getInstance().unsubscribeUIEvent(RoomEventCenter.RoomKitUIEvent.CONFIGURATION_CHANGE, this); } diff --git a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/widget/RaiseHandControlPanel/RaiseHandApplicationListPanel.java b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/widget/RaiseHandControlPanel/RaiseHandApplicationListPanel.java index a92211c1d..2738eb1f4 100644 --- a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/widget/RaiseHandControlPanel/RaiseHandApplicationListPanel.java +++ b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/widget/RaiseHandControlPanel/RaiseHandApplicationListPanel.java @@ -1,5 +1,7 @@ package com.tencent.cloud.tuikit.roomkit.view.page.widget.RaiseHandControlPanel; +import static com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter.RoomKitUIEvent.DISMISS_APPLY_LIST; + import android.content.Context; import android.text.Editable; import android.text.TextUtils; @@ -14,6 +16,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.tencent.cloud.tuikit.roomkit.R; +import com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter; import com.tencent.cloud.tuikit.roomkit.view.component.BaseBottomDialog; import com.tencent.cloud.tuikit.roomkit.viewmodel.RaiseHandApplicationListViewModel; @@ -33,8 +36,9 @@ public RaiseHandApplicationListPanel(Context context) { } @Override - public void cancel() { - super.cancel(); + public void dismiss() { + super.dismiss(); + RoomEventCenter.getInstance().notifyUIEvent(DISMISS_APPLY_LIST, null); mViewModel.destroy(); } diff --git a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/widget/TransferOwnerControlPanel/TransferMasterPanel.java b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/widget/TransferOwnerControlPanel/TransferMasterPanel.java index f2a86de37..05e7005a0 100644 --- a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/widget/TransferOwnerControlPanel/TransferMasterPanel.java +++ b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/widget/TransferOwnerControlPanel/TransferMasterPanel.java @@ -1,5 +1,7 @@ package com.tencent.cloud.tuikit.roomkit.view.page.widget.TransferOwnerControlPanel; +import static com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter.RoomKitUIEvent.DISMISS_OWNER_EXIT_ROOM_PANEL; + import android.content.Context; import android.text.Editable; import android.text.TextUtils; @@ -16,6 +18,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.tencent.cloud.tuikit.roomkit.R; +import com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter; import com.tencent.cloud.tuikit.roomkit.model.manager.RoomEngineManager; import com.tencent.cloud.tuikit.roomkit.view.component.BaseBottomDialog; import com.tencent.cloud.tuikit.roomkit.viewmodel.TransferMasterViewModel; @@ -36,8 +39,9 @@ public TransferMasterPanel(Context context) { } @Override - public void cancel() { - super.cancel(); + public void dismiss() { + super.dismiss(); + RoomEventCenter.getInstance().notifyUIEvent(DISMISS_OWNER_EXIT_ROOM_PANEL, null); mViewModel.destroy(); } diff --git a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/widget/UserControlPanel/UserListPanel.java b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/widget/UserControlPanel/UserListPanel.java index b1bb5261f..475b9a1af 100644 --- a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/widget/UserControlPanel/UserListPanel.java +++ b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/widget/UserControlPanel/UserListPanel.java @@ -3,12 +3,18 @@ import static android.view.View.INVISIBLE; import static android.view.View.VISIBLE; +import static com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter.RoomKitUIEvent.DISMISS_USER_LIST; +import static com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter.RoomKitUIEvent.SHOW_INVITE_PANEL_SECOND; + +import android.app.Activity; import android.content.Context; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; +import android.util.Log; import android.view.KeyEvent; import android.view.View; +import android.view.WindowManager; import android.view.inputmethod.EditorInfo; import android.widget.EditText; import android.widget.LinearLayout; @@ -27,6 +33,7 @@ import com.tencent.qcloud.tuicore.util.ToastUtil; public class UserListPanel extends BaseBottomDialog implements View.OnClickListener { + private static final String TAG = "UserListPanel"; private Context mContext; private TextView mBtnConfirm; @@ -47,8 +54,9 @@ public UserListPanel(Context context) { } @Override - public void cancel() { - super.cancel(); + public void dismiss() { + super.dismiss(); + RoomEventCenter.getInstance().notifyUIEvent(DISMISS_USER_LIST, null); mViewModel.destroy(); } @@ -191,13 +199,21 @@ public void onClick(View v) { } else if (v.getId() == R.id.btn_mute_video_all) { mViewModel.muteAllUserVideo(); } else if (v.getId() == R.id.btn_mute_more_options || v.getId() == R.id.btn_invite) { - RoomEventCenter.getInstance().notifyUIEvent(RoomEventCenter.RoomKitUIEvent.SHOW_INVITE_VIEW, null); + RoomEventCenter.getInstance().notifyUIEvent(SHOW_INVITE_PANEL_SECOND, null); } } public void showUserManagementView(UserEntity user) { UserManagementView userManagementView = new UserManagementView(mContext, user); - userManagementView.show(); + try { + userManagementView.show(); + } catch (WindowManager.BadTokenException e) { + e.printStackTrace(); + if (mContext != null && mContext instanceof Activity) { + Activity activity = (Activity) mContext; + Log.e(TAG, "Activity is running : " + activity.isFinishing()); + } + } } } diff --git a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/widget/UserControlPanel/UserManagementView.java b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/widget/UserControlPanel/UserManagementView.java index d83d9f795..f46e5a46c 100644 --- a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/widget/UserControlPanel/UserManagementView.java +++ b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/view/page/widget/UserControlPanel/UserManagementView.java @@ -1,5 +1,7 @@ package com.tencent.cloud.tuikit.roomkit.view.page.widget.UserControlPanel; +import static com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter.RoomKitUIEvent.DISMISS_USER_MANAGEMENT; + import android.content.Context; import android.view.View; import android.widget.ImageView; @@ -11,6 +13,7 @@ import com.bumptech.glide.Glide; import com.bumptech.glide.RequestManager; import com.tencent.cloud.tuikit.roomkit.R; +import com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter; import com.tencent.cloud.tuikit.roomkit.model.entity.UserEntity; import com.tencent.cloud.tuikit.roomkit.view.component.BaseBottomDialog; import com.tencent.cloud.tuikit.roomkit.view.component.ConfirmDialog; @@ -47,6 +50,13 @@ public UserManagementView(@NonNull Context context, UserEntity user) { mViewModel = new UserManagementViewModel(mContext, user, this); } + @Override + public void dismiss() { + super.dismiss(); + RoomEventCenter.getInstance().notifyUIEvent(DISMISS_USER_MANAGEMENT, null); + mViewModel.destroy(); + } + @Override protected int getLayoutId() { return R.layout.tuiroomkit_dialog_user_manager; @@ -100,7 +110,6 @@ protected void initView() { public void updateLayout(boolean isOnSeat) { if (isOnSeat) { - mLayoutMuteUser.setVisibility(View.GONE); mLayoutKickoffStage.setVisibility(View.VISIBLE); mLayoutInviteToStage.setVisibility(View.GONE); mLayoutCamera.setVisibility(View.VISIBLE); @@ -131,24 +140,20 @@ public void onClick() { public void onClick(View v) { if (v.getId() == R.id.ll_mute_mic) { mViewModel.muteUserAudio(); - dismiss(); } else if (v.getId() == R.id.ll_close_camera) { mViewModel.muteUserVideo(); - dismiss(); } else if (v.getId() == R.id.ll_forward_master) { mViewModel.forwardMaster(); - dismiss(); } else if (v.getId() == R.id.ll_mute_user) { mViewModel.muteUser(); - dismiss(); } else if (v.getId() == R.id.ll_kick_out) { - dismiss(); showKickDialog(mUser.getUserId(), mUser.getUserName()); } else if (v.getId() == R.id.ll_kick_off_stage) { mViewModel.kickOffStage(); } else if (v.getId() == R.id.ll_invite_to_stage) { mViewModel.inviteToStage(); } + dismiss(); } @Override @@ -160,7 +165,6 @@ public void onAttachedToWindow() { @Override public void onDetachedFromWindow() { - mViewModel.destroy(); super.onDetachedFromWindow(); if (mGlideRequestManager != null) { mGlideRequestManager.clear(mImageHead); diff --git a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/viewmodel/BottomViewModel.java b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/viewmodel/BottomViewModel.java index aa334b5e6..e173889b1 100644 --- a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/viewmodel/BottomViewModel.java +++ b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/viewmodel/BottomViewModel.java @@ -5,6 +5,7 @@ import static com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter.RoomEngineEvent.LOCAL_CAMERA_STATE_CHANGED; import static com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter.RoomEngineEvent.LOCAL_SCREEN_STATE_CHANGED; import static com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter.RoomKitUIEvent.BAR_SHOW_TIME_RECOUNT; +import static com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter.RoomKitUIEvent.SHOW_MEDIA_SETTING_PANEL; import static com.tencent.cloud.tuikit.roomkit.model.RoomEventConstant.KEY_USER_POSITION; import android.content.Context; @@ -45,7 +46,6 @@ public class BottomViewModel implements RoomEventCenter.RoomEngineEventResponder private Context mContext; private BottomView mBottomView; - private MediaSettingPanel mSettingView; private RoomStore mRoomStore; private List mItemDataList; @@ -624,7 +624,7 @@ private void onRemoteUserTakeSeat(Map params) { if (position == USER_NOT_FOUND) { return; } - if (TextUtils.equals(mRoomStore.seatUserList.get(position).getUserId(), TUILogin.getUserId())) { + if (TextUtils.equals(mRoomStore.allUserList.get(position).getUserId(), TUILogin.getUserId())) { updateAudioItemEnableStatus(!mRoomStore.roomInfo.isMicrophoneDisableForAllUser); updateVideoItemEnableStatus(!mRoomStore.roomInfo.isCameraDisableForAllUser); mBottomView.replaceItem(BottomItemData.Type.RAISE_HAND, createGetOffStageItem()); @@ -639,7 +639,7 @@ private void onRemoteUserLeaveSeat(Map params) { if (position == USER_NOT_FOUND) { return; } - if (TextUtils.equals(mRoomStore.seatUserList.get(position).getUserId(), TUILogin.getUserId())) { + if (TextUtils.equals(mRoomStore.allUserList.get(position).getUserId(), TUILogin.getUserId())) { updateAudioItemEnableStatus(false); updateVideoItemEnableStatus(false); mBottomView.replaceItem(BottomItemData.Type.OFF_STAGE, createRaiseHandItem()); @@ -681,7 +681,7 @@ private BottomItemData createInviteItem() { @Override public void onItemClick() { RoomEventCenter.getInstance().notifyUIEvent( - RoomEventCenter.RoomKitUIEvent.SHOW_INVITE_VIEW, null); + RoomEventCenter.RoomKitUIEvent.SHOW_INVITE_PANEL, null); } }); return inviteItemData; @@ -749,10 +749,8 @@ private BottomItemData createSettingItem() { setttingItemData.setOnItemClickListener(new BottomItemData.OnItemClickListener() { @Override public void onItemClick() { - if (mSettingView == null) { - mSettingView = new MediaSettingPanel(mContext); - } - mSettingView.show(); + RoomEventCenter.getInstance().notifyUIEvent(SHOW_MEDIA_SETTING_PANEL, null); + RoomEventCenter.getInstance().notifyUIEvent(BAR_SHOW_TIME_RECOUNT, null); } }); return setttingItemData; diff --git a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/viewmodel/RoomMainViewModel.java b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/viewmodel/RoomMainViewModel.java index 47dca4bb3..dce5c4b78 100644 --- a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/viewmodel/RoomMainViewModel.java +++ b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/viewmodel/RoomMainViewModel.java @@ -4,6 +4,24 @@ import static com.tencent.cloud.tuikit.roomkit.model.RoomConstant.USER_NOT_FOUND; import static com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter.RoomEngineEvent.LOCAL_SCREEN_STATE_CHANGED; import static com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter.RoomKitUIEvent.BAR_SHOW_TIME_RECOUNT; +import static com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter.RoomKitUIEvent.DISMISS_APPLY_LIST; +import static com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter.RoomKitUIEvent.DISMISS_EXIT_ROOM_VIEW; +import static com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter.RoomKitUIEvent.DISMISS_INVITE_PANEL; +import static com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter.RoomKitUIEvent.DISMISS_INVITE_PANEL_SECOND; +import static com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter.RoomKitUIEvent.DISMISS_MEDIA_SETTING_PANEL; +import static com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter.RoomKitUIEvent.DISMISS_MEETING_INFO; +import static com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter.RoomKitUIEvent.DISMISS_OWNER_EXIT_ROOM_PANEL; +import static com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter.RoomKitUIEvent.DISMISS_QRCODE_VIEW; +import static com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter.RoomKitUIEvent.DISMISS_USER_LIST; +import static com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter.RoomKitUIEvent.SHOW_APPLY_LIST; +import static com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter.RoomKitUIEvent.SHOW_EXIT_ROOM_VIEW; +import static com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter.RoomKitUIEvent.SHOW_INVITE_PANEL; +import static com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter.RoomKitUIEvent.SHOW_INVITE_PANEL_SECOND; +import static com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter.RoomKitUIEvent.SHOW_MEDIA_SETTING_PANEL; +import static com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter.RoomKitUIEvent.SHOW_MEETING_INFO; +import static com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter.RoomKitUIEvent.SHOW_OWNER_EXIT_ROOM_PANEL; +import static com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter.RoomKitUIEvent.SHOW_QRCODE_VIEW; +import static com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter.RoomKitUIEvent.SHOW_USER_LIST; import static com.tencent.cloud.tuikit.roomkit.model.RoomEventConstant.KEY_USER_POSITION; import android.content.Context; @@ -38,6 +56,9 @@ public class RoomMainViewModel implements RoomEventCenter.RoomKitUIEventResponde private RoomStore mRoomStore; private RoomMainView mRoomMainView; + private boolean mIsFirstPanelShowed = false; + private boolean mIsSecondPanelShowed = false; + public RoomMainViewModel(Context context, RoomMainView meetingView) { mContext = context; mRoomMainView = meetingView; @@ -51,13 +72,24 @@ public void stopScreenCapture() { private void subscribeEvent() { RoomEventCenter eventCenter = RoomEventCenter.getInstance(); - eventCenter.subscribeUIEvent(RoomEventCenter.RoomKitUIEvent.SHOW_MEETING_INFO, this); - eventCenter.subscribeUIEvent(RoomEventCenter.RoomKitUIEvent.SHOW_USER_LIST, this); - eventCenter.subscribeUIEvent(RoomEventCenter.RoomKitUIEvent.SHOW_QRCODE_VIEW, this); - eventCenter.subscribeUIEvent(RoomEventCenter.RoomKitUIEvent.SHOW_APPLY_LIST, this); - eventCenter.subscribeUIEvent(RoomEventCenter.RoomKitUIEvent.SHOW_EXIT_ROOM_VIEW, this); - eventCenter.subscribeUIEvent(RoomEventCenter.RoomKitUIEvent.OWNER_EXIT_ROOM_ACTION, this); - eventCenter.subscribeUIEvent(RoomEventCenter.RoomKitUIEvent.SHOW_INVITE_VIEW, this); + eventCenter.subscribeUIEvent(SHOW_MEETING_INFO, this); + eventCenter.subscribeUIEvent(DISMISS_MEETING_INFO, this); + eventCenter.subscribeUIEvent(SHOW_USER_LIST, this); + eventCenter.subscribeUIEvent(DISMISS_USER_LIST, this); + eventCenter.subscribeUIEvent(SHOW_QRCODE_VIEW, this); + eventCenter.subscribeUIEvent(DISMISS_QRCODE_VIEW, this); + eventCenter.subscribeUIEvent(SHOW_MEDIA_SETTING_PANEL, this); + eventCenter.subscribeUIEvent(DISMISS_MEDIA_SETTING_PANEL, this); + eventCenter.subscribeUIEvent(SHOW_APPLY_LIST, this); + eventCenter.subscribeUIEvent(DISMISS_APPLY_LIST, this); + eventCenter.subscribeUIEvent(SHOW_EXIT_ROOM_VIEW, this); + eventCenter.subscribeUIEvent(DISMISS_EXIT_ROOM_VIEW, this); + eventCenter.subscribeUIEvent(SHOW_OWNER_EXIT_ROOM_PANEL, this); + eventCenter.subscribeUIEvent(DISMISS_OWNER_EXIT_ROOM_PANEL, this); + eventCenter.subscribeUIEvent(SHOW_INVITE_PANEL, this); + eventCenter.subscribeUIEvent(DISMISS_INVITE_PANEL, this); + eventCenter.subscribeUIEvent(SHOW_INVITE_PANEL_SECOND, this); + eventCenter.subscribeUIEvent(DISMISS_INVITE_PANEL_SECOND, this); eventCenter.subscribeUIEvent(BAR_SHOW_TIME_RECOUNT, this); eventCenter.subscribeEngine(RoomEventCenter.RoomEngineEvent.ROOM_DISMISSED, this); @@ -65,7 +97,6 @@ private void subscribeEvent() { eventCenter.subscribeEngine(RoomEventCenter.RoomEngineEvent.KICKED_OFF_LINE, this); eventCenter.subscribeEngine(RoomEventCenter.RoomEngineEvent.USER_CAMERA_STATE_CHANGED, this); eventCenter.subscribeEngine(RoomEventCenter.RoomEngineEvent.USER_MIC_STATE_CHANGED, this); - eventCenter.subscribeEngine(RoomEventCenter.RoomEngineEvent.REQUEST_RECEIVED, this); eventCenter.subscribeEngine(RoomEventCenter.RoomEngineEvent.ALL_USER_CAMERA_DISABLE_CHANGED, this); eventCenter.subscribeEngine(RoomEventCenter.RoomEngineEvent.ALL_USER_MICROPHONE_DISABLE_CHANGED, this); eventCenter.subscribeEngine(RoomEventCenter.RoomEngineEvent.SEND_MESSAGE_FOR_ALL_USER_DISABLE_CHANGED, this); @@ -80,13 +111,24 @@ public void destroy() { private void unSubscribeEvent() { RoomEventCenter eventCenter = RoomEventCenter.getInstance(); - eventCenter.unsubscribeUIEvent(RoomEventCenter.RoomKitUIEvent.SHOW_MEETING_INFO, this); - eventCenter.unsubscribeUIEvent(RoomEventCenter.RoomKitUIEvent.SHOW_USER_LIST, this); - eventCenter.unsubscribeUIEvent(RoomEventCenter.RoomKitUIEvent.SHOW_QRCODE_VIEW, this); - eventCenter.unsubscribeUIEvent(RoomEventCenter.RoomKitUIEvent.SHOW_APPLY_LIST, this); - eventCenter.unsubscribeUIEvent(RoomEventCenter.RoomKitUIEvent.SHOW_EXIT_ROOM_VIEW, this); - eventCenter.unsubscribeUIEvent(RoomEventCenter.RoomKitUIEvent.OWNER_EXIT_ROOM_ACTION, this); - eventCenter.unsubscribeUIEvent(RoomEventCenter.RoomKitUIEvent.SHOW_INVITE_VIEW, this); + eventCenter.unsubscribeUIEvent(SHOW_MEETING_INFO, this); + eventCenter.unsubscribeUIEvent(DISMISS_MEETING_INFO, this); + eventCenter.unsubscribeUIEvent(SHOW_USER_LIST, this); + eventCenter.unsubscribeUIEvent(DISMISS_USER_LIST, this); + eventCenter.unsubscribeUIEvent(SHOW_QRCODE_VIEW, this); + eventCenter.unsubscribeUIEvent(DISMISS_QRCODE_VIEW, this); + eventCenter.unsubscribeUIEvent(SHOW_MEDIA_SETTING_PANEL, this); + eventCenter.unsubscribeUIEvent(DISMISS_MEDIA_SETTING_PANEL, this); + eventCenter.unsubscribeUIEvent(SHOW_APPLY_LIST, this); + eventCenter.unsubscribeUIEvent(DISMISS_APPLY_LIST, this); + eventCenter.unsubscribeUIEvent(SHOW_EXIT_ROOM_VIEW, this); + eventCenter.unsubscribeUIEvent(DISMISS_EXIT_ROOM_VIEW, this); + eventCenter.unsubscribeUIEvent(SHOW_OWNER_EXIT_ROOM_PANEL, this); + eventCenter.unsubscribeUIEvent(DISMISS_OWNER_EXIT_ROOM_PANEL, this); + eventCenter.unsubscribeUIEvent(SHOW_INVITE_PANEL, this); + eventCenter.unsubscribeUIEvent(DISMISS_INVITE_PANEL, this); + eventCenter.unsubscribeUIEvent(SHOW_INVITE_PANEL_SECOND, this); + eventCenter.unsubscribeUIEvent(DISMISS_INVITE_PANEL_SECOND, this); eventCenter.unsubscribeUIEvent(BAR_SHOW_TIME_RECOUNT, this); eventCenter.unsubscribeEngine(RoomEventCenter.RoomEngineEvent.ROOM_DISMISSED, this); @@ -94,7 +136,6 @@ private void unSubscribeEvent() { eventCenter.unsubscribeEngine(RoomEventCenter.RoomEngineEvent.KICKED_OFF_LINE, this); eventCenter.unsubscribeEngine(RoomEventCenter.RoomEngineEvent.USER_CAMERA_STATE_CHANGED, this); eventCenter.unsubscribeEngine(RoomEventCenter.RoomEngineEvent.USER_MIC_STATE_CHANGED, this); - eventCenter.unsubscribeEngine(RoomEventCenter.RoomEngineEvent.REQUEST_RECEIVED, this); eventCenter.unsubscribeEngine(RoomEventCenter.RoomEngineEvent.ALL_USER_CAMERA_DISABLE_CHANGED, this); eventCenter.unsubscribeEngine(RoomEventCenter.RoomEngineEvent.ALL_USER_MICROPHONE_DISABLE_CHANGED, this); eventCenter.unsubscribeEngine(RoomEventCenter.RoomEngineEvent.SEND_MESSAGE_FOR_ALL_USER_DISABLE_CHANGED, this); @@ -135,39 +176,132 @@ private void onMicrophoneMuted(boolean muted) { @Override public void onNotifyUIEvent(String key, Map params) { - switch (key) { - case RoomEventCenter.RoomKitUIEvent.SHOW_MEETING_INFO: - mRoomMainView.showRoomInfo(); - break; - case RoomEventCenter.RoomKitUIEvent.SHOW_USER_LIST: - mRoomMainView.showUserList(); - break; - case RoomEventCenter.RoomKitUIEvent.SHOW_EXIT_ROOM_VIEW: - mRoomMainView.showExitRoomDialog(); - break; - case RoomEventCenter.RoomKitUIEvent.OWNER_EXIT_ROOM_ACTION: - mRoomMainView.showTransferMasterView(); - break; - case RoomEventCenter.RoomKitUIEvent.SHOW_QRCODE_VIEW: - if (params == null) { - break; - } - String url = (String) params.get(RoomEventConstant.KEY_ROOM_URL); - if (!TextUtils.isEmpty(url)) { - mRoomMainView.showQRCodeView(url); - } - break; - case RoomEventCenter.RoomKitUIEvent.SHOW_APPLY_LIST: - mRoomMainView.showApplyList(); - break; - case RoomEventCenter.RoomKitUIEvent.SHOW_INVITE_VIEW: - mRoomMainView.showMemberInviteList(); - break; - case BAR_SHOW_TIME_RECOUNT: - mRoomMainView.recountBarShowTime(); - break; - default: - break; + handleEventOfShowTimeRecount(key); + handleEventOfMediaSettings(key); + handleEventOfMeetingInfo(key); + handleEventOfUserList(key); + handleEventOfOwnerExitRoom(key); + handleEventOfUserExitRoom(key); + handleEventOfApplyList(key); + handleEventOfInvite(key); + handleEventOfInviteSecond(key); + } + + private void handleEventOfShowTimeRecount(String key) { + if (TextUtils.equals(key, BAR_SHOW_TIME_RECOUNT)) { + mRoomMainView.recountBarShowTime(); + } + } + + private void handleEventOfMediaSettings(String key) { + if (TextUtils.equals(key, DISMISS_MEDIA_SETTING_PANEL)) { + mIsFirstPanelShowed = false; + return; + } + if (mIsFirstPanelShowed) { + return; + } + if (TextUtils.equals(key, SHOW_MEDIA_SETTING_PANEL)) { + mRoomMainView.showMediaSettingsPanel(); + mIsFirstPanelShowed = true; + } + } + + private void handleEventOfMeetingInfo(String key) { + if (TextUtils.equals(key, DISMISS_MEETING_INFO)) { + mIsFirstPanelShowed = false; + return; + } + if (mIsFirstPanelShowed) { + return; + } + if (TextUtils.equals(key, SHOW_MEETING_INFO)) { + mRoomMainView.showRoomInfo(); + mIsFirstPanelShowed = true; + } + } + + private void handleEventOfUserList(String key) { + if (TextUtils.equals(key, DISMISS_USER_LIST)) { + mIsFirstPanelShowed = false; + return; + } + if (mIsFirstPanelShowed) { + return; + } + if (TextUtils.equals(key, SHOW_USER_LIST)) { + mRoomMainView.showUserList(); + mIsFirstPanelShowed = true; + } + } + + private void handleEventOfOwnerExitRoom(String key) { + if (TextUtils.equals(key, DISMISS_OWNER_EXIT_ROOM_PANEL)) { + mIsSecondPanelShowed = false; + return; + } + if (mIsSecondPanelShowed) { + return; + } + if (TextUtils.equals(key, SHOW_OWNER_EXIT_ROOM_PANEL)) { + mRoomMainView.showTransferMasterView(); + mIsSecondPanelShowed = true; + } + } + + private void handleEventOfUserExitRoom(String key) { + if (TextUtils.equals(key, DISMISS_EXIT_ROOM_VIEW)) { + mIsFirstPanelShowed = false; + return; + } + if (mIsFirstPanelShowed) { + return; + } + if (TextUtils.equals(key, SHOW_EXIT_ROOM_VIEW)) { + mRoomMainView.showExitRoomDialog(); + mIsFirstPanelShowed = true; + } + } + + private void handleEventOfApplyList(String key) { + if (TextUtils.equals(key, DISMISS_APPLY_LIST)) { + mIsFirstPanelShowed = false; + return; + } + if (mIsFirstPanelShowed) { + return; + } + if (TextUtils.equals(key, SHOW_APPLY_LIST)) { + mRoomMainView.showApplyList(); + mIsFirstPanelShowed = true; + } + } + + private void handleEventOfInvite(String key) { + if (TextUtils.equals(key, DISMISS_INVITE_PANEL)) { + mIsFirstPanelShowed = false; + return; + } + if (mIsFirstPanelShowed) { + return; + } + if (TextUtils.equals(key, SHOW_INVITE_PANEL)) { + mRoomMainView.showMemberInvitePanel(); + mIsFirstPanelShowed = true; + } + } + + private void handleEventOfInviteSecond(String key) { + if (TextUtils.equals(key, DISMISS_INVITE_PANEL_SECOND)) { + mIsSecondPanelShowed = false; + return; + } + if (mIsSecondPanelShowed) { + return; + } + if (TextUtils.equals(key, SHOW_INVITE_PANEL_SECOND)) { + mRoomMainView.showMemberInvitePanel(); + mIsSecondPanelShowed = true; } } @@ -197,9 +331,6 @@ public void onEngineEvent(RoomEventCenter.RoomEngineEvent event, Map params) { } } - private void onRequestReceived(Map params) { - if (params == null) { - return; - } - TUIRoomDefine.Request request = (TUIRoomDefine.Request) params.get(RoomEventConstant.KEY_REQUEST); - if (request == null) { - return; - } - switch (request.requestAction) { - case REQUEST_TO_OPEN_REMOTE_MICROPHONE: - case REQUEST_REMOTE_USER_ON_SEAT: - case REQUEST_TO_OPEN_REMOTE_CAMERA: - mRoomMainView.showInvitationDialog(request.requestId, request.requestAction); - break; - default: - Log.i(TAG, "onRequestReceived ignore, request type :" + request.requestAction); - break; - } - } - - private void allUserCameraDisableChanged(Map params) { if (params == null) { return; @@ -355,7 +465,6 @@ private void onUserRoleChange(Map params) { } if (TUIRoomDefine.Role.ROOM_OWNER.equals(role)) { - RoomEngineManager.sharedInstance().takeSeat(SEAT_INDEX, REQ_TIME_OUT, null); mRoomMainView.showSingleConfirmDialog(mContext.getString(R.string.tuiroomkit_have_become_master)); } } diff --git a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/viewmodel/TopViewModel.java b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/viewmodel/TopViewModel.java index 17efe4a53..f829f7a6e 100644 --- a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/viewmodel/TopViewModel.java +++ b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/viewmodel/TopViewModel.java @@ -72,7 +72,7 @@ public void startTimeCount() { mTimeRunnable = new Runnable() { @Override public void run() { - int time = (int) (System.currentTimeMillis() - mRoomStore.roomInfo.createTime) / 1000; + int time = (int) (System.currentTimeMillis() - mRoomStore.userModel.enterRoomTime) / 1000; mMainHandler.post(new Runnable() { @Override public void run() { diff --git a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/viewmodel/UserListViewModel.java b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/viewmodel/UserListViewModel.java index 75eb37b87..a8dc71076 100644 --- a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/viewmodel/UserListViewModel.java +++ b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/viewmodel/UserListViewModel.java @@ -1,6 +1,7 @@ package com.tencent.cloud.tuikit.roomkit.viewmodel; import static com.tencent.cloud.tuikit.roomkit.model.RoomConstant.USER_NOT_FOUND; +import static com.tencent.cloud.tuikit.roomkit.model.RoomEventCenter.RoomKitUIEvent.DISMISS_USER_MANAGEMENT; import static com.tencent.cloud.tuikit.roomkit.model.RoomEventConstant.KEY_USER_POSITION; import android.content.Context; @@ -36,6 +37,7 @@ public class UserListViewModel private final TUIRoomEngine mRoomEngine; private List mUserModelList; + private boolean mIsUserManagementPanelShowed = false; public UserListViewModel(Context context, UserListPanel userListView) { mContext = context; @@ -65,7 +67,9 @@ private void subscribeEvent() { eventCenter.subscribeEngine(RoomEventCenter.RoomEngineEvent.REMOTE_USER_LEAVE_ROOM, this); eventCenter.subscribeEngine(RoomEventCenter.RoomEngineEvent.REMOTE_USER_TAKE_SEAT, this); eventCenter.subscribeEngine(RoomEventCenter.RoomEngineEvent.REMOTE_USER_LEAVE_SEAT, this); + eventCenter.subscribeUIEvent(RoomEventCenter.RoomKitUIEvent.SHOW_USER_MANAGEMENT, this); + eventCenter.subscribeUIEvent(DISMISS_USER_MANAGEMENT, this); eventCenter.subscribeUIEvent(RoomEventCenter.RoomKitUIEvent.INVITE_TAKE_SEAT, this); eventCenter.subscribeUIEvent(RoomEventCenter.RoomKitUIEvent.CONFIGURATION_CHANGE, this); } @@ -85,7 +89,9 @@ private void unSubscribeEvent() { eventCenter.unsubscribeEngine(RoomEventCenter.RoomEngineEvent.REMOTE_USER_LEAVE_ROOM, this); eventCenter.unsubscribeEngine(RoomEventCenter.RoomEngineEvent.REMOTE_USER_TAKE_SEAT, this); eventCenter.unsubscribeEngine(RoomEventCenter.RoomEngineEvent.REMOTE_USER_LEAVE_SEAT, this); + eventCenter.unsubscribeUIEvent(RoomEventCenter.RoomKitUIEvent.SHOW_USER_MANAGEMENT, this); + eventCenter.unsubscribeUIEvent(DISMISS_USER_MANAGEMENT, this); eventCenter.unsubscribeUIEvent(RoomEventCenter.RoomKitUIEvent.INVITE_TAKE_SEAT, this); eventCenter.unsubscribeUIEvent(RoomEventCenter.RoomKitUIEvent.CONFIGURATION_CHANGE, this); } @@ -335,15 +341,21 @@ private void onRemoteUserLeaveRoom(Map params) { public void onNotifyUIEvent(String key, Map params) { switch (key) { case RoomEventCenter.RoomKitUIEvent.SHOW_USER_MANAGEMENT: - if (params == null) { + if (mIsUserManagementPanelShowed || params == null) { break; } UserEntity user = (UserEntity) params.get(RoomEventConstant.KEY_USER_MODEL); if (user == null) { break; } + mIsUserManagementPanelShowed = true; mUserListView.showUserManagementView(user); break; + + case DISMISS_USER_MANAGEMENT: + mIsUserManagementPanelShowed = false; + break; + case RoomEventCenter.RoomKitUIEvent.INVITE_TAKE_SEAT: if (params == null) { break; diff --git a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/viewmodel/UserManagementViewModel.java b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/viewmodel/UserManagementViewModel.java index ad8944ec4..34f1d518b 100644 --- a/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/viewmodel/UserManagementViewModel.java +++ b/Android/tuiroomkit/src/main/java/com/tencent/cloud/tuikit/roomkit/viewmodel/UserManagementViewModel.java @@ -333,7 +333,7 @@ private void onRemoteUserSeatStateChanged(Map params, boolean is if (position == USER_NOT_FOUND) { return; } - if (TextUtils.equals(mRoomStore.seatUserList.get(position).getUserId(), TUILogin.getUserId())) { + if (TextUtils.equals(mRoomStore.allUserList.get(position).getUserId(), mUser.getUserId())) { mUserManagementView.updateLayout(isOnSeat); } } diff --git a/Android/tuiroomkit/src/main/res/drawable/tuiroomkit_bg_base_dialog.xml b/Android/tuiroomkit/src/main/res/drawable/tuiroomkit_bg_base_dialog.xml new file mode 100644 index 000000000..fab8aa9fb --- /dev/null +++ b/Android/tuiroomkit/src/main/res/drawable/tuiroomkit_bg_base_dialog.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/Android/tuiroomkit/src/main/res/drawable/tuiroomkit_bg_user_list_panel_invite.xml b/Android/tuiroomkit/src/main/res/drawable/tuiroomkit_bg_user_list_panel_invite.xml new file mode 100644 index 000000000..1c743c6ab --- /dev/null +++ b/Android/tuiroomkit/src/main/res/drawable/tuiroomkit_bg_user_list_panel_invite.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/Android/tuiroomkit/src/main/res/drawable/tuiroomkit_bg_user_list_panel_view.xml b/Android/tuiroomkit/src/main/res/drawable/tuiroomkit_bg_user_list_panel_view.xml new file mode 100644 index 000000000..4f4b9155b --- /dev/null +++ b/Android/tuiroomkit/src/main/res/drawable/tuiroomkit_bg_user_list_panel_view.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/Android/tuiroomkit/src/main/res/drawable/tuiroomkit_ic_switch_track.xml b/Android/tuiroomkit/src/main/res/drawable/tuiroomkit_ic_switch_track.xml deleted file mode 100644 index c10a332ee..000000000 --- a/Android/tuiroomkit/src/main/res/drawable/tuiroomkit_ic_switch_track.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/Android/tuiroomkit/src/main/res/drawable/tuiroomkit_switch_thumb.xml b/Android/tuiroomkit/src/main/res/drawable/tuiroomkit_switch_thumb.xml deleted file mode 100644 index 3e9cb6bc7..000000000 --- a/Android/tuiroomkit/src/main/res/drawable/tuiroomkit_switch_thumb.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - diff --git a/Android/tuiroomkit/src/main/res/drawable/tuiroomkit_switch_thumb_selector.xml b/Android/tuiroomkit/src/main/res/drawable/tuiroomkit_switch_thumb_selector.xml new file mode 100644 index 000000000..aaff3d126 --- /dev/null +++ b/Android/tuiroomkit/src/main/res/drawable/tuiroomkit_switch_thumb_selector.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/Android/tuiroomkit/src/main/res/drawable/tuiroomkit_switch_thumb_selector_normal.xml b/Android/tuiroomkit/src/main/res/drawable/tuiroomkit_switch_thumb_selector_normal.xml new file mode 100644 index 000000000..2be3faa84 --- /dev/null +++ b/Android/tuiroomkit/src/main/res/drawable/tuiroomkit_switch_thumb_selector_normal.xml @@ -0,0 +1,12 @@ + + + + + + + diff --git a/Android/tuiroomkit/src/main/res/drawable/tuiroomkit_switch_thumb_selector_press.xml b/Android/tuiroomkit/src/main/res/drawable/tuiroomkit_switch_thumb_selector_press.xml new file mode 100644 index 000000000..ca7670860 --- /dev/null +++ b/Android/tuiroomkit/src/main/res/drawable/tuiroomkit_switch_thumb_selector_press.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/Android/tuiroomkit/src/main/res/drawable/tuiroomkit_switch_track.xml b/Android/tuiroomkit/src/main/res/drawable/tuiroomkit_switch_track.xml deleted file mode 100644 index c10a332ee..000000000 --- a/Android/tuiroomkit/src/main/res/drawable/tuiroomkit_switch_track.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/Android/tuiroomkit/src/main/res/drawable/tuiroomkit_ic_switch_track_off.xml b/Android/tuiroomkit/src/main/res/drawable/tuiroomkit_switch_track_off.xml similarity index 74% rename from Android/tuiroomkit/src/main/res/drawable/tuiroomkit_ic_switch_track_off.xml rename to Android/tuiroomkit/src/main/res/drawable/tuiroomkit_switch_track_off.xml index cc10d3760..0e66f624c 100644 --- a/Android/tuiroomkit/src/main/res/drawable/tuiroomkit_ic_switch_track_off.xml +++ b/Android/tuiroomkit/src/main/res/drawable/tuiroomkit_switch_track_off.xml @@ -1,9 +1,9 @@ + - \ No newline at end of file diff --git a/Android/tuiroomkit/src/main/res/drawable/tuiroomkit_ic_switch_track_on.xml b/Android/tuiroomkit/src/main/res/drawable/tuiroomkit_switch_track_on.xml similarity index 74% rename from Android/tuiroomkit/src/main/res/drawable/tuiroomkit_ic_switch_track_on.xml rename to Android/tuiroomkit/src/main/res/drawable/tuiroomkit_switch_track_on.xml index 8742ff28e..0ae39dc8d 100644 --- a/Android/tuiroomkit/src/main/res/drawable/tuiroomkit_ic_switch_track_on.xml +++ b/Android/tuiroomkit/src/main/res/drawable/tuiroomkit_switch_track_on.xml @@ -1,9 +1,9 @@ + - \ No newline at end of file diff --git a/Android/tuiroomkit/src/main/res/drawable/tuiroomkit_switch_track_selector.xml b/Android/tuiroomkit/src/main/res/drawable/tuiroomkit_switch_track_selector.xml new file mode 100644 index 000000000..38c72c883 --- /dev/null +++ b/Android/tuiroomkit/src/main/res/drawable/tuiroomkit_switch_track_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/Android/tuiroomkit/src/main/res/layout-land/tuiroomkit_panel_setting.xml b/Android/tuiroomkit/src/main/res/layout-land/tuiroomkit_panel_setting.xml index e23089488..dc336fed3 100644 --- a/Android/tuiroomkit/src/main/res/layout-land/tuiroomkit_panel_setting.xml +++ b/Android/tuiroomkit/src/main/res/layout-land/tuiroomkit_panel_setting.xml @@ -98,7 +98,7 @@ android:layout_marginEnd="20dp" android:layout_marginTop="1px" android:layout_marginBottom="1px" - android:background="#B2BBD1"/> + android:background="@color/tuiroomkit_color_divide_line"/> + android:background="@color/tuiroomkit_color_divide_line"/> + android:background="@color/tuiroomkit_color_divide_line"/> - @@ -122,7 +123,7 @@ android:layout_width="108dp" android:layout_height="40dp" android:layout_marginBottom="10dp" - android:background="@drawable/tuiroomkit_bg_bottom_item_black" + android:background="@drawable/tuiroomkit_bg_user_list_panel_view" android:gravity="center" android:text="@string/tuiroomkit_mute_all_audio" android:textColor="@color/tuiroomkit_color_text_light_grey" @@ -136,7 +137,7 @@ android:id="@+id/btn_mute_video_all" android:layout_width="108dp" android:layout_height="40dp" - android:background="@drawable/tuiroomkit_bg_bottom_item_black" + android:background="@drawable/tuiroomkit_bg_user_list_panel_view" android:gravity="center" android:text="@string/tuiroomkit_mute_all_video" android:textColor="@color/tuiroomkit_color_text_light_grey" @@ -150,7 +151,7 @@ android:id="@+id/btn_mute_more_options" android:layout_width="108dp" android:layout_height="40dp" - android:background="@drawable/tuiroomkit_bg_bottom_item_black" + android:background="@drawable/tuiroomkit_bg_user_list_panel_view" android:gravity="center" android:text="@string/tuiroomkit_user_list_more_options" android:textColor="@color/tuiroomkit_color_text_light_grey" @@ -164,7 +165,7 @@ android:id="@+id/btn_confirm" android:layout_width="200dp" android:layout_height="50dp" - android:background="@drawable/tuiroomkit_bg_bottom_item_black" + android:background="@drawable/tuiroomkit_bg_user_list_panel_view" android:gravity="center" android:text="@string/tuiroomkit_confirm" android:textColor="@color/tuiroomkit_color_text_light_grey" diff --git a/Android/tuiroomkit/src/main/res/layout/tuiroomkit_dialog_base.xml b/Android/tuiroomkit/src/main/res/layout/tuiroomkit_dialog_base.xml new file mode 100644 index 000000000..212c5dd2d --- /dev/null +++ b/Android/tuiroomkit/src/main/res/layout/tuiroomkit_dialog_base.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + +