Parcourir la source

优化视频通话

liuzhenxing1118 il y a 5 mois
Parent
commit
7de1522e3f

+ 56 - 26
app/src/main/java/com/xplora/xpvideo/activity/MainActivity.java

@@ -51,6 +51,7 @@ public class MainActivity extends BaseActivity implements Listener.VideoListener
     private RelativeLayout mBottomInLayout = null;
     private RelativeLayout mBottomOutLayout = null;
     private RelativeLayout mBottomIngLayout = null;
+    private Button mBottomEndButton = null;
     //private ImageView mIconView = null;
     private TextView mNameText = null;
     private TextView mHintText = null;
@@ -63,8 +64,8 @@ public class MainActivity extends BaseActivity implements Listener.VideoListener
     private int mHideCountMax = 5;
     private int mHideCount = mHideCountMax;
 
-    //0:呼入 1:呼出
-    private int mVideoType = 0;
+    //1:呼出 2:呼入
+    private int mVideoType = Constant.VIDEO_CALL_OUT;
     private String mTargetId = "";
     private ContactBean mContactBean = new ContactBean();
 
@@ -80,10 +81,10 @@ public class MainActivity extends BaseActivity implements Listener.VideoListener
     protected void initDataBase() {
         super.initDataBase();
         if (Macros.DEBUG) {
-            mVideoType = 0;
+            mVideoType = Constant.VIDEO_CALL_OUT;
             mTargetId = "3523b1d1-8543-43d9-92c9-df663a3f147d";
         } else {
-            mVideoType = getIntent().getIntExtra(Constant.EXTRA_VIDEO_TYPE, 0);
+            mVideoType = getIntent().getIntExtra(Constant.EXTRA_VIDEO_TYPE, Constant.VIDEO_CALL_OUT);
             mTargetId = getIntent().getStringExtra(Constant.EXTRA_VIDEO_TARGET_ID);
         }
         Log.d(TAG, "initData: VideoType:" + mVideoType + " TargetId:" + mTargetId );
@@ -100,6 +101,7 @@ public class MainActivity extends BaseActivity implements Listener.VideoListener
         mBottomInLayout = findViewById(R.id.layout_bottom_in);
         mBottomOutLayout = findViewById(R.id.layout_bottom_out);
         mBottomIngLayout = findViewById(R.id.layout_bottom_ing);
+        mBottomEndButton = findViewById(R.id.bottom_end);
 
         //mIconView = findViewById(R.id.iconIv);
         mNameText = findViewById(R.id.nameTv);
@@ -117,13 +119,13 @@ public class MainActivity extends BaseActivity implements Listener.VideoListener
             refreshInfoLayout(0);
         });
         cancelInBtn.setOnClickListener(v -> {
-            mVideoManager.hangup();
+            clickCancelButton();
         });
         cancelOutBtn.setOnClickListener(v -> {
-            mVideoManager.hangup();
+            clickCancelButton();
         });
         cancelIngBtn.setOnClickListener(v -> {
-            mVideoManager.hangup();
+            clickCancelButton();
         });
         answerInBtn.setOnClickListener(v -> {
             mVideoManager.answer();
@@ -134,6 +136,9 @@ public class MainActivity extends BaseActivity implements Listener.VideoListener
         voiceOutBtn.setOnClickListener(v -> {
 
         });
+        mBottomEndButton.setOnClickListener(v -> {
+            actionWithFinish();
+        });
     }
 
     @Override
@@ -141,7 +146,7 @@ public class MainActivity extends BaseActivity implements Listener.VideoListener
         super.refreshViewBase();
         //ToolsUtils.setImageView(mIconView, mContactBean.profilePath, 0, R.drawable.default_avatar);
         mNameText.setText(mContactBean.name);
-        mHintText.setText(mVideoType == 0 ? R.string.invite : R.string.calling);
+        mHintText.setText(mVideoType == Constant.VIDEO_CALL_OUT ? R.string.calling : R.string.invite);
     }
 
     private void initVideoManager() {
@@ -156,22 +161,49 @@ public class MainActivity extends BaseActivity implements Listener.VideoListener
 
     private void refreshView(int step) {
         if (step == 1) {
+            mVideoLayout.setVisibility(View.GONE);
             mLoadingLayout.setVisibility(View.GONE);
             mNameLayout.setVisibility(View.VISIBLE);
+            mTimeText.setVisibility(View.GONE);
             mBottomInLayout.setVisibility(View.GONE);
             mBottomOutLayout.setVisibility(View.VISIBLE);
             mBottomIngLayout.setVisibility(View.GONE);
+            mBottomEndButton.setVisibility(View.GONE);
         } else if (step == 2) {
+            mVideoLayout.setVisibility(View.GONE);
             mLoadingLayout.setVisibility(View.GONE);
             mNameLayout.setVisibility(View.VISIBLE);
+            mTimeText.setVisibility(View.GONE);
             mBottomInLayout.setVisibility(View.VISIBLE);
             mBottomOutLayout.setVisibility(View.GONE);
             mBottomIngLayout.setVisibility(View.GONE);
+            mBottomEndButton.setVisibility(View.GONE);
         } else if (step == 10) {
             mVideoLayout.setVisibility(View.VISIBLE);
+            mLoadingLayout.setVisibility(View.GONE);
+            mNameLayout.setVisibility(View.GONE);
+            mTimeText.setVisibility(View.VISIBLE);
             mBottomInLayout.setVisibility(View.GONE);
             mBottomOutLayout.setVisibility(View.GONE);
             mBottomIngLayout.setVisibility(View.VISIBLE);
+            mBottomEndButton.setVisibility(View.GONE);
+        } else if (step == 20) {
+            mVideoLayout.setVisibility(View.GONE);
+            mLoadingLayout.setVisibility(View.GONE);
+            mNameLayout.setVisibility(View.VISIBLE);
+            mTimeText.setVisibility(View.GONE);
+            mBottomInLayout.setVisibility(View.GONE);
+            mBottomOutLayout.setVisibility(View.GONE);
+            mBottomIngLayout.setVisibility(View.GONE);
+            mBottomEndButton.setVisibility(View.VISIBLE);
+            String text = ToolsUtils.getTimeString(mTimeCount);
+            mHintText.setText(text);
+            new Handler().postDelayed(new Runnable() {
+                @Override
+                public void run() {
+                    actionWithFinish();
+                }
+            }, 3000);
         }
     }
 
@@ -179,7 +211,7 @@ public class MainActivity extends BaseActivity implements Listener.VideoListener
     public void onLoginCallback(boolean isOK) {
         Log.d(TAG, "onLoginCallback: " + isOK);
         //呼出
-        if (isOK && mVideoType == 1) {
+        if (isOK && mVideoType == Constant.VIDEO_CALL_OUT) {
             mVideoManager.call(mTargetId);
         }
     }
@@ -284,15 +316,7 @@ public class MainActivity extends BaseActivity implements Listener.VideoListener
         Log.d(TAG, "onCallItemRemove: ");
         stopTimeoutTimer();
         stopTalkingTimer();
-        if (mMediaPlayerUtils != null) {
-            mMediaPlayerUtils.playSound(this, R.raw.video_cancel, false);
-        }
-        new Handler().postDelayed(new Runnable() {
-            @Override
-            public void run() {
-                finish();
-            }
-        }, 2000);
+        refreshView(20);
     }
 
     /*动态申请权限*/
@@ -311,6 +335,7 @@ public class MainActivity extends BaseActivity implements Listener.VideoListener
         if (mTimeoutTimer != null) {
             stopTimeoutTimer();
         }
+        mTimeCount = 0;
         mTimeoutTimer = new Timer();
         mTimeoutTimer.schedule(new TimerTask() {
             @Override
@@ -360,7 +385,6 @@ public class MainActivity extends BaseActivity implements Listener.VideoListener
             mTalkingTimer.cancel();
             mTalkingTimer = null;
         }
-        mTimeCount = 0;
     }
 
     private void onTimeoutTimerCallback() {
@@ -372,13 +396,7 @@ public class MainActivity extends BaseActivity implements Listener.VideoListener
     private void onTalkingTimerCallback() {
         mTimeCount ++;
         Log.d(TAG, "onTalkingTimerCallback: " + mTimeCount);
-
-        int count = mTimeCount;
-        long hours = count / 3600;
-        count %= 3600;
-        long minutes = count / 60;
-        long second = count %= 60;
-        String text = hours > 0 ? String.format("%02d:%02d:%02d", hours, minutes, second) : String.format("%02d:%02d", minutes, second);
+        String text = ToolsUtils.getTimeString(mTimeCount);
         mTimeText.setText(text);
         refreshInfoLayout(1);
     }
@@ -395,11 +413,23 @@ public class MainActivity extends BaseActivity implements Listener.VideoListener
         }
     }
 
+    private void actionWithFinish() {
+        if (mMediaPlayerUtils != null) {
+            mMediaPlayerUtils.playSound(this, R.raw.video_cancel, false);
+        }
+        finish();
+    }
+
     private void showToast(String content) {
         Toast t = Toast.makeText(getApplicationContext(), content, Toast.LENGTH_SHORT);
         t.show();
     }
 
+    private void clickCancelButton() {
+        refreshView(20);
+        //mVideoManager.hangup();
+    }
+
     @Override
     protected void onDestroy() {
         Log.d(TAG, "onDestroy: ");

+ 2 - 0
app/src/main/java/com/xplora/xpvideo/utils/Constant.java

@@ -3,4 +3,6 @@ package com.xplora.xpvideo.utils;
 public class Constant {
     public final static String EXTRA_VIDEO_TYPE = "ExtraVideoType";
     public final static String EXTRA_VIDEO_TARGET_ID = "ExtraVideoTargetId";
+    public static int VIDEO_CALL_OUT = 1;
+    public static int VIDEO_CALL_IN = 2;
 }

+ 10 - 0
app/src/main/java/com/xplora/xpvideo/utils/ToolsUtils.java

@@ -1,5 +1,6 @@
 package com.xplora.xpvideo.utils;
 
+import android.annotation.SuppressLint;
 import android.content.Context;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
@@ -59,4 +60,13 @@ public class ToolsUtils {
         NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
         return networkInfo != null && networkInfo.isAvailable();
     }
+
+    @SuppressLint("DefaultLocale")
+    public static String getTimeString(int count) {
+        long hours = count / 3600;
+        count %= 3600;
+        long minutes = count / 60;
+        long second = count %= 60;
+        return hours > 0 ? String.format("%02d:%02d:%02d", hours, minutes, second) : String.format("%02d:%02d", minutes, second);
+    }
 }

+ 16 - 3
app/src/main/res/layout/activity_main.xml

@@ -32,7 +32,6 @@
         android:id="@+id/layout_info"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:visibility="gone"
         >
         <TextView
             android:id="@+id/timeTv"
@@ -46,6 +45,7 @@
             android:textSize="17sp"
             android:paddingStart="10dp"
             android:paddingEnd="10dp"
+            android:text="00:00"
             />
         <RelativeLayout
             android:id="@+id/layout_name"
@@ -77,6 +77,7 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_alignParentBottom="true"
+            android:layout_marginBottom="8dp"
             android:gravity="center"
             >
             <LinearLayout
@@ -123,7 +124,7 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_alignParentBottom="true"
-            android:layout_marginBottom="5dp"
+            android:layout_marginBottom="8dp"
             >
             <ImageButton
                 android:id="@+id/cancelOutBtn"
@@ -146,7 +147,7 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_alignParentBottom="true"
-            android:layout_marginBottom="5dp"
+            android:layout_marginBottom="8dp"
             >
             <ImageButton
                 android:id="@+id/cancelIngBtn"
@@ -163,6 +164,18 @@
                 android:layout_marginEnd="10dp"
                 android:background="@drawable/ic_voice" />
         </RelativeLayout>
+
+        <Button
+            android:id="@+id/bottom_end"
+            android:layout_width="match_parent"
+            android:layout_height="37dp"
+            android:layout_alignParentBottom="true"
+            android:layout_marginBottom="5dp"
+            android:layout_marginStart="5dp"
+            android:layout_marginEnd="5dp"
+            android:background="@drawable/bg_time"
+            android:text="@string/video_end"
+            />
     </RelativeLayout>
 
 </RelativeLayout>

+ 1 - 0
app/src/main/res/values/strings.xml

@@ -8,4 +8,5 @@
     <string name="loading">加载中…</string>
     <string name="timeout">超时</string>
     <string name="network_error">网络错误</string>
+    <string name="video_end">视频已结束</string>
 </resources>