Browse Source

增加首页消息红点

Pq 3 years ago
parent
commit
ce8011849b

+ 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);
     }
 }

+ 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);