Fujimod
Try your camera firmware in the browser and build Fujimod SD boot files.
أفنون شاشة رئيسية مجانية ومفتوحة المصدر لتلفاز أندرويد: مواقيت الصلاة دون إنترنت، عدّ تنازلي للصلاة القادمة داخل محراب، القبلة، الأذان في وقته، وإذاعة القرآن الكريم.
Translation pending
LifestyleGitHub @egyjsOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Repository information has not been collected yet.
No updates detected yet. GitHub releases will appear here.
Afnon (أفنون): Android TV launcher and home screen for Muslims. Offline prayer times (74 cities), Qibla, adhan/azan, prayer reminders, Ramadan and Friday modes, 16 Quran radio stations and reciters. Arabic and English, for Google TV and TCL.
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗An Android TV home screen built around the prayer day.
Arabic first (RTL) and English · Offline prayer times for 245 cities · 16 adhan voices · Qibla · 19 Quran radio stations and reciters
⬇ Download the APK · Releases · Try it in your browser
إِنَّ الصَّلَاةَ كَانَتْ عَلَى الْمُؤْمِنِينَ كِتَابًا مَّوْقُوتًا · النساء ١٠٣
Indeed, prayer has been decreed upon the believers at fixed times. (An-Nisa 4:103)
Afnon replaces the stock launcher on an Android TV with one quiet screen. The next prayer and a live countdown sit inside a mihrab arch. The day's six times run across the top, your favourite apps sit below, and the call to prayer comes to the TV by itself. Built and tested on a TCL 55P7K (Google TV, Android 12), driven only by the remote's D-pad, and also run on a Super General (CVTE) and a Xiaomi Mi TV (see the notes below).
Afnon started from cleanyourtv:
| Home (English). The clock follows the TV's 12/24-hour setting. Gregorian and Hijri dates, six prayer times with the next one marked, favourites and more apps. | Today's prayers. Every time with its countdown, an adhan on/off bell per prayer, and the Qibla bearing from your city. |
| Quran Radio. A header pill opens the station card. The bars follow the live recitation. | The call. At prayer time the screen comes up over whatever is playing and the adhan plays by itself. |
| Reminder. A card a few minutes before the prayer (a banner when another app is open). | Screensaver. A dim, drifting arch with the clock and the next prayer, plus the radio when it plays. |
| Friday. Jumu'ah replaces Dhuhr, with a Surat al-Kahf reminder. | Ramadan. Iftar and suhoor take over the countdown. |
| All apps. Every launchable app. Hold OK to put one in favourites. | Settings on the TV. Prayer times, reminders and adhan, radio, display and language. |
Method.OMAN_AWQAF). Morocco's start on the Ministry of Habous's rules, recovered from its
timetables (see Habous); Morocco has kept GMT all year since 20 September 2026, so a TV
with older time-zone data needs a GMT+0 zone until its firmware updates. The Hijri date and Ramadan mode always
use the Umm al-Qura calendar, so where local moon sighting differs (the United States, for one) set the offset.tools/fetch-announce.sh below).Afnon has no accounts, no analytics and no ads. The radio is the only feature that uses the
internet, and it connects only to the chosen station's stream, one at a time: stream.radiojar.com (Cairo),
quran-radio.org (Nablus), streaming.zaytonatube.com (Shabab FM), live.kwikmotion.com (Qatar and the Saudi
Quran stations), jrtv-live.ercdn.net (Jordan), partwota.cdn.mgmlcdn.com (Oman) or backup.qurango.net (the
reciters). The list is in Radio.STATIONS. Afnon makes no other network requests, and its
network security config allows plain HTTP for the Cairo stream only.
Your city and settings stay on the TV.
The web preview is a separate static site, not the app. It loads nothing from other sites except the station's stream when you press Play, and keeps your settings in your browser.
| Permission | Why |
|---|---|
INTERNET, WAKE_LOCK | The radio stream, kept playing with the screen off |
RECORD_AUDIO | Required by Android's Visualizer, to read Afnon's own player for the level bars. It does not use the microphone. |
WRITE_SECURE_SETTINGS | Turns the TV's sleep timer off while the radio plays, and puts it back after. Turns Afnon's own remote buttons service back on after a force-stop. On TCL, also writes the remote button mappings (see TCL notes) |
ACCESS_FINE_LOCATION | Android 9+ hides the Wi-Fi name without it; Home shows the name. Afnon never reads the TV's location |
| Accessibility service | Remote button mapping (see RemoteKeys.java) |
No computer needed. Install afnon-installer.apk
on an Android phone (8 or later) on the same Wi-Fi as the TV, open it and follow the screens:
afnon.apk from this repo's releases (skipped when the TV already has it), then the
steps in tools/setup-steps.txt at that release's tag, the same file
tools/install.sh runs.tools/clean-catalog.tsv, with an undo.The installer keeps no copies of what can change: the APK, the setup steps and the cleanup list come from GitHub,
and the cities and apps from Afnon on the TV (SetupProvider), so a new Afnon release needs no new
installer. Source in installer/ (plain Java, an ADB client library and Conscrypt for TLS).
Download afnon.apk from the latest release, then:
export TV=192.168.1.50:5555
adb connect $TV
adb -s $TV install -r afnon.apk
adb -s $TV shell cmd package set-home-activity tv.afnon.home/.MainActivity
adb -s $TV shell settings put secure screensaver_components tv.afnon.home/.AfnonDream
adb -s $TV shell pm grant tv.afnon.home android.permission.RECORD_AUDIO
adb -s $TV shell pm grant tv.afnon.home android.permission.WRITE_SECURE_SETTINGS
adb -s $TV shell pm grant tv.afnon.home android.permission.ACCESS_FINE_LOCATION
Then turn on Afnon remote buttons in the TV's Settings → Accessibility. The APK includes the adhan recordings.
If Home still opens the stock launcher (stock Android TV and Google TV keep theirs ahead of any app), use the
phone installer or tools/install.sh: they turn the stock launcher off behind a safety switch that turns it back
on if Afnon doesn't come up, and the installer's cleanup can undo it.
You need a computer with adb, JDK 17, the Android SDK (platform 34), and the TV with Developer options → USB / Network debugging on.
git clone https://github.com/egyjs/afnon-android-tv-launcher.git
cd afnon-android-tv-launcher
export TV=192.168.1.50:5555 # your TV's address
adb connect $TV # accept the prompt on the TV
bash tools/install.sh # fetches the adhans, builds, installs, sets Afnon as home
install.sh runs tools/fetch-adhans.sh the first time. That script downloads the 16 recordings
from abodehq/Athan-MP3 (and two from
meypod/audio_files). They aren't in this repo because
those collections have no licence.
The spoken reminder and «حان الآن موعد صلاة …» are 12 short clips made on your machine: install.sh runs
tools/fetch-announce.sh the first time, which reads tools/announce-lines.txt with a Microsoft neural Arabic voice
through edge-tts (pip install edge-tts; VOICE= picks another) into
app/src/main/assets/announce/. They aren't in this repo; the release APK includes them. Without them
those two stay silent and everything else works.
Close network debugging when you're done. Port 5555 is plain text, and on some firmware any
device on your network can get a shell through it. Switch USB debugging and Network debugging off
in Developer options, revoke the USB debugging authorisations, reboot, and check that
nc -vz <tv-ip> 5555 fails.
| I want to… | Do this |
|---|---|
| Change favourites | All apps → hold OK on an app → Put in favourites instead of… |
| Change city, method, adhan voice, radio options | The remote's Settings button, or the gear on Home |
| Point a remote button at another app | Edit the table at the top of RemoteKeys.java, then bash tools/install.sh |
| Change colours or the star pattern | afnon-mihrab/tokens.json (and tokens.night.json for night mode), then npm run tokens in site/; Ui.starLattice |
| Disable a stock app | bash tools/disable.sh <package> (reversible; logged to state/disabled.log) |
| Re-enable an app | bash tools/enable.sh <package>, or on the TV: Settings → Apps → See all apps → Show system apps → the app → Enable |
| Go back to stock | bash tools/restore.sh, then reboot. Re-enables everything in the log, restores home, screensaver and sleep timer, and uninstalls Afnon. |
adb shell am start -n tv.afnon.home/.MainActivity --es test friday # or ramadan, now (back to today)
adb shell am start -n tv.afnon.home/.MainActivity --es test reminder # Home's reminder card, spoken
adb shell am start -n tv.afnon.home/.MainActivity --es test call # the call screen, 8 s later
adb shell am start -n tv.afnon.home/.MainActivity --es test banner # the banner and its voice, 8 s later (open another app)
adb shell am start -n tv.afnon.home/.MainActivity --es test announce # «حان الآن موعد صلاة …», 8 s later
adb shell am start -n tv.afnon.home/.MainActivity --es test radio # radio on / off
adb shell am start -n tv.afnon.home/.MainActivity --es station nablus # pick a station (ids in Radio.STATIONS)
bash tools/shot.sh home # screenshot to state/shots/
Some of this is TCL-specific. Each piece fails quietly on other brands:
com.tcl.settings.SHOW_WINDOW, Type=AudioOnly). Elsewhere Afnon falls back to a black,
dimmed screen.KEYCODE_NOTIFICATION and the browser key as code 4159.TclKeys.java), so the accessibility
service doesn't filter keys and holding Volume keeps changing it. Elsewhere the service filters keys itself.install.sh grants TCL's APP_AUTO_START so the remote buttons service survives a reboot.screen_brightness setting does nothing on this TV, because TCL drives the backlight
itself.Tested on one Super General TV (CVTE board, Android 9). CVTE makes the boards in many budget TVs; Afnon detects them by their hotkey service and each piece is skipped elsewhere:
/vendor/menu_config_xml/hotkey.xml), so the remote
buttons service doesn't filter keys there (FirmwareKeys.java) and holding Volume keeps changing it.com.cvte.tv.globalui) itself.redirects preference, e.g. com.ecloud.eshare.server=com.droidlogic.miracast. Empty by default.key_filter preference (on/off) forces it.install.sh grants location, which Android 9+ needs before Home can show the Wi-Fi name.Tested on one Xiaomi Mi TV (MiTV-MOOQ0, Android TV 10, 1.8 GB RAM, MediaTek), after a debloat with
cleanyourtv's list for that model. Home, the app list, favourites,
the screensaver and the remote buttons service run (its buttons are not checked with the remote yet), and install.sh makes Afnon Home there (it turns the stock
launcher off behind its safety switch). Notes:
KEYCODE_MEDIA_RECORD (130). Afnon doesn't map it yet; open Live TV from
the favourites for HDMI.app/src/main/java/tv/afnon/home/
MainActivity Home: clock, prayer row, favourites, radio pill and card, Inputs panel, focus map
Inputs The TV's sources for the Inputs panel, and its own inputs screen
PrayerDayActivity Today's prayers, Qibla dial, room direction
AllAppsActivity Every app; hold OK to arrange favourites
SettingsActivity On-TV settings (prayer, reminders, radio, display, network, device)
NowActivity The call to prayer
AfnonDream Screensaver
PrayerWatch Reminders, banner and the call, run inside the accessibility service
RemoteKeys Remote button mapping
TclKeys The same buttons through TCL's own remapping, so held keys still repeat
Radio, RadioBars Quran Radio player and its level bars
ScreenOffActivity Screen off while listening (TCL Audio Only, or a black fallback)
Announce The spoken reminder and «حان الآن موعد صلاة …»
PrayerDay, Prefs, Reminders, Adhans, Text, Tokens, Ui …
installer/ The phone app that installs and sets up Afnon over ADB (Finder, Adb, Tv, Setup, Personalise)
tools/setup-steps.txt What Afnon needs after install: one list for install.sh and the phone installer
tools/clean-catalog.tsv The cleanup list, built weekly from cleanyourtv by tools/gen-clean-catalog.py
tools/ install, restore, disable/enable, fetch-adhans, fetch-announce, screenshot
docs/screenshots/ the images above, all from the real TV
أفنون شاشة رئيسية لتلفاز أندرويد، تبدأ من يوم الصلاة. الصلاة القادمة والعدّ التنازلي في قلب محراب، ومواقيت اليوم الستة في الأعلى، وتطبيقاتك المفضلة تحتها. ويأتي الأذان إلى التلفاز وحده في وقته.
للتثبيت حمّل ملف afnon.apk من صفحة الإصدارات، أو ابنِه من المصدر كما في قسم Install أعلاه. وللعودة إلى الشاشة الأصلية شغّل tools/restore.sh ثم أعد تشغيل
التلفاز. وبعد الانتهاء أغلق «تصحيح الأخطاء عبر الشبكة» في خيارات المطوّرين.
fetch-adhans.sh downloads them, and the release APK includes them with this credit. If you
hold the rights to a recording and want it removed, open an issue.Contributions are welcome; see CONTRIBUTING.md. Released under the MIT licence.