From be36ada07fc762b68c9881a6eeefeed768bb694f Mon Sep 17 00:00:00 2001 From: pppscn <35696959@qq.com> Date: Fri, 22 Dec 2023 13:18:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=C2=B7=E5=BF=AB=E6=8D=B7=E6=8C=87=E4=BB=A4=20?= =?UTF-8?q?=EF=BC=88=E5=BC=80=E5=8F=91=E4=B8=AD=EF=BC=89=20=E7=B2=BE?= =?UTF-8?q?=E7=AE=80=EF=BC=9A=E7=95=8C=E9=9D=A2=E8=B0=83=E6=95=B4=20&=20?= =?UTF-8?q?=E5=8E=BB=E9=99=A4=E4=B8=8D=E5=B8=B8=E7=94=A8=E8=B5=84=E6=BA=90?= =?UTF-8?q?=20=E6=95=B4=E7=90=86=EF=BC=9Acode=20review?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adapter/spinner/AppListAdapterItem.kt | 28 +- .../adapter/spinner/RuleAdapterItem.kt | 47 + .../adapter/spinner/RuleSpinnerAdapter.kt | 167 ++++ .../adapter/spinner/SenderAdapterItem.kt | 74 +- .../sms/forwarder/database/dao/RuleDao.kt | 11 +- .../sms/forwarder/database/dao/SenderDao.kt | 11 +- .../sms/forwarder/database/dao/TaskDao.kt | 2 +- .../sms/forwarder/database/entity/Rule.kt | 18 +- .../database/ext/ConvertersSenderList.kt | 13 +- .../database/repository/SenderRepository.kt | 4 +- .../database/repository/TaskRepository.kt | 2 +- .../forwarder/entity/action/RuleSetting.kt | 10 + .../forwarder/entity/action/SenderSetting.kt | 10 + .../entity/action/SettingsSetting.kt | 38 + .../forwarder/fragment/RulesEditFragment.kt | 2 +- .../forwarder/fragment/SettingsFragment.kt | 8 +- .../forwarder/fragment/TasksEditFragment.kt | 31 +- .../forwarder/fragment/action/FrpcFragment.kt | 5 +- .../fragment/action/HttpServerFragment.kt | 125 +++ .../fragment/action/NotificationFragment.kt | 2 +- .../forwarder/fragment/action/RuleFragment.kt | 298 ++++++ .../fragment/action/SenderFragment.kt | 298 ++++++ .../fragment/action/SettingsFragment.kt | 487 ++++++++++ .../condition/LeaveAddressFragment.kt | 2 +- .../fragment/condition/ToAddressFragment.kt | 2 +- .../idormy/sms/forwarder/utils/Constants.kt | 17 +- .../sms/forwarder/utils/task/TaskUtils.kt | 21 +- .../sms/forwarder/workers/ActionWorker.kt | 95 +- .../ic_forwarder.webp | Bin .../ic_splash_app_logo.png | Bin .../ic_splash_company_logo.png | Bin .../icon_api_battery_query.webp | Bin .../icon_api_call_query.webp | Bin .../icon_api_clone.webp | Bin .../icon_api_contact_add.webp | Bin .../icon_api_contact_query.webp | Bin .../icon_api_location.webp | Bin .../icon_api_sms_query.webp | Bin .../icon_api_sms_send.webp | Bin .../icon_api_wol.webp | Bin .../icon_bark.webp | Bin .../icon_dingtalk.webp | Bin .../icon_dingtalk_inner.webp | Bin .../icon_email.webp | Bin .../icon_feishu.webp | Bin .../icon_feishu_app.webp | Bin .../icon_gotify.webp | Bin .../icon_pushplus.webp | Bin .../icon_serverchan.webp | Bin .../icon_sms.webp | Bin .../icon_socket.webp | Bin .../icon_telegram.webp | Bin .../icon_url_scheme.webp | Bin .../icon_webhook.webp | Bin .../icon_wework_agent.webp | Bin .../icon_wework_robot.webp | Bin .../drawable/auto_task_dialog_icon_alarm.xml | 5 - .../drawable/auto_task_dialog_icon_call.xml | 5 - .../auto_task_dialog_icon_call_enable.xml | 5 - .../drawable/auto_task_dialog_icon_media.xml | 5 - .../auto_task_dialog_icon_media_enable.xml | 5 - .../drawable/auto_task_icon_absorbed_mode.xml | 6 - .../auto_task_icon_absorbed_mode_grey.xml | 6 - .../auto_task_icon_absorbed_mode_tran.xml | 6 - .../drawable/auto_task_icon_adjust_volume.xml | 6 - .../auto_task_icon_adjust_volume_grey.xml | 6 - .../auto_task_icon_adjust_volume_tran.xml | 6 - .../res/drawable/auto_task_icon_airplane.xml | 6 - .../drawable/auto_task_icon_airplane_grey.xml | 6 - .../drawable/auto_task_icon_airplane_tran.xml | 6 - .../res/drawable/auto_task_icon_battery.xml | 2 +- .../drawable/auto_task_icon_battery_tran.xml | 6 - .../res/drawable/auto_task_icon_bluetooth.xml | 6 - .../auto_task_icon_bluetooth_device.xml | 7 - .../auto_task_icon_bluetooth_device_grey.xml | 7 - .../auto_task_icon_bluetooth_device_tran.xml | 7 - .../auto_task_icon_bluetooth_grey.xml | 6 - .../auto_task_icon_bluetooth_tran.xml | 6 - .../drawable/auto_task_icon_brightness.xml | 6 - .../auto_task_icon_brightness_grey.xml | 6 - .../auto_task_icon_brightness_tran.xml | 6 - .../drawable/auto_task_icon_charge_tran.xml | 6 - .../drawable/auto_task_icon_connect_wlan.xml | 11 - .../auto_task_icon_connect_wlan_grey.xml | 11 - .../auto_task_icon_connect_wlan_tran.xml | 11 - .../auto_task_icon_custom_time_tran.xml | 19 - .../main/res/drawable/auto_task_icon_dark.xml | 12 - .../res/drawable/auto_task_icon_dark_grey.xml | 12 - .../res/drawable/auto_task_icon_dark_tran.xml | 12 - .../auto_task_icon_default_drive_car.xml | 7 - .../auto_task_icon_default_drive_car_big.xml | 8 - .../auto_task_icon_default_get_up.xml | 6 - .../auto_task_icon_default_get_up_big.xml | 7 - .../auto_task_icon_default_listen_music.xml | 5 - ...uto_task_icon_default_listen_music_big.xml | 6 - .../drawable/auto_task_icon_default_meet.xml | 5 - .../auto_task_icon_default_meet_big.xml | 6 - .../auto_task_icon_default_noon_break.xml | 8 - .../auto_task_icon_default_noon_break_big.xml | 9 - .../auto_task_icon_default_save_power.xml | 5 - .../auto_task_icon_default_save_power_big.xml | 6 - .../drawable/auto_task_icon_default_sleep.xml | 6 - .../auto_task_icon_default_sleep_big.xml | 7 - .../auto_task_icon_default_watch_video.xml | 7 - ...auto_task_icon_default_watch_video_big.xml | 8 - .../res/drawable/auto_task_icon_dial_tone.xml | 6 - .../auto_task_icon_dial_tone_grey.xml | 6 - .../auto_task_icon_dial_tone_tran.xml | 6 - ..._task_icon_disconnect_bluetooth_device.xml | 8 - ..._icon_disconnect_bluetooth_device_grey.xml | 8 - ..._icon_disconnect_bluetooth_device_tran.xml | 8 - .../auto_task_icon_disconnect_wlan.xml | 11 - .../auto_task_icon_disconnect_wlan_grey.xml | 11 - .../auto_task_icon_disconnect_wlan_tran.xml | 11 - .../res/drawable/auto_task_icon_drive.xml | 6 - .../drawable/auto_task_icon_drive_grey.xml | 6 - .../drawable/auto_task_icon_drive_tran.xml | 6 - .../res/drawable/auto_task_icon_eye_care.xml | 6 - .../drawable/auto_task_icon_eye_care_grey.xml | 6 - .../drawable/auto_task_icon_eye_care_tran.xml | 6 - .../drawable/auto_task_icon_flashlight.xml | 6 - .../auto_task_icon_flashlight_grey.xml | 6 - .../auto_task_icon_flashlight_tran.xml | 6 - .../main/res/drawable/auto_task_icon_frpc.xml | 2 +- .../res/drawable/auto_task_icon_headset.xml | 6 - .../drawable/auto_task_icon_headset_grey.xml | 6 - .../drawable/auto_task_icon_headset_tran.xml | 6 - .../res/drawable/auto_task_icon_hotspot.xml | 10 - .../drawable/auto_task_icon_hotspot_grey.xml | 10 - .../drawable/auto_task_icon_hotspot_tran.xml | 10 - .../res/drawable/auto_task_icon_incall.xml | 6 - .../drawable/auto_task_icon_incall_grey.xml | 6 - .../drawable/auto_task_icon_incall_tran.xml | 6 - .../auto_task_icon_leave_address_tran.xml | 7 - .../drawable/auto_task_icon_location_grey.xml | 6 - .../drawable/auto_task_icon_location_tran.xml | 6 - .../auto_task_icon_lock_screen_tran.xml | 6 - .../res/drawable/auto_task_icon_meeting.xml | 6 - .../drawable/auto_task_icon_metting_grey.xml | 6 - .../drawable/auto_task_icon_metting_tran.xml | 6 - .../main/res/drawable/auto_task_icon_mute.xml | 6 - .../res/drawable/auto_task_icon_mute_grey.xml | 6 - .../res/drawable/auto_task_icon_mute_tran.xml | 6 - .../drawable/auto_task_icon_network_tran.xml | 7 - .../main/res/drawable/auto_task_icon_nfc.xml | 6 - .../res/drawable/auto_task_icon_nfc_grey.xml | 6 - .../res/drawable/auto_task_icon_nfc_tran.xml | 6 - .../drawable/auto_task_icon_notification.xml | 20 + .../auto_task_icon_notification_grey.xml | 20 + .../drawable/auto_task_icon_rotate_off.xml | 6 - .../auto_task_icon_rotate_off_grey.xml | 6 - .../auto_task_icon_rotate_off_tran.xml | 6 - .../main/res/drawable/auto_task_icon_rule.xml | 20 + .../res/drawable/auto_task_icon_rule_grey.xml | 20 + .../drawable/auto_task_icon_save_battery.xml | 6 - .../auto_task_icon_save_battery_grey.xml | 6 - .../auto_task_icon_save_battery_tran.xml | 6 - .../auto_task_icon_screen_brightness.xml | 6 - .../auto_task_icon_screen_brightness_grey.xml | 6 - .../auto_task_icon_screen_brightness_tran.xml | 6 - .../auto_task_icon_screen_display.xml | 8 - .../auto_task_icon_screen_display_grey.xml | 8 - .../auto_task_icon_screen_display_tran.xml | 8 - .../res/drawable/auto_task_icon_sender.xml | 2 +- .../res/drawable/auto_task_icon_settings.xml | 20 + .../drawable/auto_task_icon_settings_grey.xml | 20 + .../main/res/drawable/auto_task_icon_sim.xml | 2 +- .../main/res/drawable/auto_task_icon_sms.xml | 19 +- .../auto_task_icon_start_activity.xml | 6 - .../auto_task_icon_start_activity_grey.xml | 6 - .../auto_task_icon_start_activity_tran.xml | 6 - .../res/drawable/auto_task_icon_switch.xml | 6 - .../drawable/auto_task_icon_switch_grey.xml | 6 - .../drawable/auto_task_icon_switch_tran.xml | 6 - .../auto_task_icon_to_address_tran.xml | 7 - .../res/drawable/auto_task_icon_touch.xml | 7 - .../drawable/auto_task_icon_touch_grey.xml | 7 - .../drawable/auto_task_icon_touch_tran.xml | 7 - .../res/drawable/auto_task_icon_twinkle.xml | 6 - .../drawable/auto_task_icon_twinkle_grey.xml | 6 - .../drawable/auto_task_icon_twinkle_tran.xml | 6 - .../res/drawable/auto_task_icon_typeface.xml | 6 - .../drawable/auto_task_icon_typeface_grey.xml | 6 - .../drawable/auto_task_icon_typeface_tran.xml | 6 - .../main/res/drawable/auto_task_icon_wlan.xml | 9 - .../res/drawable/auto_task_icon_wlan_grey.xml | 9 - .../res/drawable/auto_task_icon_wlan_tran.xml | 9 - .../res/drawable/auto_task_icon_zen_mode.xml | 6 - .../drawable/auto_task_icon_zen_mode_grey.xml | 6 - .../drawable/auto_task_icon_zen_mode_tran.xml | 6 - app/src/main/res/drawable/ic_app.xml | 3 +- app/src/main/res/drawable/ic_phone_in.xml | 3 +- app/src/main/res/drawable/ic_phone_missed.xml | 3 +- app/src/main/res/drawable/ic_phone_out.xml | 3 +- app/src/main/res/drawable/ic_reply.xml | 3 +- app/src/main/res/drawable/ic_sim.xml | 3 +- app/src/main/res/drawable/ic_sim1.xml | 3 +- app/src/main/res/drawable/ic_sim2.xml | 3 +- app/src/main/res/drawable/ic_sms.xml | 3 +- ...sk_icon_location.xml => icon_location.xml} | 0 .../main/res/drawable/rounded_background.xml | 4 + app/src/main/res/layout/fragment_client.xml | 8 +- .../layout/fragment_client_contact_add.xml | 4 +- .../res/layout/fragment_client_sms_send.xml | 6 +- .../res/layout/fragment_client_wol_send.xml | 6 +- .../main/res/layout/fragment_rules_edit.xml | 27 +- .../main/res/layout/fragment_senders_bark.xml | 24 +- .../fragment_senders_dingtalk_group_robot.xml | 16 +- .../fragment_senders_dingtalk_inner_robot.xml | 22 +- .../res/layout/fragment_senders_email.xml | 16 +- .../res/layout/fragment_senders_feishu.xml | 10 +- .../layout/fragment_senders_feishu_app.xml | 12 +- .../res/layout/fragment_senders_gotify.xml | 8 +- .../res/layout/fragment_senders_pushplus.xml | 14 +- .../layout/fragment_senders_serverchan.xml | 8 +- .../main/res/layout/fragment_senders_sms.xml | 8 +- .../res/layout/fragment_senders_socket.xml | 26 +- .../res/layout/fragment_senders_telegram.xml | 16 +- .../layout/fragment_senders_url_scheme.xml | 4 +- .../res/layout/fragment_senders_webhook.xml | 14 +- .../layout/fragment_senders_wework_agent.xml | 134 +-- .../layout/fragment_senders_wework_robot.xml | 12 +- app/src/main/res/layout/fragment_server.xml | 41 +- app/src/main/res/layout/fragment_settings.xml | 68 +- .../layout/fragment_tasks_action_cleaner.xml | 2 +- .../res/layout/fragment_tasks_action_frpc.xml | 2 +- .../fragment_tasks_action_http_server.xml | 20 +- .../fragment_tasks_action_notification.xml | 13 +- .../res/layout/fragment_tasks_action_rule.xml | 148 +++ .../layout/fragment_tasks_action_send_sms.xml | 6 +- .../layout/fragment_tasks_action_sender.xml | 148 +++ .../layout/fragment_tasks_action_settings.xml | 863 ++++++++++++++++++ .../fragment_tasks_condition_battery.xml | 4 +- .../fragment_tasks_condition_charge.xml | 2 +- .../layout/fragment_tasks_condition_cron.xml | 4 +- ...fragment_tasks_condition_leave_address.xml | 2 +- .../fragment_tasks_condition_lock_screen.xml | 2 +- .../fragment_tasks_condition_network.xml | 2 +- .../layout/fragment_tasks_condition_sim.xml | 2 +- .../fragment_tasks_condition_to_address.xml | 2 +- .../main/res/layout/fragment_tasks_edit.xml | 6 +- app/src/main/res/layout/item_add_rule.xml | 68 ++ app/src/main/res/values-en/strings.xml | 21 +- app/src/main/res/values-zh-rCN/strings.xml | 23 +- app/src/main/res/values-zh-rTW/strings.xml | 30 +- app/src/main/res/values/strings.xml | 23 +- app/src/main/res/values/styles_widget.xml | 91 +- 247 files changed, 3430 insertions(+), 1410 deletions(-) create mode 100644 app/src/main/java/com/idormy/sms/forwarder/adapter/spinner/RuleAdapterItem.kt create mode 100644 app/src/main/java/com/idormy/sms/forwarder/adapter/spinner/RuleSpinnerAdapter.kt create mode 100644 app/src/main/java/com/idormy/sms/forwarder/entity/action/RuleSetting.kt create mode 100644 app/src/main/java/com/idormy/sms/forwarder/entity/action/SenderSetting.kt create mode 100644 app/src/main/java/com/idormy/sms/forwarder/entity/action/SettingsSetting.kt create mode 100644 app/src/main/java/com/idormy/sms/forwarder/fragment/action/RuleFragment.kt create mode 100644 app/src/main/java/com/idormy/sms/forwarder/fragment/action/SenderFragment.kt create mode 100644 app/src/main/java/com/idormy/sms/forwarder/fragment/action/SettingsFragment.kt rename app/src/main/res/{drawable => drawable-xhdpi}/ic_forwarder.webp (100%) rename app/src/main/res/{drawable => drawable-xhdpi}/ic_splash_app_logo.png (100%) rename app/src/main/res/{drawable => drawable-xhdpi}/ic_splash_company_logo.png (100%) rename app/src/main/res/{drawable => drawable-xhdpi}/icon_api_battery_query.webp (100%) rename app/src/main/res/{drawable => drawable-xhdpi}/icon_api_call_query.webp (100%) rename app/src/main/res/{drawable => drawable-xhdpi}/icon_api_clone.webp (100%) rename app/src/main/res/{drawable => drawable-xhdpi}/icon_api_contact_add.webp (100%) rename app/src/main/res/{drawable => drawable-xhdpi}/icon_api_contact_query.webp (100%) rename app/src/main/res/{drawable => drawable-xhdpi}/icon_api_location.webp (100%) rename app/src/main/res/{drawable => drawable-xhdpi}/icon_api_sms_query.webp (100%) rename app/src/main/res/{drawable => drawable-xhdpi}/icon_api_sms_send.webp (100%) rename app/src/main/res/{drawable => drawable-xhdpi}/icon_api_wol.webp (100%) rename app/src/main/res/{drawable => drawable-xhdpi}/icon_bark.webp (100%) rename app/src/main/res/{drawable => drawable-xhdpi}/icon_dingtalk.webp (100%) rename app/src/main/res/{drawable => drawable-xhdpi}/icon_dingtalk_inner.webp (100%) rename app/src/main/res/{drawable => drawable-xhdpi}/icon_email.webp (100%) rename app/src/main/res/{drawable => drawable-xhdpi}/icon_feishu.webp (100%) rename app/src/main/res/{drawable => drawable-xhdpi}/icon_feishu_app.webp (100%) rename app/src/main/res/{drawable => drawable-xhdpi}/icon_gotify.webp (100%) rename app/src/main/res/{drawable => drawable-xhdpi}/icon_pushplus.webp (100%) rename app/src/main/res/{drawable => drawable-xhdpi}/icon_serverchan.webp (100%) rename app/src/main/res/{drawable => drawable-xhdpi}/icon_sms.webp (100%) rename app/src/main/res/{drawable => drawable-xhdpi}/icon_socket.webp (100%) rename app/src/main/res/{drawable => drawable-xhdpi}/icon_telegram.webp (100%) rename app/src/main/res/{drawable => drawable-xhdpi}/icon_url_scheme.webp (100%) rename app/src/main/res/{drawable => drawable-xhdpi}/icon_webhook.webp (100%) rename app/src/main/res/{drawable => drawable-xhdpi}/icon_wework_agent.webp (100%) rename app/src/main/res/{drawable => drawable-xhdpi}/icon_wework_robot.webp (100%) delete mode 100644 app/src/main/res/drawable/auto_task_dialog_icon_alarm.xml delete mode 100644 app/src/main/res/drawable/auto_task_dialog_icon_call.xml delete mode 100644 app/src/main/res/drawable/auto_task_dialog_icon_call_enable.xml delete mode 100644 app/src/main/res/drawable/auto_task_dialog_icon_media.xml delete mode 100644 app/src/main/res/drawable/auto_task_dialog_icon_media_enable.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_absorbed_mode.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_absorbed_mode_grey.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_absorbed_mode_tran.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_adjust_volume.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_adjust_volume_grey.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_adjust_volume_tran.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_airplane.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_airplane_grey.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_airplane_tran.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_battery_tran.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_bluetooth.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_bluetooth_device.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_bluetooth_device_grey.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_bluetooth_device_tran.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_bluetooth_grey.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_bluetooth_tran.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_brightness.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_brightness_grey.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_brightness_tran.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_charge_tran.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_connect_wlan.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_connect_wlan_grey.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_connect_wlan_tran.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_custom_time_tran.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_dark.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_dark_grey.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_dark_tran.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_default_drive_car.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_default_drive_car_big.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_default_get_up.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_default_get_up_big.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_default_listen_music.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_default_listen_music_big.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_default_meet.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_default_meet_big.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_default_noon_break.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_default_noon_break_big.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_default_save_power.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_default_save_power_big.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_default_sleep.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_default_sleep_big.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_default_watch_video.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_default_watch_video_big.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_dial_tone.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_dial_tone_grey.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_dial_tone_tran.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_disconnect_bluetooth_device.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_disconnect_bluetooth_device_grey.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_disconnect_bluetooth_device_tran.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_disconnect_wlan.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_disconnect_wlan_grey.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_disconnect_wlan_tran.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_drive.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_drive_grey.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_drive_tran.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_eye_care.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_eye_care_grey.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_eye_care_tran.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_flashlight.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_flashlight_grey.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_flashlight_tran.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_headset.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_headset_grey.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_headset_tran.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_hotspot.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_hotspot_grey.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_hotspot_tran.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_incall.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_incall_grey.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_incall_tran.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_leave_address_tran.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_location_grey.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_location_tran.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_lock_screen_tran.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_meeting.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_metting_grey.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_metting_tran.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_mute.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_mute_grey.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_mute_tran.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_network_tran.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_nfc.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_nfc_grey.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_nfc_tran.xml create mode 100644 app/src/main/res/drawable/auto_task_icon_notification.xml create mode 100644 app/src/main/res/drawable/auto_task_icon_notification_grey.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_rotate_off.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_rotate_off_grey.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_rotate_off_tran.xml create mode 100644 app/src/main/res/drawable/auto_task_icon_rule.xml create mode 100644 app/src/main/res/drawable/auto_task_icon_rule_grey.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_save_battery.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_save_battery_grey.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_save_battery_tran.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_screen_brightness.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_screen_brightness_grey.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_screen_brightness_tran.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_screen_display.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_screen_display_grey.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_screen_display_tran.xml create mode 100644 app/src/main/res/drawable/auto_task_icon_settings.xml create mode 100644 app/src/main/res/drawable/auto_task_icon_settings_grey.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_start_activity.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_start_activity_grey.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_start_activity_tran.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_switch.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_switch_grey.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_switch_tran.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_to_address_tran.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_touch.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_touch_grey.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_touch_tran.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_twinkle.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_twinkle_grey.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_twinkle_tran.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_typeface.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_typeface_grey.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_typeface_tran.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_wlan.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_wlan_grey.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_wlan_tran.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_zen_mode.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_zen_mode_grey.xml delete mode 100644 app/src/main/res/drawable/auto_task_icon_zen_mode_tran.xml rename app/src/main/res/drawable/{auto_task_icon_location.xml => icon_location.xml} (100%) create mode 100644 app/src/main/res/drawable/rounded_background.xml create mode 100644 app/src/main/res/layout/fragment_tasks_action_rule.xml create mode 100644 app/src/main/res/layout/fragment_tasks_action_sender.xml create mode 100644 app/src/main/res/layout/fragment_tasks_action_settings.xml create mode 100644 app/src/main/res/layout/item_add_rule.xml diff --git a/app/src/main/java/com/idormy/sms/forwarder/adapter/spinner/AppListAdapterItem.kt b/app/src/main/java/com/idormy/sms/forwarder/adapter/spinner/AppListAdapterItem.kt index e2bafc93..23052f74 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/adapter/spinner/AppListAdapterItem.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/adapter/spinner/AppListAdapterItem.kt @@ -1,25 +1,15 @@ package com.idormy.sms.forwarder.adapter.spinner import android.graphics.drawable.Drawable -import com.xuexiang.xutil.resource.ResUtils @Suppress("unused") -class AppListAdapterItem { - - var name: String = "" - var icon: Drawable? = null +class AppListAdapterItem( + var name: String = "", + var icon: Drawable? = null, var packageName: String? = null +) { - constructor(name: String, icon: Drawable?, packageName: String?) { - this.name = name - this.icon = icon - this.packageName = packageName - } - - constructor(name: String) : this(name, null, null) - constructor(name: String, drawableId: Int, packageName: String) : this(name, ResUtils.getDrawable(drawableId), packageName) - - //注意:自定义实体需要重写对象的toString方法 + // 注意:自定义实体需要重写对象的 toString 方法 override fun toString(): String { return name } @@ -29,12 +19,8 @@ class AppListAdapterItem { return AppListAdapterItem(name) } - fun arrayof(title: Array): Array { - val array = arrayOfNulls(title.size) - for (i in array.indices) { - array[i] = AppListAdapterItem(title[i]) - } - return array + fun arrayOf(vararg titles: String): Array { + return titles.map { AppListAdapterItem(it) }.toTypedArray() } } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/adapter/spinner/RuleAdapterItem.kt b/app/src/main/java/com/idormy/sms/forwarder/adapter/spinner/RuleAdapterItem.kt new file mode 100644 index 00000000..7a221206 --- /dev/null +++ b/app/src/main/java/com/idormy/sms/forwarder/adapter/spinner/RuleAdapterItem.kt @@ -0,0 +1,47 @@ +package com.idormy.sms.forwarder.adapter.spinner + +import android.graphics.drawable.Drawable + +@Suppress("unused") +class RuleAdapterItem( + var title: CharSequence, + var icon: Drawable? = null, + var id: Long? = 0L, + var status: Int? = 1 +) { + + fun setTitle(title: CharSequence): RuleAdapterItem { + this.title = title + return this + } + + fun setIcon(icon: Drawable?): RuleAdapterItem { + this.icon = icon + return this + } + + fun setId(id: Long): RuleAdapterItem { + this.id = id + return this + } + + fun setStatus(status: Int): RuleAdapterItem { + this.status = status + return this + } + + // 注意:自定义实体需要重写对象的 toString 方法 + override fun toString(): String { + return title.toString() + } + + companion object { + fun of(title: CharSequence): RuleAdapterItem { + return RuleAdapterItem(title) + } + + fun arrayOf(vararg titles: CharSequence): Array { + return titles.map { RuleAdapterItem(it) }.toTypedArray() + } + } +} diff --git a/app/src/main/java/com/idormy/sms/forwarder/adapter/spinner/RuleSpinnerAdapter.kt b/app/src/main/java/com/idormy/sms/forwarder/adapter/spinner/RuleSpinnerAdapter.kt new file mode 100644 index 00000000..74def943 --- /dev/null +++ b/app/src/main/java/com/idormy/sms/forwarder/adapter/spinner/RuleSpinnerAdapter.kt @@ -0,0 +1,167 @@ +package com.idormy.sms.forwarder.adapter.spinner + +import android.annotation.SuppressLint +import android.os.Build +import android.text.Html +import android.text.TextUtils +import android.util.TypedValue +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.annotation.ColorInt +import androidx.annotation.DrawableRes +import com.idormy.sms.forwarder.R +import com.idormy.sms.forwarder.utils.Log +import com.idormy.sms.forwarder.utils.STATUS_OFF +import com.xuexiang.xui.utils.CollectionUtils +import com.xuexiang.xui.widget.spinner.editspinner.BaseEditSpinnerAdapter +import com.xuexiang.xui.widget.spinner.editspinner.EditSpinnerFilter +import com.xuexiang.xutil.resource.ResUtils.getDrawable + +@Suppress("unused", "NAME_SHADOWING", "DEPRECATION") +class RuleSpinnerAdapter : BaseEditSpinnerAdapter, EditSpinnerFilter { + /** + * 选项的文字颜色 + */ + private var mTextColor = 0 + + /** + * 选项的文字大小 + */ + private var mTextSize = 0f + + /** + * 背景颜色 + */ + private var mBackgroundSelector = 0 + + /** + * 过滤关键词的选中颜色 + */ + private var mFilterColor = "#F15C58" + private var mIsFilterKey = false + + /** + * 构造方法 + * + * @param data 选项数据 + */ + constructor(data: List?) : super(data) + + /** + * 构造方法 + * + * @param data 选项数据 + */ + constructor(data: Array?) : super(data) + + override fun getEditSpinnerFilter(): EditSpinnerFilter { + return this + } + + override fun getView(position: Int, convertView: View?, parent: ViewGroup): View? { + var convertView = convertView + val holder: ViewHolder + if (convertView == null) { + convertView = LayoutInflater.from(parent.context).inflate(R.layout.item_spinner_with_icon, parent, false) + holder = ViewHolder(convertView, mTextColor, mTextSize, mBackgroundSelector) + convertView.tag = holder + } else { + holder = convertView.tag as ViewHolder + } + val item = CollectionUtils.getListItem(mDataSource, mIndexs[position]) as RuleAdapterItem + holder.iconView.setImageDrawable(item.icon) + holder.statusView.setImageDrawable( + getDrawable( + when (item.status) { + STATUS_OFF -> R.drawable.ic_stop + else -> R.drawable.ic_start + } + ) + ) + //holder.titleView.text = Html.fromHtml(item.toString()) + holder.titleView.text = Html.fromHtml(getItem(position)) + return convertView + } + + override fun onFilter(keyword: String): Boolean { + mDisplayData.clear() + Log.d("RuleSpinnerAdapter", "keyword = $keyword") + Log.d("RuleSpinnerAdapter", "mIndexs.indices = ${mIndexs.indices}") + if (TextUtils.isEmpty(keyword)) { + initDisplayData(mDataSource) + for (i in mIndexs.indices) { + mIndexs[i] = i + } + } else { + try { + for (i in mDataSource.indices) { + if (getDataSourceString(i).contains(keyword, ignoreCase = true)) { + mIndexs[mDisplayData.size] = i + if (mIsFilterKey) { + mDisplayData.add(getDataSourceString(i).replaceFirst(keyword.toRegex(), "$keyword")) + } else { + mDisplayData.add(getDataSourceString(i)) + } + } + } + } catch (e: Exception) { + e.printStackTrace() + Log.e("RuleSpinnerAdapter", "onFilter error: ${e.message}") + } + } + Log.d("RuleSpinnerAdapter", "mDisplayData = $mDisplayData") + notifyDataSetChanged() + return mDisplayData.size > 0 + } + + fun setTextColor(@ColorInt textColor: Int): RuleSpinnerAdapter<*> { + mTextColor = textColor + return this + } + + fun setTextSize(textSize: Float): RuleSpinnerAdapter<*> { + mTextSize = textSize + return this + } + + fun setBackgroundSelector(@DrawableRes backgroundSelector: Int): RuleSpinnerAdapter<*> { + mBackgroundSelector = backgroundSelector + return this + } + + fun setFilterColor(filterColor: String): RuleSpinnerAdapter<*> { + mFilterColor = filterColor + return this + } + + fun setIsFilterKey(isFilterKey: Boolean): RuleSpinnerAdapter<*> { + mIsFilterKey = isFilterKey + return this + } + + @SuppressLint("ObsoleteSdkInt") + private class ViewHolder(convertView: View, @ColorInt textColor: Int, textSize: Float, @DrawableRes backgroundSelector: Int) { + val iconView: ImageView = convertView.findViewById(R.id.iv_icon) + val statusView: ImageView = convertView.findViewById(R.id.iv_status) + val titleView: TextView = convertView.findViewById(R.id.tv_title) + + init { + if (textColor > 0) titleView.setTextColor(textColor) + if (textSize > 0F) titleView.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize) + if (backgroundSelector != 0) titleView.setBackgroundResource(backgroundSelector) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { + val config = convertView.resources.configuration + if (config.layoutDirection == View.LAYOUT_DIRECTION_RTL) { + titleView.textDirection = View.TEXT_DIRECTION_RTL + } + } + } + } + + fun getItemSource(position: Int): T { + return mDataSource[mIndexs[position]] + } +} diff --git a/app/src/main/java/com/idormy/sms/forwarder/adapter/spinner/SenderAdapterItem.kt b/app/src/main/java/com/idormy/sms/forwarder/adapter/spinner/SenderAdapterItem.kt index 0829d710..de23a286 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/adapter/spinner/SenderAdapterItem.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/adapter/spinner/SenderAdapterItem.kt @@ -1,59 +1,22 @@ package com.idormy.sms.forwarder.adapter.spinner -import android.content.Context import android.graphics.drawable.Drawable -import com.xuexiang.xutil.resource.ResUtils.getDrawable -import com.xuexiang.xutil.resource.ResUtils.getString @Suppress("unused") -class SenderAdapterItem { - - //标题内容 - var title: CharSequence - - //图标 - var icon: Drawable? = null - - //ID - var id: Long? = 0L - - //状态 +class SenderAdapterItem( + var title: CharSequence, + var icon: Drawable? = null, + var id: Long? = 0L, var status: Int? = 1 +) { - constructor(title: CharSequence) { - this.title = title - } - - constructor(title: CharSequence, icon: Drawable?) { - this.title = title - this.icon = icon - } - - constructor(title: CharSequence, icon: Drawable?, id: Long?) { + fun setTitle(title: CharSequence): SenderAdapterItem { this.title = title - this.icon = icon - this.id = id + return this } - constructor(title: CharSequence, icon: Drawable?, id: Long?, status: Int?) { - this.title = title + fun setIcon(icon: Drawable?): SenderAdapterItem { this.icon = icon - this.id = id - this.status = status - } - - constructor(title: CharSequence, drawableId: Int) : this(title, getDrawable(drawableId)) - constructor(title: CharSequence, drawableId: Int, id: Long) : this(title, getDrawable(drawableId), id) - constructor(title: CharSequence, drawableId: Int, id: Long, status: Int) : this(title, getDrawable(drawableId), id, status) - constructor(context: Context?, titleId: Int, drawableId: Int) : this(getString(titleId), getDrawable(context, drawableId)) - constructor(context: Context?, titleId: Int, drawableId: Int, id: Long) : this(getString(titleId), getDrawable(context, drawableId), id) - constructor(context: Context?, titleId: Int, drawableId: Int, id: Long, status: Int) : this(getString(titleId), getDrawable(context, drawableId), id, status) - constructor(context: Context?, title: CharSequence, drawableId: Int) : this(title, getDrawable(context, drawableId)) - constructor(context: Context?, title: CharSequence, drawableId: Int, id: Long) : this(title, getDrawable(context, drawableId), id) - constructor(context: Context?, title: CharSequence, drawableId: Int, id: Long, status: Int) : this(title, getDrawable(context, drawableId), id, status) - - fun setStatus(status: Int): SenderAdapterItem { - this.status = status return this } @@ -62,32 +25,25 @@ class SenderAdapterItem { return this } - fun setTitle(title: CharSequence): SenderAdapterItem { - this.title = title - return this - } - - fun setIcon(icon: Drawable?): SenderAdapterItem { - this.icon = icon + fun setStatus(status: Int): SenderAdapterItem { + this.status = status return this } - //注意:自定义实体需要重写对象的toString方法 + // 注意:自定义实体需要重写对象的 toString 方法 override fun toString(): String { return title.toString() } companion object { + @JvmStatic fun of(title: CharSequence): SenderAdapterItem { return SenderAdapterItem(title) } - fun arrayof(title: Array): Array { - val array = arrayOfNulls(title.size) - for (i in array.indices) { - array[i] = SenderAdapterItem(title[i]) - } - return array + @JvmStatic + fun arrayOf(vararg titles: CharSequence): Array { + return titles.map { SenderAdapterItem(it) }.toTypedArray() } } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/database/dao/RuleDao.kt b/app/src/main/java/com/idormy/sms/forwarder/database/dao/RuleDao.kt index 5b7e0cfe..03d0504b 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/database/dao/RuleDao.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/database/dao/RuleDao.kt @@ -1,7 +1,13 @@ package com.idormy.sms.forwarder.database.dao import androidx.paging.PagingSource -import androidx.room.* +import androidx.room.Dao +import androidx.room.Delete +import androidx.room.Insert +import androidx.room.Query +import androidx.room.RawQuery +import androidx.room.Transaction +import androidx.room.Update import androidx.sqlite.db.SupportSQLiteQuery import com.idormy.sms.forwarder.database.entity.Rule import io.reactivex.Completable @@ -45,4 +51,7 @@ interface RuleDao { @Transaction @RawQuery(observedEntities = [Rule::class]) fun getAllRaw(query: SupportSQLiteQuery): List + + @Query("SELECT * FROM Rule ORDER BY id DESC") + fun getAll(): Single> } \ No newline at end of file diff --git a/app/src/main/java/com/idormy/sms/forwarder/database/dao/SenderDao.kt b/app/src/main/java/com/idormy/sms/forwarder/database/dao/SenderDao.kt index 9ba18927..708922df 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/database/dao/SenderDao.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/database/dao/SenderDao.kt @@ -1,7 +1,13 @@ package com.idormy.sms.forwarder.database.dao import androidx.paging.PagingSource -import androidx.room.* +import androidx.room.Dao +import androidx.room.Delete +import androidx.room.Insert +import androidx.room.Query +import androidx.room.RawQuery +import androidx.room.Transaction +import androidx.room.Update import androidx.sqlite.db.SupportSQLiteQuery import com.idormy.sms.forwarder.database.entity.Sender import io.reactivex.Completable @@ -29,6 +35,9 @@ interface SenderDao { @Query("SELECT * FROM Sender where id=:id") fun getOne(id: Long): Sender + @Query("SELECT * FROM Sender WHERE id IN (:ids)") + fun getByIds(ids: List): List + @Query("SELECT count(*) FROM Sender where type=:type and status=:status") fun count(type: String, status: Int): Single diff --git a/app/src/main/java/com/idormy/sms/forwarder/database/dao/TaskDao.kt b/app/src/main/java/com/idormy/sms/forwarder/database/dao/TaskDao.kt index bc5fcb30..ea40a75a 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/database/dao/TaskDao.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/database/dao/TaskDao.kt @@ -19,7 +19,7 @@ interface TaskDao { fun get(id: Long): Single @Query("SELECT * FROM Task where id=:id") - fun getOne(id: Long): Task + suspend fun getOne(id: Long): Task? @Query("SELECT * FROM Task where type < 1000 ORDER BY id DESC") fun pagingSourceFixed(): PagingSource diff --git a/app/src/main/java/com/idormy/sms/forwarder/database/entity/Rule.kt b/app/src/main/java/com/idormy/sms/forwarder/database/entity/Rule.kt index 49866f57..c5a66d0e 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/database/entity/Rule.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/database/entity/Rule.kt @@ -1,7 +1,6 @@ package com.idormy.sms.forwarder.database.entity import android.os.Parcelable -import com.idormy.sms.forwarder.utils.Log import androidx.room.* import com.idormy.sms.forwarder.R import com.idormy.sms.forwarder.database.ext.ConvertersSenderList @@ -117,6 +116,23 @@ data class Rule( } + val name: String + get() { + val sb = StringBuilder() + when (type) { + "app" -> sb.append("[").append(getString(R.string.type_param_app)).append("]") + "call" -> sb.append("[").append(getString(R.string.type_param_call)).append("]").append(SIM_SLOT_MAP[simSlot].toString()).append(getString(R.string.rule_card)) + else -> sb.append("[").append(getString(R.string.type_param_sms)).append("]").append(SIM_SLOT_MAP[simSlot].toString()).append(getString(R.string.rule_card)) + } + when (filed) { + FILED_TRANSPOND_ALL -> sb.append(getString(R.string.rule_all_fw_to)) + FILED_CALL_TYPE -> sb.append(getString(R.string.rule_when) + FILED_MAP[filed] + CHECK_MAP[check] + CALL_TYPE_MAP[value] + getString(R.string.rule_fw_to)) + else -> sb.append(getString(R.string.rule_when) + FILED_MAP[filed] + CHECK_MAP[check] + value + getString(R.string.rule_fw_to)) + } + sb.append(senderList.joinToString(",") { it.name }) + return sb.toString() + } + val ruleMatch: String get() { val simStr = if ("app" == type) "" else SIM_SLOT_MAP[simSlot].toString() + getString(R.string.rule_card) diff --git a/app/src/main/java/com/idormy/sms/forwarder/database/ext/ConvertersSenderList.kt b/app/src/main/java/com/idormy/sms/forwarder/database/ext/ConvertersSenderList.kt index 7abfc81f..7a270a21 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/database/ext/ConvertersSenderList.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/database/ext/ConvertersSenderList.kt @@ -8,20 +8,11 @@ class ConvertersSenderList { @TypeConverter fun stringToObject(value: String): List { - val senderList: MutableList = mutableListOf() - value.split(",").map { it.trim() }.forEach { - val sender = Core.sender.getOne(it.toLong()) - senderList.add(sender) - } - return senderList + return Core.sender.getByIds(value.split(",").map { it.trim().toLong() }) } @TypeConverter fun objectToString(list: List): String { - val senderList = ArrayList() - list.forEach { - senderList += it.id - } - return senderList.joinToString(",") + return list.joinToString(",") { it.id.toString() } } } \ No newline at end of file diff --git a/app/src/main/java/com/idormy/sms/forwarder/database/repository/SenderRepository.kt b/app/src/main/java/com/idormy/sms/forwarder/database/repository/SenderRepository.kt index 0a30fc36..41791ddd 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/database/repository/SenderRepository.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/database/repository/SenderRepository.kt @@ -1,10 +1,10 @@ package com.idormy.sms.forwarder.database.repository import androidx.annotation.WorkerThread +import androidx.sqlite.db.SimpleSQLiteQuery import com.idormy.sms.forwarder.database.dao.SenderDao import com.idormy.sms.forwarder.database.entity.Sender import kotlinx.coroutines.flow.Flow -import androidx.sqlite.db.SimpleSQLiteQuery class SenderRepository(private val senderDao: SenderDao) { @@ -23,6 +23,8 @@ class SenderRepository(private val senderDao: SenderDao) { fun getOne(id: Long) = senderDao.getOne(id) + fun getByIds(ids: List) = senderDao.getByIds(ids) + fun update(sender: Sender) = senderDao.update(sender) fun getAllNonCache(): List { diff --git a/app/src/main/java/com/idormy/sms/forwarder/database/repository/TaskRepository.kt b/app/src/main/java/com/idormy/sms/forwarder/database/repository/TaskRepository.kt index edbee406..de4cafc8 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/database/repository/TaskRepository.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/database/repository/TaskRepository.kt @@ -10,7 +10,7 @@ class TaskRepository(private val taskDao: TaskDao) { @WorkerThread fun insert(task: Task) = taskDao.insert(task) - fun getOne(id: Long) = taskDao.getOne(id) + suspend fun getOne(id: Long) = taskDao.getOne(id) fun update(task: Task) = taskDao.update(task) diff --git a/app/src/main/java/com/idormy/sms/forwarder/entity/action/RuleSetting.kt b/app/src/main/java/com/idormy/sms/forwarder/entity/action/RuleSetting.kt new file mode 100644 index 00000000..36605ddc --- /dev/null +++ b/app/src/main/java/com/idormy/sms/forwarder/entity/action/RuleSetting.kt @@ -0,0 +1,10 @@ +package com.idormy.sms.forwarder.entity.action + +import com.idormy.sms.forwarder.database.entity.Rule +import java.io.Serializable + +data class RuleSetting( + var description: String = "", //描述 + var status: String = "enable", //状态: enable=启用,disable=禁用 + var ruleList: List, //转发规则列表 +) : Serializable diff --git a/app/src/main/java/com/idormy/sms/forwarder/entity/action/SenderSetting.kt b/app/src/main/java/com/idormy/sms/forwarder/entity/action/SenderSetting.kt new file mode 100644 index 00000000..edc85c7f --- /dev/null +++ b/app/src/main/java/com/idormy/sms/forwarder/entity/action/SenderSetting.kt @@ -0,0 +1,10 @@ +package com.idormy.sms.forwarder.entity.action + +import com.idormy.sms.forwarder.database.entity.Sender +import java.io.Serializable + +data class SenderSetting( + var description: String = "", //描述 + var status: String = "enable", //状态: enable=启用,disable=禁用 + var senderList: List, //发送通道列表 +) : Serializable diff --git a/app/src/main/java/com/idormy/sms/forwarder/entity/action/SettingsSetting.kt b/app/src/main/java/com/idormy/sms/forwarder/entity/action/SettingsSetting.kt new file mode 100644 index 00000000..425b65c4 --- /dev/null +++ b/app/src/main/java/com/idormy/sms/forwarder/entity/action/SettingsSetting.kt @@ -0,0 +1,38 @@ +package com.idormy.sms.forwarder.entity.action + +import com.idormy.sms.forwarder.utils.SettingUtils +import java.io.Serializable + +data class SettingsSetting( + var description: String = "", //描述 + var enableSms: Boolean = SettingUtils.enableSms, //是否转发短信 + + var enablePhone: Boolean = SettingUtils.enablePhone, //是否转发通话 + var enableCallType1: Boolean = SettingUtils.enableCallType1, //是否转发通话——来电挂机 + var enableCallType2: Boolean = SettingUtils.enableCallType2, //是否转发通话——去电挂机 + var enableCallType3: Boolean = SettingUtils.enableCallType3, //是否转发通话——未接来电 + var enableCallType4: Boolean = SettingUtils.enableCallType4, //是否转发通话——来电提醒 + var enableCallType5: Boolean = SettingUtils.enableCallType5, //是否转发通话——来电接通 + var enableCallType6: Boolean = SettingUtils.enableCallType6, //是否转发通话——去电拨出 + + var enableAppNotify: Boolean = SettingUtils.enableAppNotify, //是否转发应用通知 + var enableCancelAppNotify: Boolean = SettingUtils.enableCancelAppNotify, //是否转发应用通知——自动消除通知 + var enableNotUserPresent: Boolean = SettingUtils.enableNotUserPresent, //是否转发应用通知——仅锁屏状态 + + var enableLocation: Boolean = SettingUtils.enableLocation, //是否启用定位功能 + var locationAccuracy: Int = SettingUtils.locationAccuracy, //设置位置精度 + var locationPowerRequirement: Int = SettingUtils.locationPowerRequirement, //设置电量消耗 + var locationMinInterval: Long = SettingUtils.locationMinInterval, //设置最小更新间隔 + var locationMinDistance: Int = SettingUtils.locationMinDistance, //设置最小更新距离 + + var enableSmsCommand: Boolean = SettingUtils.enableSmsCommand, //是否接受短信指令 + var smsCommandSafePhone: String = SettingUtils.smsCommandSafePhone, //短信指令安全手机号 + + var enableLoadAppList: Boolean = SettingUtils.enableLoadAppList, //是否加载应用列表 + var enableLoadUserAppList: Boolean = SettingUtils.enableLoadUserAppList, //是否加载应用列表——用户应用 + var enableLoadSystemAppList: Boolean = SettingUtils.enableLoadSystemAppList, //是否加载应用列表——系统应用 + + var cancelExtraAppNotify: String = SettingUtils.cancelExtraAppNotify, //是否转发应用通知——自动消除额外APP通知 + + var duplicateMessagesLimits: Int = SettingUtils.duplicateMessagesLimits, //重复消息限制 +) : Serializable diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/RulesEditFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/RulesEditFragment.kt index 293824bd..30437c39 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/RulesEditFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/RulesEditFragment.kt @@ -422,7 +422,7 @@ class RulesEditFragment : BaseFragment(), View.OnClic senderListAll = senderList as MutableList for (sender in senderList) { val name = if (sender.name.length > 20) sender.name.substring(0, 19) else sender.name - senderSpinnerList.add(SenderAdapterItem(name, sender.imageId, sender.id, sender.status)) + senderSpinnerList.add(SenderAdapterItem(name, getDrawable(sender.imageId), sender.id, sender.status)) } senderSpinnerAdapter = SenderSpinnerAdapter(senderSpinnerList) .setIsFilterKey(true).setFilterColor("#EF5362").setBackgroundSelector(R.drawable.selector_custom_spinner_bg) diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/SettingsFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/SettingsFragment.kt index 62be0ac8..b6f8fb36 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/SettingsFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/SettingsFragment.kt @@ -513,11 +513,11 @@ class SettingsFragment : BaseFragment(), View.OnClickL } //启用定位功能 - private fun switchEnableLocation(@SuppressLint("UseSwitchCompatOrMaterialCode") switchEnableLocation: SwitchButton, layoutLocationSetting: LinearLayout, rgAccuracy: RadioGroup, rgPowerRequirement: RadioGroup, etMinInterval: EditText, etMinDistance: EditText) { + private fun switchEnableLocation(@SuppressLint("UseSwitchCompatOrMaterialCode") sbEnableLocation: SwitchButton, layoutLocationSetting: LinearLayout, rgAccuracy: RadioGroup, rgPowerRequirement: RadioGroup, etMinInterval: EditText, etMinDistance: EditText) { //是否启用定位功能 - switchEnableLocation.isChecked = SettingUtils.enableLocation + sbEnableLocation.isChecked = SettingUtils.enableLocation layoutLocationSetting.visibility = if (SettingUtils.enableLocation) View.VISIBLE else View.GONE - switchEnableLocation.setOnCheckedChangeListener { _: CompoundButton?, isChecked: Boolean -> + sbEnableLocation.setOnCheckedChangeListener { _: CompoundButton?, isChecked: Boolean -> SettingUtils.enableLocation = isChecked if (isChecked) { XXPermissions.with(this).permission(Permission.ACCESS_COARSE_LOCATION).permission(Permission.ACCESS_FINE_LOCATION).permission(Permission.ACCESS_BACKGROUND_LOCATION).request(object : OnPermissionCallback { @@ -534,7 +534,7 @@ class SettingsFragment : BaseFragment(), View.OnClickL XToastUtils.error(R.string.toast_denied) } SettingUtils.enableLocation = false - switchEnableLocation.isChecked = false + sbEnableLocation.isChecked = false restartLocationService("STOP") } }) diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/TasksEditFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/TasksEditFragment.kt index 0efd6ec7..81618be0 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/TasksEditFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/TasksEditFragment.kt @@ -155,7 +155,21 @@ class TasksEditFragment : BaseFragment(), View.OnClic "com.idormy.sms.forwarder.fragment.action.NotificationFragment", "{\"\":\"\"}", CoreAnim.slide, - R.drawable.auto_task_icon_sender, + R.drawable.auto_task_icon_notification, + ), + PageInfo( + getString(R.string.task_cleaner), + "com.idormy.sms.forwarder.fragment.action.CleanerFragment", + "{\"\":\"\"}", + CoreAnim.slide, + R.drawable.auto_task_icon_cleaner + ), + PageInfo( + getString(R.string.task_settings), + "com.idormy.sms.forwarder.fragment.action.SettingsFragment", + "{\"\":\"\"}", + CoreAnim.slide, + R.drawable.auto_task_icon_settings ), PageInfo( getString(R.string.task_frpc), @@ -172,11 +186,18 @@ class TasksEditFragment : BaseFragment(), View.OnClic R.drawable.auto_task_icon_http_server ), PageInfo( - getString(R.string.task_cleaner), - "com.idormy.sms.forwarder.fragment.action.CleanerFragment", + getString(R.string.task_rule), + "com.idormy.sms.forwarder.fragment.action.RuleFragment", "{\"\":\"\"}", CoreAnim.slide, - R.drawable.auto_task_icon_cleaner + R.drawable.auto_task_icon_rule + ), + PageInfo( + getString(R.string.task_sender), + "com.idormy.sms.forwarder.fragment.action.SenderFragment", + "{\"\":\"\"}", + CoreAnim.slide, + R.drawable.auto_task_icon_sender ), ) @@ -469,7 +490,7 @@ class TasksEditFragment : BaseFragment(), View.OnClic //必须开启定位服务,才能使用进入地点 或 离开地点 类型条件 if ((typeCondition == TASK_CONDITION_TO_ADDRESS || typeCondition == TASK_CONDITION_LEAVE_ADDRESS) && !App.LocationClient.isStarted()) { MaterialDialog.Builder(requireContext()) - .iconRes(R.drawable.auto_task_icon_location) + .iconRes(R.drawable.icon_location) .title(R.string.enable_location) .content(R.string.enable_location_dialog) .cancelable(false) diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/action/FrpcFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/action/FrpcFragment.kt index 0e13d76e..2b8f3803 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/action/FrpcFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/action/FrpcFragment.kt @@ -37,8 +37,6 @@ class FrpcFragment : BaseFragment(), View.OnCli @AutoWired(name = KEY_EVENT_DATA_ACTION) var eventData: String? = null - private var description = "测试描述" - override fun initArgs() { XRouter.getInstance().inject(this) } @@ -139,7 +137,7 @@ class FrpcFragment : BaseFragment(), View.OnCli R.id.btn_save -> { val settingVo = checkSetting() val intent = Intent() - intent.putExtra(KEY_BACK_DESCRIPTION_ACTION, description) + intent.putExtra(KEY_BACK_DESCRIPTION_ACTION, settingVo.description) intent.putExtra(KEY_BACK_DATA_ACTION, Gson().toJson(settingVo)) setFragmentResult(TASK_ACTION_FRPC, intent) popToBack() @@ -158,6 +156,7 @@ class FrpcFragment : BaseFragment(), View.OnCli private fun checkSetting(): FrpcSetting { val startUid = binding!!.etStartUid.text.toString().trim() val stopUid = binding!!.etStopUid.text.toString().trim() + val description: String val action: String val uids: String if (binding!!.rgFrpcState.checkedRadioButtonId == R.id.rb_start_server) { diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/action/HttpServerFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/action/HttpServerFragment.kt index da9c3943..f6c30ae6 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/action/HttpServerFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/action/HttpServerFragment.kt @@ -5,7 +5,11 @@ import android.content.Intent import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.CompoundButton import com.google.gson.Gson +import com.hjq.permissions.OnPermissionCallback +import com.hjq.permissions.Permission +import com.hjq.permissions.XXPermissions import com.idormy.sms.forwarder.R import com.idormy.sms.forwarder.core.BaseFragment import com.idormy.sms.forwarder.databinding.FragmentTasksActionHttpServerBinding @@ -15,6 +19,7 @@ import com.idormy.sms.forwarder.utils.KEY_BACK_DESCRIPTION_ACTION import com.idormy.sms.forwarder.utils.KEY_EVENT_DATA_ACTION import com.idormy.sms.forwarder.utils.KEY_TEST_ACTION import com.idormy.sms.forwarder.utils.Log +import com.idormy.sms.forwarder.utils.SettingUtils import com.idormy.sms.forwarder.utils.TASK_ACTION_HTTPSERVER import com.idormy.sms.forwarder.utils.XToastUtils import com.jeremyliao.liveeventbus.LiveEventBus @@ -101,6 +106,34 @@ class HttpServerFragment : BaseFragment() XToastUtils.error(it, 30000) } } + + binding!!.sbApiSendSms.setOnCheckedChangeListener { _: CompoundButton?, isChecked: Boolean -> + if (isChecked) checkSendSmsPermission() + } + + binding!!.sbApiQuerySms.setOnCheckedChangeListener { _: CompoundButton?, isChecked: Boolean -> + if (isChecked) checkReadSmsPermission() + } + + binding!!.sbApiQueryCall.setOnCheckedChangeListener { _: CompoundButton?, isChecked: Boolean -> + if (isChecked) checkCallPermission() + } + + binding!!.sbApiQueryContacts.setOnCheckedChangeListener { _: CompoundButton?, isChecked: Boolean -> + if (isChecked) checkContactsPermission() + } + + binding!!.sbApiAddContacts.setOnCheckedChangeListener { _: CompoundButton?, isChecked: Boolean -> + if (isChecked) checkContactsPermission() + } + + binding!!.sbApiLocation.setOnCheckedChangeListener { _: CompoundButton?, isChecked: Boolean -> + if (isChecked && !SettingUtils.enableLocation) { + XToastUtils.error(getString(R.string.api_location_permission_tips)) + binding!!.sbApiLocation.isChecked = false + return@setOnCheckedChangeListener + } + } } @SingleClick @@ -195,4 +228,96 @@ class HttpServerFragment : BaseFragment() return HttpServerSetting(description.toString(), action, enableApiClone, enableApiSmsSend, enableApiSmsQuery, enableApiCallQuery, enableApiContactQuery, enableApiContactAdd, enableApiWol, enableApiLocation, enableApiBatteryQuery) } + + //发送短信权限 + private fun checkSendSmsPermission() { + XXPermissions.with(this) + // 发送短信 + .permission(Permission.SEND_SMS).request(object : OnPermissionCallback { + override fun onGranted(permissions: List, all: Boolean) { + } + + override fun onDenied(permissions: List, never: Boolean) { + if (never) { + XToastUtils.error(R.string.toast_denied_never) + // 如果是被永久拒绝就跳转到应用权限系统设置页面 + XXPermissions.startPermissionActivity(requireContext(), permissions) + } else { + XToastUtils.error(R.string.toast_denied) + } + binding!!.sbApiSendSms.isChecked = false + } + }) + } + + //读取短信权限 + private fun checkReadSmsPermission() { + XXPermissions.with(this) + // 接收短信 + .permission(Permission.RECEIVE_SMS) + // 发送短信 + .permission(Permission.SEND_SMS) + // 读取短信 + .permission(Permission.READ_SMS).request(object : OnPermissionCallback { + override fun onGranted(permissions: List, all: Boolean) { + } + + override fun onDenied(permissions: List, never: Boolean) { + if (never) { + XToastUtils.error(R.string.toast_denied_never) + // 如果是被永久拒绝就跳转到应用权限系统设置页面 + XXPermissions.startPermissionActivity(requireContext(), permissions) + } else { + XToastUtils.error(R.string.toast_denied) + } + binding!!.sbApiQuerySms.isChecked = false + } + }) + } + + //电话权限 + private fun checkCallPermission() { + XXPermissions.with(this) + // 读取电话状态 + .permission(Permission.READ_PHONE_STATE) + // 读取手机号码 + .permission(Permission.READ_PHONE_NUMBERS) + // 读取通话记录 + .permission(Permission.READ_CALL_LOG).request(object : OnPermissionCallback { + override fun onGranted(permissions: List, all: Boolean) { + } + + override fun onDenied(permissions: List, never: Boolean) { + if (never) { + XToastUtils.error(R.string.toast_denied_never) + // 如果是被永久拒绝就跳转到应用权限系统设置页面 + XXPermissions.startPermissionActivity(requireContext(), permissions) + } else { + XToastUtils.error(R.string.toast_denied) + } + binding!!.sbApiQueryCall.isChecked = false + } + }) + } + + //联系人权限 + private fun checkContactsPermission() { + XXPermissions.with(this).permission(*Permission.Group.CONTACTS).request(object : OnPermissionCallback { + override fun onGranted(permissions: List, all: Boolean) { + } + + override fun onDenied(permissions: List, never: Boolean) { + if (never) { + XToastUtils.error(R.string.toast_denied_never) + // 如果是被永久拒绝就跳转到应用权限系统设置页面 + XXPermissions.startPermissionActivity(requireContext(), permissions) + } else { + XToastUtils.error(R.string.toast_denied) + } + binding!!.sbApiQueryContacts.isChecked = false + binding!!.sbApiAddContacts.isChecked = false + } + }) + } + } \ No newline at end of file diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/action/NotificationFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/action/NotificationFragment.kt index e881db20..8d52d5d9 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/action/NotificationFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/action/NotificationFragment.kt @@ -315,7 +315,7 @@ class NotificationFragment : BaseFragment for (sender in senderList) { val name = if (sender.name.length > 20) sender.name.substring(0, 19) else sender.name - senderSpinnerList.add(SenderAdapterItem(name, sender.imageId, sender.id, sender.status)) + senderSpinnerList.add(SenderAdapterItem(name, getDrawable(sender.imageId), sender.id, sender.status)) } senderSpinnerAdapter = SenderSpinnerAdapter(senderSpinnerList) .setIsFilterKey(true).setFilterColor("#EF5362").setBackgroundSelector(R.drawable.selector_custom_spinner_bg) diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/action/RuleFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/action/RuleFragment.kt new file mode 100644 index 00000000..dc800951 --- /dev/null +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/action/RuleFragment.kt @@ -0,0 +1,298 @@ +package com.idormy.sms.forwarder.fragment.action + +import android.annotation.SuppressLint +import android.content.Intent +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.AdapterView +import android.widget.ImageView +import android.widget.LinearLayout +import android.widget.TextView +import com.google.gson.Gson +import com.idormy.sms.forwarder.R +import com.idormy.sms.forwarder.adapter.spinner.RuleAdapterItem +import com.idormy.sms.forwarder.adapter.spinner.RuleSpinnerAdapter +import com.idormy.sms.forwarder.core.BaseFragment +import com.idormy.sms.forwarder.database.AppDatabase +import com.idormy.sms.forwarder.database.entity.Rule +import com.idormy.sms.forwarder.databinding.FragmentTasksActionRuleBinding +import com.idormy.sms.forwarder.entity.action.RuleSetting +import com.idormy.sms.forwarder.utils.KEY_BACK_DATA_ACTION +import com.idormy.sms.forwarder.utils.KEY_BACK_DESCRIPTION_ACTION +import com.idormy.sms.forwarder.utils.KEY_EVENT_DATA_ACTION +import com.idormy.sms.forwarder.utils.KEY_TEST_ACTION +import com.idormy.sms.forwarder.utils.Log +import com.idormy.sms.forwarder.utils.STATUS_OFF +import com.idormy.sms.forwarder.utils.TASK_ACTION_SENDER +import com.idormy.sms.forwarder.utils.XToastUtils +import com.jeremyliao.liveeventbus.LiveEventBus +import com.xuexiang.xaop.annotation.SingleClick +import com.xuexiang.xpage.annotation.Page +import com.xuexiang.xrouter.annotation.AutoWired +import com.xuexiang.xrouter.launcher.XRouter +import com.xuexiang.xui.utils.CountDownButtonHelper +import com.xuexiang.xui.widget.actionbar.TitleBar +import com.xuexiang.xutil.resource.ResUtils.getDrawable +import io.reactivex.SingleObserver +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.disposables.Disposable +import io.reactivex.schedulers.Schedulers + +@Page(name = "Rule") +@Suppress("PrivatePropertyName") +class RuleFragment : BaseFragment(), View.OnClickListener { + + private val TAG: String = RuleFragment::class.java.simpleName + private var titleBar: TitleBar? = null + private var mCountDownHelper: CountDownButtonHelper? = null + + //当前转发规则 + private var ruleId = 0L + private var ruleListSelected: MutableList = mutableListOf() + private var ruleItemMap = HashMap(2) + + //发送通道列表 + private var ruleListAll: MutableList = mutableListOf() + private val ruleSpinnerList = ArrayList() + private lateinit var ruleSpinnerAdapter: RuleSpinnerAdapter<*> + + @JvmField + @AutoWired(name = KEY_EVENT_DATA_ACTION) + var eventData: String? = null + + override fun initArgs() { + XRouter.getInstance().inject(this) + } + + override fun viewBindingInflate( + inflater: LayoutInflater, + container: ViewGroup, + ): FragmentTasksActionRuleBinding { + return FragmentTasksActionRuleBinding.inflate(inflater, container, false) + } + + override fun initTitle(): TitleBar? { + titleBar = super.initTitle()!!.setImmersive(false).setTitle(R.string.task_rule) + return titleBar + } + + /** + * 初始化控件 + */ + override fun initViews() { + //测试按钮增加倒计时,避免重复点击 + mCountDownHelper = CountDownButtonHelper(binding!!.btnTest, 3) + mCountDownHelper!!.setOnCountDownListener(object : CountDownButtonHelper.OnCountDownListener { + override fun onCountDown(time: Int) { + binding!!.btnTest.text = String.format(getString(R.string.seconds_n), time) + } + + override fun onFinished() { + binding!!.btnTest.text = getString(R.string.test) + } + }) + + Log.d(TAG, "initViews eventData:$eventData") + if (eventData != null) { + val settingVo = Gson().fromJson(eventData, RuleSetting::class.java) + binding!!.rgStatus.check(if (settingVo.status == "enable") R.id.rb_status_enable else R.id.rb_status_disable) + Log.d(TAG, settingVo.ruleList.toString()) + settingVo.ruleList.forEach { + ruleId = it.id + ruleListSelected.add(it) + } + Log.d(TAG, "initViews settingVo:$settingVo") + } + + //初始化发送通道下拉框 + initRuleSpinner() + } + + @SuppressLint("SetTextI18n") + override fun initListeners() { + binding!!.btnTest.setOnClickListener(this) + binding!!.btnDel.setOnClickListener(this) + binding!!.btnSave.setOnClickListener(this) + LiveEventBus.get(KEY_TEST_ACTION, String::class.java).observe(this) { + mCountDownHelper?.finish() + + if (it == "success") { + XToastUtils.success("测试通过", 30000) + } else { + XToastUtils.error(it, 30000) + } + } + } + + @SingleClick + override fun onClick(v: View) { + try { + when (v.id) { + R.id.btn_test -> { + mCountDownHelper?.start() + Thread { + try { + val settingVo = checkSetting() + Log.d(TAG, settingVo.toString()) + LiveEventBus.get(KEY_TEST_ACTION, String::class.java).post("success") + } catch (e: Exception) { + LiveEventBus.get(KEY_TEST_ACTION, String::class.java).post(e.message.toString()) + e.printStackTrace() + Log.e(TAG, "onClick error: ${e.message}") + } + }.start() + return + } + + R.id.btn_del -> { + popToBack() + return + } + + R.id.btn_save -> { + val settingVo = checkSetting() + val intent = Intent() + intent.putExtra(KEY_BACK_DESCRIPTION_ACTION, settingVo.description) + intent.putExtra(KEY_BACK_DATA_ACTION, Gson().toJson(settingVo)) + setFragmentResult(TASK_ACTION_SENDER, intent) + popToBack() + return + } + } + } catch (e: Exception) { + XToastUtils.error(e.message.toString(), 30000) + e.printStackTrace() + Log.e(TAG, "onClick error: ${e.message}") + } + } + + //初始化发送通道下拉框 + @SuppressLint("SetTextI18n") + private fun initRuleSpinner() { + AppDatabase.getInstance(requireContext()).ruleDao().getAll().subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(object : SingleObserver> { + override fun onSubscribe(d: Disposable) {} + + override fun onError(e: Throwable) { + e.printStackTrace() + Log.e(TAG, "initRuleSpinner error: ${e.message}") + } + + override fun onSuccess(ruleList: List) { + if (ruleList.isEmpty()) { + XToastUtils.error(R.string.add_rule_first) + return + } + + ruleListAll = ruleList as MutableList + for (rule in ruleList) { + val name = if (rule.name.length > 20) rule.name.substring(0, 19) else rule.name + ruleSpinnerList.add(RuleAdapterItem(name, getDrawable(rule.imageId), rule.id, rule.status)) + } + ruleSpinnerAdapter = RuleSpinnerAdapter(ruleSpinnerList) + .setIsFilterKey(true).setFilterColor("#EF5362").setBackgroundSelector(R.drawable.selector_custom_spinner_bg) + binding!!.spRule.setAdapter(ruleSpinnerAdapter) + + if (ruleListSelected.isNotEmpty()) { + for (rule in ruleListSelected) { + for (ruleItem in ruleSpinnerList) { + if (rule.id == ruleItem.id) { + addRuleItemLinearLayout(ruleItemMap, binding!!.layoutRules, ruleItem) + } + } + } + } + } + }) + binding!!.spRule.setOnItemClickListener { _: AdapterView<*>, _: View, position: Int, _: Long -> + try { + val rule = ruleSpinnerAdapter.getItemSource(position) as RuleAdapterItem + ruleId = rule.id!! + if (ruleId > 0L) { + ruleListSelected.forEach { + if (ruleId == it.id) { + XToastUtils.warning(getString(R.string.rule_contains_tips)) + return@setOnItemClickListener + } + } + ruleListAll.forEach { + if (ruleId == it.id) { + ruleListSelected.add(it) + addRuleItemLinearLayout(ruleItemMap, binding!!.layoutRules, rule) + } + } + + if (STATUS_OFF == rule.status) { + XToastUtils.warning(getString(R.string.rule_disabled_tips)) + } + } + } catch (e: Exception) { + XToastUtils.error(e.message.toString()) + } + } + } + + /** + * 动态增删Rule + * + * @param ruleItemMap 管理item的map,用于删除指定header + * @param layoutRules 需要挂载item的LinearLayout + * @param rule RuleAdapterItem + */ + @SuppressLint("SetTextI18n") + private fun addRuleItemLinearLayout( + ruleItemMap: MutableMap, layoutRules: LinearLayout, rule: RuleAdapterItem + ) { + val layoutRuleItem = View.inflate(requireContext(), R.layout.item_add_rule, null) as LinearLayout + val ivRemoveRule = layoutRuleItem.findViewById(R.id.iv_remove_rule) + val ivRuleImage = layoutRuleItem.findViewById(R.id.iv_rule_image) + val ivRuleStatus = layoutRuleItem.findViewById(R.id.iv_rule_status) + val tvRuleName = layoutRuleItem.findViewById(R.id.tv_rule_name) + + ivRuleImage.setImageDrawable(rule.icon) + ivRuleStatus.setImageDrawable(getDrawable(if (STATUS_OFF == rule.status) R.drawable.ic_stop else R.drawable.ic_start)) + val ruleItemId = rule.id as Long + tvRuleName.text = "ID-$ruleItemId:${rule.title}" + + ivRemoveRule.tag = ruleItemId + ivRemoveRule.setOnClickListener { view2: View -> + val tagId = view2.tag as Long + layoutRules.removeView(ruleItemMap[tagId]) + ruleItemMap.remove(tagId) + //ruleListSelected.removeIf { it.id == tagId } + for (it in ruleListSelected) { + if (it.id == tagId) { + ruleListSelected -= it + break + } + } + Log.d(TAG, ruleListSelected.count().toString()) + Log.d(TAG, ruleListSelected.toString()) + if (ruleListSelected.isEmpty()) ruleId = 0L + } + layoutRules.addView(layoutRuleItem) + ruleItemMap[ruleItemId] = layoutRuleItem + } + + //检查设置 + @SuppressLint("SetTextI18n") + private fun checkSetting(): RuleSetting { + val description = StringBuilder() + val status: String + if (binding!!.rgStatus.checkedRadioButtonId == R.id.rb_status_enable) { + status = "enable" + description.append(getString(R.string.enable)) + } else { + status = "disable" + description.append(getString(R.string.disable)) + } + description.append(getString(R.string.menu_rules)) + + if (ruleListSelected.isNotEmpty()) { + description.append(", ").append(getString(R.string.specified_rule)).append(": ") + description.append(ruleListSelected.joinToString("/") { it.id.toString() }) + } + + return RuleSetting(description.toString(), status, ruleListSelected) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/action/SenderFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/action/SenderFragment.kt new file mode 100644 index 00000000..8ae605e2 --- /dev/null +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/action/SenderFragment.kt @@ -0,0 +1,298 @@ +package com.idormy.sms.forwarder.fragment.action + +import android.annotation.SuppressLint +import android.content.Intent +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.AdapterView +import android.widget.ImageView +import android.widget.LinearLayout +import android.widget.TextView +import com.google.gson.Gson +import com.idormy.sms.forwarder.R +import com.idormy.sms.forwarder.adapter.spinner.SenderAdapterItem +import com.idormy.sms.forwarder.adapter.spinner.SenderSpinnerAdapter +import com.idormy.sms.forwarder.core.BaseFragment +import com.idormy.sms.forwarder.database.AppDatabase +import com.idormy.sms.forwarder.database.entity.Sender +import com.idormy.sms.forwarder.databinding.FragmentTasksActionSenderBinding +import com.idormy.sms.forwarder.entity.action.SenderSetting +import com.idormy.sms.forwarder.utils.KEY_BACK_DATA_ACTION +import com.idormy.sms.forwarder.utils.KEY_BACK_DESCRIPTION_ACTION +import com.idormy.sms.forwarder.utils.KEY_EVENT_DATA_ACTION +import com.idormy.sms.forwarder.utils.KEY_TEST_ACTION +import com.idormy.sms.forwarder.utils.Log +import com.idormy.sms.forwarder.utils.STATUS_OFF +import com.idormy.sms.forwarder.utils.TASK_ACTION_SENDER +import com.idormy.sms.forwarder.utils.XToastUtils +import com.jeremyliao.liveeventbus.LiveEventBus +import com.xuexiang.xaop.annotation.SingleClick +import com.xuexiang.xpage.annotation.Page +import com.xuexiang.xrouter.annotation.AutoWired +import com.xuexiang.xrouter.launcher.XRouter +import com.xuexiang.xui.utils.CountDownButtonHelper +import com.xuexiang.xui.widget.actionbar.TitleBar +import com.xuexiang.xutil.resource.ResUtils.getDrawable +import io.reactivex.SingleObserver +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.disposables.Disposable +import io.reactivex.schedulers.Schedulers + +@Page(name = "Sender") +@Suppress("PrivatePropertyName") +class SenderFragment : BaseFragment(), View.OnClickListener { + + private val TAG: String = SenderFragment::class.java.simpleName + private var titleBar: TitleBar? = null + private var mCountDownHelper: CountDownButtonHelper? = null + + //当前发送通道 + private var senderId = 0L + private var senderListSelected: MutableList = mutableListOf() + private var senderItemMap = HashMap(2) + + //发送通道列表 + private var senderListAll: MutableList = mutableListOf() + private val senderSpinnerList = ArrayList() + private lateinit var senderSpinnerAdapter: SenderSpinnerAdapter<*> + + @JvmField + @AutoWired(name = KEY_EVENT_DATA_ACTION) + var eventData: String? = null + + override fun initArgs() { + XRouter.getInstance().inject(this) + } + + override fun viewBindingInflate( + inflater: LayoutInflater, + container: ViewGroup, + ): FragmentTasksActionSenderBinding { + return FragmentTasksActionSenderBinding.inflate(inflater, container, false) + } + + override fun initTitle(): TitleBar? { + titleBar = super.initTitle()!!.setImmersive(false).setTitle(R.string.task_sender) + return titleBar + } + + /** + * 初始化控件 + */ + override fun initViews() { + //测试按钮增加倒计时,避免重复点击 + mCountDownHelper = CountDownButtonHelper(binding!!.btnTest, 3) + mCountDownHelper!!.setOnCountDownListener(object : CountDownButtonHelper.OnCountDownListener { + override fun onCountDown(time: Int) { + binding!!.btnTest.text = String.format(getString(R.string.seconds_n), time) + } + + override fun onFinished() { + binding!!.btnTest.text = getString(R.string.test) + } + }) + + Log.d(TAG, "initViews eventData:$eventData") + if (eventData != null) { + val settingVo = Gson().fromJson(eventData, SenderSetting::class.java) + binding!!.rgStatus.check(if (settingVo.status == "enable") R.id.rb_status_enable else R.id.rb_status_disable) + Log.d(TAG, settingVo.senderList.toString()) + settingVo.senderList.forEach { + senderId = it.id + senderListSelected.add(it) + } + Log.d(TAG, "initViews settingVo:$settingVo") + } + + //初始化发送通道下拉框 + initSenderSpinner() + } + + @SuppressLint("SetTextI18n") + override fun initListeners() { + binding!!.btnTest.setOnClickListener(this) + binding!!.btnDel.setOnClickListener(this) + binding!!.btnSave.setOnClickListener(this) + LiveEventBus.get(KEY_TEST_ACTION, String::class.java).observe(this) { + mCountDownHelper?.finish() + + if (it == "success") { + XToastUtils.success("测试通过", 30000) + } else { + XToastUtils.error(it, 30000) + } + } + } + + @SingleClick + override fun onClick(v: View) { + try { + when (v.id) { + R.id.btn_test -> { + mCountDownHelper?.start() + Thread { + try { + val settingVo = checkSetting() + Log.d(TAG, settingVo.toString()) + LiveEventBus.get(KEY_TEST_ACTION, String::class.java).post("success") + } catch (e: Exception) { + LiveEventBus.get(KEY_TEST_ACTION, String::class.java).post(e.message.toString()) + e.printStackTrace() + Log.e(TAG, "onClick error: ${e.message}") + } + }.start() + return + } + + R.id.btn_del -> { + popToBack() + return + } + + R.id.btn_save -> { + val settingVo = checkSetting() + val intent = Intent() + intent.putExtra(KEY_BACK_DESCRIPTION_ACTION, settingVo.description) + intent.putExtra(KEY_BACK_DATA_ACTION, Gson().toJson(settingVo)) + setFragmentResult(TASK_ACTION_SENDER, intent) + popToBack() + return + } + } + } catch (e: Exception) { + XToastUtils.error(e.message.toString(), 30000) + e.printStackTrace() + Log.e(TAG, "onClick error: ${e.message}") + } + } + + //初始化发送通道下拉框 + @SuppressLint("SetTextI18n") + private fun initSenderSpinner() { + AppDatabase.getInstance(requireContext()).senderDao().getAll().subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(object : SingleObserver> { + override fun onSubscribe(d: Disposable) {} + + override fun onError(e: Throwable) { + e.printStackTrace() + Log.e(TAG, "initSenderSpinner error: ${e.message}") + } + + override fun onSuccess(senderList: List) { + if (senderList.isEmpty()) { + XToastUtils.error(R.string.add_sender_first) + return + } + + senderListAll = senderList as MutableList + for (sender in senderList) { + val name = if (sender.name.length > 20) sender.name.substring(0, 19) else sender.name + senderSpinnerList.add(SenderAdapterItem(name, getDrawable(sender.imageId), sender.id, sender.status)) + } + senderSpinnerAdapter = SenderSpinnerAdapter(senderSpinnerList) + .setIsFilterKey(true).setFilterColor("#EF5362").setBackgroundSelector(R.drawable.selector_custom_spinner_bg) + binding!!.spSender.setAdapter(senderSpinnerAdapter) + + if (senderListSelected.isNotEmpty()) { + for (sender in senderListSelected) { + for (senderItem in senderSpinnerList) { + if (sender.id == senderItem.id) { + addSenderItemLinearLayout(senderItemMap, binding!!.layoutSenders, senderItem) + } + } + } + } + } + }) + binding!!.spSender.setOnItemClickListener { _: AdapterView<*>, _: View, position: Int, _: Long -> + try { + val sender = senderSpinnerAdapter.getItemSource(position) as SenderAdapterItem + senderId = sender.id!! + if (senderId > 0L) { + senderListSelected.forEach { + if (senderId == it.id) { + XToastUtils.warning(getString(R.string.sender_contains_tips)) + return@setOnItemClickListener + } + } + senderListAll.forEach { + if (senderId == it.id) { + senderListSelected.add(it) + addSenderItemLinearLayout(senderItemMap, binding!!.layoutSenders, sender) + } + } + + if (STATUS_OFF == sender.status) { + XToastUtils.warning(getString(R.string.sender_disabled_tips)) + } + } + } catch (e: Exception) { + XToastUtils.error(e.message.toString()) + } + } + } + + /** + * 动态增删Sender + * + * @param senderItemMap 管理item的map,用于删除指定header + * @param layoutSenders 需要挂载item的LinearLayout + * @param sender SenderAdapterItem + */ + @SuppressLint("SetTextI18n") + private fun addSenderItemLinearLayout( + senderItemMap: MutableMap, layoutSenders: LinearLayout, sender: SenderAdapterItem + ) { + val layoutSenderItem = View.inflate(requireContext(), R.layout.item_add_sender, null) as LinearLayout + val ivRemoveSender = layoutSenderItem.findViewById(R.id.iv_remove_sender) + val ivSenderImage = layoutSenderItem.findViewById(R.id.iv_sender_image) + val ivSenderStatus = layoutSenderItem.findViewById(R.id.iv_sender_status) + val tvSenderName = layoutSenderItem.findViewById(R.id.tv_sender_name) + + ivSenderImage.setImageDrawable(sender.icon) + ivSenderStatus.setImageDrawable(getDrawable(if (STATUS_OFF == sender.status) R.drawable.ic_stop else R.drawable.ic_start)) + val senderItemId = sender.id as Long + tvSenderName.text = "ID-$senderItemId:${sender.title}" + + ivRemoveSender.tag = senderItemId + ivRemoveSender.setOnClickListener { view2: View -> + val tagId = view2.tag as Long + layoutSenders.removeView(senderItemMap[tagId]) + senderItemMap.remove(tagId) + //senderListSelected.removeIf { it.id == tagId } + for (it in senderListSelected) { + if (it.id == tagId) { + senderListSelected -= it + break + } + } + Log.d(TAG, senderListSelected.count().toString()) + Log.d(TAG, senderListSelected.toString()) + if (senderListSelected.isEmpty()) senderId = 0L + } + layoutSenders.addView(layoutSenderItem) + senderItemMap[senderItemId] = layoutSenderItem + } + + //检查设置 + @SuppressLint("SetTextI18n") + private fun checkSetting(): SenderSetting { + val description = StringBuilder() + val status: String + if (binding!!.rgStatus.checkedRadioButtonId == R.id.rb_status_enable) { + status = "enable" + description.append(getString(R.string.enable)) + } else { + status = "disable" + description.append(getString(R.string.disable)) + } + description.append(getString(R.string.menu_senders)) + + if (senderListSelected.isNotEmpty()) { + description.append(", ").append(getString(R.string.specified_sender)).append(": ") + description.append(senderListSelected.joinToString("/") { it.name }) + } + + return SenderSetting(description.toString(), status, senderListSelected) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/action/SettingsFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/action/SettingsFragment.kt new file mode 100644 index 00000000..86b89e82 --- /dev/null +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/action/SettingsFragment.kt @@ -0,0 +1,487 @@ +package com.idormy.sms.forwarder.fragment.action + +import android.annotation.SuppressLint +import android.content.Intent +import android.location.Criteria +import android.text.Editable +import android.text.TextUtils +import android.text.TextWatcher +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.AdapterView +import android.widget.CompoundButton +import androidx.lifecycle.Observer +import androidx.work.OneTimeWorkRequestBuilder +import androidx.work.WorkManager +import com.google.gson.Gson +import com.hjq.permissions.OnPermissionCallback +import com.hjq.permissions.Permission +import com.hjq.permissions.XXPermissions +import com.idormy.sms.forwarder.App +import com.idormy.sms.forwarder.R +import com.idormy.sms.forwarder.adapter.spinner.AppListAdapterItem +import com.idormy.sms.forwarder.adapter.spinner.AppListSpinnerAdapter +import com.idormy.sms.forwarder.core.BaseFragment +import com.idormy.sms.forwarder.databinding.FragmentTasksActionSettingsBinding +import com.idormy.sms.forwarder.entity.action.SettingsSetting +import com.idormy.sms.forwarder.utils.CommonUtils +import com.idormy.sms.forwarder.utils.EVENT_LOAD_APP_LIST +import com.idormy.sms.forwarder.utils.KEY_BACK_DATA_ACTION +import com.idormy.sms.forwarder.utils.KEY_BACK_DESCRIPTION_ACTION +import com.idormy.sms.forwarder.utils.KEY_EVENT_DATA_ACTION +import com.idormy.sms.forwarder.utils.KEY_TEST_ACTION +import com.idormy.sms.forwarder.utils.Log +import com.idormy.sms.forwarder.utils.SettingUtils +import com.idormy.sms.forwarder.utils.TASK_ACTION_SETTINGS +import com.idormy.sms.forwarder.utils.XToastUtils +import com.idormy.sms.forwarder.workers.LoadAppListWorker +import com.jeremyliao.liveeventbus.LiveEventBus +import com.xuexiang.xaop.annotation.SingleClick +import com.xuexiang.xpage.annotation.Page +import com.xuexiang.xrouter.annotation.AutoWired +import com.xuexiang.xrouter.launcher.XRouter +import com.xuexiang.xui.utils.CountDownButtonHelper +import com.xuexiang.xui.widget.actionbar.TitleBar +import com.xuexiang.xutil.XUtil + +@Page(name = "Settings") +@Suppress("PrivatePropertyName") +class SettingsFragment : BaseFragment(), View.OnClickListener { + + private val TAG: String = SettingsFragment::class.java.simpleName + private var titleBar: TitleBar? = null + private var mCountDownHelper: CountDownButtonHelper? = null + + //已安装App信息列表 + private val appListSpinnerList = ArrayList() + private lateinit var appListSpinnerAdapter: AppListSpinnerAdapter<*> + private val appListObserver = Observer { it: String -> + Log.d(TAG, "EVENT_LOAD_APP_LIST: $it") + initAppSpinner() + } + + @JvmField + @AutoWired(name = KEY_EVENT_DATA_ACTION) + var eventData: String? = null + + override fun initArgs() { + XRouter.getInstance().inject(this) + } + + override fun viewBindingInflate( + inflater: LayoutInflater, + container: ViewGroup, + ): FragmentTasksActionSettingsBinding { + return FragmentTasksActionSettingsBinding.inflate(inflater, container, false) + } + + override fun initTitle(): TitleBar? { + titleBar = super.initTitle()!!.setImmersive(false).setTitle(R.string.task_settings) + return titleBar + } + + /** + * 初始化控件 + */ + override fun initViews() { + //测试按钮增加倒计时,避免重复点击 + mCountDownHelper = CountDownButtonHelper(binding!!.btnTest, 3) + mCountDownHelper!!.setOnCountDownListener(object : CountDownButtonHelper.OnCountDownListener { + override fun onCountDown(time: Int) { + binding!!.btnTest.text = String.format(getString(R.string.seconds_n), time) + } + + override fun onFinished() { + binding!!.btnTest.text = getString(R.string.test) + } + }) + + Log.d(TAG, "initViews eventData:$eventData") + var settingVo = SettingsSetting(getString(R.string.task_settings_tips)) + if (eventData != null) { + settingVo = Gson().fromJson(eventData, SettingsSetting::class.java) + Log.d(TAG, "initViews settingVo:$settingVo") + } + binding!!.sbEnableSms.isChecked = settingVo.enableSms + binding!!.sbEnablePhone.isChecked = settingVo.enablePhone + binding!!.scbCallType1.isChecked = settingVo.enableCallType1 + binding!!.scbCallType2.isChecked = settingVo.enableCallType2 + binding!!.scbCallType3.isChecked = settingVo.enableCallType3 + binding!!.scbCallType4.isChecked = settingVo.enableCallType4 + binding!!.scbCallType5.isChecked = settingVo.enableCallType5 + binding!!.scbCallType6.isChecked = settingVo.enableCallType6 + binding!!.sbEnableAppNotify.isChecked = settingVo.enableAppNotify + binding!!.scbCancelAppNotify.isChecked = settingVo.enableCancelAppNotify + binding!!.scbNotUserPresent.isChecked = settingVo.enableNotUserPresent + binding!!.sbEnableLocation.isChecked = settingVo.enableLocation + binding!!.rgAccuracy.check( + when (settingVo.locationAccuracy) { + Criteria.ACCURACY_FINE -> R.id.rb_accuracy_fine + Criteria.ACCURACY_COARSE -> R.id.rb_accuracy_coarse + Criteria.NO_REQUIREMENT -> R.id.rb_accuracy_no_requirement + else -> R.id.rb_accuracy_fine + } + ) + binding!!.rgPowerRequirement.check( + when (settingVo.locationPowerRequirement) { + Criteria.POWER_HIGH -> R.id.rb_power_requirement_high + Criteria.POWER_MEDIUM -> R.id.rb_power_requirement_medium + Criteria.POWER_LOW -> R.id.rb_power_requirement_low + Criteria.NO_REQUIREMENT -> R.id.rb_power_requirement_no_requirement + else -> R.id.rb_power_requirement_low + } + ) + binding!!.etMinInterval.setText((settingVo.locationMinInterval / 1000).toString()) + binding!!.etMinDistance.setText(settingVo.locationMinDistance.toString()) + binding!!.sbEnableSmsCommand.isChecked = settingVo.enableSmsCommand + binding!!.etSafePhone.setText(settingVo.smsCommandSafePhone) + binding!!.sbEnableLoadAppList.isChecked = settingVo.enableLoadAppList + binding!!.scbLoadUserApp.isChecked = settingVo.enableLoadUserAppList + binding!!.scbLoadSystemApp.isChecked = settingVo.enableLoadSystemAppList + binding!!.etAppList.setText(settingVo.cancelExtraAppNotify) + binding!!.xsbDuplicateMessagesLimits.setDefaultValue(settingVo.duplicateMessagesLimits) + } + + @SuppressLint("SetTextI18n") + override fun initListeners() { + binding!!.btnTest.setOnClickListener(this) + binding!!.btnDel.setOnClickListener(this) + binding!!.btnSave.setOnClickListener(this) + LiveEventBus.get(KEY_TEST_ACTION, String::class.java).observe(this) { + mCountDownHelper?.finish() + + if (it == "success") { + XToastUtils.success("测试通过", 30000) + } else { + XToastUtils.error(it, 30000) + } + } + + //监听已安装App信息列表加载完成事件 + LiveEventBus.get(EVENT_LOAD_APP_LIST, String::class.java).observeStickyForever(appListObserver) + + binding!!.sbEnableSms.setOnCheckedChangeListener { _: CompoundButton?, isChecked: Boolean -> + if (isChecked) { + //检查权限是否获取 + XXPermissions.with(this) + // 接收 WAP 推送消息 + .permission(Permission.RECEIVE_WAP_PUSH) + // 接收彩信 + .permission(Permission.RECEIVE_MMS) + // 接收短信 + .permission(Permission.RECEIVE_SMS) + // 发送短信 + //.permission(Permission.SEND_SMS) + // 读取短信 + .permission(Permission.READ_SMS).request(object : OnPermissionCallback { + override fun onGranted(permissions: List, all: Boolean) { + if (all) { + XToastUtils.info(R.string.toast_granted_all) + } else { + XToastUtils.info(R.string.toast_granted_part) + } + } + + override fun onDenied(permissions: List, never: Boolean) { + if (never) { + XToastUtils.info(R.string.toast_denied_never) + // 如果是被永久拒绝就跳转到应用权限系统设置页面 + XXPermissions.startPermissionActivity(requireContext(), permissions) + } else { + XToastUtils.info(R.string.toast_denied) + } + binding!!.sbEnableSms.isChecked = false + } + }) + } + } + + binding!!.sbEnablePhone.setOnCheckedChangeListener { _: CompoundButton?, isChecked: Boolean -> + if (isChecked) { + //检查权限是否获取 + XXPermissions.with(this) + // 读取电话状态 + .permission(Permission.READ_PHONE_STATE) + // 读取手机号码 + .permission(Permission.READ_PHONE_NUMBERS) + // 读取通话记录 + .permission(Permission.READ_CALL_LOG) + // 读取联系人 + .permission(Permission.READ_CONTACTS).request(object : OnPermissionCallback { + override fun onGranted(permissions: List, all: Boolean) { + if (all) { + XToastUtils.info(R.string.toast_granted_all) + } else { + XToastUtils.info(R.string.toast_granted_part) + } + } + + override fun onDenied(permissions: List, never: Boolean) { + if (never) { + XToastUtils.info(R.string.toast_denied_never) + // 如果是被永久拒绝就跳转到应用权限系统设置页面 + XXPermissions.startPermissionActivity(requireContext(), permissions) + } else { + XToastUtils.info(R.string.toast_denied) + } + binding!!.sbEnablePhone.isChecked = false + } + }) + } + } + + binding!!.sbEnableAppNotify.setOnCheckedChangeListener { _: CompoundButton?, isChecked: Boolean -> + if (isChecked) { + //检查权限是否获取 + XXPermissions.with(this).permission(Permission.BIND_NOTIFICATION_LISTENER_SERVICE).request(OnPermissionCallback { _, allGranted -> + if (!allGranted) { + binding!!.sbEnableAppNotify.isChecked = false + XToastUtils.error(R.string.tips_notification_listener) + return@OnPermissionCallback + } + + binding!!.sbEnableAppNotify.isChecked = true + CommonUtils.toggleNotificationListenerService(requireContext()) + }) + } + } + + binding!!.sbEnableLocation.setOnCheckedChangeListener { _: CompoundButton?, isChecked: Boolean -> + if (isChecked) { + XXPermissions.with(this).permission(Permission.ACCESS_COARSE_LOCATION).permission(Permission.ACCESS_FINE_LOCATION).permission(Permission.ACCESS_BACKGROUND_LOCATION).request(object : OnPermissionCallback { + override fun onGranted(permissions: List, all: Boolean) { + } + + override fun onDenied(permissions: List, never: Boolean) { + if (never) { + XToastUtils.error(R.string.toast_denied_never) + // 如果是被永久拒绝就跳转到应用权限系统设置页面 + XXPermissions.startPermissionActivity(requireContext(), permissions) + } else { + XToastUtils.error(R.string.toast_denied) + } + binding!!.sbEnableLocation.isChecked = false + } + }) + } + } + //设置位置更新最小时间间隔(单位:毫秒); 默认间隔:10000毫秒,最小间隔:1000毫秒 + binding!!.etMinInterval.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {} + override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {} + override fun afterTextChanged(s: Editable) { + val changedText = s.toString() + if (changedText.isEmpty() || changedText == "0") { + binding!!.etMinInterval.setText("1") + binding!!.etMinInterval.setSelection(binding!!.etMinInterval.text.length) // 将光标移至文本末尾 + return + } + } + }) + //设置位置更新最小距离(单位:米);默认距离:0米 + binding!!.etMinDistance.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {} + override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {} + override fun afterTextChanged(s: Editable) { + val changedText = s.toString() + if (changedText.isEmpty()) { + binding!!.etMinDistance.setText("0") + binding!!.etMinDistance.setSelection(binding!!.etMinInterval.text.length) // 将光标移至文本末尾 + return + } + } + }) + + binding!!.sbEnableSmsCommand.setOnCheckedChangeListener { _: CompoundButton?, isChecked: Boolean -> + if (isChecked) { + //检查权限是否获取 + XXPermissions.with(this) + // 系统设置 + .permission(Permission.WRITE_SETTINGS) + // 接收短信 + .permission(Permission.RECEIVE_SMS) + // 发送短信 + .permission(Permission.SEND_SMS) + // 读取短信 + .permission(Permission.READ_SMS).request(object : OnPermissionCallback { + override fun onGranted(permissions: List, all: Boolean) { + if (all) { + XToastUtils.info(R.string.toast_granted_all) + } else { + XToastUtils.info(R.string.toast_granted_part) + } + } + + override fun onDenied(permissions: List, never: Boolean) { + if (never) { + XToastUtils.info(R.string.toast_denied_never) + // 如果是被永久拒绝就跳转到应用权限系统设置页面 + XXPermissions.startPermissionActivity(requireContext(), permissions) + } else { + XToastUtils.info(R.string.toast_denied) + } + binding!!.sbEnableSmsCommand.isChecked = false + } + }) + } + } + + } + + @SingleClick + override fun onClick(v: View) { + try { + when (v.id) { + R.id.btn_test -> { + mCountDownHelper?.start() + Thread { + try { + val settingVo = checkSetting() + Log.d(TAG, settingVo.toString()) + LiveEventBus.get(KEY_TEST_ACTION, String::class.java).post("success") + } catch (e: Exception) { + LiveEventBus.get(KEY_TEST_ACTION, String::class.java).post(e.message.toString()) + e.printStackTrace() + Log.e(TAG, "onClick error: ${e.message}") + } + }.start() + return + } + + R.id.btn_del -> { + popToBack() + return + } + + R.id.btn_save -> { + val settingVo = checkSetting() + val intent = Intent() + intent.putExtra(KEY_BACK_DESCRIPTION_ACTION, settingVo.description) + intent.putExtra(KEY_BACK_DATA_ACTION, Gson().toJson(settingVo)) + setFragmentResult(TASK_ACTION_SETTINGS, intent) + popToBack() + return + } + } + } catch (e: Exception) { + XToastUtils.error(e.message.toString(), 30000) + e.printStackTrace() + Log.e(TAG, "onClick error: ${e.message}") + } + } + + //初始化APP下拉列表 + private fun initAppSpinner() { + + //未开启异步获取已安装App信息开关时,不显示已安装APP下拉框 + if (!SettingUtils.enableLoadAppList) return + + if (App.UserAppList.isEmpty() && App.SystemAppList.isEmpty()) { + //XToastUtils.info(getString(R.string.loading_app_list)) + val request = OneTimeWorkRequestBuilder().build() + WorkManager.getInstance(XUtil.getContext()).enqueue(request) + return + } + + appListSpinnerList.clear() + if (SettingUtils.enableLoadUserAppList) { + for (appInfo in App.UserAppList) { + if (TextUtils.isEmpty(appInfo.packageName)) continue + appListSpinnerList.add(AppListAdapterItem(appInfo.name, appInfo.icon, appInfo.packageName)) + } + } + if (SettingUtils.enableLoadSystemAppList) { + for (appInfo in App.SystemAppList) { + if (TextUtils.isEmpty(appInfo.packageName)) continue + appListSpinnerList.add(AppListAdapterItem(appInfo.name, appInfo.icon, appInfo.packageName)) + } + } + + //列表为空也不显示下拉框 + if (appListSpinnerList.isEmpty()) return + + appListSpinnerAdapter = AppListSpinnerAdapter(appListSpinnerList).setIsFilterKey(true).setFilterColor("#EF5362").setBackgroundSelector(R.drawable.selector_custom_spinner_bg) + binding!!.spApp.setAdapter(appListSpinnerAdapter) + binding!!.spApp.setOnItemClickListener { _: AdapterView<*>, _: View, position: Int, _: Long -> + try { + val appInfo = appListSpinnerAdapter.getItemSource(position) as AppListAdapterItem + CommonUtils.insertOrReplaceText2Cursor(binding!!.etAppList, appInfo.packageName.toString() + "\n") + } catch (e: Exception) { + XToastUtils.error(e.message.toString()) + } + } + binding!!.layoutSpApp.visibility = View.VISIBLE + + } + + //检查设置 + @SuppressLint("SetTextI18n") + private fun checkSetting(): SettingsSetting { + val enableList = mutableListOf() + val disableList = mutableListOf() + + val enableSms = binding!!.sbEnableSms.isChecked + if (enableSms) enableList.add(getString(R.string.forward_sms)) else disableList.add(getString(R.string.forward_sms)) + + val enablePhone = binding!!.sbEnablePhone.isChecked + if (enablePhone) enableList.add(getString(R.string.forward_missed_calls)) else disableList.add(getString(R.string.forward_missed_calls)) + val enableCallType1 = binding!!.scbCallType1.isChecked + val enableCallType2 = binding!!.scbCallType2.isChecked + val enableCallType3 = binding!!.scbCallType3.isChecked + val enableCallType4 = binding!!.scbCallType4.isChecked + val enableCallType5 = binding!!.scbCallType5.isChecked + val enableCallType6 = binding!!.scbCallType6.isChecked + if (enablePhone && !enableCallType1 && !enableCallType2 && !enableCallType3 && !enableCallType4 && !enableCallType5 && !enableCallType6) { + throw Exception(getString(R.string.enable_phone_fw_tips)) + } + + val enableAppNotify = binding!!.sbEnableAppNotify.isChecked + if (enableAppNotify) enableList.add(getString(R.string.forward_app_notify)) else disableList.add(getString(R.string.forward_app_notify)) + val enableCancelAppNotify = binding!!.scbCancelAppNotify.isChecked + val enableNotUserPresent = binding!!.scbNotUserPresent.isChecked + + val enableLocation = binding!!.sbEnableLocation.isChecked + if (enableLocation) enableList.add(getString(R.string.enable_location)) else disableList.add(getString(R.string.enable_location)) + val locationAccuracy = when (binding!!.rgAccuracy.checkedRadioButtonId) { + R.id.rb_accuracy_fine -> Criteria.ACCURACY_FINE + R.id.rb_accuracy_coarse -> Criteria.ACCURACY_COARSE + R.id.rb_accuracy_no_requirement -> Criteria.NO_REQUIREMENT + else -> Criteria.ACCURACY_FINE + } + val locationPowerRequirement = when (binding!!.rgPowerRequirement.checkedRadioButtonId) { + R.id.rb_power_requirement_high -> Criteria.POWER_HIGH + R.id.rb_power_requirement_medium -> Criteria.POWER_MEDIUM + R.id.rb_power_requirement_low -> Criteria.POWER_LOW + R.id.rb_power_requirement_no_requirement -> Criteria.NO_REQUIREMENT + else -> Criteria.POWER_LOW + } + val locationMinInterval = (binding!!.etMinInterval.text.toString().toLongOrNull() ?: 1) * 1000 + val locationMinDistance = binding!!.etMinDistance.text.toString().toIntOrNull() ?: 0 + + val enableSmsCommand = binding!!.sbEnableSmsCommand.isChecked + if (enableSmsCommand) enableList.add(getString(R.string.sms_command)) else disableList.add(getString(R.string.sms_command)) + val smsCommandSafePhone = binding!!.etSafePhone.text.toString() + + val enableLoadAppList = binding!!.sbEnableLoadAppList.isChecked + if (enableLoadAppList) enableList.add(getString(R.string.load_app_list)) else disableList.add(getString(R.string.load_app_list)) + val enableLoadUserAppList = binding!!.scbLoadUserApp.isChecked + val enableLoadSystemAppList = binding!!.scbLoadSystemApp.isChecked + + val cancelExtraAppNotify = binding!!.etAppList.text.toString() + if (cancelExtraAppNotify.isNotEmpty()) enableList.add(getString(R.string.extra_app)) else disableList.add(getString(R.string.extra_app)) + + val duplicateMessagesLimits = binding!!.xsbDuplicateMessagesLimits.selectedNumber + if (duplicateMessagesLimits > 0) enableList.add(getString(R.string.filtering_duplicate_messages)) else disableList.add(getString(R.string.filtering_duplicate_messages)) + + val description = StringBuilder() + if (enableList.isNotEmpty()) { + description.append(" ").append(getString(R.string.enable_function)).append(": ").append(enableList.joinToString("/")) + } + if (disableList.isNotEmpty()) { + description.append(" ").append(getString(R.string.disable_function)).append(": ").append(disableList.joinToString("/")) + } + + return SettingsSetting(description.toString().trim(), enableSms, enablePhone, enableCallType1, enableCallType2, enableCallType3, enableCallType4, enableCallType5, enableCallType6, enableAppNotify, enableCancelAppNotify, enableNotUserPresent, enableLocation, locationAccuracy, locationPowerRequirement, locationMinInterval, locationMinDistance, enableSmsCommand, smsCommandSafePhone, enableLoadAppList, enableLoadUserAppList, enableLoadSystemAppList, cancelExtraAppNotify, duplicateMessagesLimits) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/condition/LeaveAddressFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/condition/LeaveAddressFragment.kt index 06e89692..da8690cd 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/condition/LeaveAddressFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/condition/LeaveAddressFragment.kt @@ -172,7 +172,7 @@ class LeaveAddressFragment : BaseFragment { if (!App.LocationClient.isStarted()) { - MaterialDialog.Builder(requireContext()).iconRes(R.drawable.auto_task_icon_location).title(R.string.enable_location).content(R.string.enable_location_dialog).cancelable(false).positiveText(R.string.lab_yes).negativeText(R.string.lab_no).onPositive { _: MaterialDialog?, _: DialogAction? -> + MaterialDialog.Builder(requireContext()).iconRes(R.drawable.icon_location).title(R.string.enable_location).content(R.string.enable_location_dialog).cancelable(false).positiveText(R.string.lab_yes).negativeText(R.string.lab_no).onPositive { _: MaterialDialog?, _: DialogAction? -> SettingUtils.enableLocation = true val serviceIntent = Intent(requireContext(), LocationService::class.java) serviceIntent.action = "START" diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/condition/ToAddressFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/condition/ToAddressFragment.kt index 19a6c8e1..cc7db5e1 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/condition/ToAddressFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/condition/ToAddressFragment.kt @@ -172,7 +172,7 @@ class ToAddressFragment : BaseFragment( when (v.id) { R.id.btn_current_coordinates -> { if (!App.LocationClient.isStarted()) { - MaterialDialog.Builder(requireContext()).iconRes(R.drawable.auto_task_icon_location).title(R.string.enable_location).content(R.string.enable_location_dialog).cancelable(false).positiveText(R.string.lab_yes).negativeText(R.string.lab_no).onPositive { _: MaterialDialog?, _: DialogAction? -> + MaterialDialog.Builder(requireContext()).iconRes(R.drawable.icon_location).title(R.string.enable_location).content(R.string.enable_location_dialog).cancelable(false).positiveText(R.string.lab_yes).negativeText(R.string.lab_no).onPositive { _: MaterialDialog?, _: DialogAction? -> SettingUtils.enableLocation = true val serviceIntent = Intent(requireContext(), LocationService::class.java) serviceIntent.action = "START" diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/Constants.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/Constants.kt index 63777c7d..568a4aa4 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/Constants.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/Constants.kt @@ -2,15 +2,13 @@ package com.idormy.sms.forwarder.utils object Worker { const val sendMsgInfo = "send_msg_info" - - //const val sendLogId = "send_log_id" - //const val sendSbnId = "send_sbn_id" const val updateLogs = "update_logs" - - //const val ruleId = "rule_id" const val rule = "rule" const val senderIndex = "sender_index" const val msgId = "msg_id" + //const val ruleId = "rule_id" + //const val sendLogId = "send_log_id" + //const val sendSbnId = "send_sbn_id" } object TaskWorker { @@ -237,9 +235,12 @@ const val TASK_CONDITION_LOCK_SCREEN = 1007 //注意:TASK_ACTION_XXX 枚举值 等于 TASK_ACTION_FRAGMENT_LIST 索引加上 KEY_BACK_CODE_ACTION,不可改变 const val TASK_ACTION_SENDSMS = 2000 const val TASK_ACTION_NOTIFICATION = 2001 -const val TASK_ACTION_FRPC = 2002 -const val TASK_ACTION_HTTPSERVER = 2003 -const val TASK_ACTION_CLEANER = 2004 +const val TASK_ACTION_CLEANER = 2002 +const val TASK_ACTION_SETTINGS = 2003 +const val TASK_ACTION_HTTPSERVER = 2004 +const val TASK_ACTION_FRPC = 2005 +const val TASK_ACTION_RULE = 2006 +const val TASK_ACTION_SENDER = 2007 const val SP_BATTERY_INFO = "battery_info" const val SP_BATTERY_STATUS = "battery_status" diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/task/TaskUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/task/TaskUtils.kt index ade441a8..df831d3a 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/task/TaskUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/task/TaskUtils.kt @@ -22,7 +22,10 @@ import com.idormy.sms.forwarder.utils.TASK_ACTION_CLEANER import com.idormy.sms.forwarder.utils.TASK_ACTION_FRPC import com.idormy.sms.forwarder.utils.TASK_ACTION_HTTPSERVER import com.idormy.sms.forwarder.utils.TASK_ACTION_NOTIFICATION +import com.idormy.sms.forwarder.utils.TASK_ACTION_RULE +import com.idormy.sms.forwarder.utils.TASK_ACTION_SENDER import com.idormy.sms.forwarder.utils.TASK_ACTION_SENDSMS +import com.idormy.sms.forwarder.utils.TASK_ACTION_SETTINGS import com.idormy.sms.forwarder.utils.TASK_CONDITION_BATTERY import com.idormy.sms.forwarder.utils.TASK_CONDITION_CHARGE import com.idormy.sms.forwarder.utils.TASK_CONDITION_CRON @@ -51,10 +54,13 @@ class TaskUtils private constructor() { TASK_CONDITION_CHARGE -> R.drawable.auto_task_icon_charge TASK_CONDITION_LOCK_SCREEN -> R.drawable.auto_task_icon_lock_screen TASK_ACTION_SENDSMS -> R.drawable.auto_task_icon_sms - TASK_ACTION_NOTIFICATION -> R.drawable.auto_task_icon_sender - TASK_ACTION_FRPC -> R.drawable.auto_task_icon_frpc - TASK_ACTION_HTTPSERVER -> R.drawable.auto_task_icon_http_server + TASK_ACTION_NOTIFICATION -> R.drawable.auto_task_icon_notification TASK_ACTION_CLEANER -> R.drawable.auto_task_icon_cleaner + TASK_ACTION_SETTINGS -> R.drawable.auto_task_icon_settings + TASK_ACTION_HTTPSERVER -> R.drawable.auto_task_icon_http_server + TASK_ACTION_FRPC -> R.drawable.auto_task_icon_frpc + TASK_ACTION_RULE -> R.drawable.auto_task_icon_rule + TASK_ACTION_SENDER -> R.drawable.auto_task_icon_sender else -> R.drawable.auto_task_icon_custom_time } } @@ -71,10 +77,13 @@ class TaskUtils private constructor() { TASK_CONDITION_CHARGE -> R.drawable.auto_task_icon_charge_grey TASK_CONDITION_LOCK_SCREEN -> R.drawable.auto_task_icon_lock_screen_grey TASK_ACTION_SENDSMS -> R.drawable.auto_task_icon_sms_grey - TASK_ACTION_NOTIFICATION -> R.drawable.auto_task_icon_sender_grey - TASK_ACTION_FRPC -> R.drawable.auto_task_icon_frpc_grey - TASK_ACTION_HTTPSERVER -> R.drawable.auto_task_icon_http_server_grey + TASK_ACTION_NOTIFICATION -> R.drawable.auto_task_icon_notification_grey TASK_ACTION_CLEANER -> R.drawable.auto_task_icon_cleaner_grey + TASK_ACTION_SETTINGS -> R.drawable.auto_task_icon_settings_grey + TASK_ACTION_HTTPSERVER -> R.drawable.auto_task_icon_http_server_grey + TASK_ACTION_FRPC -> R.drawable.auto_task_icon_frpc_grey + TASK_ACTION_RULE -> R.drawable.auto_task_icon_rule_grey + TASK_ACTION_SENDER -> R.drawable.auto_task_icon_sender_grey else -> R.drawable.auto_task_icon_custom_time_grey } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/workers/ActionWorker.kt b/app/src/main/java/com/idormy/sms/forwarder/workers/ActionWorker.kt index af0faa53..31b9f082 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/workers/ActionWorker.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/workers/ActionWorker.kt @@ -6,6 +6,8 @@ import android.content.Intent import android.content.pm.PackageManager import androidx.core.app.ActivityCompat import androidx.work.CoroutineWorker +import androidx.work.OneTimeWorkRequestBuilder +import androidx.work.WorkManager import androidx.work.WorkerParameters import com.google.gson.Gson import com.idormy.sms.forwarder.App @@ -18,8 +20,10 @@ import com.idormy.sms.forwarder.entity.TaskSetting import com.idormy.sms.forwarder.entity.action.CleanerSetting import com.idormy.sms.forwarder.entity.action.FrpcSetting import com.idormy.sms.forwarder.entity.action.HttpServerSetting +import com.idormy.sms.forwarder.entity.action.SettingsSetting import com.idormy.sms.forwarder.entity.action.SmsSetting import com.idormy.sms.forwarder.service.HttpServerService +import com.idormy.sms.forwarder.service.LocationService import com.idormy.sms.forwarder.utils.CacheUtils import com.idormy.sms.forwarder.utils.EVENT_TOAST_ERROR import com.idormy.sms.forwarder.utils.EVENT_TOAST_INFO @@ -30,14 +34,17 @@ import com.idormy.sms.forwarder.utils.HttpServerUtils import com.idormy.sms.forwarder.utils.Log import com.idormy.sms.forwarder.utils.PhoneUtils import com.idormy.sms.forwarder.utils.SendUtils +import com.idormy.sms.forwarder.utils.SettingUtils import com.idormy.sms.forwarder.utils.TASK_ACTION_CLEANER import com.idormy.sms.forwarder.utils.TASK_ACTION_FRPC import com.idormy.sms.forwarder.utils.TASK_ACTION_HTTPSERVER import com.idormy.sms.forwarder.utils.TASK_ACTION_NOTIFICATION import com.idormy.sms.forwarder.utils.TASK_ACTION_SENDSMS +import com.idormy.sms.forwarder.utils.TASK_ACTION_SETTINGS import com.idormy.sms.forwarder.utils.TaskWorker import com.jeremyliao.liveeventbus.LiveEventBus import com.xuexiang.xrouter.utils.TextUtils +import com.xuexiang.xutil.XUtil import com.xuexiang.xutil.file.FileUtils import com.xuexiang.xutil.resource.ResUtils.getString import frpclib.Frpclib @@ -112,6 +119,73 @@ class ActionWorker(context: Context, params: WorkerParameters) : CoroutineWorker writeLog("send notification success", "SUCCESS") } + TASK_ACTION_CLEANER -> { + val cleanerSetting = Gson().fromJson(action.setting, CleanerSetting::class.java) + if (cleanerSetting == null) { + writeLog("cleanerSetting is null") + continue + } + if (cleanerSetting.days > 0) { + val cal = Calendar.getInstance() + cal.add(Calendar.DAY_OF_MONTH, 0 - cleanerSetting.days) + Core.msg.deleteTimeAgo(cal.timeInMillis) + } else { + Core.msg.deleteAll() + } + //清理缓存 + HistoryUtils.clearPreference() + CacheUtils.clearAllCache(App.context) + + successNum++ + writeLog("cleaner success", "SUCCESS") + } + + TASK_ACTION_SETTINGS -> { + val settingsSetting = Gson().fromJson(action.setting, SettingsSetting::class.java) + if (settingsSetting == null) { + writeLog("settingsSetting is null") + continue + } + + SettingUtils.enableSms = settingsSetting.enableSms + SettingUtils.enablePhone = settingsSetting.enablePhone + SettingUtils.enableCallType1 = settingsSetting.enableCallType1 + SettingUtils.enableCallType2 = settingsSetting.enableCallType2 + SettingUtils.enableCallType3 = settingsSetting.enableCallType3 + SettingUtils.enableCallType4 = settingsSetting.enableCallType4 + SettingUtils.enableCallType5 = settingsSetting.enableCallType5 + SettingUtils.enableCallType6 = settingsSetting.enableCallType6 + SettingUtils.enableAppNotify = settingsSetting.enableAppNotify + SettingUtils.enableCancelAppNotify = settingsSetting.enableCancelAppNotify + SettingUtils.enableNotUserPresent = settingsSetting.enableNotUserPresent + SettingUtils.enableLocation = settingsSetting.enableLocation + SettingUtils.locationAccuracy = settingsSetting.locationAccuracy + SettingUtils.locationPowerRequirement = settingsSetting.locationPowerRequirement + SettingUtils.locationMinInterval = settingsSetting.locationMinInterval + SettingUtils.locationMinDistance = settingsSetting.locationMinDistance + SettingUtils.enableSmsCommand = settingsSetting.enableSmsCommand + SettingUtils.smsCommandSafePhone = settingsSetting.smsCommandSafePhone + SettingUtils.enableLoadAppList = settingsSetting.enableLoadAppList + SettingUtils.enableLoadUserAppList = settingsSetting.enableLoadUserAppList + SettingUtils.enableLoadSystemAppList = settingsSetting.enableLoadSystemAppList + SettingUtils.cancelExtraAppNotify = settingsSetting.cancelExtraAppNotify + SettingUtils.duplicateMessagesLimits = settingsSetting.duplicateMessagesLimits + + if (settingsSetting.enableLocation) { + val serviceIntent = Intent(App.context, LocationService::class.java) + serviceIntent.action = "RESTART" + App.context.startService(serviceIntent) + } + + if (settingsSetting.enableLoadAppList) { + val request = OneTimeWorkRequestBuilder().build() + WorkManager.getInstance(XUtil.getContext()).enqueue(request) + } + + successNum++ + writeLog("send settings success", "SUCCESS") + } + TASK_ACTION_FRPC -> { if (!FileUtils.isFileExists(App.context.filesDir?.absolutePath + "/libs/libgojni.so")) { writeLog("还未下载Frpc库") @@ -182,27 +256,6 @@ class ActionWorker(context: Context, params: WorkerParameters) : CoroutineWorker writeLog("httpServer success", "SUCCESS") } - TASK_ACTION_CLEANER -> { - val cleanerSetting = Gson().fromJson(action.setting, CleanerSetting::class.java) - if (cleanerSetting == null) { - writeLog("cleanerSetting is null") - continue - } - if (cleanerSetting.days > 0) { - val cal = Calendar.getInstance() - cal.add(Calendar.DAY_OF_MONTH, 0 - cleanerSetting.days) - Core.msg.deleteTimeAgo(cal.timeInMillis) - } else { - Core.msg.deleteAll() - } - //清理缓存 - HistoryUtils.clearPreference() - CacheUtils.clearAllCache(App.context) - - successNum++ - writeLog("cleaner success", "SUCCESS") - } - else -> { writeLog("action.type is ${action.type}") } diff --git a/app/src/main/res/drawable/ic_forwarder.webp b/app/src/main/res/drawable-xhdpi/ic_forwarder.webp similarity index 100% rename from app/src/main/res/drawable/ic_forwarder.webp rename to app/src/main/res/drawable-xhdpi/ic_forwarder.webp diff --git a/app/src/main/res/drawable/ic_splash_app_logo.png b/app/src/main/res/drawable-xhdpi/ic_splash_app_logo.png similarity index 100% rename from app/src/main/res/drawable/ic_splash_app_logo.png rename to app/src/main/res/drawable-xhdpi/ic_splash_app_logo.png diff --git a/app/src/main/res/drawable/ic_splash_company_logo.png b/app/src/main/res/drawable-xhdpi/ic_splash_company_logo.png similarity index 100% rename from app/src/main/res/drawable/ic_splash_company_logo.png rename to app/src/main/res/drawable-xhdpi/ic_splash_company_logo.png diff --git a/app/src/main/res/drawable/icon_api_battery_query.webp b/app/src/main/res/drawable-xhdpi/icon_api_battery_query.webp similarity index 100% rename from app/src/main/res/drawable/icon_api_battery_query.webp rename to app/src/main/res/drawable-xhdpi/icon_api_battery_query.webp diff --git a/app/src/main/res/drawable/icon_api_call_query.webp b/app/src/main/res/drawable-xhdpi/icon_api_call_query.webp similarity index 100% rename from app/src/main/res/drawable/icon_api_call_query.webp rename to app/src/main/res/drawable-xhdpi/icon_api_call_query.webp diff --git a/app/src/main/res/drawable/icon_api_clone.webp b/app/src/main/res/drawable-xhdpi/icon_api_clone.webp similarity index 100% rename from app/src/main/res/drawable/icon_api_clone.webp rename to app/src/main/res/drawable-xhdpi/icon_api_clone.webp diff --git a/app/src/main/res/drawable/icon_api_contact_add.webp b/app/src/main/res/drawable-xhdpi/icon_api_contact_add.webp similarity index 100% rename from app/src/main/res/drawable/icon_api_contact_add.webp rename to app/src/main/res/drawable-xhdpi/icon_api_contact_add.webp diff --git a/app/src/main/res/drawable/icon_api_contact_query.webp b/app/src/main/res/drawable-xhdpi/icon_api_contact_query.webp similarity index 100% rename from app/src/main/res/drawable/icon_api_contact_query.webp rename to app/src/main/res/drawable-xhdpi/icon_api_contact_query.webp diff --git a/app/src/main/res/drawable/icon_api_location.webp b/app/src/main/res/drawable-xhdpi/icon_api_location.webp similarity index 100% rename from app/src/main/res/drawable/icon_api_location.webp rename to app/src/main/res/drawable-xhdpi/icon_api_location.webp diff --git a/app/src/main/res/drawable/icon_api_sms_query.webp b/app/src/main/res/drawable-xhdpi/icon_api_sms_query.webp similarity index 100% rename from app/src/main/res/drawable/icon_api_sms_query.webp rename to app/src/main/res/drawable-xhdpi/icon_api_sms_query.webp diff --git a/app/src/main/res/drawable/icon_api_sms_send.webp b/app/src/main/res/drawable-xhdpi/icon_api_sms_send.webp similarity index 100% rename from app/src/main/res/drawable/icon_api_sms_send.webp rename to app/src/main/res/drawable-xhdpi/icon_api_sms_send.webp diff --git a/app/src/main/res/drawable/icon_api_wol.webp b/app/src/main/res/drawable-xhdpi/icon_api_wol.webp similarity index 100% rename from app/src/main/res/drawable/icon_api_wol.webp rename to app/src/main/res/drawable-xhdpi/icon_api_wol.webp diff --git a/app/src/main/res/drawable/icon_bark.webp b/app/src/main/res/drawable-xhdpi/icon_bark.webp similarity index 100% rename from app/src/main/res/drawable/icon_bark.webp rename to app/src/main/res/drawable-xhdpi/icon_bark.webp diff --git a/app/src/main/res/drawable/icon_dingtalk.webp b/app/src/main/res/drawable-xhdpi/icon_dingtalk.webp similarity index 100% rename from app/src/main/res/drawable/icon_dingtalk.webp rename to app/src/main/res/drawable-xhdpi/icon_dingtalk.webp diff --git a/app/src/main/res/drawable/icon_dingtalk_inner.webp b/app/src/main/res/drawable-xhdpi/icon_dingtalk_inner.webp similarity index 100% rename from app/src/main/res/drawable/icon_dingtalk_inner.webp rename to app/src/main/res/drawable-xhdpi/icon_dingtalk_inner.webp diff --git a/app/src/main/res/drawable/icon_email.webp b/app/src/main/res/drawable-xhdpi/icon_email.webp similarity index 100% rename from app/src/main/res/drawable/icon_email.webp rename to app/src/main/res/drawable-xhdpi/icon_email.webp diff --git a/app/src/main/res/drawable/icon_feishu.webp b/app/src/main/res/drawable-xhdpi/icon_feishu.webp similarity index 100% rename from app/src/main/res/drawable/icon_feishu.webp rename to app/src/main/res/drawable-xhdpi/icon_feishu.webp diff --git a/app/src/main/res/drawable/icon_feishu_app.webp b/app/src/main/res/drawable-xhdpi/icon_feishu_app.webp similarity index 100% rename from app/src/main/res/drawable/icon_feishu_app.webp rename to app/src/main/res/drawable-xhdpi/icon_feishu_app.webp diff --git a/app/src/main/res/drawable/icon_gotify.webp b/app/src/main/res/drawable-xhdpi/icon_gotify.webp similarity index 100% rename from app/src/main/res/drawable/icon_gotify.webp rename to app/src/main/res/drawable-xhdpi/icon_gotify.webp diff --git a/app/src/main/res/drawable/icon_pushplus.webp b/app/src/main/res/drawable-xhdpi/icon_pushplus.webp similarity index 100% rename from app/src/main/res/drawable/icon_pushplus.webp rename to app/src/main/res/drawable-xhdpi/icon_pushplus.webp diff --git a/app/src/main/res/drawable/icon_serverchan.webp b/app/src/main/res/drawable-xhdpi/icon_serverchan.webp similarity index 100% rename from app/src/main/res/drawable/icon_serverchan.webp rename to app/src/main/res/drawable-xhdpi/icon_serverchan.webp diff --git a/app/src/main/res/drawable/icon_sms.webp b/app/src/main/res/drawable-xhdpi/icon_sms.webp similarity index 100% rename from app/src/main/res/drawable/icon_sms.webp rename to app/src/main/res/drawable-xhdpi/icon_sms.webp diff --git a/app/src/main/res/drawable/icon_socket.webp b/app/src/main/res/drawable-xhdpi/icon_socket.webp similarity index 100% rename from app/src/main/res/drawable/icon_socket.webp rename to app/src/main/res/drawable-xhdpi/icon_socket.webp diff --git a/app/src/main/res/drawable/icon_telegram.webp b/app/src/main/res/drawable-xhdpi/icon_telegram.webp similarity index 100% rename from app/src/main/res/drawable/icon_telegram.webp rename to app/src/main/res/drawable-xhdpi/icon_telegram.webp diff --git a/app/src/main/res/drawable/icon_url_scheme.webp b/app/src/main/res/drawable-xhdpi/icon_url_scheme.webp similarity index 100% rename from app/src/main/res/drawable/icon_url_scheme.webp rename to app/src/main/res/drawable-xhdpi/icon_url_scheme.webp diff --git a/app/src/main/res/drawable/icon_webhook.webp b/app/src/main/res/drawable-xhdpi/icon_webhook.webp similarity index 100% rename from app/src/main/res/drawable/icon_webhook.webp rename to app/src/main/res/drawable-xhdpi/icon_webhook.webp diff --git a/app/src/main/res/drawable/icon_wework_agent.webp b/app/src/main/res/drawable-xhdpi/icon_wework_agent.webp similarity index 100% rename from app/src/main/res/drawable/icon_wework_agent.webp rename to app/src/main/res/drawable-xhdpi/icon_wework_agent.webp diff --git a/app/src/main/res/drawable/icon_wework_robot.webp b/app/src/main/res/drawable-xhdpi/icon_wework_robot.webp similarity index 100% rename from app/src/main/res/drawable/icon_wework_robot.webp rename to app/src/main/res/drawable-xhdpi/icon_wework_robot.webp diff --git a/app/src/main/res/drawable/auto_task_dialog_icon_alarm.xml b/app/src/main/res/drawable/auto_task_dialog_icon_alarm.xml deleted file mode 100644 index eff09e72..00000000 --- a/app/src/main/res/drawable/auto_task_dialog_icon_alarm.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_dialog_icon_call.xml b/app/src/main/res/drawable/auto_task_dialog_icon_call.xml deleted file mode 100644 index bc95b9e3..00000000 --- a/app/src/main/res/drawable/auto_task_dialog_icon_call.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_dialog_icon_call_enable.xml b/app/src/main/res/drawable/auto_task_dialog_icon_call_enable.xml deleted file mode 100644 index 456f0e72..00000000 --- a/app/src/main/res/drawable/auto_task_dialog_icon_call_enable.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_dialog_icon_media.xml b/app/src/main/res/drawable/auto_task_dialog_icon_media.xml deleted file mode 100644 index 8ba1f78c..00000000 --- a/app/src/main/res/drawable/auto_task_dialog_icon_media.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_dialog_icon_media_enable.xml b/app/src/main/res/drawable/auto_task_dialog_icon_media_enable.xml deleted file mode 100644 index 4effa369..00000000 --- a/app/src/main/res/drawable/auto_task_dialog_icon_media_enable.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_absorbed_mode.xml b/app/src/main/res/drawable/auto_task_icon_absorbed_mode.xml deleted file mode 100644 index 70af1193..00000000 --- a/app/src/main/res/drawable/auto_task_icon_absorbed_mode.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_absorbed_mode_grey.xml b/app/src/main/res/drawable/auto_task_icon_absorbed_mode_grey.xml deleted file mode 100644 index abeaa241..00000000 --- a/app/src/main/res/drawable/auto_task_icon_absorbed_mode_grey.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_absorbed_mode_tran.xml b/app/src/main/res/drawable/auto_task_icon_absorbed_mode_tran.xml deleted file mode 100644 index 7217dfc3..00000000 --- a/app/src/main/res/drawable/auto_task_icon_absorbed_mode_tran.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_adjust_volume.xml b/app/src/main/res/drawable/auto_task_icon_adjust_volume.xml deleted file mode 100644 index b38a5279..00000000 --- a/app/src/main/res/drawable/auto_task_icon_adjust_volume.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_adjust_volume_grey.xml b/app/src/main/res/drawable/auto_task_icon_adjust_volume_grey.xml deleted file mode 100644 index 8a4dae39..00000000 --- a/app/src/main/res/drawable/auto_task_icon_adjust_volume_grey.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_adjust_volume_tran.xml b/app/src/main/res/drawable/auto_task_icon_adjust_volume_tran.xml deleted file mode 100644 index ea64b1ce..00000000 --- a/app/src/main/res/drawable/auto_task_icon_adjust_volume_tran.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_airplane.xml b/app/src/main/res/drawable/auto_task_icon_airplane.xml deleted file mode 100644 index fda4203e..00000000 --- a/app/src/main/res/drawable/auto_task_icon_airplane.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_airplane_grey.xml b/app/src/main/res/drawable/auto_task_icon_airplane_grey.xml deleted file mode 100644 index 888fc2c2..00000000 --- a/app/src/main/res/drawable/auto_task_icon_airplane_grey.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_airplane_tran.xml b/app/src/main/res/drawable/auto_task_icon_airplane_tran.xml deleted file mode 100644 index d88c3249..00000000 --- a/app/src/main/res/drawable/auto_task_icon_airplane_tran.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_battery.xml b/app/src/main/res/drawable/auto_task_icon_battery.xml index 0acbe29e..1ee98ba1 100644 --- a/app/src/main/res/drawable/auto_task_icon_battery.xml +++ b/app/src/main/res/drawable/auto_task_icon_battery.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_battery_tran.xml b/app/src/main/res/drawable/auto_task_icon_battery_tran.xml deleted file mode 100644 index b58ab4ef..00000000 --- a/app/src/main/res/drawable/auto_task_icon_battery_tran.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_bluetooth.xml b/app/src/main/res/drawable/auto_task_icon_bluetooth.xml deleted file mode 100644 index b0db69ce..00000000 --- a/app/src/main/res/drawable/auto_task_icon_bluetooth.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_bluetooth_device.xml b/app/src/main/res/drawable/auto_task_icon_bluetooth_device.xml deleted file mode 100644 index c3b3486d..00000000 --- a/app/src/main/res/drawable/auto_task_icon_bluetooth_device.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_bluetooth_device_grey.xml b/app/src/main/res/drawable/auto_task_icon_bluetooth_device_grey.xml deleted file mode 100644 index 8fcd505b..00000000 --- a/app/src/main/res/drawable/auto_task_icon_bluetooth_device_grey.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_bluetooth_device_tran.xml b/app/src/main/res/drawable/auto_task_icon_bluetooth_device_tran.xml deleted file mode 100644 index b304f0b7..00000000 --- a/app/src/main/res/drawable/auto_task_icon_bluetooth_device_tran.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_bluetooth_grey.xml b/app/src/main/res/drawable/auto_task_icon_bluetooth_grey.xml deleted file mode 100644 index 1cb4d467..00000000 --- a/app/src/main/res/drawable/auto_task_icon_bluetooth_grey.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_bluetooth_tran.xml b/app/src/main/res/drawable/auto_task_icon_bluetooth_tran.xml deleted file mode 100644 index 9ee73a18..00000000 --- a/app/src/main/res/drawable/auto_task_icon_bluetooth_tran.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_brightness.xml b/app/src/main/res/drawable/auto_task_icon_brightness.xml deleted file mode 100644 index 39ab94df..00000000 --- a/app/src/main/res/drawable/auto_task_icon_brightness.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_brightness_grey.xml b/app/src/main/res/drawable/auto_task_icon_brightness_grey.xml deleted file mode 100644 index 122a4441..00000000 --- a/app/src/main/res/drawable/auto_task_icon_brightness_grey.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_brightness_tran.xml b/app/src/main/res/drawable/auto_task_icon_brightness_tran.xml deleted file mode 100644 index eef47315..00000000 --- a/app/src/main/res/drawable/auto_task_icon_brightness_tran.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_charge_tran.xml b/app/src/main/res/drawable/auto_task_icon_charge_tran.xml deleted file mode 100644 index 32741cf1..00000000 --- a/app/src/main/res/drawable/auto_task_icon_charge_tran.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_connect_wlan.xml b/app/src/main/res/drawable/auto_task_icon_connect_wlan.xml deleted file mode 100644 index a2066a5a..00000000 --- a/app/src/main/res/drawable/auto_task_icon_connect_wlan.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_connect_wlan_grey.xml b/app/src/main/res/drawable/auto_task_icon_connect_wlan_grey.xml deleted file mode 100644 index 2e0fcf21..00000000 --- a/app/src/main/res/drawable/auto_task_icon_connect_wlan_grey.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_connect_wlan_tran.xml b/app/src/main/res/drawable/auto_task_icon_connect_wlan_tran.xml deleted file mode 100644 index f45d4e4b..00000000 --- a/app/src/main/res/drawable/auto_task_icon_connect_wlan_tran.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_custom_time_tran.xml b/app/src/main/res/drawable/auto_task_icon_custom_time_tran.xml deleted file mode 100644 index 82a4fdd3..00000000 --- a/app/src/main/res/drawable/auto_task_icon_custom_time_tran.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_dark.xml b/app/src/main/res/drawable/auto_task_icon_dark.xml deleted file mode 100644 index 67dd7e09..00000000 --- a/app/src/main/res/drawable/auto_task_icon_dark.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_dark_grey.xml b/app/src/main/res/drawable/auto_task_icon_dark_grey.xml deleted file mode 100644 index b5fa5a65..00000000 --- a/app/src/main/res/drawable/auto_task_icon_dark_grey.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_dark_tran.xml b/app/src/main/res/drawable/auto_task_icon_dark_tran.xml deleted file mode 100644 index 62d4baa3..00000000 --- a/app/src/main/res/drawable/auto_task_icon_dark_tran.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_default_drive_car.xml b/app/src/main/res/drawable/auto_task_icon_default_drive_car.xml deleted file mode 100644 index 5c0f5f27..00000000 --- a/app/src/main/res/drawable/auto_task_icon_default_drive_car.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_default_drive_car_big.xml b/app/src/main/res/drawable/auto_task_icon_default_drive_car_big.xml deleted file mode 100644 index f59ddd7e..00000000 --- a/app/src/main/res/drawable/auto_task_icon_default_drive_car_big.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_default_get_up.xml b/app/src/main/res/drawable/auto_task_icon_default_get_up.xml deleted file mode 100644 index f5513a39..00000000 --- a/app/src/main/res/drawable/auto_task_icon_default_get_up.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_default_get_up_big.xml b/app/src/main/res/drawable/auto_task_icon_default_get_up_big.xml deleted file mode 100644 index dca80c42..00000000 --- a/app/src/main/res/drawable/auto_task_icon_default_get_up_big.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_default_listen_music.xml b/app/src/main/res/drawable/auto_task_icon_default_listen_music.xml deleted file mode 100644 index 1f0517f6..00000000 --- a/app/src/main/res/drawable/auto_task_icon_default_listen_music.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_default_listen_music_big.xml b/app/src/main/res/drawable/auto_task_icon_default_listen_music_big.xml deleted file mode 100644 index b47dc7b8..00000000 --- a/app/src/main/res/drawable/auto_task_icon_default_listen_music_big.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_default_meet.xml b/app/src/main/res/drawable/auto_task_icon_default_meet.xml deleted file mode 100644 index 548920a7..00000000 --- a/app/src/main/res/drawable/auto_task_icon_default_meet.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_default_meet_big.xml b/app/src/main/res/drawable/auto_task_icon_default_meet_big.xml deleted file mode 100644 index 34854d01..00000000 --- a/app/src/main/res/drawable/auto_task_icon_default_meet_big.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_default_noon_break.xml b/app/src/main/res/drawable/auto_task_icon_default_noon_break.xml deleted file mode 100644 index d87177b0..00000000 --- a/app/src/main/res/drawable/auto_task_icon_default_noon_break.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_default_noon_break_big.xml b/app/src/main/res/drawable/auto_task_icon_default_noon_break_big.xml deleted file mode 100644 index b9d79ab0..00000000 --- a/app/src/main/res/drawable/auto_task_icon_default_noon_break_big.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_default_save_power.xml b/app/src/main/res/drawable/auto_task_icon_default_save_power.xml deleted file mode 100644 index 8dc47a27..00000000 --- a/app/src/main/res/drawable/auto_task_icon_default_save_power.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_default_save_power_big.xml b/app/src/main/res/drawable/auto_task_icon_default_save_power_big.xml deleted file mode 100644 index 576c32e1..00000000 --- a/app/src/main/res/drawable/auto_task_icon_default_save_power_big.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_default_sleep.xml b/app/src/main/res/drawable/auto_task_icon_default_sleep.xml deleted file mode 100644 index a27a888a..00000000 --- a/app/src/main/res/drawable/auto_task_icon_default_sleep.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_default_sleep_big.xml b/app/src/main/res/drawable/auto_task_icon_default_sleep_big.xml deleted file mode 100644 index e7258d05..00000000 --- a/app/src/main/res/drawable/auto_task_icon_default_sleep_big.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_default_watch_video.xml b/app/src/main/res/drawable/auto_task_icon_default_watch_video.xml deleted file mode 100644 index c0e9fcb5..00000000 --- a/app/src/main/res/drawable/auto_task_icon_default_watch_video.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_default_watch_video_big.xml b/app/src/main/res/drawable/auto_task_icon_default_watch_video_big.xml deleted file mode 100644 index 32fddd10..00000000 --- a/app/src/main/res/drawable/auto_task_icon_default_watch_video_big.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_dial_tone.xml b/app/src/main/res/drawable/auto_task_icon_dial_tone.xml deleted file mode 100644 index b69aee4a..00000000 --- a/app/src/main/res/drawable/auto_task_icon_dial_tone.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_dial_tone_grey.xml b/app/src/main/res/drawable/auto_task_icon_dial_tone_grey.xml deleted file mode 100644 index 4a230ee3..00000000 --- a/app/src/main/res/drawable/auto_task_icon_dial_tone_grey.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_dial_tone_tran.xml b/app/src/main/res/drawable/auto_task_icon_dial_tone_tran.xml deleted file mode 100644 index 9778b3ef..00000000 --- a/app/src/main/res/drawable/auto_task_icon_dial_tone_tran.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_disconnect_bluetooth_device.xml b/app/src/main/res/drawable/auto_task_icon_disconnect_bluetooth_device.xml deleted file mode 100644 index 59ffe0d2..00000000 --- a/app/src/main/res/drawable/auto_task_icon_disconnect_bluetooth_device.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_disconnect_bluetooth_device_grey.xml b/app/src/main/res/drawable/auto_task_icon_disconnect_bluetooth_device_grey.xml deleted file mode 100644 index 9603ea06..00000000 --- a/app/src/main/res/drawable/auto_task_icon_disconnect_bluetooth_device_grey.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_disconnect_bluetooth_device_tran.xml b/app/src/main/res/drawable/auto_task_icon_disconnect_bluetooth_device_tran.xml deleted file mode 100644 index 135958e2..00000000 --- a/app/src/main/res/drawable/auto_task_icon_disconnect_bluetooth_device_tran.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_disconnect_wlan.xml b/app/src/main/res/drawable/auto_task_icon_disconnect_wlan.xml deleted file mode 100644 index 49a8eb23..00000000 --- a/app/src/main/res/drawable/auto_task_icon_disconnect_wlan.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_disconnect_wlan_grey.xml b/app/src/main/res/drawable/auto_task_icon_disconnect_wlan_grey.xml deleted file mode 100644 index 77dd5b52..00000000 --- a/app/src/main/res/drawable/auto_task_icon_disconnect_wlan_grey.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_disconnect_wlan_tran.xml b/app/src/main/res/drawable/auto_task_icon_disconnect_wlan_tran.xml deleted file mode 100644 index 56d7d93e..00000000 --- a/app/src/main/res/drawable/auto_task_icon_disconnect_wlan_tran.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_drive.xml b/app/src/main/res/drawable/auto_task_icon_drive.xml deleted file mode 100644 index d5347231..00000000 --- a/app/src/main/res/drawable/auto_task_icon_drive.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_drive_grey.xml b/app/src/main/res/drawable/auto_task_icon_drive_grey.xml deleted file mode 100644 index 257d144d..00000000 --- a/app/src/main/res/drawable/auto_task_icon_drive_grey.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_drive_tran.xml b/app/src/main/res/drawable/auto_task_icon_drive_tran.xml deleted file mode 100644 index 30193e8a..00000000 --- a/app/src/main/res/drawable/auto_task_icon_drive_tran.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_eye_care.xml b/app/src/main/res/drawable/auto_task_icon_eye_care.xml deleted file mode 100644 index bd25d33b..00000000 --- a/app/src/main/res/drawable/auto_task_icon_eye_care.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_eye_care_grey.xml b/app/src/main/res/drawable/auto_task_icon_eye_care_grey.xml deleted file mode 100644 index 1d63e3c9..00000000 --- a/app/src/main/res/drawable/auto_task_icon_eye_care_grey.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_eye_care_tran.xml b/app/src/main/res/drawable/auto_task_icon_eye_care_tran.xml deleted file mode 100644 index 91980518..00000000 --- a/app/src/main/res/drawable/auto_task_icon_eye_care_tran.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_flashlight.xml b/app/src/main/res/drawable/auto_task_icon_flashlight.xml deleted file mode 100644 index b8074318..00000000 --- a/app/src/main/res/drawable/auto_task_icon_flashlight.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_flashlight_grey.xml b/app/src/main/res/drawable/auto_task_icon_flashlight_grey.xml deleted file mode 100644 index a5f2b6ac..00000000 --- a/app/src/main/res/drawable/auto_task_icon_flashlight_grey.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_flashlight_tran.xml b/app/src/main/res/drawable/auto_task_icon_flashlight_tran.xml deleted file mode 100644 index ce15ccfc..00000000 --- a/app/src/main/res/drawable/auto_task_icon_flashlight_tran.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_frpc.xml b/app/src/main/res/drawable/auto_task_icon_frpc.xml index 39405e59..53379501 100644 --- a/app/src/main/res/drawable/auto_task_icon_frpc.xml +++ b/app/src/main/res/drawable/auto_task_icon_frpc.xml @@ -6,7 +6,7 @@ android:viewportWidth="25.0" android:viewportHeight="25.0"> - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_headset_grey.xml b/app/src/main/res/drawable/auto_task_icon_headset_grey.xml deleted file mode 100644 index be4b8cb0..00000000 --- a/app/src/main/res/drawable/auto_task_icon_headset_grey.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_headset_tran.xml b/app/src/main/res/drawable/auto_task_icon_headset_tran.xml deleted file mode 100644 index c7431343..00000000 --- a/app/src/main/res/drawable/auto_task_icon_headset_tran.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_hotspot.xml b/app/src/main/res/drawable/auto_task_icon_hotspot.xml deleted file mode 100644 index ed95a9ac..00000000 --- a/app/src/main/res/drawable/auto_task_icon_hotspot.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_hotspot_grey.xml b/app/src/main/res/drawable/auto_task_icon_hotspot_grey.xml deleted file mode 100644 index 4d066631..00000000 --- a/app/src/main/res/drawable/auto_task_icon_hotspot_grey.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_hotspot_tran.xml b/app/src/main/res/drawable/auto_task_icon_hotspot_tran.xml deleted file mode 100644 index 1161e711..00000000 --- a/app/src/main/res/drawable/auto_task_icon_hotspot_tran.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_incall.xml b/app/src/main/res/drawable/auto_task_icon_incall.xml deleted file mode 100644 index 7c04e4d0..00000000 --- a/app/src/main/res/drawable/auto_task_icon_incall.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_incall_grey.xml b/app/src/main/res/drawable/auto_task_icon_incall_grey.xml deleted file mode 100644 index 0ec39622..00000000 --- a/app/src/main/res/drawable/auto_task_icon_incall_grey.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_incall_tran.xml b/app/src/main/res/drawable/auto_task_icon_incall_tran.xml deleted file mode 100644 index 573ec42f..00000000 --- a/app/src/main/res/drawable/auto_task_icon_incall_tran.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_leave_address_tran.xml b/app/src/main/res/drawable/auto_task_icon_leave_address_tran.xml deleted file mode 100644 index 93213c0a..00000000 --- a/app/src/main/res/drawable/auto_task_icon_leave_address_tran.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_location_grey.xml b/app/src/main/res/drawable/auto_task_icon_location_grey.xml deleted file mode 100644 index 81e2f1b5..00000000 --- a/app/src/main/res/drawable/auto_task_icon_location_grey.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_location_tran.xml b/app/src/main/res/drawable/auto_task_icon_location_tran.xml deleted file mode 100644 index 705c56a0..00000000 --- a/app/src/main/res/drawable/auto_task_icon_location_tran.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_lock_screen_tran.xml b/app/src/main/res/drawable/auto_task_icon_lock_screen_tran.xml deleted file mode 100644 index 07eb04f1..00000000 --- a/app/src/main/res/drawable/auto_task_icon_lock_screen_tran.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_meeting.xml b/app/src/main/res/drawable/auto_task_icon_meeting.xml deleted file mode 100644 index e5f60efd..00000000 --- a/app/src/main/res/drawable/auto_task_icon_meeting.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_metting_grey.xml b/app/src/main/res/drawable/auto_task_icon_metting_grey.xml deleted file mode 100644 index a153eddb..00000000 --- a/app/src/main/res/drawable/auto_task_icon_metting_grey.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_metting_tran.xml b/app/src/main/res/drawable/auto_task_icon_metting_tran.xml deleted file mode 100644 index 418a5101..00000000 --- a/app/src/main/res/drawable/auto_task_icon_metting_tran.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_mute.xml b/app/src/main/res/drawable/auto_task_icon_mute.xml deleted file mode 100644 index 3a381797..00000000 --- a/app/src/main/res/drawable/auto_task_icon_mute.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_mute_grey.xml b/app/src/main/res/drawable/auto_task_icon_mute_grey.xml deleted file mode 100644 index afebe407..00000000 --- a/app/src/main/res/drawable/auto_task_icon_mute_grey.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_mute_tran.xml b/app/src/main/res/drawable/auto_task_icon_mute_tran.xml deleted file mode 100644 index b10ba786..00000000 --- a/app/src/main/res/drawable/auto_task_icon_mute_tran.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_network_tran.xml b/app/src/main/res/drawable/auto_task_icon_network_tran.xml deleted file mode 100644 index 0f487318..00000000 --- a/app/src/main/res/drawable/auto_task_icon_network_tran.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_nfc.xml b/app/src/main/res/drawable/auto_task_icon_nfc.xml deleted file mode 100644 index 432f8c40..00000000 --- a/app/src/main/res/drawable/auto_task_icon_nfc.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_nfc_grey.xml b/app/src/main/res/drawable/auto_task_icon_nfc_grey.xml deleted file mode 100644 index a580c798..00000000 --- a/app/src/main/res/drawable/auto_task_icon_nfc_grey.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_nfc_tran.xml b/app/src/main/res/drawable/auto_task_icon_nfc_tran.xml deleted file mode 100644 index 1c8c9195..00000000 --- a/app/src/main/res/drawable/auto_task_icon_nfc_tran.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_notification.xml b/app/src/main/res/drawable/auto_task_icon_notification.xml new file mode 100644 index 00000000..1dde84b6 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_notification.xml @@ -0,0 +1,20 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_notification_grey.xml b/app/src/main/res/drawable/auto_task_icon_notification_grey.xml new file mode 100644 index 00000000..e0047155 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_notification_grey.xml @@ -0,0 +1,20 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_rotate_off.xml b/app/src/main/res/drawable/auto_task_icon_rotate_off.xml deleted file mode 100644 index b369cbd5..00000000 --- a/app/src/main/res/drawable/auto_task_icon_rotate_off.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_rotate_off_grey.xml b/app/src/main/res/drawable/auto_task_icon_rotate_off_grey.xml deleted file mode 100644 index 6c513a48..00000000 --- a/app/src/main/res/drawable/auto_task_icon_rotate_off_grey.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_rotate_off_tran.xml b/app/src/main/res/drawable/auto_task_icon_rotate_off_tran.xml deleted file mode 100644 index 9cabf6dd..00000000 --- a/app/src/main/res/drawable/auto_task_icon_rotate_off_tran.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_rule.xml b/app/src/main/res/drawable/auto_task_icon_rule.xml new file mode 100644 index 00000000..def3c0a7 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_rule.xml @@ -0,0 +1,20 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_rule_grey.xml b/app/src/main/res/drawable/auto_task_icon_rule_grey.xml new file mode 100644 index 00000000..e989939d --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_rule_grey.xml @@ -0,0 +1,20 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_save_battery.xml b/app/src/main/res/drawable/auto_task_icon_save_battery.xml deleted file mode 100644 index a77fddd5..00000000 --- a/app/src/main/res/drawable/auto_task_icon_save_battery.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_save_battery_grey.xml b/app/src/main/res/drawable/auto_task_icon_save_battery_grey.xml deleted file mode 100644 index 4c54cc85..00000000 --- a/app/src/main/res/drawable/auto_task_icon_save_battery_grey.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_save_battery_tran.xml b/app/src/main/res/drawable/auto_task_icon_save_battery_tran.xml deleted file mode 100644 index faeed846..00000000 --- a/app/src/main/res/drawable/auto_task_icon_save_battery_tran.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_screen_brightness.xml b/app/src/main/res/drawable/auto_task_icon_screen_brightness.xml deleted file mode 100644 index 1ba745be..00000000 --- a/app/src/main/res/drawable/auto_task_icon_screen_brightness.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_screen_brightness_grey.xml b/app/src/main/res/drawable/auto_task_icon_screen_brightness_grey.xml deleted file mode 100644 index d158356b..00000000 --- a/app/src/main/res/drawable/auto_task_icon_screen_brightness_grey.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_screen_brightness_tran.xml b/app/src/main/res/drawable/auto_task_icon_screen_brightness_tran.xml deleted file mode 100644 index 7c9f4fca..00000000 --- a/app/src/main/res/drawable/auto_task_icon_screen_brightness_tran.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_screen_display.xml b/app/src/main/res/drawable/auto_task_icon_screen_display.xml deleted file mode 100644 index 63b9321d..00000000 --- a/app/src/main/res/drawable/auto_task_icon_screen_display.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_screen_display_grey.xml b/app/src/main/res/drawable/auto_task_icon_screen_display_grey.xml deleted file mode 100644 index 60602605..00000000 --- a/app/src/main/res/drawable/auto_task_icon_screen_display_grey.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_screen_display_tran.xml b/app/src/main/res/drawable/auto_task_icon_screen_display_tran.xml deleted file mode 100644 index afdd30d6..00000000 --- a/app/src/main/res/drawable/auto_task_icon_screen_display_tran.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_sender.xml b/app/src/main/res/drawable/auto_task_icon_sender.xml index 94fec49b..c64dd433 100644 --- a/app/src/main/res/drawable/auto_task_icon_sender.xml +++ b/app/src/main/res/drawable/auto_task_icon_sender.xml @@ -6,7 +6,7 @@ android:viewportWidth="25.0" android:viewportHeight="25.0"> + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_settings_grey.xml b/app/src/main/res/drawable/auto_task_icon_settings_grey.xml new file mode 100644 index 00000000..0ec1a07b --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_settings_grey.xml @@ -0,0 +1,20 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_sim.xml b/app/src/main/res/drawable/auto_task_icon_sim.xml index eb422a6f..366242ca 100644 --- a/app/src/main/res/drawable/auto_task_icon_sim.xml +++ b/app/src/main/res/drawable/auto_task_icon_sim.xml @@ -6,7 +6,7 @@ android:viewportWidth="25.0" android:viewportHeight="25.0"> + android:width="25.0dip" + android:height="25.0dip" + android:autoMirrored="true" + android:viewportWidth="25.0" + android:viewportHeight="25.0"> + android:fillColor="@color/color_yellow_primary_default" + android:pathData="M6.66,0.66L18.66,0.66A6,6 0,0 1,24.66 6.66L24.66,18.66A6,6 0,0 1,18.66 24.66L6.66,24.66A6,6 0,0 1,0.66 18.66L0.66,6.66A6,6 0,0 1,6.66 0.66z" /> + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_start_activity.xml b/app/src/main/res/drawable/auto_task_icon_start_activity.xml deleted file mode 100644 index c0223832..00000000 --- a/app/src/main/res/drawable/auto_task_icon_start_activity.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_start_activity_grey.xml b/app/src/main/res/drawable/auto_task_icon_start_activity_grey.xml deleted file mode 100644 index 76268bed..00000000 --- a/app/src/main/res/drawable/auto_task_icon_start_activity_grey.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_start_activity_tran.xml b/app/src/main/res/drawable/auto_task_icon_start_activity_tran.xml deleted file mode 100644 index d42f37e4..00000000 --- a/app/src/main/res/drawable/auto_task_icon_start_activity_tran.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_switch.xml b/app/src/main/res/drawable/auto_task_icon_switch.xml deleted file mode 100644 index 0631a578..00000000 --- a/app/src/main/res/drawable/auto_task_icon_switch.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_switch_grey.xml b/app/src/main/res/drawable/auto_task_icon_switch_grey.xml deleted file mode 100644 index 264532df..00000000 --- a/app/src/main/res/drawable/auto_task_icon_switch_grey.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_switch_tran.xml b/app/src/main/res/drawable/auto_task_icon_switch_tran.xml deleted file mode 100644 index 729b822a..00000000 --- a/app/src/main/res/drawable/auto_task_icon_switch_tran.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_to_address_tran.xml b/app/src/main/res/drawable/auto_task_icon_to_address_tran.xml deleted file mode 100644 index afa33d4c..00000000 --- a/app/src/main/res/drawable/auto_task_icon_to_address_tran.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_touch.xml b/app/src/main/res/drawable/auto_task_icon_touch.xml deleted file mode 100644 index 6660784b..00000000 --- a/app/src/main/res/drawable/auto_task_icon_touch.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_touch_grey.xml b/app/src/main/res/drawable/auto_task_icon_touch_grey.xml deleted file mode 100644 index 22acad2a..00000000 --- a/app/src/main/res/drawable/auto_task_icon_touch_grey.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_touch_tran.xml b/app/src/main/res/drawable/auto_task_icon_touch_tran.xml deleted file mode 100644 index 8c79a412..00000000 --- a/app/src/main/res/drawable/auto_task_icon_touch_tran.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_twinkle.xml b/app/src/main/res/drawable/auto_task_icon_twinkle.xml deleted file mode 100644 index 1036b57b..00000000 --- a/app/src/main/res/drawable/auto_task_icon_twinkle.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_twinkle_grey.xml b/app/src/main/res/drawable/auto_task_icon_twinkle_grey.xml deleted file mode 100644 index 79135356..00000000 --- a/app/src/main/res/drawable/auto_task_icon_twinkle_grey.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_twinkle_tran.xml b/app/src/main/res/drawable/auto_task_icon_twinkle_tran.xml deleted file mode 100644 index eba4b2ad..00000000 --- a/app/src/main/res/drawable/auto_task_icon_twinkle_tran.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_typeface.xml b/app/src/main/res/drawable/auto_task_icon_typeface.xml deleted file mode 100644 index 9e040c88..00000000 --- a/app/src/main/res/drawable/auto_task_icon_typeface.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_typeface_grey.xml b/app/src/main/res/drawable/auto_task_icon_typeface_grey.xml deleted file mode 100644 index dba97d5e..00000000 --- a/app/src/main/res/drawable/auto_task_icon_typeface_grey.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_typeface_tran.xml b/app/src/main/res/drawable/auto_task_icon_typeface_tran.xml deleted file mode 100644 index aefdf266..00000000 --- a/app/src/main/res/drawable/auto_task_icon_typeface_tran.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_wlan.xml b/app/src/main/res/drawable/auto_task_icon_wlan.xml deleted file mode 100644 index d19947cd..00000000 --- a/app/src/main/res/drawable/auto_task_icon_wlan.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_wlan_grey.xml b/app/src/main/res/drawable/auto_task_icon_wlan_grey.xml deleted file mode 100644 index c757e838..00000000 --- a/app/src/main/res/drawable/auto_task_icon_wlan_grey.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_wlan_tran.xml b/app/src/main/res/drawable/auto_task_icon_wlan_tran.xml deleted file mode 100644 index 78fd622d..00000000 --- a/app/src/main/res/drawable/auto_task_icon_wlan_tran.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_zen_mode.xml b/app/src/main/res/drawable/auto_task_icon_zen_mode.xml deleted file mode 100644 index 834929b3..00000000 --- a/app/src/main/res/drawable/auto_task_icon_zen_mode.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_zen_mode_grey.xml b/app/src/main/res/drawable/auto_task_icon_zen_mode_grey.xml deleted file mode 100644 index 1b571573..00000000 --- a/app/src/main/res/drawable/auto_task_icon_zen_mode_grey.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_zen_mode_tran.xml b/app/src/main/res/drawable/auto_task_icon_zen_mode_tran.xml deleted file mode 100644 index 8d08ef6a..00000000 --- a/app/src/main/res/drawable/auto_task_icon_zen_mode_tran.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_app.xml b/app/src/main/res/drawable/ic_app.xml index 2d903a92..d287b28d 100644 --- a/app/src/main/res/drawable/ic_app.xml +++ b/app/src/main/res/drawable/ic_app.xml @@ -1,10 +1,9 @@ diff --git a/app/src/main/res/drawable/ic_phone_in.xml b/app/src/main/res/drawable/ic_phone_in.xml index 171d32c7..af795c06 100644 --- a/app/src/main/res/drawable/ic_phone_in.xml +++ b/app/src/main/res/drawable/ic_phone_in.xml @@ -2,10 +2,9 @@ android:width="24dp" android:height="24dp" android:autoMirrored="true" - android:tint="?attr/colorControlNormal" android:viewportWidth="24" android:viewportHeight="24"> diff --git a/app/src/main/res/drawable/ic_phone_missed.xml b/app/src/main/res/drawable/ic_phone_missed.xml index 3be5c41c..d9d24e08 100644 --- a/app/src/main/res/drawable/ic_phone_missed.xml +++ b/app/src/main/res/drawable/ic_phone_missed.xml @@ -2,10 +2,9 @@ android:width="24dp" android:height="24dp" android:autoMirrored="true" - android:tint="?attr/colorControlNormal" android:viewportWidth="24" android:viewportHeight="24"> diff --git a/app/src/main/res/drawable/ic_phone_out.xml b/app/src/main/res/drawable/ic_phone_out.xml index 4f509378..cbb2d678 100644 --- a/app/src/main/res/drawable/ic_phone_out.xml +++ b/app/src/main/res/drawable/ic_phone_out.xml @@ -2,10 +2,9 @@ android:width="24dp" android:height="24dp" android:autoMirrored="true" - android:tint="?attr/colorControlNormal" android:viewportWidth="24" android:viewportHeight="24"> diff --git a/app/src/main/res/drawable/ic_reply.xml b/app/src/main/res/drawable/ic_reply.xml index be709aea..94727d7d 100644 --- a/app/src/main/res/drawable/ic_reply.xml +++ b/app/src/main/res/drawable/ic_reply.xml @@ -2,10 +2,9 @@ android:width="24dp" android:height="24dp" android:autoMirrored="true" - android:tint="?attr/colorControlNormal" android:viewportWidth="24" android:viewportHeight="24"> diff --git a/app/src/main/res/drawable/ic_sim.xml b/app/src/main/res/drawable/ic_sim.xml index f90e2bfc..94f2f907 100644 --- a/app/src/main/res/drawable/ic_sim.xml +++ b/app/src/main/res/drawable/ic_sim.xml @@ -2,12 +2,11 @@ diff --git a/app/src/main/res/drawable/ic_sim2.xml b/app/src/main/res/drawable/ic_sim2.xml index 2f5732a7..8401ebcc 100644 --- a/app/src/main/res/drawable/ic_sim2.xml +++ b/app/src/main/res/drawable/ic_sim2.xml @@ -2,12 +2,11 @@ diff --git a/app/src/main/res/drawable/ic_sms.xml b/app/src/main/res/drawable/ic_sms.xml index e58c33c4..cd0889aa 100644 --- a/app/src/main/res/drawable/ic_sms.xml +++ b/app/src/main/res/drawable/ic_sms.xml @@ -1,10 +1,9 @@ diff --git a/app/src/main/res/drawable/auto_task_icon_location.xml b/app/src/main/res/drawable/icon_location.xml similarity index 100% rename from app/src/main/res/drawable/auto_task_icon_location.xml rename to app/src/main/res/drawable/icon_location.xml diff --git a/app/src/main/res/drawable/rounded_background.xml b/app/src/main/res/drawable/rounded_background.xml new file mode 100644 index 00000000..acb312a1 --- /dev/null +++ b/app/src/main/res/drawable/rounded_background.xml @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/res/layout/fragment_client.xml b/app/src/main/res/layout/fragment_client.xml index 61808f83..ace6a2aa 100644 --- a/app/src/main/res/layout/fragment_client.xml +++ b/app/src/main/res/layout/fragment_client.xml @@ -41,10 +41,9 @@ @@ -55,7 +55,7 @@ diff --git a/app/src/main/res/layout/fragment_client_sms_send.xml b/app/src/main/res/layout/fragment_client_sms_send.xml index 02caeb8f..65d9e788 100644 --- a/app/src/main/res/layout/fragment_client_sms_send.xml +++ b/app/src/main/res/layout/fragment_client_sms_send.xml @@ -30,7 +30,7 @@ tools:ignore="ImageContrastCheck" /> @@ -64,7 +64,7 @@ @@ -89,7 +89,7 @@ diff --git a/app/src/main/res/layout/fragment_client_wol_send.xml b/app/src/main/res/layout/fragment_client_wol_send.xml index 619cc197..d6a1495a 100644 --- a/app/src/main/res/layout/fragment_client_wol_send.xml +++ b/app/src/main/res/layout/fragment_client_wol_send.xml @@ -30,7 +30,7 @@ tools:ignore="ImageContrastCheck" /> @@ -55,7 +55,7 @@ @@ -80,7 +80,7 @@ diff --git a/app/src/main/res/layout/fragment_rules_edit.xml b/app/src/main/res/layout/fragment_rules_edit.xml index 4800c8ce..fe485c4a 100644 --- a/app/src/main/res/layout/fragment_rules_edit.xml +++ b/app/src/main/res/layout/fragment_rules_edit.xml @@ -20,7 +20,7 @@ android:orientation="vertical"> @@ -112,7 +112,7 @@ @@ -120,7 +120,6 @@ @@ -150,7 +149,7 @@ @@ -158,7 +157,6 @@ @@ -214,7 +212,7 @@ @@ -313,7 +310,6 @@ @@ -340,7 +336,7 @@ @@ -362,7 +358,7 @@ @@ -466,7 +462,7 @@ @@ -511,10 +507,9 @@ @@ -50,7 +50,7 @@ @@ -90,7 +90,7 @@ @@ -114,7 +114,7 @@ @@ -141,7 +141,7 @@ @@ -165,7 +165,7 @@ @@ -189,7 +189,7 @@ @@ -216,7 +216,7 @@ @@ -237,7 +237,7 @@ @@ -304,7 +304,7 @@ @@ -324,7 +324,7 @@ @@ -348,7 +348,7 @@ diff --git a/app/src/main/res/layout/fragment_senders_dingtalk_group_robot.xml b/app/src/main/res/layout/fragment_senders_dingtalk_group_robot.xml index a9230488..460c789e 100644 --- a/app/src/main/res/layout/fragment_senders_dingtalk_group_robot.xml +++ b/app/src/main/res/layout/fragment_senders_dingtalk_group_robot.xml @@ -20,7 +20,7 @@ android:orientation="vertical"> @@ -50,7 +50,7 @@ @@ -79,7 +79,7 @@ @@ -101,7 +101,7 @@ @@ -124,7 +124,7 @@ @@ -219,7 +219,7 @@ @@ -50,7 +50,7 @@ @@ -76,7 +76,7 @@ @@ -100,7 +100,7 @@ @@ -124,7 +124,7 @@ @@ -162,7 +162,7 @@ @@ -196,7 +196,7 @@ @@ -302,7 +302,7 @@ @@ -61,7 +61,7 @@ tools:ignore="HardcodedText" /> @@ -91,7 +91,7 @@ @@ -116,7 +116,7 @@ @@ -200,7 +200,7 @@ tools:ignore="HardcodedText" /> @@ -242,7 +242,7 @@ @@ -294,7 +294,7 @@ tools:ignore="HardcodedText" /> @@ -330,7 +330,7 @@ diff --git a/app/src/main/res/layout/fragment_senders_feishu.xml b/app/src/main/res/layout/fragment_senders_feishu.xml index 6d8af3a4..ca46861f 100644 --- a/app/src/main/res/layout/fragment_senders_feishu.xml +++ b/app/src/main/res/layout/fragment_senders_feishu.xml @@ -20,7 +20,7 @@ android:orientation="vertical"> @@ -50,7 +50,7 @@ @@ -70,7 +70,7 @@ @@ -90,7 +90,7 @@ @@ -124,7 +124,7 @@ diff --git a/app/src/main/res/layout/fragment_senders_feishu_app.xml b/app/src/main/res/layout/fragment_senders_feishu_app.xml index ba40018e..924eeda0 100644 --- a/app/src/main/res/layout/fragment_senders_feishu_app.xml +++ b/app/src/main/res/layout/fragment_senders_feishu_app.xml @@ -20,7 +20,7 @@ android:orientation="vertical"> @@ -50,7 +50,7 @@ @@ -73,7 +73,7 @@ @@ -96,7 +96,7 @@ @@ -119,7 +119,7 @@ @@ -154,7 +154,7 @@ diff --git a/app/src/main/res/layout/fragment_senders_gotify.xml b/app/src/main/res/layout/fragment_senders_gotify.xml index 13c0f294..58b28dfd 100644 --- a/app/src/main/res/layout/fragment_senders_gotify.xml +++ b/app/src/main/res/layout/fragment_senders_gotify.xml @@ -20,7 +20,7 @@ android:orientation="vertical"> @@ -50,7 +50,7 @@ @@ -78,7 +78,7 @@ @@ -145,7 +145,7 @@ diff --git a/app/src/main/res/layout/fragment_senders_pushplus.xml b/app/src/main/res/layout/fragment_senders_pushplus.xml index 2f21cadd..f29faf7c 100644 --- a/app/src/main/res/layout/fragment_senders_pushplus.xml +++ b/app/src/main/res/layout/fragment_senders_pushplus.xml @@ -20,7 +20,7 @@ android:orientation="vertical"> @@ -50,7 +50,7 @@ @@ -98,7 +98,7 @@ @@ -121,7 +121,7 @@ @@ -163,7 +163,7 @@ @@ -205,7 +205,7 @@ @@ -251,7 +251,7 @@ diff --git a/app/src/main/res/layout/fragment_senders_serverchan.xml b/app/src/main/res/layout/fragment_senders_serverchan.xml index 648f6e87..cfa68d6f 100644 --- a/app/src/main/res/layout/fragment_senders_serverchan.xml +++ b/app/src/main/res/layout/fragment_senders_serverchan.xml @@ -20,7 +20,7 @@ android:orientation="vertical"> @@ -50,7 +50,7 @@ @@ -71,7 +71,7 @@ @@ -110,7 +110,7 @@ diff --git a/app/src/main/res/layout/fragment_senders_sms.xml b/app/src/main/res/layout/fragment_senders_sms.xml index 040e7de9..521e3bcf 100644 --- a/app/src/main/res/layout/fragment_senders_sms.xml +++ b/app/src/main/res/layout/fragment_senders_sms.xml @@ -20,7 +20,7 @@ android:orientation="vertical"> @@ -50,7 +50,7 @@ @@ -88,7 +88,7 @@ @@ -130,7 +130,7 @@ diff --git a/app/src/main/res/layout/fragment_senders_socket.xml b/app/src/main/res/layout/fragment_senders_socket.xml index 94adf0df..766652d5 100644 --- a/app/src/main/res/layout/fragment_senders_socket.xml +++ b/app/src/main/res/layout/fragment_senders_socket.xml @@ -20,7 +20,7 @@ android:orientation="vertical"> @@ -50,7 +50,7 @@ @@ -88,7 +88,7 @@ @@ -130,7 +130,7 @@ @@ -171,7 +171,7 @@ @@ -210,7 +210,7 @@ @@ -239,7 +239,7 @@ @@ -261,7 +261,7 @@ @@ -289,7 +289,7 @@ android:orientation="vertical"> @@ -313,7 +313,7 @@ @@ -337,7 +337,7 @@ @@ -370,7 +370,7 @@ @@ -394,7 +394,7 @@ diff --git a/app/src/main/res/layout/fragment_senders_telegram.xml b/app/src/main/res/layout/fragment_senders_telegram.xml index 44cf2db4..82ac54e5 100644 --- a/app/src/main/res/layout/fragment_senders_telegram.xml +++ b/app/src/main/res/layout/fragment_senders_telegram.xml @@ -20,7 +20,7 @@ android:orientation="vertical"> @@ -50,7 +50,7 @@ @@ -70,7 +70,7 @@ @@ -103,7 +103,7 @@ @@ -126,7 +126,7 @@ @@ -165,7 +165,7 @@ @@ -50,7 +50,7 @@ diff --git a/app/src/main/res/layout/fragment_senders_webhook.xml b/app/src/main/res/layout/fragment_senders_webhook.xml index db0796e6..3a5cd6cf 100644 --- a/app/src/main/res/layout/fragment_senders_webhook.xml +++ b/app/src/main/res/layout/fragment_senders_webhook.xml @@ -20,7 +20,7 @@ android:orientation="vertical"> @@ -52,7 +52,7 @@ @@ -99,7 +99,7 @@ @@ -137,7 +137,7 @@ @@ -168,7 +168,7 @@ @@ -191,7 +191,7 @@ @@ -215,7 +215,7 @@ diff --git a/app/src/main/res/layout/fragment_senders_wework_agent.xml b/app/src/main/res/layout/fragment_senders_wework_agent.xml index c723bff5..c52ea35d 100644 --- a/app/src/main/res/layout/fragment_senders_wework_agent.xml +++ b/app/src/main/res/layout/fragment_senders_wework_agent.xml @@ -20,7 +20,7 @@ android:orientation="vertical"> @@ -50,7 +50,7 @@ @@ -74,7 +74,7 @@ @@ -86,7 +86,8 @@ android:gravity="end" android:maxLines="1" android:text="@string/Agent_ID" - android:textStyle="bold" /> + android:textStyle="bold" + tools:ignore="TextSizeCheck" /> @@ -124,15 +125,15 @@ @@ -146,9 +147,10 @@ + android:textStyle="bold" + tools:ignore="TextSizeCheck" /> - + android:text="@string/touser_tips" + android:textSize="@dimen/text_size_mini" + tools:ignore="SmallSp" /> - + android:singleLine="true" + app:met_clearButton="true" /> + android:textStyle="bold" + tools:ignore="TextSizeCheck" /> - + android:text="@string/toparty_tips" + android:textSize="@dimen/text_size_mini" + tools:ignore="SmallSp" /> - + android:singleLine="true" + app:met_clearButton="true" /> + android:textStyle="bold" + tools:ignore="TextSizeCheck" /> - + android:text="@string/totag_tips" + android:textSize="@dimen/text_size_mini" + tools:ignore="SmallSp" /> - + android:singleLine="true" + app:met_clearButton="true" /> @@ -304,7 +305,7 @@ @@ -420,33 +421,34 @@ + android:textStyle="bold" + tools:ignore="TextSizeCheck" /> - + android:text="@string/customize_api_tips" + android:textSize="@dimen/text_size_mini" + tools:ignore="SmallSp" /> - + android:singleLine="true" + app:met_clearButton="true" /> diff --git a/app/src/main/res/layout/fragment_senders_wework_robot.xml b/app/src/main/res/layout/fragment_senders_wework_robot.xml index 62e4c4aa..3863e254 100644 --- a/app/src/main/res/layout/fragment_senders_wework_robot.xml +++ b/app/src/main/res/layout/fragment_senders_wework_robot.xml @@ -20,7 +20,7 @@ android:orientation="vertical"> @@ -52,7 +52,7 @@ @@ -81,7 +81,7 @@ @@ -122,7 +122,7 @@ android:orientation="vertical"> @@ -146,7 +146,7 @@ @@ -235,10 +233,9 @@ @@ -284,10 +281,9 @@ @@ -333,10 +329,9 @@ @@ -382,10 +377,9 @@ @@ -446,10 +440,9 @@ @@ -522,7 +515,7 @@ @@ -557,7 +550,7 @@ @@ -592,7 +585,7 @@ @@ -627,7 +620,7 @@ @@ -662,7 +655,7 @@ @@ -698,7 +691,7 @@ @@ -733,7 +726,7 @@ @@ -768,7 +761,7 @@ diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml index ffb090cc..4add95c2 100644 --- a/app/src/main/res/layout/fragment_settings.xml +++ b/app/src/main/res/layout/fragment_settings.xml @@ -43,7 +43,7 @@ @@ -78,7 +78,7 @@ @@ -249,7 +249,7 @@ @@ -334,7 +334,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="5dp" - android:layout_marginTop="5dp" + android:layout_marginTop="10dp" android:layout_marginEnd="5dp" android:gravity="center_vertical" android:orientation="horizontal"> @@ -356,7 +356,7 @@ @@ -580,7 +580,7 @@ @@ -624,7 +624,7 @@ @@ -708,7 +708,7 @@ @@ -936,7 +934,7 @@ @@ -959,6 +957,7 @@ android:text="@string/battery_setting_tips" android:textSize="@dimen/text_size_mini" tools:ignore="SmallSp" /> + @@ -1007,7 +1006,7 @@ @@ -1096,15 +1095,11 @@ @@ -1506,11 +1497,10 @@ @@ -1618,10 +1608,9 @@ + android:layout_height="wrap_content"> @@ -1702,13 +1691,12 @@ diff --git a/app/src/main/res/layout/fragment_tasks_action_frpc.xml b/app/src/main/res/layout/fragment_tasks_action_frpc.xml index 4e4baf5d..8b999d0f 100644 --- a/app/src/main/res/layout/fragment_tasks_action_frpc.xml +++ b/app/src/main/res/layout/fragment_tasks_action_frpc.xml @@ -29,7 +29,7 @@ tools:ignore="ImageContrastCheck" /> diff --git a/app/src/main/res/layout/fragment_tasks_action_http_server.xml b/app/src/main/res/layout/fragment_tasks_action_http_server.xml index 5fef00c7..a31bd4c5 100644 --- a/app/src/main/res/layout/fragment_tasks_action_http_server.xml +++ b/app/src/main/res/layout/fragment_tasks_action_http_server.xml @@ -29,7 +29,7 @@ tools:ignore="ImageContrastCheck" /> @@ -105,7 +105,7 @@ @@ -140,7 +140,7 @@ @@ -175,7 +175,7 @@ @@ -210,7 +210,7 @@ @@ -245,7 +245,7 @@ @@ -280,7 +280,7 @@ @@ -316,7 +316,7 @@ @@ -351,7 +351,7 @@ @@ -386,7 +386,7 @@ diff --git a/app/src/main/res/layout/fragment_tasks_action_notification.xml b/app/src/main/res/layout/fragment_tasks_action_notification.xml index a29d8588..a7db7e9c 100644 --- a/app/src/main/res/layout/fragment_tasks_action_notification.xml +++ b/app/src/main/res/layout/fragment_tasks_action_notification.xml @@ -29,7 +29,7 @@ tools:ignore="ImageContrastCheck" /> @@ -120,7 +120,7 @@ @@ -143,7 +143,7 @@ @@ -248,7 +248,7 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_tasks_action_send_sms.xml b/app/src/main/res/layout/fragment_tasks_action_send_sms.xml index 3a988aba..9e5d06cc 100644 --- a/app/src/main/res/layout/fragment_tasks_action_send_sms.xml +++ b/app/src/main/res/layout/fragment_tasks_action_send_sms.xml @@ -29,7 +29,7 @@ tools:ignore="ImageContrastCheck" /> @@ -71,7 +71,7 @@ @@ -104,7 +104,7 @@ diff --git a/app/src/main/res/layout/fragment_tasks_action_sender.xml b/app/src/main/res/layout/fragment_tasks_action_sender.xml new file mode 100644 index 00000000..7757a91f --- /dev/null +++ b/app/src/main/res/layout/fragment_tasks_action_sender.xml @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_tasks_action_settings.xml b/app/src/main/res/layout/fragment_tasks_action_settings.xml new file mode 100644 index 00000000..3c8f9702 --- /dev/null +++ b/app/src/main/res/layout/fragment_tasks_action_settings.xml @@ -0,0 +1,863 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_tasks_condition_battery.xml b/app/src/main/res/layout/fragment_tasks_condition_battery.xml index 43b304a5..138ab1e9 100644 --- a/app/src/main/res/layout/fragment_tasks_condition_battery.xml +++ b/app/src/main/res/layout/fragment_tasks_condition_battery.xml @@ -29,7 +29,7 @@ tools:ignore="ImageContrastCheck" /> @@ -115,7 +115,7 @@ diff --git a/app/src/main/res/layout/fragment_tasks_condition_charge.xml b/app/src/main/res/layout/fragment_tasks_condition_charge.xml index 5ba0f4fc..a7064399 100644 --- a/app/src/main/res/layout/fragment_tasks_condition_charge.xml +++ b/app/src/main/res/layout/fragment_tasks_condition_charge.xml @@ -29,7 +29,7 @@ tools:ignore="ImageContrastCheck" /> diff --git a/app/src/main/res/layout/fragment_tasks_condition_cron.xml b/app/src/main/res/layout/fragment_tasks_condition_cron.xml index 22f77e98..cbaf05ec 100644 --- a/app/src/main/res/layout/fragment_tasks_condition_cron.xml +++ b/app/src/main/res/layout/fragment_tasks_condition_cron.xml @@ -29,7 +29,7 @@ tools:ignore="ImageContrastCheck" /> @@ -198,7 +198,7 @@ diff --git a/app/src/main/res/layout/fragment_tasks_condition_lock_screen.xml b/app/src/main/res/layout/fragment_tasks_condition_lock_screen.xml index a275199d..7d6e1974 100644 --- a/app/src/main/res/layout/fragment_tasks_condition_lock_screen.xml +++ b/app/src/main/res/layout/fragment_tasks_condition_lock_screen.xml @@ -29,7 +29,7 @@ tools:ignore="ImageContrastCheck" /> diff --git a/app/src/main/res/layout/fragment_tasks_condition_network.xml b/app/src/main/res/layout/fragment_tasks_condition_network.xml index ab58e6f1..ce31b5da 100644 --- a/app/src/main/res/layout/fragment_tasks_condition_network.xml +++ b/app/src/main/res/layout/fragment_tasks_condition_network.xml @@ -29,7 +29,7 @@ tools:ignore="ImageContrastCheck" /> diff --git a/app/src/main/res/layout/fragment_tasks_condition_sim.xml b/app/src/main/res/layout/fragment_tasks_condition_sim.xml index a8375ce3..bc4bcfb9 100644 --- a/app/src/main/res/layout/fragment_tasks_condition_sim.xml +++ b/app/src/main/res/layout/fragment_tasks_condition_sim.xml @@ -29,7 +29,7 @@ tools:ignore="ImageContrastCheck" /> diff --git a/app/src/main/res/layout/fragment_tasks_condition_to_address.xml b/app/src/main/res/layout/fragment_tasks_condition_to_address.xml index 2fc7d7d6..75a002ef 100644 --- a/app/src/main/res/layout/fragment_tasks_condition_to_address.xml +++ b/app/src/main/res/layout/fragment_tasks_condition_to_address.xml @@ -29,7 +29,7 @@ tools:ignore="ImageContrastCheck" /> diff --git a/app/src/main/res/layout/fragment_tasks_edit.xml b/app/src/main/res/layout/fragment_tasks_edit.xml index 09f78ef2..4cc525e1 100644 --- a/app/src/main/res/layout/fragment_tasks_edit.xml +++ b/app/src/main/res/layout/fragment_tasks_edit.xml @@ -20,7 +20,7 @@ android:orientation="vertical"> @@ -77,7 +77,7 @@ @@ -163,7 +163,7 @@ diff --git a/app/src/main/res/layout/item_add_rule.xml b/app/src/main/res/layout/item_add_rule.xml new file mode 100644 index 00000000..813949e9 --- /dev/null +++ b/app/src/main/res/layout/item_add_rule.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index be9aeff2..377f44a2 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -5,6 +5,8 @@ App Enabled Disabled + Enabled + Disabled Receive Send Missed @@ -233,6 +235,7 @@ The rule has deleted. Please add a new sender and then choose it. Please add a sender first. + Please add a rule first. Select Sender Rule tester: Test SIM Slot @@ -821,6 +824,7 @@ Group Robot → Webhook Address Group Robot → Security Settings → Signature Verification Please go to the corresponding official website to obtain + Drop-down selection, keyword fuzzy match Drop-down selection, keyword fuzzy match Installed Apps Extra Apps @@ -969,7 +973,9 @@ Frpc failed to run Successfully deleted [Note] The sending channel has been disabled, and its associated rules will not be sent even if they match! + [Note] The rule has been disabled, will not be sent even if they match! [Note] The sending channel is already in the list, no need to add it again! + [Note] The rule is already in the list, no need to add it again! Local Call: Remote SMS: Clear @@ -1079,6 +1085,7 @@ SM4 Key Client or server interaction messages are all encrypted and decrypted using SM4 + Del Rule Del Sender Sender is disabled Unknown sender @@ -1110,7 +1117,7 @@ IPv4 IPv6 - Enable Location Function + Location Service Enable location services to use this feature. Yes or No? Used for locating the phone, {{LOCATION}} tag. Accuracy @@ -1176,6 +1183,12 @@ Manage HttpServer start/stop and enable/disable functions Cleaner Delete FW. logs older than N days, delete cache, etc. + Settings + Control the configuration switch of "Settings". + Rules On/Off + Control enabling/disabling of "Forwarding Rules" + Channels On/Off + Control enabling/disabling of "Sending Channels" Second Minute @@ -1282,7 +1295,11 @@ , %s meters from the center. Specified Uid - Enter FRPC config UIDs, separate with commas. + Enter FRPC UIDs (comma-separated) + Specified Rule + Enter Rule IDs (comma-separated) + Specified Sender + Enter Sender IDs (comma-separated) English Current Activity language: diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index bc95a381..544bbd33 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -5,6 +5,8 @@ 应用 已启用 已禁用 + 启用 + 禁用 接收 发送 未接来电 @@ -234,6 +236,7 @@ 该条规则已经删除! 请选择发送通道(若无,请先添加) 请先去设置发送通道页面添加 + 请先去设置转发规则页面添加 发送通道 转发规则测试 测试模拟的接收卡槽 @@ -789,7 +792,7 @@ 示例:https://qyapi.weixin.qq.com/cgixx?key=xxx 消息类型 纯文本 - markdown + Markdown 被@人的手机号 Tips:多个手机号用逗号分开,例如:18888888888,19999999999 被@人的userid @@ -822,6 +825,7 @@ 群机器人→Webhook 地址 群机器人→安全设置→签名校验 请前往对应的官网地址获取 + 下拉选择,关键字模糊匹配 下拉选择,关键字模糊匹配 已装APP列表 额外消除应用通知 @@ -970,7 +974,9 @@ Frpc运行失败 删除成功 【注意】该发送通道已经禁用,其关联的规则即便匹配上也不会发送! + 【注意】该转发规则已经禁用,即便匹配上也不会发送! 【注意】该发送通道已经在列表中,无需重复添加! + 【注意】该转发规则已经在列表中,无需重复添加! 本地呼叫: 远程发短信: 清除 @@ -1080,6 +1086,7 @@ SM4密钥 客户端/服务端交互采用SM4加解密 + 删除转发规则 删除发送通道 发送通道已禁用 未知发送通道 @@ -1111,7 +1118,7 @@ IPv4 IPv6 - 启用GPS定位功能 + GPS定位服务 必须开启定位服务,才能使用获取!\n是否立即启用? 以便支持 查找手机、{{定位信息}}标签 等需要GPS的功能 位置精度 @@ -1170,13 +1177,19 @@ 锁屏解锁 在屏幕锁定或解锁后立即或指定时间触发 发送短信 - 通道推送 + 推送通知 Frpc设置 控制内网穿透·FRPC的启动/停止 HttpServer设置 控制HttpServer的启动/停止,并支持启用/禁用功能 清理日志 批量删除N天前的转发记录、删除缓存等 + 通用设置 + 控制【通用设置】的配置开关 + 启停规则 + 控制【转发规则】的启用/禁用 + 启停通道 + 控制【发送通道】的启用/禁用 @@ -1284,6 +1297,10 @@ 指定配置 填写frpc的uid,多个以半角逗号分隔 + 指定规则 + 填写转发规则的id,多个以半角逗号分隔 + 指定通道 + 填写发送通道的id,多个以半角逗号分隔 简体中文 当前 Activity 语种: diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 7d74bee6..87cf3317 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -5,6 +5,8 @@ 應用 已啟用 已禁用 + 啟用 + 禁用 接收 發送 未接來電 @@ -234,6 +236,7 @@ 該條規則已刪除! 請選擇發送通道(若無,請先添加) 請先去設置發送通道頁面添加 + 請先去設置轉發規則頁面添加 發送通道 轉發規則測試 測試模擬的接收卡槽 @@ -789,7 +792,7 @@ 示例:https://qyapi.weixin.qq.com/cgixx?key=xxx 消息類型 純文本 - markdown + Markdown 被@人的手機號 Tips:多個手機號用逗號分開,例如:,19999999999 被@人的userid @@ -822,6 +825,7 @@ 群機器人→Webhook 地址 群機器人→安全設置→簽名驗證 請前往對應的官網地址獲取 + 下拉選擇,關鍵字模糊匹配 下拉選擇,關鍵字模糊匹配 已裝APP列表 額外消除應用通知 @@ -970,7 +974,9 @@ Frpc運行失敗 刪除成功 【注意】該發送通道已經禁用,其關聯的規則即便匹配上也不會發送! + 【注意】該轉發規則已經禁用,即便匹配上也不會發送! 【注意】該發送通道已經在列表中,無需重複添加! + 【注意】該轉發規則已經在列表中,無需重複添加! 本地呼叫: 遠程發簡訊: 清除 @@ -1080,9 +1086,10 @@ SM4密鑰 客戶端/服務端交互採用SM4加解密 - 刪除寄件者通道 - 寄件者通道已停用 - 未知的寄件者通道 + 刪除轉發規則 + 刪除發送通道 + 發送通道已停用 + 未知的發送通道 網絡類型 運營商名稱 本地IP @@ -1111,7 +1118,7 @@ IPv4 IPv6 - 啟用GPS定位功能 + GPS定位服務 必須開啟定位服務,才能使用獲取!\n是否立即啟用? 以便支持 查找手機、{{定位信息}}標籤 等需要GPS的功能 位置精度 @@ -1170,13 +1177,19 @@ 鎖屏解鎖 在屏幕鎖定或解鎖後立即或指定時間觸發 發送簡訊 - 通道推送 + 推送通知 Frpc設置 控制內網穿透·FRPC的啟動/停止 HttpServer設置 控制HttpServer的啟動/停止,並支持啟用/禁用功能 清理日誌 批量刪除N天前的轉發記錄、刪除快取等 + 通用設置 + 控制「通用設置」的設定開關 + 啟停規則 + 控制【轉發規則】的啟用/禁用 + 啟停通道 + 控制【發送通道】的啟用/禁用 @@ -1284,6 +1297,11 @@ 指定配置 填寫frpc的uid,多個以半角逗號分隔 + 指定規則 + 填寫轉發規則的ID,多個以半角逗號分隔 + 指定通道 + 填寫發送通道的ID,多個以半角逗號分隔 + 繁體中文 當前 Activity 語種: diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index aa48efab..47dc5e04 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -5,6 +5,8 @@ 应用 已启用 已禁用 + 启用 + 禁用 接收 发送 未接来电 @@ -234,6 +236,7 @@ 该条规则已经删除! 请选择发送通道(若无,请先添加) 请先去设置发送通道页面添加 + 请先去设置转发规则页面添加 发送通道 转发规则测试 测试模拟的接收卡槽 @@ -789,7 +792,7 @@ 示例:https://qyapi.weixin.qq.com/cgixx?key=xxx 消息类型 纯文本 - markdown + Markdown 被@人的手机号 Tips:多个手机号用逗号分开,例如:18888888888,19999999999 被@人的userid @@ -822,6 +825,7 @@ 群机器人→Webhook 地址 群机器人→安全设置→签名校验 请前往对应的官网地址获取 + 下拉选择,关键字模糊匹配 下拉选择,关键字模糊匹配 已装APP列表 额外消除应用通知 @@ -970,7 +974,9 @@ Frpc运行失败 删除成功 【注意】该发送通道已经禁用,其关联的规则即便匹配上也不会发送! + 【注意】该转发规则已经禁用,即便匹配上也不会发送! 【注意】该发送通道已经在列表中,无需重复添加! + 【注意】该转发规则已经在列表中,无需重复添加! 本地呼叫: 远程发短信: 清除 @@ -1080,6 +1086,7 @@ SM4密钥 客户端/服务端交互采用SM4加解密 + 删除转发规则 删除发送通道 发送通道已禁用 未知发送通道 @@ -1111,7 +1118,7 @@ IPv4 IPv6 - 启用GPS定位功能 + GPS定位服务 必须开启定位服务,才能使用获取!\n是否立即启用? 以便支持 查找手机、{{定位信息}}标签 等需要GPS的功能 位置精度 @@ -1170,13 +1177,19 @@ 锁屏解锁 在屏幕锁定或解锁后立即或指定时间触发 发送短信 - 通道推送 + 推送通知 Frpc设置 控制内网穿透·FRPC的启动/停止 HttpServer设置 控制HttpServer的启动/停止,并支持启用/禁用功能 清理日志 批量删除N天前的转发记录、删除缓存等 + 通用设置 + 控制【通用设置】的配置开关 + 启停规则 + 控制【转发规则】的启用/禁用 + 启停通道 + 控制【发送通道】的启用/禁用 @@ -1284,6 +1297,10 @@ 指定配置 填写frpc的uid,多个以半角逗号分隔 + 指定规则 + 填写转发规则的id,多个以半角逗号分隔 + 指定通道 + 填写发送通道的id,多个以半角逗号分隔 跟随系统 当前 Activity 语种: diff --git a/app/src/main/res/values/styles_widget.xml b/app/src/main/res/values/styles_widget.xml index e6016c37..9ccc4f62 100644 --- a/app/src/main/res/values/styles_widget.xml +++ b/app/src/main/res/values/styles_widget.xml @@ -69,98 +69,39 @@ - - - - - - - - - - - - -