Commit graph

29 commits

Author SHA1 Message Date
instant992
a807fa9db6 Rotate to another server on stuck proxy connection
- ProxyRotationController now probes VLESS+Reality servers with a real TCP
  latency check (the MTProto check always failed for them), so rotation can
  actually find a working server
- Switching to a built-in VLESS server now starts Xray and points Telegram
  at the local SOCKS5 listener via XrayController.switchToBuiltinProxy,
  instead of pointing at the raw server address
- Skip built-in servers that don't match the current network when rotating
- Trigger rotation not only on ConnectingToProxy but also on prolonged
  Connecting/WaitingForNetwork states, covering the infinite-connecting case
2026-06-11 04:13:10 +04:00
instant992
cf44ff32b9 Use the FoxiGram icon on the onboarding/intro screen
- Regenerate ic_launcher_intro.webp from the FoxiGram launcher icon so the
  intro screen shown on app entry no longer displays the old Nekogram logo
2026-06-11 00:36:58 +04:00
instant992
becd39da84 Network-aware proxy selection and accurate VLESS ping
- Show built-in servers whose name contains 'wifi' only on Wi-Fi and
  'lte/mobile/4g/5g' only on mobile data; untagged servers show everywhere
- Auto-enable, restore and live network-change handlers now pick a server
  matching the current network and switch automatically when it changes
- Replace the MTProto proxy check (which always fails for VLESS+Reality
  ports and falsely reports 'unavailable') with a real TCP-connect latency
  probe to the server endpoint
2026-06-10 23:56:31 +04:00
instant992
bbb2b84f07 Auto-enable bundled proxy on first launch; drop in-app download button
- ApplicationLoader now enables a bundled VLESS proxy on a truly fresh
  install (one-time, guarded by builtin_proxy_autoenabled) so the app can
  connect even when plain Telegram is blocked; existing users' choices are
  left untouched
- Remove the 'Download FoxiGram' settings row (the app is already
  installed) and its strings; drop the in-app download mention from READMEs
2026-06-10 22:24:42 +04:00
instant992
a46805591b Single-pass phone blur and add License section
- BlurredTextSpan draws the text once with a 5dp blur (no more repeated
  draws); the number stays unreadable
- Add a License section (GPL-2.0-or-later) to both READMEs noting the
  freedom to redistribute and the independent-fork disclaimer
2026-06-10 09:34:35 +04:00
instant992
14f4107450 Make Russian the default README and strengthen phone blur
- README.md is now Russian (default page on GitHub); English moved to
  README.en.md, both cross-linked; drop README.ru.md
- Increase BlurredTextSpan radius to 7dp and draw the blurred glyphs
  multiple times so the number becomes an unreadable smudge
2026-06-10 03:38:59 +04:00
instant992
d1bd2d7b2d Add Russian README and in-app download link
- New README.ru.md (Russian) with a download section pointing to the
  GitHub releases page; both READMEs cross-link via a language switcher
- Add 'Download FoxiGram' row in Foxi settings opening the releases page
- Provide English and Russian strings for the download row and the
  previously added phone-number privacy option
2026-06-10 03:26:32 +04:00
instant992
87b8ea4949 Use a real gaussian blur for the masked phone number
- Add BlurredTextSpan: draws the real glyphs through a BlurMaskFilter
  into a cached offscreen bitmap, so the blur works on both software and
  hardware-accelerated views
- formatOwnPhone() now returns this span in Blur mode instead of
  replacing digits with bullets
- SettingsActivity header builds the subtitle with a SpannableStringBuilder
  so the span is preserved
2026-06-10 03:03:03 +04:00
instant992
edd7c4a8b4 Pin account-info row above the list and refresh app icon
- Move the balance/subscription row out of the scrolling list into the
  fixed top panel (DialogsActivityTopPanelLayout), so it sits above the
  archive folder and is never hidden by the archive auto-scroll
- Visibility tracks SponsorHelper.isCurrentUserLinked and refreshes on
  sponsorStatusUpdated and dialog-hint updates
- Regenerate launcher icon from the new foxigram4.png
2026-06-10 02:46:52 +04:00
instant992
a776898268 Pin account-info row, add phone-number privacy option, update icon
- Account balance/subscription row now sits right after the archive folder
  so it stays visible even when the archive is auto-scrolled out of view
- New 'My phone number' setting (Show / Blur / Hide) under General >
  Privacy that masks the user's own number in Settings header and profile
- NekoConfig.formatOwnPhone() applies the chosen mode consistently
- Regenerate launcher icon from foxigram4.png
2026-06-10 02:00:10 +04:00
instant992
220b7334d5 Animate sponsor badge shimmer everywhere
- ShimmerHeartDrawable.drawStatic() now renders the moving shine band
  instead of a flat heart, using shared static paints
- DialogCell and ChatMessageCell invalidate each frame while a sponsor
  heart is visible so the shimmer animates in lists and message names
- Header and user-list badges already used the animated drawable
2026-06-10 01:20:12 +04:00
instant992
00479f6f98 Show sponsor badge next to names everywhere + update app icon
- Sponsor heart now appears in the chats list (DialogCell), chat header
  (ChatAvatarContainer), message author names (ChatMessageCell) and user
  lists (UserCell), not just on the profile screen
- Added ShimmerHeartDrawable.drawStatic() for cheap static rendering in
  frequently-repainted list cells; header keeps the animated shimmer
- Cells request sponsor status via SponsorHelper batch lookup and redraw
  on sponsorStatusUpdated
- Regenerate launcher icon from updated foxigram4.png
2026-06-10 01:00:16 +04:00
instant992
695de54a0a Sponsor badges for everyone + new app icon
- Sponsor checkmark now shows on ANY user's profile, not just your own
- SponsorHelper batches sponsor-status lookups by Telegram id (cached 6h)
  and posts sponsorStatusUpdated so the badge redraws when resolved
- ProfileActivity requests the lookup when opening a profile
- Replace the main launcher icon with foxigram4.png (all densities,
  legacy + adaptive foreground)
2026-06-10 00:13:37 +04:00
instant992
b4c3d9fbd6 Chats list: show balance & subscription for Telegram-linked accounts
- SponsorHelper now caches balance, expire_at, plan and telegram_linked
  from /mobile/me (keyed by Telegram id)
- New FoxAccountInfoCell: balance on the left, subscription days left on
  the right, shown as the first row above 'Archived chats'
- Only visible when the Telegram account is linked to GhostCloud/FoxCloud
- DialogsActivity refreshes on resume and updates the row on change
2026-06-09 23:40:37 +04:00
instant992
2fc29ea46d Foxi settings: drop official channel/site, point source to our repo, add update check
- Remove the Official Channel and Official Site entries
- Point 'View source code' at github.com/instant992/FoxiGram
- Add a 'Check for updates' row below 'Support FoxiGram'
2026-06-09 14:00:16 +04:00
instant992
76093b407e Sponsor heart: render sponsor.png with a moving shimmer highlight
- Bundle the GhostCloud sponsor.png as drawable-nodpi/foxsponsor_heart.png
- Draw the artwork and sweep a glossy highlight band across it, masked to
  the heart shape via the bitmap alpha (DST_IN), so it shimmers again
2026-06-09 13:17:52 +04:00
instant992
e2f2ceb26d Sponsor heart: airbrushed multicolor blend matching sponsor.png
Replace the hard gloss streak with soft overlapping color blobs (violet
top-left, blue center, orange/coral right and bottom) that drift slightly
for a subtle shimmer, matching the GhostCloud sponsor.png reference.
2026-06-09 12:59:35 +04:00
instant992
e9e9711f0b Rename to Foxi Settings, drop cloud sync, move support/sponsors into Donate
- Rename 'Neko Settings' -> 'Foxi Settings' (en/ru)
- Remove the cloud settings sync action (was broken/unneeded)
- Move 'Support the project' (t.me/vpnghostbot) and 'Top sponsors' from the
  main settings list into the 'Support FoxiGram' (Donate) screen
- Remove the Google Play billing section from the Donate screen
2026-06-09 10:17:54 +04:00
instant992
47f9aef160 Sponsor: GhostCloud labeling, curved gloss streak, support link & top sponsors
- Bulletin now reads 'Sponsor GhostCloud' + granted for 444+ rubles (en/ru)
- Heart highlight reworked: thin curved streak sweeping diagonally instead
  of an orbiting blob; palette tuned closer to the reference
- SponsorHelper.loadTopSponsors() hits mobile donors/leaderboard via X-Tg-Id
- New FoxSponsorsActivity lists the top sponsors
- Neko settings: 'Support the project' (t.me/vpnghostbot) + 'Top sponsors'
2026-06-09 09:54:31 +04:00
instant992
9b81a463a6 Sponsor heart: glossy 3D look with moving specular highlight
Replace the flat linear rainbow sweep with a glossy sticker-style heart:
diagonal purple/blue-to-orange base, soft purple glow, bottom shade, and
a moving glossy highlight orbiting inside plus a fixed top-left specular
dot for an iridescent emoji feel.
2026-06-09 09:27:11 +04:00
instant992
7eeae7fe82 Sponsor heart: rainbow gradient + restore custom emoji status
- Make the shimmering heart a full rainbow spectrum (was single-hue)
- Move heart to rightDrawable2 so the custom emoji status / premium star
  returns to its normal slot next to the name
- Add clickable rightDrawable2 support to SimpleTextView so tapping the
  heart still opens the explanation bulletin
2026-06-09 09:00:56 +04:00
instant992
323c1ff10e Sponsor badge: shimmering heart + tap-to-explain bulletin
- Replace static star with self-animating iridescent ShimmerHeartDrawable
- Move badge to clickable rightDrawable slot; tap shows a Nekogram-style
  bulletin explaining why the badge was granted
- Add en/ru strings; drop unused vector resource
2026-06-09 08:35:21 +04:00
instant992
e926e7afc6 Fix sponsor check endpoint path (/api/auth/mobile/me)
The auth_mobile router is mounted with prefix /api/auth, so the
bare /mobile/me path returned 404. Use the full path.
2026-06-09 08:09:14 +04:00
instant992
51bde550b9 Add sponsor badge next to own name on profile
- SponsorHelper queries FoxCloud /mobile/me by Telegram ID (X-Tg-Id) and caches is_sponsor per account
- Self profile shows a sponsor badge next to the name when is_sponsor is true
- Reactive refresh via new NotificationCenter.sponsorStatusUpdated global event

Verified: TMessagesProj compileReleaseJavaWithJavac succeeds.
2026-06-09 04:34:19 +04:00
instant992
d200a290f8 Support multiple named built-in proxies (5 LTE + 2 WiFi)
- XrayServers now holds a structured server list with per-entry name and local port
- XrayController builds built-in proxies from the list (createBuiltinProxies/byPort)
- ProxyInfo gains builtinName; proxy list shows the configured name
- Built-in proxies keep the same protection: read-only, not editable/shareable
- Credentials stay in git-ignored XrayServers.java; template updated

Verified: TMessagesProj compileReleaseJavaWithJavac succeeds.
2026-06-09 03:42:14 +04:00
instant992
d79c149e3e Add in-app download and silent install for GitHub updates
- ApkInstaller.downloadAndInstall downloads APK by URL with a progress dialog
- Reuses existing PackageInstaller silent-install pipeline via shared File path
- Update dialogs now download in-app instead of opening a browser
- Add UpdateDownloading string

Verified: TMessagesProj compileReleaseJavaWithJavac succeeds.
2026-06-09 03:24:22 +04:00
instant992
12792f77f3 Switch update checker to GitHub Releases
- UpdateHelper now fetches latest release from GitHub API instead of helper bot
- Compares dotted version names, prefers arm64 APK asset, falls back to release page
- Keeps TL_help_appUpdate output contract so existing update UI works unchanged
- Decouples ConfigHelper from update check
2026-06-09 03:00:30 +04:00
instant992
42a780f702 Disable helper-bot data channel, harden WebApp null-check, update branding
- Extra.getHelperBot() returns null on empty username (closes data channel)
- WebAppHelper: guard against null helper bot to prevent NPE
- Disable anti-repackaging signature check for rebranded fork
- Update launcher icons and branding assets
2026-06-09 02:33:57 +04:00
instant992
8e79f2ee9c FoxiGram: Telegram client with built-in Xray VLESS proxy
Based on Nekogram. Key additions:
- Rebrand to FoxiGram (app name, APK name, applicationId com.foxigram.app)
- Embedded Xray (VLESS+Reality) proxy client via JNI libxray.so
- Bundled hidden one-tap proxies (LTE + WiFi), read-only in UI
- Auto-restore proxy on restart, rebind to active network (LTE/WiFi)
- Server credentials externalized to git-ignored XrayServers.java (+ template)
- libxray Go source included; compiled .so, keystore, google-services.json ignored
2026-06-08 16:41:07 +04:00