Skip to content

Rebrand to Yukinine VPN with Material Design 3 theme - #1

Open
yukinine-dev wants to merge 14 commits into
masterfrom
claude/festive-curie-M2Aex
Open

yukinine-dev wants to merge 14 commits into
masterfrom
claude/festive-curie-M2Aex

Conversation

@yukinine-dev

Copy link
Copy Markdown
Owner

Summary

This PR rebrand the application from v2rayNG to Yukinine VPN and implements a comprehensive Material Design 3 color system with dynamic theming support.

Key Changes

Branding & Identity

  • Changed application ID from com.v2ray.ang to com.yukinine.vpn
  • Updated app name from "v2rayNG" to "Yukinine VPN"
  • Updated launcher icon background color to match new primary color (#4A55A2)
  • Created new stylized "Y" logo for launcher and splash screen

Material Design 3 Theme System

  • Replaced custom gray/orange color scheme with a cohesive indigo/lavender palette (seed color: #4A55A2)
  • Updated both light and dark theme color definitions with proper MD3 semantic colors:
    • Primary: Deep indigo (#4A55A2 light, #BAC3FF dark)
    • Secondary: Lavender (#7E5DBD light, #D0BCFF dark)
    • Tertiary: Cyan (#006874 light, #4FD8EB dark)
  • Added new surface container color variants for improved visual hierarchy
  • Added VPN connection state colors (connected, connecting, disconnected)

Dynamic Theming

  • Integrated Material Dynamic Colors for system theme adaptation
  • Updated theme attributes to use proper surface container colors instead of generic surface
  • Made status bar and navigation bar transparent for edge-to-edge layout support

Splash Screen

  • Added androidx.core.splashscreen dependency
  • Implemented Material Design 3 splash screen with animated logo
  • Configured MainActivity to use splash screen theme on launch

Visual Assets

  • Converted launcher foreground from bitmap to vector drawable for better scalability
  • Created ic_splash_logo.xml with stylized "Y" mark
  • Updated adaptive icon definitions to reference new vector drawables

Code Updates

  • Added enableEdgeToEdge() call in BaseActivity for proper edge-to-edge rendering
  • Integrated installSplashScreen() in MainActivity
  • Applied DynamicColors.applyToActivitiesIfAvailable() in AngApplication for system theme support

https://claude.ai/code/session_01HDin65wpqy2HFicF8QZnrj

claude added 14 commits May 22, 2026 22:15
Switches the published app ID to the Yukinine VPN brand while leaving the
Kotlin source namespace (com.v2ray.ang) intact so the existing import graph
keeps compiling.
Light scheme seeded from a deep indigo primary (#4A55A2) with a lavender
secondary; dark scheme mirrored. Adds discrete surface container tones
(low/medium/high/highest) so MD3 components stop flattening to a single
surface color, plus status_connected/connecting/disconnected swatches for
VPN state UI.
Applies the wallpaper-derived palette to every activity on devices that
support it; pre-12 devices fall back to the static Yukinine palette.
Hoists enableEdgeToEdge() into BaseActivity.onCreate so every activity (including
those routed through HelperBaseActivity) opts in once, and switches the theme to
transparent system bars with the navigation bar contrast scrim disabled — the
edge-to-edge API now controls bar appearance based on day/night mode.
Adds the core-splashscreen dependency, a Theme.YukinineVPN.Splash that draws
a stylized 'Y' on the primaryContainer color, points MainActivity's launcher
theme at it in the manifest, and calls installSplashScreen() before super in
MainActivity.onCreate so the splash hands off cleanly to the app theme.
Replaces the white v2rayNG bitmap foreground with a vector 'Y' on a deep-indigo
(#4A55A2) background and wires up a monochrome layer for themed icons.

The legacy ic_launcher_foreground.png densities are left in place as a fallback
for Android 7 (API 24-25), which doesn't render adaptive-icon XML.
Replaces the floating connect FAB with a filled MaterialCardView at the top of
the main screen. The card hosts a 160dp circular MaterialButton whose tint
swaps between primaryContainer (idle) and tertiaryContainer (active),
plus a titleLarge status label and a bodyMedium subtitle that surfaces the
currently selected server's remarks. The whole card is tappable as a fallback
target. The connectivity test footer is kept underneath for ping checks.
Replaces the overflow-style 'Add' submenu with a Material 3 bottom sheet.
The sheet surfaces the four primary import paths (QR, clipboard, file,
subscription refresh) as filled rounded rows backed by secondaryContainer
icon tiles, and exposes the per-protocol manual entry options as a chip
group below. The MainActivity onOptionsItemSelected loses the parallel
case ladder and just opens the sheet for the consolidated entry point.
Wraps the domain-strategy row in a filled MaterialCardView, adds a second
card hosting a MaterialButtonToggleGroup that exposes each predefined ruleset
(China Whitelist/Blacklist, Global, Iran, Russia) as a quick toggle. Tapping
a toggle confirms via dialog before delegating to the existing
SettingsManager.resetRoutingRulesetsFromPresets path so the underlying rule
serialization is unchanged.
Decode-keystore and release signing steps now require APP_KEYSTORE_BASE64 to be
set. When it isn't (fork PR builds, fresh clones), the workflow builds an
unsigned debug APK and uploads it as yukinine-vpn-debug instead, so CI can
verify that branch changes still compile without committing keystore material
to the fork.
GitHub Actions disallows the secrets context inside step-level if expressions,
so feature-branch builds were failing workflow validation. Switches the gate
to github.ref == refs/heads/master (or workflow_dispatch) — non-master pushes
fall through to assembleDebug + a yukinine-vpn-debug artifact.
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.

2 participants