Real-time Tanzania Shilling Forex Tracker ยท Complete Ground-Up Rewrite
Live exchange rates ยท BoT official data ยท Price alert notifications ยท 5-tab modular UI ยท Precious metals ยท Forex calculator ยท Light & dark themes
โ ๏ธ v4.0.0 is a full architectural rewrite. Package name, launcher icon, app structure, and all source files have changed. See the Migration Notice section before upgrading.
| Change | v2.3.0 | v4.0.0 | |
|---|---|---|---|
| ๐ฆ | Package name | com.willykez.tanzsx |
com.willykez.fxetcher |
| ๐ท๏ธ | App name | TanzRate Pro |
Fxetcher |
| ๐จ | Launcher icon | Adaptive XML (mipmap set) | Custom adaptive icon with new foreground + PNG in mipmap-xhdpi |
| ๐๏ธ | Architecture | Single monolithic TanzaniaForexApp.java |
Modular multi-file: FXetcherApp + HomeScreen + Screens + CalcScreen + UiKit + Tokens |
| ๐๏ธ | Source layout | com.willykez.tanzsx.* |
com.willykez.fxetcher.* |
| ๐ฑ | Widget | RateWidget.java (AppWidgetProvider) |
Removed โ no home-screen widget in v4 |
| ๐จ | Theme engine | Theme inner class |
Tokens.java โ Material3-mirrored design token system |
| ๐ | UI construction | Mix of XML + Java | Fully code-driven via UiKit.java (no XML activities) |
| ๐ข | Currencies | 14 | 25 (see full list below) |
| ๐งฎ | Calculator | None | CalcScreen โ full forex keypad + history |
| โญ | Watchlist | Pinned conversions strip | Long-press any tile โ Watchlist card in Markets tab |
| ๐ | Notifications | 3 channels (alerts / updates / widget) | 2 channels: price_alerts (HIGH) ยท rate_updates (LOW) |
| ๐ | Loading state | Pulsing skeleton cards | ShimmerFrameLayout via com.facebook.shimmer:shimmer:0.5.0 |
| ๐ | Pull-to-refresh | Manual refresh button | SwipeRefreshLayout (tri-color: gold, blue, green) |
| ๐ | targetSdkVersion | 35 | 36 |
| Feature | Detail | |
|---|---|---|
| ๐๏ธ | Full Modular Architecture | App split across FXetcherApp, HomeScreen, Screens (Convert / Markets / Settings), CalcScreen, UiKit, Tokens, CurrencyMeta, AlertNotificationManager |
| ๐จ | Design Token System | Tokens.java โ every colour, spacing, radius, and typography constant in one file; two themes (dark default, light) swapped via Tokens.apply(isDark) |
| ๐๏ธ | UiKit Component Library | UiKit.java โ reusable card(), tv(), divider(), topPill(), sectionHeader(), rippleOver(), scaleAnim(), snack(), and more โ all programmatic, zero XML activities |
| ๐ฑ | 25-Currency Coverage | Expanded from 14 โ 25: USD EUR GBP JPY CNY INR AED ZAR KES TZS UGX RWF + precious metals XAU/XAG + CAD CHF SGD MYR SAR QAR BRL MXN NGN EGP ETB |
| ๐ | Africa Tab | Dedicated East/Central African currency section on the Home screen (KES, UGX, RWF, ZAR, AED, NGN, EGP, ETB) |
| ๐ฐ | Precious Metals Extended | Gold & Silver shown per troy ounce, gram, and kilogram with tap-to-drill metal bottom sheet |
| ๐งฎ | Forex Calculator (CalcScreen) |
Dedicated calculator tab โ numeric keypad, currency chip selector, swap direction, live rate card, last-20-calculations history with clear |
| โญ | Watchlist (Markets Tab) | Long-press any major currency tile to pin it; persistent across sessions via SharedPreferences |
| ๐ | Price Alert System | Set above/below thresholds per currency; alerts fire as HIGH-priority notifications with colour-coded icons |
| ๐ฆ | BoT Official Rates (Home) | Live buy/sell table scraped from bot.go.tz using Jsoup; cached, pull-to-refresh, timestamped |
| ๐ | Shimmer Loading Skeleton | ShimmerFrameLayout placeholder rows shown while first fetch completes |
| ๐ | Pull-to-Refresh | SwipeRefreshLayout on Home refreshes both live rates and BoT table simultaneously |
| โก | Quick Convert Bottom Sheet | Tap any top-bar pill (USD ยท EUR ยท XAU) to open an inline converter without leaving the current screen |
| ๐ฅ | Metal Detail Bottom Sheet | Tap the Gold pill or any metals row for a full oz/gram/kg breakdown with accent-coloured card |
| โฑ๏ธ | Auto-Refresh | Toggle in top bar; configurable 1โ60 min interval; ScheduledExecutorService with ConcurrentHashMap for thread-safe rate storage |
| ๐ | Dark / Light Theme | Full dual-theme support; preference persisted; all colours from Tokens โ no hardcoded values in UI code |
| ๐ | Calculator History | Last 20 forex calculations stored as JSON in SharedPreferences; clearable |
| ๐ | Copy to Clipboard | Tap copy icon on converter result or calculator result |
| ๐ก | Dual Data Sources | Primary: ExchangeRate-API (forex) + MetalPriceAPI (metals); secondary: Bank of Tanzania live scrape |
TanzRate-Pro/
โโโ app/src/main/java/com/willykez/fxetcher/
โโโ FXetcherApp.java # Root Activity โ top bar, nav bar, tab switching, fetch orchestration
โโโ HomeScreen.java # Home tab โ shimmer, live rates grid, BoT table, metals, pull-to-refresh
โโโ Screens.java # ConvertScreen ยท MarketsScreen ยท SettingsScreen (all in one file)
โโโ CalcScreen.java # Forex Calculator tab โ keypad, currency chips, history
โโโ AlertNotificationManager.java # Notification channels, rate-update + price-alert builders
โโโ CurrencyMeta.java # Single source of truth: 25 currency codes, names, symbols, flags
โโโ Tokens.java # Design token system: colours, spacing, typography (dark + light)
โโโ UiKit.java # Programmatic UI component library (card, tv, pill, anim, etc.)
โโโ FileUtil.java # File I/O helpers
โโโ SketchwareUtil.java # Utility helpers
โโโ MainActivity.java # Thin launcher โ delegates to FXetcherApp
โโโ willykez.java # Application subclass (app-level init)
โโโ app/src/main/res/
โโโ drawable/
โ โโโ ic_launcher.xml # Adaptive icon definition
โ โโโ ic_launcher_foreground.xml # Vector foreground layer
โ โโโ ic_launcher_background.xml # Vector background layer
โโโ mipmap-xhdpi/
โ โโโ ic_launcher.png # Raster launcher icon (xhdpi)
โโโ layout/
โ โโโ main.xml # Root FrameLayout for activity
โ โโโ shimmer_item.xml # Shimmer placeholder row layout
โโโ values/
โโโ strings.xml # App name: "Fxetcher"
โโโ colors.xml
โโโ styles.xml
- Pull-to-refresh (
SwipeRefreshLayout) for both live rates + BoT data - Shimmer loading skeleton on first launch
- Live rate rows with animated โฒ/โผ change indicators (colour flash)
- East Africa section โ regional currencies at a glance
- Precious Metals card โ Gold & Silver per oz, gram, kg
- Bank of Tanzania official rates โ scraped live, cached, timestamped
- Live real-time calculation as you type
- 25 currencies, both directions, inverse rate
- One-tap swap with rotation animation
- Quick-amount chips (10 ยท 50 ยท 100 ยท 500 ยท 1K ยท 5K ยท 10K ยท 50K)
- Conversion history (last 20), clearable
- Copy result to clipboard
- Watchlist โ long-press any tile to pin/unpin; persisted
- Major currencies grid โ flag tiles, live rate, trend arrow
- Africa card โ EAC + West/North Africa rates
- Precious metals extended card
- Price Alert system โ set above/below targets; fires HIGH-priority notification
- Forex-specific numeric keypad
- Currency chip selector (scrollable)
- Swap direction (to/from TZS)
- Live exchange rate reference card
- Last 20 calculations stored in
SharedPreferences; clearable
- Auto-refresh toggle + interval picker (1 โ 60 min)
- Dark / Light theme toggle
- Notification preferences
- Data source info (API keys + BoT)
- Clear cached rates
- Android Studio or Sketchware Pro
- minSdkVersion 21 (Android 5.0 Lollipop)
- targetSdkVersion 36
- Java source compatibility
implementation 'androidx.appcompat:appcompat:1.7.1'
implementation 'com.google.android.material:material:1.12.0'
implementation 'com.facebook.shimmer:shimmer:0.5.0'
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
implementation 'org.jsoup:jsoup:1.17.2' // BoT live scraping<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
โ ๏ธ Move these toBuildConfigor a secrets manager before any public release.
| Service | Endpoint | Used for | Free tier |
|---|---|---|---|
| ExchangeRate-API | v6.exchangerate-api.com/v6/.../latest/USD |
25-currency forex rates | 1,500 req/month |
| MetalPriceAPI | api.metalpriceapi.com/v1/latest |
Gold (XAU) & Silver (XAG) | 100 req/month |
| Bank of Tanzania | bot.go.tz/ExchangeRate/excRates |
Official buy/sell TZS rates | Open web scrape |
| Step | Action |
|---|---|
| 1 | Uninstall the old com.willykez.tanzsx build before installing v4 โ package name changed, they will not conflict but will coexist as separate apps |
| 2 | No RateWidget in v4 โ remove the old widget from your home screen before upgrading |
| 3 | SharedPreferences from v2.x are under a different package and will not carry over automatically |
| 4 | Update your build.gradle applicationId to com.willykez.fxetcher |
| 5 | Remove any references to com.willykez.tanzsx package in manifests or deep-link URIs |
BREAKINGPackage renamed:com.willykez.tanzsxโcom.willykez.fxetcherBREAKINGApp name changed:TanzRate ProโFxetcherBREAKINGLauncher icon replaced with new adaptive icon + PNG assetBREAKINGHome screen widget (RateWidget) removedNEWFully modular architecture: 12 source files vs 1 monolithNEWTokens.javadesign token system (Material3-mirrored naming)NEWUiKit.javaprogrammatic component libraryNEWCalcScreenโ dedicated forex calculator tab with historyNEW25-currency support (was 14); added CAD, CHF, SGD, MYR, SAR, QAR, BRL, MXN, NGN, EGP, ETBNEWAfrica regional currency card (Home + Markets)NEWWatchlist โ long-press to pin any currency; persistedNEWShimmer loading skeleton viafacebook/shimmerNEWSwipeRefreshLayout pull-to-refresh on HomeNEWQuick-convert bottom sheet from top bar pillsNEWMetal detail bottom sheet (oz / gram / kg)NEWtargetSdkVersionbumped to 36CHANGENotification channels reduced from 3 to 2 (widget channel removed with widget)
- Adaptive light/dark theme engine
- Home screen widget (
RateWidget.java) - Rich price-alert notifications
- Smart "For You" dashboard card
- Drag-reorder customisable layout
- Skeleton loading animation
- Live BoT rates via Jsoup
AlertNotificationManagerwith channel setup
- Conversion history, quick-amount chips, clipboard
- Bottom navigation, top bar pills, live converter
- Single-activity forex tracker, 14 currencies
- โ No personal data collected
- โ No account required
- โ No analytics or tracking SDKs
- โ All data stored locally (SharedPreferences)
- โ HTTPS for all API calls
- โ No ads ยท No subscriptions ยท Free
MIT License โ Copyright (c) 2026 Willykez
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software to use, copy, modify, merge, publish, distribute and/or sell
copies, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND.
Developer: Willykez
Email: willykez01@gmail.com
Package: com.willykez.fxetcher
GitHub: @Willykez
Made with โค๏ธ in Tanzania ๐น๐ฟ ยท If this helped you, please โญ the repo!