From 60dde070b56fda41d0a88e2b92af90dd8dabd5db Mon Sep 17 00:00:00 2001 From: pppscn <35696959@qq.com> Date: Wed, 30 Mar 2022 17:10:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E4=BB=85=E9=94=81?= =?UTF-8?q?=E5=B1=8F=E7=8A=B6=E6=80=81=E8=BD=AC=E5=8F=91APP=E9=80=9A?= =?UTF-8?q?=E7=9F=A5=E5=BC=80=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 2 +- .../idormy/sms/forwarder/MainActivity.java | 4 +-- .../idormy/sms/forwarder/MyApplication.java | 2 ++ .../idormy/sms/forwarder/SettingActivity.java | 23 +++++++++--- .../forwarder/receiver/OnePixelReceiver.java | 24 ------------- .../receiver/ScreenBroadcastReceiver.java | 35 +++++++++++++++++++ .../sms/forwarder/service/NotifyService.java | 3 ++ .../idormy/sms/forwarder/utils/Define.java | 1 + .../sms/forwarder/utils/OnePixelManager.java | 12 +++---- .../sms/forwarder/utils/SettingUtil.java | 8 +++++ app/src/main/res/layout/activity_setting.xml | 10 ++++++ app/src/main/res/values-en/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 13 files changed, 89 insertions(+), 37 deletions(-) delete mode 100644 app/src/main/java/com/idormy/sms/forwarder/receiver/OnePixelReceiver.java create mode 100644 app/src/main/java/com/idormy/sms/forwarder/receiver/ScreenBroadcastReceiver.java diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 3d53445f..3a307982 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -163,7 +163,7 @@ - + { + SettingUtil.switchNotUserPresent(isChecked); + Log.d(TAG, "switchNotUserPresent:" + isChecked); + + //1像素透明Activity保活 or 仅锁屏状态转发APP通知 + OnePixelManager onePixelManager = new OnePixelManager(); + if (SettingUtil.getOnePixelActivity() || SettingUtil.getSwitchNotUserPresent()) { + onePixelManager.registerOnePixelReceiver(this);//注册广播接收者 + } else { + onePixelManager.unregisterOnePixelReceiver(this); + } + }); } //请求通知使用权限 @@ -770,14 +784,15 @@ public class SettingActivity extends AppCompatActivity { switch_one_pixel_activity.setOnCheckedChangeListener((buttonView, isChecked) -> { SettingUtil.switchOnePixelActivity(isChecked); + Log.d(TAG, "onCheckedChanged:" + isChecked); + //1像素透明Activity保活 or 仅锁屏状态转发APP通知 OnePixelManager onePixelManager = new OnePixelManager(); - if (isChecked) { + if (SettingUtil.getOnePixelActivity() || SettingUtil.getSwitchNotUserPresent()) { onePixelManager.registerOnePixelReceiver(this);//注册广播接收者 } else { onePixelManager.unregisterOnePixelReceiver(this); } - Log.d(TAG, "onCheckedChanged:" + isChecked); }); } diff --git a/app/src/main/java/com/idormy/sms/forwarder/receiver/OnePixelReceiver.java b/app/src/main/java/com/idormy/sms/forwarder/receiver/OnePixelReceiver.java deleted file mode 100644 index 20cf6116..00000000 --- a/app/src/main/java/com/idormy/sms/forwarder/receiver/OnePixelReceiver.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.idormy.sms.forwarder.receiver; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; - -import com.idormy.sms.forwarder.utils.OnePixelManager; - - -public class OnePixelReceiver extends BroadcastReceiver { - private static final String TAG = "OnePixelReceiver"; - - @Override - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - OnePixelManager manager = new OnePixelManager(); - if (Intent.ACTION_SCREEN_ON.equals(action)) {//如果亮屏,则关闭1像素Activity - manager.finishOnePixelActivity(); - } else if (Intent.ACTION_SCREEN_OFF.equals(action)) {//如果息屏,则开启1像素Activity - manager.startOnePixelActivity(context); - } - } -} - diff --git a/app/src/main/java/com/idormy/sms/forwarder/receiver/ScreenBroadcastReceiver.java b/app/src/main/java/com/idormy/sms/forwarder/receiver/ScreenBroadcastReceiver.java new file mode 100644 index 00000000..6a9732c1 --- /dev/null +++ b/app/src/main/java/com/idormy/sms/forwarder/receiver/ScreenBroadcastReceiver.java @@ -0,0 +1,35 @@ +package com.idormy.sms.forwarder.receiver; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.util.Log; + +import com.idormy.sms.forwarder.MyApplication; +import com.idormy.sms.forwarder.utils.OnePixelManager; +import com.idormy.sms.forwarder.utils.SettingUtil; + +//监听屏幕状态变换广播(开屏、锁屏、解锁) +public class ScreenBroadcastReceiver extends BroadcastReceiver { + private static final String TAG = "ScreenBroadcastReceiver"; + + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + + //1像素透明Activity保活 + if (SettingUtil.getOnePixelActivity()) { + OnePixelManager manager = new OnePixelManager(); + if (Intent.ACTION_SCREEN_ON.equals(action)) {//如果亮屏,则关闭1像素Activity + manager.finishOnePixelActivity(); + } else if (Intent.ACTION_SCREEN_OFF.equals(action)) {//如果息屏,则开启1像素Activity + manager.startOnePixelActivity(context); + } + } + + //是否已解锁 + MyApplication.isUserPresent = Intent.ACTION_USER_PRESENT.equals(action); + Log.d(TAG, String.format("isUserPresent=%s", MyApplication.isUserPresent)); + } +} + diff --git a/app/src/main/java/com/idormy/sms/forwarder/service/NotifyService.java b/app/src/main/java/com/idormy/sms/forwarder/service/NotifyService.java index caa6ae21..70d5ca4d 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/service/NotifyService.java +++ b/app/src/main/java/com/idormy/sms/forwarder/service/NotifyService.java @@ -42,6 +42,9 @@ public class NotifyService extends NotificationListenerService { if (sbn.getNotification() == null) return; if (sbn.getNotification().extras == null) return; + //仅锁屏状态转发APP通知 + if (SettingUtil.getSwitchNotUserPresent() && MyApplication.isUserPresent) return; + //推送通知的应用包名 String packageName = sbn.getPackageName(); //自身通知跳过 diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/Define.java b/app/src/main/java/com/idormy/sms/forwarder/utils/Define.java index b1a5c8f0..95cdd3ee 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/Define.java +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/Define.java @@ -10,6 +10,7 @@ public class Define { public static final String SP_MSG_KEY_STRING_ENABLE_PHONE = "tsms_msg_key_switch_enable_phone"; public static final String SP_MSG_KEY_STRING_ENABLE_APP_NOTIFY = "tsms_msg_key_switch_enable_app_notify"; public static final String SP_MSG_KEY_STRING_CANCEL_APP_NOTIFY = "tsms_msg_key_switch_cancel_app_notify"; + public static final String SP_MSG_KEY_STRING_NOT_USER_PRESENT = "tsms_msg_key_switch_not_user_present"; public static final String SP_MSG_KEY_STRING_ENABLE_EXCLUDE_FROM_RECENTS = "tsms_msg_key_switch_enable_exclude_from_recents"; public static final String SP_MSG_KEY_STRING_ENABLE_PLAY_SILENCE_MUSIC = "tsms_msg_key_switch_enable_play_silence_music"; public static final String SP_MSG_KEY_STRING_ENABLE_ONE_PIXEL_ACTIVITY = "tsms_msg_key_switch_enable_one_pixel_activity"; diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/OnePixelManager.java b/app/src/main/java/com/idormy/sms/forwarder/utils/OnePixelManager.java index b36782a8..fdeccbdb 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/OnePixelManager.java +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/OnePixelManager.java @@ -6,14 +6,14 @@ import android.content.Intent; import android.content.IntentFilter; import com.idormy.sms.forwarder.OnePixelActivity; -import com.idormy.sms.forwarder.receiver.OnePixelReceiver; +import com.idormy.sms.forwarder.receiver.ScreenBroadcastReceiver; import java.lang.ref.WeakReference; public class OnePixelManager { private static final String TAG = "OnePixelManager"; private WeakReference mActivity; - private OnePixelReceiver onePixelReceiver; + private ScreenBroadcastReceiver screenBroadcastReceiver; /** * 一像素广播接收者注册方法。该方法中初始化OnePixelReceiver,并添加了过滤条件 @@ -24,16 +24,16 @@ public class OnePixelManager { filter.addAction(Intent.ACTION_SCREEN_OFF); filter.addAction(Intent.ACTION_SCREEN_ON); filter.addAction(Intent.ACTION_USER_PRESENT); - onePixelReceiver = new OnePixelReceiver(); - context.registerReceiver(onePixelReceiver, filter); + screenBroadcastReceiver = new ScreenBroadcastReceiver(); + context.registerReceiver(screenBroadcastReceiver, filter); } /** * 对广播接收者进行解注册 */ public void unregisterOnePixelReceiver(Context context) { - if (null != onePixelReceiver) { - context.unregisterReceiver(onePixelReceiver); + if (null != screenBroadcastReceiver) { + context.unregisterReceiver(screenBroadcastReceiver); } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/SettingUtil.java b/app/src/main/java/com/idormy/sms/forwarder/utils/SettingUtil.java index 558bef1f..8005c7c4 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/SettingUtil.java +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/SettingUtil.java @@ -77,6 +77,14 @@ public class SettingUtil { return sp_setting.getBoolean(Define.SP_MSG_KEY_STRING_CANCEL_APP_NOTIFY, false); } + public static void switchNotUserPresent(Boolean enable) { + sp_setting.edit().putBoolean(Define.SP_MSG_KEY_STRING_NOT_USER_PRESENT, enable).apply(); + } + + public static boolean getSwitchNotUserPresent() { + return sp_setting.getBoolean(Define.SP_MSG_KEY_STRING_NOT_USER_PRESENT, false); + } + public static void switchEnableBatteryReceiver(Boolean enable) { sp_setting.edit().putBoolean(Define.SP_MSG_KEY_STRING_BATTERY_RECEIVER, enable).apply(); } diff --git a/app/src/main/res/layout/activity_setting.xml b/app/src/main/res/layout/activity_setting.xml index 2d68fd90..e3cbbd87 100644 --- a/app/src/main/res/layout/activity_setting.xml +++ b/app/src/main/res/layout/activity_setting.xml @@ -222,6 +222,16 @@ android:scaleX="0.7" android:scaleY="0.7" android:text="@string/cancel_app_notify" /> + + + diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index 0fcdfba1..936c6c84 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -189,6 +189,7 @@ Forward app Ntf. Main switch, requires permission to read notification. Auto close Ntf. + Not User Present Global Custom Template Priority: custom template for forwarding rules > Global custom template > System default Enable regular replacement content diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index eb0eb6b5..7517a59e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -189,6 +189,7 @@ 转发应用通知 请授予通知使用权再开启;开启“自动消除”可避免多条通知堆叠 自动消除通知 + 仅锁屏状态 启用自定义模版 优先级:转发规则的自定义模板 > 全局自定义模版 > 默认 启用正则替换内容