Skip to content

Sync my-releases with v2rayNG master (v2.3.9) - #26

Merged
patterniha merged 8 commits into
my-releasesfrom
copilot/sync-pattng-my-releases-with-master
Sep 22, 2026
Merged

patterniha merged 8 commits into
my-releasesfrom
copilot/sync-pattng-my-releases-with-master

Conversation

Copilot AI commented Sep 22, 2026

Copy link
Copy Markdown

Syncs the my-releases branch with 2dust/v2rayNG master (v2.3.9), merging 6 upstream commits while preserving all PattNG-specific customizations. Resolved as a true two-parent merge (99f19bbeb) plus a resolution commit (6354fe2cb).

Upstream changes merged

  • up 2.3.9 — version bump
  • Preserve groups when replacing profiles — MmkvManager
  • Animate start FAB icon spin on tap — MainBottomBar
  • Adjust toast background opacity — compose/Theme
  • Show service start failure details — surfaces a failure reason to the UI

Conflicts resolved (PattNG customization kept, upstream behavior adopted)

  • build.gradle.kts — adopted upstream versionCode 749 / 2.3.9, kept the pattngVersion property override:
    versionCode = 749
    versionName = (project.findProperty("pattngVersion") as? String)?.takeIf { it.isNotBlank() } ?: "2.3.9"
  • MainServiceEvent.kt — took upstream's nullable StateStartFailure(val message: String? = null); kept PattNG's StateConnecting event.
  • MainRepository.kt — passes the nullable content through for start-failure; kept the MSG_STATE_CONNECTING mapping.
  • MainViewModel.kt — switched to upstream's isNullOrBlank failure-message handling; kept the PattNG comment documenting that the daemon only attaches localized resource strings (Aether core) as the reason.

Preserved PattNG behavior

  • Aether protocol feature and ServerAetherActivity (including open validateBasicConfig)
  • PattNG branding across localized strings
  • StateConnecting UI state (not present upstream)
  • Failure-reason contract: senders only attach localized resource strings, so technical exception messages stay in logs and never reach the toast

Notes

  • Non-conflicted files (MmkvManager.kt, Theme.kt, MainActivity.kt, MainBottomBar.kt, CheckUpdateViewModel.kt) merged cleanly.
  • Merged rather than rebased (per the established sync workflow) to keep both parents intact.
  • git diff --check is clean and no conflict markers remain. A local Gradle build could not be run in this environment (dl.google.com is unreachable from the sandbox), so a compile/device check is Not run and should be verified before release.

2dust and others added 8 commits September 22, 2026 10:41
Pass the optional failure message from the service layer through `MainServiceEvent` and show it in `MainViewModel` when available. This preserves the existing generic error toast as a fallback while surfacing more specific startup failures to the user.
Increase toast background opacity from 70% to 85% for all theme variants in Theme.kt. This improves readability and keeps toast notifications visually consistent without changing their content or behavior.
Co-authored-by: patterniha <71074308+patterniha@users.noreply.github.com>
@patterniha

Copy link
Copy Markdown
Owner

@copilot
check all changes again, also are you sure about all the changes?

Copilot AI commented Sep 22, 2026

Copy link
Copy Markdown
Author

@copilot
check all changes again, also are you sure about all the changes?

Re-verified every change independently. I'm confident — with one caveat at the end.

Method: instead of trusting the merge, I recomputed it. git merge-tree origin/my-releases upstream/master independently reproduces exactly the same 4 conflicts (build.gradle.kts, MainRepository, MainServiceEvent, MainViewModel) and nothing else. HEAD's tree equals that auto-merge result plus only my 4 resolutions — confirmed by git diff <merge-tree> HEAD, which lists only those 4 files, each diff being just the conflict-marker removal with the correct merged content.

File-by-file:

  • 5 non-conflicted files (MmkvManager, Theme, MainBottomBar, CheckUpdateViewModel, MainActivity) — first 4 are byte-identical to upstream. MainActivity differs from upstream only by PattNG's own pre-existing customizations (both EConfigType.AETHER branches, ServerAetherActivity import, onStart/RefreshServiceState); its single change vs my-releases is upstream's own "Fix" commit (removed PREF_PROXY_SHARING condition), applied cleanly.
  • 4 conflicted files — each keeps the PattNG customization while adopting upstream's new behavior:
    • build.gradle.kts: versionCode 749 / pattngVersion override with 2.3.9 fallback.
    • MainServiceEvent: upstream's nullable StateStartFailure(String? = null) + PattNG's StateConnecting.
    • MainRepository: nullable content passed to start-failure; MSG_STATE_CONNECTING mapping kept.
    • MainViewModel: upstream's isNullOrBlank handling; PattNG's comment explaining the localized-reason contract kept.

PattNG features intact: Aether protocol + ServerAetherActivity (incl. open validateBasicConfig at BaseServerActivity.kt:397, overridden at ServerAetherActivity.kt:310), PattNG branding across all locales (no >v2rayNG< anywhere), StateConnecting UI state.

Hygiene: no conflict markers remain; git diff --check clean; merge scope matches upstream's 6-commit file set exactly.

Caveat (unchanged from PR notes): I could not run a Gradle compile — dl.google.com is unreachable from this sandbox, and the Build APK workflow only fires on push to master, not on PRs. So the merge is tree-verified but not compile-verified. Please let CI build it on master/manual dispatch, or run :app:compilePlaystoreDebugKotlin locally, before releasing.

Copilot AI requested a review from patterniha September 22, 2026 09:07
@patterniha
patterniha marked this pull request as ready for review September 22, 2026 09:09
@patterniha
patterniha merged commit 158161d into my-releases Sep 22, 2026
1 check 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.

3 participants