Przeglądaj źródła

Merge remote-tracking branch 'origin/dev' into dev

邓琴文 3 lat temu
rodzic
commit
87a2744774

+ 74 - 0
BaseLibrary/src/main/java/com/cooleshow/base/widgets/UnreadCountTextView.java

@@ -0,0 +1,74 @@
+package com.cooleshow.base.widgets;
+
+import android.annotation.SuppressLint;
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.RectF;
+import android.util.AttributeSet;
+import android.util.TypedValue;
+import android.widget.TextView;
+
+import com.cooleshow.base.R;
+import com.cooleshow.base.utils.SizeUtils;
+
+
+@SuppressLint("AppCompatCustomView")
+public class UnreadCountTextView extends TextView {
+
+    private int mNormalSize = SizeUtils.dp2px(16f);
+    private Paint mPaint;
+
+    public UnreadCountTextView(Context context) {
+        super(context);
+        init();
+    }
+
+    public UnreadCountTextView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        init();
+    }
+
+    public UnreadCountTextView(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        init();
+    }
+
+    private void init() {
+        mPaint = new Paint();
+        mPaint.setAntiAlias(true);
+        mPaint.setColor(getResources().getColor(R.color.common_red));
+        setTextColor(Color.WHITE);
+        setTextSize(TypedValue.COMPLEX_UNIT_SP, 10f);
+    }
+
+
+    @Override
+    protected void onDraw(Canvas canvas) {
+        if (getText().length() == 0) {
+            // 没有字符,就在本View中心画一个小圆点
+            int l = (getMeasuredWidth() - SizeUtils.dp2px(10)) / 2;
+            int t = l;
+            int r = getMeasuredWidth() - l;
+            int b = r;
+            canvas.drawOval(new RectF(l, t, r, b), mPaint);
+        } else if (getText().length() == 1) {
+            canvas.drawOval(new RectF(0, 0, mNormalSize, mNormalSize), mPaint);
+        } else if (getText().length() > 1) {
+            canvas.drawRoundRect(new RectF(0, 0, getMeasuredWidth(), getMeasuredHeight()), getMeasuredHeight() / 2, getMeasuredHeight() / 2, mPaint);
+        }
+        super.onDraw(canvas);
+
+    }
+
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        int width = mNormalSize;
+        int height = mNormalSize;
+        if (getText().length() > 1) {
+            width = mNormalSize + SizeUtils.dp2px((getText().length() - 1) * 5);
+        }
+        setMeasuredDimension(width, height);
+    }
+}

+ 24 - 0
BaseLibrary/src/main/res/layout/im_badge.xml

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+              android:layout_width="match_parent"
+              android:layout_height="match_parent"
+              android:orientation="vertical">
+
+    <com.cooleshow.base.widgets.UnreadCountTextView
+        android:includeFontPadding="false"
+        android:id="@+id/tv_msg_count"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center"
+        android:layout_marginLeft="@dimen/dp_10"
+        android:layout_marginBottom="18dp"
+        android:gravity="center"
+        android:paddingStart="@dimen/dp_4"
+        android:paddingEnd="@dimen/dp_4"
+        android:text=""
+        android:textColor="@color/white"
+        android:textSize="@dimen/sp_12"
+        android:visibility="gone"
+        />
+
+</FrameLayout>

+ 30 - 1
student/src/main/java/com/cooleshow/student/ui/main/MainActivity.java

@@ -5,7 +5,10 @@ import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
 import android.text.TextUtils;
+import android.view.LayoutInflater;
 import android.view.MenuItem;
+import android.view.View;
+import android.widget.TextView;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
@@ -28,6 +31,8 @@ import com.cooleshow.usercenter.bean.UserInfo;
 import com.cooleshow.usercenter.helper.UserHelper;
 import com.daya.live_teaching.common.ResultCallback;
 import com.daya.live_teaching.im.IMManager;
+import com.google.android.material.bottomnavigation.BottomNavigationItemView;
+import com.google.android.material.bottomnavigation.BottomNavigationMenuView;
 import com.google.android.material.bottomnavigation.BottomNavigationView;
 import com.tbruyelle.rxpermissions3.RxPermissions;
 
@@ -37,6 +42,7 @@ import org.greenrobot.eventbus.ThreadMode;
 
 import java.util.ArrayList;
 
+import io.rong.imkit.manager.UnReadMessageManager;
 import io.rong.imlib.RongIMClient;
 
 import static com.cooleshow.base.constanst.Constants.MAIN_PAGE_SELECT_POTION_KEY;
@@ -48,12 +54,13 @@ import static com.cooleshow.base.constanst.Constants.MAIN_PAGE_SELECT_POTION_KEY
  * 类说明:
  */
 @Route(path = RouterPath.APPCenter.PATH_HOME)
-public class MainActivity extends BaseMVPActivity<ActivityMainBinding, MainPresenter> implements MainContract.MainView {
+public class MainActivity extends BaseMVPActivity<ActivityMainBinding, MainPresenter> implements MainContract.MainView, UnReadMessageManager.IUnReadMessageObserver {
 
     private ArrayList<Fragment> mFragments = new ArrayList<>();
     private HomeFragment mHomeFragment;
     private MineFragment mMineFragment;
     private MallFragment shopMallFragment;
+    private TextView tvMsgCount;
 
     /**
      * 打开首页并选中指定tab
@@ -94,6 +101,12 @@ public class MainActivity extends BaseMVPActivity<ActivityMainBinding, MainPrese
 
     @Override
     protected void initView() {
+        BottomNavigationMenuView menuView = (BottomNavigationMenuView) viewBinding.navigation.getChildAt(0);
+        BottomNavigationItemView messageTab = (BottomNavigationItemView) menuView.getChildAt(2);
+        View badge = LayoutInflater.from(this).inflate(com.cooleshow.base.R.layout.im_badge, menuView, false);
+        tvMsgCount = badge.findViewById(com.cooleshow.base.R.id.tv_msg_count);
+        messageTab.addView(badge);
+
         HomePageAdapter homePageAdapter = new HomePageAdapter(this);
         mHomeFragment = new HomeFragment();
         CourseTableFragment courseTableFragment = new CourseTableFragment();
@@ -144,6 +157,7 @@ public class MainActivity extends BaseMVPActivity<ActivityMainBinding, MainPrese
     public void initData() {
         super.initData();
         requestPermission();
+        IMManager.getInstance().addOnUnReadMessageListener(this);
     }
 
     /**
@@ -256,8 +270,23 @@ public class MainActivity extends BaseMVPActivity<ActivityMainBinding, MainPrese
     }
 
     @Override
+    public void onCountChanged(int count) {
+        if (count > 0) {
+            tvMsgCount.setVisibility(View.VISIBLE);
+            if (count <= 99) {
+                tvMsgCount.setText(String.valueOf(count));
+            } else {
+                tvMsgCount.setText("99+");
+            }
+        } else {
+            tvMsgCount.setVisibility(View.GONE);
+        }
+    }
+
+    @Override
     public void onDestroy() {
         super.onDestroy();
         EventBus.getDefault().unregister(this);
+        IMManager.getInstance().removeOnUnReadMessageListener(this);
     }
 }

+ 9 - 6
teacher/src/main/java/com/cooleshow/teacher/ui/homepage/HomePageActivity.java

@@ -183,12 +183,10 @@ public class HomePageActivity extends BaseMVPActivity<ActivityHomePageLayoutBind
         //subjectName
         try {
             viewBinding.llSubjectContainer.removeAllViews();
+            viewBinding.llSubjectContainer2.removeAllViews();
             String[] subjectNames = UiUtils.splitSubjectName(info.subjectName);
             if (subjectNames != null && subjectNames.length > 0) {
                 for (int i = 0; i < subjectNames.length; i++) {
-                    if (i >= 4) {
-                        break;
-                    }
                     createSubjectView(subjectNames[i]);
                 }
             }
@@ -201,9 +199,14 @@ public class HomePageActivity extends BaseMVPActivity<ActivityHomePageLayoutBind
         TextView textView = (TextView) LayoutInflater.from(this).inflate(com.cooleshow.base.R.layout.view_subject_item_layout, viewBinding.llSubjectContainer, false);
         textView.setText(text);
         LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
-        if (viewBinding.llSubjectContainer.getChildCount() >= 1) {
-            params.setMargins(SizeUtils.dp2px(4), 0, 0, 0);
+        if(viewBinding.llSubjectContainer.getChildCount()<4){
+            if (viewBinding.llSubjectContainer.getChildCount() >= 1) {
+                params.setMargins(SizeUtils.dp2px(4), 0, 0, 0);
+            }
+            viewBinding.llSubjectContainer.addView(textView, params);
+        }else{
+            viewBinding.llSubjectContainer2.addView(textView, params);
+            viewBinding.llSubjectContainer2.setVisibility(View.VISIBLE);
         }
-        viewBinding.llSubjectContainer.addView(textView, params);
     }
 }

+ 30 - 1
teacher/src/main/java/com/cooleshow/teacher/ui/main/MainActivity.java

@@ -5,7 +5,10 @@ import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
 import android.text.TextUtils;
+import android.view.LayoutInflater;
 import android.view.MenuItem;
+import android.view.View;
+import android.widget.TextView;
 
 import com.alibaba.android.arouter.facade.annotation.Route;
 import com.common.im.ui.MessageFragment;
@@ -25,6 +28,8 @@ import com.cooleshow.usercenter.bean.UserInfo;
 import com.cooleshow.usercenter.helper.UserHelper;
 import com.daya.live_teaching.common.ResultCallback;
 import com.daya.live_teaching.im.IMManager;
+import com.google.android.material.bottomnavigation.BottomNavigationItemView;
+import com.google.android.material.bottomnavigation.BottomNavigationMenuView;
 import com.google.android.material.bottomnavigation.BottomNavigationView;
 import com.tbruyelle.rxpermissions3.RxPermissions;
 import com.tencent.open.im.IM;
@@ -39,6 +44,7 @@ import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.fragment.app.Fragment;
 
+import io.rong.imkit.manager.UnReadMessageManager;
 import io.rong.imlib.RongIMClient;
 
 import static com.cooleshow.base.constanst.Constants.MAIN_PAGE_SELECT_POTION_KEY;
@@ -47,11 +53,12 @@ import static com.cooleshow.base.constanst.Constants.MAIN_PAGE_SELECT_POTION_KEY
  * Author by pq, Date on 2022/4/20.
  */
 @Route(path = RouterPath.APPCenter.PATH_HOME)
-public class MainActivity extends BaseMVPActivity<ActivityMainBinding, MainPresenter> implements MainContract.MainView {
+public class MainActivity extends BaseMVPActivity<ActivityMainBinding, MainPresenter> implements MainContract.MainView, UnReadMessageManager.IUnReadMessageObserver {
     private ArrayList<Fragment> mFragments = new ArrayList<>();
     private HomeFragment mHomeFragment;
     private MineFragment mMineFragment;
     private MallFragment shopMallFragment;
+    private TextView tvMsgCount;
 
     /**
      * 打开首页并选中指定tab
@@ -99,6 +106,12 @@ public class MainActivity extends BaseMVPActivity<ActivityMainBinding, MainPrese
 
     @Override
     protected void initView() {
+        BottomNavigationMenuView menuView = (BottomNavigationMenuView) viewBinding.navigation.getChildAt(0);
+        BottomNavigationItemView messageTab = (BottomNavigationItemView) menuView.getChildAt(2);
+        View badge = LayoutInflater.from(this).inflate(com.cooleshow.base.R.layout.im_badge, menuView, false);
+        tvMsgCount = badge.findViewById(com.cooleshow.base.R.id.tv_msg_count);
+        messageTab.addView(badge);
+
         HomePageAdapter homePageAdapter = new HomePageAdapter(this);
         mHomeFragment = new HomeFragment();
         CourseTableFragment courseTableFragment = new CourseTableFragment();
@@ -149,6 +162,7 @@ public class MainActivity extends BaseMVPActivity<ActivityMainBinding, MainPrese
     public void initData() {
         super.initData();
         requestPermission();
+        IMManager.getInstance().addOnUnReadMessageListener(this);
     }
 
     /**
@@ -271,8 +285,23 @@ public class MainActivity extends BaseMVPActivity<ActivityMainBinding, MainPrese
     }
 
     @Override
+    public void onCountChanged(int count) {
+        if (count > 0) {
+            tvMsgCount.setVisibility(View.VISIBLE);
+            if (count <= 99) {
+                tvMsgCount.setText(String.valueOf(count));
+            } else {
+                tvMsgCount.setText("99+");
+            }
+        } else {
+            tvMsgCount.setVisibility(View.GONE);
+        }
+    }
+
+    @Override
     public void onDestroy() {
         super.onDestroy();
         EventBus.getDefault().unregister(this);
+        IMManager.getInstance().removeOnUnReadMessageListener(this);
     }
 }

+ 1 - 1
teacher/src/main/java/com/cooleshow/teacher/ui/web/HtmlActivity.java

@@ -987,7 +987,7 @@ public class HtmlActivity extends BaseActivity<ActivityHtml1Binding> implements
             mCustomViewCallback = callback;
             mLayout.addView(mCustomView);
             mLayout.setVisibility(View.VISIBLE);
-//            mLayout.bringToFront();
+            mLayout.bringToFront();
             headerBbarView.setVisibility(View.GONE);
             //设置横屏
             setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

+ 12 - 0
teacher/src/main/res/layout/activity_home_page_layout.xml

@@ -102,6 +102,18 @@
         app:layout_constraintRight_toRightOf="@+id/view_top_bg"
         app:layout_constraintTop_toBottomOf="@+id/tv_nickname" />
 
+    <LinearLayout
+        android:visibility="gone"
+        android:id="@+id/ll_subject_container2"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="5dp"
+        android:orientation="horizontal"
+        app:layout_constraintLeft_toLeftOf="@+id/ll_subject_container"
+        app:layout_constraintRight_toRightOf="@+id/ll_subject_container"
+        app:layout_constraintTop_toBottomOf="@+id/ll_subject_container" />
+
+
     <RatingBar
         android:id="@+id/rating_bar"
         style="@style/HomeRatingBar"