refactor: 将'特殊通道'重命名为'绿色通道'

- 重命名 LimitedTimeSpecialChannelService → LimitedTimeGreenChannelService
- 重命名 LimitedTimeSpecialChannelView → LimitedTimeGreenChannelView
- 重命名 view_limitedtimespecialchannel.xml → view_limitedtimegreenchannel.xml
- 更新 activity_settings.xml 显示文本和控件引用
- 更新 AndroidManifest.xml Service 注册
- 更新 Rules.java 和 UnitTestActivity.java 引用
- 更新所有日志和注释中的'特殊'为'绿色'

BREAKING CHANGE: 类名和布局文件名已变更,外部引用需同步更新
This commit is contained in:
MiMo
2026-07-20 13:22:09 +08:00
parent 54497d8adb
commit 405ebe41db
7 changed files with 36 additions and 36 deletions
+1 -1
View File
@@ -254,7 +254,7 @@
<activity android:name="cc.winboll.studio.contacts.activities.AboutActivity"/> <activity android:name="cc.winboll.studio.contacts.activities.AboutActivity"/>
<service android:name="cc.winboll.studio.contacts.services.LimitedTimeSpecialChannelService"/> <service android:name="cc.winboll.studio.contacts.services.LimitedTimeGreenChannelService"/>
<activity android:name="cc.winboll.studio.contacts.unittest.LayoutDraftPreViewActivity"/> <activity android:name="cc.winboll.studio.contacts.unittest.LayoutDraftPreViewActivity"/>
@@ -7,7 +7,7 @@ import androidx.appcompat.app.AppCompatActivity;
import cc.winboll.studio.contacts.R; import cc.winboll.studio.contacts.R;
import cc.winboll.studio.contacts.activities.SettingsActivity; import cc.winboll.studio.contacts.activities.SettingsActivity;
import cc.winboll.studio.contacts.dun.Rules; import cc.winboll.studio.contacts.dun.Rules;
import cc.winboll.studio.contacts.services.LimitedTimeSpecialChannelService; import cc.winboll.studio.contacts.services.LimitedTimeGreenChannelService;
import cc.winboll.studio.contacts.utils.IntUtils; import cc.winboll.studio.contacts.utils.IntUtils;
import cc.winboll.studio.libaes.interfaces.IWinBoLLActivity; import cc.winboll.studio.libaes.interfaces.IWinBoLLActivity;
import cc.winboll.studio.libappbase.LogUtils; import cc.winboll.studio.libappbase.LogUtils;
@@ -122,7 +122,7 @@ public class UnitTestActivity extends WinBollActivity implements IWinBoLLActivit
new Thread(new Runnable(){ new Thread(new Runnable(){
@Override @Override
public void run() { public void run() {
LimitedTimeSpecialChannelService.unitTest(UnitTestActivity.this); LimitedTimeGreenChannelService.unitTest(UnitTestActivity.this);
} }
}).start(); }).start();
} }
@@ -5,7 +5,7 @@ import cc.winboll.studio.contacts.activities.SettingsActivity;
import cc.winboll.studio.contacts.bobulltoon.TomCat; import cc.winboll.studio.contacts.bobulltoon.TomCat;
import cc.winboll.studio.contacts.model.PhoneConnectRuleBean; import cc.winboll.studio.contacts.model.PhoneConnectRuleBean;
import cc.winboll.studio.contacts.model.SettingsBean; import cc.winboll.studio.contacts.model.SettingsBean;
import cc.winboll.studio.contacts.services.LimitedTimeSpecialChannelService; import cc.winboll.studio.contacts.services.LimitedTimeGreenChannelService;
import cc.winboll.studio.contacts.services.MainService; import cc.winboll.studio.contacts.services.MainService;
import cc.winboll.studio.contacts.utils.ContactUtils; import cc.winboll.studio.contacts.utils.ContactUtils;
import cc.winboll.studio.contacts.utils.IntUtils; import cc.winboll.studio.contacts.utils.IntUtils;
@@ -172,9 +172,9 @@ public class Rules {
LogUtils.d(TAG, String.format("isDefend == %s\nisConnect == %s", isDefend, isConnect)); LogUtils.d(TAG, String.format("isDefend == %s\nisConnect == %s", isDefend, isConnect));
} }
// 限时特殊通道打开时返回连接 // 限时绿色通道打开时返回连接
if (!isDefend && LimitedTimeSpecialChannelService.isServiceRunning()) { if (!isDefend && LimitedTimeGreenChannelService.isServiceRunning()) {
LogUtils.d(TAG, String.format("PhoneNumber %s\n and Limited Time Special Channel Service Is Running.", phoneNumber)); LogUtils.d(TAG, String.format("PhoneNumber %s\n and Limited Time Green Channel Service Is Running.", phoneNumber));
isDefend = true; isDefend = true;
isConnect = true; isConnect = true;
LogUtils.d(TAG, String.format("isDefend == %s\nisConnect == %s", isDefend, isConnect)); LogUtils.d(TAG, String.format("isDefend == %s\nisConnect == %s", isDefend, isConnect));
@@ -13,17 +13,17 @@ import cc.winboll.studio.libappbase.LogUtils;
* @Author 豆包&ZhanGSKen<zhangsken@qq.com> * @Author 豆包&ZhanGSKen<zhangsken@qq.com>
* @Date 2026/04/18 15:00:00 (GMT+8) * @Date 2026/04/18 15:00:00 (GMT+8)
* @LastEditTime 2026/04/22 17:20:00 (GMT+8) * @LastEditTime 2026/04/22 17:20:00 (GMT+8)
* @Describe 限时特殊通道服务 * @Describe 限时绿色通道服务
* 提供安全的服务启动令牌校验及循环任务管理 * 提供安全的服务启动令牌校验及循环任务管理
* 新增功能 * 新增功能
* 1. 计时过程中实时输出剩余秒数 * 1. 计时过程中实时输出剩余秒数
* 2. 服务销毁前发送本地广播通知应用内其他组件并携带剩余秒数信息 * 2. 服务销毁前发送本地广播通知应用内其他组件并携带剩余秒数信息
* 3. 每秒发送一次倒计时状态的本地广播 * 3. 每秒发送一次倒计时状态的本地广播
*/ */
public class LimitedTimeSpecialChannelService extends Service { public class LimitedTimeGreenChannelService extends Service {
// ========================= 常量定义 ========================= // ========================= 常量定义 =========================
public static final String TAG = "LimitedTimeSpecialChannelService"; public static final String TAG = "LimitedTimeGreenChannelService";
public static final String EXTRA_DELAY_MILLIS = "EXTRA_DELAY_MILLIS"; public static final String EXTRA_DELAY_MILLIS = "EXTRA_DELAY_MILLIS";
private static final String EXTRA_SECURITY_TOKEN = "EXTRA_SECURITY_TOKEN"; private static final String EXTRA_SECURITY_TOKEN = "EXTRA_SECURITY_TOKEN";
@@ -44,7 +44,7 @@ public class LimitedTimeSpecialChannelService extends Service {
*/ */
public static final String mValidToken = "VALID_TOKEN_" + System.currentTimeMillis(); public static final String mValidToken = "VALID_TOKEN_" + System.currentTimeMillis();
private static volatile LimitedTimeSpecialChannelService sInstance = null; private static volatile LimitedTimeGreenChannelService sInstance = null;
private static volatile boolean sIsServiceRunning = false; private static volatile boolean sIsServiceRunning = false;
// ========================= 成员变量 ========================= // ========================= 成员变量 =========================
@@ -73,7 +73,7 @@ public class LimitedTimeSpecialChannelService extends Service {
} }
// 构建Intent传递参数 // 构建Intent传递参数
Intent intent = new Intent(context, LimitedTimeSpecialChannelService.class); Intent intent = new Intent(context, LimitedTimeGreenChannelService.class);
intent.putExtra(EXTRA_SECURITY_TOKEN, mValidToken); intent.putExtra(EXTRA_SECURITY_TOKEN, mValidToken);
intent.putExtra(EXTRA_DELAY_MILLIS, delayMillis); intent.putExtra(EXTRA_DELAY_MILLIS, delayMillis);
@@ -93,7 +93,7 @@ public class LimitedTimeSpecialChannelService extends Service {
LogUtils.w(TAG, "停止失败,上下文为null"); LogUtils.w(TAG, "停止失败,上下文为null");
return; return;
} }
Intent intent = new Intent(context, LimitedTimeSpecialChannelService.class); Intent intent = new Intent(context, LimitedTimeGreenChannelService.class);
context.stopService(intent); context.stopService(intent);
LogUtils.i(TAG, "服务停止命令已发出"); LogUtils.i(TAG, "服务停止命令已发出");
} }
@@ -13,7 +13,7 @@ import android.widget.LinearLayout;
import android.widget.Switch; import android.widget.Switch;
import androidx.localbroadcastmanager.content.LocalBroadcastManager; import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import cc.winboll.studio.contacts.R; import cc.winboll.studio.contacts.R;
import cc.winboll.studio.contacts.services.LimitedTimeSpecialChannelService; import cc.winboll.studio.contacts.services.LimitedTimeGreenChannelService;
import cc.winboll.studio.libappbase.LogUtils; import cc.winboll.studio.libappbase.LogUtils;
import cc.winboll.studio.libappbase.ToastUtils; import cc.winboll.studio.libappbase.ToastUtils;
@@ -21,7 +21,7 @@ import cc.winboll.studio.libappbase.ToastUtils;
* @Author 豆包&ZhanGSKen<zhangsken@qq.com> * @Author 豆包&ZhanGSKen<zhangsken@qq.com>
* @Date 2026/04/18 15:05:00 (GMT+8) * @Date 2026/04/18 15:05:00 (GMT+8)
* @LastEditTime 2026/04/22 17:30:00 (GMT+8) * @LastEditTime 2026/04/22 17:30:00 (GMT+8)
* @Describe 限时特殊通道视图 * @Describe 限时绿色通道视图
* 功能说明 * 功能说明
* 1. Switch 打开时EditText 不可编辑布局背景变为绿色加减按钮不可用 * 1. Switch 打开时EditText 不可编辑布局背景变为绿色加减按钮不可用
* 2. Switch 关闭时EditText 可编辑布局背景恢复为白色加减按钮恢复可用 * 2. Switch 关闭时EditText 可编辑布局背景恢复为白色加减按钮恢复可用
@@ -31,10 +31,10 @@ import cc.winboll.studio.libappbase.ToastUtils;
* 6. 新增快速设置按钮(btn_thisSeconds)点击直接设置为当前量级3600秒 * 6. 新增快速设置按钮(btn_thisSeconds)点击直接设置为当前量级3600秒
* 7. [新增] 服务销毁时恢复EditText显示为倒计时剩余秒数 * 7. [新增] 服务销毁时恢复EditText显示为倒计时剩余秒数
*/ */
public class LimitedTimeSpecialChannelView extends LinearLayout { public class LimitedTimeGreenChannelView extends LinearLayout {
// ====================== 常量定义 ========================= // ====================== 常量定义 =========================
public static final String TAG = "LimitedTimeSpecialChannelView"; public static final String TAG = "LimitedTimeGreenChannelView";
// 定义秒数增量的量级 // 定义秒数增量的量级
private static final long SECONDS_INCREMENT = 3600; private static final long SECONDS_INCREMENT = 3600;
@@ -50,17 +50,17 @@ public class LimitedTimeSpecialChannelView extends LinearLayout {
private android.content.BroadcastReceiver mCountdownReceiver; private android.content.BroadcastReceiver mCountdownReceiver;
// ====================== 构造函数 ========================= // ====================== 构造函数 =========================
public LimitedTimeSpecialChannelView(Context context) { public LimitedTimeGreenChannelView(Context context) {
super(context); super(context);
initView(context); initView(context);
} }
public LimitedTimeSpecialChannelView(Context context, AttributeSet attrs) { public LimitedTimeGreenChannelView(Context context, AttributeSet attrs) {
super(context, attrs); super(context, attrs);
initView(context); initView(context);
} }
public LimitedTimeSpecialChannelView(Context context, AttributeSet attrs, int defStyleAttr) { public LimitedTimeGreenChannelView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr); super(context, attrs, defStyleAttr);
initView(context); initView(context);
} }
@@ -71,7 +71,7 @@ public class LimitedTimeSpecialChannelView extends LinearLayout {
this.mContext = context; this.mContext = context;
// 加载布局文件 // 加载布局文件
LayoutInflater.from(context).inflate(R.layout.view_limitedtimespecialchannel, this, true); LayoutInflater.from(context).inflate(R.layout.view_limitedtimegreenchannel, this, true);
LogUtils.i(TAG, "布局文件加载完成"); LogUtils.i(TAG, "布局文件加载完成");
// 绑定控件ID // 绑定控件ID
@@ -192,9 +192,9 @@ public class LimitedTimeSpecialChannelView extends LinearLayout {
updateUIState(!isChecked); updateUIState(!isChecked);
if (isChecked) { if (isChecked) {
startLimitedTimeSpecialChannelService(); startLimitedTimeGreenChannelService();
} else { } else {
LimitedTimeSpecialChannelService.stopService(mContext); LimitedTimeGreenChannelService.stopService(mContext);
} }
} }
}); });
@@ -222,11 +222,11 @@ public class LimitedTimeSpecialChannelView extends LinearLayout {
*/ */
private void registerServiceDestroyedListener() { private void registerServiceDestroyedListener() {
LogUtils.i(TAG, "注册服务销毁广播监听"); LogUtils.i(TAG, "注册服务销毁广播监听");
IntentFilter filter = new IntentFilter(LimitedTimeSpecialChannelService.ACTION_SERVICE_DESTROYED); IntentFilter filter = new IntentFilter(LimitedTimeGreenChannelService.ACTION_SERVICE_DESTROYED);
LocalBroadcastManager.getInstance(mContext).registerReceiver(new android.content.BroadcastReceiver() { LocalBroadcastManager.getInstance(mContext).registerReceiver(new android.content.BroadcastReceiver() {
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
if (LimitedTimeSpecialChannelService.ACTION_SERVICE_DESTROYED.equals(intent.getAction())) { if (LimitedTimeGreenChannelService.ACTION_SERVICE_DESTROYED.equals(intent.getAction())) {
LogUtils.i(TAG, "收到服务销毁广播,执行恢复操作"); LogUtils.i(TAG, "收到服务销毁广播,执行恢复操作");
// 1. 恢复开关状态 // 1. 恢复开关状态
@@ -236,7 +236,7 @@ public class LimitedTimeSpecialChannelView extends LinearLayout {
// 2. [核心修改] 检索并设置倒计时剩余秒数参数 // 2. [核心修改] 检索并设置倒计时剩余秒数参数
// 从广播附加数据中获取之前服务发送的剩余秒数 // 从广播附加数据中获取之前服务发送的剩余秒数
long remainingSeconds = intent.getLongExtra(LimitedTimeSpecialChannelService.EXTRA_REMAINING_SECONDS, 0); long remainingSeconds = intent.getLongExtra(LimitedTimeGreenChannelService.EXTRA_REMAINING_SECONDS, 0);
// 实际倒计时消耗冲正 // 实际倒计时消耗冲正
remainingSeconds -= 1; remainingSeconds -= 1;
// 倒计时秒数0值保底 // 倒计时秒数0值保底
@@ -266,8 +266,8 @@ public class LimitedTimeSpecialChannelView extends LinearLayout {
mCountdownReceiver = new android.content.BroadcastReceiver() { mCountdownReceiver = new android.content.BroadcastReceiver() {
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
if (LimitedTimeSpecialChannelService.ACTION_COUNTDOWN_TICK.equals(intent.getAction())) { if (LimitedTimeGreenChannelService.ACTION_COUNTDOWN_TICK.equals(intent.getAction())) {
long remainingSeconds = intent.getLongExtra(LimitedTimeSpecialChannelService.EXTRA_REMAINING_SECONDS, 0); long remainingSeconds = intent.getLongExtra(LimitedTimeGreenChannelService.EXTRA_REMAINING_SECONDS, 0);
if (mEtSeconds != null) { if (mEtSeconds != null) {
mEtSeconds.setText(String.valueOf(remainingSeconds)); mEtSeconds.setText(String.valueOf(remainingSeconds));
} }
@@ -278,7 +278,7 @@ public class LimitedTimeSpecialChannelView extends LinearLayout {
} }
}; };
IntentFilter filter = new IntentFilter(LimitedTimeSpecialChannelService.ACTION_COUNTDOWN_TICK); IntentFilter filter = new IntentFilter(LimitedTimeGreenChannelService.ACTION_COUNTDOWN_TICK);
LocalBroadcastManager.getInstance(mContext).registerReceiver(mCountdownReceiver, filter); LocalBroadcastManager.getInstance(mContext).registerReceiver(mCountdownReceiver, filter);
LogUtils.i(TAG, "倒计时广播注册成功"); LogUtils.i(TAG, "倒计时广播注册成功");
} }
@@ -286,8 +286,8 @@ public class LimitedTimeSpecialChannelView extends LinearLayout {
/** /**
* 启动限时特殊通道服务 * 启动限时特殊通道服务
*/ */
private void startLimitedTimeSpecialChannelService() { private void startLimitedTimeGreenChannelService() {
LogUtils.i(TAG, "准备启动限时特殊通道服务"); LogUtils.i(TAG, "准备启动限时绿色通道服务");
String secondsStr = mEtSeconds.getText().toString().trim(); String secondsStr = mEtSeconds.getText().toString().trim();
if (secondsStr.isEmpty()) { if (secondsStr.isEmpty()) {
LogUtils.w(TAG, "输入框为空,使用默认值 3600 秒"); LogUtils.w(TAG, "输入框为空,使用默认值 3600 秒");
@@ -299,8 +299,8 @@ public class LimitedTimeSpecialChannelView extends LinearLayout {
long delayMillis = seconds * 1000; long delayMillis = seconds * 1000;
LogUtils.i(TAG, "启动参数 - 输入秒数: " + seconds + ", 转换毫秒: " + delayMillis); LogUtils.i(TAG, "启动参数 - 输入秒数: " + seconds + ", 转换毫秒: " + delayMillis);
//ToastUtils.show("调用 LimitedTimeSpecialChannelService 服务"); //ToastUtils.show("调用 LimitedTimeGreenChannelService 服务");
LimitedTimeSpecialChannelService.startService(mContext, delayMillis); LimitedTimeGreenChannelService.startService(mContext, delayMillis);
} catch (NumberFormatException e) { } catch (NumberFormatException e) {
LogUtils.e(TAG, "输入的秒数格式错误: " + secondsStr, e); LogUtils.e(TAG, "输入的秒数格式错误: " + secondsStr, e);
} }
@@ -67,12 +67,12 @@
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="特殊通道设置:"/> android:text="绿色通道设置:"/>
<cc.winboll.studio.contacts.views.LimitedTimeSpecialChannelView <cc.winboll.studio.contacts.views.LimitedTimeGreenChannelView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:id="@+id/view_LimitedTimeSpecialChannel"/> android:id="@+id/view_LimitedTimeGreenChannel"/>
</LinearLayout> </LinearLayout>