feat(task): 添加任务列表功能并优化启动流程
- 新增 tesh.sh 脚本用于设备监控和 scrcpy 连接 - 创建 TaskItem 数据模型类 - 实现 TaskListActivity 任务列表界面 - 添加 TaskListVM 视图模型处理数据加载 - 在 WelcomeActivity 中跳转到任务列表页面 - 移除应用中的崩溃处理器初始化 - 添加任务列表背景样式资源文件 - 设计任务列表页面布局和列表项布局 - 更新欢迎页面界面样式和文字内容 - 在 Manifest 中注册任务列表 Activity - 调整应用屏幕尺寸配置为 480x600 - 优化权限配置注释结构
这个提交包含在:
父节点
807634b4c4
当前提交
716c34cc54
@ -6,22 +6,17 @@
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
<uses-permission
|
||||
android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
|
||||
tools:ignore="AllFilesAccessPolicy,ScopedStorage" />
|
||||
|
||||
<!-- 媒体权限 -->
|
||||
tools:ignore="AllFilesAccessPolicy,ScopedStorage" /> <!-- 媒体权限 -->
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
||||
<uses-permission android:name="android.permission.VIBRATE" />
|
||||
|
||||
<!-- 网络权限 -->
|
||||
<uses-permission android:name="android.permission.VIBRATE" /> <!-- 网络权限 -->
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
|
||||
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
|
||||
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
||||
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
|
||||
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
|
||||
<!-- 蓝牙权限 -->
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 蓝牙权限 -->
|
||||
<uses-permission android:name="android.permission.BLUETOOTH" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
|
||||
<uses-permission
|
||||
@ -29,27 +24,19 @@
|
||||
android:usesPermissionFlags="neverForLocation"
|
||||
tools:targetApi="31" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
|
||||
|
||||
<!-- 位置权限 -->
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" /> <!-- 位置权限 -->
|
||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||||
|
||||
<!-- Android 12 及以上 Wi-Fi P2P 权限 -->
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- Android 12 及以上 Wi-Fi P2P 权限 -->
|
||||
<uses-permission
|
||||
android:name="android.permission.NEARBY_WIFI_DEVICES"
|
||||
android:usesPermissionFlags="neverForLocation"
|
||||
tools:targetApi="31" />
|
||||
|
||||
<!-- 功能声明 -->
|
||||
tools:targetApi="31" /> <!-- 功能声明 -->
|
||||
<uses-feature
|
||||
android:name="android.hardware.wifi.direct"
|
||||
android:required="false" />
|
||||
<uses-feature
|
||||
android:name="android.hardware.camera"
|
||||
android:required="false" />
|
||||
|
||||
<!-- 系统级权限 -->
|
||||
android:required="false" /> <!-- 系统级权限 -->
|
||||
<uses-permission
|
||||
android:name="android.permission.REBOOT"
|
||||
tools:ignore="ProtectedPermissions" />
|
||||
@ -63,7 +50,6 @@
|
||||
<uses-permission
|
||||
android:name="android.permission.ACCESS_BACKGROUND_LOCATION"
|
||||
tools:ignore="BackgroundLocationPolicy" />
|
||||
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
|
||||
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
|
||||
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
|
||||
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
||||
@ -80,8 +66,9 @@
|
||||
android:theme="@style/AppTheme"
|
||||
android:usesCleartextTraffic="true"
|
||||
tools:replace="android:label">
|
||||
|
||||
|
||||
<activity
|
||||
android:name=".ui.TaskListActivity"
|
||||
android:exported="false" />
|
||||
<activity
|
||||
android:name=".ui.MainActivity"
|
||||
android:exported="false" />
|
||||
@ -108,10 +95,10 @@
|
||||
|
||||
<meta-data
|
||||
android:name="design_width_in_dp"
|
||||
android:value="540" />
|
||||
android:value="480" />
|
||||
<meta-data
|
||||
android:name="design_height_in_dp"
|
||||
android:value="960" />
|
||||
android:value="600" />
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
@ -1,10 +1,8 @@
|
||||
package com.nova.brain.glass;
|
||||
|
||||
import com.xuqm.base.App;
|
||||
import com.xuqm.base.di.component.AppComponent;
|
||||
import com.xuqm.base.di.manager.HttpManager;
|
||||
import com.nova.brain.glass.common.CrashHandler;
|
||||
import com.nova.brain.glass.repository.HeaderInterceptor;
|
||||
import com.xuqm.base.App;
|
||||
import com.xuqm.base.di.manager.HttpManager;
|
||||
|
||||
/**
|
||||
* @author xuqm
|
||||
@ -18,7 +16,6 @@ public class MyApplication extends App {
|
||||
super.onCreate();
|
||||
appComponent = HttpManager.getAppComponent(baseUrl, new HeaderInterceptor(getApplicationContext()));
|
||||
|
||||
CrashHandler.getInstance().init(this);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -0,0 +1,7 @@
|
||||
package com.nova.brain.glass.model
|
||||
|
||||
import com.xuqm.base.adapter.BaseItem
|
||||
|
||||
data class TaskItem(val id: String): BaseItem() {
|
||||
var selected: Boolean = false
|
||||
}
|
||||
@ -0,0 +1,31 @@
|
||||
package com.nova.brain.glass.ui
|
||||
|
||||
import android.view.View
|
||||
import com.nova.brain.glass.R
|
||||
import com.nova.brain.glass.databinding.ActivityTaskListBinding
|
||||
import com.nova.brain.glass.model.TaskItem
|
||||
import com.nova.brain.glass.viewmodel.TaskListVM
|
||||
import com.xuqm.base.adapter.BasePagedAdapter
|
||||
import com.xuqm.base.adapter.CommonPagedAdapter
|
||||
import com.xuqm.base.adapter.ViewHolder
|
||||
import com.xuqm.base.adapter.callback.AdapterClickListener
|
||||
import com.xuqm.base.common.ToolsHelper
|
||||
import com.xuqm.base.ui.BaseListFormLayoutActivity
|
||||
|
||||
class TaskListActivity :
|
||||
BaseListFormLayoutActivity<TaskItem, TaskListVM, ActivityTaskListBinding>() {
|
||||
override fun getLayoutId(): Int = R.layout.activity_task_list
|
||||
override fun fullscreen(): Boolean = true
|
||||
private val adapter = object : CommonPagedAdapter<TaskItem>(R.layout.item_task_list) {
|
||||
override fun convert(holder: ViewHolder, item: TaskItem, position: Int) {
|
||||
holder
|
||||
.setText(R.id.tv_title, "${position}.张三提交的出差预算申请审核任务,从上海到北京,3月23开始3月24结束,预算金额¥1800元。【已逾期】")
|
||||
.setClickListener(R.id.tv_title
|
||||
) {
|
||||
ToolsHelper.showMessage("点击了${position}")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun adapter(): BasePagedAdapter<TaskItem> = adapter
|
||||
}
|
||||
@ -1,5 +1,6 @@
|
||||
package com.nova.brain.glass.ui
|
||||
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import com.nova.brain.glass.R
|
||||
import com.nova.brain.glass.databinding.ActivityWelcomeBinding
|
||||
@ -12,6 +13,7 @@ class WelcomeActivity : BaseActivity<ActivityWelcomeBinding>() {
|
||||
|
||||
override fun initView(savedInstanceState: Bundle?) {
|
||||
super.initView(savedInstanceState)
|
||||
startActivity(Intent(this, TaskListActivity::class.java))
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,18 @@
|
||||
package com.nova.brain.glass.viewmodel
|
||||
|
||||
import com.nova.brain.glass.model.TaskItem
|
||||
import com.xuqm.base.viewmodel.BaseListViewModel
|
||||
import com.xuqm.base.viewmodel.callback.Response
|
||||
|
||||
class TaskListVM: BaseListViewModel<TaskItem>() {
|
||||
override fun loadData(
|
||||
page: Int,
|
||||
onResponse: Response<TaskItem>
|
||||
) {
|
||||
onResponse.onResponse(arrayListOf<TaskItem>().apply {
|
||||
for (i in 0..10) {
|
||||
add(TaskItem(i.toString()))
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:state_focused="true" android:drawable="@drawable/bg_task_title_selected"/>
|
||||
<item android:state_focused="false" android:drawable="@drawable/bg_task_title_normal"/>
|
||||
</selector>
|
||||
@ -0,0 +1,48 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/main"
|
||||
android:layout_width="match_parent"
|
||||
android:background="@color/app_color_black"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvTaskHeader"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="查询到您当前有5条任务,信息如下:"
|
||||
android:textColor="#ff40FF5E"
|
||||
android:textSize="20sp"
|
||||
android:textFontWeight="500"
|
||||
android:fontFamily="HarmonyOS Sans"
|
||||
android:gravity="start|top"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
||||
android:id="@+id/baseRefreshLayout"
|
||||
android:layout_width="0dp"
|
||||
android:layout_marginTop="16dp"
|
||||
android:layout_height="300dp"
|
||||
app:layout_constraintTop_toBottomOf="@id/tvTaskHeader"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent">
|
||||
|
||||
<com.xuqm.base.view.EmptyView
|
||||
android:id="@+id/baseEmptyView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/baseRecyclerView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:overScrollMode="never" />
|
||||
</com.xuqm.base.view.EmptyView>
|
||||
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
</layout>
|
||||
@ -2,14 +2,24 @@
|
||||
<layout xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:background="@color/app_color_black"
|
||||
android:layout_height="match_parent">
|
||||
<TextView
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="welcome"/>
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/app_color_black"
|
||||
android:layout_alignParentTop="true"
|
||||
android:textColor="#ff3FFF5F"
|
||||
android:textSize="19sp"
|
||||
android:text="您可以说:Nova,我的任务有哪些?"
|
||||
android:fontFamily="Source Han Sans"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
android:gravity="left|top"
|
||||
android:alpha="1"
|
||||
/>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
</layout>
|
||||
@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/tv_title"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentTop="true"
|
||||
android:alpha="1"
|
||||
android:background="@drawable/bg_task_list"
|
||||
android:fontFamily="HarmonyOS Sans SC"
|
||||
android:gravity="left|top"
|
||||
android:lineSpacingExtra="4.8sp"
|
||||
android:padding="8dp"
|
||||
android:textColor="#ff40FF5E"
|
||||
android:textFontWeight="500"
|
||||
android:textSize="16sp" />
|
||||
31
tesh.sh
普通文件
31
tesh.sh
普通文件
@ -0,0 +1,31 @@
|
||||
#!/bin/bash
|
||||
# scrcpy_auto.sh
|
||||
# 简化的系统监控脚本
|
||||
|
||||
# 颜色定义
|
||||
RED='\033[0;31m'
|
||||
YELLOW='\033[1;33m'
|
||||
GREEN='\033[0;32m'
|
||||
BLUE='\033[0;34m'
|
||||
CYAN='\033[0;36m'
|
||||
PURPLE='\033[0;35m'
|
||||
NC='\033[0m'
|
||||
BOLD='\033[1m'
|
||||
|
||||
# 开始时间
|
||||
START_TIME=$(date +%s)
|
||||
# 计数器
|
||||
COUNTER=0
|
||||
|
||||
DEVICE=$(adb devices | grep -E '^190[0-9a-zA-Z]+\s+device' | head -1 | awk '{print $1}')
|
||||
|
||||
if [ -z "$DEVICE" ]; then
|
||||
echo -e "${RED}错误: 未找到连接的设备${NC}"
|
||||
exit 1 # 退出整个脚本
|
||||
fi
|
||||
|
||||
|
||||
echo -e "${GREEN} 监控设备: $DEVICE${NC} "
|
||||
echo -e "${YELLOW}${BOLD}======================================="
|
||||
|
||||
scrcpy -s $DEVICE
|
||||
正在加载...
在新工单中引用
屏蔽一个用户