Browse Source

修复音视频通话邀请消息,及音视频通话界面,通话时长可能显示不准确 fix #927

imndx 1 month ago
parent
commit
4d0206a466

BIN
avenginekit/avenginekit.aar


+ 9 - 0
client/src/main/java/cn/wildfirechat/remote/ChatManager.java

@@ -8459,6 +8459,15 @@ public class ChatManager {
         }
     }
 
+    /**
+     * @return 服务器时间 - 本地时间
+     */
+    public long getServerTimestamp() {
+        long now = System.currentTimeMillis();
+        long delta = this.getServerDeltaTime();
+        return now + delta;
+    }
+
     /**
      * 当前服务是否连接到了主网络
      */

+ 1 - 1
uikit/src/main/java/cn/wildfire/chat/kit/voip/MultiCallAudioFragment.java

@@ -308,7 +308,7 @@ public class MultiCallAudioFragment extends Fragment implements AVEngineKit.Call
     private void updateCallDuration() {
         AVEngineKit.CallSession session = AVEngineKit.Instance().getCurrentSession();
         if (session != null && session.getState() == AVEngineKit.CallState.Connected) {
-            long s = System.currentTimeMillis() - session.getConnectedTime();
+            long s = ChatManager.Instance().getServerTimestamp() - session.getConnectedTime();
             s = s / 1000;
             String text;
             if (s > 3600) {

+ 1 - 1
uikit/src/main/java/cn/wildfire/chat/kit/voip/MultiCallVideoFragment.java

@@ -431,7 +431,7 @@ public class MultiCallVideoFragment extends Fragment implements AVEngineKit.Call
         public void run() {
             AVEngineKit.CallSession session = getEngineKit().getCurrentSession();
             if (session != null && session.getState() == AVEngineKit.CallState.Connected) {
-                long s = System.currentTimeMillis() - session.getConnectedTime();
+                long s = ChatManager.Instance().getServerTimestamp() - session.getConnectedTime();
                 s = s / 1000;
                 String text;
                 if (s > 3600) {

+ 1 - 2
uikit/src/main/java/cn/wildfire/chat/kit/voip/SingleAudioFragment.java

@@ -16,7 +16,6 @@ import android.widget.TextView;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.fragment.app.Fragment;
-import androidx.lifecycle.ViewModelProvider;
 
 import com.bumptech.glide.Glide;
 import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
@@ -300,7 +299,7 @@ public class SingleAudioFragment extends Fragment implements AVEngineKit.CallSes
     private void updateCallDuration() {
         AVEngineKit.CallSession session = gEngineKit.getCurrentSession();
         if (session != null && session.getState() == AVEngineKit.CallState.Connected) {
-            long s = System.currentTimeMillis() - session.getConnectedTime();
+            long s = ChatManager.Instance().getServerTimestamp() - session.getConnectedTime();
             s = s / 1000;
             String text;
             if (s > 3600) {

+ 1 - 1
uikit/src/main/java/cn/wildfire/chat/kit/voip/SingleVideoFragment.java

@@ -404,7 +404,7 @@ public class SingleVideoFragment extends Fragment implements AVEngineKit.CallSes
     private void updateCallDuration() {
         AVEngineKit.CallSession session = gEngineKit.getCurrentSession();
         if (session != null && session.getState() == AVEngineKit.CallState.Connected) {
-            long s = System.currentTimeMillis() - session.getConnectedTime();
+            long s = ChatManager.Instance().getServerTimestamp() - session.getConnectedTime();
             s = s / 1000;
             String text;
             if (s > 3600) {

+ 2 - 2
uikit/src/main/java/cn/wildfire/chat/kit/voip/VoipCallService.java

@@ -418,7 +418,7 @@ public class VoipCallService extends Service implements OnReceiveMessageListener
         view.findViewById(R.id.screenSharingTextView).setVisibility(View.VISIBLE);
         TextView durationTextView = view.findViewById(R.id.durationTextView);
         durationTextView.setVisibility(View.VISIBLE);
-        long duration = (System.currentTimeMillis() - session.getConnectedTime()) / 1000;
+        long duration = (ChatManager.Instance().getServerTimestamp() - session.getConnectedTime()) / 1000;
         if (duration >= 3600) {
             durationTextView.setText(String.format("%d:%02d:%02d", duration / 3600, (duration % 3600) / 60, (duration % 60)));
         } else {
@@ -442,7 +442,7 @@ public class VoipCallService extends Service implements OnReceiveMessageListener
         ImageView mediaIconV = view.findViewById(R.id.av_media_type);
         mediaIconV.setImageResource(R.drawable.av_float_audio);
 
-        long duration = (System.currentTimeMillis() - session.getConnectedTime()) / 1000;
+        long duration = (ChatManager.Instance().getServerTimestamp() - session.getConnectedTime()) / 1000;
         if (duration >= 3600) {
             timeView.setText(String.format("%d:%02d:%02d", duration / 3600, (duration % 3600) / 60, (duration % 60)));
         } else {

+ 3 - 3
uikit/src/main/java/cn/wildfire/chat/kit/voip/conference/ConferenceFragment.java

@@ -314,14 +314,14 @@ public class ConferenceFragment extends BaseConferenceFragment implements AVEngi
                     .negativeText(R.string.conf_leave_conference)
                     .onNegative((dialogInterface, i) -> {
 
-                        conferenceManager.addHistory(conferenceInfo, System.currentTimeMillis() - session.getStartTime());
+                        conferenceManager.addHistory(conferenceInfo, ChatManager.Instance().getServerTimestamp() - session.getStartTime());
                         conferenceManager.setCurrentConferenceInfo(null);
                         if (session.getState() != AVEngineKit.CallState.Idle)
                             session.leaveConference(false);
                     })
                     .positiveText(R.string.conf_end_conference)
                     .onPositive((dialogInterface, i) -> {
-                        conferenceManager.addHistory(conferenceInfo, System.currentTimeMillis() - session.getStartTime());
+                        conferenceManager.addHistory(conferenceInfo, ChatManager.Instance().getServerTimestamp() - session.getStartTime());
                         conferenceManager.destroyConference(session.getCallId(), null);
                         conferenceManager.setCurrentConferenceInfo(null);
                         if (session.getState() != AVEngineKit.CallState.Idle)
@@ -625,7 +625,7 @@ public class ConferenceFragment extends BaseConferenceFragment implements AVEngi
                 if (session.getConnectedTime() == 0) {
                     text = "会议连接中";
                 } else {
-                    long s = System.currentTimeMillis() - session.getConnectedTime();
+                    long s = ChatManager.Instance().getServerTimestamp() - session.getConnectedTime();
                     s = s / 1000;
                     if (s > 3600) {
                         text = String.format("%d:%02d:%02d", s / 3600, (s % 3600) / 60, (s % 60));