功能优化

This commit is contained in:
lihongwei 2025-06-25 10:48:42 +08:00
parent add6f3d1e0
commit 30688c11c2
2 changed files with 89 additions and 66 deletions

View File

@ -91,22 +91,24 @@ public class FloatingTabDialogManager {
@Override
public void onComplete(Long solutionId) {
if (solutionId != -1) {
Toast.makeText(context, "方案 '" + solutionName + "' 保存成功!", Toast.LENGTH_SHORT).show();
showToastOnUi(context, "方案 '" + solutionName + "' 保存成功!");
removeFloatingTabDialog();
} else {
Toast.makeText(context, "保存方案失败。", Toast.LENGTH_SHORT).show();
showToastOnUi(context, "保存方案失败。");
}
}
@Override
public void onError(Exception e) {
Log.e(TAG, "保存方案失败: " + e.getMessage(), e);
Toast.makeText(context, "保存方案失败: " + e.getMessage(), Toast.LENGTH_SHORT).show();
showToastOnUi(context, "保存方案失败: " + e.getMessage());
}
});
// 只在验证通过时才显示
Toast.makeText(context, "正在保存方案...", Toast.LENGTH_SHORT).show();
// 这个可能也是在后台线程保险起见也用主线程
showToastOnUi(context, "正在保存方案...");
}
});
closeButton.setOnClickListener(v -> removeFloatingTabDialog());
@ -242,4 +244,11 @@ public class FloatingTabDialogManager {
}
}
}
public static void showToastOnUi(Context context, String msg) {
new Handler(Looper.getMainLooper()).post(() ->
Toast.makeText(context, msg, Toast.LENGTH_SHORT).show()
);
}
}

View File

@ -11,6 +11,8 @@ import android.graphics.PixelFormat;
import android.graphics.Point;
import android.net.Uri;
import android.os.Build;
import android.os.Handler;
import android.os.Looper;
import android.provider.Settings;
import android.text.InputType;
import android.util.Log;
@ -679,6 +681,11 @@ public class FloatingViewManager {
PointEvent end = slideEvent.getEndPoint();
ConnectingLineView lineView = slideEvent.getLineView();
if (lineView == null) {
Log.e(TAG, "updateLinePosition: lineView is null, cannot update line");
return;
}
float startCenterX = start.getX() + (float) TOUCH_POINT_SIZE / 2;
float startCenterY = start.getY() + (float) TOUCH_POINT_SIZE / 2;
float endCenterX = end.getX() + (float) TOUCH_POINT_SIZE / 2;
@ -862,79 +869,86 @@ public class FloatingViewManager {
eventRepository.getSolutionWithEventsAndPoints(solutionId, new EventRepository.RepositoryCallback<SolutionWithEventsAndPoints>() {
@Override
public void onComplete(SolutionWithEventsAndPoints solutionData) {
if (solutionData != null && solutionData.events != null) {
removeFloatingViews();
runtimeEvents.clear();
eventOrderCounter = 1;
new Handler(Looper.getMainLooper()).post(() -> {
if (solutionData != null && solutionData.events != null) {
removeFloatingViews();
runtimeEvents.clear();
eventOrderCounter = 1;
for (SolutionWithEventsAndPoints.EventWithPoints eventWithPoints : solutionData.events) {
EventEntity eventEntity = eventWithPoints.eventEntity;
EventWrapper.EventType type = EventWrapper.EventType.valueOf(eventEntity.eventType);
for (SolutionWithEventsAndPoints.EventWithPoints eventWithPoints : solutionData.events) {
EventEntity eventEntity = eventWithPoints.eventEntity;
EventWrapper.EventType type = EventWrapper.EventType.valueOf(eventEntity.eventType);
if (type == EventWrapper.EventType.POINT) {
TouchPoint clickPoint = eventWithPoints.clickTouchPoint;
if (clickPoint != null) {
PointEvent pointEvent = new PointEvent(eventEntity.orderInSolution, clickPoint.x, clickPoint.y);
TextView pointView = createTouchPointView(String.valueOf(pointEvent.getId()));
WindowManager.LayoutParams params = createTouchPointParams();
params.x = pointEvent.getX();
params.y = pointEvent.getY();
pointView.setLayoutParams(params);
pointEvent.setView(pointView);
setupDraggablePoint(pointView, params, pointEvent);
windowManager.addView(pointView, params);
runtimeEvents.add(new EventWrapper(type, pointEvent, pointEvent.getId()));
if (type == EventWrapper.EventType.POINT) {
TouchPoint clickPoint = eventWithPoints.clickTouchPoint;
if (clickPoint != null) {
PointEvent pointEvent = new PointEvent(eventEntity.orderInSolution, clickPoint.x, clickPoint.y);
TextView pointView = createTouchPointView(String.valueOf(pointEvent.getId()));
WindowManager.LayoutParams params = createTouchPointParams();
params.x = pointEvent.getX();
params.y = pointEvent.getY();
pointView.setLayoutParams(params);
pointEvent.setView(pointView);
setupDraggablePoint(pointView, params, pointEvent);
windowManager.addView(pointView, params);
runtimeEvents.add(new EventWrapper(type, pointEvent, pointEvent.getId()));
}
} else if (type == EventWrapper.EventType.SLIDE) {
TouchPoint startPointData = eventWithPoints.slideStartTouchPoint;
TouchPoint endPointData = eventWithPoints.slideEndTouchPoint;
if (startPointData != null && endPointData != null) {
PointEvent startPointEvent = new PointEvent(eventEntity.orderInSolution, startPointData.x, startPointData.y);
PointEvent endPointEvent = new PointEvent(eventEntity.orderInSolution, endPointData.x, endPointData.y);
TextView startPointView = createTouchPointView(String.valueOf(startPointEvent.getId()));
WindowManager.LayoutParams startParams = createTouchPointParams();
startParams.x = startPointEvent.getX();
startParams.y = startPointEvent.getY();
startPointView.setLayoutParams(startParams);
TextView endPointView = createTouchPointView(String.valueOf(endPointEvent.getId()));
WindowManager.LayoutParams endParams = createTouchPointParams();
endParams.x = endPointEvent.getX();
endParams.y = endPointEvent.getY();
endPointView.setLayoutParams(endParams);
ConnectingLineView lineView = new ConnectingLineView(context);
WindowManager.LayoutParams lineParams = createLineViewParams();
SlideEvent slideEvent = new SlideEvent(eventEntity.orderInSolution, startPointEvent, endPointEvent);
slideEvent.setLineView(lineView);
slideEvent.setLineParams(lineParams);
setupDraggableSlidePoint(startPointView, startParams, startPointEvent, slideEvent);
setupDraggableSlidePoint(endPointView, endParams, endPointEvent, slideEvent);
windowManager.addView(lineView, lineParams);
windowManager.addView(startPointView, startParams);
windowManager.addView(endPointView, endParams);
updateLinePosition(slideEvent);
runtimeEvents.add(new EventWrapper(type, slideEvent, slideEvent.getId()));
}
}
} else if (type == EventWrapper.EventType.SLIDE) {
TouchPoint startPointData = eventWithPoints.slideStartTouchPoint;
TouchPoint endPointData = eventWithPoints.slideEndTouchPoint;
if (startPointData != null && endPointData != null) {
PointEvent startPointEvent = new PointEvent(eventEntity.orderInSolution, startPointData.x, startPointData.y);
PointEvent endPointEvent = new PointEvent(eventEntity.orderInSolution, endPointData.x, endPointData.y);
TextView startPointView = createTouchPointView(String.valueOf(startPointEvent.getId()));
WindowManager.LayoutParams startParams = createTouchPointParams();
startParams.x = startPointEvent.getX();
startParams.y = startPointEvent.getY();
startPointView.setLayoutParams(startParams);
TextView endPointView = createTouchPointView(String.valueOf(endPointEvent.getId()));
WindowManager.LayoutParams endParams = createTouchPointParams();
endParams.x = endPointEvent.getX();
endParams.y = endPointEvent.getY();
endPointView.setLayoutParams(endParams);
ConnectingLineView lineView = new ConnectingLineView(context);
WindowManager.LayoutParams lineParams = createLineViewParams();
SlideEvent slideEvent = new SlideEvent(eventEntity.orderInSolution, startPointEvent, endPointEvent);
setupDraggableSlidePoint(startPointView, startParams, startPointEvent, slideEvent);
setupDraggableSlidePoint(endPointView, endParams, endPointEvent, slideEvent);
windowManager.addView(lineView, lineParams);
windowManager.addView(startPointView, startParams);
windowManager.addView(endPointView, endParams);
updateLinePosition(slideEvent);
runtimeEvents.add(new EventWrapper(type, slideEvent, slideEvent.getId()));
if (eventEntity.orderInSolution >= eventOrderCounter) {
eventOrderCounter = eventEntity.orderInSolution + 1;
}
}
if (eventEntity.orderInSolution >= eventOrderCounter) {
eventOrderCounter = eventEntity.orderInSolution + 1;
}
updateServicePositions();
Toast.makeText(context, "方案 '" + solutionData.solution.solutionName + "' 加载成功!", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(context, "加载方案失败或方案不存在。", Toast.LENGTH_SHORT).show();
}
updateServicePositions();
Toast.makeText(context, "方案 '" + solutionData.solution.solutionName + "' 加载成功!", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(context, "加载方案失败或方案不存在。", Toast.LENGTH_SHORT).show();
}
});
}
@Override
public void onError(Exception e) {
Log.e(TAG, "加载方案失败: " + e.getMessage(), e);
Toast.makeText(context, "加载方案失败: " + e.getMessage(), Toast.LENGTH_SHORT).show();
new Handler(Looper.getMainLooper()).post(() ->
Toast.makeText(context, "加载方案失败: " + e.getMessage(), Toast.LENGTH_SHORT).show()
);
}
});
}