Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
130 commits
Select commit Hold shift + click to select a range
b132432
fix: release native capture references and classify flows once
1window2 Oct 15, 2026
82975b0
fix: keep unmergeable continuation payloads instead of dropping them
1window2 Oct 15, 2026
fca423e
fix: serialize parsed-packet history per directory
1window2 Oct 15, 2026
70fc82e
fix: write each completed roster CSV once with distinct row counts
1window2 Oct 15, 2026
2997761
refactor: share protocol CSV tokenizing and protobuf field loops
1window2 Oct 15, 2026
7e4a195
fix: recover CSV checkpoint restores into scoped settings
1window2 Oct 15, 2026
c8bcd8a
refactor: add edge-to-edge activity base and shared UI components
1window2 Oct 15, 2026
2111a4b
fix: scope CSV checkpoint claims and always release them
1window2 Oct 15, 2026
663b5fb
fix: take the maintenance lock before the profile registry lock
1window2 Oct 15, 2026
8b0ae85
refactor: model capture status as typed atomic snapshots
1window2 Oct 15, 2026
c0a851b
fix: compare restored schemas against an in-memory reference
1window2 Oct 15, 2026
5cbfbd0
fix: run restore recovery only when restore artifacts exist
1window2 Oct 15, 2026
2135e69
fix: share backup staging and validation across restore entry points
1window2 Oct 15, 2026
eb6f3b8
fix: move capture teardown off the main thread and split the VPN service
1window2 Oct 15, 2026
c47a536
refactor: move weekly override merging into the domain layer
1window2 Oct 15, 2026
8954f59
feat: redesign Platoon roster and member screens
1window2 Oct 15, 2026
76e3e32
Merge capture, native, and protocol fixes into v2.5.0
1window2 Oct 15, 2026
f39d19e
refactor: split PlatoonDatabase into focused SQL objects
1window2 Oct 15, 2026
c9380cf
feat: rebuild the weekly table around a frozen, scrollable grid
1window2 Oct 15, 2026
db6031d
fix: derive member activity from one canonical period rule
1window2 Oct 15, 2026
da17b98
fix: load member periods in one query
1window2 Oct 15, 2026
0d83e27
fix: batch inferred boundary correlation per activity ingest
1window2 Oct 15, 2026
26ff7e9
fix: solve weekly rows only for the period-end roster
1window2 Oct 15, 2026
ed9835f
feat: auto-detect the restore kind of a selected backup
1window2 Oct 15, 2026
9796585
fix: build weekly revisions from one read and refresh only affected w…
1window2 Oct 15, 2026
961f0ba
feat: redesign Home, Settings, packet detail, and onboarding
1window2 Oct 15, 2026
f0c7493
refactor: describe every weekly cutline key in one field table
1window2 Oct 15, 2026
7d7f2a6
fix: roll back partial scoped settings replacement
1window2 Oct 15, 2026
00accee
refactor: share profile registry key and capacity handling
1window2 Oct 15, 2026
40d0ce4
refactor: share hex and SHA-256 helpers
1window2 Oct 15, 2026
beda296
chore: remove unused resources and legacy status accessors
1window2 Oct 15, 2026
a527f49
fix: polish member detail, inputs, and metric labels
1window2 Oct 15, 2026
c49d0ac
refactor: share merit rules and solver helpers
1window2 Oct 15, 2026
a3f9f54
refactor: drop dead certainty branch and qualified time types
1window2 Oct 15, 2026
bcd06a0
refactor: derive revision caps from the history codec limits
1window2 Oct 15, 2026
12723c8
docs: describe the split database helper and active-state rule
1window2 Oct 15, 2026
cc0c584
docs: describe the v2.5.0 UI foundation and capture worker
1window2 Oct 15, 2026
9f0c75e
Merge management and settings fixes into v2.5.0
1window2 Oct 15, 2026
f181f41
feat: localize shared weekly images and auto-detect restored backups
1window2 Oct 15, 2026
0ca11bf
docs: release notes and version 2.5.0
1window2 Oct 15, 2026
7941ad9
refactor: reuse paints across weekly PNG cells
1window2 Oct 15, 2026
2ad1c9c
fix: close UI review findings
1window2 Oct 15, 2026
2a5a3de
fix: name capture clients and current controls in Home and onboarding
1window2 Oct 15, 2026
325c750
fix: ignore repeated native flow close callbacks
1window2 Oct 15, 2026
435a0c4
fix: keep native flow ids unique across capture sessions
1window2 Oct 15, 2026
afe7bb9
feat: surface the latest roster change on Home and mark today in the …
1window2 Oct 15, 2026
807478b
fix: clear pending JNI exception when flow addresses cannot be allocated
1window2 Oct 15, 2026
332d4bc
fix: drive native purge and traffic timer from the monotonic clock
1window2 Oct 15, 2026
e62dfaa
refactor: keep no native state for untracked flows
1window2 Oct 15, 2026
755dc97
fix: keep read-only early exits from discarding outer transactions
1window2 Oct 15, 2026
d9c13ac
fix: derive game days from local wall-clock time across DST
1window2 Oct 15, 2026
22311b1
fix: discard a continued dataset when one of its frames is malformed
1window2 Oct 15, 2026
394388f
fix: export the current membership period in member CSV
1window2 Oct 15, 2026
1f108d5
refactor: parse stream frames in place without per-message copies
1window2 Oct 15, 2026
4293702
fix: quarantine a bound flow that reports an unregistered Platoon
1window2 Oct 15, 2026
6c00905
fix: bound Updates member names and member lists before persistence
1window2 Oct 15, 2026
43e27c9
fix: render the live weekly table when history recording fails
1window2 Oct 15, 2026
3676989
fix: reject weekly notes and overrides outside their week
1window2 Oct 15, 2026
f41cb8f
fix: release a pending Platoon claim when confirmation fails unexpect…
1window2 Oct 15, 2026
ac6addd
refactor: bind only live flows before replaying a confirmed Platoon
1window2 Oct 15, 2026
478349f
fix: validate the raw Discord webhook path that is actually sent
1window2 Oct 15, 2026
064456d
fix: keep the unknown join of an Updates withdrawal period editable
1window2 Oct 15, 2026
5ed4385
refactor: drop unused capture status and checklist helpers
1window2 Oct 15, 2026
f49077b
fix: tighten contrast, guard repeat actions and keep unsaved edits
1window2 Oct 15, 2026
1d48eb5
fix: retire consumed CSV import checkpoints atomically
1window2 Oct 15, 2026
89185fb
fix: restore the exact scoped timezone when a server change fails
1window2 Oct 15, 2026
55f7c40
fix: keep the per-capture admission limit across service restarts
1window2 Oct 15, 2026
cde4243
refactor: remove unused database, history, and import helpers
1window2 Oct 15, 2026
e156a77
feat: open the week at today and smooth roster and settings flows
1window2 Oct 15, 2026
9865b59
refactor: replace verbose function comment blocks with concise KDoc
1window2 Oct 15, 2026
c5dc25a
fix: never merge a roster cut short by a parser boundary into a later…
1window2 Oct 15, 2026
72cf74d
refactor: drop flow-end plumbing now that roster writes are stateless
1window2 Oct 15, 2026
512293a
refactor: split weekly report row and cell construction
1window2 Oct 15, 2026
97cc634
feat: edit a member's week in one pass and trim Home dead ends
1window2 Oct 15, 2026
bb792ea
style: quieter ranks, visible cutline cells and a steadier type scale
1window2 Oct 15, 2026
f9ea3b2
fix: drop non-positive stored member-order UIDs before settings valid…
1window2 Oct 15, 2026
688a689
Merge branch 'v2.5.0-capture' into v2.5.0
1window2 Oct 15, 2026
215b0c1
docs: native flow id lifetime, discarded partial rosters and current …
1window2 Oct 15, 2026
9b274a6
fix: retry hint names the current capture controls
1window2 Oct 15, 2026
db446bd
fix: list languages in the same order in onboarding and settings
1window2 Oct 15, 2026
f0edcbe
refactor: import fully qualified types and drop an unread boundary field
1window2 Oct 15, 2026
bd06d66
fix: date, time and sort fields grow with the font size instead of cl…
1window2 Oct 15, 2026
1e0d94a
fix: CSV import summary reads correctly for a single file
1window2 Oct 15, 2026
88a9ae7
fix: replay out-of-order captured rosters instead of treating them as…
1window2 Oct 15, 2026
f85046a
Merge branch 'v2.5.0-domain' into v2.5.0
1window2 Oct 15, 2026
4e08925
fix: allow editing the unknown join of a withdrawal-only period; docu…
1window2 Oct 15, 2026
5be23a9
fix: keep installed-client badges legible on the running capture panel
1window2 Oct 15, 2026
b122194
build: move Kotlin from 2.4.20-Beta1 to stable 2.4.21
1window2 Oct 15, 2026
662dd75
ci: note the stable Kotlin version beside the CodeQL compatibility pin
1window2 Oct 15, 2026
8a89389
docs: changelog for the second 2.5.0 pass
1window2 Oct 15, 2026
710c997
fix: stop capture in place for guarded actions and keep capture times…
1window2 Oct 15, 2026
7c2b931
fix: track picker dialogs so recreated screens close them
1window2 Oct 15, 2026
b6516ea
fix: refresh edited weekly rows by their current adapter position
1window2 Oct 15, 2026
be2187f
fix: start weekly editing from the table shown at confirmation
1window2 Oct 15, 2026
b280c8e
fix: render one weekly PNG per share request
1window2 Oct 15, 2026
4362b5f
fix: name the export that failed in backup and weekly CSV messages
1window2 Oct 15, 2026
50f6c36
fix: give weekly evidence counts their own line instead of a trailing…
1window2 Oct 15, 2026
8c747f8
fix: align the add-profile action with the CSV destination choices
1window2 Oct 15, 2026
c74949b
fix: leave member details only after the profile save succeeds
1window2 Oct 15, 2026
883f850
fix: ignore repeated submissions while history, undo, and delete writ…
1window2 Oct 15, 2026
7181e0e
fix: keep the chosen member-order sort across recreation
1window2 Oct 15, 2026
abb573a
fix: close packet details when the active Platoon changes
1window2 Oct 15, 2026
9cd5104
fix: format UIDs and labeled descriptions through string placeholders
1window2 Oct 15, 2026
907ba0e
refactor: share inline error and clipboard helpers across screens
1window2 Oct 15, 2026
4fd1c5b
refactor: move the weekly edit draft into a testable session
1window2 Oct 15, 2026
9318b7b
fix: refresh neighbouring weeks that read a capture across the reset
1window2 Oct 15, 2026
db36ca6
refactor: extract weekly CSV and PNG exports from the weekly screen
1window2 Oct 15, 2026
cdc7223
refactor: extract the weekly notes and membership footer
1window2 Oct 15, 2026
e06e858
fix: keep restored reset-zone overrides consistent with the profile r…
1window2 Oct 15, 2026
d5add44
refactor: extract Home packet history into its own section
1window2 Oct 15, 2026
23e4e09
refactor: extract the Home capture panel rendering
1window2 Oct 15, 2026
ecdc2b8
fix: request capture consent once per start tap
1window2 Oct 15, 2026
6ebb5a8
fix: bound manual member names and notes where they are stored
1window2 Oct 15, 2026
be1508b
refactor: extract the roster row and withdrawn-member dialog
1window2 Oct 15, 2026
8a9ce33
refactor: extract Settings backup flow and Discord webhook row
1window2 Oct 15, 2026
fab1254
refactor: drop unused spacer, work cancel, and top-bar title accessor
1window2 Oct 15, 2026
31788c1
fix: skip dialogs requested by a finishing screen
1window2 Oct 15, 2026
ea57ff6
fix: roll back unrecognized scoped timezone keys verbatim
1window2 Oct 15, 2026
4bad722
fix: let an interrupted restore cleanup finish on the next start
1window2 Oct 15, 2026
7b43c3f
fix: never merge weekly overrides into a pair storage rejects
1window2 Oct 15, 2026
ced7d75
fix: keep shared weekly labels and notes on whole characters
1window2 Oct 15, 2026
c83592d
fix: date undated membership boundaries in the game zone for overlap …
1window2 Oct 15, 2026
295d1b0
fix: keep manual overrides in recorded weekly revisions
1window2 Oct 15, 2026
9b04f8d
fix: read an unusable stored target package as the default
1window2 Oct 15, 2026
50da2b8
fix: hold the CSV import claim through a failed seal's rollback
1window2 Oct 15, 2026
824fd7b
refactor: remove unused management models and unreachable branches
1window2 Oct 15, 2026
b3d65d4
fix: refresh the weeks of roster boundaries correlated to earlier act…
1window2 Oct 15, 2026
2496ff8
Merge branch 'v2.5.0-data' into v2.5.0
1window2 Oct 15, 2026
f9e81ae
fix: save weekly edits against stored overrides and bound manual text…
1window2 Oct 15, 2026
0aa9977
docs: changelog for the final 2.5.0 fixes
1window2 Oct 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/codeql/codeql-kotlin-compat.init.gradle
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// CodeQL 2.26.x can analyze Kotlin 2.4.0 through 2.4.19, while the production
// build must use 2.4.20-Beta1 or newer to address GHSA-r937-wjx7-w2jp.
// build uses 2.4.21 (2.4.20 or newer addresses GHSA-r937-wjx7-w2jp).
// This init script is used only by the isolated, cache-disabled CodeQL compile.
gradle.beforeProject { project ->
project.buildscript.configurations.configureEach { configuration ->
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ jobs:
env:
# Keep the scanner-only compatibility compiler isolated from every
# persistent Gradle cache. Production builds continue to use the
# patched 2.4.20-Beta1 plugin declared in build.gradle.
# patched 2.4.21 plugin declared in build.gradle.
GRADLE_USER_HOME: ${{ runner.temp }}/codeql-gradle-home
run: >
./gradlew
Expand Down
100 changes: 100 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,106 @@

All notable changes to mobileGF2logger are documented here.

## 2.5.0 - 2026-10-16

### Added

- Draw every screen edge to edge with system-bar, cutout, and keyboard insets,
and keep drafts, selections, and pending exports across rotation, theme or
language changes, and process recreation.
- Rebuild the weekly table around a frozen member column, synced horizontal day
columns, and a sticky day header; tapping a cell explains every metric of
that day in one sheet.
- Edit weekly cells one day at a time with tri-state Login/Patrol choices,
highlighted changes, an explicit cancel, and a discard confirmation.
- Add Platoon roster filters (Active, Withdrawn, All), a sort chooser, summary
tiles, and long-press selection for CSV export; add move up/down
accessibility actions to member ordering.
- Show capture notices in English and Korean, the install state of both
supported clients, and a live one-time-capture checklist without polling.
- Restore either backup kind from one Settings entry, which detects whether the
archive includes app settings; replay the welcome guide from Settings.
- Localize every label in shared weekly PNGs.
- Open the weekly grid at today's column, add Apply, next day to cell edits, and
show Home's latest roster change with joined/withdrew counts.
- Add a clear button to Platoon search and confirm before a sort replaces a
hand-arranged member order.

### Changed

- Move backups into Settings and keep Home focused on capture, the active
Platoon, data tools, and Recent/Saved packet history tabs.
- Move secondary weekly and Platoon utilities into top-bar overflow menus.
- Request the notification permission when capture starts instead of at launch.
- Render table-history previews as the native table instead of a bitmap.
- Split the management database into focused SQL objects behind the same
single transactional owner, and split the capture service into a serial
worker, flow engine, admission coordinator, and notification helper.
- Add AndroidX Activity as the only new dependency.
- Raise secondary-text and status-mark contrast, keep the accent for tappable or
selected items, mark today in the weekly header, fill below-cutline cells, and
keep rank highlights for the top three.
- Show Undo last CSV import only while a checkpoint exists; scale weekly rows
and date fields with the system font size.
- Build with stable Kotlin 2.4.21 instead of 2.4.20-Beta1.

### Fixed

- Release native global references, join each capture thread exactly once, and
classify TLS/HTTP flows only on their first payload so plaintext game data
can no longer silently disable inspection.
- Stop capture without blocking the main thread, keep pending Platoon
confirm/discard working after capture stops, and remove cross-thread races in
capture state and status.
- Serialize parsed-packet history per directory, stop deleting files while
listing, and write each roster CSV once with distinct row counts.
- Keep unmergeable continuation payloads instead of silently dropping them.
- Recover CSV checkpoint restores into the Platoon's own settings, release
checkpoint claims on every failure, and remove a lock-order deadlock between
profile deletion recovery and backup restore.
- Compare restored schemas against an in-memory reference, run restore
recovery only when artifacts exist, and roll back partially replaced scoped
settings.
- Derive member active state from one canonical membership-period rule.
- Load member periods in one query, batch inferred boundary correlation, solve
only period-end roster rows, and refresh only weekly revisions a member edit
affects.
- Stop wiping member name and note edits after editing a membership period,
stop deleting a weekly note on tap, make the packet raw/table toggle
reversible, and prevent double restores.
- Move every repository, file, and network call off the main thread.
- Truncate document-provider files when exporting so overwritten files cannot
keep stale trailing bytes.
- Stop a native double free when a closing flow's reset cannot be written, keep
native flow ids unique across captures, clear pending JNI exceptions, and
drive native timers from the monotonic clock.
- Discard a continued roster whose frame is malformed or cut short instead of
publishing it as complete, so missing members are never marked withdrawn.
- Quarantine a bound flow that reports a different, unregistered Platoon,
release a pending claim when confirmation fails, and keep the per-capture
admission limit across service restarts.
- Replay out-of-order captured rosters into history, derive game days from
local 05:00 across daylight-saving changes, export a rejoined member's
current period, and keep the unknown join of a withdrawal-only period
editable.
- Retire CSV import checkpoints atomically, keep weekly notes and overrides
inside their week, render the live weekly table when history recording
fails, and restore the exact timezone when a server change fails.
- Report admission failures inside the New Platoon dialog, block repeated
send/share/backup/restore taps, ask before leaving an edited member, and
dismiss a screen's dialogs when it closes.
- Offer Stop capture in place when a backup, restore, CSV import or profile
change needs capture stopped, and preselect the configured server when a new
Platoon is detected.
- Refresh neighbouring weekly tables that read a capture at the 05:00 reset,
keep restored reset-zone overrides consistent with the Platoon's server, and
roll interrupted restores back to the exact previous settings.
- Keep manual weekly values in restored tables and when saving edits, settle
contradictory Login/Patrol choices, and date manual membership overlaps in
the game time zone.
- Bound manual member names to 256 and notes to 1,000 characters, and close
date pickers and dialogs that belong to a finishing or recreated screen.

## 2.4.2 - 2026-08-27

### Added
Expand Down
9 changes: 7 additions & 2 deletions DESIGN.md
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ The palette is warm, low-glare, and predominantly neutral; semantic color is nev

## Layout

Use a 4dp grid, a 16dp default screen inset, and 16-24dp between sections. Every actionable region is at least 48dp high even when its visible fill is inset. Home remains status-led; Settings uses grouped rows; onboarding keeps fixed top controls and bottom navigation around a flexible central explanation. Home, Platoon, and Weekly alone use the three-item bottom navigation.
Use a 4dp grid, a 16dp default screen inset, and 16-24dp between sections. Every actionable region is at least 48dp high even when its visible fill is inset. Content draws edge to edge with system-bar insets applied by the shared screen shell. Home remains status-led; Settings uses grouped rows and owns backup and restore; onboarding keeps fixed top controls and bottom navigation around a flexible central explanation. Home, Platoon, and Weekly alone use the three-item bottom navigation.

## Elevation & Depth

Expand Down Expand Up @@ -159,7 +159,11 @@ Home, Platoon, and Weekly share a 64dp bottom bar. Each destination has a 24dp i

### Capture Status Panel

Capture state, two compact read-only supported-client package IDs, their concise help popover, and Start/One-time/Stop actions form one operational group. Start actions become unavailable while capture is preparing or active; Stop becomes unavailable while stopped.
Capture state, its localized latest notice, the one-time capture checklist, the two supported clients with their package IDs and install state, and the capture actions form one operational group. While stopped the panel offers One-time capture (primary) and Continuous capture; while preparing or capturing those are replaced by a single Stop action.

### Weekly Table

The member column stays frozen while the seven day columns and the total scroll horizontally as one grid under a sticky day header. Each cell shows merit, the Gunsmoke score and attempts when relevant, and Login/Patrol marks; tapping it explains every metric's evidence in one sheet. Edit mode edits one member-day at a time and highlights changes until they are saved.

### Onboarding

Expand All @@ -170,6 +174,7 @@ Five dark editorial pages present the emblem, one concise topic, progress, three
### Do:

- **Do** keep capture state and next actions visible without scrolling on the primary screen.
- **Do** move secondary utilities into the top-bar overflow menu instead of stacking full-width buttons.
- **Do** preserve 48dp targets, native checked semantics, and Android Back behavior.
- **Do** verify English, Korean, light/dark themes, system bars, and enlarged text on a physical device.
- **Do** use orange sparingly for primary action and selection.
Expand Down
7 changes: 4 additions & 3 deletions PRODUCT.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@ recoverable user-controlled backup and export.

- Keep the existing Kotlin/Android Views architecture. Do not introduce a
parallel UI framework or move repository, parser, capture, or report policy
into Activities.
into Activities. AndroidX Activity is the only UI library dependency; it
provides ComponentActivity, the Activity Result API, and edge-to-edge support.
- Preserve English and Korean, System/Light/Dark appearance, Android Back
behavior, private app storage, and explicit user-driven share/export.
- Keep the three primary destinations clear: Home, Platoon, and Weekly.
Expand All @@ -57,8 +58,8 @@ is the binding visual direction for the v2.3.0 frontend:
stop, destructive, or failed states;
- layouts are compact, status-led, flat, and separated with hairlines or tonal
surfaces instead of nested oversized cards;
- Home uses a status dashboard, key Platoon/Weekly shortcuts, concise utilities,
recent evidence, and a three-destination bottom bar;
- Home uses a status dashboard, the active Platoon, concise data tools, recent
evidence, and a three-destination bottom bar;
- Settings uses a compact top bar and grouped list rows;
- onboarding uses an editorial dark composition with the emblem, concise
feature guidance, visible progress, top-right Skip, and bottom navigation.
Expand Down
7 changes: 4 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ never stored.
- Decodes each Platoon's banner frame and mark from `21905` and displays the
matching original in-game emblem in profile selectors.
- Tracks active and withdrawn members, non-overlapping repeat membership periods, exact Updates timestamps, editable nicknames, and private notes.
- Builds Sunday-to-Saturday Standard or Gunsmoke Frontline weekly tables around the selected server's daily reset, with cut-off points and manual correction for missing data.
- Builds Sunday-to-Saturday Standard or Gunsmoke Frontline weekly tables around the selected server's daily reset, with a frozen member column, a sticky day header, cut-off points, and per-day manual correction for missing data.
- Offers One-time Capture that tracks the four useful Platoon payloads and stops automatically when the checklist is complete.
- Explains every weekly cell on tap and summarizes missing or uncertain evidence in an Evidence Health panel.
- Keeps up to 15 complete automatic revisions per weekly table so an earlier projection and its displayed member context can be previewed and restored after an accidental import.
Expand All @@ -35,10 +35,11 @@ never stored.
- Saves or shares a weekly PNG with opt-in controls for names, UIDs, and private notes.
- Can send a validated original CSV to an optional user-owned Discord incoming webhook after confirmation.
- Stores the latest 100 parsed packets and up to 50 saved packets, with table and raw views, copy, export, selection, and deletion.
- Supports member sorting, persistent drag ordering, snapshot comparison, single-week and all-week CSV export, and profile-aware `.gf2backup` export/restore that leaves other Platoons unchanged.
- Supports member sorting, persistent drag ordering, snapshot comparison, single-week and all-week CSV export, and profile-aware `.gf2backup` export/restore in Settings that detects whether a backup includes app settings and leaves other Platoons unchanged.
- Keeps a newly detected Platoon's packets in bounded memory until the user confirms one of the verified client's compatible servers; unconfirmed data is discarded on force-stop or process death.
- Provides profile management for correcting server metadata without moving data and for deleting one isolated Platoon behind two confirmations and an exact-name check.
- Guides first-time users through Main, Settings, Platoon management, weekly controls, and parsed-packet pages, with a persistent English/Korean selector and Skip action.
- Guides first-time users through Main, Settings, Platoon management, weekly controls, and parsed-packet pages, with a persistent English/Korean selector and Skip action; the guide can be replayed from Settings.
- Draws edge to edge and keeps drafts, selections, and pending exports across rotation, theme or language changes, and process recreation.
- Supports English and Korean, System/Light/Dark themes, and the six known
Darkwinter/HaoPlay server-region reset presets converted to the phone timezone.
Selecting a detected Platoon automatically follows that profile's saved region.
Expand Down
7 changes: 4 additions & 3 deletions README_KR.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ mobileGF2logger는 서클장을 위한 가벼운 비루팅 앱입니다. Android
- `21905`에서 각 서클의 배너 프레임과 도안을 해석하고, 서클 선택 화면에
대응하는 게임 원본 엠블럼을 표시합니다.
- 가입 및 탈퇴 멤버, 서로 겹치지 않는 반복 가입 이력, 동향의 정확한 시각, 수정 가능한 닉네임과 개인 비고를 관리합니다.
- 선택한 서버의 일일 초기화 시각을 기준으로 일요일부터 토요일까지의 일반 주간 또는 흙먼지 주간 표를 만들며, 커트라인과 누락 데이터 수동 수정을 지원합니다.
- 선택한 서버의 일일 초기화 시각을 기준으로 일요일부터 토요일까지의 일반 주간 또는 흙먼지 주간 표를 만들며, 멤버 열 고정과 날짜 머리글 고정, 커트라인, 날짜별 누락 데이터 수동 수정을 지원합니다.
- 한 번만 캡처는 네 가지 유용한 서클 페이로드의 수집 상태를 표시하고 체크리스트가 완료되면 자동으로 중지합니다.
- 모든 주간 셀을 누르면 근거를 설명하고, 근거 상태 패널에서 누락되거나 불확실한 데이터를 요약합니다.
- 주간 표마다 표시 당시의 멤버 문맥까지 포함한 전체 자동 기록을 최대 15개 보관하여 잘못 가져온 뒤에도 이전 표를 미리 보고 복원할 수 있습니다.
Expand All @@ -29,10 +29,11 @@ mobileGF2logger는 서클장을 위한 가벼운 비루팅 앱입니다. Android
- 이름, UID, 비공개 메모의 포함 여부를 선택해 주간 PNG를 저장하거나 공유할 수 있습니다.
- 확인 후 검증된 원본 CSV를 사용자가 소유한 선택적 Discord 수신 웹훅으로 전송할 수 있습니다.
- 최근 파싱 패킷 100개와 저장 패킷 50개를 보관하며, 표 및 원본 보기, 복사, 내보내기, 선택, 삭제를 지원합니다.
- 멤버 정렬, 드래그 순서 유지, 최근 스냅샷 비교, 주간 CSV 내보내기, 다른 서클을 변경하지 않는 프로필별 백업 및 복원을 지원합니다.
- 멤버 정렬, 드래그 순서 유지, 최근 스냅샷 비교, 주간 CSV 내보내기, 다른 서클을 변경하지 않는 프로필별 백업 및 복원을 설정에서 지원하며, 복원 시 앱 설정 포함 여부를 자동으로 판별합니다.
- 새 서클은 확인된 클라이언트에 맞는 서버를 사용자가 선택할 때까지 패킷을 제한된 메모리에만 보관하며, 강제 종료 또는 프로세스 종료 시 확인되지 않은 데이터를 버립니다.
- 서버 정보는 데이터를 이동하지 않고 수정할 수 있으며, 서클 삭제는 두 번의 확인과 정확한 서클 이름 입력을 거쳐 해당 격리 데이터만 제거합니다.
- 첫 사용 시 메인, 설정, 서클 관리, 주간 기능, 파싱 패킷 화면을 안내하며, 한국어/English 전환과 건너뛰기를 지원합니다.
- 첫 사용 시 메인, 설정, 서클 관리, 주간 기능, 파싱 패킷 화면을 안내하며, 한국어/English 전환과 건너뛰기를 지원합니다. 안내는 설정에서 다시 볼 수 있습니다.
- 화면을 가장자리까지 그리며, 회전·테마·언어 변경이나 프로세스 재생성 후에도 작성 중인 내용과 선택, 대기 중인 내보내기를 유지합니다.
- 영어와 한국어, 시스템/라이트/다크 테마를 지원합니다. 알려진 Darkwinter/HaoPlay 6개 서버 지역의 초기화 시각을 기기 시간대로 환산하며, 감지된 서클을 선택하면 해당 프로필에 저장된 지역을 자동으로 따릅니다.
- HaoPlay(`com.haoplay.game.and.exilium`)와 Darkwinter(`com.Sunborn.SnqxExilium.Glo`) Android 클라이언트를 별도의 VPN 대상으로 등록합니다.
- 다음 열 순서의 UTF-8 서클 멤버 CSV 파일을 만듭니다.
Expand Down
6 changes: 6 additions & 0 deletions THIRD_PARTY_NOTICES.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,9 @@ zdtun is dynamically packaged as `libzdtun.so`; mobileGF2logger's JNI integratio
- License declaration: MIT

mobileGF2logger reproduces the documented framing, recognized payload identifiers, protobuf field mappings, and Platoon CSV column order. It does not bundle the Python application or generated Python protobuf runtime.

## Material icons

- Project: [google/material-design-icons](https://github.com/google/material-design-icons)
- License: Apache License 2.0
- Bundled source: vector paths in `app/src/main/res/drawable/ic_*.xml`
5 changes: 3 additions & 2 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -154,8 +154,8 @@ android {
applicationId = 'dev.gf2log'
minSdk = 26
targetSdk = 36
versionCode = 20402
versionName = '2.4.2'
versionCode = 20500
versionName = '2.5.0'
testInstrumentationRunner = 'androidx.test.runner.AndroidJUnitRunner'

ndk {
Expand Down Expand Up @@ -223,6 +223,7 @@ android {

dependencies {
implementation project(':protocol')
implementation 'androidx.activity:activity:1.12.4'
implementation 'androidx.core:core:1.17.0'
implementation 'androidx.recyclerview:recyclerview:1.4.0'
testImplementation 'junit:junit:4.13.2'
Expand Down
3 changes: 2 additions & 1 deletion app/proguard-rules.pro
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@
-keep class dev.gf2log.app.capture.NativeCaptureBridge { *; }
-keep interface dev.gf2log.app.capture.NativeCaptureBridge$PayloadListener { *; }
-keepclassmembers class * implements dev.gf2log.app.capture.NativeCaptureBridge$PayloadListener {
public void onPayload(long, boolean, byte[]);
public void onFlowOpened(long, int, java.lang.String, int, java.lang.String, int);
public void onPayload(long, byte[]);
public void onFlowClosed(long);
public void onTraffic(long, long, long);
public void onCaptureStopped();
Expand Down
Loading
Loading