75 lines
2.3 KiB
Java
75 lines
2.3 KiB
Java
|
|
package com.example.livestreaming;
|
|||
|
|
|
|||
|
|
import android.content.Context;
|
|||
|
|
import android.content.SharedPreferences;
|
|||
|
|
|
|||
|
|
import com.google.android.material.badge.BadgeDrawable;
|
|||
|
|
import com.google.android.material.bottomnavigation.BottomNavigationView;
|
|||
|
|
|
|||
|
|
public class UnreadMessageManager {
|
|||
|
|
|
|||
|
|
private static final String PREFS_NAME = "unread_messages";
|
|||
|
|
private static final String KEY_UNREAD_COUNT = "unread_count";
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 获取总未读消息数量
|
|||
|
|
*/
|
|||
|
|
public static int getUnreadCount(Context context) {
|
|||
|
|
SharedPreferences prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
|
|||
|
|
return prefs.getInt(KEY_UNREAD_COUNT, 0);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 设置总未读消息数量
|
|||
|
|
*/
|
|||
|
|
public static void setUnreadCount(Context context, int count) {
|
|||
|
|
SharedPreferences prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
|
|||
|
|
prefs.edit().putInt(KEY_UNREAD_COUNT, Math.max(0, count)).apply();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 增加未读消息数量
|
|||
|
|
*/
|
|||
|
|
public static void incrementUnreadCount(Context context, int increment) {
|
|||
|
|
int current = getUnreadCount(context);
|
|||
|
|
setUnreadCount(context, current + increment);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 减少未读消息数量
|
|||
|
|
*/
|
|||
|
|
public static void decrementUnreadCount(Context context, int decrement) {
|
|||
|
|
int current = getUnreadCount(context);
|
|||
|
|
setUnreadCount(context, Math.max(0, current - decrement));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 更新底部导航栏的消息徽章
|
|||
|
|
*/
|
|||
|
|
public static void updateBadge(BottomNavigationView bottomNav) {
|
|||
|
|
if (bottomNav == null) return;
|
|||
|
|
|
|||
|
|
Context context = bottomNav.getContext();
|
|||
|
|
int unreadCount = getUnreadCount(context);
|
|||
|
|
|
|||
|
|
BadgeDrawable badge = bottomNav.getOrCreateBadge(R.id.nav_messages);
|
|||
|
|
|
|||
|
|
if (unreadCount > 0) {
|
|||
|
|
badge.setVisible(true);
|
|||
|
|
badge.setNumber(unreadCount);
|
|||
|
|
// BadgeDrawable 会自动处理超过 99 的情况,显示 "99+"
|
|||
|
|
} else {
|
|||
|
|
badge.setVisible(false);
|
|||
|
|
badge.clearNumber();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 清除未读消息数量(当用户进入消息页面时)
|
|||
|
|
*/
|
|||
|
|
public static void clearUnreadCount(Context context) {
|
|||
|
|
setUnreadCount(context, 0);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|