zhibo/android-app/app/src/main/java/com/example/livestreaming/NotificationSettingsActivity.java

141 lines
5.9 KiB
Java
Raw Normal View History

2025-12-23 12:39:14 +08:00
package com.example.livestreaming;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Switch;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.example.livestreaming.databinding.ActivityNotificationSettingsBinding;
import java.util.ArrayList;
import java.util.List;
/**
* 通知设置页面
* 支持各类通知开关和免打扰设置
*/
public class NotificationSettingsActivity extends AppCompatActivity {
private static final String PREFS_NAME = "notification_settings";
private static final String KEY_SYSTEM_NOTIFICATIONS = "system_notifications";
private static final String KEY_FOLLOW_NOTIFICATIONS = "follow_notifications";
private static final String KEY_COMMENT_NOTIFICATIONS = "comment_notifications";
private static final String KEY_MESSAGE_NOTIFICATIONS = "message_notifications";
private static final String KEY_LIVE_NOTIFICATIONS = "live_notifications";
private static final String KEY_DND_ENABLED = "dnd_enabled";
private static final String KEY_DND_START_HOUR = "dnd_start_hour";
private static final String KEY_DND_END_HOUR = "dnd_end_hour";
private ActivityNotificationSettingsBinding binding;
private MoreAdapter adapter;
private SharedPreferences prefs;
public static void start(Context context) {
Intent intent = new Intent(context, NotificationSettingsActivity.class);
context.startActivity(intent);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityNotificationSettingsBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
prefs = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
binding.backButton.setOnClickListener(v -> finish());
binding.titleText.setText("通知设置");
adapter = new MoreAdapter(item -> {
if (item == null) return;
if (item.getType() != MoreItem.Type.ROW) return;
handleItemClick(item);
});
binding.recyclerView.setLayoutManager(new LinearLayoutManager(this));
binding.recyclerView.setAdapter(adapter);
refreshItems();
}
private void handleItemClick(MoreItem item) {
String title = item.getTitle() != null ? item.getTitle() : "";
if ("免打扰".equals(title)) {
showDoNotDisturbDialog();
}
}
private void refreshItems() {
List<MoreItem> items = new ArrayList<>();
// 系统通知开关
items.add(MoreItem.section("系统通知"));
boolean systemEnabled = prefs.getBoolean(KEY_SYSTEM_NOTIFICATIONS, true);
items.add(MoreItem.row("系统通知", systemEnabled ? "已开启" : "已关闭", R.drawable.ic_notifications_24));
// 消息提醒
items.add(MoreItem.section("消息提醒"));
boolean followEnabled = prefs.getBoolean(KEY_FOLLOW_NOTIFICATIONS, true);
boolean commentEnabled = prefs.getBoolean(KEY_COMMENT_NOTIFICATIONS, true);
boolean messageEnabled = prefs.getBoolean(KEY_MESSAGE_NOTIFICATIONS, true);
boolean liveEnabled = prefs.getBoolean(KEY_LIVE_NOTIFICATIONS, true);
items.add(MoreItem.row("关注提醒", followEnabled ? "已开启" : "已关闭", R.drawable.ic_people_24));
items.add(MoreItem.row("评论提醒", commentEnabled ? "已开启" : "已关闭", R.drawable.ic_chat_24));
items.add(MoreItem.row("私信提醒", messageEnabled ? "已开启" : "已关闭", R.drawable.ic_chat_24));
items.add(MoreItem.row("开播提醒", liveEnabled ? "已开启" : "已关闭", R.drawable.ic_notifications_24));
// 免打扰
items.add(MoreItem.section("免打扰"));
boolean dndEnabled = prefs.getBoolean(KEY_DND_ENABLED, false);
if (dndEnabled) {
int startHour = prefs.getInt(KEY_DND_START_HOUR, 22);
int endHour = prefs.getInt(KEY_DND_END_HOUR, 8);
items.add(MoreItem.row("免打扰", String.format("%02d:00 - %02d:00", startHour, endHour), R.drawable.ic_notifications_24));
} else {
items.add(MoreItem.row("免打扰", "未开启", R.drawable.ic_notifications_24));
}
adapter.submitList(items);
}
private void showDoNotDisturbDialog() {
// 简单的免打扰设置对话框
boolean currentEnabled = prefs.getBoolean(KEY_DND_ENABLED, false);
int startHour = prefs.getInt(KEY_DND_START_HOUR, 22);
int endHour = prefs.getInt(KEY_DND_END_HOUR, 8);
String message = "免打扰功能说明:\n\n" +
"• 开启后,在指定时间段内不会收到通知\n" +
"• 当前设置:" + (currentEnabled ?
String.format("已开启 (%02d:00 - %02d:00)", startHour, endHour) : "未开启") + "\n" +
"• 紧急通知仍会显示\n\n" +
"(此功能待完善)";
new android.app.AlertDialog.Builder(this)
.setTitle("免打扰设置")
.setMessage(message)
.setPositiveButton("开启", (dialog, which) -> {
prefs.edit().putBoolean(KEY_DND_ENABLED, true).apply();
refreshItems();
Toast.makeText(this, "免打扰已开启", Toast.LENGTH_SHORT).show();
})
.setNeutralButton(currentEnabled ? "关闭" : "取消", (dialog, which) -> {
if (currentEnabled) {
prefs.edit().putBoolean(KEY_DND_ENABLED, false).apply();
refreshItems();
Toast.makeText(this, "免打扰已关闭", Toast.LENGTH_SHORT).show();
}
})
.show();
}
}