整理:code review
This commit is contained in:
parent
5ca161629f
commit
0faa6bf26a
|
@ -1,3 +1,4 @@
|
|||
#file: noinspection YAMLSchemaValidation
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: SmsForwarder 使用流程与问题排查流程
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
//file:noinspection GrDeprecatedAPIUsage
|
||||
//file:noinspection DependencyNotationArgument
|
||||
plugins {
|
||||
id 'com.android.application'
|
||||
id 'kotlin-android'
|
||||
|
@ -159,7 +161,7 @@ android {
|
|||
}
|
||||
}
|
||||
|
||||
android.applicationVariants.all { variant ->
|
||||
android.applicationVariants.configureEach { variant ->
|
||||
// Assigns a different version code for each output APK.
|
||||
variant.outputs.each { output ->
|
||||
def date = new Date().format("yyyyMMdd", TimeZone.getTimeZone("GMT+08"))
|
||||
|
@ -197,8 +199,11 @@ dependencies {
|
|||
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
|
||||
androidTestImplementation deps.espresso.core
|
||||
|
||||
//noinspection GradleDependency
|
||||
implementation 'androidx.core:core-ktx:1.9.0'
|
||||
//noinspection GradleDependency
|
||||
implementation 'androidx.activity:activity-ktx:1.6.1'
|
||||
//noinspection GradleDependency
|
||||
implementation 'androidx.fragment:fragment-ktx:1.5.5'
|
||||
implementation "androidx.cardview:cardview:1.0.0"
|
||||
implementation 'androidx.appcompat:appcompat:1.6.1'
|
||||
|
@ -231,15 +236,22 @@ dependencies {
|
|||
//implementation 'com.meituan.android.walle:library:1.1.6'
|
||||
|
||||
def work_version = '2.8.1'
|
||||
//noinspection GradleDependency
|
||||
api("androidx.work:work-multiprocess:$work_version")
|
||||
//noinspection GradleDependency
|
||||
api("androidx.work:work-runtime-ktx:$work_version")
|
||||
|
||||
//Android Room
|
||||
def room_version = '2.5.2'
|
||||
//noinspection GradleDependency
|
||||
implementation "androidx.room:room-ktx:$room_version"
|
||||
//noinspection GradleDependency
|
||||
implementation "androidx.room:room-runtime:$room_version"
|
||||
//noinspection GradleDependency
|
||||
implementation "androidx.room:room-paging:$room_version"
|
||||
//noinspection GradleDependency
|
||||
implementation "androidx.room:room-rxjava2:$room_version"
|
||||
//noinspection KaptUsageInsteadOfKsp
|
||||
kapt "androidx.room:room-compiler:$room_version"
|
||||
|
||||
//CodeView:https://github.com/AmrDeveloper/CodeView
|
||||
|
@ -258,12 +270,14 @@ dependencies {
|
|||
implementation "com.squareup.retrofit2:adapter-rxjava2:$retrofit2_version"
|
||||
|
||||
def paging_version = "3.1.1"
|
||||
//noinspection GradleDependency
|
||||
implementation "androidx.paging:paging-runtime-ktx:$paging_version"
|
||||
// alternatively - without Android dependencies for tests
|
||||
//noinspection GradleDependency
|
||||
testImplementation "androidx.paging:paging-common-ktx:$paging_version"
|
||||
|
||||
//权限请求框架:https://github.com/getActivity/XXPermissions
|
||||
implementation 'com.github.getActivity:XXPermissions:18.2'
|
||||
implementation 'com.github.getActivity:XXPermissions:18.5'
|
||||
|
||||
def mail_version = '1.6.7'
|
||||
implementation "com.sun.mail:android-mail:$mail_version"
|
||||
|
|
|
@ -230,7 +230,8 @@
|
|||
android:enabled="true" />
|
||||
<service
|
||||
android:name=".service.LocationService"
|
||||
android:enabled="true" />
|
||||
android:enabled="true"
|
||||
android:foregroundServiceType="location" />
|
||||
<service
|
||||
android:name=".service.NotificationService"
|
||||
android:enabled="true"
|
||||
|
@ -241,10 +242,6 @@
|
|||
<action android:name="android.service.notification.NotificationListenerService" />
|
||||
</intent-filter>
|
||||
</service>
|
||||
<service
|
||||
android:name=".workers.CronWorker"
|
||||
android:exported="false"
|
||||
android:permission="android.permission.BIND_JOB_SERVICE" />
|
||||
|
||||
<receiver
|
||||
android:name=".receiver.BatteryReceiver"
|
||||
|
|
|
@ -14,8 +14,8 @@ import com.alibaba.android.vlayout.DelegateAdapter
|
|||
* @author xuexiang
|
||||
* @since 2020/3/20 12:17 AM
|
||||
*/
|
||||
@Suppress("unused", "WRONG_TYPE_PARAMETER_NULLABILITY_FOR_JAVA_OVERRIDE")
|
||||
abstract class XDelegateAdapter<T, V : RecyclerView.ViewHolder?> : DelegateAdapter.Adapter<V> {
|
||||
@Suppress("unused")
|
||||
abstract class XDelegateAdapter<T, V : RecyclerView.ViewHolder> : DelegateAdapter.Adapter<V> {
|
||||
/**
|
||||
* 数据源
|
||||
*/
|
||||
|
|
|
@ -3,7 +3,7 @@ package com.idormy.sms.forwarder.adapter.spinner
|
|||
import android.graphics.drawable.Drawable
|
||||
import com.xuexiang.xui.utils.ResUtils
|
||||
|
||||
@Suppress("unused")
|
||||
@Suppress("unused", "DEPRECATION")
|
||||
class AppListAdapterItem {
|
||||
|
||||
var name: String = ""
|
||||
|
|
|
@ -4,7 +4,7 @@ import android.content.Context
|
|||
import android.graphics.drawable.Drawable
|
||||
import com.xuexiang.xui.utils.ResUtils
|
||||
|
||||
@Suppress("unused")
|
||||
@Suppress("unused", "DEPRECATION")
|
||||
class SenderAdapterItem {
|
||||
|
||||
//标题内容
|
||||
|
|
|
@ -20,6 +20,7 @@ import java.net.URISyntaxException
|
|||
* @author xuexiang
|
||||
* @since 2019-10-21 9:51
|
||||
*/
|
||||
@Suppress("DEPRECATION")
|
||||
class WebViewInterceptDialog : AppCompatActivity(), DialogInterface.OnDismissListener {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
|
|
@ -8,7 +8,7 @@ import androidx.room.PrimaryKey
|
|||
import com.idormy.sms.forwarder.R
|
||||
import com.idormy.sms.forwarder.utils.STATUS_ON
|
||||
import kotlinx.parcelize.Parcelize
|
||||
import java.util.*
|
||||
import java.util.Date
|
||||
|
||||
@Parcelize
|
||||
@Entity(tableName = "Frpc")
|
||||
|
|
|
@ -1,10 +1,13 @@
|
|||
package com.idormy.sms.forwarder.database.entity
|
||||
|
||||
import android.os.Parcelable
|
||||
import androidx.room.*
|
||||
import com.idormy.sms.forwarder.R
|
||||
import androidx.room.ColumnInfo
|
||||
import androidx.room.Entity
|
||||
import androidx.room.ForeignKey
|
||||
import androidx.room.Index
|
||||
import androidx.room.PrimaryKey
|
||||
import kotlinx.parcelize.Parcelize
|
||||
import java.util.*
|
||||
import java.util.Date
|
||||
|
||||
@Parcelize
|
||||
@Entity(
|
||||
|
|
|
@ -4,9 +4,24 @@ import android.os.Parcelable
|
|||
import androidx.room.ColumnInfo
|
||||
import androidx.room.DatabaseView
|
||||
import com.idormy.sms.forwarder.R
|
||||
import com.idormy.sms.forwarder.utils.*
|
||||
import com.idormy.sms.forwarder.utils.TYPE_BARK
|
||||
import com.idormy.sms.forwarder.utils.TYPE_DINGTALK_GROUP_ROBOT
|
||||
import com.idormy.sms.forwarder.utils.TYPE_DINGTALK_INNER_ROBOT
|
||||
import com.idormy.sms.forwarder.utils.TYPE_EMAIL
|
||||
import com.idormy.sms.forwarder.utils.TYPE_FEISHU
|
||||
import com.idormy.sms.forwarder.utils.TYPE_FEISHU_APP
|
||||
import com.idormy.sms.forwarder.utils.TYPE_GOTIFY
|
||||
import com.idormy.sms.forwarder.utils.TYPE_PUSHPLUS
|
||||
import com.idormy.sms.forwarder.utils.TYPE_SERVERCHAN
|
||||
import com.idormy.sms.forwarder.utils.TYPE_SMS
|
||||
import com.idormy.sms.forwarder.utils.TYPE_SOCKET
|
||||
import com.idormy.sms.forwarder.utils.TYPE_TELEGRAM
|
||||
import com.idormy.sms.forwarder.utils.TYPE_URL_SCHEME
|
||||
import com.idormy.sms.forwarder.utils.TYPE_WEBHOOK
|
||||
import com.idormy.sms.forwarder.utils.TYPE_WEWORK_AGENT
|
||||
import com.idormy.sms.forwarder.utils.TYPE_WEWORK_ROBOT
|
||||
import kotlinx.parcelize.Parcelize
|
||||
import java.util.*
|
||||
import java.util.Date
|
||||
|
||||
@Parcelize
|
||||
@DatabaseView("SELECT LOGS.id,LOGS.type,LOGS.msg_id,LOGS.rule_id,LOGS.sender_id,LOGS.forward_status,LOGS.forward_response,LOGS.TIME,Rule.filed AS rule_filed,Rule.`check` AS rule_check,Rule.value AS rule_value,Rule.sim_slot AS rule_sim_slot,Sender.type AS sender_type,Sender.NAME AS sender_name FROM LOGS LEFT JOIN Rule ON LOGS.rule_id = Rule.id LEFT JOIN Sender ON LOGS.sender_id = Sender.id")
|
||||
|
|
|
@ -7,7 +7,7 @@ import androidx.room.Index
|
|||
import androidx.room.PrimaryKey
|
||||
import com.idormy.sms.forwarder.R
|
||||
import kotlinx.parcelize.Parcelize
|
||||
import java.util.*
|
||||
import java.util.Date
|
||||
|
||||
@Parcelize
|
||||
@Entity(
|
||||
|
|
|
@ -5,9 +5,25 @@ import androidx.room.ColumnInfo
|
|||
import androidx.room.Entity
|
||||
import androidx.room.PrimaryKey
|
||||
import com.idormy.sms.forwarder.R
|
||||
import com.idormy.sms.forwarder.utils.*
|
||||
import com.idormy.sms.forwarder.utils.STATUS_OFF
|
||||
import com.idormy.sms.forwarder.utils.TYPE_BARK
|
||||
import com.idormy.sms.forwarder.utils.TYPE_DINGTALK_GROUP_ROBOT
|
||||
import com.idormy.sms.forwarder.utils.TYPE_DINGTALK_INNER_ROBOT
|
||||
import com.idormy.sms.forwarder.utils.TYPE_EMAIL
|
||||
import com.idormy.sms.forwarder.utils.TYPE_FEISHU
|
||||
import com.idormy.sms.forwarder.utils.TYPE_FEISHU_APP
|
||||
import com.idormy.sms.forwarder.utils.TYPE_GOTIFY
|
||||
import com.idormy.sms.forwarder.utils.TYPE_PUSHPLUS
|
||||
import com.idormy.sms.forwarder.utils.TYPE_SERVERCHAN
|
||||
import com.idormy.sms.forwarder.utils.TYPE_SMS
|
||||
import com.idormy.sms.forwarder.utils.TYPE_SOCKET
|
||||
import com.idormy.sms.forwarder.utils.TYPE_TELEGRAM
|
||||
import com.idormy.sms.forwarder.utils.TYPE_URL_SCHEME
|
||||
import com.idormy.sms.forwarder.utils.TYPE_WEBHOOK
|
||||
import com.idormy.sms.forwarder.utils.TYPE_WEWORK_AGENT
|
||||
import com.idormy.sms.forwarder.utils.TYPE_WEWORK_ROBOT
|
||||
import kotlinx.parcelize.Parcelize
|
||||
import java.util.*
|
||||
import java.util.Date
|
||||
|
||||
@Parcelize
|
||||
@Entity(tableName = "Sender")
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package com.idormy.sms.forwarder.database.ext
|
||||
|
||||
import androidx.room.TypeConverter
|
||||
import java.util.*
|
||||
import java.util.Date
|
||||
|
||||
@Suppress("unused")
|
||||
class ConvertersDate {
|
||||
|
|
|
@ -3,7 +3,6 @@ package com.idormy.sms.forwarder.database.ext
|
|||
import androidx.room.TypeConverter
|
||||
import com.idormy.sms.forwarder.core.Core
|
||||
import com.idormy.sms.forwarder.database.entity.Sender
|
||||
import java.util.*
|
||||
|
||||
@Suppress("unused")
|
||||
class ConvertersSenderList {
|
||||
|
|
|
@ -1,20 +1,13 @@
|
|||
package com.idormy.sms.forwarder.database.viewmodel
|
||||
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import androidx.paging.Pager
|
||||
import androidx.paging.PagingConfig
|
||||
import androidx.paging.PagingData
|
||||
import androidx.paging.cachedIn
|
||||
import com.idormy.sms.forwarder.database.dao.LogsDao
|
||||
import com.idormy.sms.forwarder.database.entity.LogsAndRuleAndSender
|
||||
import com.idormy.sms.forwarder.database.ext.ioThread
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
class LogsViewModel(private val dao: LogsDao) : ViewModel() {
|
||||
private var type: String = "sms"
|
||||
//private var type: String = "sms"
|
||||
|
||||
fun setType(type: String): LogsViewModel {
|
||||
/*fun setType(type: String): LogsViewModel {
|
||||
this.type = type
|
||||
return this
|
||||
}
|
||||
|
@ -27,7 +20,7 @@ class LogsViewModel(private val dao: LogsDao) : ViewModel() {
|
|||
)
|
||||
) {
|
||||
dao.pagingSource(type)
|
||||
}.flow.cachedIn(viewModelScope)
|
||||
}.flow.cachedIn(viewModelScope)*/
|
||||
|
||||
fun delete(id: Long) = ioThread {
|
||||
dao.delete(id)
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package com.idormy.sms.forwarder.entity.result
|
||||
|
||||
@Suppress("PropertyName")
|
||||
data class FeishuAppResult(
|
||||
var code: Long,
|
||||
var msg: String,
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package com.idormy.sms.forwarder.entity.result
|
||||
|
||||
@Suppress("PropertyName")
|
||||
data class WeworkAgentResult(
|
||||
var errcode: Long,
|
||||
var errmsg: String,
|
||||
|
|
|
@ -36,7 +36,7 @@ import com.xuexiang.xutil.XUtil
|
|||
class AppListFragment : BaseFragment<FragmentAppListBinding?>() {
|
||||
|
||||
private val TAG: String = AppListFragment::class.java.simpleName
|
||||
var appListAdapter: AppListAdapter? = null
|
||||
private var appListAdapter: AppListAdapter? = null
|
||||
private val appListObserver = Observer { it: String ->
|
||||
Log.d(TAG, "EVENT_LOAD_APP_LIST: $it")
|
||||
appListAdapter?.refresh(getAppsList(false))
|
||||
|
|
|
@ -16,7 +16,14 @@ import com.idormy.sms.forwarder.core.BaseFragment
|
|||
import com.idormy.sms.forwarder.databinding.FragmentClientBinding
|
||||
import com.idormy.sms.forwarder.server.model.BaseResponse
|
||||
import com.idormy.sms.forwarder.server.model.ConfigData
|
||||
import com.idormy.sms.forwarder.utils.*
|
||||
import com.idormy.sms.forwarder.utils.Base64
|
||||
import com.idormy.sms.forwarder.utils.CLIENT_FRAGMENT_LIST
|
||||
import com.idormy.sms.forwarder.utils.CommonUtils
|
||||
import com.idormy.sms.forwarder.utils.HttpServerUtils
|
||||
import com.idormy.sms.forwarder.utils.RSACrypt
|
||||
import com.idormy.sms.forwarder.utils.SM4Crypt
|
||||
import com.idormy.sms.forwarder.utils.SettingUtils
|
||||
import com.idormy.sms.forwarder.utils.XToastUtils
|
||||
import com.xuexiang.xaop.annotation.SingleClick
|
||||
import com.xuexiang.xhttp2.XHttp
|
||||
import com.xuexiang.xhttp2.cache.model.CacheMode
|
||||
|
@ -38,11 +45,11 @@ import com.xuexiang.xui.widget.dialog.materialdialog.MaterialDialog
|
|||
import com.xuexiang.xutil.XUtil
|
||||
import com.xuexiang.xutil.data.ConvertTools
|
||||
|
||||
@Suppress("PropertyName")
|
||||
@Suppress("PrivatePropertyName")
|
||||
@Page(name = "主动控制·客户端")
|
||||
class ClientFragment : BaseFragment<FragmentClientBinding?>(), View.OnClickListener, RecyclerViewHolder.OnItemClickListener<PageInfo> {
|
||||
|
||||
val TAG: String = ClientFragment::class.java.simpleName
|
||||
private val TAG: String = ClientFragment::class.java.simpleName
|
||||
private var appContext: App? = null
|
||||
private var serverConfig: ConfigData? = null
|
||||
private var serverHistory: MutableMap<String, String> = mutableMapOf()
|
||||
|
@ -125,14 +132,17 @@ class ClientFragment : BaseFragment<FragmentClientBinding?>(), View.OnClickListe
|
|||
safetyMeasuresId = R.id.rb_safety_measures_sign
|
||||
binding!!.tvSignKey.text = getString(R.string.sign_key)
|
||||
}
|
||||
|
||||
2 -> {
|
||||
safetyMeasuresId = R.id.rb_safety_measures_rsa
|
||||
binding!!.tvSignKey.text = getString(R.string.public_key)
|
||||
}
|
||||
|
||||
3 -> {
|
||||
safetyMeasuresId = R.id.rb_safety_measures_sm4
|
||||
binding!!.tvSignKey.text = getString(R.string.sm4_key)
|
||||
}
|
||||
|
||||
else -> {
|
||||
binding!!.layoutSignKey.visibility = View.GONE
|
||||
}
|
||||
|
@ -146,14 +156,17 @@ class ClientFragment : BaseFragment<FragmentClientBinding?>(), View.OnClickListe
|
|||
safetyMeasures = 1
|
||||
binding!!.tvSignKey.text = getString(R.string.sign_key)
|
||||
}
|
||||
|
||||
R.id.rb_safety_measures_rsa -> {
|
||||
safetyMeasures = 2
|
||||
binding!!.tvSignKey.text = getString(R.string.public_key)
|
||||
}
|
||||
|
||||
R.id.rb_safety_measures_sm4 -> {
|
||||
safetyMeasures = 3
|
||||
binding!!.tvSignKey.text = getString(R.string.sm4_key)
|
||||
}
|
||||
|
||||
else -> {
|
||||
binding!!.layoutSignKey.visibility = View.GONE
|
||||
}
|
||||
|
@ -185,6 +198,7 @@ class ClientFragment : BaseFragment<FragmentClientBinding?>(), View.OnClickListe
|
|||
}
|
||||
CommonUtils.previewPicture(this, getString(R.string.url_wechat_miniprogram), null)
|
||||
}
|
||||
|
||||
R.id.btn_server_history -> {
|
||||
if (serverHistory.isEmpty()) {
|
||||
XToastUtils.warning(getString(R.string.no_server_history))
|
||||
|
@ -213,14 +227,17 @@ class ClientFragment : BaseFragment<FragmentClientBinding?>(), View.OnClickListe
|
|||
safetyMeasuresId = R.id.rb_safety_measures_sign
|
||||
binding!!.tvSignKey.text = getString(R.string.sign_key)
|
||||
}
|
||||
|
||||
"2" -> {
|
||||
safetyMeasuresId = R.id.rb_safety_measures_rsa
|
||||
binding!!.tvSignKey.text = getString(R.string.public_key)
|
||||
}
|
||||
|
||||
"3" -> {
|
||||
safetyMeasuresId = R.id.rb_safety_measures_sm4
|
||||
binding!!.tvSignKey.text = getString(R.string.sm4_key)
|
||||
}
|
||||
|
||||
else -> {
|
||||
binding!!.tvSignKey.visibility = View.GONE
|
||||
binding!!.etSignKey.visibility = View.GONE
|
||||
|
@ -237,6 +254,7 @@ class ClientFragment : BaseFragment<FragmentClientBinding?>(), View.OnClickListe
|
|||
HttpServerUtils.serverHistory = ""
|
||||
}.show()
|
||||
}
|
||||
|
||||
R.id.btn_server_test -> {
|
||||
if (!CommonUtils.checkUrl(HttpServerUtils.serverAddress)) {
|
||||
XToastUtils.error(getString(R.string.invalid_service_address))
|
||||
|
@ -244,6 +262,7 @@ class ClientFragment : BaseFragment<FragmentClientBinding?>(), View.OnClickListe
|
|||
}
|
||||
queryConfig(true)
|
||||
}
|
||||
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
|
@ -311,6 +330,7 @@ class ClientFragment : BaseFragment<FragmentClientBinding?>(), View.OnClickListe
|
|||
}
|
||||
postRequest.upString(requestMsg)
|
||||
}
|
||||
|
||||
3 -> {
|
||||
try {
|
||||
val sm4Key = ConvertTools.hexStringToByteArray(HttpServerUtils.clientSignKey)
|
||||
|
@ -325,6 +345,7 @@ class ClientFragment : BaseFragment<FragmentClientBinding?>(), View.OnClickListe
|
|||
}
|
||||
postRequest.upString(requestMsg)
|
||||
}
|
||||
|
||||
else -> {
|
||||
postRequest.upJson(requestMsg)
|
||||
}
|
||||
|
|
|
@ -31,8 +31,8 @@ import com.xuexiang.xui.widget.edittext.materialedittext.MaterialEditText
|
|||
@Page(name = "Frp内网穿透·编辑配置")
|
||||
class FrpcEditFragment : BaseFragment<FragmentFrpcEditBinding?>() {
|
||||
|
||||
var titleBar: TitleBar? = null
|
||||
var frpc: Frpc? = null
|
||||
private var titleBar: TitleBar? = null
|
||||
private var frpc: Frpc? = null
|
||||
private val viewModel by viewModels<FrpcViewModel> { BaseViewModelFactory(context) }
|
||||
|
||||
override fun initViews() {
|
||||
|
|
|
@ -17,7 +17,14 @@ import com.idormy.sms.forwarder.database.viewmodel.BaseViewModelFactory
|
|||
import com.idormy.sms.forwarder.database.viewmodel.FrpcViewModel
|
||||
import com.idormy.sms.forwarder.databinding.FragmentFrpcsBinding
|
||||
import com.idormy.sms.forwarder.service.ForegroundService
|
||||
import com.idormy.sms.forwarder.utils.*
|
||||
import com.idormy.sms.forwarder.utils.EVENT_FRPC_DELETE_CONFIG
|
||||
import com.idormy.sms.forwarder.utils.EVENT_FRPC_RUNNING_ERROR
|
||||
import com.idormy.sms.forwarder.utils.EVENT_FRPC_RUNNING_SUCCESS
|
||||
import com.idormy.sms.forwarder.utils.EVENT_FRPC_UPDATE_CONFIG
|
||||
import com.idormy.sms.forwarder.utils.FrpcUtils
|
||||
import com.idormy.sms.forwarder.utils.INTENT_FRPC_APPLY_FILE
|
||||
import com.idormy.sms.forwarder.utils.INTENT_FRPC_EDIT_FILE
|
||||
import com.idormy.sms.forwarder.utils.XToastUtils
|
||||
import com.jeremyliao.liveeventbus.LiveEventBus
|
||||
import com.scwang.smartrefresh.layout.api.RefreshLayout
|
||||
import com.xuexiang.xaop.annotation.SingleClick
|
||||
|
@ -41,7 +48,7 @@ import kotlinx.coroutines.launch
|
|||
@Page(name = "Frp内网穿透")
|
||||
class FrpcFragment : BaseFragment<FragmentFrpcsBinding?>(), FrpcPagingAdapter.OnItemClickListener {
|
||||
|
||||
var titleBar: TitleBar? = null
|
||||
private var titleBar: TitleBar? = null
|
||||
private var adapter = FrpcPagingAdapter(this)
|
||||
private val viewModel by viewModels<FrpcViewModel> { BaseViewModelFactory(context) }
|
||||
|
||||
|
|
|
@ -36,11 +36,11 @@ import kotlinx.coroutines.launch
|
|||
import java.text.SimpleDateFormat
|
||||
import java.util.*
|
||||
|
||||
@Suppress("PropertyName")
|
||||
@Suppress("PrivatePropertyName", "DEPRECATION")
|
||||
@Page(name = "转发日志")
|
||||
class LogsFragment : BaseFragment<FragmentLogsBinding?>(), MsgPagingAdapter.OnItemClickListener {
|
||||
|
||||
val TAG: String = LogsFragment::class.java.simpleName
|
||||
private val TAG: String = LogsFragment::class.java.simpleName
|
||||
private var adapter = MsgPagingAdapter(this)
|
||||
private val viewModel by viewModels<MsgViewModel> { BaseViewModelFactory(context) }
|
||||
private var currentType: String = "sms"
|
||||
|
|
|
@ -52,11 +52,11 @@ import java.util.*
|
|||
class RulesEditFragment : BaseFragment<FragmentRulesEditBinding?>(), View.OnClickListener, CompoundButton.OnCheckedChangeListener {
|
||||
|
||||
private val TAG: String = RulesEditFragment::class.java.simpleName
|
||||
var titleBar: TitleBar? = null
|
||||
private var titleBar: TitleBar? = null
|
||||
private val viewModel by viewModels<RuleViewModel> { BaseViewModelFactory(context) }
|
||||
|
||||
var callType = 1
|
||||
var callTypeIndex = 0
|
||||
private var callType = 1
|
||||
private var callTypeIndex = 0
|
||||
|
||||
//免打扰(禁用转发)时间段
|
||||
private val mTimeOption = DataProvider.timePeriodOption
|
||||
|
@ -64,12 +64,12 @@ class RulesEditFragment : BaseFragment<FragmentRulesEditBinding?>(), View.OnClic
|
|||
private var silentPeriodEnd = 0
|
||||
|
||||
//当前发送通道
|
||||
var senderId = 0L
|
||||
var senderListSelected: MutableList<Sender> = mutableListOf()
|
||||
private var senderId = 0L
|
||||
private var senderListSelected: MutableList<Sender> = mutableListOf()
|
||||
private var senderItemMap = HashMap<Long, LinearLayout>(2)
|
||||
|
||||
//发送通道列表
|
||||
var senderListAll: MutableList<Sender> = mutableListOf()
|
||||
private var senderListAll: MutableList<Sender> = mutableListOf()
|
||||
private val senderSpinnerList = ArrayList<SenderAdapterItem>()
|
||||
private lateinit var senderSpinnerAdapter: SenderSpinnerAdapter<*>
|
||||
|
||||
|
|
|
@ -14,7 +14,11 @@ import com.idormy.sms.forwarder.database.entity.Rule
|
|||
import com.idormy.sms.forwarder.database.viewmodel.BaseViewModelFactory
|
||||
import com.idormy.sms.forwarder.database.viewmodel.RuleViewModel
|
||||
import com.idormy.sms.forwarder.databinding.FragmentRulesBinding
|
||||
import com.idormy.sms.forwarder.utils.*
|
||||
import com.idormy.sms.forwarder.utils.EVENT_UPDATE_RULE_TYPE
|
||||
import com.idormy.sms.forwarder.utils.KEY_RULE_CLONE
|
||||
import com.idormy.sms.forwarder.utils.KEY_RULE_ID
|
||||
import com.idormy.sms.forwarder.utils.KEY_RULE_TYPE
|
||||
import com.idormy.sms.forwarder.utils.XToastUtils
|
||||
import com.jeremyliao.liveeventbus.LiveEventBus
|
||||
import com.scwang.smartrefresh.layout.api.RefreshLayout
|
||||
import com.xuexiang.xpage.annotation.Page
|
||||
|
@ -26,11 +30,11 @@ import com.xuexiang.xui.widget.dialog.materialdialog.MaterialDialog
|
|||
import kotlinx.coroutines.flow.collectLatest
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
@Suppress("PropertyName")
|
||||
@Suppress("DEPRECATION")
|
||||
@Page(name = "转发规则")
|
||||
class RulesFragment : BaseFragment<FragmentRulesBinding?>(), RulePagingAdapter.OnItemClickListener {
|
||||
|
||||
val TAG: String = RulesFragment::class.java.simpleName
|
||||
//private val TAG: String = RulesFragment::class.java.simpleName
|
||||
private var adapter = RulePagingAdapter(this)
|
||||
private val viewModel by viewModels<RuleViewModel> { BaseViewModelFactory(context) }
|
||||
private var currentType: String = "sms"
|
||||
|
@ -101,6 +105,7 @@ class RulesFragment : BaseFragment<FragmentRulesBinding?>(), RulePagingAdapter.O
|
|||
.putBoolean(KEY_RULE_CLONE, true)
|
||||
.open(this)
|
||||
}
|
||||
|
||||
R.id.iv_edit -> {
|
||||
PageOption.to(RulesEditFragment::class.java)
|
||||
.setNewActivity(true)
|
||||
|
@ -108,6 +113,7 @@ class RulesFragment : BaseFragment<FragmentRulesBinding?>(), RulePagingAdapter.O
|
|||
.putString(KEY_RULE_TYPE, item.type)
|
||||
.open(this)
|
||||
}
|
||||
|
||||
R.id.iv_delete -> {
|
||||
MaterialDialog.Builder(requireContext())
|
||||
.title(R.string.delete_rule_title)
|
||||
|
@ -120,6 +126,7 @@ class RulesFragment : BaseFragment<FragmentRulesBinding?>(), RulePagingAdapter.O
|
|||
}
|
||||
.show()
|
||||
}
|
||||
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,8 +15,42 @@ import com.idormy.sms.forwarder.database.entity.Sender
|
|||
import com.idormy.sms.forwarder.database.viewmodel.BaseViewModelFactory
|
||||
import com.idormy.sms.forwarder.database.viewmodel.SenderViewModel
|
||||
import com.idormy.sms.forwarder.databinding.FragmentSendersBinding
|
||||
import com.idormy.sms.forwarder.fragment.senders.*
|
||||
import com.idormy.sms.forwarder.utils.*
|
||||
import com.idormy.sms.forwarder.fragment.senders.BarkFragment
|
||||
import com.idormy.sms.forwarder.fragment.senders.DingtalkGroupRobotFragment
|
||||
import com.idormy.sms.forwarder.fragment.senders.DingtalkInnerRobotFragment
|
||||
import com.idormy.sms.forwarder.fragment.senders.EmailFragment
|
||||
import com.idormy.sms.forwarder.fragment.senders.FeishuAppFragment
|
||||
import com.idormy.sms.forwarder.fragment.senders.FeishuFragment
|
||||
import com.idormy.sms.forwarder.fragment.senders.GotifyFragment
|
||||
import com.idormy.sms.forwarder.fragment.senders.PushplusFragment
|
||||
import com.idormy.sms.forwarder.fragment.senders.ServerchanFragment
|
||||
import com.idormy.sms.forwarder.fragment.senders.SmsFragment
|
||||
import com.idormy.sms.forwarder.fragment.senders.SocketFragment
|
||||
import com.idormy.sms.forwarder.fragment.senders.TelegramFragment
|
||||
import com.idormy.sms.forwarder.fragment.senders.UrlSchemeFragment
|
||||
import com.idormy.sms.forwarder.fragment.senders.WebhookFragment
|
||||
import com.idormy.sms.forwarder.fragment.senders.WeworkAgentFragment
|
||||
import com.idormy.sms.forwarder.fragment.senders.WeworkRobotFragment
|
||||
import com.idormy.sms.forwarder.utils.KEY_SENDER_CLONE
|
||||
import com.idormy.sms.forwarder.utils.KEY_SENDER_ID
|
||||
import com.idormy.sms.forwarder.utils.KEY_SENDER_TYPE
|
||||
import com.idormy.sms.forwarder.utils.TYPE_BARK
|
||||
import com.idormy.sms.forwarder.utils.TYPE_DINGTALK_GROUP_ROBOT
|
||||
import com.idormy.sms.forwarder.utils.TYPE_DINGTALK_INNER_ROBOT
|
||||
import com.idormy.sms.forwarder.utils.TYPE_EMAIL
|
||||
import com.idormy.sms.forwarder.utils.TYPE_FEISHU
|
||||
import com.idormy.sms.forwarder.utils.TYPE_FEISHU_APP
|
||||
import com.idormy.sms.forwarder.utils.TYPE_GOTIFY
|
||||
import com.idormy.sms.forwarder.utils.TYPE_PUSHPLUS
|
||||
import com.idormy.sms.forwarder.utils.TYPE_SERVERCHAN
|
||||
import com.idormy.sms.forwarder.utils.TYPE_SMS
|
||||
import com.idormy.sms.forwarder.utils.TYPE_SOCKET
|
||||
import com.idormy.sms.forwarder.utils.TYPE_TELEGRAM
|
||||
import com.idormy.sms.forwarder.utils.TYPE_URL_SCHEME
|
||||
import com.idormy.sms.forwarder.utils.TYPE_WEBHOOK
|
||||
import com.idormy.sms.forwarder.utils.TYPE_WEWORK_AGENT
|
||||
import com.idormy.sms.forwarder.utils.TYPE_WEWORK_ROBOT
|
||||
import com.idormy.sms.forwarder.utils.XToastUtils
|
||||
import com.scwang.smartrefresh.layout.api.RefreshLayout
|
||||
import com.xuexiang.xpage.annotation.Page
|
||||
import com.xuexiang.xpage.core.PageOption
|
||||
|
@ -27,11 +61,11 @@ import com.xuexiang.xui.widget.dialog.materialdialog.MaterialDialog
|
|||
import kotlinx.coroutines.flow.collectLatest
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
@Suppress("PropertyName")
|
||||
@Suppress("PrivatePropertyName", "DEPRECATION")
|
||||
@Page(name = "发送通道")
|
||||
class SendersFragment : BaseFragment<FragmentSendersBinding?>(), SenderPagingAdapter.OnItemClickListener {
|
||||
|
||||
val TAG: String = SendersFragment::class.java.simpleName
|
||||
private val TAG: String = SendersFragment::class.java.simpleName
|
||||
private var adapter = SenderPagingAdapter(this)
|
||||
private val viewModel by viewModels<SenderViewModel> { BaseViewModelFactory(context) }
|
||||
private var currentStatus: Int = 1
|
||||
|
@ -119,6 +153,7 @@ class SendersFragment : BaseFragment<FragmentSendersBinding?>(), SenderPagingAda
|
|||
.putBoolean(KEY_SENDER_CLONE, true)
|
||||
.open(this)
|
||||
}
|
||||
|
||||
R.id.iv_edit -> {
|
||||
PageOption.to(
|
||||
when (item.type) {
|
||||
|
@ -145,6 +180,7 @@ class SendersFragment : BaseFragment<FragmentSendersBinding?>(), SenderPagingAda
|
|||
.putInt(KEY_SENDER_TYPE, item.type)
|
||||
.open(this)
|
||||
}
|
||||
|
||||
R.id.iv_delete -> {
|
||||
MaterialDialog.Builder(requireContext())
|
||||
.title(R.string.delete_sender_title)
|
||||
|
@ -157,6 +193,7 @@ class SendersFragment : BaseFragment<FragmentSendersBinding?>(), SenderPagingAda
|
|||
}
|
||||
.show()
|
||||
}
|
||||
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -29,6 +29,7 @@ class ServiceProtocolFragment : BaseFragment<FragmentServiceProtocolBinding?>()
|
|||
@JvmField
|
||||
@AutoWired(name = KEY_IS_IMMERSIVE)
|
||||
var isImmersive = false
|
||||
|
||||
override fun initArgs() {
|
||||
XRouter.getInstance().inject(this)
|
||||
}
|
||||
|
|
|
@ -55,11 +55,11 @@ import com.xuexiang.xutil.app.AppUtils.getAppPackageName
|
|||
import kotlinx.coroutines.*
|
||||
import java.util.*
|
||||
|
||||
@Suppress("PropertyName", "SpellCheckingInspection")
|
||||
@Suppress("SpellCheckingInspection", "PrivatePropertyName")
|
||||
@Page(name = "通用设置")
|
||||
class SettingsFragment : BaseFragment<FragmentSettingsBinding?>(), View.OnClickListener {
|
||||
|
||||
val TAG: String = SettingsFragment::class.java.simpleName
|
||||
private val TAG: String = SettingsFragment::class.java.simpleName
|
||||
private val mTimeOption = DataProvider.timePeriodOption
|
||||
|
||||
//已安装App信息列表
|
||||
|
@ -86,39 +86,28 @@ class SettingsFragment : BaseFragment<FragmentSettingsBinding?>(), View.OnClickL
|
|||
|
||||
@SuppressLint("NewApi", "SetTextI18n")
|
||||
override fun initViews() {
|
||||
|
||||
//转发短信广播
|
||||
switchEnableSms(binding!!.sbEnableSms)
|
||||
//转发通话记录
|
||||
switchEnablePhone(
|
||||
binding!!.sbEnablePhone, binding!!.scbCallType1, binding!!.scbCallType2, binding!!.scbCallType3, binding!!.scbCallType4, binding!!.scbCallType5, binding!!.scbCallType6
|
||||
)
|
||||
switchEnablePhone(binding!!.sbEnablePhone, binding!!.scbCallType1, binding!!.scbCallType2, binding!!.scbCallType3, binding!!.scbCallType4, binding!!.scbCallType5, binding!!.scbCallType6)
|
||||
//转发应用通知
|
||||
switchEnableAppNotify(
|
||||
binding!!.sbEnableAppNotify, binding!!.scbCancelAppNotify, binding!!.scbNotUserPresent
|
||||
)
|
||||
switchEnableAppNotify(binding!!.sbEnableAppNotify, binding!!.scbCancelAppNotify, binding!!.scbNotUserPresent)
|
||||
|
||||
//启用GPS定位功能
|
||||
switchEnableLocation(binding!!.sbEnableLocation, binding!!.layoutLocationSetting, binding!!.rgAccuracy, binding!!.rgPowerRequirement, binding!!.xsbMinInterval, binding!!.xsbMinDistance)
|
||||
//短信指令
|
||||
switchEnableSmsCommand(binding!!.sbEnableSmsCommand, binding!!.etSafePhone)
|
||||
|
||||
//启动时异步获取已安装App信息
|
||||
switchEnableLoadAppList(binding!!.sbEnableLoadAppList, binding!!.scbLoadUserApp, binding!!.scbLoadSystemApp)
|
||||
//设置自动消除额外APP通知
|
||||
editExtraAppList(binding!!.etAppList)
|
||||
//启动时异步获取已安装App信息
|
||||
switchEnableLoadAppList(
|
||||
binding!!.sbEnableLoadAppList, binding!!.scbLoadUserApp, binding!!.scbLoadSystemApp
|
||||
)
|
||||
//过滤多久内重复消息
|
||||
//自动过滤多久内重复消息
|
||||
binding!!.xsbDuplicateMessagesLimits.setDefaultValue(SettingUtils.duplicateMessagesLimits)
|
||||
binding!!.xsbDuplicateMessagesLimits.setOnSeekBarListener { _: XSeekBar?, newValue: Int ->
|
||||
SettingUtils.duplicateMessagesLimits = newValue
|
||||
}
|
||||
//免打扰(禁用转发)时间段
|
||||
binding!!.tvSilentPeriod.text = mTimeOption[SettingUtils.silentPeriodStart] + " ~ " + mTimeOption[SettingUtils.silentPeriodEnd]
|
||||
//自动删除N天前的转发记录
|
||||
binding!!.xsbAutoCleanLogs.setDefaultValue(SettingUtils.autoCleanLogsDays)
|
||||
binding!!.xsbAutoCleanLogs.setOnSeekBarListener { _: XSeekBar?, newValue: Int ->
|
||||
SettingUtils.autoCleanLogsDays = newValue
|
||||
}
|
||||
|
||||
//开机启动
|
||||
checkWithReboot(binding!!.sbWithReboot, binding!!.tvAutoStartup)
|
||||
|
@ -126,12 +115,8 @@ class SettingsFragment : BaseFragment<FragmentSettingsBinding?>(), View.OnClickL
|
|||
batterySetting(binding!!.layoutBatterySetting, binding!!.sbBatterySetting)
|
||||
//不在最近任务列表中显示
|
||||
switchExcludeFromRecents(binding!!.layoutExcludeFromRecents, binding!!.sbExcludeFromRecents)
|
||||
|
||||
//Cactus增强保活措施
|
||||
switchEnableCactus(
|
||||
binding!!.sbEnableCactus, binding!!.scbPlaySilenceMusic, binding!!.scbOnePixelActivity
|
||||
)
|
||||
|
||||
switchEnableCactus(binding!!.sbEnableCactus, binding!!.scbPlaySilenceMusic, binding!!.scbOnePixelActivity)
|
||||
//接口请求失败重试时间间隔
|
||||
editRetryDelayTime(binding!!.xsbRetryTimes, binding!!.xsbDelayTime, binding!!.xsbTimeout)
|
||||
|
||||
|
@ -145,23 +130,16 @@ class SettingsFragment : BaseFragment<FragmentSettingsBinding?>(), View.OnClickL
|
|||
editAddExtraSim1(binding!!.etExtraSim1)
|
||||
//SIM2备注
|
||||
editAddExtraSim2(binding!!.etExtraSim2)
|
||||
|
||||
//通知内容
|
||||
editNotifyContent(binding!!.etNotifyContent)
|
||||
|
||||
//启用自定义模版
|
||||
switchSmsTemplate(binding!!.sbSmsTemplate)
|
||||
//自定义模板
|
||||
editSmsTemplate(binding!!.etSmsTemplate)
|
||||
|
||||
//纯客户端模式
|
||||
switchDirectlyToClient(binding!!.sbDirectlyToClient)
|
||||
|
||||
//纯自动任务模式
|
||||
switchDirectlyToTask(binding!!.sbDirectlyToTask)
|
||||
|
||||
//启用 {{定位信息}} 标签
|
||||
switchEnableLocation(binding!!.sbEnableLocation, binding!!.layoutLocationSetting, binding!!.rgAccuracy, binding!!.rgPowerRequirement, binding!!.xsbMinInterval, binding!!.xsbMinDistance)
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
|
@ -183,7 +161,6 @@ class SettingsFragment : BaseFragment<FragmentSettingsBinding?>(), View.OnClickL
|
|||
|
||||
//监听已安装App信息列表加载完成事件
|
||||
LiveEventBus.get(EVENT_LOAD_APP_LIST, String::class.java).observeStickyForever(appListObserver)
|
||||
|
||||
}
|
||||
|
||||
@SuppressLint("SetTextI18n")
|
||||
|
@ -295,7 +272,7 @@ class SettingsFragment : BaseFragment<FragmentSettingsBinding?>(), View.OnClickL
|
|||
|
||||
//转发短信
|
||||
@SuppressLint("UseSwitchCompatOrMaterialCode")
|
||||
fun switchEnableSms(sbEnableSms: SwitchButton) {
|
||||
private fun switchEnableSms(sbEnableSms: SwitchButton) {
|
||||
sbEnableSms.isChecked = SettingUtils.enableSms
|
||||
sbEnableSms.setOnCheckedChangeListener { _: CompoundButton?, isChecked: Boolean ->
|
||||
SettingUtils.enableSms = isChecked
|
||||
|
@ -338,9 +315,7 @@ class SettingsFragment : BaseFragment<FragmentSettingsBinding?>(), View.OnClickL
|
|||
|
||||
//转发通话
|
||||
@SuppressLint("UseSwitchCompatOrMaterialCode")
|
||||
fun switchEnablePhone(
|
||||
sbEnablePhone: SwitchButton, scbCallType1: SmoothCheckBox, scbCallType2: SmoothCheckBox, scbCallType3: SmoothCheckBox, scbCallType4: SmoothCheckBox, scbCallType5: SmoothCheckBox, scbCallType6: SmoothCheckBox
|
||||
) {
|
||||
private fun switchEnablePhone(sbEnablePhone: SwitchButton, scbCallType1: SmoothCheckBox, scbCallType2: SmoothCheckBox, scbCallType3: SmoothCheckBox, scbCallType4: SmoothCheckBox, scbCallType5: SmoothCheckBox, scbCallType6: SmoothCheckBox) {
|
||||
sbEnablePhone.isChecked = SettingUtils.enablePhone
|
||||
scbCallType1.isChecked = SettingUtils.enableCallType1
|
||||
scbCallType2.isChecked = SettingUtils.enableCallType2
|
||||
|
@ -441,9 +416,7 @@ class SettingsFragment : BaseFragment<FragmentSettingsBinding?>(), View.OnClickL
|
|||
|
||||
//转发应用通知
|
||||
@SuppressLint("UseSwitchCompatOrMaterialCode")
|
||||
fun switchEnableAppNotify(
|
||||
sbEnableAppNotify: SwitchButton, scbCancelAppNotify: SmoothCheckBox, scbNotUserPresent: SmoothCheckBox
|
||||
) {
|
||||
private fun switchEnableAppNotify(sbEnableAppNotify: SwitchButton, scbCancelAppNotify: SmoothCheckBox, scbNotUserPresent: SmoothCheckBox) {
|
||||
val isEnable: Boolean = SettingUtils.enableAppNotify
|
||||
sbEnableAppNotify.isChecked = isEnable
|
||||
|
||||
|
@ -482,9 +455,99 @@ class SettingsFragment : BaseFragment<FragmentSettingsBinding?>(), View.OnClickL
|
|||
}
|
||||
}
|
||||
|
||||
//启用定位功能
|
||||
private fun switchEnableLocation(@SuppressLint("UseSwitchCompatOrMaterialCode") switchEnableLocation: SwitchButton, layoutLocationSetting: LinearLayout, rgAccuracy: RadioGroup, rgPowerRequirement: RadioGroup, xsbMinInterval: XSeekBar, xsbMinDistance: XSeekBar) {
|
||||
//是否启用定位功能
|
||||
switchEnableLocation.isChecked = SettingUtils.enableLocation
|
||||
layoutLocationSetting.visibility = if (SettingUtils.enableLocation) View.VISIBLE else View.GONE
|
||||
switchEnableLocation.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 {
|
||||
override fun onGranted(permissions: List<String>, all: Boolean) {
|
||||
restartLocationService()
|
||||
}
|
||||
|
||||
override fun onDenied(permissions: List<String>, never: Boolean) {
|
||||
if (never) {
|
||||
XToastUtils.error(R.string.toast_denied_never)
|
||||
// 如果是被永久拒绝就跳转到应用权限系统设置页面
|
||||
XXPermissions.startPermissionActivity(requireContext(), permissions)
|
||||
} else {
|
||||
XToastUtils.error(R.string.toast_denied)
|
||||
}
|
||||
SettingUtils.enableLocation = false
|
||||
switchEnableLocation.isChecked = false
|
||||
restartLocationService()
|
||||
}
|
||||
})
|
||||
} else {
|
||||
restartLocationService()
|
||||
}
|
||||
layoutLocationSetting.visibility = if (isChecked) View.VISIBLE else View.GONE
|
||||
}
|
||||
//设置位置精度:高精度(默认)
|
||||
rgAccuracy.check(
|
||||
when (SettingUtils.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
|
||||
}
|
||||
)
|
||||
rgAccuracy.setOnCheckedChangeListener { _: RadioGroup?, checkedId: Int ->
|
||||
SettingUtils.locationAccuracy = when (checkedId) {
|
||||
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
|
||||
}
|
||||
restartLocationService()
|
||||
}
|
||||
//设置电量消耗:低电耗(默认)
|
||||
rgPowerRequirement.check(
|
||||
when (SettingUtils.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
|
||||
}
|
||||
)
|
||||
rgPowerRequirement.setOnCheckedChangeListener { _: RadioGroup?, checkedId: Int ->
|
||||
SettingUtils.locationPowerRequirement = when (checkedId) {
|
||||
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
|
||||
}
|
||||
restartLocationService()
|
||||
}
|
||||
//设置位置更新最小时间间隔(单位:毫秒); 默认间隔:10000毫秒,最小间隔:1000毫秒
|
||||
xsbMinInterval.setDefaultValue((SettingUtils.locationMinInterval / 1000).toInt())
|
||||
xsbMinInterval.setOnSeekBarListener { _: XSeekBar?, newValue: Int ->
|
||||
SettingUtils.locationMinInterval = newValue * 1000L
|
||||
restartLocationService()
|
||||
}
|
||||
//设置位置更新最小距离(单位:米);默认距离:0米
|
||||
xsbMinDistance.setDefaultValue(SettingUtils.locationMinDistance)
|
||||
xsbMinDistance.setOnSeekBarListener { _: XSeekBar?, newValue: Int ->
|
||||
SettingUtils.locationMinDistance = newValue
|
||||
restartLocationService()
|
||||
}
|
||||
}
|
||||
|
||||
//重启定位服务
|
||||
private fun restartLocationService() {
|
||||
val serviceIntent = Intent(requireContext(), LocationService::class.java)
|
||||
serviceIntent.action = "START"
|
||||
requireContext().startService(serviceIntent)
|
||||
}
|
||||
|
||||
//接受短信指令
|
||||
@SuppressLint("UseSwitchCompatOrMaterialCode")
|
||||
fun switchEnableSmsCommand(sbEnableSmsCommand: SwitchButton, etSafePhone: EditText) {
|
||||
private fun switchEnableSmsCommand(sbEnableSmsCommand: SwitchButton, etSafePhone: EditText) {
|
||||
sbEnableSmsCommand.isChecked = SettingUtils.enableSmsCommand
|
||||
etSafePhone.visibility = if (SettingUtils.enableSmsCommand) View.VISIBLE else View.GONE
|
||||
|
||||
|
@ -549,9 +612,7 @@ class SettingsFragment : BaseFragment<FragmentSettingsBinding?>(), View.OnClickL
|
|||
|
||||
//启动时异步获取已安装App信息
|
||||
@SuppressLint("UseSwitchCompatOrMaterialCode")
|
||||
fun switchEnableLoadAppList(
|
||||
sbEnableLoadAppList: SwitchButton, scbLoadUserApp: SmoothCheckBox, scbLoadSystemApp: SmoothCheckBox
|
||||
) {
|
||||
private fun switchEnableLoadAppList(sbEnableLoadAppList: SwitchButton, scbLoadUserApp: SmoothCheckBox, scbLoadSystemApp: SmoothCheckBox) {
|
||||
val isEnable: Boolean = SettingUtils.enableLoadAppList
|
||||
sbEnableLoadAppList.isChecked = isEnable
|
||||
|
||||
|
@ -600,9 +661,7 @@ class SettingsFragment : BaseFragment<FragmentSettingsBinding?>(), View.OnClickL
|
|||
}
|
||||
|
||||
//开机启动
|
||||
private fun checkWithReboot(
|
||||
@SuppressLint("UseSwitchCompatOrMaterialCode") sbWithReboot: SwitchButton, tvAutoStartup: TextView
|
||||
) {
|
||||
private fun checkWithReboot(@SuppressLint("UseSwitchCompatOrMaterialCode") sbWithReboot: SwitchButton, tvAutoStartup: TextView) {
|
||||
tvAutoStartup.text = getAutoStartTips()
|
||||
|
||||
//获取组件
|
||||
|
@ -624,7 +683,7 @@ class SettingsFragment : BaseFragment<FragmentSettingsBinding?>(), View.OnClickL
|
|||
//电池优化设置
|
||||
@RequiresApi(api = Build.VERSION_CODES.M)
|
||||
@SuppressLint("UseSwitchCompatOrMaterialCode")
|
||||
fun batterySetting(layoutBatterySetting: LinearLayout, sbBatterySetting: SwitchButton) {
|
||||
private fun batterySetting(layoutBatterySetting: LinearLayout, sbBatterySetting: SwitchButton) {
|
||||
//安卓6.0以下没有忽略电池优化
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
|
||||
layoutBatterySetting.visibility = View.GONE
|
||||
|
@ -652,9 +711,7 @@ class SettingsFragment : BaseFragment<FragmentSettingsBinding?>(), View.OnClickL
|
|||
|
||||
//不在最近任务列表中显示
|
||||
@SuppressLint("ObsoleteSdkInt,UseSwitchCompatOrMaterialCode")
|
||||
fun switchExcludeFromRecents(
|
||||
layoutExcludeFromRecents: LinearLayout, sbExcludeFromRecents: SwitchButton
|
||||
) {
|
||||
private fun switchExcludeFromRecents(layoutExcludeFromRecents: LinearLayout, sbExcludeFromRecents: SwitchButton) {
|
||||
//安卓6.0以下没有不在最近任务列表中显示
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
|
||||
layoutExcludeFromRecents.visibility = View.GONE
|
||||
|
@ -675,11 +732,9 @@ class SettingsFragment : BaseFragment<FragmentSettingsBinding?>(), View.OnClickL
|
|||
}
|
||||
}
|
||||
|
||||
//转发应用通知
|
||||
//Cactus增强保活措施
|
||||
@SuppressLint("UseSwitchCompatOrMaterialCode")
|
||||
fun switchEnableCactus(
|
||||
sbEnableCactus: SwitchButton, scbPlaySilenceMusic: SmoothCheckBox, scbOnePixelActivity: SmoothCheckBox
|
||||
) {
|
||||
private fun switchEnableCactus(sbEnableCactus: SwitchButton, scbPlaySilenceMusic: SmoothCheckBox, scbOnePixelActivity: SmoothCheckBox) {
|
||||
val layoutCactusOptional: LinearLayout = binding!!.layoutCactusOptional
|
||||
val isEnable: Boolean = SettingUtils.enableCactus
|
||||
sbEnableCactus.isChecked = isEnable
|
||||
|
@ -708,9 +763,7 @@ class SettingsFragment : BaseFragment<FragmentSettingsBinding?>(), View.OnClickL
|
|||
}
|
||||
|
||||
//接口请求失败重试时间间隔
|
||||
private fun editRetryDelayTime(
|
||||
xsbRetryTimes: XSeekBar, xsbDelayTime: XSeekBar, xsbTimeout: XSeekBar
|
||||
) {
|
||||
private fun editRetryDelayTime(xsbRetryTimes: XSeekBar, xsbDelayTime: XSeekBar, xsbTimeout: XSeekBar) {
|
||||
xsbRetryTimes.setDefaultValue(SettingUtils.requestRetryTimes)
|
||||
xsbRetryTimes.setOnSeekBarListener { _: XSeekBar?, newValue: Int ->
|
||||
SettingUtils.requestRetryTimes = newValue
|
||||
|
@ -814,7 +867,7 @@ class SettingsFragment : BaseFragment<FragmentSettingsBinding?>(), View.OnClickL
|
|||
|
||||
//设置转发时启用自定义模版
|
||||
@SuppressLint("UseSwitchCompatOrMaterialCode", "SetTextI18n")
|
||||
fun switchSmsTemplate(sbSmsTemplate: SwitchButton) {
|
||||
private fun switchSmsTemplate(sbSmsTemplate: SwitchButton) {
|
||||
val isOn: Boolean = SettingUtils.enableSmsTemplate
|
||||
sbSmsTemplate.isChecked = isOn
|
||||
val layoutSmsTemplate: LinearLayout = binding!!.layoutSmsTemplate
|
||||
|
@ -876,96 +929,6 @@ class SettingsFragment : BaseFragment<FragmentSettingsBinding?>(), View.OnClickL
|
|||
}
|
||||
}
|
||||
|
||||
//启用定位功能
|
||||
private fun switchEnableLocation(@SuppressLint("UseSwitchCompatOrMaterialCode") switchEnableLocation: SwitchButton, layoutLocationSetting: LinearLayout, rgAccuracy: RadioGroup, rgPowerRequirement: RadioGroup, xsbMinInterval: XSeekBar, xsbMinDistance: XSeekBar) {
|
||||
//是否启用定位功能
|
||||
switchEnableLocation.isChecked = SettingUtils.enableLocation
|
||||
layoutLocationSetting.visibility = if (SettingUtils.enableLocation) View.VISIBLE else View.GONE
|
||||
switchEnableLocation.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 {
|
||||
override fun onGranted(permissions: List<String>, all: Boolean) {
|
||||
restartLocationService()
|
||||
}
|
||||
|
||||
override fun onDenied(permissions: List<String>, never: Boolean) {
|
||||
if (never) {
|
||||
XToastUtils.error(R.string.toast_denied_never)
|
||||
// 如果是被永久拒绝就跳转到应用权限系统设置页面
|
||||
XXPermissions.startPermissionActivity(requireContext(), permissions)
|
||||
} else {
|
||||
XToastUtils.error(R.string.toast_denied)
|
||||
}
|
||||
SettingUtils.enableLocation = false
|
||||
switchEnableLocation.isChecked = false
|
||||
restartLocationService()
|
||||
}
|
||||
})
|
||||
} else {
|
||||
restartLocationService()
|
||||
}
|
||||
layoutLocationSetting.visibility = if (isChecked) View.VISIBLE else View.GONE
|
||||
}
|
||||
//设置位置精度:高精度(默认)
|
||||
rgAccuracy.check(
|
||||
when (SettingUtils.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
|
||||
}
|
||||
)
|
||||
rgAccuracy.setOnCheckedChangeListener { _: RadioGroup?, checkedId: Int ->
|
||||
SettingUtils.locationAccuracy = when (checkedId) {
|
||||
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
|
||||
}
|
||||
restartLocationService()
|
||||
}
|
||||
//设置电量消耗:低电耗(默认)
|
||||
rgPowerRequirement.check(
|
||||
when (SettingUtils.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
|
||||
}
|
||||
)
|
||||
rgPowerRequirement.setOnCheckedChangeListener { _: RadioGroup?, checkedId: Int ->
|
||||
SettingUtils.locationPowerRequirement = when (checkedId) {
|
||||
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
|
||||
}
|
||||
restartLocationService()
|
||||
}
|
||||
//设置位置更新最小时间间隔(单位:毫秒); 默认间隔:10000毫秒,最小间隔:1000毫秒
|
||||
xsbMinInterval.setDefaultValue((SettingUtils.locationMinInterval / 1000).toInt())
|
||||
xsbMinInterval.setOnSeekBarListener { _: XSeekBar?, newValue: Int ->
|
||||
SettingUtils.locationMinInterval = newValue * 1000L
|
||||
restartLocationService()
|
||||
}
|
||||
//设置位置更新最小距离(单位:米);默认距离:0米
|
||||
xsbMinDistance.setDefaultValue(SettingUtils.locationMinDistance)
|
||||
xsbMinDistance.setOnSeekBarListener { _: XSeekBar?, newValue: Int ->
|
||||
SettingUtils.locationMinDistance = newValue
|
||||
restartLocationService()
|
||||
}
|
||||
}
|
||||
|
||||
//重启定位服务
|
||||
private fun restartLocationService() {
|
||||
val serviceIntent = Intent(requireContext(), LocationService::class.java)
|
||||
serviceIntent.action = "START"
|
||||
requireContext().startService(serviceIntent)
|
||||
}
|
||||
|
||||
//获取当前手机品牌
|
||||
private fun getAutoStartTips(): String {
|
||||
return when (Build.BRAND.lowercase(Locale.ROOT)) {
|
||||
|
|
|
@ -58,7 +58,7 @@ class TasksEditFragment : BaseFragment<FragmentTasksEditBinding?>(), View.OnClic
|
|||
|
||||
private val TAG: String = TasksEditFragment::class.java.simpleName
|
||||
private val that = this
|
||||
var titleBar: TitleBar? = null
|
||||
private var titleBar: TitleBar? = null
|
||||
private val viewModel by viewModels<TaskViewModel> { BaseViewModelFactory(context) }
|
||||
private val dialog: BottomSheetDialog by lazy {
|
||||
BottomSheetDialog(requireContext())
|
||||
|
|
|
@ -32,12 +32,12 @@ import com.xuexiang.xui.widget.dialog.materialdialog.MaterialDialog
|
|||
import kotlinx.coroutines.flow.collectLatest
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
@Suppress("PropertyName", "DEPRECATION")
|
||||
@Suppress("PrivatePropertyName", "DEPRECATION")
|
||||
@Page(name = "自动任务")
|
||||
class TasksFragment : BaseFragment<FragmentTasksBinding?>(), TaskPagingAdapter.OnItemClickListener {
|
||||
|
||||
val TAG: String = TasksFragment::class.java.simpleName
|
||||
var titleBar: TitleBar? = null
|
||||
private val TAG: String = TasksFragment::class.java.simpleName
|
||||
private var titleBar: TitleBar? = null
|
||||
private var adapter = TaskPagingAdapter(this)
|
||||
private val viewModel by viewModels<TaskViewModel> { BaseViewModelFactory(context) }
|
||||
private var currentType: String = "mine"
|
||||
|
|
|
@ -29,7 +29,7 @@ import com.xuexiang.xui.widget.actionbar.TitleBar
|
|||
class FrpcFragment : BaseFragment<FragmentTasksActionSendSmsBinding?>(), View.OnClickListener {
|
||||
|
||||
private val TAG: String = FrpcFragment::class.java.simpleName
|
||||
var titleBar: TitleBar? = null
|
||||
private var titleBar: TitleBar? = null
|
||||
private var mCountDownHelper: CountDownButtonHelper? = null
|
||||
|
||||
@JvmField
|
||||
|
|
|
@ -29,7 +29,7 @@ import com.xuexiang.xui.widget.actionbar.TitleBar
|
|||
class HttpServerFragment : BaseFragment<FragmentTasksActionSendSmsBinding?>(), View.OnClickListener {
|
||||
|
||||
private val TAG: String = HttpServerFragment::class.java.simpleName
|
||||
var titleBar: TitleBar? = null
|
||||
private var titleBar: TitleBar? = null
|
||||
private var mCountDownHelper: CountDownButtonHelper? = null
|
||||
|
||||
@JvmField
|
||||
|
|
|
@ -41,7 +41,7 @@ import java.util.*
|
|||
class NotificationFragment : BaseFragment<FragmentTasksActionNotificationBinding?>(), View.OnClickListener, CompoundButton.OnCheckedChangeListener {
|
||||
|
||||
private val TAG: String = NotificationFragment::class.java.simpleName
|
||||
var titleBar: TitleBar? = null
|
||||
private var titleBar: TitleBar? = null
|
||||
private var mCountDownHelper: CountDownButtonHelper? = null
|
||||
|
||||
@JvmField
|
||||
|
|
|
@ -46,7 +46,7 @@ import com.xuexiang.xutil.XUtil
|
|||
class SendSmsFragment : BaseFragment<FragmentTasksActionSendSmsBinding?>(), View.OnClickListener {
|
||||
|
||||
private val TAG: String = SendSmsFragment::class.java.simpleName
|
||||
var titleBar: TitleBar? = null
|
||||
private var titleBar: TitleBar? = null
|
||||
private var mCountDownHelper: CountDownButtonHelper? = null
|
||||
|
||||
@JvmField
|
||||
|
|
|
@ -10,7 +10,12 @@ import com.idormy.sms.forwarder.core.BaseFragment
|
|||
import com.idormy.sms.forwarder.databinding.FragmentClientBatteryQueryBinding
|
||||
import com.idormy.sms.forwarder.entity.BatteryInfo
|
||||
import com.idormy.sms.forwarder.server.model.BaseResponse
|
||||
import com.idormy.sms.forwarder.utils.*
|
||||
import com.idormy.sms.forwarder.utils.Base64
|
||||
import com.idormy.sms.forwarder.utils.HttpServerUtils
|
||||
import com.idormy.sms.forwarder.utils.RSACrypt
|
||||
import com.idormy.sms.forwarder.utils.SM4Crypt
|
||||
import com.idormy.sms.forwarder.utils.SettingUtils
|
||||
import com.idormy.sms.forwarder.utils.XToastUtils
|
||||
import com.xuexiang.xhttp2.XHttp
|
||||
import com.xuexiang.xhttp2.cache.model.CacheMode
|
||||
import com.xuexiang.xhttp2.callback.SimpleCallBack
|
||||
|
@ -22,11 +27,11 @@ import com.xuexiang.xui.widget.actionbar.TitleBar
|
|||
import com.xuexiang.xui.widget.grouplist.XUIGroupListView
|
||||
import com.xuexiang.xutil.data.ConvertTools
|
||||
|
||||
@Suppress("PropertyName")
|
||||
@Suppress("PrivatePropertyName", "DEPRECATION")
|
||||
@Page(name = "远程查电量")
|
||||
class BatteryQueryFragment : BaseFragment<FragmentClientBatteryQueryBinding?>() {
|
||||
|
||||
val TAG: String = BatteryQueryFragment::class.java.simpleName
|
||||
private val TAG: String = BatteryQueryFragment::class.java.simpleName
|
||||
|
||||
override fun viewBindingInflate(
|
||||
inflater: LayoutInflater,
|
||||
|
@ -82,6 +87,7 @@ class BatteryQueryFragment : BaseFragment<FragmentClientBatteryQueryBinding?>()
|
|||
}
|
||||
postRequest.upString(requestMsg)
|
||||
}
|
||||
|
||||
3 -> {
|
||||
try {
|
||||
val sm4Key = ConvertTools.hexStringToByteArray(HttpServerUtils.clientSignKey)
|
||||
|
@ -96,6 +102,7 @@ class BatteryQueryFragment : BaseFragment<FragmentClientBatteryQueryBinding?>()
|
|||
}
|
||||
postRequest.upString(requestMsg)
|
||||
}
|
||||
|
||||
else -> {
|
||||
postRequest.upJson(requestMsg)
|
||||
}
|
||||
|
|
|
@ -50,11 +50,11 @@ import com.xuexiang.xutil.data.DateUtils
|
|||
import com.xuexiang.xutil.system.ClipboardUtils
|
||||
import me.samlss.broccoli.Broccoli
|
||||
|
||||
@Suppress("PropertyName", "DEPRECATION")
|
||||
@Suppress("PrivatePropertyName", "DEPRECATION")
|
||||
@Page(name = "远程查通话")
|
||||
class CallQueryFragment : BaseFragment<FragmentClientCallQueryBinding?>() {
|
||||
|
||||
val TAG: String = CallQueryFragment::class.java.simpleName
|
||||
private val TAG: String = CallQueryFragment::class.java.simpleName
|
||||
private var mAdapter: SimpleDelegateAdapter<CallInfo>? = null
|
||||
private var callType: Int = 3
|
||||
private var pageNum: Int = 1
|
||||
|
@ -133,6 +133,10 @@ class CallQueryFragment : BaseFragment<FragmentClientCallQueryBinding?>() {
|
|||
.addPlaceholder(PlaceholderHelper.getParameter(holder.findView(R.id.iv_call)))
|
||||
.addPlaceholder(PlaceholderHelper.getParameter(holder.findView(R.id.iv_reply)))
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: RecyclerViewHolder, position: Int) {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
}
|
||||
|
||||
val delegateAdapter = DelegateAdapter(virtualLayoutManager)
|
||||
|
|
|
@ -42,11 +42,11 @@ import com.xuexiang.xutil.file.FileUtils
|
|||
import java.io.File
|
||||
import java.util.*
|
||||
|
||||
@Suppress("PropertyName")
|
||||
@Suppress("PrivatePropertyName", "DEPRECATION")
|
||||
@Page(name = "一键换新机")
|
||||
class CloneFragment : BaseFragment<FragmentClientCloneBinding?>(), View.OnClickListener {
|
||||
|
||||
val TAG: String = CloneFragment::class.java.simpleName
|
||||
private val TAG: String = CloneFragment::class.java.simpleName
|
||||
private var backupPath: String? = null
|
||||
private val backupFile = "SmsForwarder.json"
|
||||
private var pushCountDownHelper: CountDownButtonHelper? = null
|
||||
|
|
|
@ -25,11 +25,11 @@ import com.xuexiang.xui.utils.ResUtils
|
|||
import com.xuexiang.xui.widget.actionbar.TitleBar
|
||||
import com.xuexiang.xutil.data.ConvertTools
|
||||
|
||||
@Suppress("PropertyName")
|
||||
@Suppress("PrivatePropertyName", "DEPRECATION")
|
||||
@Page(name = "远程加话簿")
|
||||
class ContactAddFragment : BaseFragment<FragmentClientContactAddBinding?>(), View.OnClickListener {
|
||||
|
||||
val TAG: String = ContactAddFragment::class.java.simpleName
|
||||
private val TAG: String = ContactAddFragment::class.java.simpleName
|
||||
private var mCountDownHelper: CountDownButtonHelper? = null
|
||||
|
||||
override fun viewBindingInflate(
|
||||
|
@ -120,6 +120,7 @@ class ContactAddFragment : BaseFragment<FragmentClientContactAddBinding?>(), Vie
|
|||
}
|
||||
postRequest.upString(requestMsg)
|
||||
}
|
||||
|
||||
3 -> {
|
||||
try {
|
||||
val sm4Key = ConvertTools.hexStringToByteArray(HttpServerUtils.clientSignKey)
|
||||
|
@ -134,6 +135,7 @@ class ContactAddFragment : BaseFragment<FragmentClientContactAddBinding?>(), Vie
|
|||
}
|
||||
postRequest.upString(requestMsg)
|
||||
}
|
||||
|
||||
else -> {
|
||||
postRequest.upJson(requestMsg)
|
||||
}
|
||||
|
@ -174,6 +176,7 @@ class ContactAddFragment : BaseFragment<FragmentClientContactAddBinding?>(), Vie
|
|||
}
|
||||
})
|
||||
}
|
||||
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -49,11 +49,11 @@ import com.xuexiang.xutil.data.ConvertTools
|
|||
import com.xuexiang.xutil.system.ClipboardUtils
|
||||
import me.samlss.broccoli.Broccoli
|
||||
|
||||
@Suppress("PropertyName", "DEPRECATION")
|
||||
@Suppress("PrivatePropertyName", "DEPRECATION")
|
||||
@Page(name = "远程查话簿")
|
||||
class ContactQueryFragment : BaseFragment<FragmentClientContactQueryBinding?>() {
|
||||
|
||||
val TAG: String = ContactQueryFragment::class.java.simpleName
|
||||
private val TAG: String = ContactQueryFragment::class.java.simpleName
|
||||
private var mAdapter: SimpleDelegateAdapter<ContactInfo>? = null
|
||||
private var keyword: String = ""
|
||||
|
||||
|
@ -124,6 +124,10 @@ class ContactQueryFragment : BaseFragment<FragmentClientContactQueryBinding?>()
|
|||
.addPlaceholder(PlaceholderHelper.getParameter(holder.findView(R.id.iv_call)))
|
||||
.addPlaceholder(PlaceholderHelper.getParameter(holder.findView(R.id.iv_reply)))
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: RecyclerViewHolder, position: Int) {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
}
|
||||
|
||||
val delegateAdapter = DelegateAdapter(virtualLayoutManager)
|
||||
|
|
|
@ -11,7 +11,12 @@ import com.idormy.sms.forwarder.core.BaseFragment
|
|||
import com.idormy.sms.forwarder.databinding.FragmentClientLocationBinding
|
||||
import com.idormy.sms.forwarder.entity.LocationInfo
|
||||
import com.idormy.sms.forwarder.server.model.BaseResponse
|
||||
import com.idormy.sms.forwarder.utils.*
|
||||
import com.idormy.sms.forwarder.utils.Base64
|
||||
import com.idormy.sms.forwarder.utils.HttpServerUtils
|
||||
import com.idormy.sms.forwarder.utils.RSACrypt
|
||||
import com.idormy.sms.forwarder.utils.SM4Crypt
|
||||
import com.idormy.sms.forwarder.utils.SettingUtils
|
||||
import com.idormy.sms.forwarder.utils.XToastUtils
|
||||
import com.xuexiang.xaop.annotation.SingleClick
|
||||
import com.xuexiang.xhttp2.XHttp
|
||||
import com.xuexiang.xhttp2.cache.model.CacheMode
|
||||
|
@ -25,11 +30,11 @@ import com.xuexiang.xui.widget.actionbar.TitleBar
|
|||
import com.xuexiang.xui.widget.grouplist.XUIGroupListView
|
||||
import com.xuexiang.xutil.data.ConvertTools
|
||||
|
||||
@Suppress("PropertyName")
|
||||
@Suppress("PrivatePropertyName", "DEPRECATION")
|
||||
@Page(name = "远程找手机")
|
||||
class LocationFragment : BaseFragment<FragmentClientLocationBinding?>(), View.OnClickListener {
|
||||
|
||||
val TAG: String = LocationFragment::class.java.simpleName
|
||||
private val TAG: String = LocationFragment::class.java.simpleName
|
||||
private var mCountDownHelper: CountDownButtonHelper? = null
|
||||
|
||||
override fun viewBindingInflate(
|
||||
|
@ -72,6 +77,7 @@ class LocationFragment : BaseFragment<FragmentClientLocationBinding?>(), View.On
|
|||
R.id.btn_refresh -> {
|
||||
getLocation()
|
||||
}
|
||||
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
|
@ -110,6 +116,7 @@ class LocationFragment : BaseFragment<FragmentClientLocationBinding?>(), View.On
|
|||
}
|
||||
postRequest.upString(requestMsg)
|
||||
}
|
||||
|
||||
3 -> {
|
||||
try {
|
||||
val sm4Key = ConvertTools.hexStringToByteArray(HttpServerUtils.clientSignKey)
|
||||
|
@ -124,6 +131,7 @@ class LocationFragment : BaseFragment<FragmentClientLocationBinding?>(), View.On
|
|||
}
|
||||
postRequest.upString(requestMsg)
|
||||
}
|
||||
|
||||
else -> {
|
||||
postRequest.upJson(requestMsg)
|
||||
}
|
||||
|
|
|
@ -49,11 +49,11 @@ import com.xuexiang.xutil.data.ConvertTools
|
|||
import com.xuexiang.xutil.data.DateUtils
|
||||
import me.samlss.broccoli.Broccoli
|
||||
|
||||
@Suppress("PropertyName", "DEPRECATION")
|
||||
@Suppress("PrivatePropertyName", "DEPRECATION")
|
||||
@Page(name = "远程查短信")
|
||||
class SmsQueryFragment : BaseFragment<FragmentClientSmsQueryBinding?>() {
|
||||
|
||||
val TAG: String = SmsQueryFragment::class.java.simpleName
|
||||
private val TAG: String = SmsQueryFragment::class.java.simpleName
|
||||
private var mAdapter: SimpleDelegateAdapter<SmsInfo>? = null
|
||||
private var smsType: Int = 1
|
||||
private var pageNum: Int = 1
|
||||
|
@ -122,6 +122,10 @@ class SmsQueryFragment : BaseFragment<FragmentClientSmsQueryBinding?>() {
|
|||
.addPlaceholder(PlaceholderHelper.getParameter(holder.findView(R.id.iv_reply)))
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: RecyclerViewHolder, position: Int) {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
val delegateAdapter = DelegateAdapter(virtualLayoutManager)
|
||||
|
|
|
@ -26,11 +26,11 @@ import com.xuexiang.xui.utils.ResUtils
|
|||
import com.xuexiang.xui.widget.actionbar.TitleBar
|
||||
import com.xuexiang.xutil.data.ConvertTools
|
||||
|
||||
@Suppress("PropertyName")
|
||||
@Suppress("PrivatePropertyName", "DEPRECATION")
|
||||
@Page(name = "远程发短信")
|
||||
class SmsSendFragment : BaseFragment<FragmentClientSmsSendBinding?>(), View.OnClickListener {
|
||||
|
||||
val TAG: String = SmsSendFragment::class.java.simpleName
|
||||
private val TAG: String = SmsSendFragment::class.java.simpleName
|
||||
private var mCountDownHelper: CountDownButtonHelper? = null
|
||||
|
||||
override fun viewBindingInflate(
|
||||
|
@ -138,6 +138,7 @@ class SmsSendFragment : BaseFragment<FragmentClientSmsSendBinding?>(), View.OnCl
|
|||
}
|
||||
postRequest.upString(requestMsg)
|
||||
}
|
||||
|
||||
3 -> {
|
||||
try {
|
||||
val sm4Key = ConvertTools.hexStringToByteArray(HttpServerUtils.clientSignKey)
|
||||
|
@ -152,6 +153,7 @@ class SmsSendFragment : BaseFragment<FragmentClientSmsSendBinding?>(), View.OnCl
|
|||
}
|
||||
postRequest.upString(requestMsg)
|
||||
}
|
||||
|
||||
else -> {
|
||||
postRequest.upJson(requestMsg)
|
||||
}
|
||||
|
@ -192,6 +194,7 @@ class SmsSendFragment : BaseFragment<FragmentClientSmsSendBinding?>(), View.OnCl
|
|||
}
|
||||
})
|
||||
}
|
||||
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,7 +10,12 @@ import com.idormy.sms.forwarder.R
|
|||
import com.idormy.sms.forwarder.core.BaseFragment
|
||||
import com.idormy.sms.forwarder.databinding.FragmentClientWolSendBinding
|
||||
import com.idormy.sms.forwarder.server.model.BaseResponse
|
||||
import com.idormy.sms.forwarder.utils.*
|
||||
import com.idormy.sms.forwarder.utils.Base64
|
||||
import com.idormy.sms.forwarder.utils.HttpServerUtils
|
||||
import com.idormy.sms.forwarder.utils.RSACrypt
|
||||
import com.idormy.sms.forwarder.utils.SM4Crypt
|
||||
import com.idormy.sms.forwarder.utils.SettingUtils
|
||||
import com.idormy.sms.forwarder.utils.XToastUtils
|
||||
import com.xuexiang.xaop.annotation.SingleClick
|
||||
import com.xuexiang.xhttp2.XHttp
|
||||
import com.xuexiang.xhttp2.cache.model.CacheMode
|
||||
|
@ -25,11 +30,11 @@ import com.xuexiang.xui.widget.dialog.materialdialog.DialogAction
|
|||
import com.xuexiang.xui.widget.dialog.materialdialog.MaterialDialog
|
||||
import com.xuexiang.xutil.data.ConvertTools
|
||||
|
||||
@Suppress("PropertyName")
|
||||
@Suppress("PrivatePropertyName", "DEPRECATION")
|
||||
@Page(name = "远程WOL")
|
||||
class WolSendFragment : BaseFragment<FragmentClientWolSendBinding?>(), View.OnClickListener {
|
||||
|
||||
val TAG: String = WolSendFragment::class.java.simpleName
|
||||
private val TAG: String = WolSendFragment::class.java.simpleName
|
||||
private var mCountDownHelper: CountDownButtonHelper? = null
|
||||
private var wolHistory: MutableMap<String, String> = mutableMapOf()
|
||||
|
||||
|
@ -103,6 +108,7 @@ class WolSendFragment : BaseFragment<FragmentClientWolSendBinding?>(), View.OnCl
|
|||
}
|
||||
.show()
|
||||
}
|
||||
|
||||
R.id.btn_submit -> {
|
||||
val requestUrl: String = HttpServerUtils.serverAddress + "/wol/send"
|
||||
Log.i(TAG, "requestUrl:$requestUrl")
|
||||
|
@ -166,6 +172,7 @@ class WolSendFragment : BaseFragment<FragmentClientWolSendBinding?>(), View.OnCl
|
|||
}
|
||||
postRequest.upString(requestMsg)
|
||||
}
|
||||
|
||||
3 -> {
|
||||
try {
|
||||
val sm4Key = ConvertTools.hexStringToByteArray(HttpServerUtils.clientSignKey)
|
||||
|
@ -180,6 +187,7 @@ class WolSendFragment : BaseFragment<FragmentClientWolSendBinding?>(), View.OnCl
|
|||
}
|
||||
postRequest.upString(requestMsg)
|
||||
}
|
||||
|
||||
else -> {
|
||||
postRequest.upJson(requestMsg)
|
||||
}
|
||||
|
@ -223,6 +231,7 @@ class WolSendFragment : BaseFragment<FragmentClientWolSendBinding?>(), View.OnCl
|
|||
}
|
||||
})
|
||||
}
|
||||
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,7 +28,7 @@ import com.xuexiang.xui.widget.actionbar.TitleBar
|
|||
class BatteryFragment : BaseFragment<FragmentTasksConditionBatteryBinding?>(), View.OnClickListener {
|
||||
|
||||
private val TAG: String = BatteryFragment::class.java.simpleName
|
||||
var titleBar: TitleBar? = null
|
||||
private var titleBar: TitleBar? = null
|
||||
|
||||
@JvmField
|
||||
@AutoWired(name = KEY_EVENT_DATA_CONDITION)
|
||||
|
|
|
@ -27,7 +27,7 @@ import com.xuexiang.xui.widget.actionbar.TitleBar
|
|||
class ChargeFragment : BaseFragment<FragmentTasksConditionChargeBinding?>(), View.OnClickListener {
|
||||
|
||||
private val TAG: String = ChargeFragment::class.java.simpleName
|
||||
var titleBar: TitleBar? = null
|
||||
private var titleBar: TitleBar? = null
|
||||
|
||||
@JvmField
|
||||
@AutoWired(name = KEY_EVENT_DATA_CONDITION)
|
||||
|
|
|
@ -41,7 +41,7 @@ import java.util.Locale
|
|||
class CronFragment : BaseFragment<FragmentTasksConditionCronBinding?>(), View.OnClickListener {
|
||||
|
||||
private val TAG: String = CronFragment::class.java.simpleName
|
||||
var titleBar: TitleBar? = null
|
||||
private var titleBar: TitleBar? = null
|
||||
private var mCountDownHelper: CountDownButtonHelper? = null
|
||||
|
||||
@JvmField
|
||||
|
|
|
@ -35,7 +35,7 @@ import com.xuexiang.xui.widget.dialog.materialdialog.MaterialDialog
|
|||
class LeaveAddressFragment : BaseFragment<FragmentTasksConditionLeaveAddressBinding?>(), View.OnClickListener {
|
||||
|
||||
private val TAG: String = LeaveAddressFragment::class.java.simpleName
|
||||
var titleBar: TitleBar? = null
|
||||
private var titleBar: TitleBar? = null
|
||||
|
||||
@JvmField
|
||||
@AutoWired(name = KEY_EVENT_DATA_CONDITION)
|
||||
|
|
|
@ -27,7 +27,7 @@ import com.xuexiang.xui.widget.actionbar.TitleBar
|
|||
class LockScreenFragment : BaseFragment<FragmentTasksConditionLockScreenBinding?>(), View.OnClickListener {
|
||||
|
||||
private val TAG: String = LockScreenFragment::class.java.simpleName
|
||||
var titleBar: TitleBar? = null
|
||||
private var titleBar: TitleBar? = null
|
||||
|
||||
@JvmField
|
||||
@AutoWired(name = KEY_EVENT_DATA_CONDITION)
|
||||
|
|
|
@ -29,7 +29,7 @@ import com.xuexiang.xui.widget.actionbar.TitleBar
|
|||
class NetworkFragment : BaseFragment<FragmentTasksConditionNetworkBinding?>(), View.OnClickListener {
|
||||
|
||||
private val TAG: String = NetworkFragment::class.java.simpleName
|
||||
var titleBar: TitleBar? = null
|
||||
private var titleBar: TitleBar? = null
|
||||
|
||||
@JvmField
|
||||
@AutoWired(name = KEY_EVENT_DATA_CONDITION)
|
||||
|
|
|
@ -27,7 +27,7 @@ import com.xuexiang.xui.widget.actionbar.TitleBar
|
|||
class SimFragment : BaseFragment<FragmentTasksConditionSimBinding?>(), View.OnClickListener {
|
||||
|
||||
private val TAG: String = SimFragment::class.java.simpleName
|
||||
var titleBar: TitleBar? = null
|
||||
private var titleBar: TitleBar? = null
|
||||
|
||||
@JvmField
|
||||
@AutoWired(name = KEY_EVENT_DATA_CONDITION)
|
||||
|
|
|
@ -35,7 +35,7 @@ import com.xuexiang.xui.widget.dialog.materialdialog.MaterialDialog
|
|||
class ToAddressFragment : BaseFragment<FragmentTasksConditionToAddressBinding?>(), View.OnClickListener {
|
||||
|
||||
private val TAG: String = ToAddressFragment::class.java.simpleName
|
||||
var titleBar: TitleBar? = null
|
||||
private var titleBar: TitleBar? = null
|
||||
|
||||
@JvmField
|
||||
@AutoWired(name = KEY_EVENT_DATA_CONDITION)
|
||||
|
|
|
@ -50,7 +50,7 @@ import java.util.Date
|
|||
class BarkFragment : BaseFragment<FragmentSendersBarkBinding?>(), View.OnClickListener {
|
||||
|
||||
private val TAG: String = BarkFragment::class.java.simpleName
|
||||
var titleBar: TitleBar? = null
|
||||
private var titleBar: TitleBar? = null
|
||||
private val viewModel by viewModels<SenderViewModel> { BaseViewModelFactory(context) }
|
||||
private var mCountDownHelper: CountDownButtonHelper? = null
|
||||
private var barkLevel: String = "active" //通知级别
|
||||
|
|
|
@ -48,7 +48,7 @@ import java.util.Date
|
|||
class DingtalkGroupRobotFragment : BaseFragment<FragmentSendersDingtalkGroupRobotBinding?>(), View.OnClickListener, CompoundButton.OnCheckedChangeListener {
|
||||
|
||||
private val TAG: String = DingtalkGroupRobotFragment::class.java.simpleName
|
||||
var titleBar: TitleBar? = null
|
||||
private var titleBar: TitleBar? = null
|
||||
private val viewModel by viewModels<SenderViewModel> { BaseViewModelFactory(context) }
|
||||
private var mCountDownHelper: CountDownButtonHelper? = null
|
||||
|
||||
|
|
|
@ -43,7 +43,7 @@ import java.util.*
|
|||
class DingtalkInnerRobotFragment : BaseFragment<FragmentSendersDingtalkInnerRobotBinding?>(), View.OnClickListener, CompoundButton.OnCheckedChangeListener {
|
||||
|
||||
private val TAG: String = DingtalkInnerRobotFragment::class.java.simpleName
|
||||
var titleBar: TitleBar? = null
|
||||
private var titleBar: TitleBar? = null
|
||||
private val viewModel by viewModels<SenderViewModel> { BaseViewModelFactory(context) }
|
||||
private var mCountDownHelper: CountDownButtonHelper? = null
|
||||
|
||||
|
|
|
@ -48,7 +48,7 @@ import java.util.Date
|
|||
class EmailFragment : BaseFragment<FragmentSendersEmailBinding?>(), View.OnClickListener {
|
||||
|
||||
private val TAG: String = EmailFragment::class.java.simpleName
|
||||
var titleBar: TitleBar? = null
|
||||
private var titleBar: TitleBar? = null
|
||||
private val viewModel by viewModels<SenderViewModel> { BaseViewModelFactory(context) }
|
||||
private var mCountDownHelper: CountDownButtonHelper? = null
|
||||
private var mailType: String = getString(R.string.other_mail_type) //邮箱类型
|
||||
|
|
|
@ -46,7 +46,7 @@ import java.util.Date
|
|||
class FeishuAppFragment : BaseFragment<FragmentSendersFeishuAppBinding?>(), View.OnClickListener {
|
||||
|
||||
private val TAG: String = FeishuAppFragment::class.java.simpleName
|
||||
var titleBar: TitleBar? = null
|
||||
private var titleBar: TitleBar? = null
|
||||
private val viewModel by viewModels<SenderViewModel> { BaseViewModelFactory(context) }
|
||||
private var mCountDownHelper: CountDownButtonHelper? = null
|
||||
|
||||
|
|
|
@ -46,7 +46,7 @@ import java.util.Date
|
|||
class FeishuFragment : BaseFragment<FragmentSendersFeishuBinding?>(), View.OnClickListener {
|
||||
|
||||
private val TAG: String = FeishuFragment::class.java.simpleName
|
||||
var titleBar: TitleBar? = null
|
||||
private var titleBar: TitleBar? = null
|
||||
private val viewModel by viewModels<SenderViewModel> { BaseViewModelFactory(context) }
|
||||
private var mCountDownHelper: CountDownButtonHelper? = null
|
||||
|
||||
|
|
|
@ -46,7 +46,7 @@ import java.util.Date
|
|||
class GotifyFragment : BaseFragment<FragmentSendersGotifyBinding?>(), View.OnClickListener {
|
||||
|
||||
private val TAG: String = GotifyFragment::class.java.simpleName
|
||||
var titleBar: TitleBar? = null
|
||||
private var titleBar: TitleBar? = null
|
||||
private val viewModel by viewModels<SenderViewModel> { BaseViewModelFactory(context) }
|
||||
private var mCountDownHelper: CountDownButtonHelper? = null
|
||||
|
||||
|
|
|
@ -47,7 +47,7 @@ import java.util.Date
|
|||
class PushplusFragment : BaseFragment<FragmentSendersPushplusBinding?>(), View.OnClickListener {
|
||||
|
||||
private val TAG: String = PushplusFragment::class.java.simpleName
|
||||
var titleBar: TitleBar? = null
|
||||
private var titleBar: TitleBar? = null
|
||||
private val viewModel by viewModels<SenderViewModel> { BaseViewModelFactory(context) }
|
||||
private var mCountDownHelper: CountDownButtonHelper? = null
|
||||
|
||||
|
|
|
@ -44,7 +44,7 @@ import java.util.Date
|
|||
class ServerchanFragment : BaseFragment<FragmentSendersServerchanBinding?>(), View.OnClickListener {
|
||||
|
||||
private val TAG: String = ServerchanFragment::class.java.simpleName
|
||||
var titleBar: TitleBar? = null
|
||||
private var titleBar: TitleBar? = null
|
||||
private val viewModel by viewModels<SenderViewModel> { BaseViewModelFactory(context) }
|
||||
private var mCountDownHelper: CountDownButtonHelper? = null
|
||||
|
||||
|
|
|
@ -49,7 +49,7 @@ import java.util.Date
|
|||
class SmsFragment : BaseFragment<FragmentSendersSmsBinding?>(), View.OnClickListener {
|
||||
|
||||
private val TAG: String = SmsFragment::class.java.simpleName
|
||||
var titleBar: TitleBar? = null
|
||||
private var titleBar: TitleBar? = null
|
||||
private val viewModel by viewModels<SenderViewModel> { BaseViewModelFactory(context) }
|
||||
private var mCountDownHelper: CountDownButtonHelper? = null
|
||||
|
||||
|
|
|
@ -46,7 +46,7 @@ import java.util.Date
|
|||
class SocketFragment : BaseFragment<FragmentSendersSocketBinding?>(), View.OnClickListener {
|
||||
|
||||
private val TAG: String = SocketFragment::class.java.simpleName
|
||||
var titleBar: TitleBar? = null
|
||||
private var titleBar: TitleBar? = null
|
||||
private val viewModel by viewModels<SenderViewModel> { BaseViewModelFactory(context) }
|
||||
private var mCountDownHelper: CountDownButtonHelper? = null
|
||||
|
||||
|
|
|
@ -47,7 +47,7 @@ import java.util.Date
|
|||
class TelegramFragment : BaseFragment<FragmentSendersTelegramBinding?>(), View.OnClickListener, CompoundButton.OnCheckedChangeListener {
|
||||
|
||||
private val TAG: String = TelegramFragment::class.java.simpleName
|
||||
var titleBar: TitleBar? = null
|
||||
private var titleBar: TitleBar? = null
|
||||
private val viewModel by viewModels<SenderViewModel> { BaseViewModelFactory(context) }
|
||||
private var mCountDownHelper: CountDownButtonHelper? = null
|
||||
|
||||
|
|
|
@ -49,7 +49,7 @@ import java.util.Date
|
|||
class UrlSchemeFragment : BaseFragment<FragmentSendersUrlSchemeBinding?>(), View.OnClickListener {
|
||||
|
||||
private val TAG: String = UrlSchemeFragment::class.java.simpleName
|
||||
var titleBar: TitleBar? = null
|
||||
private var titleBar: TitleBar? = null
|
||||
private val viewModel by viewModels<SenderViewModel> { BaseViewModelFactory(context) }
|
||||
private var mCountDownHelper: CountDownButtonHelper? = null
|
||||
|
||||
|
|
|
@ -48,7 +48,7 @@ import java.util.Date
|
|||
class WebhookFragment : BaseFragment<FragmentSendersWebhookBinding?>(), View.OnClickListener {
|
||||
|
||||
private val TAG: String = WebhookFragment::class.java.simpleName
|
||||
var titleBar: TitleBar? = null
|
||||
private var titleBar: TitleBar? = null
|
||||
private val viewModel by viewModels<SenderViewModel> { BaseViewModelFactory(context) }
|
||||
private var mCountDownHelper: CountDownButtonHelper? = null
|
||||
private var headerItemMap = HashMap<Int, LinearLayout>(2)
|
||||
|
|
|
@ -42,7 +42,7 @@ import java.util.*
|
|||
class WeworkAgentFragment : BaseFragment<FragmentSendersWeworkAgentBinding?>(), View.OnClickListener, CompoundButton.OnCheckedChangeListener {
|
||||
|
||||
private val TAG: String = WeworkAgentFragment::class.java.simpleName
|
||||
var titleBar: TitleBar? = null
|
||||
private var titleBar: TitleBar? = null
|
||||
private val viewModel by viewModels<SenderViewModel> { BaseViewModelFactory(context) }
|
||||
private var mCountDownHelper: CountDownButtonHelper? = null
|
||||
|
||||
|
|
|
@ -47,7 +47,7 @@ import java.util.Date
|
|||
class WeworkRobotFragment : BaseFragment<FragmentSendersWeworkRobotBinding?>(), View.OnClickListener, CompoundButton.OnCheckedChangeListener {
|
||||
|
||||
private val TAG: String = WeworkRobotFragment::class.java.simpleName
|
||||
var titleBar: TitleBar? = null
|
||||
private var titleBar: TitleBar? = null
|
||||
private val viewModel by viewModels<SenderViewModel> { BaseViewModelFactory(context) }
|
||||
private var mCountDownHelper: CountDownButtonHelper? = null
|
||||
|
||||
|
|
|
@ -15,10 +15,10 @@ import com.idormy.sms.forwarder.utils.TaskWorker
|
|||
import com.idormy.sms.forwarder.utils.task.TaskUtils
|
||||
import com.idormy.sms.forwarder.workers.BatteryWorker
|
||||
|
||||
@Suppress("PropertyName")
|
||||
@Suppress("PrivatePropertyName")
|
||||
class BatteryReceiver : BroadcastReceiver() {
|
||||
|
||||
val TAG: String = BatteryReceiver::class.java.simpleName
|
||||
private val TAG: String = BatteryReceiver::class.java.simpleName
|
||||
|
||||
override fun onReceive(context: Context?, intent: Intent?) {
|
||||
|
||||
|
|
|
@ -6,10 +6,10 @@ import android.content.Intent
|
|||
import android.util.Log
|
||||
import com.idormy.sms.forwarder.activity.SplashActivity
|
||||
|
||||
@Suppress("PropertyName")
|
||||
@Suppress("PrivatePropertyName")
|
||||
class BootCompletedReceiver : BroadcastReceiver() {
|
||||
|
||||
val TAG: String = BootCompletedReceiver::class.java.simpleName
|
||||
private val TAG: String = BootCompletedReceiver::class.java.simpleName
|
||||
|
||||
override fun onReceive(context: Context, intent: Intent?) {
|
||||
|
||||
|
|
|
@ -12,10 +12,10 @@ import com.idormy.sms.forwarder.utils.TaskWorker
|
|||
import com.idormy.sms.forwarder.utils.task.TaskUtils
|
||||
import com.idormy.sms.forwarder.workers.LockScreenWorker
|
||||
|
||||
@Suppress("PropertyName")
|
||||
@Suppress("PrivatePropertyName")
|
||||
class LockScreenReceiver : BroadcastReceiver() {
|
||||
|
||||
val TAG: String = LockScreenReceiver::class.java.simpleName
|
||||
private val TAG: String = LockScreenReceiver::class.java.simpleName
|
||||
|
||||
override fun onReceive(context: Context?, intent: Intent?) {
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@ import com.idormy.sms.forwarder.utils.HttpServerUtils
|
|||
import com.xuexiang.xui.utils.ResUtils.getString
|
||||
import com.yanzhenjie.andserver.annotation.*
|
||||
|
||||
@Suppress("PrivatePropertyName")
|
||||
@Suppress("PrivatePropertyName", "DEPRECATION")
|
||||
@RestController
|
||||
@RequestMapping(path = ["/clone"])
|
||||
class CloneController {
|
||||
|
|
|
@ -15,7 +15,7 @@ import com.xuexiang.xui.utils.ResUtils
|
|||
import com.xuexiang.xutil.XUtil
|
||||
import com.yanzhenjie.andserver.annotation.*
|
||||
|
||||
@Suppress("PrivatePropertyName")
|
||||
@Suppress("PrivatePropertyName", "DEPRECATION")
|
||||
@RestController
|
||||
@RequestMapping(path = ["/sms"])
|
||||
class SmsController {
|
||||
|
|
|
@ -56,8 +56,10 @@ class NotificationService : NotificationListenerService() {
|
|||
val extras = notification.extras ?: return
|
||||
|
||||
//自动消除额外APP通知
|
||||
if (!TextUtils.isEmpty(SettingUtils.cancelExtraAppNotify)) {
|
||||
for (app in SettingUtils.cancelExtraAppNotify.split("\n")) {
|
||||
SettingUtils.cancelExtraAppNotify
|
||||
.takeIf { it.isNotEmpty() }
|
||||
?.split("\n")
|
||||
?.forEach { app ->
|
||||
if (sbn.packageName == app.trim()) {
|
||||
Log.d(TAG, "自动消除额外APP通知:$app")
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
|
@ -65,11 +67,11 @@ class NotificationService : NotificationListenerService() {
|
|||
} else {
|
||||
cancelNotification(sbn.packageName, sbn.tag, sbn.id)
|
||||
}
|
||||
break
|
||||
}
|
||||
return@forEach
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//总开关
|
||||
if (!SettingUtils.enableAppNotify) return
|
||||
|
||||
|
@ -79,16 +81,10 @@ class NotificationService : NotificationListenerService() {
|
|||
val from = sbn.packageName
|
||||
//自身通知跳过
|
||||
if (PACKAGE_NAME == sbn.packageName) return
|
||||
//通知标题
|
||||
var title = ""
|
||||
if (extras["android.title"] != null) {
|
||||
title = extras["android.title"].toString()
|
||||
}
|
||||
// 标题
|
||||
var title = extras["android.title"]?.toString() ?: ""
|
||||
// 通知内容
|
||||
var text = ""
|
||||
if (extras["android.text"] != null) {
|
||||
text = extras["android.text"].toString()
|
||||
}
|
||||
var text = extras["android.text"]?.toString() ?: ""
|
||||
if (text.isEmpty() && notification.tickerText != null) {
|
||||
text = notification.tickerText.toString()
|
||||
}
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package com.idormy.sms.forwarder.utils
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Intent
|
||||
import android.content.pm.ApplicationInfo
|
||||
import android.content.pm.PackageInfo
|
||||
import android.content.pm.PackageManager
|
||||
|
@ -68,13 +67,13 @@ object AppUtils {
|
|||
}
|
||||
}
|
||||
|
||||
fun openApp(packageName: String) {
|
||||
/*fun openApp(packageName: String) {
|
||||
val packageManager = App.context.packageManager
|
||||
val intent = packageManager.getLaunchIntentForPackage(packageName)
|
||||
if (intent != null) {
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
App.context.startActivity(intent)
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
}
|
|
@ -8,7 +8,7 @@ import com.xuexiang.xui.utils.ResUtils.getString
|
|||
|
||||
@Suppress("DEPRECATION", "MemberVisibilityCanBePrivate")
|
||||
object BatteryUtils {
|
||||
private const val TAG = "BatteryUtils"
|
||||
//private const val TAG = "BatteryUtils"
|
||||
|
||||
fun getBatteryInfo(intent: Intent?): BatteryInfo {
|
||||
val batteryInfo = BatteryInfo()
|
||||
|
|
|
@ -43,7 +43,7 @@ import java.util.regex.Pattern
|
|||
/**
|
||||
* 常用工具类
|
||||
*/
|
||||
@Suppress("RegExpRedundantEscape", "unused", "RegExpUnnecessaryNonCapturingGroup")
|
||||
@Suppress("RegExpRedundantEscape", "unused", "RegExpUnnecessaryNonCapturingGroup", "DEPRECATION")
|
||||
class CommonUtils private constructor() {
|
||||
companion object {
|
||||
/**
|
||||
|
@ -235,17 +235,17 @@ class CommonUtils private constructor() {
|
|||
}
|
||||
|
||||
//是否合法的IP地址
|
||||
fun checkIP(IP: String): String {
|
||||
if (TextUtils.isEmpty(IP)) return "Neither"
|
||||
fun checkIP(ip: String): String {
|
||||
if (TextUtils.isEmpty(ip)) return "Neither"
|
||||
|
||||
if (IP.contains(".")) {
|
||||
if (ip.contains(".")) {
|
||||
val chunkIPv4 = "([\\d]|[1-9][\\d]|1[\\d][\\d]|2[0-4][\\d]|25[0-5])"
|
||||
val pattenIPv4 = Pattern.compile("^($chunkIPv4\\.){3}$chunkIPv4$")
|
||||
return if (pattenIPv4.matcher(IP).matches()) "IPv4" else "Neither"
|
||||
} else if (IP.contains(":")) {
|
||||
return if (pattenIPv4.matcher(ip).matches()) "IPv4" else "Neither"
|
||||
} else if (ip.contains(":")) {
|
||||
val chunkIPv6 = "([\\da-fA-F]{1,4})"
|
||||
val pattenIPv6 = Pattern.compile("^($chunkIPv6\\:){7}$chunkIPv6$")
|
||||
return if (pattenIPv6.matcher(IP).matches()) "IPv6" else "Neither"
|
||||
return if (pattenIPv6.matcher(ip).matches()) "IPv6" else "Neither"
|
||||
}
|
||||
return "Neither"
|
||||
}
|
||||
|
@ -295,7 +295,7 @@ class CommonUtils private constructor() {
|
|||
val address = addresses.nextElement()
|
||||
|
||||
if (address is Inet4Address || address is Inet6Address) {
|
||||
ipAddresses.add(address.hostAddress)
|
||||
address.hostAddress?.let { ipAddresses.add(it) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -63,7 +63,6 @@ const val ENABLE_LOAD_SYSTEM_APP_LIST = "enable_load_system_app_list"
|
|||
const val SP_DUPLICATE_MESSAGES_LIMITS = "duplicate_messages_limits"
|
||||
const val SP_SILENT_PERIOD_START = "silent_period_start"
|
||||
const val SP_SILENT_PERIOD_END = "silent_period_end"
|
||||
const val SP_AUTO_CLEAN_LOGS_DAYS = "auto_clean_logs_days"
|
||||
|
||||
const val SP_ENABLE_EXCLUDE_FROM_RECENTS = "enable_exclude_from_recents"
|
||||
const val SP_ENABLE_PLAY_SILENCE_MUSIC = "enable_play_silence_music"
|
||||
|
|
|
@ -5,6 +5,7 @@ import com.idormy.sms.forwarder.entity.ContactInfo
|
|||
import com.idormy.sms.forwarder.entity.SmsInfo
|
||||
import com.xuexiang.xaop.annotation.MemoryCache
|
||||
|
||||
@Suppress("SameParameterValue")
|
||||
object DataProvider {
|
||||
|
||||
//用于占位的空信息
|
||||
|
|
|
@ -21,6 +21,7 @@ import javax.crypto.spec.SecretKeySpec
|
|||
/**
|
||||
* HttpServer工具类
|
||||
*/
|
||||
@Suppress("DEPRECATION")
|
||||
class HttpServerUtils private constructor() {
|
||||
|
||||
companion object {
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
@file:Suppress("DEPRECATION")
|
||||
|
||||
package com.idormy.sms.forwarder.utils
|
||||
|
||||
import android.util.Log
|
||||
|
@ -35,8 +37,8 @@ object RuleLineUtils {
|
|||
}
|
||||
|
||||
@Throws(Exception::class)
|
||||
fun checkRuleLines(msg: MsgInfo, RuleLines: String?): Boolean {
|
||||
val scanner = Scanner(RuleLines)
|
||||
fun checkRuleLines(msg: MsgInfo, ruleLines: String?): Boolean {
|
||||
val scanner = Scanner(ruleLines)
|
||||
var lineNum = 0
|
||||
var headRuleLine: RuleLine? = null
|
||||
var beforeRuleLine: RuleLine? = null
|
||||
|
|
|
@ -72,9 +72,6 @@ class SettingUtils private constructor() {
|
|||
//免打扰(禁用转发)时间段——结束
|
||||
var silentPeriodEnd: Int by SharedPreference(SP_SILENT_PERIOD_END, 0)
|
||||
|
||||
//自动删除N天前的转发记录
|
||||
var autoCleanLogsDays: Int by SharedPreference(SP_AUTO_CLEAN_LOGS_DAYS, 0)
|
||||
|
||||
//是否不在最近任务列表中显示
|
||||
var enableExcludeFromRecents: Boolean by SharedPreference(SP_ENABLE_EXCLUDE_FROM_RECENTS, false)
|
||||
|
||||
|
|
|
@ -77,7 +77,7 @@ class SmsCommandUtils {
|
|||
GlobalScope.async(Dispatchers.IO) {
|
||||
val frpc = AppDatabase.getInstance(App.context).frpcDao().getOne(param)
|
||||
|
||||
if (frpc == null) {
|
||||
if (frpc.uid.isEmpty()) {
|
||||
Log.d(TAG, "没有找到指定的Frpc")
|
||||
return@async
|
||||
}
|
||||
|
|
|
@ -14,13 +14,11 @@ import com.xuexiang.xhttp2.XHttp
|
|||
import com.xuexiang.xhttp2.cache.model.CacheMode
|
||||
import com.xuexiang.xhttp2.callback.SimpleCallBack
|
||||
import com.xuexiang.xhttp2.exception.ApiException
|
||||
import java.net.URLEncoder
|
||||
import java.util.regex.Pattern
|
||||
import javax.crypto.Cipher
|
||||
import javax.crypto.spec.IvParameterSpec
|
||||
import javax.crypto.spec.SecretKeySpec
|
||||
|
||||
@Suppress("unused")
|
||||
@Suppress("unused", "RegExpRedundantEscape")
|
||||
class BarkUtils {
|
||||
companion object {
|
||||
|
||||
|
@ -74,7 +72,7 @@ class BarkUtils {
|
|||
val pattern = Regex("(?<!回复)(验证码|授权码|校验码|检验码|确认码|激活码|动态码|安全码|(验证)?代码|校验代码|检验代码|激活代码|确认代码|动态代码|安全代码|登入码|认证码|识别码|短信口令|动态密码|交易码|上网密码|动态口令|随机码|驗證碼|授權碼|校驗碼|檢驗碼|確認碼|激活碼|動態碼|(驗證)?代碼|校驗代碼|檢驗代碼|確認代碼|激活代碼|動態代碼|登入碼|認證碼|識別碼|一次性密码|[Cc][Oo][Dd][Ee]|[Vv]erification)")
|
||||
if (pattern.containsMatchIn(content)) {
|
||||
var code = content.replace("(.*)((代|授权|验证|动态|校验)码|[【\\[].*[】\\]]|[Cc][Oo][Dd][Ee]|[Vv]erification\\s?([Cc]ode)?)\\s?(G-|<#>)?([::\\s是为]|[Ii][Ss]){0,3}[\\((\\[【{「]?(([0-9\\s]{4,7})|([\\dA-Za-z]{5,6})(?!([Vv]erification)?([Cc][Oo][Dd][Ee])|:))[」}】\\])\\)]?(?=([^0-9a-zA-Z]|\$))(.*)".toRegex(), "$7").trim()
|
||||
code = code.replace("[^\\d]*[\\((\\[【{「]?([0-9]{3}\\s?[0-9]{1,3})[」}】\\])\\)]?(?=.*((代|授权|验证|动态|校验)码|[【\\[].*[】\\]]|[Cc][Oo][Dd][Ee]|[Vv]erification\\s?([Cc]ode)?))(.*)".toRegex(), "$1").trim()
|
||||
code = code.replace("\\D*[\\((\\[【{「]?([0-9]{3}\\s?[0-9]{1,3})[」}】\\])\\)]?(?=.*((代|授权|验证|动态|校验)码|[【\\[].*[】\\]]|[Cc][Oo][Dd][Ee]|[Vv]erification\\s?([Cc]ode)?))(.*)".toRegex(), "$1").trim()
|
||||
if (code.isNotEmpty()) {
|
||||
msgMap["copy"] = code
|
||||
msgMap["automaticallyCopy"] = 1
|
||||
|
@ -85,7 +83,7 @@ class BarkUtils {
|
|||
Log.i(TAG, "requestMsg:$requestMsg")
|
||||
//推送加密
|
||||
if (setting.transformation.isNotEmpty() && "none" != setting.transformation && setting.key.isNotEmpty() && setting.iv.isNotEmpty()) {
|
||||
var transformation = setting.transformation.replace("AES128", "AES").replace("AES192", "AES").replace("AES256", "AES")
|
||||
val transformation = setting.transformation.replace("AES128", "AES").replace("AES192", "AES").replace("AES256", "AES")
|
||||
val ciphertext = encrypt(requestMsg, transformation, setting.key, setting.iv)
|
||||
//Log.d(TAG, "ciphertext: $ciphertext")
|
||||
//val plainText = decrypt(ciphertext, transformation, setting.key, setting.iv)
|
||||
|
|
|
@ -26,6 +26,7 @@ import java.net.PasswordAuthentication
|
|||
import java.net.Proxy
|
||||
|
||||
//钉钉企业内机器人
|
||||
@Suppress("DEPRECATION")
|
||||
class DingtalkInnerRobotUtils private constructor() {
|
||||
companion object {
|
||||
|
||||
|
|
|
@ -11,6 +11,7 @@ import com.idormy.sms.forwarder.utils.mail.Mail
|
|||
import com.idormy.sms.forwarder.utils.mail.MailSender
|
||||
import com.xuexiang.xui.utils.ResUtils
|
||||
|
||||
@Suppress("DEPRECATION")
|
||||
class EmailUtils {
|
||||
companion object {
|
||||
|
||||
|
@ -43,12 +44,14 @@ class EmailUtils {
|
|||
setting.ssl = true
|
||||
setting.fromEmail += setting.mailType
|
||||
}
|
||||
|
||||
"@exmail.qq.com" -> {
|
||||
setting.host = "smtp.exmail.qq.com"
|
||||
setting.port = "465"
|
||||
setting.ssl = true
|
||||
setting.fromEmail += setting.mailType
|
||||
}
|
||||
|
||||
"@msn.com" -> {
|
||||
setting.host = "smtp-mail.outlook.com"
|
||||
setting.port = "587"
|
||||
|
@ -56,6 +59,7 @@ class EmailUtils {
|
|||
setting.startTls = true
|
||||
setting.fromEmail += setting.mailType
|
||||
}
|
||||
|
||||
"@outlook.com", "@office365.com", "@live.com", "@hotmail.com" -> {
|
||||
setting.host = "smtp.office365.com"
|
||||
setting.port = "587"
|
||||
|
@ -63,6 +67,7 @@ class EmailUtils {
|
|||
setting.startTls = true
|
||||
setting.fromEmail += setting.mailType
|
||||
}
|
||||
|
||||
"@gmail.com" -> {
|
||||
setting.host = "smtp.gmail.com"
|
||||
setting.port = "587"
|
||||
|
@ -70,48 +75,56 @@ class EmailUtils {
|
|||
setting.startTls = true
|
||||
setting.fromEmail += setting.mailType
|
||||
}
|
||||
|
||||
"@yeah.net" -> {
|
||||
setting.host = "smtp.yeah.net"
|
||||
setting.port = "465"
|
||||
setting.ssl = true
|
||||
setting.fromEmail += setting.mailType
|
||||
}
|
||||
|
||||
"@163.com" -> {
|
||||
setting.host = "smtp.163.com"
|
||||
setting.port = "465"
|
||||
setting.ssl = true
|
||||
setting.fromEmail += setting.mailType
|
||||
}
|
||||
|
||||
"@126.com" -> {
|
||||
setting.host = "smtp.126.com"
|
||||
setting.port = "465"
|
||||
setting.ssl = true
|
||||
setting.fromEmail += setting.mailType
|
||||
}
|
||||
|
||||
"@sina.com" -> {
|
||||
setting.host = "smtp.sina.com"
|
||||
setting.port = "465"
|
||||
setting.ssl = true
|
||||
setting.fromEmail += setting.mailType
|
||||
}
|
||||
|
||||
"@sina.cn" -> {
|
||||
setting.host = "smtp.sina.cn"
|
||||
setting.port = "465"
|
||||
setting.ssl = true
|
||||
setting.fromEmail += setting.mailType
|
||||
}
|
||||
|
||||
"@139.com" -> {
|
||||
setting.host = "smtp.139.com"
|
||||
setting.port = "465"
|
||||
setting.ssl = true
|
||||
setting.fromEmail += setting.mailType
|
||||
}
|
||||
|
||||
"@189.cn" -> {
|
||||
setting.host = "smtp.189.cn"
|
||||
setting.port = "465"
|
||||
setting.ssl = true
|
||||
setting.fromEmail += setting.mailType
|
||||
}
|
||||
|
||||
else -> {}
|
||||
}
|
||||
|
||||
|
|
|
@ -18,6 +18,7 @@ import com.xuexiang.xhttp2.exception.ApiException
|
|||
import com.xuexiang.xui.utils.ResUtils.getString
|
||||
|
||||
//飞书企业应用
|
||||
@Suppress("DEPRECATION")
|
||||
class FeishuAppUtils private constructor() {
|
||||
companion object {
|
||||
|
||||
|
|
|
@ -16,6 +16,7 @@ import com.xuexiang.xhttp2.callback.SimpleCallBack
|
|||
import com.xuexiang.xhttp2.exception.ApiException
|
||||
import com.xuexiang.xui.utils.ResUtils
|
||||
|
||||
@Suppress("DEPRECATION")
|
||||
class PushplusUtils private constructor() {
|
||||
companion object {
|
||||
|
||||
|
|
|
@ -16,6 +16,7 @@ import com.xuexiang.xui.utils.ResUtils
|
|||
import com.xuexiang.xutil.XUtil
|
||||
import com.xuexiang.xutil.net.NetworkUtils
|
||||
|
||||
@Suppress("DEPRECATION")
|
||||
class SmsUtils {
|
||||
companion object {
|
||||
|
||||
|
|
|
@ -114,7 +114,7 @@ object ShareReflectUtil {
|
|||
+ name
|
||||
+ " with parameters "
|
||||
+ listOf(*parameterTypes)
|
||||
+ " not found in " + tClazz
|
||||
+ " not found in tClazz"
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
@ -13,6 +13,7 @@ import com.xuexiang.xupdate.listener.OnUpdateFailureListener
|
|||
* @author xuexiang
|
||||
* @since 2019/4/15 上午12:01
|
||||
*/
|
||||
@Suppress("DEPRECATION")
|
||||
class CustomUpdateFailureListener @JvmOverloads constructor(
|
||||
/**
|
||||
* 是否需要错误提示
|
||||
|
|
|
@ -17,6 +17,7 @@ import com.xuexiang.xupdate.XUpdate
|
|||
* @author xuexiang
|
||||
* @since 2019-06-15 00:06
|
||||
*/
|
||||
@Suppress("DEPRECATION")
|
||||
class UpdateTipDialog : AppCompatActivity(), DialogInterface.OnDismissListener {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
|
|
@ -19,6 +19,7 @@ import com.xuexiang.xutil.net.JsonUtil
|
|||
* @author xuexiang
|
||||
* @since 2018/8/12 上午11:46
|
||||
*/
|
||||
@Suppress("DEPRECATION")
|
||||
class XHttpUpdateHttpServiceImpl : IUpdateHttpService {
|
||||
override fun asyncGet(
|
||||
url: String,
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<animated-selector
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:state_enabled="true" android:state_checked="true" android:drawable="@drawable/auto_task_radio_button_select" />
|
||||
<item android:state_checked="true" android:drawable="@drawable/auto_task_radio_button_select" />
|
||||
<item android:state_checked="false" android:drawable="@drawable/auto_task_radio_button_un_select" />
|
||||
<item android:state_enabled="true" android:drawable="@drawable/auto_task_radio_button_select" />
|
||||
<item android:drawable="@drawable/auto_task_radio_button_un_select" />
|
||||
</animated-selector>
|
|
@ -1,7 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<vector android:height="@dimen/view_dimen_68" android:width="@dimen/view_dimen_68" android:viewportWidth="68.0" android:viewportHeight="68.0"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="@color/auto_task_select_radio_out_color" android:pathData="M34,66C51.6731,66 66,51.6731 66,34C66,16.3269 51.6731,2 34,2C16.3269,2 2,16.3269 2,34C2,51.6731 16.3269,66 34,66Z" />
|
||||
<path android:fillColor="#00000000" android:pathData="M34,67C52.2254,67 67,52.2254 67,34C67,15.7746 52.2254,1 34,1C15.7746,1 1,15.7746 1,34C1,52.2254 15.7746,67 34,67Z" android:strokeColor="#ffffffff" android:strokeWidth="2.0" android:strokeAlpha="0.1" />
|
||||
<path android:fillColor="#ffffffff" android:pathData="M34,49C42.2843,49 49,42.2843 49,34C49,25.7157 42.2843,19 34,19C25.7157,19 19,25.7157 19,34C19,42.2843 25.7157,49 34,49Z" />
|
||||
</vector>
|
|
@ -1,6 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<vector android:height="@dimen/view_dimen_68" android:width="@dimen/view_dimen_68" android:viewportWidth="70.0" android:viewportHeight="70.0"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="#ff000000" android:pathData="M35,67C52.6731,67 67,52.6731 67,35C67,17.3269 52.6731,3 35,3C17.3269,3 3,17.3269 3,35C3,52.6731 17.3269,67 35,67Z" android:fillAlpha="0.06" />
|
||||
<path android:fillColor="#00000000" android:pathData="M35,68.5C53.5015,68.5 68.5,53.5015 68.5,35C68.5,16.4985 53.5015,1.5 35,1.5C16.4985,1.5 1.5,16.4985 1.5,35C1.5,53.5015 16.4985,68.5 35,68.5Z" android:strokeColor="#ffffffff" android:strokeWidth="3.0" />
|
||||
</vector>
|
|
@ -1,5 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<vector android:height="@dimen/view_dimen_56" android:width="@dimen/view_dimen_56" android:viewportWidth="56.0" android:viewportHeight="56.0"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="#ff0d84ff" android:pathData="M46.8171,18.1513C48.0496,16.6622 47.8417,14.4559 46.3527,13.2234C44.8636,11.9908 42.6573,12.1987 41.4247,13.6878L22.9535,36.0029L13.4007,26.45C12.0338,25.0832 9.8177,25.0832 8.4509,26.45C7.0841,27.8169 7.0841,30.0329 8.4509,31.3998L20.7077,43.6566C21.7243,44.6732 23.2108,44.9337 24.4682,44.438C25.0159,44.2301 25.5189,43.8816 25.9192,43.398L46.8171,18.1513Z" android:fillType="evenOdd" />
|
||||
</vector>
|
|
@ -63,7 +63,7 @@
|
|||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:gravity="right" />
|
||||
android:gravity="end|bottom" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
|
|
@ -20,7 +20,8 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="end"
|
||||
android:padding="@dimen/config_margin_10dp"
|
||||
app:srcCompat="@drawable/ic_action_close_white" />
|
||||
app:srcCompat="@drawable/ic_action_close_white"
|
||||
tools:ignore="ImageContrastCheck" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
|
@ -52,7 +53,8 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_marginTop="@dimen/config_margin_16dp"
|
||||
android:text="@string/tip_title"
|
||||
android:textColor="?attr/colorAccent" />
|
||||
android:textColor="?attr/colorAccent"
|
||||
tools:ignore="TextContrastCheck" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_content"
|
||||
|
@ -84,12 +86,14 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:button="@drawable/xui_icon_checkbox"
|
||||
android:scaleX="0.8"
|
||||
android:scaleY="0.8" />
|
||||
android:scaleY="0.8"
|
||||
tools:ignore="PrivateResource,TouchTargetSizeCheck" />
|
||||
|
||||
<TextView
|
||||
style="@style/TextStyle.Explain"
|
||||
android:layout_marginStart="@dimen/config_margin_4dp"
|
||||
android:text="@string/tip_ignore_message" />
|
||||
android:text="@string/tip_ignore_message"
|
||||
tools:ignore="TextContrastCheck" />
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
|
|
@ -534,7 +534,7 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:text="@string/silent_time_period_tips"
|
||||
android:textSize="9sp"
|
||||
tools:ignore="SmallSp" />
|
||||
tools:ignore="SmallSp,TooManyViews" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
|
|
@ -349,7 +349,6 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="5dp"
|
||||
android:background="@color/setting_bar_color"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="vertical"
|
||||
android:paddingStart="10dp"
|
||||
android:paddingTop="10dp"
|
||||
|
@ -358,6 +357,7 @@
|
|||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<LinearLayout
|
||||
|
@ -822,53 +822,6 @@
|
|||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
style="@style/settingBarStyle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingEnd="15dp"
|
||||
tools:ignore="RtlSymmetry">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/auto_clean_logs"
|
||||
android:textStyle="bold"
|
||||
tools:ignore="RelativeOverlap" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/auto_clean_logs_tips"
|
||||
android:textSize="9sp"
|
||||
tools:ignore="SmallSp" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<com.xuexiang.xui.widget.picker.XSeekBar
|
||||
android:id="@+id/xsb_auto_clean_logs"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="5dp"
|
||||
android:layout_weight="1"
|
||||
app:xsb_max="60"
|
||||
app:xsb_min="0" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="5dp"
|
||||
android:text="@string/day"
|
||||
android:textSize="12sp"
|
||||
android:textStyle="bold" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
|
|
@ -128,7 +128,9 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:hint="0-59"
|
||||
android:textAlignment="center" />
|
||||
android:importantForAutofill="no"
|
||||
android:textAlignment="center"
|
||||
tools:ignore="DuplicateSpeakableTextCheck,HardcodedText,TextFields,TouchTargetSizeCheck,TextContrastCheck" />
|
||||
|
||||
<EditText
|
||||
android:id="@+id/et_minute"
|
||||
|
@ -136,7 +138,9 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:hint="0-59"
|
||||
android:textAlignment="center" />
|
||||
android:importantForAutofill="no"
|
||||
android:textAlignment="center"
|
||||
tools:ignore="HardcodedText,TextFields,TouchTargetSizeCheck,TextContrastCheck" />
|
||||
|
||||
<EditText
|
||||
android:id="@+id/et_hour"
|
||||
|
@ -144,7 +148,9 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:hint="0-23"
|
||||
android:textAlignment="center" />
|
||||
android:importantForAutofill="no"
|
||||
android:textAlignment="center"
|
||||
tools:ignore="HardcodedText,TextFields,TouchTargetSizeCheck,TextContrastCheck" />
|
||||
|
||||
<EditText
|
||||
android:id="@+id/et_day"
|
||||
|
@ -152,7 +158,9 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:hint="1-31"
|
||||
android:textAlignment="center" />
|
||||
android:importantForAutofill="no"
|
||||
android:textAlignment="center"
|
||||
tools:ignore="HardcodedText,TextFields,TouchTargetSizeCheck,TextContrastCheck" />
|
||||
|
||||
<EditText
|
||||
android:id="@+id/et_month"
|
||||
|
@ -160,7 +168,9 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:hint="1-12"
|
||||
android:textAlignment="center" />
|
||||
android:importantForAutofill="no"
|
||||
android:textAlignment="center"
|
||||
tools:ignore="HardcodedText,TextFields,TouchTargetSizeCheck,TextContrastCheck" />
|
||||
|
||||
<EditText
|
||||
android:id="@+id/et_week"
|
||||
|
@ -168,7 +178,9 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:hint="1-7"
|
||||
android:textAlignment="center" />
|
||||
android:importantForAutofill="no"
|
||||
android:textAlignment="center"
|
||||
tools:ignore="HardcodedText,TextFields,TouchTargetSizeCheck,TextContrastCheck" />
|
||||
|
||||
<EditText
|
||||
android:id="@+id/et_year"
|
||||
|
@ -176,7 +188,9 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:hint="*"
|
||||
android:textAlignment="center" />
|
||||
android:importantForAutofill="no"
|
||||
android:textAlignment="center"
|
||||
tools:ignore="HardcodedText,TextFields,TouchTargetSizeCheck,TextContrastCheck" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
@ -272,6 +286,7 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/start"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="number"
|
||||
android:textAlignment="center" />
|
||||
|
||||
|
@ -285,6 +300,7 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/end"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="number"
|
||||
android:textAlignment="center" />
|
||||
|
||||
|
@ -317,6 +333,7 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/start"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="number"
|
||||
android:textAlignment="center" />
|
||||
|
||||
|
@ -330,6 +347,7 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/interval"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="number"
|
||||
android:textAlignment="center" />
|
||||
|
||||
|
@ -403,6 +421,7 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/start"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="number"
|
||||
android:textAlignment="center" />
|
||||
|
||||
|
@ -416,6 +435,7 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/end"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="number"
|
||||
android:textAlignment="center" />
|
||||
|
||||
|
@ -448,6 +468,7 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/start"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="number"
|
||||
android:textAlignment="center" />
|
||||
|
||||
|
@ -461,6 +482,7 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/interval"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="number"
|
||||
android:textAlignment="center" />
|
||||
|
||||
|
@ -534,6 +556,7 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/start"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="number"
|
||||
android:textAlignment="center" />
|
||||
|
||||
|
@ -547,6 +570,7 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/end"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="number"
|
||||
android:textAlignment="center" />
|
||||
|
||||
|
@ -561,7 +585,8 @@
|
|||
android:id="@+id/rb_hour_type_interval"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/interval" />
|
||||
android:text="@string/interval"
|
||||
tools:ignore="TooManyViews" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
|
@ -579,6 +604,7 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/start"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="number"
|
||||
android:textAlignment="center" />
|
||||
|
||||
|
@ -592,6 +618,7 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/interval"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="number"
|
||||
android:textAlignment="center" />
|
||||
|
||||
|
@ -665,6 +692,7 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/start"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="number"
|
||||
android:textAlignment="center" />
|
||||
|
||||
|
@ -678,6 +706,7 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/end"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="number"
|
||||
android:textAlignment="center" />
|
||||
|
||||
|
@ -710,6 +739,7 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/start"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="number"
|
||||
android:textAlignment="center" />
|
||||
|
||||
|
@ -723,6 +753,7 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/interval"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="number"
|
||||
android:textAlignment="center" />
|
||||
|
||||
|
@ -755,8 +786,10 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="1-31"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="number"
|
||||
android:textAlignment="center" />
|
||||
android:textAlignment="center"
|
||||
tools:ignore="HardcodedText" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
|
@ -846,6 +879,7 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/start"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="number"
|
||||
android:textAlignment="center" />
|
||||
|
||||
|
@ -859,6 +893,7 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/end"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="number"
|
||||
android:textAlignment="center" />
|
||||
|
||||
|
@ -891,6 +926,7 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/start"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="number"
|
||||
android:textAlignment="center" />
|
||||
|
||||
|
@ -904,6 +940,7 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/interval"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="number"
|
||||
android:textAlignment="center" />
|
||||
|
||||
|
@ -977,6 +1014,7 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/start"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="number"
|
||||
android:textAlignment="center" />
|
||||
|
||||
|
@ -990,6 +1028,7 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/end"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="number"
|
||||
android:textAlignment="center" />
|
||||
|
||||
|
@ -1016,6 +1055,7 @@
|
|||
android:id="@+id/et_which_week_of_month"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="number"
|
||||
android:textAlignment="center" />
|
||||
|
||||
|
@ -1029,8 +1069,10 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="1-7"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="number"
|
||||
android:textAlignment="center" />
|
||||
android:textAlignment="center"
|
||||
tools:ignore="HardcodedText" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
@ -1056,8 +1098,10 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="1-7"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="number"
|
||||
android:textAlignment="center" />
|
||||
android:textAlignment="center"
|
||||
tools:ignore="HardcodedText" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
|
@ -1142,6 +1186,7 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/start"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="number"
|
||||
android:textAlignment="center" />
|
||||
|
||||
|
@ -1155,6 +1200,7 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/end"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="number"
|
||||
android:textAlignment="center" />
|
||||
|
||||
|
@ -1187,6 +1233,7 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/start"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="number"
|
||||
android:textAlignment="center" />
|
||||
|
||||
|
@ -1200,6 +1247,7 @@
|
|||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/interval"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="number"
|
||||
android:textAlignment="center" />
|
||||
|
||||
|
@ -1244,7 +1292,7 @@
|
|||
android:paddingStart="15dp"
|
||||
android:text="@string/discard"
|
||||
android:textSize="11sp"
|
||||
tools:ignore="RtlSymmetry" />
|
||||
tools:ignore="RtlSymmetry,TextContrastCheck,TouchTargetSizeCheck" />
|
||||
|
||||
<com.xuexiang.xui.widget.textview.supertextview.SuperButton
|
||||
android:id="@+id/btn_save"
|
||||
|
@ -1254,7 +1302,7 @@
|
|||
android:paddingStart="15dp"
|
||||
android:text="@string/submit"
|
||||
android:textSize="11sp"
|
||||
tools:ignore="RtlSymmetry" />
|
||||
tools:ignore="RtlSymmetry,TouchTargetSizeCheck,TextContrastCheck" />
|
||||
|
||||
<com.xuexiang.xui.widget.textview.supertextview.SuperButton
|
||||
android:id="@+id/btn_test"
|
||||
|
@ -1264,7 +1312,7 @@
|
|||
android:paddingStart="15dp"
|
||||
android:text="@string/test"
|
||||
android:textSize="11sp"
|
||||
tools:ignore="RtlSymmetry" />
|
||||
tools:ignore="RtlSymmetry,TouchTargetSizeCheck,TextContrastCheck" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue