update icon;添加待办;打卡;QMUI

This commit is contained in:
gallonyin
2022-11-17 19:27:47 +08:00
parent 01063dc6d3
commit 24b4a656bf
24 changed files with 219 additions and 240 deletions

View File

@@ -66,4 +66,6 @@ dependencies {
implementation 'com.lzy.net:okgo:3.0.4' implementation 'com.lzy.net:okgo:3.0.4'
//qrcode //qrcode
implementation 'com.github.yoojia:next-qrcode:2.0-2' implementation 'com.github.yoojia:next-qrcode:2.0-2'
//QMUI
implementation 'com.qmuiteam:qmui:2.0.0-alpha10'
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

View File

@@ -13,11 +13,10 @@ import kotlinx.android.synthetic.main.activity_listen.*
import org.yameida.worktool.* import org.yameida.worktool.*
import org.yameida.worktool.service.WeworkService import org.yameida.worktool.service.WeworkService
import org.yameida.worktool.utils.UpdateUtil import org.yameida.worktool.utils.UpdateUtil
import android.app.Dialog
import android.content.* import android.content.*
import android.widget.Button import android.text.InputType
import android.widget.EditText
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.qmuiteam.qmui.widget.dialog.QMUIDialog
import org.yameida.worktool.utils.HostTestHelper import org.yameida.worktool.utils.HostTestHelper
import org.yameida.worktool.utils.PermissionHelper import org.yameida.worktool.utils.PermissionHelper
import org.yameida.worktool.utils.PermissionPageManagement import org.yameida.worktool.utils.PermissionPageManagement
@@ -84,8 +83,11 @@ class ListenActivity : AppCompatActivity() {
SPUtils.getInstance().put("autoReply", Constant.autoReply) SPUtils.getInstance().put("autoReply", Constant.autoReply)
}) })
tv_host.text = Constant.host tv_host.text = Constant.host
tv_host.setOnClickListener {
showSelectHostDialog()
}
tv_host.setOnLongClickListener { tv_host.setOnLongClickListener {
showInputDialog() showInputHostDialog()
true true
} }
val version = "${AppUtils.getAppVersionName()} Android ${DeviceUtils.getSDKVersionName()} ${DeviceUtils.getManufacturer()} ${DeviceUtils.getModel()}" val version = "${AppUtils.getAppVersionName()} Android ${DeviceUtils.getSDKVersionName()} ${DeviceUtils.getManufacturer()} ${DeviceUtils.getModel()}"
@@ -214,33 +216,64 @@ class ListenActivity : AppCompatActivity() {
} }
} }
private fun showInputDialog() { private fun showSelectHostDialog() {
ToastUtils.showLong("请输入专线网络") val hostList = SPUtils.getInstance().getStringSet("host_list", mutableSetOf(Constant.host))
val commentDialog = Dialog(this) if (hostList.isNotEmpty()) {
commentDialog.setContentView(R.layout.dialog_input) val hostArray = hostList.toTypedArray()
val et: EditText = commentDialog.findViewById(R.id.body) as EditText QMUIDialog.CheckableDialogBuilder(this)
et.setText(tv_host.text) .setTitle(getString(R.string.host_list))
val okBtn: Button = commentDialog.findViewById(R.id.ok) as Button .addItems(hostArray) { dialog, which ->
okBtn.setOnClickListener { Constant.host = hostArray[which]
val text = et.text.toString() tv_host.text = hostArray[which]
if (text.isNotBlank()) {
if (text.matches("ws{1,2}://[^/]+.*".toRegex())) {
Constant.host = text
tv_host.text = text
HostTestHelper.testWs() HostTestHelper.testWs()
commentDialog.dismiss() dialog.dismiss()
} else { }
ToastUtils.showLong("格式异常!") .setCheckedIndex(hostList.indexOf(Constant.host))
.create(R.style.QMUI_Dialog)
.show()
}
}
private fun showInputHostDialog() {
ToastUtils.showLong("请输入专线网络")
val builder = QMUIDialog.EditTextDialogBuilder(this)
builder.setTitle(getString(R.string.tip))
.setPlaceholder(getString(R.string.input_new_host))
.setDefaultText(tv_host.text)
.setInputType(InputType.TYPE_CLASS_TEXT)
.addAction(getString(R.string.delete)) { dialog, index ->
val hostList = SPUtils.getInstance().getStringSet("host_list", mutableSetOf(Constant.host))
if (hostList.size > 1) {
hostList.remove(Constant.host)
Constant.host = hostList.elementAt(0)
tv_host.text = Constant.host
HostTestHelper.testWs()
SPUtils.getInstance().put("host_list", hostList)
dialog.dismiss()
} else {
ToastUtils.showLong("至少保留一个host")
} }
} else {
ToastUtils.showLong("请勿为空!")
} }
} .addAction(getString(R.string.cancel)) { dialog, index -> dialog.dismiss() }
val cancelBtn: Button = commentDialog.findViewById(R.id.cancel) as Button .addAction(getString(R.string.add)) { dialog, index ->
cancelBtn.setOnClickListener { val text = builder.editText.text
commentDialog.dismiss() if (text != null && text.isNotEmpty()) {
} if (text.matches("ws{1,2}://[^/]+.*".toRegex())) {
commentDialog.show() val hostList = SPUtils.getInstance().getStringSet("host_list", mutableSetOf(Constant.host))
hostList.add(text.toString())
SPUtils.getInstance().put("host_list", hostList)
Constant.host = text.toString()
tv_host.text = text
HostTestHelper.testWs()
dialog.dismiss()
} else {
ToastUtils.showLong("格式异常!")
}
} else {
ToastUtils.showLong("请勿为空!")
}
}
.create(R.style.QMUI_Dialog).show()
} }
private var needToWork = false private var needToWork = false

View File

@@ -34,6 +34,8 @@ public class WeworkMessageBean {
* 推送文件(网络图片视频和文件等) PUSH_FILE * 推送文件(网络图片视频和文件等) PUSH_FILE
* 解散群聊 DISMISS_GROUP * 解散群聊 DISMISS_GROUP
* 从外部群添加好友 ADD_FRIEND_BY_GROUP * 从外部群添加好友 ADD_FRIEND_BY_GROUP
* 添加待办 ADD_NEED_DEAL
* 打卡 CLOCK_IN
* <p> * <p>
* 非操作类型 300 * 非操作类型 300
* 机器人普通日志记录 ROBOT_LOG * 机器人普通日志记录 ROBOT_LOG
@@ -69,6 +71,8 @@ public class WeworkMessageBean {
public static final int PUSH_FILE = 218; public static final int PUSH_FILE = 218;
public static final int DISMISS_GROUP = 219; public static final int DISMISS_GROUP = 219;
public static final int ADD_FRIEND_BY_GROUP = 220; public static final int ADD_FRIEND_BY_GROUP = 220;
public static final int ADD_NEED_DEAL = 221;
public static final int CLOCK_IN = 222;
public static final int ROBOT_LOG = 301; public static final int ROBOT_LOG = 301;
public static final int ROBOT_ERROR_LOG = 302; public static final int ROBOT_ERROR_LOG = 302;

View File

@@ -150,6 +150,12 @@ object MyLooper {
WeworkMessageBean.ADD_FRIEND_BY_GROUP -> { WeworkMessageBean.ADD_FRIEND_BY_GROUP -> {
WeworkController.addFriendByGroup(message) WeworkController.addFriendByGroup(message)
} }
WeworkMessageBean.ADD_NEED_DEAL -> {
WeworkController.addNeedDeal(message)
}
WeworkMessageBean.CLOCK_IN -> {
WeworkController.clockIn(message)
}
WeworkMessageBean.SHOW_GROUP_INFO -> { WeworkMessageBean.SHOW_GROUP_INFO -> {
WeworkController.showGroupInfo(message) WeworkController.showGroupInfo(message)
} }

View File

@@ -203,6 +203,32 @@ object WeworkController {
) )
} }
/**
* 添加待办
* @see WeworkMessageBean.ADD_NEED_DEAL
* @param message#titleList 内部用户昵称列表
* @param message#receivedContent 回复内容
*/
@RequestMapping
fun addNeedDeal(message: WeworkMessageBean): Boolean {
LogUtils.d("addNeedDeal(): ${message.titleList} ${message.receivedContent}")
return WeworkOperationImpl.addNeedDeal(
message,
message.titleList,
message.receivedContent
)
}
/**
* 打卡
* @see WeworkMessageBean.CLOCK_IN
*/
@RequestMapping
fun clockIn(message: WeworkMessageBean): Boolean {
LogUtils.d("clockIn(): ")
return WeworkOperationImpl.clockIn(message)
}
/** /**
* 推送微盘图片 * 推送微盘图片
* @see WeworkMessageBean.PUSH_MICRO_DISK_IMAGE * @see WeworkMessageBean.PUSH_MICRO_DISK_IMAGE

View File

@@ -927,6 +927,110 @@ object WeworkOperationImpl {
} }
} }
/**
* 添加待办
* @see WeworkMessageBean.ADD_NEED_DEAL
* @param titleList 内部用户昵称列表
* @param receivedContent 回复内容
*/
fun addNeedDeal(
message: WeworkMessageBean,
titleList: MutableList<String>,
receivedContent: String
): Boolean {
val startTime = System.currentTimeMillis()
goHome()
val tvDiaryFlag = AccessibilityUtil.findOneByText(getRoot(), "日程", exact = true)
if (tvDiaryFlag != null && tvDiaryFlag.parent.childCount == 2) {
AccessibilityUtil.performClick(tvDiaryFlag)
val tvNeedDealFlag = AccessibilityUtil.findOneByTextRegex(getRoot(), "^待办( · .*?)?$")
if (tvNeedDealFlag != null) {
AccessibilityUtil.performClick(tvNeedDealFlag)
sleep(Constant.POP_WINDOW_INTERVAL)
val rv = AccessibilityUtil.findOneByClazz(getRoot(), Views.RecyclerView)
if (rv != null) {
val frontNode = AccessibilityUtil.findFrontNode(rv.parent)
val textViewList =
AccessibilityUtil.findAllOnceByClazz(frontNode, Views.TextView)
if (textViewList.size >= 2) {
val addButton: AccessibilityNodeInfo = textViewList[textViewList.size - 1]
AccessibilityUtil.performClick(addButton)
AccessibilityUtil.findTextInput(getRoot(), receivedContent)
AccessibilityUtil.findTextAndClick(getRoot(), "参与人")
if (relaySelectTarget(titleList, needSend = false)) {
LogUtils.e("添加参与人成功")
if (AccessibilityUtil.findTextAndClick(getRoot(), "保存并发送到聊天")) {
uploadCommandResult(message, ExecCallbackBean.SUCCESS, "", startTime)
return true
} else {
LogUtils.e("未找到保存并发送按钮")
uploadCommandResult(message, ExecCallbackBean.ERROR_BUTTON, "未找到保存并发送按钮", startTime)
return false
}
} else {
LogUtils.e("添加参与人失败")
uploadCommandResult(message, ExecCallbackBean.ERROR_RELAY, "添加参与人失败: $titleList", startTime)
return false
}
} else {
LogUtils.e("未找到添加按钮")
uploadCommandResult(message, ExecCallbackBean.ERROR_BUTTON, "未找到添加按钮", startTime)
return false
}
} else {
LogUtils.e("未找到待办列表")
uploadCommandResult(message, ExecCallbackBean.ERROR_BUTTON, "未找到待办列表", startTime)
return false
}
} else {
LogUtils.e("未找到待办按钮")
uploadCommandResult(message, ExecCallbackBean.ERROR_BUTTON, "未找到待办按钮", startTime)
return false
}
} else {
LogUtils.e("未找到日程按钮")
uploadCommandResult(message, ExecCallbackBean.ERROR_BUTTON, "未找到日程按钮", startTime)
return false
}
}
/**
* 打卡
* @see WeworkMessageBean.CLOCK_IN
*/
fun clockIn(message: WeworkMessageBean): Boolean {
val startTime = System.currentTimeMillis()
goHomeTab("工作台")
val node = AccessibilityUtil.scrollAndFindByText(WeworkController.weworkService, getRoot(), "打卡")
if (node != null) {
AccessibilityUtil.performClick(node)
sleep(Constant.POP_WINDOW_INTERVAL)
val clockInFlag =
AccessibilityUtil.findOneByText(getRoot(), "你已在打卡范围内", timeout = 10000)
if (clockInFlag != null) {
AccessibilityUtil.findTextAndClick(getRoot(), "上班打卡", "下班打卡")
val doneFlag = AccessibilityUtil.findOneByText(getRoot(), "上班·正常", "之后可打下班卡", "今日打卡已完成")
if (doneFlag != null) {
LogUtils.d("打卡成功")
uploadCommandResult(message, ExecCallbackBean.SUCCESS, "", startTime)
return true
} else {
LogUtils.e("未发现完成打卡")
uploadCommandResult(message, ExecCallbackBean.ERROR_BUTTON, "未发现完成打卡", startTime)
return false
}
} else {
LogUtils.e("未找到上下班打卡")
uploadCommandResult(message, ExecCallbackBean.ERROR_BUTTON, "未找到上下班打卡", startTime)
return false
}
} else {
LogUtils.e("未找到在打卡范围")
uploadCommandResult(message, ExecCallbackBean.ERROR_BUTTON, "未找到在打卡范围", startTime)
return false
}
}
/** /**
* 展示群信息 * 展示群信息
* @see WeworkMessageBean.SHOW_GROUP_INFO * @see WeworkMessageBean.SHOW_GROUP_INFO
@@ -966,7 +1070,7 @@ object WeworkOperationImpl {
* selectList 昵称或群名列表 * selectList 昵称或群名列表
* extraText 转发是否附加一条文本 * extraText 转发是否附加一条文本
*/ */
private fun relaySelectTarget(selectList: List<String>, extraText: String? = null): Boolean { private fun relaySelectTarget(selectList: List<String>, extraText: String? = null, needSend: Boolean = true): Boolean {
//聊天消息列表 1ListView 0RecycleView xViewGroup //聊天消息列表 1ListView 0RecycleView xViewGroup
val list = AccessibilityUtil.findOneByClazz(getRoot(), Views.ListView) val list = AccessibilityUtil.findOneByClazz(getRoot(), Views.ListView)
if (list != null) { if (list != null) {
@@ -1019,6 +1123,9 @@ object WeworkOperationImpl {
if (confirmButton != null) { if (confirmButton != null) {
AccessibilityUtil.performClick(confirmButton) AccessibilityUtil.performClick(confirmButton)
sleep(Constant.POP_WINDOW_INTERVAL) sleep(Constant.POP_WINDOW_INTERVAL)
if (!needSend) {
return true
}
if (!extraText.isNullOrBlank()) { if (!extraText.isNullOrBlank()) {
LogUtils.d("extraText: $extraText") LogUtils.d("extraText: $extraText")
AccessibilityUtil.findTextInput(getRoot(), extraText) AccessibilityUtil.findTextInput(getRoot(), extraText)

View File

@@ -40,10 +40,12 @@ object HostTestHelper {
override fun onMessage(webSocket: WebSocket, text: String) { override fun onMessage(webSocket: WebSocket, text: String) {
ToastUtils.showLong("链接: ${Constant.getWsUrl()}\nonMessage\ntext:$text") ToastUtils.showLong("链接: ${Constant.getWsUrl()}\nonMessage\ntext:$text")
webSocket.close(1000, "接口测试成功")
} }
override fun onMessage(webSocket: WebSocket, bytes: ByteString) { override fun onMessage(webSocket: WebSocket, bytes: ByteString) {
ToastUtils.showLong("链接: ${Constant.getWsUrl()}\nonMessage\nbytes:$bytes") ToastUtils.showLong("链接: ${Constant.getWsUrl()}\nonMessage\nbytes:$bytes")
webSocket.close(1000, "接口测试成功")
} }
override fun onClosing(webSocket: WebSocket, code: Int, reason: String) { override fun onClosing(webSocket: WebSocket, code: Int, reason: String) {

View File

@@ -1,30 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="85.84757"
android:endY="92.4963"
android:startX="42.9492"
android:startY="49.59793"
android:type="linear">
<item
android:color="#44000000"
android:offset="0.0" />
<item
android:color="#00000000"
android:offset="1.0" />
</gradient>
</aapt:attr>
</path>
<path
android:fillColor="#FFFFFF"
android:fillType="nonZero"
android:pathData="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z"
android:strokeWidth="1"
android:strokeColor="#00000000" />
</vector>

View File

@@ -1,170 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path
android:fillColor="#3DDC84"
android:pathData="M0,0h108v108h-108z" />
<path
android:fillColor="#00000000"
android:pathData="M9,0L9,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,0L19,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M29,0L29,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M39,0L39,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M49,0L49,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M59,0L59,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M69,0L69,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M79,0L79,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M89,0L89,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M99,0L99,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,9L108,9"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,19L108,19"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,29L108,29"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,39L108,39"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,49L108,49"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,59L108,59"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,69L108,69"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,79L108,79"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,89L108,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,99L108,99"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,29L89,29"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,39L89,39"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,49L89,49"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,59L89,59"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,69L89,69"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,79L89,79"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M29,19L29,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M39,19L39,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M49,19L49,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M59,19L59,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M69,19L69,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M79,19L79,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
</vector>

View File

@@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background" />
<foreground android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>

View File

@@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background" />
<foreground android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -19,4 +19,12 @@
<string name="update_notification_channel_id" translatable="false">update</string> <string name="update_notification_channel_id" translatable="false">update</string>
<string name="update_notification_channel_name" translatable="false">升级通知</string> <string name="update_notification_channel_name" translatable="false">升级通知</string>
<!-- UI -->
<string name="tip">提示</string>
<string name="input_new_host">请输入新的host</string>
<string name="delete">删除</string>
<string name="cancel">取消</string>
<string name="confirm">确认</string>
<string name="add">新增</string>
<string name="host_list">host列表</string>
</resources> </resources>

View File

@@ -1,6 +1,7 @@
<resources> <resources>
<!-- Base application theme. --> <!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">-->
<style name="AppTheme" parent="QMUI.Compat.NoActionBar">
<!-- Customize your theme here. --> <!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item>