diff --git a/stallhelper/build.properties b/stallhelper/build.properties index ca668be..dea15f7 100644 --- a/stallhelper/build.properties +++ b/stallhelper/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Sun May 17 18:24:44 GMT 2026 +#Mon May 18 09:01:09 GMT 2026 stageCount=2 libraryProject= baseVersion=15.20 publishVersion=15.20.1 -buildCount=3 +buildCount=8 baseBetaVersion=15.20.2 diff --git a/stallhelper/src/main/java/cc/winboll/studio/stallhelper/activities/TaskSchedulerActivity.java b/stallhelper/src/main/java/cc/winboll/studio/stallhelper/activities/TaskSchedulerActivity.java index b733560..ea8e026 100644 --- a/stallhelper/src/main/java/cc/winboll/studio/stallhelper/activities/TaskSchedulerActivity.java +++ b/stallhelper/src/main/java/cc/winboll/studio/stallhelper/activities/TaskSchedulerActivity.java @@ -2,6 +2,7 @@ package cc.winboll.studio.stallhelper.activities; import android.app.Dialog; import android.os.Bundle; +import android.view.ContextMenu; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; @@ -9,16 +10,17 @@ import android.view.ViewGroup; import android.view.Window; import android.widget.Button; import android.widget.EditText; +import android.widget.LinearLayout; import android.widget.TextView; import androidx.appcompat.widget.Toolbar; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import cc.winboll.studio.libaes.utils.WinBoLLActivityManager; import cc.winboll.studio.libappbase.LogUtils; +import cc.winboll.studio.libappbase.ToastUtils; import cc.winboll.studio.stallhelper.R; import cc.winboll.studio.stallhelper.beans.TaskSchedulerBean; import java.util.ArrayList; -import java.util.Calendar; /** * @Author ZhanGSKen @@ -37,6 +39,25 @@ public class TaskSchedulerActivity extends WinBoLLActivity { ArrayList mTaskList; TaskSchedulerAdapter mAdapter; + @Override + public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { + super.onCreateContextMenu(menu, v, menuInfo); + menu.add(0, 1001, 0, "编辑任务内容"); + } + + @Override + public boolean onContextItemSelected(MenuItem item) { + if (item.getItemId() == 1001) { + View triggerView = item.getActionView(); + if (triggerView != null && triggerView.getTag() instanceof Integer) { + int position = (Integer) triggerView.getTag(); + showEditTaskDialog(position); + } + return true; + } + return super.onContextItemSelected(item); + } + @Override public String getTag() { return TAG; @@ -113,29 +134,29 @@ public class TaskSchedulerActivity extends WinBoLLActivity { calendar.set(java.util.Calendar.MINUTE, 0); calendar.set(java.util.Calendar.SECOND, 0); calendar.set(java.util.Calendar.MILLISECOND, 0); - + // 设置不同的小时 calendar.set(java.util.Calendar.HOUR_OF_DAY, 9); long time9 = calendar.getTimeInMillis(); - + calendar.set(java.util.Calendar.HOUR_OF_DAY, 10); long time10 = calendar.getTimeInMillis(); - + calendar.set(java.util.Calendar.HOUR_OF_DAY, 11); calendar.set(java.util.Calendar.MINUTE, 30); long time1130 = calendar.getTimeInMillis(); - + calendar.set(java.util.Calendar.HOUR_OF_DAY, 12); calendar.set(java.util.Calendar.MINUTE, 30); long time1230 = calendar.getTimeInMillis(); - + calendar.set(java.util.Calendar.HOUR_OF_DAY, 16); calendar.set(java.util.Calendar.MINUTE, 0); long time16 = calendar.getTimeInMillis(); - + calendar.set(java.util.Calendar.HOUR_OF_DAY, 17); long time17 = calendar.getTimeInMillis(); - + mTaskList.add(new TaskSchedulerBean("准备食材", "购买新鲜蔬菜和肉类", time9, 60)); mTaskList.add(new TaskSchedulerBean("烹饪午餐", "按照食谱准备午餐", time10, 90)); mTaskList.add(new TaskSchedulerBean("用餐休息", "享受美食并休息", time1130, 60)); @@ -153,8 +174,8 @@ public class TaskSchedulerActivity extends WinBoLLActivity { */ private int convertToTotalMinutes(int month, int day, int hour) { return month * DAYS_PER_MONTH * HOURS_PER_DAY * MINUTES_PER_HOUR + - day * HOURS_PER_DAY * MINUTES_PER_HOUR + - hour * MINUTES_PER_HOUR; + day * HOURS_PER_DAY * MINUTES_PER_HOUR + + hour * MINUTES_PER_HOUR; } /** @@ -168,7 +189,7 @@ public class TaskSchedulerActivity extends WinBoLLActivity { int month = totalDays / DAYS_PER_MONTH; int day = totalDays % DAYS_PER_MONTH; int hour = totalHours % HOURS_PER_DAY; - + StringBuilder sb = new StringBuilder(); if (month > 0) { sb.append(month).append("月"); @@ -213,7 +234,7 @@ public class TaskSchedulerActivity extends WinBoLLActivity { etTaskName.setText(task.getTaskName()); etCurrentScheduleTime.setText(formatTimestamp(task.getCurrentScheduleTime())); etRemark.setText(task.getRemark()); - + // 反向转换:将分钟转换为月、天、小时 int totalMinutes = task.getDurationMinutes(); int totalHours = totalMinutes / MINUTES_PER_HOUR; @@ -221,7 +242,7 @@ public class TaskSchedulerActivity extends WinBoLLActivity { int month = totalDays / DAYS_PER_MONTH; int day = totalDays % DAYS_PER_MONTH; int hour = totalHours % HOURS_PER_DAY; - + if (month > 0) { etMonth.setText(Integer.toString(month)); } @@ -234,77 +255,77 @@ public class TaskSchedulerActivity extends WinBoLLActivity { // 取消按钮 btnCancel.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - dialog.dismiss(); - } - }); + @Override + public void onClick(View v) { + dialog.dismiss(); + } + }); // 保存按钮 btnSave.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - // 获取输入的数据 - String taskName = etTaskName.getText().toString().trim(); - String currentScheduleTime = etCurrentScheduleTime.getText().toString().trim(); - String monthStr = etMonth.getText().toString().trim(); - String dayStr = etDay.getText().toString().trim(); - String hourStr = etHour.getText().toString().trim(); - String remark = etRemark.getText().toString().trim(); + @Override + public void onClick(View v) { + // 获取输入的数据 + String taskName = etTaskName.getText().toString().trim(); + String currentScheduleTime = etCurrentScheduleTime.getText().toString().trim(); + String monthStr = etMonth.getText().toString().trim(); + String dayStr = etDay.getText().toString().trim(); + String hourStr = etHour.getText().toString().trim(); + String remark = etRemark.getText().toString().trim(); - // 验证输入 - if (taskName.isEmpty()) { - etTaskName.setError("请输入任务名称"); - return; - } - if (currentScheduleTime.isEmpty()) { - etCurrentScheduleTime.setError("请输入当前排档时间"); - return; - } - - // 解析时间字符串为时间戳 - long timestamp = parseTimeString(currentScheduleTime); - if (timestamp == 0) { - etCurrentScheduleTime.setError("时间格式不正确,请使用 yyyy-MM-dd HH 格式"); - return; - } + // 验证输入 + if (taskName.isEmpty()) { + etTaskName.setError("请输入任务名称"); + return; + } + if (currentScheduleTime.isEmpty()) { + etCurrentScheduleTime.setError("请输入当前排档时间"); + return; + } - // 解析排档幅度 - 月、天、小时 - int month = 0; - int day = 0; - int hour = 0; - - try { - if (!monthStr.isEmpty()) { - month = Integer.parseInt(monthStr); - } - if (!dayStr.isEmpty()) { - day = Integer.parseInt(dayStr); - } - if (!hourStr.isEmpty()) { - hour = Integer.parseInt(hourStr); - } - } catch (NumberFormatException e) { - LogUtils.e(TAG, "showEditTaskDialog: 数字解析错误", e); - return; - } + // 解析时间字符串为时间戳 + long timestamp = parseTimeString(currentScheduleTime); + if (timestamp == 0) { + etCurrentScheduleTime.setError("时间格式不正确,请使用 yyyy-MM-dd HH 格式"); + return; + } - // 转换为总分钟数 - int durationMinutes = convertToTotalMinutes(month, day, hour); + // 解析排档幅度 - 月、天、小时 + int month = 0; + int day = 0; + int hour = 0; - // 更新任务数据 - task.setTaskName(taskName); - task.setCurrentScheduleTime(timestamp); - task.setDurationMinutes(durationMinutes); - task.setRemark(remark); + try { + if (!monthStr.isEmpty()) { + month = Integer.parseInt(monthStr); + } + if (!dayStr.isEmpty()) { + day = Integer.parseInt(dayStr); + } + if (!hourStr.isEmpty()) { + hour = Integer.parseInt(hourStr); + } + } catch (NumberFormatException e) { + LogUtils.e(TAG, "showEditTaskDialog: 数字解析错误", e); + return; + } - // 刷新列表 - mAdapter.notifyItemChanged(position); - LogUtils.i(TAG, "showEditTaskDialog: 任务 [" + taskName + "] 数据已更新,排档幅度=" + durationMinutes + "分钟"); + // 转换为总分钟数 + int durationMinutes = convertToTotalMinutes(month, day, hour); - dialog.dismiss(); - } - }); + // 更新任务数据 + task.setTaskName(taskName); + task.setCurrentScheduleTime(timestamp); + task.setDurationMinutes(durationMinutes); + task.setRemark(remark); + + // 刷新列表 + mAdapter.notifyItemChanged(position); + LogUtils.i(TAG, "showEditTaskDialog: 任务 [" + taskName + "] 数据已更新,排档幅度=" + durationMinutes + "分钟"); + + dialog.dismiss(); + } + }); dialog.show(); } @@ -355,20 +376,31 @@ public class TaskSchedulerActivity extends WinBoLLActivity { public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) { final TaskSchedulerBean item = mDataList.get(position); final TaskViewHolder viewHolder = (TaskViewHolder) holder; - + viewHolder.mtvTaskName.setText(item.getTaskName()); viewHolder.mtvCurrentScheduleTime.setText(formatTimestamp(item.getCurrentScheduleTime())); // 格式化显示排档幅度 viewHolder.mtvDuration.setText(formatDurationToString(item.getDurationMinutes())); viewHolder.mtvRemark.setText(item.getRemark()); - // 设置排档按钮点击事件 - 打开编辑对话框 + // mllMain长按存入当前条目独立位置Tag,互不干扰 + viewHolder.mllMain.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + v.setTag(position); + registerForContextMenu(v); + openContextMenu(v); + return true; + } + }); + + // 设置排档按钮点击事件 viewHolder.mbtnSchedule.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - showEditTaskDialog(position); - } - }); + @Override + public void onClick(View v) { + performSchedule(position); + } + }); } @Override @@ -382,6 +414,7 @@ public class TaskSchedulerActivity extends WinBoLLActivity { TextView mtvCurrentScheduleTime; TextView mtvDuration; TextView mtvRemark; + LinearLayout mllMain; Button mbtnSchedule; TaskViewHolder(View itemView) { @@ -390,8 +423,10 @@ public class TaskSchedulerActivity extends WinBoLLActivity { mtvCurrentScheduleTime = itemView.findViewById(R.id.item_start_time); mtvDuration = itemView.findViewById(R.id.item_duration); mtvRemark = itemView.findViewById(R.id.item_remark); + mllMain = itemView.findViewById(R.id.itemtaskscheduler_llmain); mbtnSchedule = itemView.findViewById(R.id.item_btn_schedule); } } } } + diff --git a/stallhelper/src/main/res/layout/item_task_scheduler.xml b/stallhelper/src/main/res/layout/item_task_scheduler.xml index 2bc28db..84252ea 100644 --- a/stallhelper/src/main/res/layout/item_task_scheduler.xml +++ b/stallhelper/src/main/res/layout/item_task_scheduler.xml @@ -6,7 +6,8 @@ android:orientation="vertical" android:background="@drawable/bg_frame" android:padding="10dp" - android:layout_marginBottom="5dp"> + android:layout_marginBottom="5dp" + android:id="@+id/itemtaskscheduler_llmain">