Skip to content

NexFlow 1.6.0 — 複製流程、自適應小工具,以及四個只在實機現形的問題 - #11

Merged
ADSFAaron merged 4 commits into
masterfrom
feat/duplicate-flow-and-adaptive-widget
Sep 3, 2026
Merged

NexFlow 1.6.0 — 複製流程、自適應小工具,以及四個只在實機現形的問題#11
ADSFAaron merged 4 commits into
masterfrom
feat/duplicate-flow-and-adaptive-widget

Conversation

@ADSFAaron

Copy link
Copy Markdown
Owner

1.6.0(versionCode 11)。沒有新的自動化能力,處理的是「用起來哪裡不對勁」。

新增

  • 複製流程:詳細頁 ⋮ →「複製流程」。副本以停用狀態建立(照抄啟用狀態的話,副本一存檔就會註冊自己的觸發器,同一個鬧鐘、同一個地理圍欄跑兩份),觸發器/條件/動作的 id 全部重新產生——引擎是拿 trigger id 去向系統註冊真實資源的。
  • 小工具依實際尺寸重排SizeMode.Exact):欄數由「一張卡片放得下」決定(92dp 下限),只取整數列並把卡片撐開填滿;矮的時候卡片改橫式,4×1 就是完整的兩張卡。狀態改存 12 個流程;標頭在 150dp 以下隱藏;「2/22」改為「2/22 已啟用」。
    • 同時把 LazyColumn 換成一般 Column:RemoteViews collection 的列是非同步載入的,所以每次調整尺寸都會先閃一下空白,旁邊還多一條捲軸。

變更

  • 詳細頁三顆圖示收進 ⋮。流程名稱是那個畫面唯一能分辨「原本的還是副本」的東西。
  • 電池觸發器與條件各自加上說明並改寫摘要文案(那兩個東西的摘要原本讀起來一模一樣)。
  • 撥動流程開關不再更新 updated_at —— 清單照它排序,開關一撥流程就從指尖底下飛到第一位。

修正

  • 「執行中」浮層的陰影被切成方形硬邊:popup 視窗原本只有內容那麼大,陰影沒有地方落。改成鋪滿視窗,順勢有了 32% 遮罩。
  • 執行中的動作在淺色模式糊成一團:primary 18% 透明度擋不住自己的 8dp 陰影,陰影直接透出來壓在文字下(深色模式看不見,所以一直沒被發現)。改用 primaryContainer/onPrimaryContainer 並移除陰影。
  • Toast 排隊導致訊息比流程晚好幾秒;現在貼新的之前先取消舊的。
  • AI 對話「重試」時兩個泡泡重疊:重試先移除錯誤訊息又立刻開始新回合,指示器正好落在錯誤泡泡還在淡出的位置。錯誤泡泡改為離場不做動畫。

驗證

  • CI 那一組全部在本機跑過:core 三個 module 測試、github 與 play 兩個 flavor 單元測試、4 語系 × 深淺色截圖比對、兩個 flavor 的 lint(皆為 no new issues)。
  • 實機(Android debug 版)逐項確認過每個修正。
  • Instrumented 測試沒在本機跑(接的是實體私人手機),交給這個 PR 的 CI。

Play 的四語文案已寫進 docs/play-release-notes.md。合併後 release workflow 會建立 tag v1.6.0 與 GitHub Release。

🤖 Generated with Claude Code

ADSFAaron and others added 4 commits September 3, 2026 19:39
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…es not

The two get mixed up because their summaries read as the same sentence. The
trigger fires once, at the crossing; the condition is checked before every run
and starts nothing by itself. Both config dialogs now lead with a note saying
so, and a trigger summary reads "Drops to 20% or below" where the condition's
reads "While at or below 20%" — instead of both saying "20% below".

The section headers and the trigger's "when" label follow the same wording in
the three translations.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…things that only showed up on a real phone

Release 1.6.0 (versionCode 11). No new automation; this is the round of
"something here is off" that only a light theme, a resized widget and a failing
API call could produce.

Duplicating a flow (detail screen, ⋮ → Duplicate flow) copies everything and
saves the copy DISABLED: carrying the enabled flag over would have the copy
register its own triggers the moment it is saved — the same alarm, the same
geofence, running twice before the user has changed a thing. Trigger, condition
and action ids are regenerated too, because a trigger id is what the engine
registers real system resources under, and two flows sharing one would fight
over the registration.

The three top-bar icons move into that ⋮. The flow name is the only thing on
that screen saying which flow is being edited, and three icons cut it down to
six characters — a copy could not be told from its original.

The widget now lays itself out from its real size (SizeMode.Exact): columns from
how wide a card is allowed to be (92dp floor) rather than from screen-width
breakpoints, whole rows only, and cards stretched to fill what is left. The old
breakpoints put four columns past 430dp — unreachable on a ~400dp phone home
screen — while handing out 69dp cards at 180dp. A short widget switches its
cards to icon-beside-name, so a 4x1 is one row of two whole cards instead of a
row cut in half. Widget state keeps 12 flows (recents first, topped up with the
rest) instead of sharing the launcher's four, the header drops out below 150dp,
and "2/22" is now "2/22 on".

Also replaces the lazy list with a plain Column: a RemoteViews collection loads
its rows asynchronously, so every resize flashed an empty widget and left a
scrollbar down the side. The grid already works out what fits.

Fixed:

- The running-flows panel had its drop shadow cut off square. Its popup window
  was sized to the panel, leaving the shadow nowhere to fall. It now fills the
  window, which also gives the panel a scrim to sit on.
- The executing action was highlighted with primary at 18% alpha over an 8dp
  shadow. A translucent surface does not hide its own shadow, so in light theme
  the shadow showed through as a grey smear under the text; dark theme hid it,
  which is why it lasted. Now primaryContainer/onPrimaryContainer and no shadow,
  which is how M3 says to render state.
- Flicking a flow's switch bumped updated_at, and the list is ordered by it, so
  the flow shot to the top and out from under the finger. Toggling is not an
  edit.
- Toasts queue rather than replace, so a loop that toasts three times was still
  popping messages six seconds after the flow had finished. Each one now cancels
  the one on screen.
- Retrying a failed AI turn drew two bubbles on top of each other: retry deletes
  the error and starts the turn in the same breath, so the indicator landed in
  the slot the error was still fading out of. The error bubble now leaves
  without a fade (fadeOutSpec = null); the indicator gains the entry animation
  it never had.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Same four blocks in every language: the two things the user can see (duplicate,
the widget), the battery trigger/condition distinction, then the fixes. English
runs to 496 of the 500 characters Play allows, so its sentences are cut shorter
than the CJK ones rather than a whole block being dropped.

The 1.5.1 copy is no longer in the file; the footnote says which commit to read
it out of.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@ADSFAaron
ADSFAaron merged commit 1a3ef5d into master Sep 3, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant