diff --git a/app/src/main/java/com/idormy/sms/forwarder/activity/SplashActivity.kt b/app/src/main/java/com/idormy/sms/forwarder/activity/SplashActivity.kt index 47f4e076..9aadd196 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/activity/SplashActivity.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/activity/SplashActivity.kt @@ -47,7 +47,9 @@ class SplashActivity : BaseSplashActivity(), CancelAdapt { } private fun whereToJump() { - if (SettingUtils.enablePureClientMode) { + if (SettingUtils.enablePureTaskMode) { + ActivityUtils.startActivity(TaskActivity::class.java) + } else if (SettingUtils.enablePureClientMode) { ActivityUtils.startActivity(ClientActivity::class.java) } else { ActivityUtils.startActivity(MainActivity::class.java) diff --git a/app/src/main/java/com/idormy/sms/forwarder/activity/TaskActivity.kt b/app/src/main/java/com/idormy/sms/forwarder/activity/TaskActivity.kt index b0fad2b6..bf0ada98 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/activity/TaskActivity.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/activity/TaskActivity.kt @@ -3,12 +3,12 @@ package com.idormy.sms.forwarder.activity import android.os.Bundle import androidx.viewbinding.ViewBinding import com.idormy.sms.forwarder.core.BaseActivity -import com.idormy.sms.forwarder.fragment.TasksEditFragment +import com.idormy.sms.forwarder.fragment.TasksFragment class TaskActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - openPage(TasksEditFragment::class.java) + openPage(TasksFragment::class.java) } } \ No newline at end of file diff --git a/app/src/main/java/com/idormy/sms/forwarder/adapter/FrpcPagingAdapter.kt b/app/src/main/java/com/idormy/sms/forwarder/adapter/FrpcPagingAdapter.kt index d328e439..fa2e999f 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/adapter/FrpcPagingAdapter.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/adapter/FrpcPagingAdapter.kt @@ -26,7 +26,6 @@ class FrpcPagingAdapter(private val itemClickListener: OnItemClickListener) : Pa override fun onBindViewHolder(holder: MyViewHolder, position: Int) { val item = getItem(position) if (item != null) { - holder.binding.ivImage.setImageResource(R.drawable.ic_menu_frpc) holder.binding.ivAutorun.setImageResource(item.autorunImageId) holder.binding.tvUid.text = "UID:${item.uid}" holder.binding.tvName.text = item.name @@ -43,10 +42,6 @@ class FrpcPagingAdapter(private val itemClickListener: OnItemClickListener) : Pa } } - holder.binding.ivCopy.setImageResource(R.drawable.ic_copy) - holder.binding.ivEdit.setImageResource(R.drawable.ic_edit) - holder.binding.ivDelete.setImageResource(R.drawable.ic_delete) - holder.binding.ivCopy.setOnClickListener { view: View? -> itemClickListener.onItemClicked(view, item) } diff --git a/app/src/main/java/com/idormy/sms/forwarder/adapter/RulePagingAdapter.kt b/app/src/main/java/com/idormy/sms/forwarder/adapter/RulePagingAdapter.kt index 75d18d3a..e1386a2c 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/adapter/RulePagingAdapter.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/adapter/RulePagingAdapter.kt @@ -42,9 +42,6 @@ class RulePagingAdapter(private val itemClickListener: OnItemClickListener) : Pa holder.binding.layoutSenders.addView(layoutSenderItem) } - holder.binding.ivCopy.setImageResource(R.drawable.ic_copy) - holder.binding.ivEdit.setImageResource(R.drawable.ic_edit) - holder.binding.ivDelete.setImageResource(R.drawable.ic_delete) holder.binding.ivCopy.setOnClickListener { view: View? -> itemClickListener.onItemClicked(view, item) } diff --git a/app/src/main/java/com/idormy/sms/forwarder/adapter/SenderPagingAdapter.kt b/app/src/main/java/com/idormy/sms/forwarder/adapter/SenderPagingAdapter.kt index 1f0757b3..b383cdd9 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/adapter/SenderPagingAdapter.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/adapter/SenderPagingAdapter.kt @@ -7,7 +7,6 @@ import android.view.ViewGroup import androidx.paging.PagingDataAdapter import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.RecyclerView -import com.idormy.sms.forwarder.R import com.idormy.sms.forwarder.adapter.SenderPagingAdapter.MyViewHolder import com.idormy.sms.forwarder.database.entity.Sender import com.idormy.sms.forwarder.databinding.AdapterSendersCardViewListItemBinding @@ -26,12 +25,6 @@ class SenderPagingAdapter(private val itemClickListener: OnItemClickListener) : holder.binding.ivStatus.setImageResource(item.statusImageId) holder.binding.tvName.text = item.name - /*holder.binding.cardView.setOnClickListener { view: View? -> - itemClickListener.onItemClicked(view, item) - }*/ - holder.binding.ivCopy.setImageResource(R.drawable.ic_copy) - holder.binding.ivEdit.setImageResource(R.drawable.ic_edit) - holder.binding.ivDelete.setImageResource(R.drawable.ic_delete) holder.binding.ivCopy.setOnClickListener { view: View? -> itemClickListener.onItemClicked(view, item) } diff --git a/app/src/main/java/com/idormy/sms/forwarder/adapter/TaskPagingAdapter.kt b/app/src/main/java/com/idormy/sms/forwarder/adapter/TaskPagingAdapter.kt index fd2eee5a..72aa124e 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/adapter/TaskPagingAdapter.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/adapter/TaskPagingAdapter.kt @@ -1,16 +1,22 @@ package com.idormy.sms.forwarder.adapter import android.annotation.SuppressLint +import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.ImageView +import android.widget.LinearLayout import androidx.paging.PagingDataAdapter import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.RecyclerView +import com.google.gson.Gson +import com.idormy.sms.forwarder.App import com.idormy.sms.forwarder.R import com.idormy.sms.forwarder.adapter.TaskPagingAdapter.MyViewHolder import com.idormy.sms.forwarder.database.entity.Task import com.idormy.sms.forwarder.databinding.AdapterTasksCardViewListItemBinding +import com.idormy.sms.forwarder.entity.task.TaskSetting class TaskPagingAdapter(private val itemClickListener: OnItemClickListener) : PagingDataAdapter(diffCallback) { @@ -22,25 +28,55 @@ class TaskPagingAdapter(private val itemClickListener: OnItemClickListener) : Pa override fun onBindViewHolder(holder: MyViewHolder, position: Int) { val item = getItem(position) if (item != null) { - holder.binding.ivImage.setImageResource(item.imageId) - holder.binding.ivStatus.setImageResource(item.statusImageId) - holder.binding.tvName.text = item.name + // 任务类型:<1000为任务模板,>=1000为自定义任务 + if (item.type >= 1000) { + holder.binding.layoutImage.visibility = View.GONE - /*holder.binding.cardView.setOnClickListener { view: View? -> - itemClickListener.onItemClicked(view, item) - }*/ - holder.binding.ivCopy.setImageResource(R.drawable.ic_copy) - holder.binding.ivEdit.setImageResource(R.drawable.ic_edit) - holder.binding.ivDelete.setImageResource(R.drawable.ic_delete) + //遍历conditions显示图标 + holder.binding.layoutConditionsIcons.removeAllViews() + if (item.conditions.isNotEmpty()) { + val conditionList = Gson().fromJson(item.conditions, Array::class.java).toMutableList() + for (condition in conditionList) { + val layoutConditionItem = View.inflate(App.context, R.layout.item_setting, null) as LinearLayout + val ivConditionIcon = layoutConditionItem.findViewById(R.id.iv_setting_icon) + ivConditionIcon.setImageResource(condition.iconId) + holder.binding.layoutConditionsIcons.addView(layoutConditionItem) + } + } + + //遍历actions显示图标 + holder.binding.layoutActionsIcons.removeAllViews() + if (item.actions.isNotEmpty()) { + val actionList = Gson().fromJson(item.actions, Array::class.java).toMutableList() + Log.d("TaskPagingAdapter", "actionList:$actionList") + for (action in actionList) { + Log.d("TaskPagingAdapter", "action:$action") + val layoutActionItem = View.inflate(App.context, R.layout.item_setting, null) as LinearLayout + val ivActionIcon = layoutActionItem.findViewById(R.id.iv_setting_icon) + ivActionIcon.setImageResource(action.iconId) + holder.binding.layoutActionsIcons.addView(layoutActionItem) + } + } + + holder.binding.ivEdit.setOnClickListener { view: View? -> + itemClickListener.onItemClicked(view, item) + } + holder.binding.ivDelete.setOnClickListener { view: View? -> + itemClickListener.onItemClicked(view, item) + } + } else { + holder.binding.layoutImage.visibility = View.VISIBLE + holder.binding.layoutIcons.visibility = View.GONE + holder.binding.ivImage.setImageResource(item.imageId) + holder.binding.ivStatus.setImageResource(item.statusImageId) + holder.binding.ivEdit.visibility = View.GONE + holder.binding.ivDelete.visibility = View.GONE + } + holder.binding.tvName.text = item.name + holder.binding.tvDescription.text = item.description holder.binding.ivCopy.setOnClickListener { view: View? -> itemClickListener.onItemClicked(view, item) } - holder.binding.ivEdit.setOnClickListener { view: View? -> - itemClickListener.onItemClicked(view, item) - } - holder.binding.ivDelete.setOnClickListener { view: View? -> - itemClickListener.onItemClicked(view, item) - } } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/database/dao/TaskDao.kt b/app/src/main/java/com/idormy/sms/forwarder/database/dao/TaskDao.kt index 3d4f3892..b1011aa2 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/database/dao/TaskDao.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/database/dao/TaskDao.kt @@ -23,8 +23,11 @@ interface TaskDao { @Query("SELECT * FROM Task ORDER BY id DESC") fun getAll(): List - @Query("SELECT * FROM Task where type=:type ORDER BY id DESC") - fun pagingSource(type: String): PagingSource + @Query("SELECT * FROM Task where type < 1000 ORDER BY id DESC") + fun pagingSourceFixed(): PagingSource + + @Query("SELECT * FROM Task where type >= 1000 ORDER BY id DESC") + fun pagingSourceMine(): PagingSource @Transaction @RawQuery(observedEntities = [Task::class]) diff --git a/app/src/main/java/com/idormy/sms/forwarder/database/entity/Task.kt b/app/src/main/java/com/idormy/sms/forwarder/database/entity/Task.kt index 51444889..20a40163 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/database/entity/Task.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/database/entity/Task.kt @@ -6,22 +6,14 @@ import androidx.room.Entity import androidx.room.PrimaryKey import com.idormy.sms.forwarder.R 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 com.idormy.sms.forwarder.utils.TASK_ACTION_FRPC +import com.idormy.sms.forwarder.utils.TASK_ACTION_HTTPSERVER +import com.idormy.sms.forwarder.utils.TASK_ACTION_NOTIFICATION +import com.idormy.sms.forwarder.utils.TASK_ACTION_SENDSMS +import com.idormy.sms.forwarder.utils.TASK_CONDITION_BATTERY +import com.idormy.sms.forwarder.utils.TASK_CONDITION_CHARGE +import com.idormy.sms.forwarder.utils.TASK_CONDITION_CRON +import com.idormy.sms.forwarder.utils.TASK_CONDITION_NETWORK import kotlinx.parcelize.Parcelize import java.util.Date @@ -29,35 +21,27 @@ import java.util.Date @Entity(tableName = "Task") data class Task( @PrimaryKey(autoGenerate = true) var id: Long = 0, - @ColumnInfo(name = "type", defaultValue = "1") var type: Int = 1, // 任务类型字段 + @ColumnInfo(name = "type", defaultValue = "1") var type: Int = 1, // 任务类型:<1000为任务模板,>=1000为自定义任务 @ColumnInfo(name = "name", defaultValue = "") val name: String = "", // 任务名称 @ColumnInfo(name = "description", defaultValue = "") val description: String = "", // 任务描述 @ColumnInfo(name = "conditions", defaultValue = "") val conditions: String = "", // 触发条件 @ColumnInfo(name = "actions", defaultValue = "") val actions: String = "", // 执行动作 + @ColumnInfo(name = "status", defaultValue = "1") var status: Int = 1, // 任务状态 @ColumnInfo(name = "last_exec_time") var lastExecTime: Date = Date(), // 上次执行时间 @ColumnInfo(name = "next_exec_time") var nextExecTime: Date = Date(), // 下次执行时间 - @ColumnInfo(name = "status", defaultValue = "1") var status: Int = 1, // 任务状态 ) : Parcelable { val imageId: Int get() = when (type) { - TYPE_DINGTALK_GROUP_ROBOT -> R.drawable.icon_dingtalk - TYPE_EMAIL -> R.drawable.icon_email - TYPE_BARK -> R.drawable.icon_bark - TYPE_WEBHOOK -> R.drawable.icon_webhook - TYPE_WEWORK_ROBOT -> R.drawable.icon_wework_robot - TYPE_WEWORK_AGENT -> R.drawable.icon_wework_agent - TYPE_SERVERCHAN -> R.drawable.icon_serverchan - TYPE_TELEGRAM -> R.drawable.icon_telegram - TYPE_FEISHU -> R.drawable.icon_feishu - TYPE_PUSHPLUS -> R.drawable.icon_pushplus - TYPE_GOTIFY -> R.drawable.icon_gotify - TYPE_SMS -> R.drawable.icon_sms - TYPE_DINGTALK_INNER_ROBOT -> R.drawable.icon_dingtalk_inner - TYPE_FEISHU_APP -> R.drawable.icon_feishu_app - TYPE_URL_SCHEME -> R.drawable.icon_url_scheme - TYPE_SOCKET -> R.drawable.icon_socket - else -> R.drawable.icon_sms + TASK_CONDITION_CRON -> R.drawable.auto_task_icon_custom_time + TASK_CONDITION_BATTERY -> R.drawable.auto_task_icon_battery + TASK_CONDITION_CHARGE -> R.drawable.auto_task_icon_charge + TASK_CONDITION_NETWORK -> R.drawable.auto_task_icon_wlan + TASK_ACTION_SENDSMS -> R.drawable.auto_task_icon_sms + TASK_ACTION_NOTIFICATION -> R.drawable.auto_task_icon_sender + TASK_ACTION_FRPC -> R.drawable.auto_task_icon_frpc + TASK_ACTION_HTTPSERVER -> R.drawable.auto_task_icon_http_server + else -> R.drawable.auto_task_icon_custom_time } val statusImageId: Int diff --git a/app/src/main/java/com/idormy/sms/forwarder/database/viewmodel/TaskViewModel.kt b/app/src/main/java/com/idormy/sms/forwarder/database/viewmodel/TaskViewModel.kt index 3edd8bbc..dc1e115d 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/database/viewmodel/TaskViewModel.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/database/viewmodel/TaskViewModel.kt @@ -12,7 +12,7 @@ import com.idormy.sms.forwarder.database.ext.ioThread import kotlinx.coroutines.flow.Flow class TaskViewModel(private val dao: TaskDao) : ViewModel() { - private var type: String = "sms" + private var type: String = "mine" fun setType(type: String): TaskViewModel { this.type = type @@ -26,7 +26,9 @@ class TaskViewModel(private val dao: TaskDao) : ViewModel() { initialLoadSize = 10 ) ) { - dao.pagingSource(type) + //TODO:根据条件查询,咱不使用 + //dao.pagingSource(type) + if (type == "mine") dao.pagingSourceMine() else dao.pagingSourceFixed() }.flow.cachedIn(viewModelScope) fun insertOrUpdate(task: Task) = ioThread { diff --git a/app/src/main/java/com/idormy/sms/forwarder/entity/task/TaskSetting.kt b/app/src/main/java/com/idormy/sms/forwarder/entity/task/TaskSetting.kt index c26a66dc..a70eb9f1 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/entity/task/TaskSetting.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/entity/task/TaskSetting.kt @@ -1,10 +1,14 @@ package com.idormy.sms.forwarder.entity.task import com.idormy.sms.forwarder.R +import com.idormy.sms.forwarder.utils.TASK_ACTION_FRPC +import com.idormy.sms.forwarder.utils.TASK_ACTION_HTTPSERVER +import com.idormy.sms.forwarder.utils.TASK_ACTION_NOTIFICATION +import com.idormy.sms.forwarder.utils.TASK_ACTION_SENDSMS import com.idormy.sms.forwarder.utils.TASK_CONDITION_BATTERY import com.idormy.sms.forwarder.utils.TASK_CONDITION_CHARGE import com.idormy.sms.forwarder.utils.TASK_CONDITION_CRON -import com.idormy.sms.forwarder.utils.TASK_CONDITION_WLAN +import com.idormy.sms.forwarder.utils.TASK_CONDITION_NETWORK import java.io.Serializable data class TaskSetting( @@ -17,10 +21,14 @@ data class TaskSetting( val iconId: Int get() = when (type) { - TASK_CONDITION_CRON -> R.drawable.auto_task_icon_cron + TASK_CONDITION_CRON -> R.drawable.auto_task_icon_custom_time TASK_CONDITION_BATTERY -> R.drawable.auto_task_icon_battery TASK_CONDITION_CHARGE -> R.drawable.auto_task_icon_charge - TASK_CONDITION_WLAN -> R.drawable.auto_task_icon_wlan - else -> R.drawable.auto_task_icon_sim + TASK_CONDITION_NETWORK -> R.drawable.auto_task_icon_wlan + TASK_ACTION_SENDSMS -> R.drawable.auto_task_icon_sms + TASK_ACTION_NOTIFICATION -> R.drawable.auto_task_icon_sender + TASK_ACTION_FRPC -> R.drawable.auto_task_icon_frpc + TASK_ACTION_HTTPSERVER -> R.drawable.auto_task_icon_http_server + else -> R.drawable.auto_task_icon_sms } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/TasksEditFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/TasksEditFragment.kt index d9938333..c5a380e5 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/TasksEditFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/TasksEditFragment.kt @@ -99,23 +99,12 @@ class TasksEditFragment : BaseFragment(), View.OnClic * 初始化控件 */ override fun initViews() { - if (taskId <= 0) { //新增 - titleBar?.setSubTitle(getString(R.string.add_task)) - binding!!.btnDel.setText(R.string.discard) - } else { //编辑 & 克隆 - binding!!.btnDel.setText(R.string.del) - initForm() - } - recyclerConditions = findViewById(R.id.recycler_conditions) recyclerActions = findViewById(R.id.recycler_actions) // 初始化 RecyclerView 和 Adapter initRecyclerViews() - // 添加示例项目 - // addSampleItems() - // 设置拖动排序 val conditionsCallback = ItemMoveCallback(object : ItemMoveCallback.Listener { override fun onItemMove(fromPosition: Int, toPosition: Int) { @@ -150,6 +139,14 @@ class TasksEditFragment : BaseFragment(), View.OnClic val itemTouchHelperActions = ItemTouchHelper(actionsCallback) itemTouchHelperActions.attachToRecyclerView(recyclerActions) actionsAdapter.setTouchHelper(itemTouchHelperActions) + + if (taskId <= 0) { //新增 + titleBar?.setSubTitle(getString(R.string.add_task)) + binding!!.btnDel.setText(R.string.discard) + } else { //编辑 & 克隆 + binding!!.btnDel.setText(R.string.del) + initForm() + } } override fun initListeners() { @@ -238,6 +235,7 @@ class TasksEditFragment : BaseFragment(), View.OnClic e.printStackTrace() } + @SuppressLint("NotifyDataSetChanged") override fun onSuccess(task: Task) { Log.d(TAG, task.toString()) if (isClone) { @@ -248,13 +246,54 @@ class TasksEditFragment : BaseFragment(), View.OnClic } binding!!.etName.setText(task.name) binding!!.sbStatus.isChecked = task.status == STATUS_ON + try { + if (task.conditions.isNotEmpty()) { + val conditionList = Gson().fromJson(task.conditions, Array::class.java).toMutableList() + for (condition in conditionList) { + itemListConditions.add(condition) + } + Log.d(TAG, "initForm: $itemListConditions") + conditionsAdapter.notifyDataSetChanged() + } + if (task.actions.isNotEmpty()) { + val actionList = Gson().fromJson(task.actions, Array::class.java).toMutableList() + for (action in actionList) { + itemListActions.add(action) + } + Log.d(TAG, "initForm: $itemListActions") + actionsAdapter.notifyDataSetChanged() + } + } catch (e: Exception) { + e.printStackTrace() + XToastUtils.error(e.message.toString()) + } } }) } //提交前检查表单 private fun checkForm(): Task { - return Task() + val taskName = binding!!.etName.text.toString().trim() + if (taskName.isEmpty()) { + throw Exception("请输入任务名称") + } + if (itemListConditions.size <= 0) { + throw Exception("请添加触发条件") + } + if (itemListActions.size <= 0) { + throw Exception("请添加执行动作") + } + taskType = itemListConditions[0].type + + //拼接任务描述 + val description = StringBuilder() + description.append(getString(R.string.task_conditions)).append(" ") + description.append(itemListConditions.map { it.description }.toTypedArray().joinToString(",")) + description.append(" ").append(getString(R.string.task_actions)).append(" ") + description.append(itemListActions.map { it.description }.toTypedArray().joinToString(",")) + + val status = if (binding!!.sbStatus.isChecked) STATUS_ON else STATUS_OFF + return Task(taskId, taskType, taskName, description.toString(), Gson().toJson(itemListConditions), Gson().toJson(itemListActions), status) } private fun testTask(task: Task) { @@ -310,6 +349,7 @@ class TasksEditFragment : BaseFragment(), View.OnClic val widgetInfo = TASK_CONDITION_FRAGMENT_LIST[widgetInfoIndex] val taskSetting: TaskSetting when (resultCode) { + TASK_CONDITION_CRON -> { val settingVo = Gson().fromJson(setting, CronSetting::class.java) Log.d(TAG, settingVo.toString()) @@ -326,6 +366,22 @@ class TasksEditFragment : BaseFragment(), View.OnClic ) } + TASK_CONDITION_CHARGE -> { + val settingVo = Gson().fromJson(setting, CronSetting::class.java) + Log.d(TAG, settingVo.toString()) + taskSetting = TaskSetting( + resultCode, widgetInfo.name, settingVo.description, setting, requestCode + ) + } + + TASK_CONDITION_NETWORK -> { + val settingVo = Gson().fromJson(setting, CronSetting::class.java) + Log.d(TAG, settingVo.toString()) + taskSetting = TaskSetting( + resultCode, widgetInfo.name, settingVo.description, setting, requestCode + ) + } + else -> { return } @@ -338,28 +394,65 @@ class TasksEditFragment : BaseFragment(), View.OnClic itemListConditions[requestCode - 1] = taskSetting } conditionsAdapter.notifyDataSetChanged() - } else if (resultCode == KEY_BACK_CODE_ACTION) { + } else if (resultCode in KEY_BACK_CODE_ACTION..KEY_BACK_CODE_ACTION + 999) { setting = extras!!.getString(KEY_BACK_DATA_ACTION) + if (setting == null) return + //注意:TASK_ACTION_XXX 枚举值 等于 TASK_ACTION_FRAGMENT_LIST 索引加上 KEY_BACK_CODE_ACTION,不可改变 + val widgetInfoIndex = resultCode - KEY_BACK_CODE_ACTION + if (widgetInfoIndex >= TASK_ACTION_FRAGMENT_LIST.size) return + val widgetInfo = TASK_ACTION_FRAGMENT_LIST[widgetInfoIndex] + val taskSetting: TaskSetting + when (resultCode) { + + TASK_ACTION_SENDSMS -> { + val settingVo = Gson().fromJson(setting, CronSetting::class.java) + Log.d(TAG, settingVo.toString()) + taskSetting = TaskSetting( + resultCode, widgetInfo.name, settingVo.description, setting, requestCode + ) + } + + TASK_ACTION_NOTIFICATION -> { + val settingVo = Gson().fromJson(setting, CronSetting::class.java) + Log.d(TAG, settingVo.toString()) + taskSetting = TaskSetting( + resultCode, widgetInfo.name, settingVo.description, setting, requestCode + ) + } + + TASK_ACTION_FRPC -> { + val settingVo = Gson().fromJson(setting, CronSetting::class.java) + Log.d(TAG, settingVo.toString()) + taskSetting = TaskSetting( + resultCode, widgetInfo.name, settingVo.description, setting, requestCode + ) + } + + TASK_ACTION_HTTPSERVER -> { + val settingVo = Gson().fromJson(setting, CronSetting::class.java) + Log.d(TAG, settingVo.toString()) + taskSetting = TaskSetting( + resultCode, widgetInfo.name, settingVo.description, setting, requestCode + ) + } + + else -> { + return + } + } + //requestCode: 等于 itemListActions 的索引加1 + if (requestCode == 0) { + taskSetting.position = itemListActions.size + itemListActions.add(taskSetting) + } else { + itemListActions[requestCode - 1] = taskSetting + } + actionsAdapter.notifyDataSetChanged() } Log.d(TAG, "requestCode:$requestCode resultCode:$resultCode setting:$setting") } } - @SuppressLint("NotifyDataSetChanged") - private fun addSampleItems() { - // 添加示例项目到列表中 - itemListConditions.add(TaskSetting(TYPE_DINGTALK_GROUP_ROBOT, "DingTalk 1", "Description 1")) - itemListConditions.add(TaskSetting(TYPE_DINGTALK_GROUP_ROBOT, "DingTalk 2", "Description 2")) - itemListConditions.add(TaskSetting(TYPE_DINGTALK_GROUP_ROBOT, "DingTalk 3", "Description 3")) - itemListActions.add(TaskSetting(TYPE_EMAIL, "Email 1", "Description 1")) - itemListActions.add(TaskSetting(TYPE_EMAIL, "Email 2", "Description 2")) - itemListActions.add(TaskSetting(TYPE_EMAIL, "Email 3", "Description 3")) - - // 更新 Adapter - conditionsAdapter.notifyDataSetChanged() - actionsAdapter.notifyDataSetChanged() - } - private fun initRecyclerViews() { conditionsAdapter = TaskSettingAdapter(itemListConditions, { position -> editCondition(position) }, { position -> removeCondition(position) }) @@ -388,8 +481,7 @@ class TasksEditFragment : BaseFragment(), View.OnClic val widgetInfo = TASK_CONDITION_FRAGMENT_LIST[condition.type - KEY_BACK_CODE_CONDITION] @Suppress("UNCHECKED_CAST") PageOption.to(Class.forName(widgetInfo.classPath) as Class) //跳转的fragment .setRequestCode(position + 1) //requestCode: 0 新增 、>0 编辑(itemListConditions 的索引加1) - .putString(KEY_EVENT_DATA_CONDITION, condition.setting) - .open(this) + .putString(KEY_EVENT_DATA_CONDITION, condition.setting).open(this) } private fun removeCondition(position: Int) { @@ -409,8 +501,7 @@ class TasksEditFragment : BaseFragment(), View.OnClic val widgetInfo = TASK_ACTION_FRAGMENT_LIST[action.type - KEY_BACK_CODE_ACTION] @Suppress("UNCHECKED_CAST") PageOption.to(Class.forName(widgetInfo.classPath) as Class) //跳转的fragment .setRequestCode(position + 1) //requestCode: 0 新增 、>0 编辑(itemListActions 的索引加1) - .putString(KEY_EVENT_DATA_ACTION, action.setting) - .open(this) + .putString(KEY_EVENT_DATA_ACTION, action.setting).open(this) } private fun removeAction(position: Int) { diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/TasksFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/TasksFragment.kt index eec11185..5dde4eb1 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/TasksFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/TasksFragment.kt @@ -14,10 +14,9 @@ import com.idormy.sms.forwarder.database.entity.Task import com.idormy.sms.forwarder.database.viewmodel.BaseViewModelFactory import com.idormy.sms.forwarder.database.viewmodel.TaskViewModel import com.idormy.sms.forwarder.databinding.FragmentTasksBinding -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.EVENT_UPDATE_TASK_TYPE +import com.idormy.sms.forwarder.utils.KEY_TASK_CLONE +import com.idormy.sms.forwarder.utils.KEY_TASK_ID import com.idormy.sms.forwarder.utils.XToastUtils import com.jeremyliao.liveeventbus.LiveEventBus import com.scwang.smartrefresh.layout.api.RefreshLayout @@ -80,7 +79,7 @@ class TasksFragment : BaseFragment(), TaskPagingAdapter.O else -> "mine" } viewModel.setType(currentType) - LiveEventBus.get(EVENT_UPDATE_RULE_TYPE, String::class.java).post(currentType) + LiveEventBus.get(EVENT_UPDATE_TASK_TYPE, String::class.java).post(currentType) adapter.refresh() binding!!.recyclerView.scrollToPosition(0) } @@ -106,18 +105,25 @@ class TasksFragment : BaseFragment(), TaskPagingAdapter.O override fun onItemClicked(view: View?, item: Task) { when (view?.id) { R.id.iv_copy -> { - PageOption.to(TasksEditFragment::class.java).setNewActivity(true).putLong(KEY_RULE_ID, item.id).putString(KEY_RULE_TYPE, item.type.toString()).putBoolean(KEY_RULE_CLONE, true).open(this) + PageOption.to(TasksEditFragment::class.java) + .setNewActivity(true).putLong(KEY_TASK_ID, item.id) + //.putString(KEY_TASK_TYPE, item.type.toString()) + .putBoolean(KEY_TASK_CLONE, true) + .open(this) } R.id.iv_edit -> { - PageOption.to(TasksEditFragment::class.java).setNewActivity(true).putLong(KEY_RULE_ID, item.id).putString(KEY_RULE_TYPE, item.type.toString()).open(this) + PageOption.to(TasksEditFragment::class.java) + .setNewActivity(true).putLong(KEY_TASK_ID, item.id) + //.putString(KEY_TASK_TYPE, item.type.toString()) + .open(this) } R.id.iv_delete -> { MaterialDialog.Builder(requireContext()).title(R.string.delete_task_title).content(R.string.delete_task_tips).positiveText(R.string.lab_yes).negativeText(R.string.lab_no).onPositive { _: MaterialDialog?, _: DialogAction? -> - viewModel.delete(item.id) - XToastUtils.success(R.string.delete_task_toast) - }.show() + viewModel.delete(item.id) + XToastUtils.success(R.string.delete_task_toast) + }.show() } else -> {} diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/action/FrpcFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/action/FrpcFragment.kt new file mode 100644 index 00000000..0c63a125 --- /dev/null +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/action/FrpcFragment.kt @@ -0,0 +1,141 @@ +package com.idormy.sms.forwarder.fragment.action + +import android.annotation.SuppressLint +import android.content.Intent +import android.util.Log +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import com.google.gson.Gson +import com.idormy.sms.forwarder.R +import com.idormy.sms.forwarder.core.BaseFragment +import com.idormy.sms.forwarder.databinding.FragmentTasksCronBinding +import com.idormy.sms.forwarder.entity.task.CronSetting +import com.idormy.sms.forwarder.utils.KEY_BACK_DATA_ACTION +import com.idormy.sms.forwarder.utils.KEY_EVENT_DATA_ACTION +import com.idormy.sms.forwarder.utils.KEY_TEST_ACTION +import com.idormy.sms.forwarder.utils.TASK_ACTION_FRPC +import com.idormy.sms.forwarder.utils.XToastUtils +import com.jeremyliao.liveeventbus.LiveEventBus +import com.xuexiang.xaop.annotation.SingleClick +import com.xuexiang.xpage.annotation.Page +import com.xuexiang.xrouter.annotation.AutoWired +import com.xuexiang.xrouter.launcher.XRouter +import com.xuexiang.xui.utils.CountDownButtonHelper +import com.xuexiang.xui.widget.actionbar.TitleBar + +@Page(name = "Frpc") +@Suppress("PrivatePropertyName") +class FrpcFragment : BaseFragment(), View.OnClickListener { + + private val TAG: String = FrpcFragment::class.java.simpleName + var titleBar: TitleBar? = null + private var mCountDownHelper: CountDownButtonHelper? = null + + @JvmField + @AutoWired(name = KEY_EVENT_DATA_ACTION) + var eventData: String? = null + + private var expression = "* * * * * ? *" + private var description = "测试描述" + + override fun initArgs() { + XRouter.getInstance().inject(this) + } + + override fun viewBindingInflate( + inflater: LayoutInflater, + container: ViewGroup, + ): FragmentTasksCronBinding { + return FragmentTasksCronBinding.inflate(inflater, container, false) + } + + override fun initTitle(): TitleBar? { + titleBar = super.initTitle()!!.setImmersive(false).setTitle(R.string.task_cron) + return titleBar + } + + /** + * 初始化控件 + */ + override fun initViews() { + //测试按钮增加倒计时,避免重复点击 + mCountDownHelper = CountDownButtonHelper(binding!!.btnTest, 3) + mCountDownHelper!!.setOnCountDownListener(object : CountDownButtonHelper.OnCountDownListener { + override fun onCountDown(time: Int) { + binding!!.btnTest.text = String.format(getString(R.string.seconds_n), time) + } + + override fun onFinished() { + binding!!.btnTest.text = getString(R.string.test) + } + }) + + Log.d(TAG, "initViews eventData:$eventData") + if (eventData != null) { + val settingVo = Gson().fromJson(eventData, CronSetting::class.java) + Log.d(TAG, "initViews settingVo:$settingVo") + } + } + + @SuppressLint("SetTextI18n") + override fun initListeners() { + binding!!.btnTest.setOnClickListener(this) + binding!!.btnDel.setOnClickListener(this) + binding!!.btnSave.setOnClickListener(this) + LiveEventBus.get(KEY_TEST_ACTION, String::class.java).observe(this) { + mCountDownHelper?.finish() + + if (it == "success") { + XToastUtils.success("测试通过", 30000) + } else { + XToastUtils.error(it, 30000) + } + } + } + + @SingleClick + override fun onClick(v: View) { + try { + when (v.id) { + R.id.btn_test -> { + mCountDownHelper?.start() + Thread { + try { + val settingVo = checkSetting() + Log.d(TAG, settingVo.toString()) + LiveEventBus.get(KEY_TEST_ACTION, String::class.java).post("success") + } catch (e: Exception) { + LiveEventBus.get(KEY_TEST_ACTION, String::class.java).post(e.message.toString()) + e.printStackTrace() + } + }.start() + return + } + + R.id.btn_del -> { + popToBack() + return + } + + R.id.btn_save -> { + val settingVo = checkSetting() + val intent = Intent() + intent.putExtra(KEY_BACK_DATA_ACTION, Gson().toJson(settingVo)) + setFragmentResult(TASK_ACTION_FRPC, intent) + popToBack() + return + } + } + } catch (e: Exception) { + XToastUtils.error(e.message.toString(), 30000) + e.printStackTrace() + } + } + + //检查设置 + @SuppressLint("SetTextI18n") + private fun checkSetting(): CronSetting { + return CronSetting(expression, description) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/action/HttpServerFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/action/HttpServerFragment.kt new file mode 100644 index 00000000..58bb4570 --- /dev/null +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/action/HttpServerFragment.kt @@ -0,0 +1,141 @@ +package com.idormy.sms.forwarder.fragment.action + +import android.annotation.SuppressLint +import android.content.Intent +import android.util.Log +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import com.google.gson.Gson +import com.idormy.sms.forwarder.R +import com.idormy.sms.forwarder.core.BaseFragment +import com.idormy.sms.forwarder.databinding.FragmentTasksCronBinding +import com.idormy.sms.forwarder.entity.task.CronSetting +import com.idormy.sms.forwarder.utils.KEY_BACK_DATA_ACTION +import com.idormy.sms.forwarder.utils.KEY_EVENT_DATA_ACTION +import com.idormy.sms.forwarder.utils.KEY_TEST_ACTION +import com.idormy.sms.forwarder.utils.TASK_ACTION_HTTPSERVER +import com.idormy.sms.forwarder.utils.XToastUtils +import com.jeremyliao.liveeventbus.LiveEventBus +import com.xuexiang.xaop.annotation.SingleClick +import com.xuexiang.xpage.annotation.Page +import com.xuexiang.xrouter.annotation.AutoWired +import com.xuexiang.xrouter.launcher.XRouter +import com.xuexiang.xui.utils.CountDownButtonHelper +import com.xuexiang.xui.widget.actionbar.TitleBar + +@Page(name = "HttpServer") +@Suppress("PrivatePropertyName") +class HttpServerFragment : BaseFragment(), View.OnClickListener { + + private val TAG: String = HttpServerFragment::class.java.simpleName + var titleBar: TitleBar? = null + private var mCountDownHelper: CountDownButtonHelper? = null + + @JvmField + @AutoWired(name = KEY_EVENT_DATA_ACTION) + var eventData: String? = null + + private var expression = "* * * * * ? *" + private var description = "测试描述" + + override fun initArgs() { + XRouter.getInstance().inject(this) + } + + override fun viewBindingInflate( + inflater: LayoutInflater, + container: ViewGroup, + ): FragmentTasksCronBinding { + return FragmentTasksCronBinding.inflate(inflater, container, false) + } + + override fun initTitle(): TitleBar? { + titleBar = super.initTitle()!!.setImmersive(false).setTitle(R.string.task_cron) + return titleBar + } + + /** + * 初始化控件 + */ + override fun initViews() { + //测试按钮增加倒计时,避免重复点击 + mCountDownHelper = CountDownButtonHelper(binding!!.btnTest, 3) + mCountDownHelper!!.setOnCountDownListener(object : CountDownButtonHelper.OnCountDownListener { + override fun onCountDown(time: Int) { + binding!!.btnTest.text = String.format(getString(R.string.seconds_n), time) + } + + override fun onFinished() { + binding!!.btnTest.text = getString(R.string.test) + } + }) + + Log.d(TAG, "initViews eventData:$eventData") + if (eventData != null) { + val settingVo = Gson().fromJson(eventData, CronSetting::class.java) + Log.d(TAG, "initViews settingVo:$settingVo") + } + } + + @SuppressLint("SetTextI18n") + override fun initListeners() { + binding!!.btnTest.setOnClickListener(this) + binding!!.btnDel.setOnClickListener(this) + binding!!.btnSave.setOnClickListener(this) + LiveEventBus.get(KEY_TEST_ACTION, String::class.java).observe(this) { + mCountDownHelper?.finish() + + if (it == "success") { + XToastUtils.success("测试通过", 30000) + } else { + XToastUtils.error(it, 30000) + } + } + } + + @SingleClick + override fun onClick(v: View) { + try { + when (v.id) { + R.id.btn_test -> { + mCountDownHelper?.start() + Thread { + try { + val settingVo = checkSetting() + Log.d(TAG, settingVo.toString()) + LiveEventBus.get(KEY_TEST_ACTION, String::class.java).post("success") + } catch (e: Exception) { + LiveEventBus.get(KEY_TEST_ACTION, String::class.java).post(e.message.toString()) + e.printStackTrace() + } + }.start() + return + } + + R.id.btn_del -> { + popToBack() + return + } + + R.id.btn_save -> { + val settingVo = checkSetting() + val intent = Intent() + intent.putExtra(KEY_BACK_DATA_ACTION, Gson().toJson(settingVo)) + setFragmentResult(TASK_ACTION_HTTPSERVER, intent) + popToBack() + return + } + } + } catch (e: Exception) { + XToastUtils.error(e.message.toString(), 30000) + e.printStackTrace() + } + } + + //检查设置 + @SuppressLint("SetTextI18n") + private fun checkSetting(): CronSetting { + return CronSetting(expression, description) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/action/NotificationFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/action/NotificationFragment.kt new file mode 100644 index 00000000..9cc81864 --- /dev/null +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/action/NotificationFragment.kt @@ -0,0 +1,827 @@ +package com.idormy.sms.forwarder.fragment.action + +import android.annotation.SuppressLint +import android.os.Looper +import android.util.Log +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.* +import androidx.fragment.app.viewModels +import androidx.lifecycle.Observer +import androidx.work.OneTimeWorkRequestBuilder +import androidx.work.WorkManager +import com.idormy.sms.forwarder.App +import com.idormy.sms.forwarder.R +import com.idormy.sms.forwarder.adapter.spinner.AppListAdapterItem +import com.idormy.sms.forwarder.adapter.spinner.AppListSpinnerAdapter +import com.idormy.sms.forwarder.adapter.spinner.SenderAdapterItem +import com.idormy.sms.forwarder.adapter.spinner.SenderSpinnerAdapter +import com.idormy.sms.forwarder.core.BaseFragment +import com.idormy.sms.forwarder.database.AppDatabase +import com.idormy.sms.forwarder.database.entity.Rule +import com.idormy.sms.forwarder.database.entity.Sender +import com.idormy.sms.forwarder.database.viewmodel.BaseViewModelFactory +import com.idormy.sms.forwarder.database.viewmodel.RuleViewModel +import com.idormy.sms.forwarder.databinding.FragmentRulesEditBinding +import com.idormy.sms.forwarder.entity.MsgInfo +import com.idormy.sms.forwarder.utils.* +import com.idormy.sms.forwarder.workers.LoadAppListWorker +import com.jeremyliao.liveeventbus.LiveEventBus +import com.xuexiang.xaop.annotation.SingleClick +import com.xuexiang.xpage.annotation.Page +import com.xuexiang.xrouter.annotation.AutoWired +import com.xuexiang.xrouter.launcher.XRouter +import com.xuexiang.xrouter.utils.TextUtils +import com.xuexiang.xui.utils.ResUtils +import com.xuexiang.xui.widget.actionbar.TitleBar +import com.xuexiang.xui.widget.dialog.materialdialog.DialogAction +import com.xuexiang.xui.widget.dialog.materialdialog.MaterialDialog +import com.xuexiang.xui.widget.picker.widget.builder.OptionsPickerBuilder +import com.xuexiang.xui.widget.picker.widget.listener.OnOptionsSelectListener +import com.xuexiang.xui.widget.spinner.materialspinner.MaterialSpinner +import com.xuexiang.xutil.XUtil +import io.reactivex.SingleObserver +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.disposables.Disposable +import io.reactivex.schedulers.Schedulers +import kotlinx.coroutines.* +import java.util.* + +@Page(name = "Notification") +@Suppress("PrivatePropertyName", "DEPRECATION") +class NotificationFragment : BaseFragment(), View.OnClickListener, CompoundButton.OnCheckedChangeListener { + + private val TAG: String = NotificationFragment::class.java.simpleName + var titleBar: TitleBar? = null + private val viewModel by viewModels { BaseViewModelFactory(context) } + + var callType = 1 + var callTypeIndex = 0 + + //免打扰(禁用转发)时间段 + private val mTimeOption = DataProvider.timePeriodOption + private var silentPeriodStart = 0 + private var silentPeriodEnd = 0 + + //当前发送通道 + var senderId = 0L + var senderListSelected: MutableList = mutableListOf() + private var senderItemMap = HashMap(2) + + //发送通道列表 + var senderListAll: MutableList = mutableListOf() + private val senderSpinnerList = ArrayList() + private lateinit var senderSpinnerAdapter: SenderSpinnerAdapter<*> + + //已安装App信息列表 + private val appListSpinnerList = ArrayList() + private lateinit var appListSpinnerAdapter: AppListSpinnerAdapter<*> + private val appListObserver = Observer { it: String -> + Log.d(TAG, "EVENT_LOAD_APP_LIST: $it") + initAppSpinner() + } + + @JvmField + @AutoWired(name = KEY_RULE_ID) + var ruleId: Long = 0 + + @JvmField + @AutoWired(name = KEY_RULE_TYPE) + var ruleType: String = "sms" + + @JvmField + @AutoWired(name = KEY_RULE_CLONE) + var isClone: Boolean = false + + override fun initArgs() { + XRouter.getInstance().inject(this) + } + + override fun viewBindingInflate( + inflater: LayoutInflater, + container: ViewGroup, + ): FragmentRulesEditBinding { + return FragmentRulesEditBinding.inflate(inflater, container, false) + } + + override fun initTitle(): TitleBar? { + titleBar = super.initTitle()!!.setImmersive(false) + titleBar!!.setTitle(R.string.menu_rules) + return titleBar + } + + /** + * 初始化控件 + */ + override fun initViews() { + when (ruleType) { + "app" -> { + titleBar?.setTitle(R.string.app_rule) + binding!!.layoutSimSlot.visibility = View.GONE + binding!!.rbPhone.visibility = View.GONE + binding!!.rbCallType.visibility = View.GONE + binding!!.rbContent.visibility = View.GONE + binding!!.tvMuRuleTips.setText(R.string.mu_rule_app_tips) + binding!!.btInsertExtra.visibility = View.GONE + binding!!.btInsertSender.visibility = View.GONE + binding!!.btInsertContent.visibility = View.GONE + //初始化APP下拉列表 + initAppSpinner() + //监听已安装App信息列表加载完成事件 + LiveEventBus.get(EVENT_LOAD_APP_LIST, String::class.java).observeStickyForever(appListObserver) + } + + "call" -> { + titleBar?.setTitle(R.string.call_rule) + binding!!.rbContent.visibility = View.GONE + binding!!.rbPackageName.visibility = View.GONE + binding!!.rbUid.visibility = View.GONE + binding!!.rbInformContent.visibility = View.GONE + //binding!!.rbMultiMatch.visibility = View.GONE + binding!!.tvMuRuleTips.setText(R.string.mu_rule_call_tips) + binding!!.btInsertContent.visibility = View.GONE + binding!!.btInsertSenderApp.visibility = View.GONE + binding!!.btInsertUid.visibility = View.GONE + binding!!.btInsertTitleApp.visibility = View.GONE + binding!!.btInsertContentApp.visibility = View.GONE + + //通话类型:1.来电挂机 2.去电挂机 3.未接来电 4.来电提醒 5.来电接通 6.去电拨出 + binding!!.spCallType.setItems(CALL_TYPE_MAP.values.toList()) + binding!!.spCallType.setOnItemSelectedListener { _: MaterialSpinner?, _: Int, _: Long, item: Any -> + CALL_TYPE_MAP.forEach { + if (it.value == item) callType = it.key.toInt() + } + } + binding!!.spCallType.setOnNothingSelectedListener { + callType = 1 + callTypeIndex = 0 + binding!!.spCallType.selectedIndex = callTypeIndex + } + binding!!.spCallType.selectedIndex = callTypeIndex + } + + else -> { + titleBar?.setTitle(R.string.sms_rule) + binding!!.rbCallType.visibility = View.GONE + binding!!.rbPackageName.visibility = View.GONE + binding!!.rbUid.visibility = View.GONE + binding!!.rbInformContent.visibility = View.GONE + binding!!.btInsertSenderApp.visibility = View.GONE + binding!!.btInsertUid.visibility = View.GONE + binding!!.btInsertTitleApp.visibility = View.GONE + binding!!.btInsertContentApp.visibility = View.GONE + } + } + + if (ruleId <= 0) { //新增 + titleBar?.setSubTitle(getString(R.string.add_rule)) + binding!!.btnDel.setText(R.string.discard) + initSenderSpinner() + } else { //编辑 & 克隆 + binding!!.btnDel.setText(R.string.del) + initForm() + } + + } + + override fun initListeners() { + binding!!.btnSilentPeriod.setOnClickListener(this) + binding!!.btInsertSender.setOnClickListener(this) + binding!!.btInsertContent.setOnClickListener(this) + binding!!.btInsertSenderApp.setOnClickListener(this) + binding!!.btInsertUid.setOnClickListener(this) + binding!!.btInsertTitleApp.setOnClickListener(this) + binding!!.btInsertContentApp.setOnClickListener(this) + binding!!.btInsertExtra.setOnClickListener(this) + binding!!.btInsertTime.setOnClickListener(this) + binding!!.btInsertDeviceName.setOnClickListener(this) + binding!!.btnTest.setOnClickListener(this) + binding!!.btnDel.setOnClickListener(this) + binding!!.btnSave.setOnClickListener(this) + + binding!!.sbStatus.setOnCheckedChangeListener(this) + binding!!.sbSmsTemplate.setOnCheckedChangeListener(this) + binding!!.sbRegexReplace.setOnCheckedChangeListener(this) + + binding!!.rgFiled.setOnCheckedChangeListener { _: RadioGroup?, checkedId: Int -> + if (ruleType == "app" && appListSpinnerList.isNotEmpty()) { + binding!!.layoutAppList.visibility = if (checkedId == R.id.rb_inform_content) View.GONE else View.VISIBLE + } + when (checkedId) { + R.id.rb_transpond_all -> { + binding!!.rgCheck.check(R.id.rb_is) + binding!!.spCallType.visibility = View.GONE + binding!!.tvMuRuleTips.visibility = View.GONE + binding!!.layoutMatchType.visibility = View.GONE + binding!!.layoutMatchValue.visibility = View.GONE + } + + R.id.rb_multi_match -> { + binding!!.rgCheck.check(R.id.rb_is) + binding!!.spCallType.visibility = View.GONE + binding!!.tvMuRuleTips.visibility = View.VISIBLE + binding!!.layoutMatchType.visibility = View.GONE + binding!!.layoutMatchValue.visibility = View.VISIBLE + binding!!.etValue.visibility = View.VISIBLE + } + + R.id.rb_call_type -> { + binding!!.rgCheck.check(R.id.rb_is) + binding!!.tvMuRuleTips.visibility = View.GONE + binding!!.layoutMatchType.visibility = View.GONE + binding!!.layoutMatchValue.visibility = View.VISIBLE + binding!!.etValue.visibility = View.GONE + binding!!.spCallType.visibility = View.VISIBLE + } + + else -> { + binding!!.spCallType.visibility = View.GONE + binding!!.tvMuRuleTips.visibility = View.GONE + binding!!.layoutMatchType.visibility = View.VISIBLE + binding!!.layoutMatchValue.visibility = View.VISIBLE + binding!!.etValue.visibility = View.VISIBLE + } + } + } + + binding!!.rgCheck.setOnCheckedChangeListener { group: RadioGroup?, checkedId: Int -> + if (group != null && checkedId > 0) { + binding!!.rgCheck2.clearCheck() + group.check(checkedId) + } + } + + binding!!.rgCheck2.setOnCheckedChangeListener { group: RadioGroup?, checkedId: Int -> + if (group != null && checkedId > 0) { + binding!!.rgCheck.clearCheck() + group.check(checkedId) + } + } + } + + override fun onCheckedChanged(buttonView: CompoundButton?, isChecked: Boolean) { + when (buttonView?.id) { + R.id.sb_status -> { + binding!!.layoutSilentPeriod.visibility = if (isChecked) View.VISIBLE else View.GONE + } + + R.id.sb_sms_template -> { + if (isChecked) { + binding!!.layoutSmsTemplate.visibility = View.VISIBLE + } else { + binding!!.layoutSmsTemplate.visibility = View.GONE + binding!!.etSmsTemplate.setText("") + } + } + + R.id.sb_regex_replace -> { + if (isChecked) { + binding!!.layoutRegexReplace.visibility = View.VISIBLE + } else { + binding!!.layoutRegexReplace.visibility = View.GONE + binding!!.etRegexReplace.setText("") + } + } + + else -> {} + } + } + + @SingleClick + override fun onClick(v: View) { + try { + val etSmsTemplate: EditText = binding!!.etSmsTemplate + when (v.id) { + R.id.btn_silent_period -> { + OptionsPickerBuilder(context, OnOptionsSelectListener { _: View?, options1: Int, options2: Int, _: Int -> + silentPeriodStart = options1 + silentPeriodEnd = options2 + val txt = mTimeOption[options1] + " ~ " + mTimeOption[options2] + binding!!.tvSilentPeriod.text = txt + XToastUtils.toast(txt) + return@OnOptionsSelectListener false + }).setTitleText(getString(R.string.select_time_period)).setSelectOptions(silentPeriodStart, silentPeriodEnd).build().also { + it.setNPicker(mTimeOption, mTimeOption) + it.show() + } + } + + R.id.bt_insert_sender -> { + CommonUtils.insertOrReplaceText2Cursor(etSmsTemplate, getString(R.string.tag_from)) + return + } + + R.id.bt_insert_content -> { + CommonUtils.insertOrReplaceText2Cursor(etSmsTemplate, getString(R.string.tag_sms)) + return + } + + R.id.bt_insert_sender_app -> { + CommonUtils.insertOrReplaceText2Cursor(etSmsTemplate, getString(R.string.tag_package_name)) + return + } + + R.id.bt_insert_uid -> { + CommonUtils.insertOrReplaceText2Cursor(etSmsTemplate, getString(R.string.tag_uid)) + return + } + + R.id.bt_insert_title_app -> { + CommonUtils.insertOrReplaceText2Cursor(etSmsTemplate, getString(R.string.tag_title)) + return + } + + R.id.bt_insert_content_app -> { + CommonUtils.insertOrReplaceText2Cursor(etSmsTemplate, getString(R.string.tag_msg)) + return + } + + R.id.bt_insert_extra -> { + CommonUtils.insertOrReplaceText2Cursor(etSmsTemplate, getString(R.string.tag_card_slot)) + return + } + + R.id.bt_insert_time -> { + CommonUtils.insertOrReplaceText2Cursor(etSmsTemplate, getString(R.string.tag_receive_time)) + return + } + + R.id.bt_insert_device_name -> { + CommonUtils.insertOrReplaceText2Cursor(etSmsTemplate, getString(R.string.tag_device_name)) + return + } + + R.id.btn_test -> { + val ruleNew = checkForm() + testRule(ruleNew) + return + } + + R.id.btn_del -> { + if (ruleId <= 0 || isClone) { + popToBack() + return + } + + MaterialDialog.Builder(requireContext()).title(R.string.delete_rule_title).content(R.string.delete_rule_tips).positiveText(R.string.lab_yes).negativeText(R.string.lab_no).onPositive { _: MaterialDialog?, _: DialogAction? -> + viewModel.delete(ruleId) + XToastUtils.success(R.string.delete_rule_toast) + popToBack() + }.show() + return + } + + R.id.btn_save -> { + val ruleNew = checkForm() + if (isClone) ruleNew.id = 0 + Log.d(TAG, ruleNew.toString()) + viewModel.insertOrUpdate(ruleNew) + XToastUtils.success(R.string.tipSaveSuccess) + popToBack() + return + } + } + } catch (e: Exception) { + XToastUtils.error(e.message.toString()) + e.printStackTrace() + } + } + + //初始化发送通道下拉框 + @SuppressLint("SetTextI18n") + private fun initSenderSpinner() { + //免打扰(禁用转发)时间段 + binding!!.tvSilentPeriod.text = mTimeOption[silentPeriodStart] + " ~ " + mTimeOption[silentPeriodEnd] + + AppDatabase.getInstance(requireContext()).senderDao().getAll().subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(object : SingleObserver> { + override fun onSubscribe(d: Disposable) {} + + override fun onError(e: Throwable) { + e.printStackTrace() + } + + override fun onSuccess(senderList: List) { + if (senderList.isEmpty()) { + XToastUtils.error(R.string.add_sender_first) + return + } + + senderListAll = senderList as MutableList + for (sender in senderList) { + val name = if (sender.name.length > 20) sender.name.substring(0, 19) else sender.name + senderSpinnerList.add(SenderAdapterItem(name, sender.imageId, sender.id, sender.status)) + } + senderSpinnerAdapter = SenderSpinnerAdapter(senderSpinnerList) + //.setTextColor(ResUtils.getColor(R.color.green)) + //.setTextSize(12F) + .setIsFilterKey(true).setFilterColor("#EF5362").setBackgroundSelector(R.drawable.selector_custom_spinner_bg) + binding!!.spSender.setAdapter(senderSpinnerAdapter) + + if (senderListSelected.isNotEmpty()) { + for (sender in senderListSelected) { + for (senderItem in senderSpinnerList) { + if (sender.id == senderItem.id) { + addSenderItemLinearLayout(senderItemMap, binding!!.layoutSenders, senderItem) + } + } + } + } + } + }) + binding!!.spSender.setOnItemClickListener { _: AdapterView<*>, _: View, position: Int, _: Long -> + try { + val sender = senderSpinnerAdapter.getItemSource(position) as SenderAdapterItem + senderId = sender.id!! + if (senderId > 0L) { + senderListSelected.forEach { + if (senderId == it.id) { + XToastUtils.warning(getString(R.string.sender_contains_tips)) + return@setOnItemClickListener + } + } + senderListAll.forEach { + if (senderId == it.id) { + senderListSelected.add(it) + addSenderItemLinearLayout(senderItemMap, binding!!.layoutSenders, sender) + } + } + + if (STATUS_OFF == sender.status) { + XToastUtils.warning(getString(R.string.sender_disabled_tips)) + } + } + } catch (e: Exception) { + XToastUtils.error(e.message.toString()) + } + } + } + + /** + * 动态增删Sender + * + * @param senderItemMap 管理item的map,用于删除指定header + * @param layoutSenders 需要挂载item的LinearLayout + * @param sender SenderAdapterItem + */ + @SuppressLint("SetTextI18n") + private fun addSenderItemLinearLayout( + senderItemMap: MutableMap, layoutSenders: LinearLayout, sender: SenderAdapterItem + ) { + val layoutSenderItem = View.inflate(requireContext(), R.layout.item_add_sender, null) as LinearLayout + val ivRemoveSender = layoutSenderItem.findViewById(R.id.iv_remove_sender) + val ivSenderImage = layoutSenderItem.findViewById(R.id.iv_sender_image) + val ivSenderStatus = layoutSenderItem.findViewById(R.id.iv_sender_status) + val tvSenderName = layoutSenderItem.findViewById(R.id.tv_sender_name) + + ivSenderImage.setImageDrawable(sender.icon) + ivSenderStatus.setImageDrawable(ResUtils.getDrawable(if (STATUS_OFF == sender.status) R.drawable.icon_off else R.drawable.icon_on)) + val senderItemId = sender.id as Long + tvSenderName.text = "ID-$senderItemId:${sender.title}" + + ivRemoveSender.tag = senderItemId + ivRemoveSender.setOnClickListener { view2: View -> + val tagId = view2.tag as Long + layoutSenders.removeView(senderItemMap[tagId]) + senderItemMap.remove(tagId) + //senderListSelected.removeIf { it.id == tagId } + for (it in senderListSelected) { + if (it.id == tagId) { + senderListSelected -= it + break + } + } + Log.d(TAG, senderListSelected.count().toString()) + Log.d(TAG, senderListSelected.toString()) + if (senderListSelected.isEmpty()) senderId = 0L + if (senderListSelected.count() > 1) { + binding!!.layoutSenderLogic.visibility = View.VISIBLE + } else { + binding!!.layoutSenderLogic.visibility = View.GONE + binding!!.rgSenderLogic.check(R.id.rb_sender_logic_all) + } + } + layoutSenders.addView(layoutSenderItem) + senderItemMap[senderItemId] = layoutSenderItem + if (senderListSelected.count() > 1) { + binding!!.layoutSenderLogic.visibility = View.VISIBLE + } else { + binding!!.layoutSenderLogic.visibility = View.GONE + binding!!.rgSenderLogic.check(R.id.rb_sender_logic_all) + } + } + + //初始化APP下拉列表 + private fun initAppSpinner() { + if (ruleType != "app") return + + //未开启异步获取已安装App信息开关时,规则编辑不显示已安装APP下拉框 + if (!SettingUtils.enableLoadUserAppList && !SettingUtils.enableLoadSystemAppList) return + + if (App.UserAppList.isEmpty() && App.SystemAppList.isEmpty()) { + XToastUtils.info(getString(R.string.loading_app_list)) + val request = OneTimeWorkRequestBuilder().build() + WorkManager.getInstance(XUtil.getContext()).enqueue(request) + return + } + + appListSpinnerList.clear() + if (SettingUtils.enableLoadUserAppList) { + for (appInfo in App.UserAppList) { + if (TextUtils.isEmpty(appInfo.packageName)) continue + appListSpinnerList.add(AppListAdapterItem(appInfo.name, appInfo.icon, appInfo.packageName)) + } + } + if (SettingUtils.enableLoadSystemAppList) { + for (appInfo in App.SystemAppList) { + if (TextUtils.isEmpty(appInfo.packageName)) continue + appListSpinnerList.add(AppListAdapterItem(appInfo.name, appInfo.icon, appInfo.packageName)) + } + } + + //列表为空也不显示下拉框 + if (appListSpinnerList.isEmpty()) return + + appListSpinnerAdapter = AppListSpinnerAdapter(appListSpinnerList).setIsFilterKey(true).setFilterColor("#EF5362").setBackgroundSelector(R.drawable.selector_custom_spinner_bg) + binding!!.spApp.setAdapter(appListSpinnerAdapter) + binding!!.spApp.setOnItemClickListener { _: AdapterView<*>, _: View, position: Int, _: Long -> + try { + val appInfo = appListSpinnerAdapter.getItemSource(position) as AppListAdapterItem + CommonUtils.insertOrReplaceText2Cursor(binding!!.etValue, appInfo.packageName.toString()) + } catch (e: Exception) { + XToastUtils.error(e.message.toString()) + } + } + binding!!.layoutAppList.visibility = View.VISIBLE + + } + + //初始化表单 + private fun initForm() { + AppDatabase.getInstance(requireContext()).ruleDao().get(ruleId).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(object : SingleObserver { + override fun onSubscribe(d: Disposable) {} + + override fun onError(e: Throwable) { + e.printStackTrace() + } + + override fun onSuccess(rule: Rule) { + Log.d(TAG, rule.senderList.toString()) + rule.senderList.forEach { + senderId = it.id + senderListSelected.add(it) + } + + if (isClone) { + titleBar?.setSubTitle(getString(R.string.clone_rule)) + binding!!.btnDel.setText(R.string.discard) + } else { + titleBar?.setSubTitle(getString(R.string.edit_rule)) + } + Log.d(TAG, rule.toString()) + + binding!!.rgSenderLogic.check(rule.getSenderLogicCheckId()) + binding!!.rgSimSlot.check(rule.getSimSlotCheckId()) + binding!!.rgFiled.check(rule.getFiledCheckId()) + val checkId = rule.getCheckCheckId() + if (checkId == R.id.rb_is || checkId == R.id.rb_contain || checkId == R.id.rb_not_contain) { + binding!!.rgCheck.check(checkId) + } else { + binding!!.rgCheck2.check(checkId) + } + binding!!.etValue.setText(rule.value) + if (ruleType == "call" && rule.filed == FILED_CALL_TYPE) { + callType = rule.value.toInt() + callTypeIndex = callType - 1 + binding!!.spCallType.selectedIndex = callTypeIndex + } + binding!!.sbSmsTemplate.isChecked = !TextUtils.isEmpty(rule.smsTemplate.trim()) + binding!!.etSmsTemplate.setText(rule.smsTemplate.trim()) + binding!!.sbRegexReplace.isChecked = !TextUtils.isEmpty(rule.regexReplace.trim()) + binding!!.etRegexReplace.setText(rule.regexReplace.trim()) + binding!!.sbStatus.isChecked = rule.statusChecked + silentPeriodStart = rule.silentPeriodStart + silentPeriodEnd = rule.silentPeriodEnd + //初始化发送通道下拉框 + initSenderSpinner() + } + }) + } + + //提交前检查表单 + private fun checkForm(): Rule { + if (senderListSelected.isEmpty() || senderId == 0L) { + throw Exception(getString(R.string.new_sender_first)) + } + val filed = when (binding!!.rgFiled.checkedRadioButtonId) { + R.id.rb_content -> FILED_MSG_CONTENT + R.id.rb_phone -> FILED_PHONE_NUM + R.id.rb_call_type -> FILED_CALL_TYPE + R.id.rb_package_name -> FILED_PACKAGE_NAME + R.id.rb_uid -> FILED_UID + R.id.rb_inform_content -> FILED_INFORM_CONTENT + R.id.rb_multi_match -> FILED_MULTI_MATCH + else -> FILED_TRANSPOND_ALL + } + val check = when (kotlin.math.max(binding!!.rgCheck.checkedRadioButtonId, binding!!.rgCheck2.checkedRadioButtonId)) { + R.id.rb_contain -> CHECK_CONTAIN + R.id.rb_not_contain -> CHECK_NOT_CONTAIN + R.id.rb_start_with -> CHECK_START_WITH + R.id.rb_end_with -> CHECK_END_WITH + R.id.rb_regex -> CHECK_REGEX + else -> CHECK_IS + } + var value = binding!!.etValue.text.toString().trim() + if (FILED_CALL_TYPE == filed) { + value = callType.toString() + if (callType !in 1..6) { + throw Exception(getString(R.string.invalid_call_type)) + } + } else if (FILED_TRANSPOND_ALL != filed && TextUtils.isEmpty(value)) { + throw Exception(getString(R.string.invalid_match_value)) + } + if (FILED_MULTI_MATCH == filed) { + val lineError = checkMultiMatch(value) + if (lineError > 0) { + throw Exception(String.format(getString(R.string.invalid_multi_match), lineError)) + } + } + + val smsTemplate = binding!!.etSmsTemplate.text.toString().trim() + val regexReplace = binding!!.etRegexReplace.text.toString().trim() + val lineNum = checkRegexReplace(regexReplace) + if (lineNum > 0) { + throw Exception(String.format(getString(R.string.invalid_regex_replace), lineNum)) + } + + val senderLogic = when (binding!!.rgSenderLogic.checkedRadioButtonId) { + R.id.rb_sender_logic_until_fail -> SENDER_LOGIC_UNTIL_FAIL + R.id.rb_sender_logic_until_success -> SENDER_LOGIC_UNTIL_SUCCESS + else -> SENDER_LOGIC_ALL + } + + val simSlot = when (binding!!.rgSimSlot.checkedRadioButtonId) { + R.id.rb_sim_slot_1 -> CHECK_SIM_SLOT_1 + R.id.rb_sim_slot_2 -> CHECK_SIM_SLOT_2 + else -> CHECK_SIM_SLOT_ALL + } + val status = if (binding!!.sbStatus.isChecked) STATUS_ON else STATUS_OFF + //if (status == STATUS_OFF) { + // throw Exception(getString(R.string.invalid_rule_status)) + //} + return Rule( + ruleId, + ruleType, + filed, + check, + value, + senderId, + smsTemplate, + regexReplace, + simSlot, + status, + Date(), + senderListSelected, + senderLogic, + silentPeriodStart, + silentPeriodEnd + ) + } + + //检查多重匹配规则是否正确 + private fun checkMultiMatch(ruleStr: String?): Int { + if (TextUtils.isEmpty(ruleStr)) return 0 + + //Log.d(TAG, getString(R.string.regex_multi_match)) + val regex = Regex(pattern = getString(R.string.regex_multi_match)) + var lineNum = 1 + val lineArray = ruleStr?.split("\\n".toRegex())?.toTypedArray() + for (line in lineArray!!) { + Log.d(TAG, line) + if (!line.matches(regex)) return lineNum + lineNum++ + } + + return 0 + } + + //检查正则替换填写是否正确 + private fun checkRegexReplace(regexReplace: String?): Int { + if (TextUtils.isEmpty(regexReplace)) return 0 + + var lineNum = 1 + val lineArray = regexReplace?.split("\\n".toRegex())?.toTypedArray() + for (line in lineArray!!) { + val position = line.indexOf("===") + if (position < 1) return lineNum + lineNum++ + } + return 0 + } + + private fun testRule(rule: Rule) { + val dialogTest = View.inflate(requireContext(), R.layout.dialog_rule_test, null) + val tvSimSlot = dialogTest.findViewById(R.id.tv_sim_slot) + val rgSimSlot = dialogTest.findViewById(R.id.rg_sim_slot) + val tvFrom = dialogTest.findViewById(R.id.tv_from) + val etFrom = dialogTest.findViewById(R.id.et_from) + val tvTitle = dialogTest.findViewById(R.id.tv_title) + val etTitle = dialogTest.findViewById(R.id.et_title) + val tvContent = dialogTest.findViewById(R.id.tv_content) + val etContent = dialogTest.findViewById(R.id.et_content) + //通话类型 + val tvCallType = dialogTest.findViewById(R.id.tv_call_type) + val spCallType = dialogTest.findViewById(R.id.sp_call_type) + var callTypeTest = callType + var callTypeIndexTest = callTypeIndex + + if ("app" == ruleType) { + tvSimSlot.visibility = View.GONE + rgSimSlot.visibility = View.GONE + tvTitle.visibility = View.VISIBLE + etTitle.visibility = View.VISIBLE + tvFrom.setText(R.string.test_package_name) + tvContent.setText(R.string.test_inform_content) + tvCallType.visibility = View.GONE + spCallType.visibility = View.GONE + } else if ("call" == ruleType) { + tvContent.visibility = View.GONE + etContent.visibility = View.GONE + tvCallType.visibility = View.VISIBLE + spCallType.visibility = View.VISIBLE + spCallType.setItems(CALL_TYPE_MAP.values.toList()) + spCallType.setOnItemSelectedListener { _: MaterialSpinner?, _: Int, _: Long, item: Any -> + CALL_TYPE_MAP.forEach { + if (it.value == item) callTypeTest = it.key.toInt() + } + } + spCallType.setOnNothingSelectedListener { + callTypeTest = callType + callTypeIndexTest = callTypeIndex + spCallType.selectedIndex = callTypeIndexTest + } + spCallType.selectedIndex = callTypeIndexTest + } + + MaterialDialog.Builder(requireContext()).iconRes(android.R.drawable.ic_dialog_email).title(R.string.rule_tester).customView(dialogTest, true).cancelable(false).autoDismiss(false).neutralText(R.string.action_back).neutralColor(ResUtils.getColors(R.color.darkGrey)).onNeutral { dialog: MaterialDialog?, _: DialogAction? -> + dialog?.dismiss() + }.positiveText(R.string.action_test).onPositive { _: MaterialDialog?, _: DialogAction? -> + try { + val simSlot = when (if (ruleType == "app") -1 else rgSimSlot.checkedRadioButtonId) { + R.id.rb_sim_slot_1 -> 0 + R.id.rb_sim_slot_2 -> 1 + else -> -1 + } + + val testSim = "SIM" + (simSlot + 1) + val ruleSim: String = rule.simSlot + if (ruleSim != "ALL" && ruleSim != testSim) { + throw Exception(getString(R.string.card_slot_does_not_match)) + } + + //获取卡槽信息 + val simInfo = when (simSlot) { + 0 -> "SIM1_" + SettingUtils.extraSim1 + 1 -> "SIM2_" + SettingUtils.extraSim2 + else -> etTitle.text.toString() + } + val subId = when (simSlot) { + 0 -> SettingUtils.subidSim1 + 1 -> SettingUtils.subidSim2 + else -> 0 + } + + val msg = StringBuilder() + if (ruleType == "call") { + val phoneNumber = etFrom.text.toString() + val contacts = PhoneUtils.getContactByNumber(phoneNumber) + val contactName = if (contacts.isNotEmpty()) contacts[0].name else ResUtils.getString(R.string.unknown_number) + msg.append(ResUtils.getString(R.string.contact)).append(contactName).append("\n") + msg.append(ResUtils.getString(R.string.mandatory_type)) + msg.append(CALL_TYPE_MAP[callType.toString()] ?: ResUtils.getString(R.string.unknown_call)) + } else { + msg.append(etContent.text.toString()) + } + + val msgInfo = MsgInfo(ruleType, etFrom.text.toString(), msg.toString(), Date(), simInfo, simSlot, subId, callTypeTest) + if (!rule.checkMsg(msgInfo)) { + throw Exception(getString(R.string.unmatched_rule)) + } + + Thread { + try { + SendUtils.sendMsgSender(msgInfo, rule) + } catch (e: Exception) { + e.printStackTrace() + if (Looper.myLooper() == null) Looper.prepare() + XToastUtils.error(e.message.toString()) + Looper.loop() + } + }.start() + + } catch (e: Exception) { + XToastUtils.error(e.message.toString()) + } + }.show() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/action/SendSmsFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/action/SendSmsFragment.kt new file mode 100644 index 00000000..d8295c84 --- /dev/null +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/action/SendSmsFragment.kt @@ -0,0 +1,141 @@ +package com.idormy.sms.forwarder.fragment.action + +import android.annotation.SuppressLint +import android.content.Intent +import android.util.Log +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import com.google.gson.Gson +import com.idormy.sms.forwarder.R +import com.idormy.sms.forwarder.core.BaseFragment +import com.idormy.sms.forwarder.databinding.FragmentTasksCronBinding +import com.idormy.sms.forwarder.entity.task.CronSetting +import com.idormy.sms.forwarder.utils.KEY_BACK_DATA_ACTION +import com.idormy.sms.forwarder.utils.KEY_EVENT_DATA_ACTION +import com.idormy.sms.forwarder.utils.KEY_TEST_ACTION +import com.idormy.sms.forwarder.utils.TASK_ACTION_SENDSMS +import com.idormy.sms.forwarder.utils.XToastUtils +import com.jeremyliao.liveeventbus.LiveEventBus +import com.xuexiang.xaop.annotation.SingleClick +import com.xuexiang.xpage.annotation.Page +import com.xuexiang.xrouter.annotation.AutoWired +import com.xuexiang.xrouter.launcher.XRouter +import com.xuexiang.xui.utils.CountDownButtonHelper +import com.xuexiang.xui.widget.actionbar.TitleBar + +@Page(name = "SendSms") +@Suppress("PrivatePropertyName") +class SendSmsFragment : BaseFragment(), View.OnClickListener { + + private val TAG: String = SendSmsFragment::class.java.simpleName + var titleBar: TitleBar? = null + private var mCountDownHelper: CountDownButtonHelper? = null + + @JvmField + @AutoWired(name = KEY_EVENT_DATA_ACTION) + var eventData: String? = null + + private var expression = "* * * * * ? *" + private var description = "测试描述" + + override fun initArgs() { + XRouter.getInstance().inject(this) + } + + override fun viewBindingInflate( + inflater: LayoutInflater, + container: ViewGroup, + ): FragmentTasksCronBinding { + return FragmentTasksCronBinding.inflate(inflater, container, false) + } + + override fun initTitle(): TitleBar? { + titleBar = super.initTitle()!!.setImmersive(false).setTitle(R.string.task_cron) + return titleBar + } + + /** + * 初始化控件 + */ + override fun initViews() { + //测试按钮增加倒计时,避免重复点击 + mCountDownHelper = CountDownButtonHelper(binding!!.btnTest, 3) + mCountDownHelper!!.setOnCountDownListener(object : CountDownButtonHelper.OnCountDownListener { + override fun onCountDown(time: Int) { + binding!!.btnTest.text = String.format(getString(R.string.seconds_n), time) + } + + override fun onFinished() { + binding!!.btnTest.text = getString(R.string.test) + } + }) + + Log.d(TAG, "initViews eventData:$eventData") + if (eventData != null) { + val settingVo = Gson().fromJson(eventData, CronSetting::class.java) + Log.d(TAG, "initViews settingVo:$settingVo") + } + } + + @SuppressLint("SetTextI18n") + override fun initListeners() { + binding!!.btnTest.setOnClickListener(this) + binding!!.btnDel.setOnClickListener(this) + binding!!.btnSave.setOnClickListener(this) + LiveEventBus.get(KEY_TEST_ACTION, String::class.java).observe(this) { + mCountDownHelper?.finish() + + if (it == "success") { + XToastUtils.success("测试通过", 30000) + } else { + XToastUtils.error(it, 30000) + } + } + } + + @SingleClick + override fun onClick(v: View) { + try { + when (v.id) { + R.id.btn_test -> { + mCountDownHelper?.start() + Thread { + try { + val settingVo = checkSetting() + Log.d(TAG, settingVo.toString()) + LiveEventBus.get(KEY_TEST_ACTION, String::class.java).post("success") + } catch (e: Exception) { + LiveEventBus.get(KEY_TEST_ACTION, String::class.java).post(e.message.toString()) + e.printStackTrace() + } + }.start() + return + } + + R.id.btn_del -> { + popToBack() + return + } + + R.id.btn_save -> { + val settingVo = checkSetting() + val intent = Intent() + intent.putExtra(KEY_BACK_DATA_ACTION, Gson().toJson(settingVo)) + setFragmentResult(TASK_ACTION_SENDSMS, intent) + popToBack() + return + } + } + } catch (e: Exception) { + XToastUtils.error(e.message.toString(), 30000) + e.printStackTrace() + } + } + + //检查设置 + @SuppressLint("SetTextI18n") + private fun checkSetting(): CronSetting { + return CronSetting(expression, description) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/client/CallQueryFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/client/CallQueryFragment.kt index c68a9ec5..604757cf 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/client/CallQueryFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/client/CallQueryFragment.kt @@ -18,7 +18,17 @@ import com.idormy.sms.forwarder.databinding.FragmentClientCallQueryBinding import com.idormy.sms.forwarder.entity.CallInfo import com.idormy.sms.forwarder.server.model.BaseResponse import com.idormy.sms.forwarder.server.model.CallQueryData -import com.idormy.sms.forwarder.utils.* +import com.idormy.sms.forwarder.utils.Base64 +import com.idormy.sms.forwarder.utils.DataProvider +import com.idormy.sms.forwarder.utils.EVENT_KEY_PHONE_NUMBERS +import com.idormy.sms.forwarder.utils.EVENT_KEY_SIM_SLOT +import com.idormy.sms.forwarder.utils.HttpServerUtils +import com.idormy.sms.forwarder.utils.PhoneUtils +import com.idormy.sms.forwarder.utils.PlaceholderHelper +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.jeremyliao.liveeventbus.LiveEventBus import com.scwang.smartrefresh.layout.api.RefreshLayout import com.xuexiang.xaop.annotation.SingleClick @@ -40,7 +50,7 @@ import com.xuexiang.xutil.data.DateUtils import com.xuexiang.xutil.system.ClipboardUtils import me.samlss.broccoli.Broccoli -@Suppress("PropertyName") +@Suppress("PropertyName", "DEPRECATION") @Page(name = "远程查通话") class CallQueryFragment : BaseFragment() { @@ -96,9 +106,7 @@ class CallQueryFragment : BaseFragment() { holder.image(R.id.iv_image, model.typeImageId) holder.image(R.id.iv_sim_image, model.simImageId) holder.text(R.id.tv_duration, ResUtils.getString(R.string.call_duration) + model.duration + ResUtils.getString(R.string.seconds)) - holder.image(R.id.iv_copy, R.drawable.ic_copy) - holder.image(R.id.iv_call, R.drawable.ic_phone_out) - holder.image(R.id.iv_reply, R.drawable.ic_reply) + holder.click(R.id.iv_copy) { XToastUtils.info(String.format(getString(R.string.copied_to_clipboard), from)) ClipboardUtils.copyText(from) @@ -231,6 +239,7 @@ class CallQueryFragment : BaseFragment() { } postRequest.upString(requestMsg) } + 3 -> { try { val sm4Key = ConvertTools.hexStringToByteArray(HttpServerUtils.clientSignKey) @@ -245,6 +254,7 @@ class CallQueryFragment : BaseFragment() { } postRequest.upString(requestMsg) } + else -> { postRequest.upJson(requestMsg) } diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/client/ContactQueryFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/client/ContactQueryFragment.kt index 13400972..fce48a5a 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/client/ContactQueryFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/client/ContactQueryFragment.kt @@ -19,7 +19,16 @@ import com.idormy.sms.forwarder.databinding.FragmentClientContactQueryBinding import com.idormy.sms.forwarder.entity.ContactInfo import com.idormy.sms.forwarder.server.model.BaseResponse import com.idormy.sms.forwarder.server.model.ContactQueryData -import com.idormy.sms.forwarder.utils.* +import com.idormy.sms.forwarder.utils.Base64 +import com.idormy.sms.forwarder.utils.DataProvider +import com.idormy.sms.forwarder.utils.EVENT_KEY_PHONE_NUMBERS +import com.idormy.sms.forwarder.utils.HttpServerUtils +import com.idormy.sms.forwarder.utils.PhoneUtils +import com.idormy.sms.forwarder.utils.PlaceholderHelper +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.jeremyliao.liveeventbus.LiveEventBus import com.scwang.smartrefresh.layout.api.RefreshLayout import com.xuexiang.xaop.annotation.SingleClick @@ -40,7 +49,7 @@ import com.xuexiang.xutil.data.ConvertTools import com.xuexiang.xutil.system.ClipboardUtils import me.samlss.broccoli.Broccoli -@Suppress("PropertyName") +@Suppress("PropertyName", "DEPRECATION") @Page(name = "远程查话簿") class ContactQueryFragment : BaseFragment() { @@ -90,9 +99,7 @@ class ContactQueryFragment : BaseFragment() holder.text(R.id.sb_letter, model.firstLetter) holder.text(R.id.tv_name, model.name) holder.text(R.id.tv_phone_number, model.phoneNumber) - holder.image(R.id.iv_copy, R.drawable.ic_copy) - holder.image(R.id.iv_call, R.drawable.ic_phone_out) - holder.image(R.id.iv_reply, R.drawable.ic_reply) + holder.click(R.id.iv_copy) { val str = model.toString() XToastUtils.info(String.format(getString(R.string.copied_to_clipboard), str)) @@ -104,9 +111,6 @@ class ContactQueryFragment : BaseFragment() } holder.click(R.id.iv_reply) { XToastUtils.info(getString(R.string.remote_sms) + model.phoneNumber) - /*val params = Bundle() - params.putString(KEY_PHONE_NUMBERS, model.phoneNumber) - openPage(SmsSendFragment::class.java, params)*/ LiveEventBus.get(EVENT_KEY_PHONE_NUMBERS).post(model.phoneNumber) PageOption.to(SmsSendFragment::class.java).setNewActivity(true).open((context as XPageActivity?)!!) } @@ -213,6 +217,7 @@ class ContactQueryFragment : BaseFragment() } postRequest.upString(requestMsg) } + 3 -> { try { val sm4Key = ConvertTools.hexStringToByteArray(HttpServerUtils.clientSignKey) @@ -227,6 +232,7 @@ class ContactQueryFragment : BaseFragment() } postRequest.upString(requestMsg) } + else -> { postRequest.upJson(requestMsg) } diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/client/SmsQueryFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/client/SmsQueryFragment.kt index c8ad2173..5aa0545e 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/client/SmsQueryFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/client/SmsQueryFragment.kt @@ -18,8 +18,16 @@ import com.idormy.sms.forwarder.databinding.FragmentClientSmsQueryBinding import com.idormy.sms.forwarder.entity.SmsInfo import com.idormy.sms.forwarder.server.model.BaseResponse import com.idormy.sms.forwarder.server.model.SmsQueryData -import com.idormy.sms.forwarder.utils.* +import com.idormy.sms.forwarder.utils.Base64 import com.idormy.sms.forwarder.utils.DataProvider.emptySmsInfo +import com.idormy.sms.forwarder.utils.EVENT_KEY_PHONE_NUMBERS +import com.idormy.sms.forwarder.utils.EVENT_KEY_SIM_SLOT +import com.idormy.sms.forwarder.utils.HttpServerUtils +import com.idormy.sms.forwarder.utils.PlaceholderHelper +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.jeremyliao.liveeventbus.LiveEventBus import com.scwang.smartrefresh.layout.api.RefreshLayout import com.xuexiang.xaop.annotation.SingleClick @@ -41,7 +49,7 @@ import com.xuexiang.xutil.data.ConvertTools import com.xuexiang.xutil.data.DateUtils import me.samlss.broccoli.Broccoli -@Suppress("PropertyName") +@Suppress("PropertyName", "DEPRECATION") @Page(name = "远程查短信") class SmsQueryFragment : BaseFragment() { @@ -96,7 +104,7 @@ class SmsQueryFragment : BaseFragment() { holder.image(R.id.iv_image, model.typeImageId) holder.image(R.id.iv_sim_image, model.simImageId) holder.text(R.id.tv_content, model.content) - holder.image(R.id.iv_reply, R.drawable.ic_reply) + //holder.image(R.id.iv_reply, R.drawable.ic_reply) holder.click(R.id.iv_reply) { XToastUtils.info(getString(R.string.remote_sms) + model.number) LiveEventBus.get(EVENT_KEY_SIM_SLOT).post(model.simId) @@ -220,6 +228,7 @@ class SmsQueryFragment : BaseFragment() { } postRequest.upString(requestMsg) } + 3 -> { try { val sm4Key = ConvertTools.hexStringToByteArray(HttpServerUtils.clientSignKey) @@ -234,6 +243,7 @@ class SmsQueryFragment : BaseFragment() { } postRequest.upString(requestMsg) } + else -> { postRequest.upJson(requestMsg) } diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/condition/BatteryFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/condition/BatteryFragment.kt new file mode 100644 index 00000000..67042c60 --- /dev/null +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/condition/BatteryFragment.kt @@ -0,0 +1,141 @@ +package com.idormy.sms.forwarder.fragment.condition + +import android.annotation.SuppressLint +import android.content.Intent +import android.util.Log +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import com.google.gson.Gson +import com.idormy.sms.forwarder.R +import com.idormy.sms.forwarder.core.BaseFragment +import com.idormy.sms.forwarder.databinding.FragmentTasksCronBinding +import com.idormy.sms.forwarder.entity.task.CronSetting +import com.idormy.sms.forwarder.utils.KEY_BACK_DATA_CONDITION +import com.idormy.sms.forwarder.utils.KEY_EVENT_DATA_CONDITION +import com.idormy.sms.forwarder.utils.KEY_TEST_CONDITION +import com.idormy.sms.forwarder.utils.TASK_CONDITION_BATTERY +import com.idormy.sms.forwarder.utils.XToastUtils +import com.jeremyliao.liveeventbus.LiveEventBus +import com.xuexiang.xaop.annotation.SingleClick +import com.xuexiang.xpage.annotation.Page +import com.xuexiang.xrouter.annotation.AutoWired +import com.xuexiang.xrouter.launcher.XRouter +import com.xuexiang.xui.utils.CountDownButtonHelper +import com.xuexiang.xui.widget.actionbar.TitleBar + +@Page(name = "Battery") +@Suppress("PrivatePropertyName") +class BatteryFragment : BaseFragment(), View.OnClickListener { + + private val TAG: String = BatteryFragment::class.java.simpleName + var titleBar: TitleBar? = null + private var mCountDownHelper: CountDownButtonHelper? = null + + @JvmField + @AutoWired(name = KEY_EVENT_DATA_CONDITION) + var eventData: String? = null + + private var expression = "* * * * * ? *" + private var description = "测试描述" + + override fun initArgs() { + XRouter.getInstance().inject(this) + } + + override fun viewBindingInflate( + inflater: LayoutInflater, + container: ViewGroup, + ): FragmentTasksCronBinding { + return FragmentTasksCronBinding.inflate(inflater, container, false) + } + + override fun initTitle(): TitleBar? { + titleBar = super.initTitle()!!.setImmersive(false).setTitle(R.string.task_battery) + return titleBar + } + + /** + * 初始化控件 + */ + override fun initViews() { + //测试按钮增加倒计时,避免重复点击 + mCountDownHelper = CountDownButtonHelper(binding!!.btnTest, 3) + mCountDownHelper!!.setOnCountDownListener(object : CountDownButtonHelper.OnCountDownListener { + override fun onCountDown(time: Int) { + binding!!.btnTest.text = String.format(getString(R.string.seconds_n), time) + } + + override fun onFinished() { + binding!!.btnTest.text = getString(R.string.test) + } + }) + + Log.d(TAG, "initViews eventData:$eventData") + if (eventData != null) { + val settingVo = Gson().fromJson(eventData, CronSetting::class.java) + Log.d(TAG, "initViews settingVo:$settingVo") + } + } + + @SuppressLint("SetTextI18n") + override fun initListeners() { + binding!!.btnTest.setOnClickListener(this) + binding!!.btnDel.setOnClickListener(this) + binding!!.btnSave.setOnClickListener(this) + LiveEventBus.get(KEY_TEST_CONDITION, String::class.java).observe(this) { + mCountDownHelper?.finish() + + if (it == "success") { + XToastUtils.success("测试通过", 30000) + } else { + XToastUtils.error(it, 30000) + } + } + } + + @SingleClick + override fun onClick(v: View) { + try { + when (v.id) { + R.id.btn_test -> { + mCountDownHelper?.start() + Thread { + try { + val settingVo = checkSetting() + Log.d(TAG, settingVo.toString()) + LiveEventBus.get(KEY_TEST_CONDITION, String::class.java).post("success") + } catch (e: Exception) { + LiveEventBus.get(KEY_TEST_CONDITION, String::class.java).post(e.message.toString()) + e.printStackTrace() + } + }.start() + return + } + + R.id.btn_del -> { + popToBack() + return + } + + R.id.btn_save -> { + val settingVo = checkSetting() + val intent = Intent() + intent.putExtra(KEY_BACK_DATA_CONDITION, Gson().toJson(settingVo)) + setFragmentResult(TASK_CONDITION_BATTERY, intent) + popToBack() + return + } + } + } catch (e: Exception) { + XToastUtils.error(e.message.toString(), 30000) + e.printStackTrace() + } + } + + //检查设置 + @SuppressLint("SetTextI18n") + private fun checkSetting(): CronSetting { + return CronSetting(expression, description) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/condition/ChargeFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/condition/ChargeFragment.kt new file mode 100644 index 00000000..a4361015 --- /dev/null +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/condition/ChargeFragment.kt @@ -0,0 +1,141 @@ +package com.idormy.sms.forwarder.fragment.condition + +import android.annotation.SuppressLint +import android.content.Intent +import android.util.Log +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import com.google.gson.Gson +import com.idormy.sms.forwarder.R +import com.idormy.sms.forwarder.core.BaseFragment +import com.idormy.sms.forwarder.databinding.FragmentTasksCronBinding +import com.idormy.sms.forwarder.entity.task.CronSetting +import com.idormy.sms.forwarder.utils.KEY_BACK_DATA_CONDITION +import com.idormy.sms.forwarder.utils.KEY_EVENT_DATA_CONDITION +import com.idormy.sms.forwarder.utils.KEY_TEST_CONDITION +import com.idormy.sms.forwarder.utils.TASK_CONDITION_CHARGE +import com.idormy.sms.forwarder.utils.XToastUtils +import com.jeremyliao.liveeventbus.LiveEventBus +import com.xuexiang.xaop.annotation.SingleClick +import com.xuexiang.xpage.annotation.Page +import com.xuexiang.xrouter.annotation.AutoWired +import com.xuexiang.xrouter.launcher.XRouter +import com.xuexiang.xui.utils.CountDownButtonHelper +import com.xuexiang.xui.widget.actionbar.TitleBar + +@Page(name = "Charge") +@Suppress("PrivatePropertyName") +class ChargeFragment : BaseFragment(), View.OnClickListener { + + private val TAG: String = ChargeFragment::class.java.simpleName + var titleBar: TitleBar? = null + private var mCountDownHelper: CountDownButtonHelper? = null + + @JvmField + @AutoWired(name = KEY_EVENT_DATA_CONDITION) + var eventData: String? = null + + private var expression = "* * * * * ? *" + private var description = "测试描述" + + override fun initArgs() { + XRouter.getInstance().inject(this) + } + + override fun viewBindingInflate( + inflater: LayoutInflater, + container: ViewGroup, + ): FragmentTasksCronBinding { + return FragmentTasksCronBinding.inflate(inflater, container, false) + } + + override fun initTitle(): TitleBar? { + titleBar = super.initTitle()!!.setImmersive(false).setTitle(R.string.task_charge) + return titleBar + } + + /** + * 初始化控件 + */ + override fun initViews() { + //测试按钮增加倒计时,避免重复点击 + mCountDownHelper = CountDownButtonHelper(binding!!.btnTest, 3) + mCountDownHelper!!.setOnCountDownListener(object : CountDownButtonHelper.OnCountDownListener { + override fun onCountDown(time: Int) { + binding!!.btnTest.text = String.format(getString(R.string.seconds_n), time) + } + + override fun onFinished() { + binding!!.btnTest.text = getString(R.string.test) + } + }) + + Log.d(TAG, "initViews eventData:$eventData") + if (eventData != null) { + val settingVo = Gson().fromJson(eventData, CronSetting::class.java) + Log.d(TAG, "initViews settingVo:$settingVo") + } + } + + @SuppressLint("SetTextI18n") + override fun initListeners() { + binding!!.btnTest.setOnClickListener(this) + binding!!.btnDel.setOnClickListener(this) + binding!!.btnSave.setOnClickListener(this) + LiveEventBus.get(KEY_TEST_CONDITION, String::class.java).observe(this) { + mCountDownHelper?.finish() + + if (it == "success") { + XToastUtils.success("测试通过", 30000) + } else { + XToastUtils.error(it, 30000) + } + } + } + + @SingleClick + override fun onClick(v: View) { + try { + when (v.id) { + R.id.btn_test -> { + mCountDownHelper?.start() + Thread { + try { + val settingVo = checkSetting() + Log.d(TAG, settingVo.toString()) + LiveEventBus.get(KEY_TEST_CONDITION, String::class.java).post("success") + } catch (e: Exception) { + LiveEventBus.get(KEY_TEST_CONDITION, String::class.java).post(e.message.toString()) + e.printStackTrace() + } + }.start() + return + } + + R.id.btn_del -> { + popToBack() + return + } + + R.id.btn_save -> { + val settingVo = checkSetting() + val intent = Intent() + intent.putExtra(KEY_BACK_DATA_CONDITION, Gson().toJson(settingVo)) + setFragmentResult(TASK_CONDITION_CHARGE, intent) + popToBack() + return + } + } + } catch (e: Exception) { + XToastUtils.error(e.message.toString(), 30000) + e.printStackTrace() + } + } + + //检查设置 + @SuppressLint("SetTextI18n") + private fun checkSetting(): CronSetting { + return CronSetting(expression, description) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/condition/CronFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/condition/CronFragment.kt index 1abcfdae..9cefea67 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/condition/CronFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/condition/CronFragment.kt @@ -35,7 +35,6 @@ import java.text.SimpleDateFormat import java.util.Date import java.util.Locale - @Page(name = "Cron") @Suppress("PrivatePropertyName") class CronFragment : BaseFragment(), View.OnClickListener { diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/condition/NetworkFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/condition/NetworkFragment.kt new file mode 100644 index 00000000..3090766c --- /dev/null +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/condition/NetworkFragment.kt @@ -0,0 +1,141 @@ +package com.idormy.sms.forwarder.fragment.condition + +import android.annotation.SuppressLint +import android.content.Intent +import android.util.Log +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import com.google.gson.Gson +import com.idormy.sms.forwarder.R +import com.idormy.sms.forwarder.core.BaseFragment +import com.idormy.sms.forwarder.databinding.FragmentTasksCronBinding +import com.idormy.sms.forwarder.entity.task.CronSetting +import com.idormy.sms.forwarder.utils.KEY_BACK_DATA_CONDITION +import com.idormy.sms.forwarder.utils.KEY_EVENT_DATA_CONDITION +import com.idormy.sms.forwarder.utils.KEY_TEST_CONDITION +import com.idormy.sms.forwarder.utils.TASK_CONDITION_NETWORK +import com.idormy.sms.forwarder.utils.XToastUtils +import com.jeremyliao.liveeventbus.LiveEventBus +import com.xuexiang.xaop.annotation.SingleClick +import com.xuexiang.xpage.annotation.Page +import com.xuexiang.xrouter.annotation.AutoWired +import com.xuexiang.xrouter.launcher.XRouter +import com.xuexiang.xui.utils.CountDownButtonHelper +import com.xuexiang.xui.widget.actionbar.TitleBar + +@Page(name = "Network") +@Suppress("PrivatePropertyName") +class NetworkFragment : BaseFragment(), View.OnClickListener { + + private val TAG: String = NetworkFragment::class.java.simpleName + var titleBar: TitleBar? = null + private var mCountDownHelper: CountDownButtonHelper? = null + + @JvmField + @AutoWired(name = KEY_EVENT_DATA_CONDITION) + var eventData: String? = null + + private var expression = "* * * * * ? *" + private var description = "测试描述" + + override fun initArgs() { + XRouter.getInstance().inject(this) + } + + override fun viewBindingInflate( + inflater: LayoutInflater, + container: ViewGroup, + ): FragmentTasksCronBinding { + return FragmentTasksCronBinding.inflate(inflater, container, false) + } + + override fun initTitle(): TitleBar? { + titleBar = super.initTitle()!!.setImmersive(false).setTitle(R.string.task_network) + return titleBar + } + + /** + * 初始化控件 + */ + override fun initViews() { + //测试按钮增加倒计时,避免重复点击 + mCountDownHelper = CountDownButtonHelper(binding!!.btnTest, 3) + mCountDownHelper!!.setOnCountDownListener(object : CountDownButtonHelper.OnCountDownListener { + override fun onCountDown(time: Int) { + binding!!.btnTest.text = String.format(getString(R.string.seconds_n), time) + } + + override fun onFinished() { + binding!!.btnTest.text = getString(R.string.test) + } + }) + + Log.d(TAG, "initViews eventData:$eventData") + if (eventData != null) { + val settingVo = Gson().fromJson(eventData, CronSetting::class.java) + Log.d(TAG, "initViews settingVo:$settingVo") + } + } + + @SuppressLint("SetTextI18n") + override fun initListeners() { + binding!!.btnTest.setOnClickListener(this) + binding!!.btnDel.setOnClickListener(this) + binding!!.btnSave.setOnClickListener(this) + LiveEventBus.get(KEY_TEST_CONDITION, String::class.java).observe(this) { + mCountDownHelper?.finish() + + if (it == "success") { + XToastUtils.success("测试通过", 30000) + } else { + XToastUtils.error(it, 30000) + } + } + } + + @SingleClick + override fun onClick(v: View) { + try { + when (v.id) { + R.id.btn_test -> { + mCountDownHelper?.start() + Thread { + try { + val settingVo = checkSetting() + Log.d(TAG, settingVo.toString()) + LiveEventBus.get(KEY_TEST_CONDITION, String::class.java).post("success") + } catch (e: Exception) { + LiveEventBus.get(KEY_TEST_CONDITION, String::class.java).post(e.message.toString()) + e.printStackTrace() + } + }.start() + return + } + + R.id.btn_del -> { + popToBack() + return + } + + R.id.btn_save -> { + val settingVo = checkSetting() + val intent = Intent() + intent.putExtra(KEY_BACK_DATA_CONDITION, Gson().toJson(settingVo)) + setFragmentResult(TASK_CONDITION_NETWORK, intent) + popToBack() + return + } + } + } catch (e: Exception) { + XToastUtils.error(e.message.toString(), 30000) + e.printStackTrace() + } + } + + //检查设置 + @SuppressLint("SetTextI18n") + private fun checkSetting(): CronSetting { + return CronSetting(expression, description) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/Constants.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/Constants.kt index b2a1e956..2a3313bf 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/Constants.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/Constants.kt @@ -86,6 +86,7 @@ const val SP_SMS_TEMPLATE = "sms_template" const val SP_ENABLE_HELP_TIP = "enable_help_tip" const val SP_PURE_CLIENT_MODE = "enable_pure_client_mode" +const val SP_PURE_TASK_MODE = "enable_pure_task_mode" const val SP_LOCATION_TAG = "enable_location_tag" const val SP_ENABLE_CACTUS = "enable_cactus" @@ -353,7 +354,8 @@ const val KEY_URL = "key_url" //主页监听时间 const val EVENT_UPDATE_LOGS_TYPE = "key_logs_type" -const val EVENT_UPDATE_RULE_TYPE = "key_status" +const val EVENT_UPDATE_RULE_TYPE = "key_rules_type" +const val EVENT_UPDATE_TASK_TYPE = "key_tasks_type" const val KEY_SENDER_ID = "key_sender_id" const val KEY_SENDER_TYPE = "key_sender_type" @@ -364,6 +366,10 @@ const val KEY_RULE_ID = "key_rule_id" const val KEY_RULE_TYPE = "key_rule_type" const val KEY_RULE_CLONE = "key_rule_clone" +const val KEY_TASK_ID = "key_task_id" +const val KEY_TASK_TYPE = "key_task_type" +const val KEY_TASK_CLONE = "key_task_clone" + const val EVENT_LOAD_APP_LIST = "EVENT_LOAD_APP_LIST" const val EVENT_KEY_SIM_SLOT = "EVENT_KEY_SIM_SLOT" @@ -476,10 +482,6 @@ var CLIENT_FRAGMENT_LIST = listOf( ) //自动任务 -const val KEY_TASK_ID = "key_task_id" -const val KEY_TASK_TYPE = "key_task_type" -const val KEY_TASK_CLONE = "key_task_clone" - const val KEY_TEST_CONDITION = "key_test_condition" const val KEY_EVENT_DATA_CONDITION = "event_data_condition" const val KEY_BACK_CODE_CONDITION = 1000 @@ -494,32 +496,32 @@ const val KEY_BACK_DATA_ACTION = "back_data_action" const val TASK_CONDITION_CRON = 1000 const val TASK_CONDITION_BATTERY = 1001 const val TASK_CONDITION_CHARGE = 1002 -const val TASK_CONDITION_WLAN = 1003 +const val TASK_CONDITION_NETWORK = 1003 var TASK_CONDITION_FRAGMENT_LIST = listOf( PageInfo( getString(R.string.task_cron), "com.idormy.sms.forwarder.fragment.condition.CronFragment", "{\"\":\"\"}", CoreAnim.slide, - R.drawable.auto_task_icon_cron, + R.drawable.auto_task_icon_custom_time, ), PageInfo( - getString(R.string.email), - "com.idormy.sms.forwarder.fragment.senders.EmailFragment", + getString(R.string.task_battery), + "com.idormy.sms.forwarder.fragment.condition.BatteryFragment", "{\"\":\"\"}", CoreAnim.slide, R.drawable.auto_task_icon_battery ), PageInfo( - getString(R.string.bark), - "com.idormy.sms.forwarder.fragment.senders.BarkFragment", + getString(R.string.task_charge), + "com.idormy.sms.forwarder.fragment.condition.ChargeFragment", "{\"\":\"\"}", CoreAnim.slide, R.drawable.auto_task_icon_charge ), PageInfo( - getString(R.string.webhook), - "com.idormy.sms.forwarder.fragment.senders.WebhookFragment", + getString(R.string.task_network), + "com.idormy.sms.forwarder.fragment.condition.NetworkFragment", "{\"\":\"\"}", CoreAnim.slide, R.drawable.auto_task_icon_wlan @@ -527,33 +529,37 @@ var TASK_CONDITION_FRAGMENT_LIST = listOf( ) //注意:TASK_ACTION_XXX 枚举值 等于 TASK_ACTION_FRAGMENT_LIST 索引加上 KEY_BACK_CODE_ACTION,不可改变 +const val TASK_ACTION_SENDSMS = 2000 +const val TASK_ACTION_NOTIFICATION = 2001 +const val TASK_ACTION_FRPC = 2002 +const val TASK_ACTION_HTTPSERVER = 2003 var TASK_ACTION_FRAGMENT_LIST = listOf( PageInfo( - getString(R.string.task_cron), - "com.idormy.sms.forwarder.fragment.condition.CronFragment", + getString(R.string.task_sendsms), + "com.idormy.sms.forwarder.fragment.action.SendSmsFragment", "{\"\":\"\"}", CoreAnim.slide, - R.drawable.auto_task_icon_cron + R.drawable.auto_task_icon_sms ), PageInfo( - getString(R.string.email), - "com.idormy.sms.forwarder.fragment.senders.EmailFragment", + getString(R.string.task_notification), + "com.idormy.sms.forwarder.fragment.action.NotificationFragment", "{\"\":\"\"}", CoreAnim.slide, - R.drawable.auto_task_icon_battery + R.drawable.auto_task_icon_sender, ), PageInfo( - getString(R.string.bark), - "com.idormy.sms.forwarder.fragment.senders.BarkFragment", + getString(R.string.task_frpc), + "com.idormy.sms.forwarder.fragment.action.FrpcFragment", "{\"\":\"\"}", CoreAnim.slide, - R.drawable.auto_task_icon_charge + R.drawable.auto_task_icon_frpc ), PageInfo( - getString(R.string.webhook), - "com.idormy.sms.forwarder.fragment.senders.WebhookFragment", + getString(R.string.task_server), + "com.idormy.sms.forwarder.fragment.action.HttpServerFragment", "{\"\":\"\"}", CoreAnim.slide, - R.drawable.auto_task_icon_wlan + R.drawable.auto_task_icon_http_server ), ) \ No newline at end of file diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/SettingUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/SettingUtils.kt index fda771a5..c9ae704a 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/SettingUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/SettingUtils.kt @@ -3,6 +3,7 @@ package com.idormy.sms.forwarder.utils import com.idormy.sms.forwarder.R import com.xuexiang.xui.utils.ResUtils.getString +@Suppress("DEPRECATION") class SettingUtils private constructor() { companion object { @@ -157,6 +158,9 @@ class SettingUtils private constructor() { //是否纯客户端模式 var enablePureClientMode: Boolean by SharedPreference(SP_PURE_CLIENT_MODE, false) + //是否纯任务模式 + var enablePureTaskMode: Boolean by SharedPreference(SP_PURE_TASK_MODE, true) + //是否启用定位标签 var enableLocationTag: Boolean by SharedPreference(SP_LOCATION_TAG, false) diff --git a/app/src/main/res/drawable/auto_task_address_item_normal.xml b/app/src/main/res/drawable/auto_task_address_item_normal.xml new file mode 100644 index 00000000..d46ae48c --- /dev/null +++ b/app/src/main/res/drawable/auto_task_address_item_normal.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_address_item_selected.xml b/app/src/main/res/drawable/auto_task_address_item_selected.xml new file mode 100644 index 00000000..04038bc3 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_address_item_selected.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_default_bg.xml b/app/src/main/res/drawable/auto_task_default_bg.xml new file mode 100644 index 00000000..fc4b2a00 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_default_bg.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_dialog_icon_alarm.xml b/app/src/main/res/drawable/auto_task_dialog_icon_alarm.xml new file mode 100644 index 00000000..eff09e72 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_dialog_icon_alarm.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_dialog_icon_call.xml b/app/src/main/res/drawable/auto_task_dialog_icon_call.xml new file mode 100644 index 00000000..bc95b9e3 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_dialog_icon_call.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_dialog_icon_call_enable.xml b/app/src/main/res/drawable/auto_task_dialog_icon_call_enable.xml new file mode 100644 index 00000000..456f0e72 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_dialog_icon_call_enable.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_dialog_icon_media.xml b/app/src/main/res/drawable/auto_task_dialog_icon_media.xml new file mode 100644 index 00000000..8ba1f78c --- /dev/null +++ b/app/src/main/res/drawable/auto_task_dialog_icon_media.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_dialog_icon_media_enable.xml b/app/src/main/res/drawable/auto_task_dialog_icon_media_enable.xml new file mode 100644 index 00000000..4effa369 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_dialog_icon_media_enable.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_edit_address_icon.xml b/app/src/main/res/drawable/auto_task_edit_address_icon.xml new file mode 100644 index 00000000..83c6a910 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_edit_address_icon.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_absorbed_mode.xml b/app/src/main/res/drawable/auto_task_icon_absorbed_mode.xml new file mode 100644 index 00000000..70af1193 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_absorbed_mode.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_absorbed_mode_grey.xml b/app/src/main/res/drawable/auto_task_icon_absorbed_mode_grey.xml new file mode 100644 index 00000000..abeaa241 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_absorbed_mode_grey.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_absorbed_mode_tran.xml b/app/src/main/res/drawable/auto_task_icon_absorbed_mode_tran.xml new file mode 100644 index 00000000..7217dfc3 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_absorbed_mode_tran.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_add.xml b/app/src/main/res/drawable/auto_task_icon_add.xml new file mode 100644 index 00000000..f5278c26 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_add.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_adjust_volume.xml b/app/src/main/res/drawable/auto_task_icon_adjust_volume.xml new file mode 100644 index 00000000..b38a5279 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_adjust_volume.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_adjust_volume_grey.xml b/app/src/main/res/drawable/auto_task_icon_adjust_volume_grey.xml new file mode 100644 index 00000000..8a4dae39 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_adjust_volume_grey.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_adjust_volume_tran.xml b/app/src/main/res/drawable/auto_task_icon_adjust_volume_tran.xml new file mode 100644 index 00000000..ea64b1ce --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_adjust_volume_tran.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_airplane.xml b/app/src/main/res/drawable/auto_task_icon_airplane.xml new file mode 100644 index 00000000..fda4203e --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_airplane.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_airplane_grey.xml b/app/src/main/res/drawable/auto_task_icon_airplane_grey.xml new file mode 100644 index 00000000..888fc2c2 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_airplane_grey.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_airplane_tran.xml b/app/src/main/res/drawable/auto_task_icon_airplane_tran.xml new file mode 100644 index 00000000..d88c3249 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_airplane_tran.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_battery.xml b/app/src/main/res/drawable/auto_task_icon_battery.xml index 8d4cd9a2..0acbe29e 100644 --- a/app/src/main/res/drawable/auto_task_icon_battery.xml +++ b/app/src/main/res/drawable/auto_task_icon_battery.xml @@ -1,15 +1,6 @@ - - - + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_battery_grey.xml b/app/src/main/res/drawable/auto_task_icon_battery_grey.xml new file mode 100644 index 00000000..92ebfdf2 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_battery_grey.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_battery_tran.xml b/app/src/main/res/drawable/auto_task_icon_battery_tran.xml new file mode 100644 index 00000000..b58ab4ef --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_battery_tran.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_bluetooth.xml b/app/src/main/res/drawable/auto_task_icon_bluetooth.xml index d4030138..b0db69ce 100644 --- a/app/src/main/res/drawable/auto_task_icon_bluetooth.xml +++ b/app/src/main/res/drawable/auto_task_icon_bluetooth.xml @@ -1,15 +1,6 @@ - - - + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_bluetooth_device.xml b/app/src/main/res/drawable/auto_task_icon_bluetooth_device.xml index d92e6cd9..c3b3486d 100644 --- a/app/src/main/res/drawable/auto_task_icon_bluetooth_device.xml +++ b/app/src/main/res/drawable/auto_task_icon_bluetooth_device.xml @@ -1,19 +1,7 @@ - - - - + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_bluetooth_device_grey.xml b/app/src/main/res/drawable/auto_task_icon_bluetooth_device_grey.xml new file mode 100644 index 00000000..8fcd505b --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_bluetooth_device_grey.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_bluetooth_device_tran.xml b/app/src/main/res/drawable/auto_task_icon_bluetooth_device_tran.xml new file mode 100644 index 00000000..b304f0b7 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_bluetooth_device_tran.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_bluetooth_grey.xml b/app/src/main/res/drawable/auto_task_icon_bluetooth_grey.xml new file mode 100644 index 00000000..1cb4d467 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_bluetooth_grey.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_bluetooth_tran.xml b/app/src/main/res/drawable/auto_task_icon_bluetooth_tran.xml new file mode 100644 index 00000000..9ee73a18 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_bluetooth_tran.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_brightness.xml b/app/src/main/res/drawable/auto_task_icon_brightness.xml new file mode 100644 index 00000000..39ab94df --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_brightness.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_brightness_grey.xml b/app/src/main/res/drawable/auto_task_icon_brightness_grey.xml new file mode 100644 index 00000000..122a4441 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_brightness_grey.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_brightness_tran.xml b/app/src/main/res/drawable/auto_task_icon_brightness_tran.xml new file mode 100644 index 00000000..eef47315 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_brightness_tran.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_charge.xml b/app/src/main/res/drawable/auto_task_icon_charge.xml index 8febafcf..031e0695 100644 --- a/app/src/main/res/drawable/auto_task_icon_charge.xml +++ b/app/src/main/res/drawable/auto_task_icon_charge.xml @@ -1,15 +1,6 @@ - - - + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_charge_grey.xml b/app/src/main/res/drawable/auto_task_icon_charge_grey.xml new file mode 100644 index 00000000..88489e7b --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_charge_grey.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_charge_tran.xml b/app/src/main/res/drawable/auto_task_icon_charge_tran.xml new file mode 100644 index 00000000..32741cf1 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_charge_tran.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_connect_wlan.xml b/app/src/main/res/drawable/auto_task_icon_connect_wlan.xml index 73cf2054..a2066a5a 100644 --- a/app/src/main/res/drawable/auto_task_icon_connect_wlan.xml +++ b/app/src/main/res/drawable/auto_task_icon_connect_wlan.xml @@ -1,35 +1,11 @@ - - - - - - - - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_connect_wlan_grey.xml b/app/src/main/res/drawable/auto_task_icon_connect_wlan_grey.xml new file mode 100644 index 00000000..2e0fcf21 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_connect_wlan_grey.xml @@ -0,0 +1,11 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_connect_wlan_tran.xml b/app/src/main/res/drawable/auto_task_icon_connect_wlan_tran.xml new file mode 100644 index 00000000..f45d4e4b --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_connect_wlan_tran.xml @@ -0,0 +1,11 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_cron.xml b/app/src/main/res/drawable/auto_task_icon_cron.xml deleted file mode 100644 index f41c9f50..00000000 --- a/app/src/main/res/drawable/auto_task_icon_cron.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_custom_time.xml b/app/src/main/res/drawable/auto_task_icon_custom_time.xml new file mode 100644 index 00000000..6dcc6a3c --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_custom_time.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_custom_time_grey.xml b/app/src/main/res/drawable/auto_task_icon_custom_time_grey.xml new file mode 100644 index 00000000..8d0a106f --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_custom_time_grey.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_custom_time_tran.xml b/app/src/main/res/drawable/auto_task_icon_custom_time_tran.xml new file mode 100644 index 00000000..b466cb87 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_custom_time_tran.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_dark.xml b/app/src/main/res/drawable/auto_task_icon_dark.xml new file mode 100644 index 00000000..67dd7e09 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_dark.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_dark_grey.xml b/app/src/main/res/drawable/auto_task_icon_dark_grey.xml new file mode 100644 index 00000000..b5fa5a65 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_dark_grey.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_dark_tran.xml b/app/src/main/res/drawable/auto_task_icon_dark_tran.xml new file mode 100644 index 00000000..62d4baa3 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_dark_tran.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_default_drive_car.xml b/app/src/main/res/drawable/auto_task_icon_default_drive_car.xml new file mode 100644 index 00000000..5c0f5f27 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_default_drive_car.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_default_drive_car_big.xml b/app/src/main/res/drawable/auto_task_icon_default_drive_car_big.xml new file mode 100644 index 00000000..f59ddd7e --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_default_drive_car_big.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_default_get_up.xml b/app/src/main/res/drawable/auto_task_icon_default_get_up.xml new file mode 100644 index 00000000..f5513a39 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_default_get_up.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_default_get_up_big.xml b/app/src/main/res/drawable/auto_task_icon_default_get_up_big.xml new file mode 100644 index 00000000..dca80c42 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_default_get_up_big.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_default_listen_music.xml b/app/src/main/res/drawable/auto_task_icon_default_listen_music.xml new file mode 100644 index 00000000..1f0517f6 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_default_listen_music.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_default_listen_music_big.xml b/app/src/main/res/drawable/auto_task_icon_default_listen_music_big.xml new file mode 100644 index 00000000..b47dc7b8 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_default_listen_music_big.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_default_meet.xml b/app/src/main/res/drawable/auto_task_icon_default_meet.xml new file mode 100644 index 00000000..548920a7 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_default_meet.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_default_meet_big.xml b/app/src/main/res/drawable/auto_task_icon_default_meet_big.xml new file mode 100644 index 00000000..34854d01 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_default_meet_big.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_default_noon_break.xml b/app/src/main/res/drawable/auto_task_icon_default_noon_break.xml new file mode 100644 index 00000000..d87177b0 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_default_noon_break.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_default_noon_break_big.xml b/app/src/main/res/drawable/auto_task_icon_default_noon_break_big.xml new file mode 100644 index 00000000..b9d79ab0 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_default_noon_break_big.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_default_save_power.xml b/app/src/main/res/drawable/auto_task_icon_default_save_power.xml new file mode 100644 index 00000000..8dc47a27 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_default_save_power.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_default_save_power_big.xml b/app/src/main/res/drawable/auto_task_icon_default_save_power_big.xml new file mode 100644 index 00000000..576c32e1 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_default_save_power_big.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_default_sleep.xml b/app/src/main/res/drawable/auto_task_icon_default_sleep.xml new file mode 100644 index 00000000..a27a888a --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_default_sleep.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_default_sleep_big.xml b/app/src/main/res/drawable/auto_task_icon_default_sleep_big.xml new file mode 100644 index 00000000..e7258d05 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_default_sleep_big.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_default_watch_video.xml b/app/src/main/res/drawable/auto_task_icon_default_watch_video.xml new file mode 100644 index 00000000..c0e9fcb5 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_default_watch_video.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_default_watch_video_big.xml b/app/src/main/res/drawable/auto_task_icon_default_watch_video_big.xml new file mode 100644 index 00000000..32fddd10 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_default_watch_video_big.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_delete.xml b/app/src/main/res/drawable/auto_task_icon_delete.xml new file mode 100644 index 00000000..1c882d45 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_delete.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_dial_tone.xml b/app/src/main/res/drawable/auto_task_icon_dial_tone.xml new file mode 100644 index 00000000..b69aee4a --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_dial_tone.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_dial_tone_grey.xml b/app/src/main/res/drawable/auto_task_icon_dial_tone_grey.xml new file mode 100644 index 00000000..4a230ee3 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_dial_tone_grey.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_dial_tone_tran.xml b/app/src/main/res/drawable/auto_task_icon_dial_tone_tran.xml new file mode 100644 index 00000000..9778b3ef --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_dial_tone_tran.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_disconnect_bluetooth_device.xml b/app/src/main/res/drawable/auto_task_icon_disconnect_bluetooth_device.xml index a9094394..59ffe0d2 100644 --- a/app/src/main/res/drawable/auto_task_icon_disconnect_bluetooth_device.xml +++ b/app/src/main/res/drawable/auto_task_icon_disconnect_bluetooth_device.xml @@ -1,22 +1,8 @@ - - - - - + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_disconnect_bluetooth_device_grey.xml b/app/src/main/res/drawable/auto_task_icon_disconnect_bluetooth_device_grey.xml new file mode 100644 index 00000000..9603ea06 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_disconnect_bluetooth_device_grey.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_disconnect_bluetooth_device_tran.xml b/app/src/main/res/drawable/auto_task_icon_disconnect_bluetooth_device_tran.xml new file mode 100644 index 00000000..135958e2 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_disconnect_bluetooth_device_tran.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_disconnect_wlan.xml b/app/src/main/res/drawable/auto_task_icon_disconnect_wlan.xml index cabc540b..49a8eb23 100644 --- a/app/src/main/res/drawable/auto_task_icon_disconnect_wlan.xml +++ b/app/src/main/res/drawable/auto_task_icon_disconnect_wlan.xml @@ -1,39 +1,11 @@ - - - - - - - - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_disconnect_wlan_grey.xml b/app/src/main/res/drawable/auto_task_icon_disconnect_wlan_grey.xml new file mode 100644 index 00000000..77dd5b52 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_disconnect_wlan_grey.xml @@ -0,0 +1,11 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_disconnect_wlan_tran.xml b/app/src/main/res/drawable/auto_task_icon_disconnect_wlan_tran.xml new file mode 100644 index 00000000..56d7d93e --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_disconnect_wlan_tran.xml @@ -0,0 +1,11 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_drive.xml b/app/src/main/res/drawable/auto_task_icon_drive.xml new file mode 100644 index 00000000..d5347231 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_drive.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_drive_grey.xml b/app/src/main/res/drawable/auto_task_icon_drive_grey.xml new file mode 100644 index 00000000..257d144d --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_drive_grey.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_drive_tran.xml b/app/src/main/res/drawable/auto_task_icon_drive_tran.xml new file mode 100644 index 00000000..30193e8a --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_drive_tran.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_eye_care.xml b/app/src/main/res/drawable/auto_task_icon_eye_care.xml new file mode 100644 index 00000000..bd25d33b --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_eye_care.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_eye_care_grey.xml b/app/src/main/res/drawable/auto_task_icon_eye_care_grey.xml new file mode 100644 index 00000000..1d63e3c9 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_eye_care_grey.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_eye_care_tran.xml b/app/src/main/res/drawable/auto_task_icon_eye_care_tran.xml new file mode 100644 index 00000000..91980518 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_eye_care_tran.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_flashlight.xml b/app/src/main/res/drawable/auto_task_icon_flashlight.xml new file mode 100644 index 00000000..b8074318 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_flashlight.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_flashlight_grey.xml b/app/src/main/res/drawable/auto_task_icon_flashlight_grey.xml new file mode 100644 index 00000000..a5f2b6ac --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_flashlight_grey.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_flashlight_tran.xml b/app/src/main/res/drawable/auto_task_icon_flashlight_tran.xml new file mode 100644 index 00000000..ce15ccfc --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_flashlight_tran.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_frpc.xml b/app/src/main/res/drawable/auto_task_icon_frpc.xml new file mode 100644 index 00000000..39405e59 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_frpc.xml @@ -0,0 +1,20 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_headset.xml b/app/src/main/res/drawable/auto_task_icon_headset.xml new file mode 100644 index 00000000..be9986ce --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_headset.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_headset_grey.xml b/app/src/main/res/drawable/auto_task_icon_headset_grey.xml new file mode 100644 index 00000000..be4b8cb0 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_headset_grey.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_headset_tran.xml b/app/src/main/res/drawable/auto_task_icon_headset_tran.xml new file mode 100644 index 00000000..c7431343 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_headset_tran.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_hotspot.xml b/app/src/main/res/drawable/auto_task_icon_hotspot.xml new file mode 100644 index 00000000..ed95a9ac --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_hotspot.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_hotspot_grey.xml b/app/src/main/res/drawable/auto_task_icon_hotspot_grey.xml new file mode 100644 index 00000000..4d066631 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_hotspot_grey.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_hotspot_tran.xml b/app/src/main/res/drawable/auto_task_icon_hotspot_tran.xml new file mode 100644 index 00000000..1161e711 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_hotspot_tran.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_http_server.xml b/app/src/main/res/drawable/auto_task_icon_http_server.xml new file mode 100644 index 00000000..c67af1b6 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_http_server.xml @@ -0,0 +1,20 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_incall.xml b/app/src/main/res/drawable/auto_task_icon_incall.xml index 3f80e898..7c04e4d0 100644 --- a/app/src/main/res/drawable/auto_task_icon_incall.xml +++ b/app/src/main/res/drawable/auto_task_icon_incall.xml @@ -1,15 +1,6 @@ - - - + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_incall_grey.xml b/app/src/main/res/drawable/auto_task_icon_incall_grey.xml new file mode 100644 index 00000000..0ec39622 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_incall_grey.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_incall_tran.xml b/app/src/main/res/drawable/auto_task_icon_incall_tran.xml new file mode 100644 index 00000000..573ec42f --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_incall_tran.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_leave_address.xml b/app/src/main/res/drawable/auto_task_icon_leave_address.xml index 5d58eecb..a0622127 100644 --- a/app/src/main/res/drawable/auto_task_icon_leave_address.xml +++ b/app/src/main/res/drawable/auto_task_icon_leave_address.xml @@ -1,19 +1,7 @@ - - - - + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_leave_address_grey.xml b/app/src/main/res/drawable/auto_task_icon_leave_address_grey.xml new file mode 100644 index 00000000..fdd23e08 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_leave_address_grey.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_leave_address_tran.xml b/app/src/main/res/drawable/auto_task_icon_leave_address_tran.xml new file mode 100644 index 00000000..93213c0a --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_leave_address_tran.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_left_arrow.xml b/app/src/main/res/drawable/auto_task_icon_left_arrow.xml new file mode 100644 index 00000000..b74e1ae2 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_left_arrow.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_left_arrow_grey.xml b/app/src/main/res/drawable/auto_task_icon_left_arrow_grey.xml new file mode 100644 index 00000000..d69fee56 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_left_arrow_grey.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_location.xml b/app/src/main/res/drawable/auto_task_icon_location.xml index 92cb905a..a4d9b263 100644 --- a/app/src/main/res/drawable/auto_task_icon_location.xml +++ b/app/src/main/res/drawable/auto_task_icon_location.xml @@ -1,14 +1,6 @@ - - - + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_location_grey.xml b/app/src/main/res/drawable/auto_task_icon_location_grey.xml new file mode 100644 index 00000000..81e2f1b5 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_location_grey.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_location_tran.xml b/app/src/main/res/drawable/auto_task_icon_location_tran.xml new file mode 100644 index 00000000..705c56a0 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_location_tran.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_lock_screen.xml b/app/src/main/res/drawable/auto_task_icon_lock_screen.xml new file mode 100644 index 00000000..958e0478 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_lock_screen.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_lock_screen_grey.xml b/app/src/main/res/drawable/auto_task_icon_lock_screen_grey.xml new file mode 100644 index 00000000..9f193c73 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_lock_screen_grey.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_lock_screen_tran.xml b/app/src/main/res/drawable/auto_task_icon_lock_screen_tran.xml new file mode 100644 index 00000000..07eb04f1 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_lock_screen_tran.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_meeting.xml b/app/src/main/res/drawable/auto_task_icon_meeting.xml new file mode 100644 index 00000000..e5f60efd --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_meeting.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_metting_grey.xml b/app/src/main/res/drawable/auto_task_icon_metting_grey.xml new file mode 100644 index 00000000..a153eddb --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_metting_grey.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_metting_tran.xml b/app/src/main/res/drawable/auto_task_icon_metting_tran.xml new file mode 100644 index 00000000..418a5101 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_metting_tran.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_mute.xml b/app/src/main/res/drawable/auto_task_icon_mute.xml new file mode 100644 index 00000000..3a381797 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_mute.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_mute_grey.xml b/app/src/main/res/drawable/auto_task_icon_mute_grey.xml new file mode 100644 index 00000000..afebe407 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_mute_grey.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_mute_tran.xml b/app/src/main/res/drawable/auto_task_icon_mute_tran.xml new file mode 100644 index 00000000..b10ba786 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_mute_tran.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_network.xml b/app/src/main/res/drawable/auto_task_icon_network.xml new file mode 100644 index 00000000..7cc268b2 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_network.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_network_grey.xml b/app/src/main/res/drawable/auto_task_icon_network_grey.xml new file mode 100644 index 00000000..f85a79bc --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_network_grey.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_network_tran.xml b/app/src/main/res/drawable/auto_task_icon_network_tran.xml new file mode 100644 index 00000000..fb51cfe1 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_network_tran.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_nfc.xml b/app/src/main/res/drawable/auto_task_icon_nfc.xml new file mode 100644 index 00000000..432f8c40 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_nfc.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_nfc_grey.xml b/app/src/main/res/drawable/auto_task_icon_nfc_grey.xml new file mode 100644 index 00000000..a580c798 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_nfc_grey.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_nfc_tran.xml b/app/src/main/res/drawable/auto_task_icon_nfc_tran.xml new file mode 100644 index 00000000..1c8c9195 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_nfc_tran.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_rotate_off.xml b/app/src/main/res/drawable/auto_task_icon_rotate_off.xml new file mode 100644 index 00000000..b369cbd5 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_rotate_off.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_rotate_off_grey.xml b/app/src/main/res/drawable/auto_task_icon_rotate_off_grey.xml new file mode 100644 index 00000000..6c513a48 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_rotate_off_grey.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_rotate_off_tran.xml b/app/src/main/res/drawable/auto_task_icon_rotate_off_tran.xml new file mode 100644 index 00000000..9cabf6dd --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_rotate_off_tran.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_save_battery.xml b/app/src/main/res/drawable/auto_task_icon_save_battery.xml new file mode 100644 index 00000000..a77fddd5 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_save_battery.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_save_battery_grey.xml b/app/src/main/res/drawable/auto_task_icon_save_battery_grey.xml new file mode 100644 index 00000000..4c54cc85 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_save_battery_grey.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_save_battery_tran.xml b/app/src/main/res/drawable/auto_task_icon_save_battery_tran.xml new file mode 100644 index 00000000..faeed846 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_save_battery_tran.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_screen_brightness.xml b/app/src/main/res/drawable/auto_task_icon_screen_brightness.xml new file mode 100644 index 00000000..1ba745be --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_screen_brightness.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_screen_brightness_grey.xml b/app/src/main/res/drawable/auto_task_icon_screen_brightness_grey.xml new file mode 100644 index 00000000..d158356b --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_screen_brightness_grey.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_screen_brightness_tran.xml b/app/src/main/res/drawable/auto_task_icon_screen_brightness_tran.xml new file mode 100644 index 00000000..7c9f4fca --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_screen_brightness_tran.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_screen_display.xml b/app/src/main/res/drawable/auto_task_icon_screen_display.xml new file mode 100644 index 00000000..63b9321d --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_screen_display.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_screen_display_grey.xml b/app/src/main/res/drawable/auto_task_icon_screen_display_grey.xml new file mode 100644 index 00000000..60602605 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_screen_display_grey.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_screen_display_tran.xml b/app/src/main/res/drawable/auto_task_icon_screen_display_tran.xml new file mode 100644 index 00000000..afdd30d6 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_screen_display_tran.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_sender.xml b/app/src/main/res/drawable/auto_task_icon_sender.xml new file mode 100644 index 00000000..94fec49b --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_sender.xml @@ -0,0 +1,20 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_sms.xml b/app/src/main/res/drawable/auto_task_icon_sms.xml new file mode 100644 index 00000000..dff53962 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_sms.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_start_activity.xml b/app/src/main/res/drawable/auto_task_icon_start_activity.xml new file mode 100644 index 00000000..c0223832 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_start_activity.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_start_activity_grey.xml b/app/src/main/res/drawable/auto_task_icon_start_activity_grey.xml new file mode 100644 index 00000000..76268bed --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_start_activity_grey.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_start_activity_tran.xml b/app/src/main/res/drawable/auto_task_icon_start_activity_tran.xml new file mode 100644 index 00000000..d42f37e4 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_start_activity_tran.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_switch.xml b/app/src/main/res/drawable/auto_task_icon_switch.xml new file mode 100644 index 00000000..0631a578 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_switch.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_switch_grey.xml b/app/src/main/res/drawable/auto_task_icon_switch_grey.xml new file mode 100644 index 00000000..264532df --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_switch_grey.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_switch_tran.xml b/app/src/main/res/drawable/auto_task_icon_switch_tran.xml new file mode 100644 index 00000000..729b822a --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_switch_tran.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_to_address.xml b/app/src/main/res/drawable/auto_task_icon_to_address.xml index 5c6416fa..86975261 100644 --- a/app/src/main/res/drawable/auto_task_icon_to_address.xml +++ b/app/src/main/res/drawable/auto_task_icon_to_address.xml @@ -1,19 +1,7 @@ - - - - + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_to_address_grey.xml b/app/src/main/res/drawable/auto_task_icon_to_address_grey.xml new file mode 100644 index 00000000..c5aaeb90 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_to_address_grey.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_to_address_tran.xml b/app/src/main/res/drawable/auto_task_icon_to_address_tran.xml new file mode 100644 index 00000000..afa33d4c --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_to_address_tran.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_touch.xml b/app/src/main/res/drawable/auto_task_icon_touch.xml new file mode 100644 index 00000000..6660784b --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_touch.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_touch_grey.xml b/app/src/main/res/drawable/auto_task_icon_touch_grey.xml new file mode 100644 index 00000000..22acad2a --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_touch_grey.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_touch_tran.xml b/app/src/main/res/drawable/auto_task_icon_touch_tran.xml new file mode 100644 index 00000000..8c79a412 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_touch_tran.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_twinkle.xml b/app/src/main/res/drawable/auto_task_icon_twinkle.xml new file mode 100644 index 00000000..1036b57b --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_twinkle.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_twinkle_grey.xml b/app/src/main/res/drawable/auto_task_icon_twinkle_grey.xml new file mode 100644 index 00000000..79135356 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_twinkle_grey.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_twinkle_tran.xml b/app/src/main/res/drawable/auto_task_icon_twinkle_tran.xml new file mode 100644 index 00000000..eba4b2ad --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_twinkle_tran.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_typeface.xml b/app/src/main/res/drawable/auto_task_icon_typeface.xml new file mode 100644 index 00000000..9e040c88 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_typeface.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_typeface_grey.xml b/app/src/main/res/drawable/auto_task_icon_typeface_grey.xml new file mode 100644 index 00000000..dba97d5e --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_typeface_grey.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_typeface_tran.xml b/app/src/main/res/drawable/auto_task_icon_typeface_tran.xml new file mode 100644 index 00000000..aefdf266 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_typeface_tran.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_wlan.xml b/app/src/main/res/drawable/auto_task_icon_wlan.xml index 7fe07907..d19947cd 100644 --- a/app/src/main/res/drawable/auto_task_icon_wlan.xml +++ b/app/src/main/res/drawable/auto_task_icon_wlan.xml @@ -1,27 +1,9 @@ - - - - - - + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_wlan_grey.xml b/app/src/main/res/drawable/auto_task_icon_wlan_grey.xml new file mode 100644 index 00000000..c757e838 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_wlan_grey.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_wlan_tran.xml b/app/src/main/res/drawable/auto_task_icon_wlan_tran.xml new file mode 100644 index 00000000..78fd622d --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_wlan_tran.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_zen_mode.xml b/app/src/main/res/drawable/auto_task_icon_zen_mode.xml new file mode 100644 index 00000000..834929b3 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_zen_mode.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_zen_mode_grey.xml b/app/src/main/res/drawable/auto_task_icon_zen_mode_grey.xml new file mode 100644 index 00000000..1b571573 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_zen_mode_grey.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_icon_zen_mode_tran.xml b/app/src/main/res/drawable/auto_task_icon_zen_mode_tran.xml new file mode 100644 index 00000000..8d08ef6a --- /dev/null +++ b/app/src/main/res/drawable/auto_task_icon_zen_mode_tran.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_item_background.xml b/app/src/main/res/drawable/auto_task_item_background.xml new file mode 100644 index 00000000..6cc6183d --- /dev/null +++ b/app/src/main/res/drawable/auto_task_item_background.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_item_background_bottom.xml b/app/src/main/res/drawable/auto_task_item_background_bottom.xml new file mode 100644 index 00000000..8d6d4a88 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_item_background_bottom.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_item_background_center.xml b/app/src/main/res/drawable/auto_task_item_background_center.xml new file mode 100644 index 00000000..ff6dc5af --- /dev/null +++ b/app/src/main/res/drawable/auto_task_item_background_center.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_item_background_top.xml b/app/src/main/res/drawable/auto_task_item_background_top.xml new file mode 100644 index 00000000..5db0cc26 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_item_background_top.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_left_small_arrow.xml b/app/src/main/res/drawable/auto_task_left_small_arrow.xml new file mode 100644 index 00000000..25eec650 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_left_small_arrow.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_radio_button_bg.xml b/app/src/main/res/drawable/auto_task_radio_button_bg.xml new file mode 100644 index 00000000..efdf5555 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_radio_button_bg.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_radio_button_select.xml b/app/src/main/res/drawable/auto_task_radio_button_select.xml new file mode 100644 index 00000000..6befc008 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_radio_button_select.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_radio_button_un_select.xml b/app/src/main/res/drawable/auto_task_radio_button_un_select.xml new file mode 100644 index 00000000..1c886aac --- /dev/null +++ b/app/src/main/res/drawable/auto_task_radio_button_un_select.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/auto_task_select_icon.xml b/app/src/main/res/drawable/auto_task_select_icon.xml new file mode 100644 index 00000000..fa4ba251 --- /dev/null +++ b/app/src/main/res/drawable/auto_task_select_icon.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_edit.xml b/app/src/main/res/drawable/ic_edit.xml index 35f23660..477d7218 100644 --- a/app/src/main/res/drawable/ic_edit.xml +++ b/app/src/main/res/drawable/ic_edit.xml @@ -3,7 +3,12 @@ android:height="24dp" android:viewportWidth="24.0" android:viewportHeight="24.0"> - + + + + + + + + diff --git a/app/src/main/res/layout/adapter_app_list_item.xml b/app/src/main/res/layout/adapter_app_list_item.xml index 960599ca..f941c927 100644 --- a/app/src/main/res/layout/adapter_app_list_item.xml +++ b/app/src/main/res/layout/adapter_app_list_item.xml @@ -7,10 +7,7 @@ android:layout_marginStart="@dimen/config_margin_5dp" android:layout_marginTop="@dimen/config_margin_5dp" android:layout_marginEnd="@dimen/config_margin_5dp" - android:paddingStart="@dimen/config_padding_10dp" - android:paddingTop="@dimen/config_padding_5dp" - android:paddingEnd="@dimen/config_padding_5dp" - android:paddingBottom="@dimen/config_padding_5dp"> + android:padding="@dimen/config_padding_5dp"> + android:scaleType="fitCenter" + android:src="@drawable/ic_phone_missed" + tools:ignore="ContentDescription,ImageContrastCheck" /> + android:scaleType="fitCenter" + android:src="@drawable/ic_sim" + tools:ignore="ContentDescription,ImageContrastCheck" /> @@ -80,8 +84,10 @@ android:layout_height="24dp" android:layout_marginStart="4dp" android:padding="3dp" + android:scaleType="fitCenter" + android:src="@drawable/ic_copy" app:tint="@color/colorStart" - tools:ignore="ContentDescription" /> + tools:ignore="ContentDescription,ImageContrastCheck" /> + tools:ignore="ContentDescription,PrivateResource,ImageContrastCheck" /> + tools:ignore="ContentDescription,PrivateResource,ImageContrastCheck" /> diff --git a/app/src/main/res/layout/adapter_contact_card_view_list_item.xml b/app/src/main/res/layout/adapter_contact_card_view_list_item.xml index 71609292..1da1989b 100644 --- a/app/src/main/res/layout/adapter_contact_card_view_list_item.xml +++ b/app/src/main/res/layout/adapter_contact_card_view_list_item.xml @@ -28,7 +28,8 @@ android:text="" android:textSize="16sp" app:sShapeType="oval" - app:sSolidColor="?attr/colorControlNormal" /> + app:sSolidColor="?attr/colorControlNormal" + tools:ignore="SpeakableTextPresentCheck,TouchTargetSizeCheck" /> + tools:ignore="ContentDescription,ImageContrastCheck" /> + tools:ignore="ContentDescription,PrivateResource,ImageContrastCheck" /> + tools:ignore="ContentDescription,PrivateResource,ImageContrastCheck" /> diff --git a/app/src/main/res/layout/adapter_frpcs_card_view_list_item.xml b/app/src/main/res/layout/adapter_frpcs_card_view_list_item.xml index 6624477d..1df04f86 100644 --- a/app/src/main/res/layout/adapter_frpcs_card_view_list_item.xml +++ b/app/src/main/res/layout/adapter_frpcs_card_view_list_item.xml @@ -9,10 +9,7 @@ android:layout_marginStart="@dimen/config_margin_5dp" android:layout_marginTop="@dimen/config_margin_5dp" android:layout_marginEnd="@dimen/config_margin_5dp" - android:paddingStart="@dimen/config_padding_5dp" - android:paddingTop="@dimen/config_padding_5dp" - android:paddingEnd="@dimen/config_padding_5dp" - android:paddingBottom="@dimen/config_padding_5dp"> + android:padding="@dimen/config_padding_5dp"> + android:scaleType="fitCenter" + android:src="@drawable/ic_menu_frpc" + tools:ignore="ContentDescription,ImageContrastCheck" /> + android:scaleType="fitCenter" + android:src="@drawable/ic_manual" + tools:ignore="ContentDescription,ImageContrastCheck" /> @@ -71,22 +72,28 @@ android:layout_width="@dimen/card_view_image_size" android:layout_height="@dimen/card_view_image_size" android:padding="@dimen/card_view_image_padding" + android:scaleType="fitCenter" + android:src="@drawable/ic_start" app:tint="@color/colorStart" - tools:ignore="ContentDescription" /> + tools:ignore="ContentDescription,ImageContrastCheck" /> + tools:ignore="ContentDescription,PrivateResource,ImageContrastCheck" /> @@ -103,8 +110,10 @@ android:id="@+id/iv_copy" android:layout_width="@dimen/config_padding_18dp" android:layout_height="@dimen/config_padding_18dp" + android:scaleType="fitCenter" + android:src="@drawable/ic_copy" app:tint="@color/colorStart" - tools:ignore="ContentDescription" /> + tools:ignore="ContentDescription,ImageContrastCheck" /> + android:padding="@dimen/config_padding_5dp"> + android:scaleType="fitCenter" + android:src="@drawable/ic_app" + tools:ignore="ContentDescription,ImageContrastCheck" /> @@ -73,24 +74,29 @@ android:id="@+id/iv_copy" android:layout_width="@dimen/card_view_image_size" android:layout_height="@dimen/card_view_image_size" - android:layout_marginStart="10dp" android:padding="@dimen/card_view_image_padding" + android:scaleType="fitCenter" + android:src="@drawable/ic_copy" app:tint="@color/colorStart" - tools:ignore="ContentDescription" /> + tools:ignore="ContentDescription,ImageContrastCheck" /> + tools:ignore="ContentDescription,PrivateResource,ImageContrastCheck" /> diff --git a/app/src/main/res/layout/adapter_senders_card_view_list_item.xml b/app/src/main/res/layout/adapter_senders_card_view_list_item.xml index 889b4801..876690c4 100644 --- a/app/src/main/res/layout/adapter_senders_card_view_list_item.xml +++ b/app/src/main/res/layout/adapter_senders_card_view_list_item.xml @@ -9,10 +9,7 @@ android:layout_marginStart="@dimen/config_margin_5dp" android:layout_marginTop="@dimen/config_margin_5dp" android:layout_marginEnd="@dimen/config_margin_5dp" - android:paddingStart="@dimen/config_padding_5dp" - android:paddingTop="@dimen/config_padding_5dp" - android:paddingEnd="@dimen/config_padding_5dp" - android:paddingBottom="@dimen/config_padding_5dp"> + android:padding="@dimen/config_padding_5dp"> + android:scaleType="fitCenter" + android:src="@drawable/icon_sms" + tools:ignore="ContentDescription,ImageContrastCheck" /> @@ -58,22 +59,28 @@ android:layout_width="@dimen/card_view_image_size" android:layout_height="@dimen/card_view_image_size" android:padding="@dimen/card_view_image_padding" + android:scaleType="fitCenter" + android:src="@drawable/ic_copy" app:tint="@color/colorStart" - tools:ignore="ContentDescription" /> + tools:ignore="ContentDescription,ImageContrastCheck" /> + tools:ignore="ContentDescription,PrivateResource,ImageContrastCheck" /> diff --git a/app/src/main/res/layout/adapter_sms_card_view_list_item.xml b/app/src/main/res/layout/adapter_sms_card_view_list_item.xml index cb296c5b..7cec6510 100644 --- a/app/src/main/res/layout/adapter_sms_card_view_list_item.xml +++ b/app/src/main/res/layout/adapter_sms_card_view_list_item.xml @@ -24,7 +24,9 @@ android:id="@+id/iv_image" android:layout_width="@dimen/card_view_image_size" android:layout_height="@dimen/card_view_image_size" - tools:ignore="ContentDescription" /> + android:scaleType="fitCenter" + android:src="@drawable/ic_sms" + tools:ignore="ContentDescription,ImageContrastCheck" /> + android:scaleType="fitCenter" + android:src="@drawable/ic_sim" + tools:ignore="ContentDescription,ImageContrastCheck" /> @@ -83,8 +87,10 @@ android:layout_width="20dp" android:layout_height="20dp" android:layout_marginBottom="3dp" + android:scaleType="fitCenter" + android:src="@drawable/ic_reply" app:tint="@color/toast_warning_color" - tools:ignore="ContentDescription,PrivateResource" /> + tools:ignore="ContentDescription,PrivateResource,ImageContrastCheck" /> diff --git a/app/src/main/res/layout/adapter_tasks_card_view_list_item.xml b/app/src/main/res/layout/adapter_tasks_card_view_list_item.xml index 889b4801..9911dfa2 100644 --- a/app/src/main/res/layout/adapter_tasks_card_view_list_item.xml +++ b/app/src/main/res/layout/adapter_tasks_card_view_list_item.xml @@ -9,74 +9,134 @@ android:layout_marginStart="@dimen/config_margin_5dp" android:layout_marginTop="@dimen/config_margin_5dp" android:layout_marginEnd="@dimen/config_margin_5dp" - android:paddingStart="@dimen/config_padding_5dp" - android:paddingTop="@dimen/config_padding_5dp" - android:paddingEnd="@dimen/config_padding_5dp" - android:paddingBottom="@dimen/config_padding_5dp"> + android:padding="@dimen/config_padding_5dp"> + android:orientation="vertical"> + android:layout_marginStart="@dimen/config_margin_5dp" + android:orientation="horizontal"> + + + android:padding="@dimen/config_padding_8dp" + android:scaleType="fitCenter" + android:src="@drawable/auto_task_icon_left_arrow" + tools:ignore="ContentDescription,ImageContrastCheck" /> - + - + android:gravity="center_vertical" + android:orientation="horizontal"> - + - + - + + + + + + + + + + + + + + + + + + + - \ No newline at end of file diff --git a/app/src/main/res/layout/item_setting.xml b/app/src/main/res/layout/item_setting.xml new file mode 100644 index 00000000..57612ab8 --- /dev/null +++ b/app/src/main/res/layout/item_setting.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index 9ba09ee2..9995fc27 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -1103,6 +1103,13 @@ Please select condition Please select action Cron + Charge + Battery + Network + Send Sms + Notification + Frpc + HttpServer Second Minute diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 96acc40c..62bf5ff4 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -30,11 +30,7 @@ #388E3C #353A3E - #FFFFFF - #000000 #00FF00 - #FF0000 - #aadcdcdc #10000000 #ffffff @@ -47,4 +43,2599 @@ #FF3700B3 #FF03DAC5 #FF018786 + + + #ff5bd16b + #ff000000 + #ffffffff + #ff7fa87f + @android:color/black + @android:color/black + @color/blackalpha40 + @color/blackalpha100 + @color/material_deep_teal_200 + @color/material_deep_teal_500 + #66000000 + #cc000000 + #ff4189eb + #ddffffff + #99ffffff + #66000000 + #cc000000 + #99ffffff + #ff299af1 + #fff65e40 + #ff22ab2e + #cc000000 + #82ffffff + #ff7d7d7d + #ff0d0d0d + #4d505050 + #ffc5c5c5 + #e6000000 + #ffffffff + #1f000000 + #1a0d84ff + #ff0099ff + #99000000 + #ffaaaaaa + #66000000 + #ff000000 + #1a000000 + #ffffffff + #99000000 + #ff000000 + #ff000000 + #b3000000 + #ffcccccc + #fffd6058 + #ffffffff + #99ffffff + #1f000000 + #8a000000 + #ff8c93b0 + #fff22424 + #19ff8a24 + #ffffffff + #fff2f2f2 + #66ffffff + #66000000 + #99000000 + #ffffffff + #ff0d84ff + #ff0073dd + #e6ffffff + #cc000000 + #fffff9ef + #80000000 + #fff2faff + #ff000000 + #ff000000 + #ffffffff + #99000000 + #cc000000 + #99000000 + #ff8c93b0 + #ff000000 + #4e000000 + #ffef6d33 + #ffd9d9d9 + #ffe3e3e3 + #26000000 + #66000000 + #ff1a1a1b + #fff5f5f5 + #ff202020 + #ff3e3e3e + #ff000000 + #80000000 + #b3000000 + #99000000 + #ff0d84ff + #ffcbeaff + #ffc5c5c5 + @color/app_manager_adv_list_text_color + #99000000 + #66000000 + #ff000000 + #66000000 + #99000000 + #1a8c93b0 + #338c93b0 + #ff8c93b0 + #26000000 + #ff8c93b0 + #4d505050 + #ff000000 + #33ff0000 + #ffff0000 + #ffffffff + #1a000000 + #1a0d84ff + #ff0d84ff + #ff8c8c8c + #ff212121 + @android:color/transparent + #4c0d84ff + #cc0d84ff + #ff36c325 + #1a000000 + #99000000 + #ff000000 + #cc000000 + #99000000 + #ffffffff + #fff2f2f2 + #4d0d84ff + #cc0d84ff + #ff0097ff + #ff0d84ff + #ff8c93b0 + #ffffffff + #ffffffff + #ffffffff + #00000000 + #1affffff + #4d000000 + #80ffffff + #ffffffff + #e6ffffff + #ff0d84ff + #cc000000 + #1affffff + #80ffffff + #1affffff + #e6ffffff + #cc000000 + #ff000000 + #ff0d84ff + #80ffffff + #ff717171 + #ffffffff + #ffffffff + #66ffffff + #ccffffff + #e6ffffff + #66000000 + #ff5bd16b + #ff55c352 + #ff5dd45a + #ccffffff + #80000000 + #ff05c575 + #ff2dac7c + #72ffffff + #80000000 + #ffffffff + #4d000000 + #66000000 + #e6000000 + #ff8c93b0 + #ffffffff + #4dffffff + #0a000000 + #14ffffff + #33ffffff + #4d000000 + #fff0f0f0 + #ff000000 + #7fffffff + #d9ffffff + #0f797979 + #ff47bd00 + #99000000 + #ff000000 + #cc0097ff + #ff33a72a + #0d000000 + #ff000000 + #66000000 + #ffffffff + #ffe6e6e6 + #ff2eafff + #ffffffff + #0f000000 + #1a0d84ff + #ff0d84ff + #ffc4c4c4 + #ff000000 + #00000000 + @color/material_grey_800 + @android:color/white + @color/material_grey_850 + @color/material_grey_50 + #fff7f7f7 + @color/white + #ffe9ebef + #ff000000 + #ffffffff + #ff000000 + #ffffffff + #a5000000 + #ff000000 + @color/blackalpha80 + #ffffffff + #f7ffffff + #fff22424 + #0f000000 + #1f000000 + #ffffa800 + #faf2f2f2 + #4dadadad + #33616161 + #ff0d84ff + #fa1a1d2d + #ff0099ff + #ff038ce7 + #ff0099ff + #1a0099ff + #ff000000 + #1a000000 + #66000000 + #0a000000 + #80000000 + #9a000000 + #0f000000 + #cc000000 + #14000000 + #ff000000 + #ff0d84ff + #ffffffff + #fff3f9ff + @color/list_divider_stroke + #66000000 + #ff0d84ff + #ff93a1ac + #ffffffff + @color/miuix_preference_primary_text_color_light + #fff5f5f5 + #ffffffff + #ff8c93b0 + #ffdbdbdb + #fff2f2f2 + #fff9f9f9 + #34000000 + #ffff7b3f + #ffffa462 + #1afb4e49 + #4dfb4e49 + #9afb4e49 + #fffec7c7 + #ffffdbd1 + #ff8c93b0 + #1a0d84ff + #0a000000 + #ffffffff + #fff77d0d + #ff000000 + #ff000000 + #1a000000 + #ff000000 + #4d000000 + #66000000 + #0d000000 + #80000000 + #82000000 + #b3000000 + #cc000000 + #f2000000 + #b3ffffff + #ff8c93b0 + @color/miuix_appcompat_button_bg_color_normal_light + @color/miuix_appcompat_button_bg_color_normal_light + @color/miuix_appcompat_button_bg_color_pressed_light + #19000000 + #66000000 + #ff00cd7e + #80ffffff + #80000000 + @color/bright_foreground_material_light + @color/bright_foreground_material_dark + @android:color/white + @android:color/black + #fff6f6f6 + #ff000000 + #0f000000 + #1a000000 + #ff3482ff + #a00d84ff + #ff0aa4a2 + #ffe66700 + #fff0f0f0 + #ff0099ff + #ffffffff + #66000000 + #ffffffff + #ff000000 + #66000000 + #1a000000 + #ffffffff + #cc000000 + #99000000 + @color/color_blue_primary_default + #ff5a595b + #ffd6d7d7 + #ffffffff + #ffffffff + #0f000000 + @android:color/transparent + #fff9f9f9 + #fffb431e + #33000000 + #99000000 + #ff000000 + #66000000 + #33000000 + #66000000 + #33000000 + #33000000 + #66000000 + #66000000 + #ff000000 + #66000000 + #33000000 + #ff424242 + #ffffffff + #03000000 + #37000000 + #99000000 + #fff20000 + #ff8c93b0 + #1a000000 + #ff974a1e + #ffffffff + #ff0d84ff + #ff0073dd + #ff999999 + #cc000000 + #ff000000 + + #ff14b9c7 + #e514b9c7 + #fff6d1a0 + #19000000 + #26000000 + #30000000 + #4d000000 + #66000000 + #0d000000 + #99000000 + #bf000000 + #cc000000 + #e5000000 + @color/miuix_color_blue_light_primary_default + @color/miuix_color_blue_light_primary_disable + @color/miuix_color_blue_light_primary_pressed + @color/miuix_color_blue_light_secondary_disable + @color/miuix_color_blue_light_secondary_default + @color/miuix_color_blue_light_secondary_pressed + #4d000000 + #ff0d84ff + #990099ff + #99000000 + #66000000 + #ff0099ff + #590099ff + #0d000000 + #ffdedede + @color/miuix_color_deep_orange_light_primary_default + @color/miuix_color_deep_orange_light_primary_disable + @color/miuix_color_deep_orange_light_primary_pressed + @color/miuix_color_deep_orange_light_secondary_default + @color/miuix_color_deep_orange_light_secondary_disable + @color/miuix_color_deep_orange_light_secondary_pressed + @color/miuix_color_deep_red_light_primary_default + @color/miuix_color_deep_red_light_primary_disable + @color/miuix_color_deep_red_light_primary_pressed + @color/miuix_color_deep_red_light_secondary_default + @color/miuix_color_deep_red_light_secondary_disable + @color/miuix_color_deep_red_light_secondary_pressed + #66000000 + #80000000 + #fff5f6f7 + #ffffda44 + #ffffffff + #ffffffff + @color/miuix_color_green_light_primary_default + @color/miuix_color_green_light_primary_disable + @color/miuix_color_green_light_primary_pressed + @color/miuix_color_green_light_secondary_default + @color/miuix_color_green_light_secondary_disable + @color/miuix_color_green_light_secondary_pressed + @color/miuix_color_grey_light_primary_default + @color/miuix_color_grey_light_primary_disable + @color/miuix_color_grey_light_primary_pressed + @color/miuix_color_grey_light_secondary_default + @color/miuix_color_grey_light_secondary_disable + @color/miuix_color_grey_light_secondary_pressed + #ff30a8ff + #ffffffff + @color/color_white_50 + #ff878787 + #ffd3d3d3 + #ff4a72ff + #4d000000 + #e6000000 + #8b000000 + #73000000 + #ffffffff + #24000000 + #fffdfdfd + #ffffffff + #ff000000 + #ffffffff + #e6000000 + #33000000 + #99000000 + #72000000 + #ff000000 + #ff000000 + #99000000 + #99000000 + #ff000000 + @color/miuix_color_orange_light_primary_default + @color/miuix_color_orange_light_primary_disable + @color/miuix_color_orange_light_primary_pressed + @color/miuix_color_orange_light_secondary_default + @color/miuix_color_orange_light_secondary_disable + @color/miuix_color_orange_light_secondary_pressed + #ff000000 + @color/privacy_input_model_guide_color + @color/miuix_color_purple_light_primary_default + @color/miuix_color_purple_light_primary_disable + @color/miuix_color_purple_light_primary_pressed + @color/miuix_color_purple_light_secondary_default + @color/miuix_color_purple_light_secondary_disable + @color/miuix_color_purple_light_secondary_pressed + @color/miuix_color_red_light_primary_default + @color/miuix_color_red_light_primary_disable + @color/miuix_color_red_light_primary_pressed + @color/miuix_color_red_light_secondary_default + @color/miuix_color_red_light_secondary_disable + @color/miuix_color_red_light_secondary_pressed + #99000000 + #ff000000 + #5cffffff + #ff0097ff + #4cffffff + #ffffffff + #66ffffff + #ff000000 + #96000000 + #960097ff + #ffffffff + #66ffffff + #ff0097ff + #26ffffff + #e6ffffff + #1fffffff + #e6ffffff + #ff0097ff + #d818181c + #2218181c + #f218181c + #33ffffff + #33ffffff + #0dffffff + #21ffffff + #b2ffffff + #4cffffff + #ff23b9ff + #e6ffffff + #b8ffffff + #ff23b9ff + #66ffffff + #23ffffff + #e5ffffff + #ccffffff + #66ffffff + #99000000 + #4d0097ff + #b8ffffff + #cc0097ff + #ffffffff + #fff66755 + #03ffffff + #0affffff + #0fffffff + #66ffffff + #7dffffff + #e5ffffff + @color/miuix_color_yellow_light_primary_default + @color/miuix_color_yellow_light_primary_disable + @color/miuix_color_yellow_light_primary_pressed + @color/miuix_color_yellow_light_secondary_default + @color/miuix_color_yellow_light_secondary_disable + @color/miuix_color_yellow_light_secondary_pressed + #1a000000 + #1a000000 + #ff000000 + #ff30a8ff + #14000000 + #ff121212 + #ffcf6679 + #ffffffff + #ff000000 + #ff000000 + #ff000000 + #ffffffff + #ffba86fc + #ff000000 + #ff3700b3 + #ff03dac6 + #ff03dac6 + #ff121212 + #ffffffff + #ffb00020 + #ff000000 + #ffffffff + #ffffffff + #ff000000 + #ff000000 + #ff6200ee + #ff3700b3 + #ff3700b3 + #ff03dac6 + #ff018786 + #ffffffff + @android:color/transparent + #14000000 + #44000000 + #0a000000 + #0f000000 + #1affffff + #2effffff + #ff323232 + #cc000000 + #cc000000 + #72000000 + #99000000 + #80bebebe + #80323232 + #ffbebebe + #ff323232 + #33ffffff + #4d000000 + #fffafafa + #ff000000 + #ff47ffe6 + #ff29cbff + #ffffcf72 + #ffff6442 + #ff42eeff + #ffffa760 + #ff07bdff + #ffff6442 + #ffffffff + #fffafafa + #ff000000 + #ff000000 + #59ffffff + #ffff7043 + #ffff5722 + #0f797979 + @color/color_yellow_primary_default + @color/color_orange_primary_default + @color/color_deep_orange_primary_default + #99ffffff + #4dffffff + #e6ffffff + #1fffffff + #0d000000 + #0dffffff + #0a000000 + #ff0097ff + #ffffffff + #ffffffff + #cc000000 + #0a000000 + #66000000 + #4d000000 + #99000000 + #b3000000 + #99000000 + #ffd4b773 + @color/color_yellow_primary_default + @color/color_deep_orange_primary_default + @color/color_grey_primary_default + @color/color_orange_primary_default + @color/color_grey_primary_default + #b3ffffff + #66000000 + #ffffffff + #08000000 + #ffe0e0e0 + #4d000000 + #ff000000 + @color/color_blue_secondary_default + #ffffffff + @color/color_grey_primary_default + #fff8fafb + #1a000000 + #fff5f6f8 + #1a000000 + #ffff6735 + #fff8f8f8 + #fff6f6f6 + #fff6f6f6 + #99000000 + #ffffffff + #fff6f6f6 + #ff000000 + #4d000000 + @color/color_deep_orange_primary_default + #33000000 + #99000000 + #fff9f9f9 + #ffdfdfdf + #ff000000 + #a6000000 + #80000000 + #cc000000 + #99000000 + #ff000000 + #cdffffff + #98000000 + #b3000000 + #b0000000 + #fff4f3f0 + #aa000000 + #80808080 + #ffffffff + #b3ffffff + #ffff9c1a + #ff0099ff + #4d000000 + #1a000000 + #ff0099ff + #ffd9f1ff + #99000000 + @color/color_blue_primary_default + @color/color_deep_orange_primary_default + #fffafafa + #66000000 + #ff10aeff + #33000000 + #ffffffff + #cc000000 + #14ffffff + #66ffffff + #0fffffff + #ccffffff + #b3ffffff + #70000000 + #66ffffff + #ff0d84ff + #ff0d84ff + #fff2f2f2 + #ffffffff + #ffa2b3ce + #4da3b3cd + @android:color/white + @android:color/black + #ff05c575 + #9927b769 + #ff3c83f9 + #fff7f7f7 + @color/color_14b9c7 + #80ffffff + #ff2cc6ff + #ffef9100 + #ff3d64ff + #ff11fefc + #ffffffff + @color/whitealpha20 + @color/whitealpha50 + @android:color/transparent + #4dffffff + #e6ffffff + #8bffffff + #ffffffff + #fff93939 + #ffffbb33 + #ff30a8ff + #ff000000 + #4dffffff + #4df93939 + #4dffbb33 + #4d30a8ff + #4d000000 + #ffffffff + @color/white + @color/color_black_trans_10 + @color/blackalpha60 + @color/blackalpha80 + #ff8c93b0 + @color/blackalpha60 + #ff000000 + #ffecedf3 + #ffbec3d8 + #ffbec3d8 + #ff75f9f7 + #f0151515 + #331bc6f1 + #ff1bc6f1 + #ff1bc6f1 + #801bc6f1 + #cc000000 + #ff0d1421 + #cc1a1d2d + #ff1d2531 + #b31d2531 + #ff30a8ff + #ffb2b6cd + #bfb2b6cd + #ff55a1cd + #ff6e6f70 + #ff47c0ff + #ff0d84ff + #80ffffff + #ffff4646 + #ffff4646 + #ff47c0ff + #03ffffff + #0affffff + #14ffffff + #33ffffff + #ccffffff + #30ffffff + #12ffffff + #ff555555 + #e6dddddd + #1fffffff + #ff1cac15 + #66ffffff + #66b4fdfd + #66000000 + #ffb2b6cd + #e6060c17 + #bfffffff + #ffe9e9e9 + @color/black + #e6aef9f9 + #ffffffff + #e6ffffff + #b3ffffff + #99ffffff + #ff777777 + #ff30a8ff + #ff30a8ff + #e5ffffff + #ff242424 + #ffd3d3d3 + #ffeaeaea + #66ffffff + #ffb2b6cd + #ff0077cc + #ffbbbbbb + #ff30a8ff + #ffffffff + #1a000000 + #b3000000 + #ff131218 + #11ffffff + #ff222327 + #ccffffff + #ffb0fff4 + #80b0fff4 + #26000000 + #ff2086c3 + #99ffffff + #33ffffff + #ff32b2ff + #ffffffff + #ff17b4ff + #3332b2ff + #ff5c4015 + #ffe3be86 + #99151515 + #b3ffffff + #e6ffffff + #ffeeeeee + #ff828695 + #ffbdc1da + #ff40b8ff + #ff68e1ff + #ff30a8ff + #ffb9b9b9 + #ffbfbfbf + #ffe9d9b1 + #ccffffff + #ff242424 + #ff277af7 + #80ffffff + #e6ffffff + #cc32b2ff + #ffb8713e + #ffffd178 + #b2ffd178 + #ffffd178 + #e6000000 + #33144876 + #ff3fa5ff + #ff222327 + #ffb0fff4 + #ff0dffe1 + #e5ffffff + #b3ffffff + #809efffe + #ff30a8ff + #7d30a8ff + #ff0dffe1 + #80ffffff + #80000000 + @color/whitealpha50 + #ff000000 + #33000000 + #ff23242c + #ff0dffe1 + #80d6fff9 + #ffffffff + #ffe79a23 + #ff1c273d + #ff1c273d + #ff3d64ff + #983074ff + #ff0ad975 + #ffbbbbbb + #ffff3535 + #b2ffffff + #33000000 + #19ffffff + #ffffffff + #4d000000 + #b2000000 + #ffffffff + #e6545454 + #75737373 + #cc818181 + #33ffffff + #0d3a3a3a + @color/whiltealpha80 + #e55dd45a + #ffffffff + #fff9f9f9 + #e6000000 + #7dffffff + #ffffffff + #7f000000 + #cc000000 + #cccfcfcf + #ff4daa0f + #fff20000 + #ffed9523 + #6680cbc4 + #66009688 + #7f010101 + #ff000000 + #fff6f6f6 + #ffffffff + #bf000000 + #fff7f7f7 + #ff0d84ff + #ff000000 + #ffffffff + #fff7f7f7 + #ff8c93b0 + #ff0099ff + #cc000000 + #ff000000 + #00000000 + #ff000000 + #1a0d84ff + #ff0d84ff + #b3000000 + #ff8c93b0 + #ccffffff + #e6ffffff + #1affb21d + #ffffb21d + @color/transparent + #e6000000 + #66000000 + #ff89f9df + #fff7f7f7 + + #12000000 + #ffe3e3e3 + #99000000 + #ff7d7d7d + #ffe1af4a + #51000000 + #ccffffff + #fff7d757 + #ff850400 + #ff0097ff + #f20097ff + #ffffffff + #ffffffff + #ff000000 + #66000000 + #33000000 + #80000000 + #ff000000 + #8c000000 + #ffffffff + #1a000000 + #ffffffff + #ff3482ff + #ff8c93b0 + #14000000 + #19000000 + #ffffffff + #99000000 + #ff000000 + #ffff5b29 + + #ff000000 + #4c000000 + #ff0099ff + #ff0099ff + #ffff4411 + #ffff4411 + #4d5abdf5 + #1a3482ff + #2e3482ff + #4dff8956 + #0dff4411 + #2eff4411 + #ff0aa4a2 + #ffdfdfdf + #ffaaaaaa + #ffd9d9d9 + #ffb1b1b1 + #ffd6d6d7 + #8c000000 + #ff37474f + #ff263238 + #ff21272b + #ff80cbc4 + #ff008577 + #fff5f5f5 + #ffe0e0e0 + #fffafafa + #ff757575 + #ff424242 + #ff303030 + #ff212121 + #ffffffff + #ffffffff + #ffffffff + #ffffffff + #fff1592a + #ff23a9db + #ff5cbf5c + #ff4e9de1 + #ffdcdcdd + #ffdfdfdf + #fffdb53f + #ff69d0d1 + #99000000 + #ff926ce6 + #ff5ccadb + #ff4b4461 + #ffeb7c36 + #80000000 + #ff000000 + #ff23a9db + #ff65a0f0 + #66292929 + #c0000000 + @color/miuix_color_blue_dark_primary_default + @color/miuix_color_blue_light_primary_default + #99000000 + #33000000 + #ff000000 + #ffffffff + #66ffffff + #66000000 + #66ffffff + #66000000 + #66ffffff + #66000000 + #ffffffff + #ff000000 + #80ffffff + #99000000 + #4dffffff + #4d000000 + @color/miuix_color_white_40_no_alpha + @color/miuix_color_black_40_no_alpha + #ccffffff + #cc000000 + #ccffffff + #cc000000 + #4dffffff + #4d000000 + @color/miuix_color_white_50_no_alpha + @color/miuix_color_black_40_no_alpha + #e6ffffff + #cc000000 + #ccffffff + #cc000000 + #ffffffff + #ccffffff + #72ffffff + #4d000000 + #cc000000 + #ccffffff + @color/miuix_appcompat_white + #66ffffff + #4d000000 + #ccffffff + #cc000000 + #ccffffff + #73000000 + #ccffffff + #cc000000 + #26ffffff + #26000000 + #ccffffff + #cc000000 + #ccffffff + #73000000 + #ccffffff + #cc000000 + #ff666e80 + #ffffffff + #ff666e80 + #ffffffff + #ff666e80 + #ffffffff + #ccffffff + #cc000000 + #ccffffff + #cc000000 + @color/miuix_appcompat_white + @color/miuix_appcompat_white + #99000000 + #99ffffff + #ff191919 + #fff7f7f7 + @color/miuix_color_blue_light_primary_default + @color/miuix_color_blue_dark_primary_default + #ff191919 + #fff7f7f7 + #40ffffff + #80000000 + @color/miuix_color_blue_light_primary_default + @color/miuix_color_blue_dark_primary_default + #66000000 + #80ffffff + #ff2c2c2e + #ffffffff + #99000000 + #66000000 + #4dffffff + #4d000000 + + #66ffffff + #66000000 + #66ffffff + #66000000 + #ffffffff + #ff000000 + @color/miuix_color_red_light_primary_default + #ff000000 + #b3ffffff + #cc000000 + #4dffffff + #66000000 + #a65c5c5c + #a66b6b6b + #ff000000 + #ffffffff + #ccffffff + #4cffffff + #cc000000 + #4c000000 + #26ffffff + #0f000000 + #0fffffff + #1a000000 + @color/miuix_color_blue_dark_primary_disable + @color/miuix_color_blue_light_primary_disable + @color/miuix_color_blue_dark_primary_default + @color/miuix_color_blue_light_primary_default + #ff0070c1 + #ff038ce7 + @color/miuix_color_blue_dark_primary_disable + @color/miuix_color_blue_light_primary_disable + @color/miuix_color_blue_dark_primary_default + @color/miuix_color_blue_light_primary_default + @color/miuix_color_blue_dark_primary_pressed + @color/miuix_color_blue_light_primary_pressed + #1affffff + #4dffffff + #4dffffff + #e6ffffff + #ffffffff + #ffec0c0c + #b3ec2700 + #7f3ec234 + #7f4b8d0e + #ff3ec234 + #b34b8d0e + #4cffffff + #4cffffff + #ffffffff + #ffffffff + #ffffffff + #ff000000 + #ffffffff + #ffffffff + @color/miuix_appcompat_highlight_disabled_light + @color/miuix_color_blue_dark_primary_default + @color/miuix_color_blue_light_primary_default + #ff222224 + @color/miuix_appcompat_white + #14ffffff + #0d000000 + #ff000000 + @color/miuix_color_blue_dark_primary_default + @color/miuix_color_blue_light_primary_default + @color/miuix_color_blue_light_primary_default + @color/miuix_color_blue_dark_primary_default + #cc000000 + #ccffffff + @color/miuix_appcompat_dialog_bg_color_light + @color/miuix_appcompat_dialog_default_bg_color_dark + @color/miuix_appcompat_dialog_default_bg_color_light + #27000000 + #ff242424 + #ffffffff + @color/miuix_color_blue_dark_primary_disable + @color/miuix_color_blue_light_primary_disable + @color/miuix_color_blue_dark_primary_default + @color/miuix_color_blue_light_primary_default + #4dffffff + #4d000000 + #b3ffffff + #4dffffff + #ffffffff + #e6ffffff + #ffffffff + #cc000000 + @color/miuix_color_blue_dark_primary_default + @color/miuix_color_blue_light_primary_default + #ffffffff + #ffffffff + #ccffffff + #cc000000 + #66ffffff + #66000000 + @color/miuix_color_deep_red_dark_primary_default + @color/miuix_color_deep_red_light_primary_default + #ff363636 + #fff0f0f0 + #e6ffffff + #ff000000 + #4cffffff + #4c000000 + #1a277af7 + #1a3482ff + #4dffffff + #4d000000 + #e6ffffff + #ff000000 + #e6ffffff + #ff000000 + #ccffffff + #cc000000 + #ff242424 + #ffffffff + @color/miuix_color_blue_light_primary_default + @color/miuix_color_blue_dark_primary_default + @color/miuix_color_blue_light_primary_default + @color/miuix_color_blue_dark_primary_default + @color/miuix_color_blue_light_primary_default + #e6ffffff + #ff000000 + #80ffffff + #a6000000 + #7fffffff + @color/miuix_appcompat_bright_foreground_dark_disabled + #7f000000 + @color/miuix_appcompat_bright_foreground_light_disabled + #4dffffff + #4d000000 + #1affffff + #1a000000 + #59000000 + #ff222224 + #ffffffff + #331369e9 + #1a3482ff + #ff222224 + #ffffffff + #14ffffff + #0d000000 + @color/miuix_color_blue_dark_primary_default + @color/miuix_color_blue_light_primary_default + #4dffffff + #33000000 + #e6ffffff + #ff000000 + #e6ffffff + #cc000000 + #ff262626 + #fff0f0f0 + @color/miuix_color_blue_dark_primary_default + @color/miuix_color_deep_red_light_primary_default + @color/miuix_color_blue_light_primary_default + #00000000 + #1a000000 + #4dffffff + #4c000000 + #1fffffff + #0a000000 + #1fffffff + #0a000000 + #e6ffffff + #ff000000 + #4cffffff + #66000000 + @color/miuix_appcompat_fab_color_light + @color/miuix_color_blue_dark_primary_default + @color/miuix_color_blue_light_primary_default + #ccffffff + #cc000000 + #80ffffff + #99000000 + #ccffffff + #cc000000 + #1a000000 + #00000000 + #00ffffff + #1fffffff + #ffffffff + #00000000 + #00ffffff + #26ffffff + #1fffffff + #0f000000 + #ffffffff + #08ffffff + #05000000 + #0affffff + #08000000 + #28ffffff + #0d000000 + #08ffffff + #08ffffff + #08000000 + #05000000 + #12ffffff + #0affffff + #08000000 + #08000000 + #33ffffff + #28ffffff + #1f000000 + #0d000000 + #00ffffff + #ccffffff + #cc000000 + #80ffffff + #99000000 + #ff000000 + #ffffffff + #0dffffff + #0d000000 + #26ffffff + #ffffffff + #4cffffff + #4c000000 + #7f000000 + #ccffffff + #cc000000 + #66ffffff + #66000000 + @color/miuix_color_blue_light_primary_default + #ff000000 + #ffffffff + #1fffffff + #0a000000 + @color/miuix_appcompat_transparent + @color/miuix_appcompat_transparent + #ff242424 + @color/miuix_appcompat_white + #ff242424 + @color/miuix_appcompat_white + @color/miuix_appcompat_transparent + @color/miuix_appcompat_white + #ff242424 + @color/miuix_appcompat_white + #ff242424 + @color/miuix_appcompat_white + #ff242424 + @color/miuix_appcompat_white + @color/miuix_appcompat_floating_window_bg_color_dark + @color/miuix_appcompat_transparent + #ff222224 + #ccffffff + #80ffffff + #99000000 + #59ffffff + #ff33aaff + #7fffffff + #ff33aaff + @color/miuix_color_blue_dark_primary_default + @color/miuix_color_blue_light_primary_default + #803482ff + @color/miuix_color_blue_dark_primary_default + @color/miuix_color_blue_light_primary_default + #ff038ce7 + #4d277af7 + #263482ff + #4cffffff + #66000000 + #66ffffff + #4d000000 + #e6ffffff + #ff000000 + #e6ffffff + #e4000000 + #4dffffff + #4d000000 + #66ffffff + #66000000 + @color/miuix_color_blue_dark_primary_default + @color/miuix_color_blue_light_primary_default + #14ffffff + #0a000000 + @color/miuix_appcompat_transparent + @color/miuix_appcompat_white + #14ffffff + #14000000 + #1a277af7 + #1a3482ff + @color/miuix_appcompat_dialog_default_bg_color_dark + @color/miuix_appcompat_dialog_default_bg_color_light + #14ffffff + #0a000000 + #ff242424 + @color/miuix_appcompat_white + @color/miuix_appcompat_transparent + @color/miuix_appcompat_white + @color/miuix_appcompat_floating_window_bg_color_dark + @color/miuix_appcompat_white + #26ffffff + #14000000 + #ff0f0f0f + @color/miuix_appcompat_white + @color/miuix_color_blue_dark_primary_default + @color/miuix_color_blue_light_primary_default + #4dffffff + #4d000000 + @color/miuix_appcompat_list_secondary_text_color_normal_light + #73ffffff + #99000000 + #73ffffff + #99000000 + @color/miuix_color_blue_dark_primary_default + @color/miuix_color_blue_light_primary_default + #66ffffff + #4d000000 + #e6ffffff + #ff000000 + #e6ffffff + #ff000000 + #66ffffff + #73000000 + #4dffffff + #33000000 + #ffffffff + #ff000000 + #e6ffffff + #cc000000 + @color/miuix_color_red_dark_secondary_default + @color/miuix_color_red_light_secondary_default + @color/miuix_color_blue_dark_secondary_default + @color/miuix_color_blue_light_secondary_default + @color/miuix_color_blue_dark_primary_default + @color/miuix_color_red_dark_primary_default + @color/miuix_color_red_light_primary_default + @color/miuix_color_blue_light_primary_default + @color/miuix_color_yellow_dark_primary_default + @color/miuix_color_yellow_light_primary_default + @color/miuix_color_yellow_dark_secondary_default + @color/miuix_color_yellow_light_secondary_default + #ffffffff + #ff242424 + @color/miuix_color_blue_light_primary_default + @color/miuix_color_blue_dark_primary_default + @color/miuix_appcompat_white + @color/miuix_appcompat_white + @color/miuix_appcompat_black + @color/miuix_appcompat_white + #33ffffff + #ffeef1f5 + #33ffffff + #66ffffff + #26082543 + #1a597098 + #14ffffff + #ffd9d9d9 + @color/miuix_color_blue_dark_primary_default + @color/miuix_color_blue_light_primary_default + #ccffffff + #cc000000 + @color/miuix_color_blue_dark_primary_default + @color/miuix_color_blue_light_primary_default + #e6ffffff + #ff000000 + #1affffff + #1a000000 + @color/miuix_color_blue_dark_primary_default + @color/miuix_color_blue_light_primary_default + @color/miuix_color_blue_dark_primary_pressed + @color/miuix_color_blue_light_primary_pressed + #80000000 + #ccffffff + #ffffffff + @color/miuix_appcompat_white + @color/miuix_appcompat_white + #40ffffff + #ccffffff + #ffffffff + #ffffffff + #4dffffff + #b3ffffff + #ffffffff + #ffffffff + #33ffffff + #21ffffff + #0d000000 + #19000000 + @color/miuix_color_blue_dark_primary_default + @color/miuix_color_blue_light_primary_default + #19000000 + @color/miuix_color_grey_dark_primary_default + @color/miuix_color_grey_light_primary_default + #7f000000 + #66ffffff + #73000000 + #73000000 + @color/miuix_color_blue_dark_secondary_default + @color/miuix_color_blue_light_secondary_default + #ff242424 + #ffffffff + @color/miuix_color_grey_dark_primary_default + @color/miuix_color_grey_light_primary_default + #ff2c2c2c + #ffffffff + #1a000000 + #1a000000 + #4d000000 + #1a000000 + #4d277af7 + #4d3482ff + #e6277af7 + #e60084ff + @color/miuix_color_blue_dark_primary_default + @color/miuix_color_blue_light_primary_default + #8bffffff + #4d000000 + #e6ffffff + #cc000000 + #4dffffff + #8b000000 + #4de52c20 + #4dfa311b + @color/miuix_color_red_dark_primary_default + @color/miuix_color_red_light_primary_default + #ccffffff + #cc000000 + #e6ffffff + #ff000000 + #ffffffff + #ff000000 + #00000000 + #ffffffff + #80000000 + #ccffffff + #66000000 + #ff999999 + #ff277af7 + #4d277af7 + #ff3482f7 + #ff3885f8 + #33277af7 + #33277af7 + #ff17263d + #ff1c2a41 + #ff3482ff + #4d3482ff + #ff317af0 + #ff3078eb + #1a3482ff + #1a3482ff + #ffdde4f0 + #ffd8e0eb + #0fffffff + #14ffffff + #ffee4f1c + #4dee4f1c + #ffef5a2a + #ffef5d2e + #33ee4f1c + #33ee4f1c + #ff3c1e15 + #ff41231a + #ffff5b29 + #4dff5b29 + #fff05627 + #ffeb5426 + #1aff5b29 + #1aff5b29 + #fff0e1dc + #ffebdcd7 + #ffd70015 + #4dd70015 + #ffd90f23 + #ffda1428 + #33d70015 + #33d70015 + #ff380f13 + #ff3c1418 + #fff30018 + #4df30018 + #ffe40017 + #ffe00016 + #1af30018 + #1af30018 + #ffefd7da + #ffead3d5 + #ff10c550 + #4d10c550 + #ff1ec85b + #ff23ca5e + #3310c550 + #3310c550 + #ff12341e + #ff173823 + #ff36d167 + #4d36d167 + #ff33c461 + #ff32c05f + #1a36d167 + #1a36d167 + #ffddebe2 + #ffd8e6dd + #ff787e96 + #4d787e96 + #ff80869c + #ff83889e + #33787e96 + #33787e96 + #ff26272b + #ff2a2b30 + #ff8c93b0 + #4d8c93b0 + #ff848aa5 + #ff8187a2 + #1a8c93b0 + #1a8c93b0 + #ffe4e5e8 + #ffe0e0e3 + #0f000000 + #14000000 + #ffee8114 + #4dee8114 + #ffef8922 + #ffef8b27 + #33ee8114 + #33ee8114 + #ff3c2813 + #ff412c18 + #ffff8514 + #4dff8514 + #fff07d13 + #ffeb7a12 + #1aff8514 + #1aff8514 + #fff0e4d9 + #ffebe0d5 + #ff7775f1 + #4d7775f1 + #ff7f7df2 + #ff8280f2 + #337775f1 + #337775f1 + #ff26253c + #ff2a2a41 + #ff8482ff + #4d8482ff + #ff7c7af0 + #ff7978eb + #1a8482ff + #1a8482ff + #ffe4e4f0 + #ffe0e0eb + #ffe52c20 + #4de52c20 + #ffe7392d + #ffe73d32 + #33e52c20 + #33e52c20 + #ff3b1815 + #ff3f1d1a + #fffa311b + #4dfa311b + #ffeb2e19 + #ffe62d19 + #1afa311b + #1afa311b + #fff0dcda + #ffebd7d5 + #66ffffff + #ff666666 + #80ffffff + #ff7f7f7f + #ffeca200 + #4deca200 + #ffeda80f + #ffeea914 + #33eca200 + #33eca200 + #ff3b2d0f + #ff403214 + #ffffb21d + #4dffb21d + #fff0a71b + #ffeba41b + #1affb21d + #1affb21d + #fff0e8da + #ffebe3d5 + #14000000 + @color/miuix_folme_color_hover_tint_light + #0fffffff + #0f000000 + @color/miuix_folme_color_touch_tint_light + #14ffffff + #09818181 + #18cfcfcf + #22f4f4f4 + #14000000 + #04000000 + #0d000000 + #12000000 + #ffffffff + #ff000000 + @color/miuix_color_blue_light_primary_default + #ff000000 + #26000000 + #80000000 + #4d000000 + @color/miuix_color_blue_light_primary_default + @color/miuix_preference_category_text_color_light + #80ffffff + #ff8c93b0 + @color/miuix_color_blue_dark_secondary_default + @color/miuix_color_blue_light_secondary_default + #1fffffff + #10000000 + @color/miuix_color_blue_dark_secondary_pressed + @color/miuix_color_blue_light_secondary_pressed + #ff2c2c2c + #ffe9e9e9 + #ff0073dd + @color/miuix_color_blue_light_primary_default + #21ffffff + #fff6f6f6 + #ffffffff + #ffffffff + #ff000000 + #99ffffff + #7fffffff + #99000000 + #ffffffff + #e5ffffff + #ff000000 + #33ffffff + #1a000000 + #ffffffff + #ff000000 + @color/miuix_appcompat_black + @color/miuix_appcompat_white + #14ffffff + #1f000000 + #1fffffff + #0a000000 + @color/miuix_preference_primary_text_color_light + #e6ffffff + #4dffffff + #4d000000 + #ff000000 + #4dffffff + #4d000000 + #66ffffff + #66000000 + @color/miuix_preference_secondary_text_color_light + @color/miuix_color_blue_dark_primary_default + @color/miuix_color_blue_light_primary_default + #80ffffff + #4dffffff + #4d000000 + #99000000 + #1fffffff + #0a000000 + #ff000000 + #ff808080 + @color/miuix_color_blue_light_primary_default + #ff808080 + @color/miuix_color_blue_light_primary_default + #ff808080 + #00000000 + #ffffffff + #ffffffff + #ff000000 + #61000000 + #00ffffff + #52000000 + #6b000000 + #1f000000 + #0a000000 + #00000000 + #de000000 + #ff0d84ff + #605fd7ff + #00000000 + #60ffa8a4 + #60ffd074 + #ffffffff + #6678dafb + #66f87261 + #66ef523e + #66ffa874 + #66fe9038 + #bf000000 + #7f000000 + #fffc6f5d + #7ffc6f5d + #fffb8342 + #7ffb8342 + #4cffffff + #20000000 + #50000000 + #66000000 + #8cffffff + #fff9f9f9 + #ccffffff + #ff666666 + #ffebebeb + #26ffffff + #26000000 + #ffff6c47 + #ff000000 + #ffffffff + #ffffffff + #19000000 + #80000000 + #ff000000 + #ff333333 + #ff000000 + #66000000 + #ff8c93b0 + #7f439df8 + #ffffffff + #fff66755 + #ffff7d2e + #ffffffff + #26000000 + #66000000 + #ff000000 + #33000000 + #ffffffff + #00ffffff + #ff4a4a4a + #ff414141 + #ff4a4a4a + #99000000 + #ffeaeaea + #ff9ccffc + #ffeaeaea + #ff9ccffc + #ffffe661 + #0df5f5f5 + #1affffff + #ff47ffb3 + #ff0097ff + #ff63ce35 + #cc000000 + #66000000 + #20000000 + @color/androidx_core_secondary_text_default_material_light + #ffff5722 + #ffff8f3a + #ff24ca8d + #99f22424 + #fff22424 + #1a0d84ff + #ff0d84ff + #ff9e9e9e + #ffd8d8d8 + #65ffffff + #ff424242 + #99000000 + #ff000000 + #99000000 + #33000000 + #99000000 + #ffff7433 + #fff22424 + #fff77060 + #cc000000 + #ff000000 + #80000000 + #ff000000 + #ff333333 + #ffd9d9d9 + #ff598dda + #fff86b4f + #ff497cc7 + #fff65e40 + #e6497cc7 + #ccf65e40 + #99000000 + #1a000000 + #7f000000 + #ffebebeb + #ff0d84ff + #ff0c7df2 + #ffffffff + #66000000 + #ff0099ff + #4d000000 + #cc000000 + #4d000000 + #ff38aaff + #ff1a171f + #e6ffffff + #ffffffff + #ff0d8cff + #ffffffff + #b3000000 + #ff000000 + #ffff7033 + @android:color/transparent + #fff8f8f8 + #ff000000 + #fffa6345 + #ff27b769 + #ff4a9bf7 + #ff3e3e3e + #cc000000 + #ffffffff + #ffb1b1b1 + #ff737373 + #ff212121 + #99000000 + #7f000000 + #7f000000 + #66000000 + #99000000 + #ffffffff + #1a0d84ff + #ff000000 + #ff000000 + #ff0d84ff + #ff8c93b0 + #ff0d84ff + #ff33a72a + #ff8c93b0 + #ff000000 + #99ffffff + #fffafafa + #66000000 + @color/pc_main_activity_background_color + #ffffffff + #ffefeff0 + #ffffffff + #cc000000 + #ffffffff + #0d000000 + #ff00cc44 + #ff36d167 + #3339da5f + #ff39da5f + #26000000 + #ffff5500 + #fffa311b + #33ff5500 + #ffececec + #ff0099ff + #330099ff + #ff3482ff + #330099ff + #00ffffff + #ff0099ff + #4d000000 + #ff3d9dff + #ff39da5f + #ff0099ff + #b3000000 + #cc0d84ff + #99000000 + #ff000000 + #80000000 + #cc000000 + #cc000000 + #66000000 + #66000000 + #ff5595f5 + #ff8c93b0 + @color/miuix_color_green_light_primary_default + @color/miuix_color_green_light_primary_pressed + #fff7f7f7 + #14000000 + #fffafafa + #fff5f6f7 + @color/miuix_color_blue_light_primary_default + #80000000 + #b3000000 + #b3000000 + #fff22424 + #cc000000 + #ff0099ff + #ff0099ff + #ffeeeeee + #4d000000 + #ff000000 + #ff33a72a + #ffffffff + #ffebebeb + #eeffffff + #ffffffff + #ff439df8 + #ffb2edc3 + #ffffbfbb + #ffb1d7ff + #ffffe1a6 + #fff5f5f5 + #fff0f0f0 + #1a000000 + #ffffffff + #ffe6e6e6 + #33000000 + #ff439df8 + #ff5595f5 + #ffffffff + #99000000 + #ff000000 + #80000000 + #66000000 + #fff7f7f7 + #ff0099ff + #ffff5500 + #ff0075ed + #cc000000 + #ff0d84ff + #99000000 + #ffffffff + #ffe6e6e6 + #ff8c93b0 + #ff42b74c + #ffe5e5e5 + #ffdf3535 + #ff50b017 + #fffdd000 + #ff50b017 + #ff4799df + #1a000000 + #ff4799df + #00000000 + #fff12f2f + #ffec8600 + #ffecb200 + #ffd4d500 + #ff8dc200 + #ff0abd5b + #4d000000 + #4d000000 + #ff4799df + #ff4799df + #ff0d84ff + #ffeef1f5 + #99000000 + #99000000 + #3f000000 + #a5000000 + #fffffb8f + #ff33aaff + #cc000000 + #ff8c93b0 + #fffa6345 + #ffed5e41 + #fff9ccc3 + #ff494e50 + #e5000000 + #1a0d84ff + #ff0d84ff + #0aff5500 + #ffff5500 + #ff0099ff + #ff67c2ff + @color/miuix_color_blue_light_secondary_default + @color/miuix_color_blue_light_secondary_pressed + #fffafafa + #ffff5500 + #ffffa170 + #99000000 + #ffff5500 + #ffff6c47 + #ffff6c47 + #ffea6341 + #ffea6341 + #0a000000 + #1f000000 + #0d0d84ff + #1e0d84ff + #0a000000 + #cc000000 + #ff000000 + #cc000000 + #fff22424 + #ff0d84ff + #0f000000 + #ffffffff + #cc000000 + #ff000000 + #ff000000 + #ff000000 + #ffffffff + #ff0d84ff + #1a0d84ff + #ff36d167 + #4d000000 + #ff55606b + #ff0099ff + #99000000 + #ffdfdfdf + #ffffffff + #80000000 + #cc000000 + #ffff5500 + #ffffffff + #99000000 + #ff000000 + #fff22424 + #ff0d84ff + #00000000 + #ffe5e5e5 + #ff31e36f + #ff84f3a3 + #ffff6063 + #ffff7600 + #ffffffff + #b2ffffff + #d9000000 + #b2ffffff + #e6ffffff + #80ffffff + #ffffffff + #fff2f2f2 + #99000000 + #ff000000 + #ff3c3c3c + #8a262626 + #0f000000 + #0f000000 + #e6ffffff + #4d000000 + #ff0d84ff + #990d84ff + #99000000 + #59000000 + #ffffffff + #ff0d84ff + #80000000 + #66000000 + #ccfe3d28 + #cc000000 + #fffafafa + #ff0099ff + #330099ff + #ffdddddd + #b2ffffff + #1a000000 + #ffdedede + #ffe8e8e8 + #80000000 + #66000000 + #cc000000 + #ff000000 + #4d000000 + #ff343f4f + #ffeaf0f9 + #ff144015 + #ffe4f5d6 + #ff302d59 + #ffece9fc + #ff443808 + #fffaeed1 + #ff709ccb + #ff3fd04f + #ff7566ed + #ffffa800 + #ff333333 + #ff666666 + #fff22424 + #ff0099ff + #0f000000 + #1a0d84ff + #ff8c93b0 + #4dffffff + #99bec3d8 + #26bec3d8 + #ffbec3d8 + #ffffffff + #ffe7f3ff + #fff7f7f7 + #ff0d84ff + #ff000000 + #ffffffff + #ff009afe + #fff0f0f0 + #ffefefef + #ff838db8 + + @color/miuix_preference_primary_text_color_light + @color/miuix_preference_right_text_color_normal_light + @color/miuix_preference_secondary_text_color_light + @android:color/black + @color/material_grey_600 + @color/material_grey_900 + @color/material_grey_100 + #ffffffff + #de000000 + #4dffffff + #39000000 + #ffa0b7ca + #ff36d167 + #ffffa800 + #ff0d84ff + #fff22424 + #ff004b00 + #0aff5500 + #ffff5500 + #cc000000 + #ff000000 + #fff22424 + #ff808fee + #ff4fbca3 + #ff0075ed + #1f0075ed + #ff999999 + #ff0099ff + #4d0099ff + #cc0d84ff + #fffe3d28 + #4dfe3d28 + #ccfe3d28 + #ffffffff + #fff2f2f2 + #fff7f7f7 + #cc000000 + #ff000000 + #ff000000 + #14000000 + #ff0099ff + #26000000 + #ff5c5d5e + #ffffffff + #40000000 + #ee000000 + #9a000000 + #66000000 + #66000000 + #ff000000 + #ffff0000 + #e6ffffff + #66000000 + @android:color/transparent + #66000000 + #ffebebeb + #2e0d84ff + #ff666666 + #66000000 + #fffb431e + #ff8c93b0 + #e5000000 + #ff8c93b0 + #66000000 + #ff000000 + #1a0d84ff + @color/button_blue_color + #33ffffff + #1f000000 + #ff0d84ff + #ff0073dd + #ffffffff + @color/color_grey_primary_default + #fff8f8f8 + #ffefeff0 + #99000000 + #0a000000 + #0a000000 + #1f000000 + #cc000000 + #fff22424 + #1fffffff + #ff0d84ff + #4dffffff + #e6ffffff + #ff424c6f + #b3ffffff + #8a000000 + #36ffffff + #24000000 + #ff0099ff + #ffd9d9d9 + #fff22424 + #fffafafa + #ffffffff + #1a0d84ff + #ff0d84ff + #ffa6a9c0 + #ff0d84ff + #ff0d84ff + #0a000000 + #ffe5e5e5 + #ffe5e5e5 + #66000000 + #ffffffff + #26000000 + #ff000000 + #ff4bed37 + #80ffffff + #e5ffffff + #9effffff + #99000000 + #99000000 + #b2d3d3d3 + #ccffffff + #ff979797 + #ffffffff + #66000000 + @color/color_deep_red_primary_default + #4d0d84ff + #ff000000 + #ff005fff + #0707bdff + #0aff9a5b + #ff47ffe6 + #ff29cbff + #ffff7600 + #ffff6063 + #66000000 + #ff000000 + #26f0f0f0 + #ff212226 + #ffff5816 + #4dbec3d8 + #26bec3d8 + #ff5fab1b + #ffff5500 + #cc0d84ff + #99000000 + #ff000000 + #ff636363 + #fff6a196 + #ffff7d2e + #33000000 + #ff0099ec + #ffff5500 + #fffc6f5d + #fff22424 + #ff05c575 + #ffff7433 + #ff8c93b0 + #cc000000 + #ffffffff + #ff8749ef + #ff000000 + #80000000 + #99000000 + #ffffffff + #ff000000 + #66000000 + #ff000000 + #66000000 + #1a000000 + #ffffffff + #14000000 + #ff000000 + #ff000000 + #66000000 + #cc000000 + #ff000000 + #ffffd032 + #fffe4137 + #1aff7433 + #ffebded8 + #1affbb00 + #ffebe4d4 + #1a0d84ff + #ffd5e0eb + @color/color_blue_primary_default + #0a000000 + #80000000 + @color/color_blue_primary_default + #ff2682ed + #1a000000 + #ff8c93b0 + #99000000 + #99000000 + #ff000000 + #0f000000 + #99000000 + #ff000000 + #0d000000 + #ff000000 + #99000000 + #0d000000 + #ffffffff + #99000000 + #cc000000 + #4d000000 + #ffcfd6f0 + #ffff9219 + #ff0d84ff + #ffffffff + #ffb3bbd4 + #ff8187a2 + #ff2ede8b + #ff2682ed + #ffcf30ee + #fffe4137 + #ffff9219 + #ffffd032 + #ccffffff + #ff2ede8b + #ffcf30ee + @color/blackalpha5 + #1f000000 + #33000000 + #ffda2f4d + #26ffffff + #21ffffff + #ff0077cc + #99ffffff + #66ffffff + #ff5445b2 + #ffffffff + #b3ffffff + #99000000 + #1afafcff + #ff6154b2 + #99ffffff + #cc6154b2 + #66ffffff + #ffffffff + #00ffffff + #4d000000 + #e6000000 + #8b000000 + #ff616161 + #ffbdbdbd + #ffbdbdbd + #fff1f1f1 + #ff000000 + #b3000000 + #ff000000 + #3355606b + #0d0d84ff + #660d84ff + #ff0d84ff + #ffffffff + #ff000000 + #ff8c93b0 + #ffffffff + #1a000000 + #66000000 + #66000000 + #ff000000 + #ff0d84ff + #ffffffff + #ff0d84ff + #ff0d84ff + #ffffffff + #4d000000 + #99000000 + #ff8c93b0 + #ff000000 + #fffafafa + #fff6f6f6 + #99000000 + #ff000000 + #4d000000 + #99000000 + #ff00f0ff + #ffffffff + #ffffffff + #4cffffff + #99ffffff + + #ffb2b6cd + #24000000 + #ff26ca58 + #ffe70000 + #f3ffffff + #ffcb6f03 + #ff5fab1b + #ff33a72a + @color/live_gray + @color/light_green + @color/colorAccent + @color/live_gray + #69000000 + #99000000 + #ff000000 + #33000000 + #e5000000 + #e6000000 + #fff8f8f8 + #4d000000 + #fff59300 + #66000000 + #ff000000 + #e6616161 + #e6ffffff + #ff0daf4d + #ff2cb964 + @color/miuix_preference_category_text_color_light + #fff9f9f9 + #66000000 + #99000000 + #80000000 + #ff000000 + #66000000 + #ff000000 + #1a0d84ff + #2a0d84ff + #4d000000 + #e6000000 + #00000000 + @android:color/transparent + #1a000000 + #33000000 + #4d000000 + #66000000 + #660d84ff + #ff0d84ff + #99000000 + #99ffffff + #0f000000 + #66000000 + #ff0d84ff + #ff0d84ff + #ffef7550 + #ff6f5fc4 + #ff39b7eb + #ff3abc68 + #ffeac223 + #ff000000 + #ccffffff + #66000000 + #0af22424 + #ff000000 + #4d000000 + #e6000000 + #99000000 + #fff5f5f5 + #ff000000 + #ffff532b + #ffff9e2b + #ff569aff + #cc000000 + #b3000000 + #ff000000 + #ffff5500 + #ff0099ff + #e6000000 + #ff27b769 + #00000000 + #cd000000 + #ff0d84ff + #ff999999 + #fff22424 + #fffbfbfb + #0a000000 + #1f000000 + #ffffffff + #fff2f2f2 + #330099ff + #fff5f5f5 + #ffffffff + #ffff4200 + #ff999999 + #ffffffff + #ffffffff + #1a000000 + #ffff8a24 + #ffedeeee + #ffffffff + #99000000 + #ff333333 + #80000000 + #ff000000 + #ffffffff + #ff0d84ff + #ff0d84ff + #cc000000 + #e6ffffff + #b4ffffff + #19c4c4c4 + #ffffffff + #cc23b9ff + #ff23b9ff + #4d23b9ff + #7fffffff + #7fffffff + #ffffba34 + #ffff6a35 + #ffffffff + #ffffffff + #66ffffff + #4dffffff + #a1ffffff + @color/color_blue_primary_default + @color/color_orange_primary_default + @color/color_deep_orange_primary_default + @color/color_yellow_primary_default + #fff9f9f9 + #ffdfdfdf + #1a0d84ff + @color/color_blue_primary_default + @color/color_blue_primary_default + #ffffffff + @color/color_orange_primary_default + @color/color_orange_primary_default + @color/color_deep_orange_primary_default + @color/color_deep_orange_primary_default + @color/color_yellow_primary_default + @color/color_yellow_primary_default + #ffffffff + #1a171717 + #b3ffffff + #ccffffff + #ffffffff + #99000000 + #ff000000 + #ffffffff + #ffffffff + #ccffffff + #ffffffff + #1affffff + #26ffffff + #33ffffff + #4dffffff + #66ffffff + #0dffffff + #80ffffff + #82ffffff + #b3ffffff + #e6ffffff + #ff2b2b2b + #ff5dcbff + #ff11d88c + #ffffb84e + #ffffffff + #ffffffff + #ff162428 + #80000000 + #4c000000 + #ff8c93b0 + #4d000000 + #66000000 + #bf000000 + #ffeef1f5 + #ff0d84ff + #1a0d84ff + #33ffffff + #f4ffffff + #66ffffff diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index efa00ede..6474ffd2 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -60,4 +60,14 @@ 30dp 32dp 4dp + + 1.0899963dip + 3.6399841dip + 9.449982dip + 15.269989dip + 17.449982dip + 20.359985dip + 23.269989dip + 24.72998dip + 36.359985dip \ No newline at end of file diff --git a/app/src/main/res/values/integers.xml b/app/src/main/res/values/integers.xml new file mode 100644 index 00000000..88a7b51a --- /dev/null +++ b/app/src/main/res/values/integers.xml @@ -0,0 +1,106 @@ + + + 220 + 150 + 5 + 350 + 250 + 6 + 0 + 200 + 300 + 150 + 32 + 28 + 20 + 620 + 305 + 150 + 407 + 3 + 150 + 200 + 127 + 51 + 15 + 51 + 15 + 0 + 255 + 0 + 255 + 150 + 5 + 2 + 300 + 300 + 150 + 150 + 150 + 33 + 100 + 200 + 6 + 3 + 320 + 150 + 150 + 1 + 100 + 100 + 75 + 120 + 100 + 100 + 1000 + 150 + 200 + 250 + 300 + 350 + 400 + 450 + 50 + 500 + 550 + 600 + 700 + 800 + 900 + 0 + 300 + 350 + 200 + 250 + 75 + 150 + 0 + 4 + 100 + 100 + 1 + 1 + 3 + 75 + 120 + 100 + 250 + 2 + 1 + 0 + 0 + 1 + 0 + 200 + 999 + 0.06 + 0.06 + 0.1 + 0.3 + 0.3 + 0.6 + 0.6 + 1.0 + 3 + 100 + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8f0b2009..505a4a50 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1104,6 +1104,13 @@ 请选择条件 请选择动作 定时任务 + 充电状态 + 电量使用 + 网络状态 + 发送短信 + 通道推送 + Frpc + HttpServer