Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(meeting): update meetingkit 4.5.0 #236

Merged
merged 4 commits into from
May 10, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions SampleCode/Android/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,17 @@
# NEMeetingKit ChangeLog
## v4.5.0(May 7, 2024)
### New Feature
* 支持配置入会是否请求电话权限
* 支持配置入会是否拉取和展示小应用
* 支持配置入会是否展示通知中心菜单
* 预约会议支持设置是否允许访客入会
* 预约会议支持预选参会者列表并指定身份
* 支持通讯录邀请入会
### Compatibility
- 兼容 NERoomKit 1.28.0
- 兼容 NIMSDK_LITE 9.16.0
- 兼容 NERtcSDK 5.5.40

## v4.4.0(April 2, 2024)
### New Feature
- 入会时支持指定参会者头像:`NEMeetingParams.avatar`
Expand Down
4 changes: 2 additions & 2 deletions SampleCode/Android/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,15 @@
* Kotlin
```
dependencies {
val meetingkit_version = "4.4.0"
val meetingkit_version = "4.5.0"
implementation("com.netease.yunxin.kit.meeting:meeting:$meetingkit_version")
}
```

* Groovy
```
dependencies {
def meetingkit_version = "4.4.0"
def meetingkit_version = "4.5.0"
implementation "com.netease.yunxin.kit.meeting:meeting:$meetingkit_version"
}
```
13 changes: 6 additions & 7 deletions SampleCode/Android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ android {
applicationId "com.netease.yunxin.kit.meeting.sampleapp"
minSdkVersion 21
targetSdkVersion 34
versionCode 40400
versionName "4.4.0"
versionCode 40500
versionName "4.5.0"

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
Expand Down Expand Up @@ -42,8 +42,6 @@ repositories {
flatDir dirs: 'libs'
}
dependencies {
// meeting
implementation 'com.netease.yunxin.kit.meeting:meeting:4.4.0'

implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.3'
Expand All @@ -52,7 +50,6 @@ dependencies {
implementation fileTree(dir: "libs", include: ["*.jar","*.aar"])
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation 'com.squareup.okhttp3:okhttp:4.7.2'
implementation 'com.permissionx.guolindev:permissionx:1.2.2'
implementation 'androidx.preference:preference:1.1.1'
implementation "androidx.activity:activity:1.2.0-beta02"
Expand All @@ -68,6 +65,8 @@ dependencies {
implementation "androidx.navigation:navigation-ui-ktx:2.3.0"
implementation 'com.manu:MDatePicker:1.0.1'

compileOnly 'com.netease.yunxin:nertc-full:5.5.33'
compileOnly 'com.netease.nimlib:basesdk:9.15.0'
implementation("com.netease.yunxin.kit.meeting:meeting:4.5.0")

compileOnly 'com.netease.yunxin:nertc-full:5.5.40'
compileOnly 'com.netease.nimlib:basesdk:9.16.0'
}
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,11 @@ public void onKickOut() {
public void onAuthInfoExpired() {
SdkAuthenticator.this.onAuthInfoExpired();
}

@Override
public void onReconnected() {
SdkAuthenticator.this.onReconnected();
}
});
}

Expand Down Expand Up @@ -228,6 +233,11 @@ private void onAuthInfoExpired() {
SdkAuthenticator.getInstance().logout(false);
}

private void onReconnected() {
Log.i(TAG, "onReconnected");
Toast.makeText(context, "IM重连成功", Toast.LENGTH_SHORT).show();
}

public static String getAccount() {
return getAccount(null, null);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -115,13 +115,6 @@ private void initializeSdk() {
NEMeetingKitConfig config = new NEMeetingKitConfig();
config.appKey = serverConfig.getAppKey();
config.language = getSelectLanguage();
/// to remove start
// config.extras =
// new HashMap<String, Object>() {
// {
// put("debugMode", serverConfig.isDebugMode() ? 1 : 0);
// }
// };
config.appName = context.getString(R.string.app_name);
config.serverUrl = serverConfig.getServerUrl();
config.useAssetServerConfig = serverConfig.getUseAssetServerConfig();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,7 @@ public void afterTextChanged(Editable editable) {
case ScheduleMeetingItem.ENABLE_MEETING_NO_SIP_ACTION:
case ScheduleMeetingItem.ENABLE_MEETING_RECORD_ACTION:
case ScheduleMeetingItem.ENABLE_MEETING_WAITING_ROOM:
case ScheduleMeetingItem.ENABLE_MEETING_GUEST_JOIN:
sbMeetingSwitch.setVisibility(View.VISIBLE);
sbMeetingSwitch.setChecked(data.isSwitchOn());
break;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,23 +8,8 @@
import android.content.Intent;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.netease.yunxin.kit.meeting.sdk.NECallback;
import com.netease.yunxin.kit.meeting.sdk.NEJoinMeetingOptions;
import com.netease.yunxin.kit.meeting.sdk.NEJoinMeetingParams;
import com.netease.yunxin.kit.meeting.sdk.NEMeetingInfo;
import com.netease.yunxin.kit.meeting.sdk.NEMeetingItem;
import com.netease.yunxin.kit.meeting.sdk.NEMeetingItemStatus;
import com.netease.yunxin.kit.meeting.sdk.NEMeetingKit;
import com.netease.yunxin.kit.meeting.sdk.NEMeetingOnInjectedMenuItemClickListener;
import com.netease.yunxin.kit.meeting.sdk.NEMeetingService;
import com.netease.yunxin.kit.meeting.sdk.NEMeetingStatus;
import com.netease.yunxin.kit.meeting.sdk.NEMeetingStatusListener;
import com.netease.yunxin.kit.meeting.sdk.NEScheduleMeetingStatusListener;
import com.netease.yunxin.kit.meeting.sdk.NEScreenSharingOptions;
import com.netease.yunxin.kit.meeting.sdk.NEScreenSharingParams;
import com.netease.yunxin.kit.meeting.sdk.NEScreenSharingStatusListener;
import com.netease.yunxin.kit.meeting.sdk.NEStartMeetingOptions;
import com.netease.yunxin.kit.meeting.sdk.NEStartMeetingParams;
import com.netease.yunxin.kit.meeting.sdk.*;

import java.util.List;

public class MeetingDataRepository {
Expand Down Expand Up @@ -98,6 +83,15 @@ public NEMeetingService getMeetingService() {
return NEMeetingKit.getInstance().getMeetingService();
}

/**
* 获取会议邀请服务
*
* @return 会议邀请服务
*/
public NEMeetingInviteService getMeetingInviteService() {
return NEMeetingKit.getInstance().getMeetingInviteService();
}

public void setOnInjectedMenuItemClickListener(
NEMeetingOnInjectedMenuItemClickListener listener) {
if (NEMeetingKit.getInstance().getMeetingService() != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,16 @@ public boolean isWaitingRoomEnabled() {
return enableWaitingRoom;
}

private boolean enableGuestJoin = false;

public void enableGuestJoin(boolean enabled) {
enableGuestJoin = enabled;
}

public boolean isGuestJoinEnabled() {
return enableGuestJoin;
}

private String extraData;

private Map<String, NEMeetingRoleType> roleBinds;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@ public class ScheduleMeetingItem {

public static final int ENABLE_MEETING_WAITING_ROOM = 14;

public static final int ENABLE_MEETING_GUEST_JOIN = 15;

public ScheduleMeetingItem(
String tittle,
String subTittle,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ public View onCreateView(
// 加入会议隐藏录制开关功能
binding.cloudRecord.setEnabled(false);
binding.enableWaitingRoom.setEnabled(false);
binding.enableGuestJoin.setEnabled(false);
// 加入会议隐藏拓展字段和绑定角色
binding.etExtra.setVisibility(View.GONE);
binding.roleBindTips.setVisibility(View.GONE);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,13 @@ public class ScheduleMeetingFragment extends BaseFragment<FragmentScheduleBindin
private long startTime, endTime;
private Boolean isAttendeeAudioOff, isAllowAttendeeAudioSelfOn;
private Boolean isAttendeeVideoOff, isAllowAttendeeVideoSelfOn;
private boolean isUsePwd, isLiveOn, isLiveLevelOpen, isOpenRecord, isEnableSip, enableWaitingRoom;
private boolean isUsePwd,
isLiveOn,
isLiveLevelOpen,
isOpenRecord,
isEnableSip,
enableWaitingRoom,
enableGuestJoin;
private NESettingsService settingsService;
private boolean isEditMeeting = false;
private MeetingItem item = null;
Expand Down Expand Up @@ -180,6 +186,9 @@ public void onDateResult(long date) {
case ScheduleMeetingItem.ENABLE_MEETING_WAITING_ROOM:
enableWaitingRoom = enable;
break;
case ScheduleMeetingItem.ENABLE_MEETING_GUEST_JOIN:
enableGuestJoin = enable;
break;
}
}
});
Expand Down Expand Up @@ -251,6 +260,7 @@ public void onChanged(NEMeetingItem neMeetingItem) {
neMeetingItem.setLive(live);
neMeetingItem.setNoSip(!isEnableSip);
neMeetingItem.setWaitingRoomEnabled(enableWaitingRoom);
neMeetingItem.setEnableGuestJoin(enableGuestJoin);
if (isEditMeeting) {
mViewModel.editMeeting(
neMeetingItem,
Expand Down Expand Up @@ -352,6 +362,12 @@ protected void initData() {
(item != null && item.isWaitingRoomEnabled()),
ScheduleMeetingItem.ENABLE_MEETING_WAITING_ROOM,
""));
dataList.add(
new ScheduleMeetingItem(
"允许访客入会",
(item != null && item.isGuestJoinEnabled()),
ScheduleMeetingItem.ENABLE_MEETING_GUEST_JOIN,
""));
dataList.add(
new ScheduleMeetingItem(
"扩展字段",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,7 @@ protected void performAction(
(NEStartMeetingOptions) getMeetingOptions(new NEStartMeetingOptions());
options.enableWaitingRoom = binding.enableWaitingRoom.isChecked();
options.enableAudioDeviceSwitch = binding.enableAudioDeviceSwitch.isChecked();
options.enableGuestJoin = binding.enableGuestJoin.isChecked();
showDialogProgress("正在创建会议...");
mViewModel.startMeeting(params, options, new MeetingCallback());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ private List<MeetingItem> sort(List<NEMeetingItem> resultData) {
item.setRoleBinds(neMeetingItem.getRoleBinds());
item.setNoSip(neMeetingItem.noSip());
item.setWaitingRoomEnabled(neMeetingItem.isWaitingRoomEnabled());
item.enableGuestJoin(neMeetingItem.isGuestJoinEnabled());
items.add(item);
}
Collections.sort(items);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,31 +5,27 @@
package com.netease.yunxin.kit.meeting.sampleapp.viewmodel;

import android.annotation.SuppressLint;
import android.app.Application;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModel;
import androidx.lifecycle.*;
import com.netease.yunxin.kit.meeting.sampleapp.SdkAuthenticator;
import com.netease.yunxin.kit.meeting.sampleapp.SdkInitializer;
import com.netease.yunxin.kit.meeting.sampleapp.data.MeetingDataRepository;
import com.netease.yunxin.kit.meeting.sampleapp.log.LogUtil;
import com.netease.yunxin.kit.meeting.sdk.NECallback;
import com.netease.yunxin.kit.meeting.sdk.NEMeetingInfo;
import com.netease.yunxin.kit.meeting.sdk.NEMeetingOnInjectedMenuItemClickListener;
import com.netease.yunxin.kit.meeting.sdk.NEMeetingService;
import com.netease.yunxin.kit.meeting.sdk.NEMeetingStatus;
import com.netease.yunxin.kit.meeting.sdk.NEMeetingStatusListener;
import com.netease.yunxin.kit.meeting.sdk.*;
import com.netease.yunxin.kit.meeting.sdk.NEMeetingInviteStatus;
import java.util.List;

public class MainViewModel extends ViewModel
public class MainViewModel extends AndroidViewModel
implements NEMeetingStatusListener,
SdkInitializer.InitializeListener,
SdkAuthenticator.AuthStateChangeListener {
SdkAuthenticator.AuthStateChangeListener,
NEMeetingInviteStatusListener {

private static final String TAG = "MainViewModel";

Expand Down Expand Up @@ -57,6 +53,8 @@ protected void onInactive() {
private MutableLiveData<NEMeetingInfo> meetingInfoLiveData = new MutableLiveData<>();
private long durationInitialTimestamp;

private Context context;

@SuppressLint("HandlerLeak")
private Handler handler =
new Handler() {
Expand All @@ -70,9 +68,11 @@ public void handleMessage(@NonNull Message msg) {
}
};

public MainViewModel() {
public MainViewModel(Application application) {
super(application);
SdkInitializer.getInstance().addListener(this);
SdkAuthenticator.getInstance().setAuthStateChangeListener(this::onAuthStateChanged);
this.context = application.getApplicationContext();
}

public MutableLiveData<Boolean> getMeetingMinimizedLiveData() {
Expand All @@ -96,6 +96,10 @@ public NEMeetingService getMeetingService() {
return mRepository.getMeetingService();
}

public NEMeetingInviteService getMeetingInviteService() {
return mRepository.getMeetingInviteService();
}

@Override
protected void onCleared() {
super.onCleared();
Expand All @@ -113,6 +117,7 @@ protected void onCleared() {
@Override
public void onInitialized(int initializeIndex) {
getMeetingService().addMeetingStatusListener(this);
getMeetingInviteService().addEventListener(this);
NEMeetingStatus status = getMeetingService().getMeetingStatus();
if (status != null) {
reactToMeetingStatus(status);
Expand All @@ -124,6 +129,41 @@ public void onMeetingStatusChanged(Event event) {
reactToMeetingStatus(event.status);
}

@Override
public void onMeetingInviteStatusChanged(
NEMeetingInviteStatus status, String meetingId, NEMeetingInviteInfo inviteInfo) {
LogUtil.log(
TAG, "onMeetingInviteStatusChanged: " + status + " " + meetingId + " " + inviteInfo);

// if (NEMeetingInviteStatus.MEETING_STATUS_CALLING == status) {
// NEJoinMeetingParams params = new NEJoinMeetingParams();
// params.meetingNum = inviteInfo.meetingNum;
// params.displayName = "customDisplayName";
// NEJoinMeetingOptions options = new NEJoinMeetingOptions();
// options.noVideo = false;
// getMeetingInviteService()
// .acceptInvite(
// context,
// params,
// options,
// new NECallback<Void>() {
// @Override
// public void onResult(int resultCode, String resultMsg, Void resultData) {
// LogUtil.log(TAG, "acceptInvite: " + resultCode + " " + resultMsg);
// }
// });
// getMeetingInviteService()
// .rejectInvite(
// event.meetingId,
// new NECallback<Void>() {
// @Override
// public void onResult(int resultCode, String resultMsg, Void resultData) {
// LogUtil.log(TAG, "rejectInvite: " + resultCode + " " + resultMsg);
// }
// });
// }
}

private void reactToMeetingStatus(NEMeetingStatus status) {
LogUtil.log(TAG, "onMeetingStatusChanged: " + status + "==" + minimizedLiveData.getValue());
Boolean value =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ public void mapToNEMeetingItem(MeetingItem item) {
meetingItem.setMeetingNum(item.getMeetingNum());
meetingItem.setNoSip(item.isNoSip());
meetingItem.setMeetingId(item.getMeetingId());
meetingItem.setEnableGuestJoin(item.isGuestJoinEnabled());
itemMutableLiveData.setValue(meetingItem);
}

Expand Down
Loading
Loading