- 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
- 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
- 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
- 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
- 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)
- 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
- 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'
- 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
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.
- 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
- 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'
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.
- 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
- 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
- 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.
- 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.
- 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