From 298451242dbdecc4e6d763576a8fd36ffe913fda Mon Sep 17 00:00:00 2001 From: haoyiqiang Date: Wed, 30 Oct 2024 11:03:46 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E7=99=BD=E6=9D=BF=E5=8D=87=E7=BA=A7?= =?UTF-8?q?=E6=8E=A5=E5=85=A5appliance-plugin?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../agora/online/whiteboard/FcrBoardRoom.kt | 47 ++++++++++++++++- .../src/main/res/values-zh-rTW/strings.xml | 2 + .../src/main/res/values-zh/strings.xml | 2 + .../src/main/res/values/strings.xml | 2 + .../agoraeduuikit/whiteboard/FcrBoardRoom.kt | 50 +++++++++++++++++-- .../src/main/res/values-zh-rTW/strings.xml | 2 + .../src/main/res/values-zh/strings.xml | 2 + AgoraEduUIKit/src/main/res/values/strings.xml | 2 + config.gradle | 2 +- .../agora/online/whiteboard/FcrBoardRoom.kt | 40 ++++++++++++++- .../agoraeduuikit/whiteboard/FcrBoardRoom.kt | 40 ++++++++++++++- open-cloudclass-android/config.gradle | 2 +- 12 files changed, 185 insertions(+), 8 deletions(-) diff --git a/AgoraCloudScene/src/main/java/io/agora/online/whiteboard/FcrBoardRoom.kt b/AgoraCloudScene/src/main/java/io/agora/online/whiteboard/FcrBoardRoom.kt index 044393b7e..7a0394e14 100644 --- a/AgoraCloudScene/src/main/java/io/agora/online/whiteboard/FcrBoardRoom.kt +++ b/AgoraCloudScene/src/main/java/io/agora/online/whiteboard/FcrBoardRoom.kt @@ -1,12 +1,18 @@ package io.agora.online.whiteboard import android.content.Context +import android.os.Handler +import android.os.Looper +import androidx.core.content.ContextCompat import com.herewhite.sdk.* import com.herewhite.sdk.domain.* +import com.herewhite.sdk.window.SlideListener import io.agora.agoraeducore.core.internal.base.PreferenceManager +import io.agora.agoraeducore.core.internal.base.ToastManager import io.agora.agoraeducore.core.internal.education.impl.Constants import io.agora.agoraeducore.core.internal.framework.utils.GsonUtil import io.agora.agoraeducore.core.internal.log.LogX +import io.agora.online.R import io.agora.online.impl.whiteboard.AudioMixerBridgeImpl import io.agora.online.impl.whiteboard.FcrWhiteboardConverter import io.agora.online.impl.whiteboard.WhiteBoardAudioMixingBridgeListener @@ -25,11 +31,14 @@ import java.lang.reflect.Proxy * date : 2022/6/7 * description : */ -class FcrBoardRoom(var whiteBoardView: WhiteboardView) { +class FcrBoardRoom(var whiteBoardView: WhiteboardView) : SlideListener { var whiteBoardSDKLog: FcrBoardSDKLog = FcrBoardSDKLog() lateinit var whiteSdk: WhiteSdk var context: Context = whiteBoardView.context var roomParams: RoomParams? = null + var retryTime = 0 + val TAG = "WhiteBoardSDK" + val handler = Handler(Looper.getMainLooper()) var roomListener: FcrBoardRoomListener? = null set(value) { whiteBoardSDKLog.roomListener = value @@ -70,6 +79,7 @@ class FcrBoardRoom(var whiteBoardView: WhiteboardView) { configuration.isUserCursor = true configuration.region = FcrWhiteboardConverter.convertStringToRegion(region) configuration.useMultiViews = true + configuration.isEnableAppliancePlugin = true; whiteSdk = WhiteSdk( whiteBoardView, @@ -78,6 +88,41 @@ class FcrBoardRoom(var whiteBoardView: WhiteboardView) { whiteBoardSDKLog, AudioMixerBridgeImpl(whiteboardMixingBridgeListener) ) + whiteSdk.setSlideListener(this); + } + + override fun onSlideError( + errorType: SlideErrorType?, + errorMsg: String?, + slideId: String?, + slideIndex: Int + ) { + if (errorType == SlideErrorType.RESOURCE_ERROR || errorType == SlideErrorType.CANVAS_CRASH) { + if (this.retryTime == 0) { + this.retry(slideId!!, slideIndex) + } else if (this.retryTime < 5) { + handler.postDelayed({ + this.retry(slideId!!, slideIndex) + }, 5000) + } else { + this.retryTime = 0 + ContextCompat.getMainExecutor(context).execute { + ToastManager.showShort(context, R.string.fcr_board_slide_retry_failure) + } + } + } else if (errorType == SlideErrorType.RUNTIME_ERROR) { + this.whiteSdk.recoverSlide(slideId, slideIndex) + } else if(errorType == SlideErrorType.RUNTIME_WARN){ + LogX.w(TAG, "slide page: ${slideIndex}, error: ${errorMsg.toString()}") + } + } + + private fun retry(slideId: String, slideIndex: Int){9 + this.retryTime += 1 + this.whiteSdk.recoverSlide(slideId, slideIndex) + ContextCompat.getMainExecutor(whiteBoardView.context).execute{ + ToastManager.showShort(context.getString(R.string.fcr_board_slide_retry) + this.retryTime + "/5") + } } fun join(config: FcrBoardRoomJoinConfig) { diff --git a/AgoraCloudScene/src/main/res/values-zh-rTW/strings.xml b/AgoraCloudScene/src/main/res/values-zh-rTW/strings.xml index 050163315..cc0930e3b 100644 --- a/AgoraCloudScene/src/main/res/values-zh-rTW/strings.xml +++ b/AgoraCloudScene/src/main/res/values-zh-rTW/strings.xml @@ -87,6 +87,8 @@ 外教已離開教室 + 課件加載失敗,正在重試 + 課件加載失敗,請切換下一頁或關閉課件后重新打開 你已被老師授權,請使用白板工具互動 你已被老師收回授權,無法使用白板工具互動 diff --git a/AgoraCloudScene/src/main/res/values-zh/strings.xml b/AgoraCloudScene/src/main/res/values-zh/strings.xml index f9f7df299..2cd19258c 100644 --- a/AgoraCloudScene/src/main/res/values-zh/strings.xml +++ b/AgoraCloudScene/src/main/res/values-zh/strings.xml @@ -93,6 +93,8 @@ 外教已离开教室 + 课件加载失败,正在重试 + 课件加载失败,请切换下一页或关闭课件后重新打开 你已被老师授权,请使用白板工具互动 你已被老师收回授权,无法使用白板工具互动 diff --git a/AgoraCloudScene/src/main/res/values/strings.xml b/AgoraCloudScene/src/main/res/values/strings.xml index 89d62d7af..441b19c79 100644 --- a/AgoraCloudScene/src/main/res/values/strings.xml +++ b/AgoraCloudScene/src/main/res/values/strings.xml @@ -92,6 +92,8 @@ The teacher has left the classroom + course load failure, retry now. + course load failure, please load next page or reopen. You can now annotate on the whiteboard. Your access to the whiteboard has been revoked by the teacher. diff --git a/AgoraEduUIKit/src/main/java/io/agora/agoraeduuikit/whiteboard/FcrBoardRoom.kt b/AgoraEduUIKit/src/main/java/io/agora/agoraeduuikit/whiteboard/FcrBoardRoom.kt index fa67657e2..6e222ac74 100644 --- a/AgoraEduUIKit/src/main/java/io/agora/agoraeduuikit/whiteboard/FcrBoardRoom.kt +++ b/AgoraEduUIKit/src/main/java/io/agora/agoraeduuikit/whiteboard/FcrBoardRoom.kt @@ -1,12 +1,19 @@ package io.agora.agoraeduuikit.whiteboard import android.content.Context +import android.os.Handler +import android.os.Looper +import androidx.core.content.ContextCompat import com.herewhite.sdk.* import com.herewhite.sdk.domain.* +import com.herewhite.sdk.window.SlideListener import io.agora.agoraeducore.core.internal.base.PreferenceManager +import io.agora.agoraeducore.core.internal.base.ToastManager import io.agora.agoraeducore.core.internal.education.impl.Constants import io.agora.agoraeducore.core.internal.framework.utils.GsonUtil import io.agora.agoraeducore.core.internal.log.LogX +import io.agora.agoraeduuikit.R +import io.agora.agoraeduuikit.component.toast.AgoraUIToast import io.agora.agoraeduuikit.impl.whiteboard.AudioMixerBridgeImpl import io.agora.agoraeduuikit.impl.whiteboard.FcrWhiteboardConverter import io.agora.agoraeduuikit.impl.whiteboard.WhiteBoardAudioMixingBridgeListener @@ -25,7 +32,7 @@ import java.lang.reflect.Proxy * date : 2022/6/7 * description : */ -class FcrBoardRoom(var whiteBoardView: WhiteboardView) { +class FcrBoardRoom(var whiteBoardView: WhiteboardView) : SlideListener { var whiteBoardSDKLog: FcrBoardSDKLog = FcrBoardSDKLog() lateinit var whiteSdk: WhiteSdk var context: Context = whiteBoardView.context @@ -36,7 +43,8 @@ class FcrBoardRoom(var whiteBoardView: WhiteboardView) { whiteBoardSDKLog.roomListener = value field = value } - + var retryTime = 0 + val handler = Handler(Looper.getMainLooper()) var mixingBridgeListener: ((AgoraBoardInteractionPacket) -> Unit)? = null val boardRoom = Proxy.newProxyInstance(BoardRoom::class.java.classLoader, arrayOf(BoardRoom::class.java), @@ -59,6 +67,40 @@ class FcrBoardRoom(var whiteBoardView: WhiteboardView) { } }) as BoardRoom + override fun onSlideError( + errorType: SlideErrorType?, + errorMsg: String?, + slideId: String?, + slideIndex: Int + ) { + if (errorType == SlideErrorType.RESOURCE_ERROR || errorType == SlideErrorType.CANVAS_CRASH) { + if (this.retryTime == 0) { + this.retry(slideId!!, slideIndex) + } else if (this.retryTime < 5) { + handler.postDelayed({ + this.retry(slideId!!, slideIndex) + }, 5000) + } else { + this.retryTime = 0 + ContextCompat.getMainExecutor(context).execute { + ToastManager.showShort(context, R.string.fcr_board_slide_retry_failure) + } + } + } else if (errorType == SlideErrorType.RUNTIME_ERROR) { + this.whiteSdk.recoverSlide(slideId, slideIndex) + } else if(errorType == SlideErrorType.RUNTIME_WARN){ + LogX.w(TAG, "slide page: ${slideIndex}, error: ${errorMsg.toString()}") + } + } + + private fun retry(slideId: String, slideIndex: Int){ + this.retryTime += 1 + this.whiteSdk.recoverSlide(slideId, slideIndex) + ContextCompat.getMainExecutor(whiteBoardView.context).execute{ + ToastManager.showShort(context.getString(R.string.fcr_board_slide_retry) + this.retryTime + "/5") + } + } + fun init(whiteBoardAppId: String, region: String?) { WhiteDisplayerState.setCustomGlobalStateClass(BoardState::class.java) val isDebugMode = PreferenceManager.get(Constants.KEY_SP_USE_OPEN_TEST_MODE, false) @@ -71,7 +113,8 @@ class FcrBoardRoom(var whiteBoardView: WhiteboardView) { configuration.isUserCursor = true configuration.region = FcrWhiteboardConverter.convertStringToRegion(region) configuration.useMultiViews = true - + configuration.isEnableAppliancePlugin = true; + whiteSdk = WhiteSdk( whiteBoardView, context, @@ -79,6 +122,7 @@ class FcrBoardRoom(var whiteBoardView: WhiteboardView) { whiteBoardSDKLog, AudioMixerBridgeImpl(whiteboardMixingBridgeListener) ) + whiteSdk.setSlideListener(this); } fun join(config: FcrBoardRoomJoinConfig) { diff --git a/AgoraEduUIKit/src/main/res/values-zh-rTW/strings.xml b/AgoraEduUIKit/src/main/res/values-zh-rTW/strings.xml index 4c9af4077..5c6ad2cb6 100644 --- a/AgoraEduUIKit/src/main/res/values-zh-rTW/strings.xml +++ b/AgoraEduUIKit/src/main/res/values-zh-rTW/strings.xml @@ -86,6 +86,8 @@ 外教已離開教室 + 課件加載失敗,正在重試 + 課件加載失敗,請切換下一頁或關閉課件后重新打開 你已被老師授權,請使用白板工具互動 你已被老師收回授權,無法使用白板工具互動 diff --git a/AgoraEduUIKit/src/main/res/values-zh/strings.xml b/AgoraEduUIKit/src/main/res/values-zh/strings.xml index 1d2e6d11b..dc49974a5 100644 --- a/AgoraEduUIKit/src/main/res/values-zh/strings.xml +++ b/AgoraEduUIKit/src/main/res/values-zh/strings.xml @@ -92,6 +92,8 @@ 外教已离开教室 + 课件加载失败,正在重试 + 课件加载失败,请切换下一页或关闭课件后重新打开 你已被老师授权,请使用白板工具互动 你已被老师收回授权,无法使用白板工具互动 diff --git a/AgoraEduUIKit/src/main/res/values/strings.xml b/AgoraEduUIKit/src/main/res/values/strings.xml index caaccdb21..5d1d2d638 100644 --- a/AgoraEduUIKit/src/main/res/values/strings.xml +++ b/AgoraEduUIKit/src/main/res/values/strings.xml @@ -91,6 +91,8 @@ The teacher has left the classroom + course load failure, retry now. + course load failure, please load next page or reopen. You can now annotate on the whiteboard. Your access to the whiteboard has been revoked by the teacher. diff --git a/config.gradle b/config.gradle index 512d0192a..f6c8bdd15 100644 --- a/config.gradle +++ b/config.gradle @@ -50,7 +50,7 @@ ext { 'agora_basic_sdk_rtc' : '3.7.1', 'agora_native_full_sdk_arsenal' : '4.0.0', 'agora_rtm_sdk' : '1.5.1', - 'white_sdk_android' : '2.16.41', + 'white_sdk_android' : '2.16.93', 'glide' : '4.11.0', 'glide_compiler' : '4.11.0', 'core_ktx' : '1.3.2', diff --git a/open-cloudclass-android/AgoraCloudScene/src/main/java/io/agora/online/whiteboard/FcrBoardRoom.kt b/open-cloudclass-android/AgoraCloudScene/src/main/java/io/agora/online/whiteboard/FcrBoardRoom.kt index 044393b7e..7f556998b 100644 --- a/open-cloudclass-android/AgoraCloudScene/src/main/java/io/agora/online/whiteboard/FcrBoardRoom.kt +++ b/open-cloudclass-android/AgoraCloudScene/src/main/java/io/agora/online/whiteboard/FcrBoardRoom.kt @@ -25,11 +25,13 @@ import java.lang.reflect.Proxy * date : 2022/6/7 * description : */ -class FcrBoardRoom(var whiteBoardView: WhiteboardView) { +class FcrBoardRoom(var whiteBoardView: WhiteboardView) : SlideListener { var whiteBoardSDKLog: FcrBoardSDKLog = FcrBoardSDKLog() lateinit var whiteSdk: WhiteSdk var context: Context = whiteBoardView.context + var retryTime = 0 var roomParams: RoomParams? = null + val handler = Handler(Looper.getMainLooper()) var roomListener: FcrBoardRoomListener? = null set(value) { whiteBoardSDKLog.roomListener = value @@ -70,6 +72,7 @@ class FcrBoardRoom(var whiteBoardView: WhiteboardView) { configuration.isUserCursor = true configuration.region = FcrWhiteboardConverter.convertStringToRegion(region) configuration.useMultiViews = true + configuration.isEnableAppliancePlugin = true; whiteSdk = WhiteSdk( whiteBoardView, @@ -78,6 +81,41 @@ class FcrBoardRoom(var whiteBoardView: WhiteboardView) { whiteBoardSDKLog, AudioMixerBridgeImpl(whiteboardMixingBridgeListener) ) + whiteSdk.setSlideListener(this); + } + + override fun onSlideError( + errorType: SlideErrorType?, + errorMsg: String?, + slideId: String?, + slideIndex: Int + ) { + if (errorType == SlideErrorType.RESOURCE_ERROR || errorType == SlideErrorType.CANVAS_CRASH) { + if (this.retryTime == 0) { + this.retry(slideId!!, slideIndex) + } else if (this.retryTime < 5) { + handler.postDelayed({ + this.retry(slideId!!, slideIndex) + }, 5000) + } else { + this.retryTime = 0 + ContextCompat.getMainExecutor(context).execute { + ToastManager.showShort(context, R.string.fcr_board_slide_retry_failure) + } + } + } else if (errorType == SlideErrorType.RUNTIME_ERROR) { + this.whiteSdk.recoverSlide(slideId, slideIndex) + } else if(errorType == SlideErrorType.RUNTIME_WARN){ + LogX.w(TAG, "slide page: ${slideIndex}, error: ${errorMsg.toString()}") + } + } + + private fun retry(slideId: String, slideIndex: Int){ + this.retryTime += 1 + this.whiteSdk.recoverSlide(slideId, slideIndex) + ContextCompat.getMainExecutor(whiteBoardView.context).execute{ + ToastManager.showShort(context.getString(R.string.fcr_board_slide_retry) + this.retryTime + "/5") + } } fun join(config: FcrBoardRoomJoinConfig) { diff --git a/open-cloudclass-android/AgoraEduUIKit/src/main/java/io/agora/agoraeduuikit/whiteboard/FcrBoardRoom.kt b/open-cloudclass-android/AgoraEduUIKit/src/main/java/io/agora/agoraeduuikit/whiteboard/FcrBoardRoom.kt index fa67657e2..54055f34b 100644 --- a/open-cloudclass-android/AgoraEduUIKit/src/main/java/io/agora/agoraeduuikit/whiteboard/FcrBoardRoom.kt +++ b/open-cloudclass-android/AgoraEduUIKit/src/main/java/io/agora/agoraeduuikit/whiteboard/FcrBoardRoom.kt @@ -25,12 +25,14 @@ import java.lang.reflect.Proxy * date : 2022/6/7 * description : */ -class FcrBoardRoom(var whiteBoardView: WhiteboardView) { +class FcrBoardRoom(var whiteBoardView: WhiteboardView) : SlideListener { var whiteBoardSDKLog: FcrBoardSDKLog = FcrBoardSDKLog() lateinit var whiteSdk: WhiteSdk var context: Context = whiteBoardView.context var roomParams: RoomParams? = null val TAG = "WhiteBoardSDK" + var retryTime = 0 + val handler = Handler(Looper.getMainLooper()) var roomListener: FcrBoardRoomListener? = null set(value) { whiteBoardSDKLog.roomListener = value @@ -71,6 +73,7 @@ class FcrBoardRoom(var whiteBoardView: WhiteboardView) { configuration.isUserCursor = true configuration.region = FcrWhiteboardConverter.convertStringToRegion(region) configuration.useMultiViews = true + configuration.isEnableAppliancePlugin = true; whiteSdk = WhiteSdk( whiteBoardView, @@ -79,6 +82,41 @@ class FcrBoardRoom(var whiteBoardView: WhiteboardView) { whiteBoardSDKLog, AudioMixerBridgeImpl(whiteboardMixingBridgeListener) ) + whiteSdk.setSlideListener(this); + } + + override fun onSlideError( + errorType: SlideErrorType?, + errorMsg: String?, + slideId: String?, + slideIndex: Int + ) { + if (errorType == SlideErrorType.RESOURCE_ERROR || errorType == SlideErrorType.CANVAS_CRASH) { + if (this.retryTime == 0) { + this.retry(slideId!!, slideIndex) + } else if (this.retryTime < 5) { + handler.postDelayed({ + this.retry(slideId!!, slideIndex) + }, 5000) + } else { + this.retryTime = 0 + ContextCompat.getMainExecutor(context).execute { + ToastManager.showShort(context, R.string.fcr_board_slide_retry_failure) + } + } + } else if (errorType == SlideErrorType.RUNTIME_ERROR) { + this.whiteSdk.recoverSlide(slideId, slideIndex) + } else if(errorType == SlideErrorType.RUNTIME_WARN){ + LogX.w(TAG, "slide page: ${slideIndex}, error: ${errorMsg.toString()}") + } + } + + private fun retry(slideId: String, slideIndex: Int){ + this.retryTime += 1 + this.whiteSdk.recoverSlide(slideId, slideIndex) + ContextCompat.getMainExecutor(whiteBoardView.context).execute{ + ToastManager.showShort(context.getString(R.string.fcr_board_slide_retry) + this.retryTime + "/5") + } } fun join(config: FcrBoardRoomJoinConfig) { diff --git a/open-cloudclass-android/config.gradle b/open-cloudclass-android/config.gradle index 78a444679..9c394eaaa 100644 --- a/open-cloudclass-android/config.gradle +++ b/open-cloudclass-android/config.gradle @@ -52,7 +52,7 @@ ext { 'agora_basic_sdk_rtc' : '3.7.1', 'agora_native_full_sdk_arsenal' : '4.0.0', 'agora_rtm_sdk' : '1.5.1', - 'white_sdk_android' : '2.16.41', + 'white_sdk_android' : '2.16.93', 'glide' : '4.11.0', 'glide_compiler' : '4.11.0', 'core_ktx' : '1.3.2', From 9d70eb27aca08a994d03926dcd71c40bb70dfd46 Mon Sep 17 00:00:00 2001 From: haoyiqiang Date: Fri, 1 Nov 2024 12:39:08 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E5=8D=87=E7=BA=A7=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.gradle b/config.gradle index f6c8bdd15..24cea0af7 100644 --- a/config.gradle +++ b/config.gradle @@ -50,7 +50,7 @@ ext { 'agora_basic_sdk_rtc' : '3.7.1', 'agora_native_full_sdk_arsenal' : '4.0.0', 'agora_rtm_sdk' : '1.5.1', - 'white_sdk_android' : '2.16.93', + 'white_sdk_android' : '2.16.94', 'glide' : '4.11.0', 'glide_compiler' : '4.11.0', 'core_ktx' : '1.3.2', From bb35aad253b186c31a40e12bd8f6908712cac129 Mon Sep 17 00:00:00 2001 From: haoyiqiang Date: Sat, 9 Nov 2024 12:24:12 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E5=8D=87=E7=BA=A7=E7=99=BD=E6=9D=BFsdk?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.gradle b/config.gradle index 24cea0af7..2226b2273 100644 --- a/config.gradle +++ b/config.gradle @@ -50,7 +50,7 @@ ext { 'agora_basic_sdk_rtc' : '3.7.1', 'agora_native_full_sdk_arsenal' : '4.0.0', 'agora_rtm_sdk' : '1.5.1', - 'white_sdk_android' : '2.16.94', + 'white_sdk_android' : '2.16.95', 'glide' : '4.11.0', 'glide_compiler' : '4.11.0', 'core_ktx' : '1.3.2',